Skip to content

Commit 2619e18

Browse files
committed
Added minification option + test + example
1 parent 9eb5b22 commit 2619e18

File tree

8 files changed

+149
-2
lines changed

8 files changed

+149
-2
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
# Don't commit generated example output
33

44
Examples/Writing/*.graph
5+
Examples/Minify/*.graph

Examples/Minify/App.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
2+
import { stringify , Node } from 'Graph'
3+
import { file } from './Paths.js'
4+
5+
6+
const
7+
{ writeTextFile } = Deno ,
8+
{ clear , log } = console ;
9+
10+
11+
clear();
12+
13+
log('Writing minified Example.graph');
14+
15+
const avatarPoly = [
16+
[ 0 , 0 ] ,
17+
[ 0 , 1 ] ,
18+
[ 1 , 1 ] ,
19+
[ 1 , 0 ]
20+
]
21+
22+
const avatarData =
23+
avatarPoly.flat();
24+
25+
26+
const position = new Node;
27+
position.assign('X',60);
28+
position.assign('Y',40);
29+
position.assign('Z',20);
30+
31+
const avatar = new Node;
32+
avatar.assign('Testing',avatarData);
33+
34+
const player = new Node;
35+
player.assign('Model','Default');
36+
player.assign('Position',position);
37+
player.assign('Player',avatar);
38+
39+
40+
const graph = new Node;
41+
graph.assign('Player',player);
42+
43+
log(graph.toString());
44+
45+
46+
const text = stringify(graph,{
47+
minify : true
48+
});
49+
50+
await writeTextFile(file,text);

Examples/Minify/Paths.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
import { fromFileUrl , dirname , join } from 'Path'
3+
4+
5+
const folder = dirname(fromFileUrl(import.meta.url));
6+
7+
8+
export const file =
9+
join(folder,'Example.graph');

Examples/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,8 @@ deno task example-reading
2424
deno task example-writing
2525
```
2626

27+
```sh
28+
deno task example-minify
29+
```
30+
2731
<br>

Source/Minify.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
2+
import Node from './Node.js'
3+
4+
function toString ( item ){
5+
switch ( typeof item ){
6+
case 'object' :
7+
8+
if( item instanceof Node )
9+
return minify(item);
10+
11+
let { name , value } = item;
12+
13+
if(typeof value === 'string')
14+
value = `"${ value }"`;
15+
16+
return `${ name }{${ value }}`
17+
case 'string' :
18+
return `"${ item }"`
19+
default:
20+
return `${ item }`
21+
}
22+
}
23+
24+
25+
export default function minify ( graph ){
26+
27+
const { items } = graph;
28+
29+
return items
30+
.map(toString)
31+
.join('')
32+
}

Source/Stringify.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
import minify from './Minify.js'
23
import Node from './Node.js'
34

45

@@ -59,10 +60,14 @@ function toContent ( node ){
5960
}
6061

6162

62-
export default function ( graph ){
63+
export default function ( graph , options = {} ){
64+
65+
if(options.minify)
66+
return minify(graph,options);
67+
6368
return toContent(graph)
6469
}
6570

66-
export function printify ( graph ){
71+
export function printify ( graph ){
6772
return stringify(graph)
6873
}

Tests/Stringify/Minify.test.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
2+
import { stringify , Node } from 'Graph'
3+
import { assertEquals } from 'Assert'
4+
5+
6+
const minified = 'Y{40}Z{20}X{60}Testing{0,0,0,1,1,1,1,0}Model{"Default"}';
7+
8+
Deno.test(`Minified input is as expected`,() => {
9+
10+
const avatarPoly = [
11+
[ 0 , 0 ] ,
12+
[ 0 , 1 ] ,
13+
[ 1 , 1 ] ,
14+
[ 1 , 0 ]
15+
]
16+
17+
const avatarData =
18+
avatarPoly.flat();
19+
20+
21+
const position = new Node;
22+
position.assign('X',60);
23+
position.assign('Y',40);
24+
position.assign('Z',20);
25+
26+
const avatar = new Node;
27+
avatar.assign('Testing',avatarData);
28+
29+
const player = new Node;
30+
player.assign('Model','Default');
31+
player.assign('Position',position);
32+
player.assign('Player',avatar);
33+
34+
35+
const graph = new Node;
36+
graph.assign('Player',player);
37+
38+
const text = stringify(graph,{
39+
minify : true
40+
});
41+
42+
assertEquals(text,minified);
43+
44+
})

deno.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55

66
"test-example-writing" : "deno run --watch --allow-write Examples/Writing/App.js" ,
77
"test-example-reading" : "deno run --watch --allow-read Examples/Reading/App.js" ,
8+
"test-example-minify" : "deno run --watch --allow-write Examples/Minify/App.js" ,
89

910
"example-writing" : "deno run --allow-write Examples/Writing/App.js" ,
1011
"example-reading" : "deno run --allow-read Examples/Reading/App.js" ,
12+
"example-minify" : "deno run --allow-read Examples/Minify/App.js" ,
1113

1214
"test" : "deno test --watch Tests"
1315
}

0 commit comments

Comments
 (0)