const fs = require('fs-extra'); const path = require('path'); const Components = require('./get-components')(); const packageJson = require('../package.json'); const camelizeRE = /-(\w)/g; const pascalizeRE = /(\w)(\w*)/g; function camelize(str) { return str.replace(camelizeRE, (_, c) => c.toUpperCase()); } function pascalize(str) { return camelize(str).replace( pascalizeRE, (_, c1, c2) => c1.toUpperCase() + c2 ); } const version = process.env.VERSION || packageJson.version; const tips = '// This file is auto generated by build/build-entry.js'; function buildEntry() { const uninstallComponents = [ 'Locale', 'Lazyload', 'Waterfall' ]; const importList = Components.map(name => `import ${pascalize(name)} from './${name}';`); const exportList = Components.map(name => `${pascalize(name)}`); const installList = exportList.filter(name => !~uninstallComponents.indexOf(pascalize(name))); const content = `${tips} import { VueConstructor } from 'vue/types'; ${importList.join('\n')} declare global { interface Window { Vue?: VueConstructor; } } const version = '${version}'; const components = [ ${installList.join(',\n ')} ]; const install = (Vue: VueConstructor) => { components.forEach(Component => { Vue.use(Component); }); }; /* istanbul ignore if */ if (typeof window !== 'undefined' && window.Vue) { install(window.Vue); } export { install, version, ${exportList.join(',\n ')} }; export default { install, version }; `; fs.writeFileSync(path.join(__dirname, '../src/index.ts'), content); } buildEntry();