build-ts 5.1.0 → 5.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import e from"yargs";import{hideBin as o}from"yargs/helpers";import n from"node:fs";import s from"node:path";import{rollup as r}from"rollup";import i from"node:url";import{babel as t}from"@rollup/plugin-babel";import a from"@rollup/plugin-commonjs";import c from"@rollup/plugin-json";import p from"@rollup/plugin-node-resolve";import l from"@rollup/plugin-replace";import d from"@rollup/plugin-terser";import m from"rollup-plugin-analyzer";import{externals as u}from"rollup-plugin-node-externals";import{string as f}from"rollup-plugin-string";import g from"rollup-plugin-ts";import b from"dotenv";import*as y from"node:child_process";const h=["app","functions","lib"];async function j(e){try{const o=await n.promises.readFile(s.join(e,"package.json"),"utf8");return JSON.parse(o)}catch{}}const v={input:{description:'A file path of main source code. Default value is "src/index.{ts,tsx}" from package directory.',type:"string",alias:"i"},"core-js":{description:"Whether or not core-js is employed.",type:"boolean",default:!1},minify:{description:"Whether or not minification is enabled.",type:"boolean",default:!0},sourcemap:{description:"Whether or not sourcemap is enabled.",type:"boolean",default:!0},external:{description:"Additional external dependencies.",type:"array"},verbose:{description:"Whether or not verbose mode is enabled.",type:"boolean",alias:"v"},env:{description:"Environment variables to be inlined.",type:"array",alias:"e"},dotenv:{description:".env files to be inlined.",type:"array"}},x={...v,moduleType:{description:"esm or cjs. Automatically detected by default.",type:"string",alias:"m"}};function S(e,o){const n={};for(const o of(e.env??[]).map((e=>e.toString())))void 0!==process.env[o]&&(n[`process.env.${o}`]=JSON.stringify(process.env[o]));for(const r of e.dotenv??[]){const e=b.config({path:s.join(o,r.toString())}).parsed||{};for(const[o,s]of Object.entries(e))void 0!==s&&(n[`process.env.${o}`]=JSON.stringify(s))}return n}function w(e,o,n,r,b){const y=[...e.external??[]].map((e=>e.toString()));n?.dependencies?.["@prisma/client"]&&y.push("prisma-client");const h=[".cjs",".mjs",".js",".jsx",".json",".cts",".mts",".ts",".tsx"],j=s.join(i.fileURLToPath(s.dirname(s.dirname(import.meta.url))),"babel.config.mjs"),v=[l({delimiters:["",""],preventAssignment:!0,values:S(e,b)}),c(),u({deps:!0,devDeps:!1,peerDeps:!0,optDeps:!0,include:y,exclude:r&&new RegExp(`${r}\\/.+`)}),p({extensions:h}),a()];return"app-node"===o||"functions"===o?v.push(t({configFile:j,extensions:h,babelHelpers:"bundled",exclude:"node_modules/**"})):v.push(g({transpiler:"babel",babelConfig:j})),v.push(f({include:["**/*.csv","**/*.txt"]})),e.minify&&v.push(d()),v.push(m({summaryOnly:!0})),v}const T={command:"app [package]",describe:"Build an app",builder:x,handler:async e=>k(e,"app",e.package,e.moduleType)},_={command:"functions [package]",describe:"Build a GCP/Firebase functions app",builder:x,handler:async e=>k(e,"functions",e.package,e.moduleType)},O={command:"lib [package]",describe:"Build a Node.js / React library",builder:v,handler:async e=>k(e,"lib",e.package)};async function k(e,o,i,t){const a=process.cwd(),c=s.resolve(i?.toString()??"."),p=await j(c);p||(console.error("Failed to parse package.json."),process.exit(1));const l=function(e,o,r){if(e.input)return s.join(o,e.input);let i=s.join(r,s.join("src","index.ts"));if(n.existsSync(i))return i;if(i=s.join(r,s.join("src","index.tsx")),n.existsSync(i))return i;console.error("Failed to detect input file."),process.exit(1)}(e,a,c),d=function(e,o){switch(e){case"app":return"app-node";case"functions":return"functions";case"lib":return o.endsWith(".tsx")?"lib-react":"lib";default:console.error("target option must be one of: "+h.join(", ")),process.exit(1)}}(o,l);e.verbose&&console.info("Target (Category):",`${d} (${o})`);const[m]=function(e){const o=e.name?.toString()||"",n=/@([^/]+)\/(.+)/.exec(o),[,s,r]=n||[];return[s,r]}(p),u="esm"===t||"module"===p.type;let f,g;e["core-js"]&&(process.env.BUILD_TS_COREJS="1"),e.verbose&&(process.env.BUILD_TS_VERBOSE="1"),process.env.BUILD_TS_TARGET_CATEGORY=o,process.env.BUILD_TS_TARGET_DETAIL=d,"app-node"===d||"functions"===d?(p.main=u?"index.mjs":"index.cjs",f=[{file:s.join(c,"dist",p.main),format:u?"module":"commonjs",sourcemap:e.sourcemap}]):f=[{file:s.join(c,"dist","cjs","index.cjs"),format:"commonjs",sourcemap:e.sourcemap},{dir:s.join(c,"dist","esm"),entryFileNames:"[name].mjs",format:"module",preserveModules:!0,sourcemap:e.sourcemap}],e.verbose&&console.info("OutputOptions:",f),0===f.length&&(console.error("Failed to detect output files."),process.exit(1));let b=!1;try{process.chdir(c);const[o]=await Promise.all([r({input:l,plugins:w(e,d,p,m,a)}),n.promises.rm(s.join(c,"dist"),{recursive:!0,force:!0})]);g=o,await Promise.all(f.map((e=>o.write(e)))),"functions"===d&&(p.name+="-dist",delete p.devDependencies,await n.promises.writeFile(s.join(c,"dist","package.json"),JSON.stringify(p)))}catch(e){b=!0,console.error("Failed to build due to:",e)}await(g?.close()),b&&process.exit(1)}const D={command:"run <file>",describe:"Run script",builder:{module:{description:"A module type: cjs or esm",type:"string",alias:"m"},watch:{description:"Whether watch mode is enabled or not",type:"boolean",alias:"w"}},async handler(e){const o=e.file?.toString()||"",n=await async function(e,o){if("cjs"===o||e.endsWith(".cts"))return"cjs";if("esm"===o||e.endsWith(".mts"))return"esm";let n=s.dirname(e);for(;;){const e=await j(n);if(e){if("module"===e.type)return"esm";break}const o=s.dirname(n);if(!o||o===n)break;n=o}return"cjs"}(o,e.module),r=["--no-warnings"];e.watch&&r.push("--watch"),"cjs"===n?r.push("--require","ts-node/register"):r.push("--loader","ts-node/esm"),r.push(o);const[,...i]=e._;y.spawnSync("node",[...r,...i.map((e=>e.toString()))],{shell:!0,stdio:"inherit",env:{...process.env,TS_NODE_TRANSPILE_ONLY:"1"}})}};await e(o(process.argv)).command(T).command(_).command(O).command(D).demandCommand().strict().help().argv;
1
+ import e from"yargs";import{hideBin as o}from"yargs/helpers";import n from"node:fs";import s from"node:path";import{rollup as r}from"rollup";import i from"node:url";import{babel as t}from"@rollup/plugin-babel";import a from"@rollup/plugin-commonjs";import c from"@rollup/plugin-json";import p from"@rollup/plugin-node-resolve";import l from"@rollup/plugin-replace";import d from"@rollup/plugin-terser";import m from"rollup-plugin-analyzer";import{externals as u}from"rollup-plugin-node-externals";import{string as f}from"rollup-plugin-string";import b from"rollup-plugin-ts";import g from"dotenv";import*as y from"node:child_process";const h=["app","functions","lib"];async function j(e){try{const o=await n.promises.readFile(s.join(e,"package.json"),"utf8");return JSON.parse(o)}catch{}}const v={input:{description:'A file path of main source code. Default value is "src/index.{ts,tsx}" from package directory.',type:"string",alias:"i"},"core-js":{description:"Whether or not core-js is employed.",type:"boolean",default:!1},minify:{description:"Whether or not minification is enabled.",type:"boolean",default:!0},sourcemap:{description:"Whether or not sourcemap is enabled.",type:"boolean",default:!0},external:{description:"Additional external dependencies.",type:"array"},verbose:{description:"Whether or not verbose mode is enabled.",type:"boolean",alias:"v"},env:{description:"Environment variables to be inlined.",type:"array",alias:"e"},dotenv:{description:".env files to be inlined.",type:"array"}},x={...v,moduleType:{description:"esm or cjs. Automatically detected by default.",type:"string",alias:"m"}};function S(e,o){const n={};for(const o of(e.env??[]).map((e=>e.toString())))void 0!==process.env[o]&&(n[`process.env.${o}`]=JSON.stringify(process.env[o]));for(const r of e.dotenv??[]){const e=g.config({path:s.join(o,r.toString())}).parsed||{};for(const[o,s]of Object.entries(e))void 0!==s&&(n[`process.env.${o}`]=JSON.stringify(s))}return n}function w(e,o,n,r,g){const y=[...e.external??[]].map((e=>e.toString()));n?.dependencies?.["@prisma/client"]&&y.push("prisma-client");const h=[".cjs",".mjs",".js",".jsx",".json",".cts",".mts",".ts",".tsx"],j=s.join(i.fileURLToPath(s.dirname(s.dirname(import.meta.url))),"babel.config.mjs"),v=[l({delimiters:["",""],preventAssignment:!0,values:S(e,g)}),c(),u({deps:!0,devDeps:!1,peerDeps:!0,optDeps:!0,include:y,exclude:r&&new RegExp(`${r}\\/.+`)}),p({extensions:h}),a()];return"app-node"===o||"functions"===o?v.push(t({configFile:j,extensions:h,babelHelpers:"bundled",exclude:"node_modules/**"})):v.push(b({transpiler:"babel",babelConfig:j})),v.push(f({include:["**/*.csv","**/*.txt"]})),e.minify&&v.push(d()),v.push(m({summaryOnly:!0})),v}const T={command:"app [package]",describe:"Build an app",builder:x,handler:async e=>k(e,"app",e.package,e.moduleType)},_={command:"functions [package]",describe:"Build a GCP/Firebase functions app",builder:x,handler:async e=>k(e,"functions",e.package,e.moduleType)},O={command:"lib [package]",describe:"Build a Node.js / React library",builder:v,handler:async e=>k(e,"lib",e.package)};async function k(e,o,i,t){const a=process.cwd(),c=s.resolve(i?.toString()??"."),p=await j(c);p||(console.error("Failed to parse package.json."),process.exit(1));const l=function(e,o,r){if(e.input)return s.join(o,e.input);let i=s.join(r,s.join("src","index.ts"));if(n.existsSync(i))return i;if(i=s.join(r,s.join("src","index.tsx")),n.existsSync(i))return i;console.error("Failed to detect input file."),process.exit(1)}(e,a,c),d=function(e,o){switch(e){case"app":return"app-node";case"functions":return"functions";case"lib":return o.endsWith(".tsx")?"lib-react":"lib";default:console.error("target option must be one of: "+h.join(", ")),process.exit(1)}}(o,l);e.verbose&&console.info("Target (Category):",`${d} (${o})`);const[m]=function(e){const o=e.name?.toString()||"",n=/@([^/]+)\/(.+)/.exec(o),[,s,r]=n||[];return[s,r]}(p),u="esm"===t||"module"===p.type;let f,b;e["core-js"]&&(process.env.BUILD_TS_COREJS="1"),e.verbose&&(process.env.BUILD_TS_VERBOSE="1"),process.env.BUILD_TS_TARGET_CATEGORY=o,process.env.BUILD_TS_TARGET_DETAIL=d,"app-node"===d||"functions"===d?(p.main=u?"index.mjs":"index.cjs",f=[{file:s.join(c,"dist",p.main),format:u?"module":"commonjs",sourcemap:e.sourcemap}]):f=[{file:s.join(c,"dist","cjs","index.cjs"),format:"commonjs",sourcemap:e.sourcemap},{dir:s.join(c,"dist","esm"),entryFileNames:"[name].mjs",format:"module",preserveModules:!0,sourcemap:e.sourcemap}],e.verbose&&console.info("OutputOptions:",f),0===f.length&&(console.error("Failed to detect output files."),process.exit(1));let g=!1;try{process.chdir(c);const[o]=await Promise.all([r({input:l,plugins:w(e,d,p,m,a)}),n.promises.rm(s.join(c,"dist"),{recursive:!0,force:!0})]);b=o,await Promise.all(f.map((e=>o.write(e)))),"functions"===d&&(p.name+="-dist",delete p.devDependencies,await n.promises.writeFile(s.join(c,"dist","package.json"),JSON.stringify(p)))}catch(e){g=!0,console.error("Failed to build due to:",e)}await(b?.close()),g&&process.exit(1)}const D={command:"run <file>",describe:"Run script",builder:{module:{description:"A module type: cjs or esm",type:"string",alias:"m"},watch:{description:"Whether watch mode is enabled or not",type:"boolean",alias:"w"}},async handler(e){const o=e.file?.toString()||"",n=await async function(e,o){if("cjs"===o||e.endsWith(".cts"))return"cjs";if("esm"===o||e.endsWith(".mts"))return"esm";let n=s.dirname(e);for(;;){const e=await j(n);if(e){if("module"===e.type)return"esm";break}const o=s.dirname(n);if(!o||o===n)break;n=o}return"cjs"}(o,e.module),r=["--no-warnings"];e.watch&&r.push("--watch"),"cjs"===n?r.push("--require","ts-node/register"):r.push("--loader","ts-node/esm"),r.push(o);const[,...i]=e._;y.spawnSync("node",[...r,...i.map((e=>e.toString()))],{shell:!0,stdio:"inherit",env:{...process.env,TS_NODE_TRANSPILE_ONLY:"1"}})}};await e(o(process.argv)).scriptName("build-ts").command(T).command(_).command(O).command(D).demandCommand().strict().help().argv;
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/types.ts","../src/utils.ts","../src/commands/build/builder.ts","../src/commands/build/env.ts","../src/commands/build/plugin.ts","../src/commands/build/build.ts","../src/commands/run.ts","../src/index.ts"],"sourcesContent":["export const allTargetCategories = ['app', 'functions', 'lib'] as const;\n\nexport type TargetCategory = (typeof allTargetCategories)[number];\n\nexport const allTargetDetails = ['app-node', 'functions', 'lib', 'lib-react'] as const;\n\nexport type TargetDetail = (typeof allTargetDetails)[number];\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport url from 'node:url';\n\nimport { PackageJson } from 'type-fest';\n\nexport async function readPackageJson(dirPath: string): Promise<PackageJson | undefined> {\n try {\n const packageJsonText = await fs.promises.readFile(path.join(dirPath, 'package.json'), 'utf8');\n return JSON.parse(packageJsonText) as PackageJson;\n } catch {\n // do nothing\n }\n}\n\nexport function getBuildTsRootPath(): string {\n return url.fileURLToPath(path.dirname(path.dirname(import.meta.url)));\n}\n\nexport function getNamespaceAndName(packageJson: PackageJson): [string | undefined, string | undefined] {\n const packageName = packageJson.name?.toString() || '';\n const match = /@([^/]+)\\/(.+)/.exec(packageName);\n const [, namespace, name] = match || [];\n return [namespace, name];\n}\n","export const builder = {\n input: {\n description: 'A file path of main source code. Default value is \"src/index.{ts,tsx}\" from package directory.',\n type: 'string',\n alias: 'i',\n },\n 'core-js': {\n description: 'Whether or not core-js is employed.',\n type: 'boolean',\n default: false,\n },\n minify: {\n description: 'Whether or not minification is enabled.',\n type: 'boolean',\n default: true,\n },\n sourcemap: {\n description: 'Whether or not sourcemap is enabled.',\n type: 'boolean',\n default: true,\n },\n external: {\n description: 'Additional external dependencies.',\n type: 'array',\n },\n verbose: {\n description: 'Whether or not verbose mode is enabled.',\n type: 'boolean',\n alias: 'v',\n },\n env: {\n description: 'Environment variables to be inlined.',\n type: 'array',\n alias: 'e',\n },\n dotenv: {\n description: '.env files to be inlined.',\n type: 'array',\n },\n} as const;\n\nexport const appBuilder = {\n ...builder,\n moduleType: {\n description: 'esm or cjs. Automatically detected by default.',\n type: 'string',\n alias: 'm',\n },\n} as const;\n","import path from 'node:path';\n\nimport dotenv from 'dotenv';\nimport type { InferredOptionTypes } from 'yargs';\n\nimport type { builder } from './builder.js';\n\nexport function loadEnvironmentVariables(\n argv: InferredOptionTypes<typeof builder>,\n cwd: string\n): Record<string, string> {\n const envVars: Record<string, string> = {};\n for (const name of (argv.env ?? []).map((e) => e.toString())) {\n if (process.env[name] === undefined) continue;\n\n envVars[`process.env.${name}`] = JSON.stringify(process.env[name]);\n }\n for (const dotenvPath of argv.dotenv ?? []) {\n const parsed = dotenv.config({ path: path.join(cwd, dotenvPath.toString()) }).parsed || {};\n for (const [key, value] of Object.entries(parsed)) {\n if (value === undefined) continue;\n\n envVars[`process.env.${key}`] = JSON.stringify(value);\n }\n }\n return envVars;\n}\n","import path from 'node:path';\n\nimport { babel } from '@rollup/plugin-babel';\nimport commonjs from '@rollup/plugin-commonjs';\nimport json from '@rollup/plugin-json';\nimport resolve from '@rollup/plugin-node-resolve';\nimport replace from '@rollup/plugin-replace';\nimport terser from '@rollup/plugin-terser';\nimport { Plugin } from 'rollup';\nimport analyze from 'rollup-plugin-analyzer';\nimport { externals } from 'rollup-plugin-node-externals';\nimport { string } from 'rollup-plugin-string';\nimport ts from 'rollup-plugin-ts';\nimport type { PackageJson } from 'type-fest';\nimport type { InferredOptionTypes } from 'yargs';\n\nimport { TargetDetail } from '../../types.js';\nimport { getBuildTsRootPath } from '../../utils.js';\n\nimport type { builder } from './builder.js';\nimport { loadEnvironmentVariables } from './env.js';\n\nexport function createPlugins(\n argv: InferredOptionTypes<typeof builder>,\n targetDetail: TargetDetail,\n packageJson: PackageJson,\n namespace: string | undefined,\n cwd: string\n): Plugin[] {\n const externalDeps = [...(argv.external ?? [])].map((item) => item.toString());\n if (packageJson?.dependencies?.['@prisma/client']) {\n externalDeps.push('prisma-client');\n }\n const extensions = ['.cjs', '.mjs', '.js', '.jsx', '.json', '.cts', '.mts', '.ts', '.tsx'];\n const babelConfigPath = path.join(getBuildTsRootPath(), 'babel.config.mjs');\n const plugins: Plugin[] = [\n replace({\n delimiters: ['', ''],\n preventAssignment: true,\n values: loadEnvironmentVariables(argv, cwd),\n }),\n json(),\n externals({\n deps: true,\n devDeps: false,\n peerDeps: true,\n optDeps: true,\n include: externalDeps,\n exclude: namespace && new RegExp(`${namespace}\\\\/.+`),\n }),\n resolve({ extensions }),\n commonjs(),\n ];\n if (targetDetail === 'app-node' || targetDetail === 'functions') {\n plugins.push(\n babel({\n configFile: babelConfigPath,\n extensions,\n babelHelpers: 'bundled',\n exclude: 'node_modules/**',\n })\n );\n } else {\n plugins.push(\n ts({\n transpiler: 'babel',\n babelConfig: babelConfigPath,\n })\n );\n }\n plugins.push(string({ include: ['**/*.csv', '**/*.txt'] }));\n if (argv.minify) {\n plugins.push(terser());\n }\n plugins.push(analyze({ summaryOnly: true }));\n return plugins;\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { OutputOptions, rollup, RollupBuild } from 'rollup';\nimport type { CommandModule, InferredOptionTypes } from 'yargs';\n\nimport { allTargetCategories, TargetCategory, TargetDetail } from '../../types.js';\nimport { getNamespaceAndName, readPackageJson } from '../../utils.js';\n\nimport { appBuilder, builder } from './builder.js';\nimport { createPlugins } from './plugin.js';\n\nexport const app: CommandModule<unknown, InferredOptionTypes<typeof appBuilder>> = {\n command: 'app [package]',\n describe: 'Build an app',\n builder: appBuilder,\n async handler(argv) {\n return build(argv, 'app', argv.package, argv.moduleType);\n },\n};\n\nexport const functions: CommandModule<unknown, InferredOptionTypes<typeof appBuilder>> = {\n command: 'functions [package]',\n describe: 'Build a GCP/Firebase functions app',\n builder: appBuilder,\n async handler(argv) {\n return build(argv, 'functions', argv.package, argv.moduleType);\n },\n};\n\nexport const lib: CommandModule<unknown, InferredOptionTypes<typeof builder>> = {\n command: 'lib [package]',\n describe: 'Build a Node.js / React library',\n builder,\n async handler(argv) {\n return build(argv, 'lib', argv.package);\n },\n};\n\nexport async function build(\n argv: InferredOptionTypes<typeof builder>,\n targetCategory: TargetCategory,\n relativePackageDirPath?: unknown,\n moduleType?: string\n): Promise<void> {\n const cwd = process.cwd();\n\n const packageDirPath = path.resolve(relativePackageDirPath?.toString() ?? '.');\n const packageJson = await readPackageJson(packageDirPath);\n if (!packageJson) {\n console.error('Failed to parse package.json.');\n process.exit(1);\n }\n\n const input = verifyInput(argv, cwd, packageDirPath);\n const targetDetail = detectTargetDetail(targetCategory, input);\n\n if (argv.verbose) {\n console.info('Target (Category):', `${targetDetail} (${targetCategory})`);\n }\n\n const [namespace] = getNamespaceAndName(packageJson);\n const isEsm = moduleType === 'esm' || packageJson.type === 'module';\n\n if (argv['core-js']) {\n process.env.BUILD_TS_COREJS = '1';\n }\n if (argv.verbose) {\n process.env.BUILD_TS_VERBOSE = '1';\n }\n process.env.BUILD_TS_TARGET_CATEGORY = targetCategory;\n process.env.BUILD_TS_TARGET_DETAIL = targetDetail;\n\n let outputOptionsList: OutputOptions[];\n if (targetDetail === 'app-node' || targetDetail === 'functions') {\n packageJson.main = isEsm ? 'index.mjs' : 'index.cjs';\n outputOptionsList = [\n {\n file: path.join(packageDirPath, 'dist', packageJson.main),\n format: isEsm ? 'module' : 'commonjs',\n sourcemap: argv.sourcemap,\n },\n ];\n } else {\n outputOptionsList = [\n {\n file: path.join(packageDirPath, 'dist', 'cjs', 'index.cjs'),\n format: 'commonjs',\n sourcemap: argv.sourcemap,\n },\n {\n dir: path.join(packageDirPath, 'dist', 'esm'),\n entryFileNames: '[name].mjs',\n format: 'module',\n preserveModules: true,\n sourcemap: argv.sourcemap,\n },\n ];\n }\n if (argv.verbose) {\n console.info('OutputOptions:', outputOptionsList);\n }\n if (outputOptionsList.length === 0) {\n console.error('Failed to detect output files.');\n process.exit(1);\n }\n\n let bundle: RollupBuild | undefined;\n let buildFailed = false;\n try {\n process.chdir(packageDirPath);\n const [_bundle] = await Promise.all([\n rollup({\n input,\n plugins: createPlugins(argv, targetDetail, packageJson, namespace, cwd),\n }),\n fs.promises.rm(path.join(packageDirPath, 'dist'), { recursive: true, force: true }),\n ]);\n bundle = _bundle;\n\n await Promise.all(outputOptionsList.map((opts) => _bundle.write(opts)));\n if (targetDetail === 'functions') {\n packageJson.name += '-dist';\n delete packageJson.devDependencies;\n await fs.promises.writeFile(path.join(packageDirPath, 'dist', 'package.json'), JSON.stringify(packageJson));\n }\n } catch (error) {\n buildFailed = true;\n console.error('Failed to build due to:', error);\n }\n await bundle?.close();\n if (buildFailed) process.exit(1);\n}\n\nfunction verifyInput(argv: InferredOptionTypes<typeof builder>, cwd: string, packageDirPath: string): string {\n if (argv.input) return path.join(cwd, argv.input);\n\n let input = path.join(packageDirPath, path.join('src', 'index.ts'));\n if (fs.existsSync(input)) return input;\n\n input = path.join(packageDirPath, path.join('src', 'index.tsx'));\n if (fs.existsSync(input)) return input;\n\n console.error('Failed to detect input file.');\n process.exit(1);\n}\n\nfunction detectTargetDetail(targetCategory: string, input: string): TargetDetail {\n switch (targetCategory) {\n case 'app': {\n return 'app-node';\n }\n case 'functions': {\n return 'functions';\n }\n case 'lib': {\n if (input.endsWith('.tsx')) {\n return 'lib-react';\n }\n return 'lib';\n }\n default: {\n console.error('target option must be one of: ' + allTargetCategories.join(', '));\n process.exit(1);\n }\n }\n}\n","import * as child_process from 'node:child_process';\nimport path from 'node:path';\n\nimport type { CommandModule, InferredOptionTypes } from 'yargs';\n\nimport { readPackageJson } from '../utils.js';\n\nconst builder = {\n module: {\n description: 'A module type: cjs or esm',\n type: 'string',\n alias: 'm',\n },\n watch: {\n description: 'Whether watch mode is enabled or not',\n type: 'boolean',\n alias: 'w',\n },\n} as const;\n\nexport const run: CommandModule<unknown, InferredOptionTypes<typeof builder>> = {\n command: 'run <file>',\n describe: 'Run script',\n builder,\n async handler(argv) {\n const file = argv.file?.toString() || '';\n const module = await detectModuleType(file, argv.module);\n\n const args = ['--no-warnings'];\n if (argv.watch) {\n args.push('--watch');\n }\n if (module === 'cjs') {\n args.push('--require', 'ts-node/register');\n } else {\n args.push('--loader', 'ts-node/esm');\n }\n args.push(file);\n const [, ...additionalArguments] = argv._;\n child_process.spawnSync('node', [...args, ...additionalArguments.map((arg) => arg.toString())], {\n shell: true,\n stdio: 'inherit',\n env: { ...process.env, TS_NODE_TRANSPILE_ONLY: '1' },\n });\n },\n};\n\nasync function detectModuleType(file: string, module?: string): Promise<'cjs' | 'esm'> {\n if (module === 'cjs' || file.endsWith('.cts')) {\n return 'cjs';\n }\n if (module === 'esm' || file.endsWith('.mts')) {\n return 'esm';\n }\n\n let dirPath = path.dirname(file);\n for (;;) {\n const packageJson = await readPackageJson(dirPath);\n if (packageJson) {\n if (packageJson.type === 'module') {\n return 'esm';\n }\n break;\n }\n\n const nextDirPath = path.dirname(dirPath);\n if (!nextDirPath || nextDirPath === dirPath) {\n break;\n }\n dirPath = nextDirPath;\n }\n return 'cjs';\n}\n","import yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nimport { app, functions, lib } from './commands/build/build.js';\nimport { run } from './commands/run.js';\n\nawait yargs(hideBin(process.argv))\n .command(app)\n .command(functions)\n .command(lib)\n .command(run)\n .demandCommand()\n .strict()\n .help().argv;\n"],"names":["allTargetCategories","async","readPackageJson","dirPath","packageJsonText","fs","promises","readFile","path","join","JSON","parse","builder","input","description","type","alias","default","minify","sourcemap","external","verbose","env","dotenv","appBuilder","moduleType","loadEnvironmentVariables","argv","cwd","envVars","name","map","e","toString","undefined","process","stringify","dotenvPath","parsed","config","key","value","Object","entries","createPlugins","targetDetail","packageJson","namespace","externalDeps","item","dependencies","push","extensions","babelConfigPath","url","fileURLToPath","dirname","import","meta","plugins","replace","delimiters","preventAssignment","values","json","externals","deps","devDeps","peerDeps","optDeps","include","exclude","RegExp","resolve","commonjs","babel","configFile","babelHelpers","ts","transpiler","babelConfig","string","terser","analyze","summaryOnly","app","command","describe","build","package","functions","lib","targetCategory","relativePackageDirPath","packageDirPath","console","error","exit","existsSync","verifyInput","endsWith","detectTargetDetail","info","packageName","match","exec","getNamespaceAndName","isEsm","outputOptionsList","bundle","BUILD_TS_COREJS","BUILD_TS_VERBOSE","BUILD_TS_TARGET_CATEGORY","BUILD_TS_TARGET_DETAIL","main","file","format","dir","entryFileNames","preserveModules","length","buildFailed","chdir","_bundle","Promise","all","rollup","rm","recursive","force","opts","write","devDependencies","writeFile","close","run","module","watch","nextDirPath","detectModuleType","args","additionalArguments","_","child_process","spawnSync","arg","shell","stdio","TS_NODE_TRANSPILE_ONLY","yargs","hideBin","demandCommand","strict","help"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/types.ts","../src/utils.ts","../src/commands/build/builder.ts","../src/commands/build/env.ts","../src/commands/build/plugin.ts","../src/commands/build/build.ts","../src/commands/run.ts","../src/index.ts"],"sourcesContent":["export const allTargetCategories = ['app', 'functions', 'lib'] as const;\n\nexport type TargetCategory = (typeof allTargetCategories)[number];\n\nexport const allTargetDetails = ['app-node', 'functions', 'lib', 'lib-react'] as const;\n\nexport type TargetDetail = (typeof allTargetDetails)[number];\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport url from 'node:url';\n\nimport { PackageJson } from 'type-fest';\n\nexport async function readPackageJson(dirPath: string): Promise<PackageJson | undefined> {\n try {\n const packageJsonText = await fs.promises.readFile(path.join(dirPath, 'package.json'), 'utf8');\n return JSON.parse(packageJsonText) as PackageJson;\n } catch {\n // do nothing\n }\n}\n\nexport function getBuildTsRootPath(): string {\n return url.fileURLToPath(path.dirname(path.dirname(import.meta.url)));\n}\n\nexport function getNamespaceAndName(packageJson: PackageJson): [string | undefined, string | undefined] {\n const packageName = packageJson.name?.toString() || '';\n const match = /@([^/]+)\\/(.+)/.exec(packageName);\n const [, namespace, name] = match || [];\n return [namespace, name];\n}\n","export const builder = {\n input: {\n description: 'A file path of main source code. Default value is \"src/index.{ts,tsx}\" from package directory.',\n type: 'string',\n alias: 'i',\n },\n 'core-js': {\n description: 'Whether or not core-js is employed.',\n type: 'boolean',\n default: false,\n },\n minify: {\n description: 'Whether or not minification is enabled.',\n type: 'boolean',\n default: true,\n },\n sourcemap: {\n description: 'Whether or not sourcemap is enabled.',\n type: 'boolean',\n default: true,\n },\n external: {\n description: 'Additional external dependencies.',\n type: 'array',\n },\n verbose: {\n description: 'Whether or not verbose mode is enabled.',\n type: 'boolean',\n alias: 'v',\n },\n env: {\n description: 'Environment variables to be inlined.',\n type: 'array',\n alias: 'e',\n },\n dotenv: {\n description: '.env files to be inlined.',\n type: 'array',\n },\n} as const;\n\nexport const appBuilder = {\n ...builder,\n moduleType: {\n description: 'esm or cjs. Automatically detected by default.',\n type: 'string',\n alias: 'm',\n },\n} as const;\n","import path from 'node:path';\n\nimport dotenv from 'dotenv';\nimport type { InferredOptionTypes } from 'yargs';\n\nimport type { builder } from './builder.js';\n\nexport function loadEnvironmentVariables(\n argv: InferredOptionTypes<typeof builder>,\n cwd: string\n): Record<string, string> {\n const envVars: Record<string, string> = {};\n for (const name of (argv.env ?? []).map((e) => e.toString())) {\n if (process.env[name] === undefined) continue;\n\n envVars[`process.env.${name}`] = JSON.stringify(process.env[name]);\n }\n for (const dotenvPath of argv.dotenv ?? []) {\n const parsed = dotenv.config({ path: path.join(cwd, dotenvPath.toString()) }).parsed || {};\n for (const [key, value] of Object.entries(parsed)) {\n if (value === undefined) continue;\n\n envVars[`process.env.${key}`] = JSON.stringify(value);\n }\n }\n return envVars;\n}\n","import path from 'node:path';\n\nimport { babel } from '@rollup/plugin-babel';\nimport commonjs from '@rollup/plugin-commonjs';\nimport json from '@rollup/plugin-json';\nimport resolve from '@rollup/plugin-node-resolve';\nimport replace from '@rollup/plugin-replace';\nimport terser from '@rollup/plugin-terser';\nimport { Plugin } from 'rollup';\nimport analyze from 'rollup-plugin-analyzer';\nimport { externals } from 'rollup-plugin-node-externals';\nimport { string } from 'rollup-plugin-string';\nimport ts from 'rollup-plugin-ts';\nimport type { PackageJson } from 'type-fest';\nimport type { InferredOptionTypes } from 'yargs';\n\nimport { TargetDetail } from '../../types.js';\nimport { getBuildTsRootPath } from '../../utils.js';\n\nimport type { builder } from './builder.js';\nimport { loadEnvironmentVariables } from './env.js';\n\nexport function createPlugins(\n argv: InferredOptionTypes<typeof builder>,\n targetDetail: TargetDetail,\n packageJson: PackageJson,\n namespace: string | undefined,\n cwd: string\n): Plugin[] {\n const externalDeps = [...(argv.external ?? [])].map((item) => item.toString());\n if (packageJson?.dependencies?.['@prisma/client']) {\n externalDeps.push('prisma-client');\n }\n const extensions = ['.cjs', '.mjs', '.js', '.jsx', '.json', '.cts', '.mts', '.ts', '.tsx'];\n const babelConfigPath = path.join(getBuildTsRootPath(), 'babel.config.mjs');\n const plugins: Plugin[] = [\n replace({\n delimiters: ['', ''],\n preventAssignment: true,\n values: loadEnvironmentVariables(argv, cwd),\n }),\n json(),\n externals({\n deps: true,\n devDeps: false,\n peerDeps: true,\n optDeps: true,\n include: externalDeps,\n exclude: namespace && new RegExp(`${namespace}\\\\/.+`),\n }),\n resolve({ extensions }),\n commonjs(),\n ];\n if (targetDetail === 'app-node' || targetDetail === 'functions') {\n plugins.push(\n babel({\n configFile: babelConfigPath,\n extensions,\n babelHelpers: 'bundled',\n exclude: 'node_modules/**',\n })\n );\n } else {\n plugins.push(\n ts({\n transpiler: 'babel',\n babelConfig: babelConfigPath,\n })\n );\n }\n plugins.push(string({ include: ['**/*.csv', '**/*.txt'] }));\n if (argv.minify) {\n plugins.push(terser());\n }\n plugins.push(analyze({ summaryOnly: true }));\n return plugins;\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { OutputOptions, rollup, RollupBuild } from 'rollup';\nimport type { CommandModule, InferredOptionTypes } from 'yargs';\n\nimport { allTargetCategories, TargetCategory, TargetDetail } from '../../types.js';\nimport { getNamespaceAndName, readPackageJson } from '../../utils.js';\n\nimport { appBuilder, builder } from './builder.js';\nimport { createPlugins } from './plugin.js';\n\nexport const app: CommandModule<unknown, InferredOptionTypes<typeof appBuilder>> = {\n command: 'app [package]',\n describe: 'Build an app',\n builder: appBuilder,\n async handler(argv) {\n return build(argv, 'app', argv.package, argv.moduleType);\n },\n};\n\nexport const functions: CommandModule<unknown, InferredOptionTypes<typeof appBuilder>> = {\n command: 'functions [package]',\n describe: 'Build a GCP/Firebase functions app',\n builder: appBuilder,\n async handler(argv) {\n return build(argv, 'functions', argv.package, argv.moduleType);\n },\n};\n\nexport const lib: CommandModule<unknown, InferredOptionTypes<typeof builder>> = {\n command: 'lib [package]',\n describe: 'Build a Node.js / React library',\n builder,\n async handler(argv) {\n return build(argv, 'lib', argv.package);\n },\n};\n\nexport async function build(\n argv: InferredOptionTypes<typeof builder>,\n targetCategory: TargetCategory,\n relativePackageDirPath?: unknown,\n moduleType?: string\n): Promise<void> {\n const cwd = process.cwd();\n\n const packageDirPath = path.resolve(relativePackageDirPath?.toString() ?? '.');\n const packageJson = await readPackageJson(packageDirPath);\n if (!packageJson) {\n console.error('Failed to parse package.json.');\n process.exit(1);\n }\n\n const input = verifyInput(argv, cwd, packageDirPath);\n const targetDetail = detectTargetDetail(targetCategory, input);\n\n if (argv.verbose) {\n console.info('Target (Category):', `${targetDetail} (${targetCategory})`);\n }\n\n const [namespace] = getNamespaceAndName(packageJson);\n const isEsm = moduleType === 'esm' || packageJson.type === 'module';\n\n if (argv['core-js']) {\n process.env.BUILD_TS_COREJS = '1';\n }\n if (argv.verbose) {\n process.env.BUILD_TS_VERBOSE = '1';\n }\n process.env.BUILD_TS_TARGET_CATEGORY = targetCategory;\n process.env.BUILD_TS_TARGET_DETAIL = targetDetail;\n\n let outputOptionsList: OutputOptions[];\n if (targetDetail === 'app-node' || targetDetail === 'functions') {\n packageJson.main = isEsm ? 'index.mjs' : 'index.cjs';\n outputOptionsList = [\n {\n file: path.join(packageDirPath, 'dist', packageJson.main),\n format: isEsm ? 'module' : 'commonjs',\n sourcemap: argv.sourcemap,\n },\n ];\n } else {\n outputOptionsList = [\n {\n file: path.join(packageDirPath, 'dist', 'cjs', 'index.cjs'),\n format: 'commonjs',\n sourcemap: argv.sourcemap,\n },\n {\n dir: path.join(packageDirPath, 'dist', 'esm'),\n entryFileNames: '[name].mjs',\n format: 'module',\n preserveModules: true,\n sourcemap: argv.sourcemap,\n },\n ];\n }\n if (argv.verbose) {\n console.info('OutputOptions:', outputOptionsList);\n }\n if (outputOptionsList.length === 0) {\n console.error('Failed to detect output files.');\n process.exit(1);\n }\n\n let bundle: RollupBuild | undefined;\n let buildFailed = false;\n try {\n process.chdir(packageDirPath);\n const [_bundle] = await Promise.all([\n rollup({\n input,\n plugins: createPlugins(argv, targetDetail, packageJson, namespace, cwd),\n }),\n fs.promises.rm(path.join(packageDirPath, 'dist'), { recursive: true, force: true }),\n ]);\n bundle = _bundle;\n\n await Promise.all(outputOptionsList.map((opts) => _bundle.write(opts)));\n if (targetDetail === 'functions') {\n packageJson.name += '-dist';\n delete packageJson.devDependencies;\n await fs.promises.writeFile(path.join(packageDirPath, 'dist', 'package.json'), JSON.stringify(packageJson));\n }\n } catch (error) {\n buildFailed = true;\n console.error('Failed to build due to:', error);\n }\n await bundle?.close();\n if (buildFailed) process.exit(1);\n}\n\nfunction verifyInput(argv: InferredOptionTypes<typeof builder>, cwd: string, packageDirPath: string): string {\n if (argv.input) return path.join(cwd, argv.input);\n\n let input = path.join(packageDirPath, path.join('src', 'index.ts'));\n if (fs.existsSync(input)) return input;\n\n input = path.join(packageDirPath, path.join('src', 'index.tsx'));\n if (fs.existsSync(input)) return input;\n\n console.error('Failed to detect input file.');\n process.exit(1);\n}\n\nfunction detectTargetDetail(targetCategory: string, input: string): TargetDetail {\n switch (targetCategory) {\n case 'app': {\n return 'app-node';\n }\n case 'functions': {\n return 'functions';\n }\n case 'lib': {\n if (input.endsWith('.tsx')) {\n return 'lib-react';\n }\n return 'lib';\n }\n default: {\n console.error('target option must be one of: ' + allTargetCategories.join(', '));\n process.exit(1);\n }\n }\n}\n","import * as child_process from 'node:child_process';\nimport path from 'node:path';\n\nimport type { CommandModule, InferredOptionTypes } from 'yargs';\n\nimport { readPackageJson } from '../utils.js';\n\nconst builder = {\n module: {\n description: 'A module type: cjs or esm',\n type: 'string',\n alias: 'm',\n },\n watch: {\n description: 'Whether watch mode is enabled or not',\n type: 'boolean',\n alias: 'w',\n },\n} as const;\n\nexport const run: CommandModule<unknown, InferredOptionTypes<typeof builder>> = {\n command: 'run <file>',\n describe: 'Run script',\n builder,\n async handler(argv) {\n const file = argv.file?.toString() || '';\n const module = await detectModuleType(file, argv.module);\n\n const args = ['--no-warnings'];\n if (argv.watch) {\n args.push('--watch');\n }\n if (module === 'cjs') {\n args.push('--require', 'ts-node/register');\n } else {\n args.push('--loader', 'ts-node/esm');\n }\n args.push(file);\n const [, ...additionalArguments] = argv._;\n child_process.spawnSync('node', [...args, ...additionalArguments.map((arg) => arg.toString())], {\n shell: true,\n stdio: 'inherit',\n env: { ...process.env, TS_NODE_TRANSPILE_ONLY: '1' },\n });\n },\n};\n\nasync function detectModuleType(file: string, module?: string): Promise<'cjs' | 'esm'> {\n if (module === 'cjs' || file.endsWith('.cts')) {\n return 'cjs';\n }\n if (module === 'esm' || file.endsWith('.mts')) {\n return 'esm';\n }\n\n let dirPath = path.dirname(file);\n for (;;) {\n const packageJson = await readPackageJson(dirPath);\n if (packageJson) {\n if (packageJson.type === 'module') {\n return 'esm';\n }\n break;\n }\n\n const nextDirPath = path.dirname(dirPath);\n if (!nextDirPath || nextDirPath === dirPath) {\n break;\n }\n dirPath = nextDirPath;\n }\n return 'cjs';\n}\n","import yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\n\nimport { app, functions, lib } from './commands/build/build.js';\nimport { run } from './commands/run.js';\n\nawait yargs(hideBin(process.argv))\n .scriptName('build-ts')\n .command(app)\n .command(functions)\n .command(lib)\n .command(run)\n .demandCommand()\n .strict()\n .help().argv;\n"],"names":["allTargetCategories","async","readPackageJson","dirPath","packageJsonText","fs","promises","readFile","path","join","JSON","parse","builder","input","description","type","alias","default","minify","sourcemap","external","verbose","env","dotenv","appBuilder","moduleType","loadEnvironmentVariables","argv","cwd","envVars","name","map","e","toString","undefined","process","stringify","dotenvPath","parsed","config","key","value","Object","entries","createPlugins","targetDetail","packageJson","namespace","externalDeps","item","dependencies","push","extensions","babelConfigPath","url","fileURLToPath","dirname","import","meta","plugins","replace","delimiters","preventAssignment","values","json","externals","deps","devDeps","peerDeps","optDeps","include","exclude","RegExp","resolve","commonjs","babel","configFile","babelHelpers","ts","transpiler","babelConfig","string","terser","analyze","summaryOnly","app","command","describe","build","package","functions","lib","targetCategory","relativePackageDirPath","packageDirPath","console","error","exit","existsSync","verifyInput","endsWith","detectTargetDetail","info","packageName","match","exec","getNamespaceAndName","isEsm","outputOptionsList","bundle","BUILD_TS_COREJS","BUILD_TS_VERBOSE","BUILD_TS_TARGET_CATEGORY","BUILD_TS_TARGET_DETAIL","main","file","format","dir","entryFileNames","preserveModules","length","buildFailed","chdir","_bundle","Promise","all","rollup","rm","recursive","force","opts","write","devDependencies","writeFile","close","run","module","watch","nextDirPath","detectModuleType","args","additionalArguments","_","child_process","spawnSync","arg","shell","stdio","TS_NODE_TRANSPILE_ONLY","yargs","hideBin","scriptName","demandCommand","strict","help"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "build-ts",
3
- "version": "5.1.0",
3
+ "version": "5.1.1",
4
4
  "repository": "github:WillBooster/build-ts",
5
5
  "license": "UNLICENSED",
6
6
  "author": "WillBooster Inc.",
@@ -70,7 +70,7 @@
70
70
  "@willbooster/renovate-config": "9.5.0",
71
71
  "@willbooster/shared-lib": "1.8.1",
72
72
  "conventional-changelog-conventionalcommits": "5.0.0",
73
- "eslint": "8.32.0",
73
+ "eslint": "8.33.0",
74
74
  "eslint-config-prettier": "8.6.0",
75
75
  "eslint-import-resolver-typescript": "3.5.3",
76
76
  "eslint-plugin-import": "2.27.5",
@@ -88,7 +88,7 @@
88
88
  "typescript": "4.9.4",
89
89
  "vitest": "0.28.3"
90
90
  },
91
- "packageManager": "yarn@4.0.0-rc.36",
91
+ "packageManager": "yarn@4.0.0-rc.37",
92
92
  "engines": {
93
93
  "node": ">=16.19.0"
94
94
  }