UNPKG

cdp-lib

Version:

Contains npm modules used primarily by cdp boilerplate generator.

160 lines (143 loc) 5.58 kB
/* eslint-env node, es6 */ /* eslint-disable no-regex-spaces */ 'use strict'; const fs = require('fs'); const path = require('path'); const glob = require('glob'); const banner = require('./banner'); const srcmap = require('./srcmap'); const config = require('../project.config'); const PACKAGE_NAME = config.pkg.name; const NAMESPACE = config.main ? (config.main.namespace || '') : ''; const SOURCE_MAP_NAMESPACE = (() => { if (NAMESPACE) { return NAMESPACE + ':///' + PACKAGE_NAME + '/'; } else { return PACKAGE_NAME + ':///'; } })(); /////////////////////////////////////////////////////////////////////// // common: function update_srcmap_namespace(code, options) { let srcNode = srcmap.getNodeFromCode(code); return srcmap.getCodeFromNode(srcNode, options.srcmapRename, { multiline: options.multiline }); } /////////////////////////////////////////////////////////////////////// // classical module: function normalize_classical_module_src_copy() { const src = path.join(__dirname, '..', config.dir.built, config.main.basename + '.js'); const dst = path.join(__dirname, '..', config.dir.pkg, config.main.basename + '.js'); fs.writeFileSync(dst, fs.readFileSync(src).toString()); } /////////////////////////////////////////////////////////////////////// // library: function normalize_src(src, options) { return '\ufeff' + update_srcmap_namespace(src, options) .replace(/^\ufeff/gm, '') // remove bom .replace(/\t/gm, ' ') .replace(/\r\n/gm, '\n') ; } function normalize_lib_src(location) { const MAIN_FILE = path.join(__dirname, '..', location, config.main.basename + '.js'); let src = fs.readFileSync(MAIN_FILE).toString(); src = normalize_src(src, { srcmapRename: (srcPath) => { return srcPath .replace(`webpack:///${NAMESPACE}:/`, `${NAMESPACE}:///`) .replace(`webpack:///${config.dir.src}/`, SOURCE_MAP_NAMESPACE) .replace('webpack:/webpack', 'webpack:///webpack') .replace('webpack:/external', 'webpack:///external/') .replace('webpack:///~', 'webpack:///node_modules') ; }, multiline: false, }); fs.writeFileSync(MAIN_FILE, src); } function normalize_lib_d_ts() { const dts = require('dts-bundle'); const tsfmt = require('typescript-formatter'); const TYPE_DEF_FILE = path.join(__dirname, '..', config.dir.pkg, config.dir.types, PACKAGE_NAME, config.main.bundle_d_ts); // concat d.ts dts.bundle(config.dts_bundle); // format d.ts tsfmt.processStream(TYPE_DEF_FILE, fs.createReadStream(TYPE_DEF_FILE), { tsfmt: tsfmt, }) .then((content) => { let src = '\ufeff' + banner('.d.ts') + content.message .replace(/^\ufeff/gm, '') .replace(/\r\n/gm, '\n') .replace(/^\/\/ Generated by dts-bundle[\s\S]*?\n/g, '') .replace(/^ \*/gm, ' *') .replace(/^ \*/gm, ' *') .replace(/^ \*/gm, ' *') .replace(/'/gm, '"') ; fs.writeFileSync(TYPE_DEF_FILE, src); }) .catch((error) => { console.error(error); }); } /////////////////////////////////////////////////////////////////////// // for package: function normalize_package_src() { const PKG_DIR = path.join(__dirname, '..', config.dir.pkg); glob.sync('**/?(*.js|*.css)', { cwd: PKG_DIR, nodir: true, ignore: [ config.dir.external + '/**/*', config.dir.res + '/**/*', config.dir.template + '/**/*', ], }).forEach((file) => { console.log(' normalize... ' + file); const ext = path.extname(file); const basename = path.basename(file, ext); const srcPath = path.join(PKG_DIR, file); let src = fs.readFileSync(srcPath).toString().replace(/^\ufeff/gm, ''); if (!/^\/\**!+/.test(src)) { // set banner const node = srcmap.getNodeFromCode(src); node.prepend(banner(ext, basename) + '\n'); src = srcmap.getCodeFromNode(node); } src = normalize_src(src, { srcmapRename: (srcPath) => { const regex_src = new RegExp('^' + config.dir.src + '\\/'); return srcPath .replace('webpack:///' + config.dir.src + '/', SOURCE_MAP_NAMESPACE) .replace('webpack:/webpack', 'webpack:///webpack') .replace('webpack:/external', 'webpack:///external/') .replace('webpack:///~', 'webpack:///node_modules') .replace(/\.\.\//g, '') .replace(regex_src, SOURCE_MAP_NAMESPACE + config.dir.src + '/') .replace(/platforms\/\w+\//, SOURCE_MAP_NAMESPACE + config.dir.src + '/') ; }, multiline: 'css' === ext.toLowerCase(), }); fs.writeFileSync(srcPath, src); }); } function main() { switch (config.target.type) { case 'classical-module': normalize_lib_src(config.dir.built); normalize_classical_module_src_copy(); return; case 'library': normalize_lib_src(config.dir.pkg); normalize_lib_d_ts(); return; case 'mobile': normalize_package_src(); return; default: return; } } main();