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 - name: Run the test
run: | run: |
npm ci npm ci
npm run build
npx playwright install npx playwright install
npm run test-ci npm test

View File

@ -163,9 +163,8 @@
"src" "src"
], ],
"scripts": { "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", "build": "./script/build-dist.sh && ./script/build-module.js",
"test": "jshint src && mocha -R nyan test/mocha*js && npx playwright test && npx lockfile-lint -p package-lock.json", "test": "npm run build && ./script/test-all.sh"
"test-ci": "jshint src && mocha -R spec test/mocha*js && npx playwright test && npx lockfile-lint -p package-lock.json"
}, },
"devDependencies": { "devDependencies": {
"@babel/parser": "7.15.8", "@babel/parser": "7.15.8",
@ -187,6 +186,7 @@
}, },
"directories": { "directories": {
"dist": "dist", "dist": "dist",
"script": "script",
"src": "src", "src": "src",
"test": "test" "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 #!/usr/bin/env node
/* jshint esversion: 6 */
const fs = require('fs'); 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]);
});
/*/////////////// console.log(`Generate ${dest}`);
// ua-parser.mjs
//////////////*/
fs.writeFileSync('src/module/ua-parser.mjs', fs.writeFileSync(dest,
`// Generated ESM version of UAParser.js `// Generated ESM version of UAParser.js ${title}
// DO NOT EDIT THIS FILE! // DO NOT EDIT THIS FILE!
// Source: /src/ua-parser.js // Source: /src/ua-parser.js
` + fs.readFileSync('src/ua-parser.js','utf-8').replace(/\(func[\s\S]+strict\';/ig,'') ${text}`, 'utf-8');
.replace(/esversion\: 3/ig, 'esversion: 6') };
.replace(/\/[\/\s]+export[\s\S]+/ig,'export {UAParser};'),'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 // ua-parser-enum.mjs
////////////////////*/ generateMJS('enum', [[/module\.exports =/ig, 'export']]);
fs.writeFileSync('src/module/ua-parser-enum.mjs', // ua-parser-extension.mjs
`// Generated ESM version of UAParser.js enums generateMJS('extension', [[/module\.exports =/ig, 'export']]);
// 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');

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