Create build+test scripts

This commit is contained in:
Faisal Salman 2023-04-14 23:43:09 +07:00
parent 35c2b91534
commit 5a26ac146e
5 changed files with 81 additions and 35 deletions

View File

@ -19,6 +19,5 @@ jobs:
- name: Run the test
run: |
npm ci
npm run build
npx playwright install
npm run test-ci
npm test

View File

@ -163,9 +163,8 @@
"src"
],
"scripts": {
"build": "uglifyjs src/ua-parser.js -o dist/ua-parser.min.js --comments '/^ UA/' && uglifyjs src/ua-parser.js -o dist/ua-parser.pack.js --comments '/^ UA/' --compress --mangle && node script/build-module.js",
"test": "jshint src && mocha -R nyan test/mocha*js && npx playwright test && npx lockfile-lint -p package-lock.json",
"test-ci": "jshint src && mocha -R spec test/mocha*js && npx playwright test && npx lockfile-lint -p package-lock.json"
"build": "./script/build-dist.sh && ./script/build-module.js",
"test": "npm run build && ./script/test-all.sh"
},
"devDependencies": {
"@babel/parser": "7.15.8",
@ -187,6 +186,7 @@
},
"directories": {
"dist": "dist",
"script": "script",
"src": "src",
"test": "test"
},

13
script/build-dist.sh Executable file
View File

@ -0,0 +1,13 @@
#!/usr/bin/env bash
SRC_PATH="src/ua-parser.js"
MIN_PATH="dist/ua-parser.min.js"
PACK_PATH="dist/ua-parser.pack.js"
# minified
echo "Generate ${MIN_PATH}"
uglifyjs $SRC_PATH -o $MIN_PATH --comments "/^ UA/"
# packed
echo "Generate ${PACK_PATH}"
uglifyjs $SRC_PATH -o $PACK_PATH --comments "/^ UA/" --compress --mangle

73
script/build-module.js Normal file → Executable file
View File

@ -1,40 +1,53 @@
#!/usr/bin/env node
/* jshint esversion: 6 */
const fs = require('fs');
const PATH = {
main : {
src : 'src/ua-parser.js',
dest : 'src/module/ua-parser.mjs',
title : ''
},
enum : {
src : 'src/ua-parser-enum.js',
dest :'src/module/ua-parser-enum.mjs',
title : 'enum'
},
extension : {
src : 'src/ua-parser-extension.js',
dest : 'src/module/ua-parser-extension.mjs',
title : 'extension'
}
};
const generateMJS = (module, replacers) => {
const { src, dest, title } = PATH[module];
let text = fs.readFileSync(src, 'utf-8');
replacers.forEach(replacer => {
text = text.replace(replacer[0], replacer[1]);
});
/*///////////////
// ua-parser.mjs
//////////////*/
console.log(`Generate ${dest}`);
fs.writeFileSync('src/module/ua-parser.mjs',
`// Generated ESM version of UAParser.js
fs.writeFileSync(dest,
`// Generated ESM version of UAParser.js ${title}
// DO NOT EDIT THIS FILE!
// Source: /src/ua-parser.js
` + fs.readFileSync('src/ua-parser.js','utf-8').replace(/\(func[\s\S]+strict\';/ig,'')
.replace(/esversion\: 3/ig, 'esversion: 6')
.replace(/\/[\/\s]+export[\s\S]+/ig,'export {UAParser};'),'utf-8');
${text}`, 'utf-8');
};
if (!fs.existsSync('src/module')) {
fs.mkdirSync('src/module', { recursive: true });
}
// ua-parser.mjs
generateMJS('main', [
[/\(func[\s\S]+strict\';/ig, ''],
[/esversion\: 3/ig, 'esversion: 6'],
[/\/[\/\s]+export[\s\S]+/ig,'export {UAParser};']
]);
/*/////////////////////
// ua-parser-enum.mjs
////////////////////*/
generateMJS('enum', [[/module\.exports =/ig, 'export']]);
fs.writeFileSync('src/module/ua-parser-enum.mjs',
`// Generated ESM version of UAParser.js enums
// DO NOT EDIT THIS FILE!
// Source: /src/ua-parser-enum.js
` + fs.readFileSync('src/ua-parser-enum.js','utf-8')
.replace(/module\.exports =/ig,'export'),'utf-8');
/*//////////////////////////
// ua-parser-extension.mjs
/////////////////////////*/
fs.writeFileSync('src/module/ua-parser-extension.mjs',
`// Generated ESM version of UAParser.js extensions
// DO NOT EDIT THIS FILE!
// Source: /src/ua-parser-extension.js
` + fs.readFileSync('src/ua-parser-extension.js','utf-8')
.replace(/const UA.+\)/ig,'import UAParser from \'ua-parser-js\'')
.replace(/module\.exports =/ig,'export'),'utf-8');
// ua-parser-extension.mjs
generateMJS('extension', [[/module\.exports =/ig, 'export']]);

21
script/test-all.sh Executable file
View File

@ -0,0 +1,21 @@
#!/usr/bin/env bash
echo '
- lint js code
'
jshint src && jshint script || exit 1
echo '
- test using mocha
'
mocha -R list test/mocha*js || exit 1
echo '
- test using playwright
'
npx playwright test || exit 1
echo '
- lint lockfile
'
npx lockfile-lint -p package-lock.json || exit 1