UNPKG

@elsikora/setup-wizard

Version:

Setup Wizard - CLI scaffolding utility

186 lines (180 loc) 6.43 kB
#!/usr/bin/env node import path from 'node:path'; const BUILDER_CONFIG = { buildTsconfigTemplate: () => { return `{ "extends": "./tsconfig.json", "exclude": ["node_modules", "test", "dist", "**/*spec.ts", "**/*.test.ts"] } `; }, template: (entryPoint, outputDirectory, formats, isSourceMapsEnabled, isMinifyEnabled, isCliApp, isPathAliasEnabled, isDecoratorsEnabled, isPackageJsonGenerationEnabled, isCommonjsEnabled) => { const imports = []; const isTypeScript = entryPoint.endsWith(".ts") || entryPoint.endsWith(".tsx"); // Base imports imports.push("import resolve from '@rollup/plugin-node-resolve';"); // CommonJS plugin (only if enabled) if (isCommonjsEnabled) { imports.push("import commonjs from '@rollup/plugin-commonjs';"); } // TypeScript plugin if (isTypeScript) { imports.push("import typescript from '@rollup/plugin-typescript';"); } // Optional plugins if (isPathAliasEnabled) { imports.push("import dtsPathAlias from 'rollup-plugin-dts-path-alias';"); } if (isMinifyEnabled) { imports.push("import terser from '@rollup/plugin-terser';"); } if (isPackageJsonGenerationEnabled && !isCliApp) { imports.push("import generatePackageJson from 'rollup-plugin-generate-package-json';"); } // Generate configurations for each format if (isCliApp || formats.length === 1) { // Single configuration const format = formats[0]; const plugins = []; // Resolve plugin with decorators support if (isDecoratorsEnabled) { plugins.push(`resolve({ include: ["node_modules/tslib/**"], })`); } else { plugins.push("resolve()"); } if (isCommonjsEnabled) { plugins.push("commonjs()"); } if (isPathAliasEnabled) { plugins.push("dtsPathAlias()"); } if (isTypeScript) { const tsconfigPath = isCliApp ? "./tsconfig.json" : "./tsconfig.build.json"; plugins.push(`typescript({ declaration: true, outDir: "${outputDirectory}", sourceMap: ${isSourceMapsEnabled}, tsconfig: "${tsconfigPath}", })`); } if (isMinifyEnabled) { plugins.push("terser()"); } const outputOptions = []; if (isCliApp) { outputOptions.push(`banner: "#!/usr/bin/env node"`); } // Determine output file/dir const baseName = path.basename(entryPoint, path.extname(entryPoint)); if (isCliApp) { outputOptions.push(`dir: "${outputDirectory}"`, `preserveModules: true`, `preserveModulesRoot: "src"`); } else { let extension; if (format === "esm") { extension = "mjs"; } else if (format === "cjs") { extension = "cjs"; } else { extension = "js"; } outputOptions.push(`file: "${outputDirectory}/${baseName}.${extension}"`); } outputOptions.push(`format: "${format === "cjs" ? "cjs" : format}"`); if (format === "cjs") { outputOptions.push(`exports: "named"`); } else if (isCliApp && format === "esm") { outputOptions.push(`exports: "auto"`); } outputOptions.push(`sourcemap: ${isSourceMapsEnabled}`); return `${imports.join("\n")} export default { ${isCliApp ? 'external: ["node:fs", "node:fs/promises", "node:path", "node:child_process", "node:util"],\n\t' : ""}input: "${entryPoint}", output: { ${outputOptions.join(",\n\t\t")} }, plugins: [ ${plugins.join(",\n\t\t")} ], }; `; } else { // Multiple configurations for different formats const configs = []; for (const format of formats) { const outputDirectoryFormat = `${outputDirectory}/${format}`; const plugins = []; // Resolve plugin with decorators support if (isDecoratorsEnabled) { plugins.push(`resolve({ include: ["node_modules/tslib/**"], })`); } else { plugins.push("resolve()"); } if (isCommonjsEnabled) { plugins.push("commonjs()"); } if (isPathAliasEnabled) { plugins.push("dtsPathAlias()"); } if (isTypeScript) { plugins.push(`typescript({ declaration: true, declarationDir: "${outputDirectoryFormat}", outDir: "${outputDirectoryFormat}", sourceMap: ${isSourceMapsEnabled}, tsconfig: "./tsconfig.build.json", })`); } if (isMinifyEnabled) { plugins.push("terser()"); } if (isPackageJsonGenerationEnabled) { const packageType = format === "esm" ? "module" : "commonjs"; plugins.push(`generatePackageJson({ baseContents: { type: "${packageType}" }, outputFolder: "${outputDirectoryFormat}", })`); } const entryFileNamesFunction = isDecoratorsEnabled ? `entryFileNames: (chunkInfo) => { if (chunkInfo.name.includes("node_modules")) { return chunkInfo.name.replace("node_modules", "external") + ".js"; } return "[name].js"; },` : ""; configs.push(`{ input: "${entryPoint}", output: { dir: "${outputDirectoryFormat}", ${entryFileNamesFunction} ${format === "cjs" ? 'exports: "named",\n\t\t\t' : ""}format: "${format}", preserveModules: true, preserveModulesRoot: "src", sourcemap: ${isSourceMapsEnabled}, }, plugins: [ ${plugins.join(",\n\t\t\t")} ], }`); } return `${imports.join("\n")} export default [ ${configs.join(",\n\t")} ]; `; } }, }; export { BUILDER_CONFIG }; //# sourceMappingURL=config.constant.js.map