Skip to content

Commit 68f8659

Browse files
committed
used build script instead of multiple npm tasks for build & avoid unneeded jison wrapper code
1 parent 9703c8e commit 68f8659

File tree

4 files changed

+108
-20
lines changed

4 files changed

+108
-20
lines changed

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,20 @@
2727
},
2828
"dependencies": {
2929
"JSV": ">= 4.0.x",
30-
"chalk": "^4.1.0"
30+
"chalk": "^4.1.0",
3131
"lodash": "^4.17.15"
3232
},
3333
"devDependencies": {
34+
"fs-extra": "^9.0.1",
3435
"jison": "^0.4.18",
3536
"test": "*",
3637
"uglify-js": "^3.10.0"
3738
},
3839
"scripts": {
39-
"build": "npm run build:jison && npm run build:mv && npm run build:web && npm run build:webmin",
40-
"build:jison": "jison src/jsonlint.y src/jsonlint.l",
41-
"build:mv": "node -e require('fs').renameSync('jsonlint.js','lib/jsonlint-ext.js')",
42-
"build:web": "node scripts/bundle.js > web/jsonlint-ext.js",
43-
"build:webmin": "node scripts/bundle.js | uglifyjs > web/jsonlint-ext.min.js",
40+
"build": "node scripts/build.js",
41+
"build:jison": "node scripts/build-jison.js src/jsonlint.y src/jsonlint.l",
42+
"build:lib": "node scripts/bundle.js jsonlint.js lib/jsonlint-ext.js web/jsonlint-ext.js",
43+
"build:rm": "node -e require('fs').unlinkSync('jsonlint.js')",
4444
"test": "node test/all-tests.js"
4545
},
4646
"optionalDependencies": {}

scripts/build-jison.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
2+
var fs = require('fs-extra');
3+
var path = require('path');
4+
var cli = require('jison/lib/cli');
5+
6+
function processGrammar(raw, lex, opts) {
7+
var grammar,
8+
parser;
9+
grammar = cli.processGrammars(raw, lex, opts.json);
10+
parser = cli.generateParserString(opts, grammar);
11+
return parser;
12+
}
13+
14+
function buildGrammer (rawFile, lexFile, options){
15+
return Promise.all([
16+
fs.readFile(rawFile, 'utf-8'),
17+
fs.readFile(lexFile, 'utf-8')
18+
]).then(function(files){
19+
var opts = Object.assign({
20+
moduleName: 'jsonlint',
21+
'module-type': 'js'
22+
}, options || {});
23+
return processGrammar(files[0], files[1], opts);
24+
})
25+
}
26+
27+
module.exports = {
28+
build: buildGrammer
29+
}
30+
31+
if (require.main === module) {
32+
var rawFile = path.resolve(__dirname, '..', process.argv[2]);
33+
var lexFile = path.resolve(__dirname, '..', process.argv[3]);
34+
35+
buildGrammer(rawFile, lexFile).then(function(parser){
36+
var outFile = path.resolve(__dirname, '..', 'jsonlint.js')
37+
return fs.writeFile(outFile, parser, 'utf-8');
38+
});
39+
}

scripts/build.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
2+
var fs = require('fs-extra');
3+
var path = require('path');
4+
5+
var buildJison = require('./build-jison');
6+
var bundle = require('./bundle');
7+
8+
var rawFile = path.resolve(__dirname, '..', 'src/jsonlint.y');
9+
var lexFile = path.resolve(__dirname, '..', 'src/jsonlint.l');
10+
11+
buildJison.build(rawFile, lexFile).then(function(parser){
12+
var libFile = path.resolve(__dirname, '..', 'lib/jsonlint-ext.js');
13+
var webFile = path.resolve(__dirname, '..', 'web/jsonlint-ext.js');
14+
15+
bundle.bundleTo(parser, [libFile, webFile]).then(function(bundledCode){
16+
17+
var minFileName = 'jsonlint-ext.min.js'
18+
var minFile = path.resolve(__dirname, '..', 'web', minFileName);
19+
var minified = bundle.minifySync(bundledCode, minFileName);
20+
21+
return Promise.all([
22+
fs.writeFile(minFile, minified.code, 'utf-8'),
23+
fs.writeFile(minFile + '.map', minified.map, 'utf-8')
24+
])
25+
});
26+
})

scripts/bundle.js

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,62 @@
1-
var fs = require('fs');
1+
2+
var fs = require('fs-extra');
23
var path = require('path');
4+
var uglify = require('uglify-js');
35

46
var template = require('./template');
57

68
function bundle(srcPath){
79

8-
var srcFile = fs.existsSync(srcPath)? fs.readFileSync(srcPath, 'utf8') : srcPath;
10+
var promise = fs.existsSync(srcPath)? fs.readFile(srcPath, 'utf8') : Promise.resolve(srcPath);
911

10-
var source = template.preamble + template.umdHeader +
11-
srcFile +
12-
template.moduleExports + template.umdFooter;
12+
return promise.then(function(srcFile){
13+
var source = template.preamble + template.umdHeader +
14+
srcFile +
15+
template.moduleExports + template.umdFooter;
1316

14-
return source;
17+
return source;
18+
});
1519
}
1620

1721
function bundleTo(srcPath, targets){
18-
var source = bundle(srcPath);
19-
var t;
20-
for(var i=0,size=targets.length; i < size; ++i){
21-
t = targets[i];
22-
fs.writeFileSync(path.resolve(__dirname, '..', t), source);
23-
}
22+
return bundle(srcPath).then(function(source){
23+
var t, files = [];
24+
if(!Array.isArray(targets)){
25+
targets = [targets];
26+
}
27+
for(var i=0,size=targets.length; i < size; ++i){
28+
t = targets[i];
29+
files.push(fs.writeFile(path.resolve(__dirname, '..', t), source));
30+
}
31+
return Promise.all(files).then(function(){
32+
return source;
33+
});
34+
});
35+
}
36+
37+
function minifySync(code, targetFileName){
38+
return uglify.minify(code, {
39+
sourceMap: {
40+
filename: targetFileName,
41+
url: targetFileName + '.map'
42+
}
43+
});
2444
}
2545

2646
module.exports = {
2747
bundle: bundle,
28-
bundleTo: bundleTo
48+
bundleTo: bundleTo,
49+
minifySync: minifySync
2950
}
3051

3152
if (require.main === module) {
3253

3354
if(process.argv.length === 2){
3455

3556
var srcPath = path.resolve(__dirname, '..', 'jsonlint.js');
36-
console.log(bundle(srcPath));
57+
bundle(srcPath).then(function(src){
58+
console.log(src);
59+
});
3760

3861
} else {
3962

0 commit comments

Comments
 (0)