awesome-cordova-plugins/scripts/tasks/build-esm.ts

38 lines
1.4 KiB
TypeScript
Raw Normal View History

import { readFileSync, readJSONSync, writeFileSync } from 'fs-extra';
2017-12-28 20:28:44 +08:00
import * as path from 'path';
import { PLUGIN_PATHS, ROOT } from '../build/helpers';
2018-03-23 17:57:54 +08:00
import { EMIT_PATH } from '../build/transformers/extract-injectables';
import { generateDeclarations, transpile } from '../build/transpile';
2017-12-28 20:28:44 +08:00
generateDeclarations();
transpile();
2018-03-23 17:57:54 +08:00
const outDirs = PLUGIN_PATHS.map(p =>
p.replace(path.join(ROOT, 'src'), path.join(ROOT, 'dist')).replace(/[\\/]index.ts/, '')
2018-03-23 17:57:54 +08:00
);
const injectableClasses = readJSONSync(EMIT_PATH);
2017-12-28 20:28:44 +08:00
outDirs.forEach(dir => {
2020-05-16 20:40:49 +08:00
const classes = injectableClasses.filter(entry => entry.dirName === dir.split(/[\\/]+/).pop());
2017-12-28 20:28:44 +08:00
let jsFile: string = readFileSync(path.join(dir, 'index.js'), 'utf-8'),
dtsFile: string = readFileSync(path.join(dir, 'index.d.ts'), 'utf-8');
2017-12-28 20:28:44 +08:00
classes.forEach(entry => {
2020-05-16 20:40:49 +08:00
dtsFile = dtsFile.replace(`class ${entry.className} `, 'class ' + entry.className + 'Original ');
dtsFile += `\nexport declare const ${entry.className}: ${entry.className}Original;`;
2018-03-23 17:57:54 +08:00
jsFile = jsFile.replace(
new RegExp(`([\\s\\(])${entry.className}([\\s\\.;\\(,])`, 'g'),
'$1' + entry.className + 'Original$2'
);
jsFile = jsFile.replace(
`export { ${entry.className}Original }`,
2020-05-16 20:40:49 +08:00
`var ${entry.className} = new ${entry.className}Original();\nexport { ${entry.className} }`
2018-03-23 17:57:54 +08:00
);
2017-12-28 20:28:44 +08:00
});
writeFileSync(path.join(dir, 'index.js'), jsFile, 'utf-8');
writeFileSync(path.join(dir, 'index.d.ts'), dtsFile, 'utf-8');
2017-12-28 20:28:44 +08:00
});