@b9g/libuild 0.1.3 → 0.1.5

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.
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/libuild.ts"],
4
- "sourcesContent": ["import * as FS from \"fs/promises\";\nimport * as Path from \"path\";\nimport {spawn} from \"child_process\";\n\nimport * as ESBuild from \"esbuild\";\nimport * as TS from \"typescript\";\nimport {umdPlugin} from \"./umd-plugin.js\";\n\ninterface PackageJSON {\n name: string;\n version: string;\n private?: boolean;\n main?: string;\n module?: string;\n types?: string;\n exports?: any;\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n engines?: Record<string, string>;\n [key: string]: any;\n}\n\ninterface BuildOptions {\n formats: {\n esm: boolean;\n cjs: boolean;\n umd: boolean;\n };\n}\n\nfunction isValidEntrypoint(filename: string): boolean {\n if (!filename.endsWith(\".ts\") && !filename.endsWith(\".js\")) return false;\n if (filename.endsWith(\".d.ts\")) return false; // Ignore TypeScript declaration files\n if (filename.startsWith(\"_\")) return false;\n if (filename.startsWith(\".\")) return false;\n return true;\n}\n\nasync function findEntryPoints(srcDir: string): Promise<string[]> {\n const files = await FS.readdir(srcDir);\n return files\n .filter(isValidEntrypoint)\n .map(file => Path.basename(file, Path.extname(file)))\n .sort();\n}\n\nasync function detectMainEntry(pkg: PackageJSON, entries: string[]): Promise<string> {\n // If exports[\".\"] is specified, try to extract the main entry from it\n if (pkg.exports && pkg.exports[\".\"]) {\n const dotExport = pkg.exports[\".\"];\n let importPath: string | undefined;\n\n if (typeof dotExport === \"string\") {\n importPath = dotExport;\n } else if (typeof dotExport === \"object\" && dotExport.import) {\n importPath = dotExport.import;\n }\n\n if (importPath) {\n // Extract entry name from path like \"./src/foo.js\" -> \"foo\"\n const match = importPath.match(/\\.\\/src\\/([^.]+)/);\n if (match && entries.includes(match[1])) {\n return match[1];\n }\n }\n }\n\n // If main is specified in package.json, use it\n if (pkg.main && typeof pkg.main === \"string\") {\n const mainBase = Path.basename(pkg.main, Path.extname(pkg.main));\n if (entries.includes(mainBase)) {\n return mainBase;\n }\n }\n\n // If there's an index entry, that's the main\n if (entries.includes(\"index\")) {\n return \"index\";\n }\n\n // If there's only one entry, that's the main\n if (entries.length === 1) {\n return entries[0];\n }\n\n // Try to use the package name\n const pkgNameParts = pkg.name.split(\"/\");\n const pkgName = pkgNameParts[pkgNameParts.length - 1];\n if (!pkgName) {\n throw new Error(`Invalid package name: ${pkg.name}`);\n }\n if (entries.includes(pkgName)) {\n return pkgName;\n }\n\n // Default to first entry alphabetically\n return entries[0];\n}\n\nfunction checkIfExportIsStale(exportKey: string, exportValue: any, entries: string[]): boolean {\n // System exports like package.json are never stale\n if (exportKey === \"./package.json\" || typeof exportValue === \"string\" && (exportValue === \"./package.json\" || exportValue.endsWith(\"/package.json\"))) {\n return false;\n }\n\n // Extract entry name from export value first (most reliable), then key\n let entryName: string | undefined;\n let hasInvalidPath = false;\n\n // Try to extract from value first (most reliable)\n if (typeof exportValue === \"string\") {\n // Check for nested paths first (these are always invalid)\n if (exportValue.match(/\\.\\/src\\/.*\\/.*\\.(ts|js)$/)) {\n hasInvalidPath = true;\n } else {\n const match = exportValue.match(/\\.\\/src\\/([^/]+)\\.(ts|js)$/);\n if (match) {\n const filename = match[1] + \".\" + match[2];\n // Check if this would be an invalid entrypoint (invalid entrypoints should throw errors, not be treated as stale)\n if (!isValidEntrypoint(filename)) {\n hasInvalidPath = true;\n } else {\n entryName = match[1];\n }\n }\n }\n } else if (typeof exportValue === \"object\" && exportValue !== null) {\n // Try import field first, then require\n const importPath = exportValue.import || exportValue.require;\n if (typeof importPath === \"string\") {\n // Check for nested paths first (these are always invalid)\n if (importPath.match(/\\.\\/src\\/.*\\/.*\\.(ts|js|cjs)$/)) {\n hasInvalidPath = true;\n } else {\n const match = importPath.match(/\\.\\/src\\/([^/]+)\\.(ts|js|cjs)$/);\n if (match) {\n const filename = match[1] + \".\" + match[2].replace('cjs', 'js'); // normalize cjs to js for validation\n if (!isValidEntrypoint(filename)) {\n hasInvalidPath = true;\n } else {\n entryName = match[1];\n }\n }\n }\n }\n }\n\n // If no entry name from value, try to extract from key (e.g., \"./utils\" -> \"utils\", \"./utils.js\" -> \"utils\")\n if (!entryName && !hasInvalidPath && exportKey.startsWith(\"./\") && exportKey !== \".\") {\n const keyName = exportKey.slice(2).replace(/\\.js$/, \"\");\n if (keyName && !keyName.includes(\"/\")) {\n entryName = keyName;\n }\n }\n\n // If we found an invalid path, don't treat as stale - let the validation logic handle it\n if (hasInvalidPath) {\n return false;\n }\n\n // Check if the entry still exists\n return entryName ? !entries.includes(entryName) : false;\n}\n\nfunction generateExports(entries: string[], mainEntry: string, options: BuildOptions, existingExports: any = {}): {exports: any, staleExports: string[]} {\n const exports: any = {};\n const staleExports: string[] = [];\n\n function createExportEntry(entry: string) {\n const exportEntry: any = {\n types: `./src/${entry}.d.ts`,\n import: `./src/${entry}.js`,\n };\n if (options.formats.cjs) {\n exportEntry.require = `./src/${entry}.cjs`;\n }\n return exportEntry;\n }\n\n function expandExistingExport(existing: any, entryFromPath?: string) {\n if (typeof existing === \"string\") {\n // Special case for system exports (package.json, etc.)\n if (existing === \"./package.json\" || existing.endsWith(\"/package.json\")) {\n return existing;\n }\n\n // Extract entry name and validate it's a valid entrypoint\n const match = existing.match(/\\.\\/src\\/([^/]+\\.(?:ts|js))$/);\n if (match) {\n const filename = match[1];\n if (!isValidEntrypoint(filename)) {\n throw new Error(`Export path '${existing}' references '${filename}' which is not a valid entrypoint. Valid entrypoints cannot start with '_' or '.' and must be .ts/.js files in src/.`);\n }\n const entry = Path.basename(filename, Path.extname(filename));\n\n // Convert string export to conditional export\n return options.formats.cjs ? {\n types: `./src/${entry}.d.ts`,\n import: existing,\n require: `./src/${entry}.cjs`,\n } : {\n types: `./src/${entry}.d.ts`,\n import: existing,\n };\n }\n\n // If we have entryFromPath, use it (this is for auto-discovered entries)\n if (entryFromPath) {\n return options.formats.cjs ? {\n types: `./src/${entryFromPath}.d.ts`,\n import: existing,\n require: `./src/${entryFromPath}.cjs`,\n } : {\n types: `./src/${entryFromPath}.d.ts`,\n import: existing,\n };\n }\n\n throw new Error(`Export path '${existing}' must point to a valid entrypoint in src/ (e.g., './src/utils.js'). Nested directories and internal files (starting with '_' or '.') are not allowed.`);\n } else if (typeof existing === \"object\" && existing !== null) {\n // Existing object - expand if needed\n if (options.formats.cjs && !existing.require && existing.import) {\n // Validate the import path\n const match = existing.import?.match(/\\.\\/src\\/([^/]+\\.(?:ts|js))$/);\n if (match) {\n const filename = match[1];\n if (!isValidEntrypoint(filename)) {\n throw new Error(`Export import path '${existing.import}' references '${filename}' which is not a valid entrypoint. Valid entrypoints cannot start with '_' or '.' and must be .ts/.js files in src/.`);\n }\n const entry = Path.basename(filename, Path.extname(filename));\n\n return {\n ...existing,\n types: existing.types || `./src/${entry}.d.ts`,\n require: `./src/${entry}.cjs`,\n };\n }\n\n // If we have entryFromPath, use it\n if (entryFromPath) {\n return {\n ...existing,\n types: existing.types || `./src/${entryFromPath}.d.ts`,\n require: `./src/${entryFromPath}.cjs`,\n };\n }\n\n throw new Error(`Export import path '${existing.import}' must point to a valid entrypoint in src/ (e.g., './src/utils.js'). Nested directories and internal files are not allowed.`);\n }\n return {\n types: existing.types || `./src/${entryFromPath}.d.ts`,\n ...existing,\n };\n }\n return existing;\n }\n\n // First, expand all existing exports and detect stale ones\n // The expandExistingExport function will handle validation\n for (const [key, value] of Object.entries(existingExports)) {\n // Check if this export points to a valid entry\n const isStale = checkIfExportIsStale(key, value, entries);\n if (isStale) {\n staleExports.push(key);\n } else {\n exports[key] = expandExistingExport(value);\n }\n }\n\n // Handle main export - respect existing \".\" export or create new one\n if (!exports[\".\"]) {\n exports[\".\"] = createExportEntry(mainEntry);\n } else {\n exports[\".\"] = expandExistingExport(exports[\".\"], mainEntry);\n }\n\n // All entries (including duplicating main for clarity)\n for (const entry of entries) {\n if (entry === \"umd\") continue; // UMD is special\n\n const key = `./${entry}`;\n\n // Only add if not already specified by user\n if (!exports[key]) {\n exports[key] = createExportEntry(entry);\n } else {\n exports[key] = expandExistingExport(exports[key], entry);\n }\n\n // Legacy .js extension support (only if not user-specified)\n if (!exports[`${key}.js`]) {\n exports[`${key}.js`] = exports[key];\n }\n\n // Special case for jsx-runtime\n if (entry === \"jsx-runtime\") {\n if (!exports[\"./jsx-dev-runtime\"]) {\n exports[\"./jsx-dev-runtime\"] = exports[key];\n }\n if (!exports[\"./jsx-dev-runtime.js\"]) {\n exports[\"./jsx-dev-runtime.js\"] = exports[key];\n }\n }\n }\n\n // UMD export (CommonJS only)\n if (options.formats.umd && !exports[\"./umd\"]) {\n exports[\"./umd\"] = {\n require: \"./src/umd.js\",\n };\n if (!exports[\"./umd.js\"]) {\n exports[\"./umd.js\"] = exports[\"./umd\"];\n }\n }\n\n // Package.json export\n if (!exports[\"./package.json\"]) {\n exports[\"./package.json\"] = \"./package.json\";\n }\n\n return {exports, staleExports};\n}\n\nexport function transformSrcToDist(value: any): any {\n if (typeof value === \"string\") {\n // Add ./ prefix to src references\n if (value.startsWith(\"src/\") || value === \"src\") {\n return \"./\" + value;\n }\n return value;\n } else if (Array.isArray(value)) {\n return value.map(transformSrcToDist);\n } else if (typeof value === \"object\" && value !== null) {\n const transformed: any = {};\n for (const [key, val] of Object.entries(value)) {\n transformed[key] = transformSrcToDist(val);\n }\n return transformed;\n }\n return value;\n}\n\nfunction fixExportsForDist(obj: any): any {\n if (typeof obj === \"string\") {\n // Fix paths that incorrectly have ./dist/dist/dist/... -> ./src/\n if (obj.includes(\"/dist/\") && obj.includes(\"/src/\")) {\n // Extract everything after the last /src/\n const match = obj.match(/.*\\/src\\/(.*)$/);\n if (match) {\n return `./src/${match[1]}`;\n }\n }\n // Fix paths that incorrectly start with ./dist/src/ -> ./src/\n if (obj.startsWith(\"./dist/src/\")) {\n return obj.replace(\"./dist/src/\", \"./src/\");\n }\n // Fix package.json path\n if (obj.includes(\"/dist/\") && obj.endsWith(\"/package.json\")) {\n return \"./package.json\";\n }\n return obj;\n } else if (Array.isArray(obj)) {\n return obj.map(fixExportsForDist);\n } else if (typeof obj === \"object\" && obj !== null) {\n const fixed: any = {};\n for (const [key, val] of Object.entries(obj)) {\n // Handle special cases for package.json fields\n if (key === \"files\" && Array.isArray(val)) {\n // For files field in dist package.json, remove \"dist/\" entries since we're already in dist\n fixed[key] = val.filter((file: string) => file !== \"dist/\" && file !== \"dist\").concat(val.includes(\"dist/\") || val.includes(\"dist\") ? [\"src/\"] : []);\n } else {\n fixed[key] = fixExportsForDist(val);\n }\n }\n return fixed;\n }\n return obj;\n}\n\nfunction cleanPackageJSON(pkg: PackageJSON, mainEntry: string, options: BuildOptions): PackageJSON {\n const cleaned: PackageJSON = {\n name: pkg.name,\n version: pkg.version,\n };\n\n const fieldsToKeep = [\n \"description\",\n \"keywords\",\n \"author\",\n \"contributors\",\n \"maintainers\",\n \"license\",\n \"repository\",\n \"bugs\",\n \"homepage\",\n \"funding\",\n \"bin\",\n \"scripts\",\n \"dependencies\",\n \"peerDependencies\",\n \"optionalDependencies\",\n \"bundledDependencies\",\n \"engines\",\n \"cpu\",\n \"os\",\n \"type\",\n \"types\",\n \"files\",\n \"sideEffects\",\n \"browserslist\",\n ];\n\n const pathFields = [\"files\", \"types\", \"scripts\"];\n\n for (const field of fieldsToKeep) {\n if (pkg[field] !== undefined) {\n if (field === \"scripts\") {\n // Only keep scripts that npm actually runs for installed packages\n const npmLifecycleScripts = [\"postinstall\", \"preinstall\", \"install\", \"preuninstall\", \"postuninstall\", \"shrinkwrap\"];\n const filteredScripts: Record<string, string> = {};\n for (const [scriptName, scriptValue] of Object.entries(pkg[field] || {})) {\n if (npmLifecycleScripts.includes(scriptName)) {\n filteredScripts[scriptName] = scriptValue;\n }\n }\n if (Object.keys(filteredScripts).length > 0) {\n // Apply path transformation to the filtered scripts\n cleaned[field] = transformSrcToDist(filteredScripts);\n }\n } else if (field === \"bin\") {\n // Apply path transformation to bin field\n cleaned[field] = transformSrcToDist(pkg[field]);\n } else if (pathFields.includes(field)) {\n cleaned[field] = transformSrcToDist(pkg[field]);\n } else {\n cleaned[field] = pkg[field];\n }\n }\n }\n\n if (!cleaned.type) {\n cleaned.type = \"module\";\n }\n\n if (options.formats.cjs) {\n cleaned.main = `src/${mainEntry}.cjs`;\n }\n cleaned.module = `src/${mainEntry}.js`;\n cleaned.types = `src/${mainEntry}.d.ts`;\n\n return cleaned;\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await FS.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\n\nexport async function build(cwd: string, save: boolean = false): Promise<{distPkg: PackageJSON, rootPkg: PackageJSON}> {\n console.log(\"Building with libuild...\");\n\n const srcDir = Path.join(cwd, \"src\");\n const distDir = Path.join(cwd, \"dist\");\n const distSrcDir = Path.join(distDir, \"src\");\n\n // Check src directory exists\n if (!await fileExists(srcDir)) {\n throw new Error(\"No src/ directory found\");\n }\n\n // Load package.json\n const pkgPath = Path.join(cwd, \"package.json\");\n const pkg = JSON.parse(await FS.readFile(pkgPath, \"utf-8\")) as PackageJSON;\n\n // Check for unsafe publishing conditions\n if (!pkg.private) {\n console.warn(\"\u26A0\uFE0F WARNING: Root package.json is not private - this could lead to accidental publishing of development package.json\");\n console.warn(\" Consider setting 'private: true' in your root package.json\");\n }\n\n // Check if dist directory is gitignored\n const gitignorePath = Path.join(cwd, \".gitignore\");\n if (await fileExists(gitignorePath)) {\n const gitignoreContent = await FS.readFile(gitignorePath, \"utf-8\");\n const isDistIgnored = gitignoreContent.includes(\"dist/\") ||\n gitignoreContent.includes(\"/dist\") ||\n gitignoreContent.includes(\"dist\\n\") ||\n gitignoreContent.includes(\"dist\\r\\n\");\n\n if (!isDistIgnored) {\n console.warn(\"\u26A0\uFE0F WARNING: dist/ directory is not in .gitignore - built files should not be committed\");\n console.warn(\" Add 'dist/' to your .gitignore file\");\n }\n }\n\n // Find entry points\n const entries = await findEntryPoints(srcDir);\n if (entries.length === 0) {\n throw new Error(\"No entry points found in src/\");\n }\n\n const options: BuildOptions = {\n formats: {\n esm: true, // Always build ESM\n cjs: !!pkg.main, // Generate CJS only if main field exists\n umd: entries.includes(\"umd\")\n }\n };\n \n const mainEntry = await detectMainEntry(pkg, entries);\n\n console.log(\" Found entries:\", entries.join(\", \"));\n console.log(\" Main entry:\", mainEntry);\n if (options.formats.cjs) {\n console.log(\" Formats: ESM, CJS\" + (options.formats.umd ? \", UMD\" : \"\"));\n } else {\n console.log(\" Formats: ESM\" + (options.formats.umd ? \", UMD\" : \"\") + \" (no main field - CJS disabled)\");\n }\n\n // Clean dist directory\n if (await fileExists(distDir)) {\n await FS.rm(distDir, {recursive: true});\n }\n await FS.mkdir(distDir, {recursive: true});\n\n // Prepare entry points for batch building\n const entryPoints: string[] = [];\n const umdEntries: string[] = [];\n\n for (const entry of entries) {\n const entryPath = Path.join(srcDir, `${entry}.ts`);\n const jsEntryPath = Path.join(srcDir, `${entry}.js`);\n const actualPath = await fileExists(entryPath) ? entryPath : jsEntryPath;\n\n if (!await fileExists(actualPath)) {\n throw new Error(`Entry point file not found: ${actualPath}. Expected ${entry}.ts or ${entry}.js in src/ directory.`);\n }\n\n if (entry === \"umd\") {\n umdEntries.push(actualPath);\n } else {\n entryPoints.push(actualPath);\n }\n }\n\n // Build all regular entries together for shared chunk deduplication\n if (entryPoints.length > 0) {\n // ESM build with splitting for shared chunks\n console.log(` Building ${entryPoints.length} entries (ESM)...`);\n await ESBuild.build({\n entryPoints,\n outdir: distSrcDir,\n format: \"esm\",\n entryNames: \"[name]\",\n outExtension: {\".js\": \".js\"},\n bundle: true,\n splitting: true, // Enable shared chunk extraction\n minify: false,\n sourcemap: true,\n external: Object.keys(pkg.dependencies || {}),\n platform: \"node\",\n target: \"node16\",\n });\n\n // CJS build (only if main field exists)\n if (options.formats.cjs) {\n console.log(` Building ${entryPoints.length} entries (CJS)...`);\n await ESBuild.build({\n entryPoints,\n outdir: distSrcDir,\n format: \"cjs\",\n entryNames: \"[name]\",\n outExtension: {\".js\": \".cjs\"},\n bundle: true,\n minify: false,\n sourcemap: true,\n external: Object.keys(pkg.dependencies || {}),\n platform: \"node\",\n target: \"node16\",\n // Note: CJS doesn't support splitting, but building together still helps with consistency\n });\n }\n }\n\n // Build UMD entries separately (they need special plugin handling)\n for (const umdPath of umdEntries) {\n const entry = Path.basename(umdPath, Path.extname(umdPath));\n console.log(` Building ${entry} (UMD)...`);\n const globalName = pkg.name.includes(\"/\")\n ? pkg.name.split(\"/\").pop()!.replace(/-/g, \"\").charAt(0).toUpperCase() + pkg.name.split(\"/\").pop()!.replace(/-/g, \"\").slice(1)\n : pkg.name.replace(/-/g, \"\").charAt(0).toUpperCase() + pkg.name.replace(/-/g, \"\").slice(1);\n\n await ESBuild.build({\n entryPoints: [umdPath],\n outdir: distSrcDir,\n format: \"cjs\",\n entryNames: \"[name]\",\n bundle: true,\n minify: false,\n sourcemap: true,\n external: Object.keys(pkg.dependencies || {}),\n platform: \"node\",\n target: \"node16\",\n plugins: [umdPlugin({globalName})],\n });\n }\n\n // Generate TypeScript declarations using TypeScript compiler API\n console.log(\" Generating TypeScript declarations...\");\n\n // Find all TypeScript source files (including UMD entries)\n const allTsFiles = [...entryPoints, ...umdEntries].filter(file => file.endsWith('.ts'));\n\n if (allTsFiles.length > 0) {\n const compilerOptions: TS.CompilerOptions = {\n declaration: true,\n emitDeclarationOnly: true,\n outDir: distSrcDir,\n rootDir: srcDir,\n skipLibCheck: true,\n esModuleInterop: true,\n target: TS.ScriptTarget.ES2020,\n module: TS.ModuleKind.ESNext,\n };\n\n // Create program with explicit config to avoid tsconfig.json interference\n const program = TS.createProgram(allTsFiles, compilerOptions);\n const emitResult = program.emit();\n\n if (emitResult.diagnostics.length > 0) {\n const diagnostics = TS.formatDiagnosticsWithColorAndContext(emitResult.diagnostics, {\n getCanonicalFileName: path => path,\n getCurrentDirectory: () => cwd,\n getNewLine: () => '\\n'\n });\n throw new Error(`TypeScript declaration generation failed:\\n${diagnostics}`);\n }\n\n }\n\n // Add triple-slash references for Deno (preserve shebang if present)\n for (const entry of entries) {\n if (entry === \"umd\") continue;\n\n const jsPath = Path.join(distSrcDir, `${entry}.js`);\n const dtsPath = Path.join(distSrcDir, `${entry}.d.ts`);\n\n if (await fileExists(jsPath) && await fileExists(dtsPath)) {\n const content = await FS.readFile(jsPath, \"utf-8\");\n \n // Check if file starts with shebang\n if (content.startsWith(\"#!\")) {\n const lines = content.split(\"\\n\");\n const shebang = lines[0];\n const rest = lines.slice(1).join(\"\\n\");\n await FS.writeFile(jsPath, `${shebang}\\n/// <reference types=\"./${entry}.d.ts\" />\\n${rest}`);\n } else {\n await FS.writeFile(jsPath, `/// <reference types=\"./${entry}.d.ts\" />\\n${content}`);\n }\n }\n }\n\n // Initialize auto-discovered files tracking\n const autoDiscoveredFiles: string[] = [];\n\n // Generate package.json\n console.log(\" Generating package.json...\");\n const cleanedPkg = cleanPackageJSON(pkg, mainEntry, options);\n const exportsResult = generateExports(entries, mainEntry, options, pkg.exports);\n cleanedPkg.exports = fixExportsForDist(exportsResult.exports);\n\n // Handle stale exports\n if (exportsResult.staleExports.length > 0) {\n console.warn(`\u26A0\uFE0F WARNING: Found ${exportsResult.staleExports.length} stale export(s) pointing to missing src/ files:`);\n for (const staleExport of exportsResult.staleExports) {\n console.warn(` - ${staleExport}`);\n }\n if (save) {\n console.log(\" Removing stale exports from root package.json (--save mode)\");\n } else {\n console.warn(\" Use --save to remove these from root package.json\");\n }\n }\n\n // Add auto-discovered files to dist package.json files field\n if (cleanedPkg.files && Array.isArray(cleanedPkg.files)) {\n for (const autoFile of autoDiscoveredFiles) {\n if (!cleanedPkg.files.includes(autoFile)) {\n cleanedPkg.files.push(autoFile);\n }\n }\n }\n\n // Apply path fixes to the dist package.json\n const fixedDistPkg = fixExportsForDist(cleanedPkg);\n \n await FS.writeFile(\n Path.join(distDir, \"package.json\"),\n JSON.stringify(fixedDistPkg, null, 2) + \"\\n\"\n );\n\n // Copy additional files\n const defaultFilesToCopy = [\"README.md\", \"LICENSE\", \"CHANGELOG.md\"];\n\n // Copy default files\n for (const file of defaultFilesToCopy) {\n const srcPath = Path.join(cwd, file);\n if (await fileExists(srcPath)) {\n console.log(` Copying ${file}...`);\n await FS.copyFile(srcPath, Path.join(distDir, file));\n }\n }\n\n // Auto-discover and add common files to files field if files field exists\n const commonFiles = [\"README.md\", \"LICENSE\", \"CHANGELOG.md\", \"COPYING\", \"AUTHORS\"];\n if (pkg.files && Array.isArray(pkg.files)) {\n for (const commonFile of commonFiles) {\n const commonPath = Path.join(cwd, commonFile);\n if (await fileExists(commonPath) && !pkg.files.includes(commonFile)) {\n console.log(` Auto-discovered ${commonFile}, adding to files field...`);\n pkg.files.push(commonFile);\n autoDiscoveredFiles.push(commonFile);\n }\n }\n }\n\n // Copy files specified in package.json files field\n if (pkg.files && Array.isArray(pkg.files)) {\n console.log(\" Copying files from package.json files field...\");\n\n for (const pattern of pkg.files) {\n if (typeof pattern === \"string\" && (pattern.includes(\"src\") || pattern.includes(\"dist\"))) {\n // Skip src/dist patterns as they're handled by the build process\n continue;\n }\n\n if (typeof pattern === \"string\") {\n const srcPath = Path.join(cwd, pattern);\n const destPath = Path.join(distDir, pattern);\n\n if (await fileExists(srcPath)) {\n const stat = await FS.stat(srcPath);\n if (stat.isDirectory()) {\n console.log(` Copying directory ${pattern}/...`);\n await FS.mkdir(Path.dirname(destPath), {recursive: true});\n await FS.cp(srcPath, destPath, {recursive: true});\n } else {\n console.log(` Copying ${pattern}...`);\n await FS.mkdir(Path.dirname(destPath), {recursive: true});\n await FS.copyFile(srcPath, destPath);\n }\n } else if (pattern.includes(\"*\")) {\n const baseDir = pattern.split(\"*\")[0].replace(/\\/$/, \"\");\n if (baseDir && await fileExists(Path.join(cwd, baseDir))) {\n console.log(` Copying pattern ${pattern}...`);\n const baseSrcPath = Path.join(cwd, baseDir);\n const baseDestPath = Path.join(distDir, baseDir);\n await FS.mkdir(Path.dirname(baseDestPath), {recursive: true});\n await FS.cp(baseSrcPath, baseDestPath, {recursive: true});\n } else {\n throw new Error(`Pattern base directory not found for \"${pattern}\". Expected directory: ${Path.join(cwd, baseDir)}`);\n }\n } else {\n throw new Error(`File specified in files field not found: ${srcPath}. Remove \"${pattern}\" from package.json files field or create the file.`);\n }\n } else {\n throw new Error(`Invalid files field entry: ${JSON.stringify(pattern)}. Files field entries must be strings.`);\n }\n }\n }\n\n if (save) {\n console.log(\" Updating root package.json...\");\n const rootPkg = {...pkg};\n\n rootPkg.private = true;\n\n // Update main/module/types to point to dist\n if (options.formats.cjs) {\n rootPkg.main = `./dist/src/${mainEntry}.cjs`;\n }\n rootPkg.module = `./dist/src/${mainEntry}.js`;\n rootPkg.types = `./dist/src/${mainEntry}.d.ts`;\n\n if (rootPkg.typings && typeof rootPkg.typings === \"string\") {\n rootPkg.typings = rootPkg.typings.startsWith(\"./dist/\") ? rootPkg.typings : \"./\" + Path.join(\"dist\", rootPkg.typings);\n }\n\n // Update exports to point to dist\n const rootExports: any = {};\n for (const [key, value] of Object.entries(cleanedPkg.exports)) {\n if (typeof value === \"string\") {\n // Only add ./dist prefix if not already present\n rootExports[key] = value.startsWith(\"./dist/\") ? value : `./dist${value.startsWith('.') ? value.slice(1) : value}`;\n } else if (typeof value === \"object\" && value !== null) {\n rootExports[key] = {};\n for (const [subKey, subValue] of Object.entries(value)) {\n if (typeof subValue === \"string\") {\n // Only add ./dist prefix if not already present\n rootExports[key][subKey] = subValue.startsWith(\"./dist/\") ? subValue : `./dist${subValue.startsWith('.') ? subValue.slice(1) : subValue}`;\n }\n }\n }\n }\n rootPkg.exports = rootExports;\n\n // Update bin to point to dist\n if (rootPkg.bin) {\n if (typeof rootPkg.bin === \"string\") {\n if (!rootPkg.bin.startsWith(\"./dist/\")) {\n rootPkg.bin = \"./\" + Path.join(\"dist\", rootPkg.bin);\n }\n } else {\n for (const [name, binPath] of Object.entries(rootPkg.bin)) {\n if (typeof binPath === \"string\" && !binPath.startsWith(\"./dist/\")) {\n rootPkg.bin[name] = \"./\" + Path.join(\"dist\", binPath);\n }\n }\n }\n }\n\n // Only modify files field if it existed in the original package.json\n if (pkg.files !== undefined) {\n if (!rootPkg.files) {\n rootPkg.files = [];\n } else if (!Array.isArray(rootPkg.files)) {\n rootPkg.files = [rootPkg.files];\n }\n\n // Add any auto-discovered files that aren't already in root files\n for (const autoFile of autoDiscoveredFiles) {\n if (!rootPkg.files.includes(autoFile)) {\n rootPkg.files.push(autoFile);\n }\n }\n\n // Ensure dist/ is included in files\n if (!rootPkg.files.includes(\"dist/\") && !rootPkg.files.includes(\"dist\")) {\n rootPkg.files.push(\"dist/\");\n }\n }\n\n await FS.writeFile(pkgPath, JSON.stringify(rootPkg, null, 2) + \"\\n\");\n } else {\n console.log(\" Skipping root package.json update (use --save to enable)\");\n }\n\n console.log(\"\\nBuild complete!\");\n\n // Show summary\n console.log(`\\n Output: ${distDir}`);\n console.log(`\\n Entries: ${entries.length}`);\n if (options.formats.cjs) {\n console.log(`\\n Formats: ESM, CJS${options.formats.umd ? \", UMD\" : \"\"}`);\n } else {\n console.log(`\\n Formats: ESM${options.formats.umd ? \", UMD\" : \"\"}`);\n }\n\n // Create rootPkg based on whether --save was used\n let rootPkg = pkg;\n if (save) {\n // rootPkg was already created and saved above\n rootPkg = JSON.parse(await FS.readFile(pkgPath, \"utf-8\")) as PackageJSON;\n }\n\n return {distPkg: fixedDistPkg, rootPkg};\n}\n\nexport async function publish(cwd: string, save: boolean = true) {\n await build(cwd, save);\n\n console.log(\"\\nPublishing to npm...\");\n\n const distDir = Path.join(cwd, \"dist\");\n const distPkgPath = Path.join(distDir, \"package.json\");\n\n if (!await fileExists(distPkgPath)) {\n throw new Error(\"No dist/package.json found. Run 'libuild build' first.\");\n }\n\n // Read the package.json to check if it's a scoped package\n const distPkg = JSON.parse(await FS.readFile(distPkgPath, \"utf-8\")) as PackageJSON;\n \n // Run npm publish in dist directory\n const publishArgs = [\"publish\"];\n if (distPkg.name.startsWith(\"@\")) {\n publishArgs.push(\"--access\", \"public\");\n }\n \n const proc = spawn(\"npm\", publishArgs, {\n cwd: distDir,\n stdio: \"inherit\",\n });\n\n const exitCode = await new Promise((resolve) => {\n proc.on(\"close\", resolve);\n });\n\n if (exitCode === 0) {\n const distPkg = JSON.parse(await FS.readFile(distPkgPath, \"utf-8\")) as PackageJSON;\n console.log(`\\nPublished ${distPkg.name}@${distPkg.version}!`);\n } else {\n throw new Error(\"npm publish failed\");\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["build", "stat", "rootPkg", "distPkg"]
7
- }
package/src/cli.cjs.map DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../package.json", "../../src/cli.ts", "../../src/libuild.ts", "../../src/umd-plugin.ts"],
4
- "sourcesContent": ["{\n \"name\": \"@b9g/libuild\",\n \"version\": \"0.1.3\",\n \"description\": \"Zero-config library builds\",\n \"main\": \"./dist/src/libuild.cjs\",\n \"private\": true,\n \"bin\": {\n \"libuild\": \"./dist/src/cli.js\"\n },\n \"type\": \"module\",\n \"scripts\": {\n \"build\": \"bun run src/cli.ts\",\n \"dev\": \"bun run src/cli.ts\",\n \"publish\": \"bun run src/cli.ts publish\",\n \"test\": \"bun test\",\n \"test-src\": \"node test.js\"\n },\n \"dependencies\": {\n \"esbuild\": \"^0.19.0\",\n \"magic-string\": \"^0.30.0\",\n \"typescript\": \"^5.0.0\"\n },\n \"devDependencies\": {\n \"@types/bun\": \"latest\"\n },\n \"keywords\": [\n \"build\",\n \"library\",\n \"bundler\",\n \"bun\",\n \"zero-config\",\n \"typescript\"\n ],\n \"engines\": {\n \"bun\": \">=1.0.0\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/bikeshaving/libuild.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/bikeshaving/libuild/issues\"\n },\n \"license\": \"MIT\",\n \"module\": \"./dist/src/libuild.js\",\n \"types\": \"./dist/src/libuild.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/src/libuild.d.ts\",\n \"import\": \"./dist/src/libuild.js\",\n \"require\": \"./dist/src/libuild.cjs\"\n },\n \"./cli\": {\n \"types\": \"./dist/src/cli.d.ts\",\n \"import\": \"./dist/src/cli.js\",\n \"require\": \"./dist/src/cli.cjs\"\n },\n \"./cli.js\": {\n \"types\": \"./dist/src/cli.d.ts\",\n \"import\": \"./dist/src/cli.js\",\n \"require\": \"./dist/src/cli.cjs\"\n },\n \"./libuild\": {\n \"types\": \"./dist/src/libuild.d.ts\",\n \"import\": \"./dist/src/libuild.js\",\n \"require\": \"./dist/src/libuild.cjs\"\n },\n \"./libuild.js\": {\n \"types\": \"./dist/src/libuild.d.ts\",\n \"import\": \"./dist/src/libuild.js\",\n \"require\": \"./dist/src/libuild.cjs\"\n },\n \"./umd-plugin\": {\n \"types\": \"./dist/src/umd-plugin.d.ts\",\n \"import\": \"./dist/src/umd-plugin.js\",\n \"require\": \"./dist/src/umd-plugin.cjs\"\n },\n \"./umd-plugin.js\": {\n \"types\": \"./dist/src/umd-plugin.d.ts\",\n \"import\": \"./dist/src/umd-plugin.js\",\n \"require\": \"./dist/src/umd-plugin.cjs\"\n },\n \"./package.json\": \"./dist/package.json\"\n },\n \"files\": [\n \"dist/\",\n \"README.md\"\n ]\n}\n", "#!/usr/bin/env node\nimport {parseArgs} from \"util\";\nimport * as Path from \"path\";\nimport {build, publish} from \"./libuild.ts\";\n\nconst {values, positionals} = parseArgs({\n args: process.argv.slice(2),\n options: {\n help: {type: \"boolean\", short: \"h\"},\n version: {type: \"boolean\", short: \"v\"},\n save: {type: \"boolean\"},\n \"no-save\": {type: \"boolean\"},\n },\n allowPositionals: true,\n});\n\nconst HELP_TEXT = `\nlibuild - Zero-config library builds\n\nUsage:\n libuild [command]\n\nCommands:\n build Build the library (default command)\n publish Build and publish the library\n\nOptions:\n --save Update root package.json to point to dist files\n --no-save Skip package.json updates (for publish command)\n\nExamples:\n libuild # Build the library\n libuild build --save # Build and update package.json for npm link\n libuild publish # Build and publish to npm\n`;\n\nasync function main() {\n if (values.help) {\n console.log(HELP_TEXT);\n process.exit(0);\n }\n\n if (values.version) {\n const pkg = await import(\"../package.json\");\n console.log(pkg.version);\n process.exit(0);\n }\n\n const command = positionals[0] || \"build\";\n const cwd = process.cwd();\n\n // Determine save behavior\n const shouldSave = values.save || (command === \"publish\" && !values[\"no-save\"]);\n\n try {\n switch (command) {\n case \"build\":\n await build(cwd, shouldSave);\n break;\n case \"publish\":\n case \"ship\": // backwards compatibility\n await publish(cwd, shouldSave);\n break;\n default:\n console.error(`Unknown command: ${command}`);\n console.log(HELP_TEXT);\n process.exit(1);\n }\n } catch (error: any) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\n}\n\nmain();\n", "import * as FS from \"fs/promises\";\nimport * as Path from \"path\";\nimport {spawn} from \"child_process\";\n\nimport * as ESBuild from \"esbuild\";\nimport * as TS from \"typescript\";\nimport {umdPlugin} from \"./umd-plugin.js\";\n\ninterface PackageJSON {\n name: string;\n version: string;\n private?: boolean;\n main?: string;\n module?: string;\n types?: string;\n exports?: any;\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n engines?: Record<string, string>;\n [key: string]: any;\n}\n\ninterface BuildOptions {\n formats: {\n esm: boolean;\n cjs: boolean;\n umd: boolean;\n };\n}\n\nfunction isValidEntrypoint(filename: string): boolean {\n if (!filename.endsWith(\".ts\") && !filename.endsWith(\".js\")) return false;\n if (filename.endsWith(\".d.ts\")) return false; // Ignore TypeScript declaration files\n if (filename.startsWith(\"_\")) return false;\n if (filename.startsWith(\".\")) return false;\n return true;\n}\n\nasync function findEntryPoints(srcDir: string): Promise<string[]> {\n const files = await FS.readdir(srcDir);\n return files\n .filter(isValidEntrypoint)\n .map(file => Path.basename(file, Path.extname(file)))\n .sort();\n}\n\nasync function detectMainEntry(pkg: PackageJSON, entries: string[]): Promise<string> {\n // If exports[\".\"] is specified, try to extract the main entry from it\n if (pkg.exports && pkg.exports[\".\"]) {\n const dotExport = pkg.exports[\".\"];\n let importPath: string | undefined;\n\n if (typeof dotExport === \"string\") {\n importPath = dotExport;\n } else if (typeof dotExport === \"object\" && dotExport.import) {\n importPath = dotExport.import;\n }\n\n if (importPath) {\n // Extract entry name from path like \"./src/foo.js\" -> \"foo\"\n const match = importPath.match(/\\.\\/src\\/([^.]+)/);\n if (match && entries.includes(match[1])) {\n return match[1];\n }\n }\n }\n\n // If main is specified in package.json, use it\n if (pkg.main && typeof pkg.main === \"string\") {\n const mainBase = Path.basename(pkg.main, Path.extname(pkg.main));\n if (entries.includes(mainBase)) {\n return mainBase;\n }\n }\n\n // If there's an index entry, that's the main\n if (entries.includes(\"index\")) {\n return \"index\";\n }\n\n // If there's only one entry, that's the main\n if (entries.length === 1) {\n return entries[0];\n }\n\n // Try to use the package name\n const pkgNameParts = pkg.name.split(\"/\");\n const pkgName = pkgNameParts[pkgNameParts.length - 1];\n if (!pkgName) {\n throw new Error(`Invalid package name: ${pkg.name}`);\n }\n if (entries.includes(pkgName)) {\n return pkgName;\n }\n\n // Default to first entry alphabetically\n return entries[0];\n}\n\nfunction checkIfExportIsStale(exportKey: string, exportValue: any, entries: string[]): boolean {\n // System exports like package.json are never stale\n if (exportKey === \"./package.json\" || typeof exportValue === \"string\" && (exportValue === \"./package.json\" || exportValue.endsWith(\"/package.json\"))) {\n return false;\n }\n\n // Extract entry name from export value first (most reliable), then key\n let entryName: string | undefined;\n let hasInvalidPath = false;\n\n // Try to extract from value first (most reliable)\n if (typeof exportValue === \"string\") {\n // Check for nested paths first (these are always invalid)\n if (exportValue.match(/\\.\\/src\\/.*\\/.*\\.(ts|js)$/)) {\n hasInvalidPath = true;\n } else {\n const match = exportValue.match(/\\.\\/src\\/([^/]+)\\.(ts|js)$/);\n if (match) {\n const filename = match[1] + \".\" + match[2];\n // Check if this would be an invalid entrypoint (invalid entrypoints should throw errors, not be treated as stale)\n if (!isValidEntrypoint(filename)) {\n hasInvalidPath = true;\n } else {\n entryName = match[1];\n }\n }\n }\n } else if (typeof exportValue === \"object\" && exportValue !== null) {\n // Try import field first, then require\n const importPath = exportValue.import || exportValue.require;\n if (typeof importPath === \"string\") {\n // Check for nested paths first (these are always invalid)\n if (importPath.match(/\\.\\/src\\/.*\\/.*\\.(ts|js|cjs)$/)) {\n hasInvalidPath = true;\n } else {\n const match = importPath.match(/\\.\\/src\\/([^/]+)\\.(ts|js|cjs)$/);\n if (match) {\n const filename = match[1] + \".\" + match[2].replace('cjs', 'js'); // normalize cjs to js for validation\n if (!isValidEntrypoint(filename)) {\n hasInvalidPath = true;\n } else {\n entryName = match[1];\n }\n }\n }\n }\n }\n\n // If no entry name from value, try to extract from key (e.g., \"./utils\" -> \"utils\", \"./utils.js\" -> \"utils\")\n if (!entryName && !hasInvalidPath && exportKey.startsWith(\"./\") && exportKey !== \".\") {\n const keyName = exportKey.slice(2).replace(/\\.js$/, \"\");\n if (keyName && !keyName.includes(\"/\")) {\n entryName = keyName;\n }\n }\n\n // If we found an invalid path, don't treat as stale - let the validation logic handle it\n if (hasInvalidPath) {\n return false;\n }\n\n // Check if the entry still exists\n return entryName ? !entries.includes(entryName) : false;\n}\n\nfunction generateExports(entries: string[], mainEntry: string, options: BuildOptions, existingExports: any = {}): {exports: any, staleExports: string[]} {\n const exports: any = {};\n const staleExports: string[] = [];\n\n function createExportEntry(entry: string) {\n const exportEntry: any = {\n types: `./src/${entry}.d.ts`,\n import: `./src/${entry}.js`,\n };\n if (options.formats.cjs) {\n exportEntry.require = `./src/${entry}.cjs`;\n }\n return exportEntry;\n }\n\n function expandExistingExport(existing: any, entryFromPath?: string) {\n if (typeof existing === \"string\") {\n // Special case for system exports (package.json, etc.)\n if (existing === \"./package.json\" || existing.endsWith(\"/package.json\")) {\n return existing;\n }\n\n // Extract entry name and validate it's a valid entrypoint\n const match = existing.match(/\\.\\/src\\/([^/]+\\.(?:ts|js))$/);\n if (match) {\n const filename = match[1];\n if (!isValidEntrypoint(filename)) {\n throw new Error(`Export path '${existing}' references '${filename}' which is not a valid entrypoint. Valid entrypoints cannot start with '_' or '.' and must be .ts/.js files in src/.`);\n }\n const entry = Path.basename(filename, Path.extname(filename));\n\n // Convert string export to conditional export\n return options.formats.cjs ? {\n types: `./src/${entry}.d.ts`,\n import: existing,\n require: `./src/${entry}.cjs`,\n } : {\n types: `./src/${entry}.d.ts`,\n import: existing,\n };\n }\n\n // If we have entryFromPath, use it (this is for auto-discovered entries)\n if (entryFromPath) {\n return options.formats.cjs ? {\n types: `./src/${entryFromPath}.d.ts`,\n import: existing,\n require: `./src/${entryFromPath}.cjs`,\n } : {\n types: `./src/${entryFromPath}.d.ts`,\n import: existing,\n };\n }\n\n throw new Error(`Export path '${existing}' must point to a valid entrypoint in src/ (e.g., './src/utils.js'). Nested directories and internal files (starting with '_' or '.') are not allowed.`);\n } else if (typeof existing === \"object\" && existing !== null) {\n // Existing object - expand if needed\n if (options.formats.cjs && !existing.require && existing.import) {\n // Validate the import path\n const match = existing.import?.match(/\\.\\/src\\/([^/]+\\.(?:ts|js))$/);\n if (match) {\n const filename = match[1];\n if (!isValidEntrypoint(filename)) {\n throw new Error(`Export import path '${existing.import}' references '${filename}' which is not a valid entrypoint. Valid entrypoints cannot start with '_' or '.' and must be .ts/.js files in src/.`);\n }\n const entry = Path.basename(filename, Path.extname(filename));\n\n return {\n ...existing,\n types: existing.types || `./src/${entry}.d.ts`,\n require: `./src/${entry}.cjs`,\n };\n }\n\n // If we have entryFromPath, use it\n if (entryFromPath) {\n return {\n ...existing,\n types: existing.types || `./src/${entryFromPath}.d.ts`,\n require: `./src/${entryFromPath}.cjs`,\n };\n }\n\n throw new Error(`Export import path '${existing.import}' must point to a valid entrypoint in src/ (e.g., './src/utils.js'). Nested directories and internal files are not allowed.`);\n }\n return {\n types: existing.types || `./src/${entryFromPath}.d.ts`,\n ...existing,\n };\n }\n return existing;\n }\n\n // First, expand all existing exports and detect stale ones\n // The expandExistingExport function will handle validation\n for (const [key, value] of Object.entries(existingExports)) {\n // Check if this export points to a valid entry\n const isStale = checkIfExportIsStale(key, value, entries);\n if (isStale) {\n staleExports.push(key);\n } else {\n exports[key] = expandExistingExport(value);\n }\n }\n\n // Handle main export - respect existing \".\" export or create new one\n if (!exports[\".\"]) {\n exports[\".\"] = createExportEntry(mainEntry);\n } else {\n exports[\".\"] = expandExistingExport(exports[\".\"], mainEntry);\n }\n\n // All entries (including duplicating main for clarity)\n for (const entry of entries) {\n if (entry === \"umd\") continue; // UMD is special\n\n const key = `./${entry}`;\n\n // Only add if not already specified by user\n if (!exports[key]) {\n exports[key] = createExportEntry(entry);\n } else {\n exports[key] = expandExistingExport(exports[key], entry);\n }\n\n // Legacy .js extension support (only if not user-specified)\n if (!exports[`${key}.js`]) {\n exports[`${key}.js`] = exports[key];\n }\n\n // Special case for jsx-runtime\n if (entry === \"jsx-runtime\") {\n if (!exports[\"./jsx-dev-runtime\"]) {\n exports[\"./jsx-dev-runtime\"] = exports[key];\n }\n if (!exports[\"./jsx-dev-runtime.js\"]) {\n exports[\"./jsx-dev-runtime.js\"] = exports[key];\n }\n }\n }\n\n // UMD export (CommonJS only)\n if (options.formats.umd && !exports[\"./umd\"]) {\n exports[\"./umd\"] = {\n require: \"./src/umd.js\",\n };\n if (!exports[\"./umd.js\"]) {\n exports[\"./umd.js\"] = exports[\"./umd\"];\n }\n }\n\n // Package.json export\n if (!exports[\"./package.json\"]) {\n exports[\"./package.json\"] = \"./package.json\";\n }\n\n return {exports, staleExports};\n}\n\nexport function transformSrcToDist(value: any): any {\n if (typeof value === \"string\") {\n // Add ./ prefix to src references\n if (value.startsWith(\"src/\") || value === \"src\") {\n return \"./\" + value;\n }\n return value;\n } else if (Array.isArray(value)) {\n return value.map(transformSrcToDist);\n } else if (typeof value === \"object\" && value !== null) {\n const transformed: any = {};\n for (const [key, val] of Object.entries(value)) {\n transformed[key] = transformSrcToDist(val);\n }\n return transformed;\n }\n return value;\n}\n\nfunction fixExportsForDist(obj: any): any {\n if (typeof obj === \"string\") {\n // Fix paths that incorrectly have ./dist/dist/dist/... -> ./src/\n if (obj.includes(\"/dist/\") && obj.includes(\"/src/\")) {\n // Extract everything after the last /src/\n const match = obj.match(/.*\\/src\\/(.*)$/);\n if (match) {\n return `./src/${match[1]}`;\n }\n }\n // Fix paths that incorrectly start with ./dist/src/ -> ./src/\n if (obj.startsWith(\"./dist/src/\")) {\n return obj.replace(\"./dist/src/\", \"./src/\");\n }\n // Fix package.json path\n if (obj.includes(\"/dist/\") && obj.endsWith(\"/package.json\")) {\n return \"./package.json\";\n }\n return obj;\n } else if (Array.isArray(obj)) {\n return obj.map(fixExportsForDist);\n } else if (typeof obj === \"object\" && obj !== null) {\n const fixed: any = {};\n for (const [key, val] of Object.entries(obj)) {\n // Handle special cases for package.json fields\n if (key === \"files\" && Array.isArray(val)) {\n // For files field in dist package.json, remove \"dist/\" entries since we're already in dist\n fixed[key] = val.filter((file: string) => file !== \"dist/\" && file !== \"dist\").concat(val.includes(\"dist/\") || val.includes(\"dist\") ? [\"src/\"] : []);\n } else {\n fixed[key] = fixExportsForDist(val);\n }\n }\n return fixed;\n }\n return obj;\n}\n\nfunction cleanPackageJSON(pkg: PackageJSON, mainEntry: string, options: BuildOptions): PackageJSON {\n const cleaned: PackageJSON = {\n name: pkg.name,\n version: pkg.version,\n };\n\n const fieldsToKeep = [\n \"description\",\n \"keywords\",\n \"author\",\n \"contributors\",\n \"maintainers\",\n \"license\",\n \"repository\",\n \"bugs\",\n \"homepage\",\n \"funding\",\n \"bin\",\n \"scripts\",\n \"dependencies\",\n \"peerDependencies\",\n \"optionalDependencies\",\n \"bundledDependencies\",\n \"engines\",\n \"cpu\",\n \"os\",\n \"type\",\n \"types\",\n \"files\",\n \"sideEffects\",\n \"browserslist\",\n ];\n\n const pathFields = [\"files\", \"types\", \"scripts\"];\n\n for (const field of fieldsToKeep) {\n if (pkg[field] !== undefined) {\n if (field === \"scripts\") {\n // Only keep scripts that npm actually runs for installed packages\n const npmLifecycleScripts = [\"postinstall\", \"preinstall\", \"install\", \"preuninstall\", \"postuninstall\", \"shrinkwrap\"];\n const filteredScripts: Record<string, string> = {};\n for (const [scriptName, scriptValue] of Object.entries(pkg[field] || {})) {\n if (npmLifecycleScripts.includes(scriptName)) {\n filteredScripts[scriptName] = scriptValue;\n }\n }\n if (Object.keys(filteredScripts).length > 0) {\n // Apply path transformation to the filtered scripts\n cleaned[field] = transformSrcToDist(filteredScripts);\n }\n } else if (field === \"bin\") {\n // Apply path transformation to bin field\n cleaned[field] = transformSrcToDist(pkg[field]);\n } else if (pathFields.includes(field)) {\n cleaned[field] = transformSrcToDist(pkg[field]);\n } else {\n cleaned[field] = pkg[field];\n }\n }\n }\n\n if (!cleaned.type) {\n cleaned.type = \"module\";\n }\n\n if (options.formats.cjs) {\n cleaned.main = `src/${mainEntry}.cjs`;\n }\n cleaned.module = `src/${mainEntry}.js`;\n cleaned.types = `src/${mainEntry}.d.ts`;\n\n return cleaned;\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await FS.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\n\nexport async function build(cwd: string, save: boolean = false): Promise<{distPkg: PackageJSON, rootPkg: PackageJSON}> {\n console.log(\"Building with libuild...\");\n\n const srcDir = Path.join(cwd, \"src\");\n const distDir = Path.join(cwd, \"dist\");\n const distSrcDir = Path.join(distDir, \"src\");\n\n // Check src directory exists\n if (!await fileExists(srcDir)) {\n throw new Error(\"No src/ directory found\");\n }\n\n // Load package.json\n const pkgPath = Path.join(cwd, \"package.json\");\n const pkg = JSON.parse(await FS.readFile(pkgPath, \"utf-8\")) as PackageJSON;\n\n // Check for unsafe publishing conditions\n if (!pkg.private) {\n console.warn(\"\u26A0\uFE0F WARNING: Root package.json is not private - this could lead to accidental publishing of development package.json\");\n console.warn(\" Consider setting 'private: true' in your root package.json\");\n }\n\n // Check if dist directory is gitignored\n const gitignorePath = Path.join(cwd, \".gitignore\");\n if (await fileExists(gitignorePath)) {\n const gitignoreContent = await FS.readFile(gitignorePath, \"utf-8\");\n const isDistIgnored = gitignoreContent.includes(\"dist/\") ||\n gitignoreContent.includes(\"/dist\") ||\n gitignoreContent.includes(\"dist\\n\") ||\n gitignoreContent.includes(\"dist\\r\\n\");\n\n if (!isDistIgnored) {\n console.warn(\"\u26A0\uFE0F WARNING: dist/ directory is not in .gitignore - built files should not be committed\");\n console.warn(\" Add 'dist/' to your .gitignore file\");\n }\n }\n\n // Find entry points\n const entries = await findEntryPoints(srcDir);\n if (entries.length === 0) {\n throw new Error(\"No entry points found in src/\");\n }\n\n const options: BuildOptions = {\n formats: {\n esm: true, // Always build ESM\n cjs: !!pkg.main, // Generate CJS only if main field exists\n umd: entries.includes(\"umd\")\n }\n };\n \n const mainEntry = await detectMainEntry(pkg, entries);\n\n console.log(\" Found entries:\", entries.join(\", \"));\n console.log(\" Main entry:\", mainEntry);\n if (options.formats.cjs) {\n console.log(\" Formats: ESM, CJS\" + (options.formats.umd ? \", UMD\" : \"\"));\n } else {\n console.log(\" Formats: ESM\" + (options.formats.umd ? \", UMD\" : \"\") + \" (no main field - CJS disabled)\");\n }\n\n // Clean dist directory\n if (await fileExists(distDir)) {\n await FS.rm(distDir, {recursive: true});\n }\n await FS.mkdir(distDir, {recursive: true});\n\n // Prepare entry points for batch building\n const entryPoints: string[] = [];\n const umdEntries: string[] = [];\n\n for (const entry of entries) {\n const entryPath = Path.join(srcDir, `${entry}.ts`);\n const jsEntryPath = Path.join(srcDir, `${entry}.js`);\n const actualPath = await fileExists(entryPath) ? entryPath : jsEntryPath;\n\n if (!await fileExists(actualPath)) {\n throw new Error(`Entry point file not found: ${actualPath}. Expected ${entry}.ts or ${entry}.js in src/ directory.`);\n }\n\n if (entry === \"umd\") {\n umdEntries.push(actualPath);\n } else {\n entryPoints.push(actualPath);\n }\n }\n\n // Build all regular entries together for shared chunk deduplication\n if (entryPoints.length > 0) {\n // ESM build with splitting for shared chunks\n console.log(` Building ${entryPoints.length} entries (ESM)...`);\n await ESBuild.build({\n entryPoints,\n outdir: distSrcDir,\n format: \"esm\",\n entryNames: \"[name]\",\n outExtension: {\".js\": \".js\"},\n bundle: true,\n splitting: true, // Enable shared chunk extraction\n minify: false,\n sourcemap: true,\n external: Object.keys(pkg.dependencies || {}),\n platform: \"node\",\n target: \"node16\",\n });\n\n // CJS build (only if main field exists)\n if (options.formats.cjs) {\n console.log(` Building ${entryPoints.length} entries (CJS)...`);\n await ESBuild.build({\n entryPoints,\n outdir: distSrcDir,\n format: \"cjs\",\n entryNames: \"[name]\",\n outExtension: {\".js\": \".cjs\"},\n bundle: true,\n minify: false,\n sourcemap: true,\n external: Object.keys(pkg.dependencies || {}),\n platform: \"node\",\n target: \"node16\",\n // Note: CJS doesn't support splitting, but building together still helps with consistency\n });\n }\n }\n\n // Build UMD entries separately (they need special plugin handling)\n for (const umdPath of umdEntries) {\n const entry = Path.basename(umdPath, Path.extname(umdPath));\n console.log(` Building ${entry} (UMD)...`);\n const globalName = pkg.name.includes(\"/\")\n ? pkg.name.split(\"/\").pop()!.replace(/-/g, \"\").charAt(0).toUpperCase() + pkg.name.split(\"/\").pop()!.replace(/-/g, \"\").slice(1)\n : pkg.name.replace(/-/g, \"\").charAt(0).toUpperCase() + pkg.name.replace(/-/g, \"\").slice(1);\n\n await ESBuild.build({\n entryPoints: [umdPath],\n outdir: distSrcDir,\n format: \"cjs\",\n entryNames: \"[name]\",\n bundle: true,\n minify: false,\n sourcemap: true,\n external: Object.keys(pkg.dependencies || {}),\n platform: \"node\",\n target: \"node16\",\n plugins: [umdPlugin({globalName})],\n });\n }\n\n // Generate TypeScript declarations using TypeScript compiler API\n console.log(\" Generating TypeScript declarations...\");\n\n // Find all TypeScript source files (including UMD entries)\n const allTsFiles = [...entryPoints, ...umdEntries].filter(file => file.endsWith('.ts'));\n\n if (allTsFiles.length > 0) {\n const compilerOptions: TS.CompilerOptions = {\n declaration: true,\n emitDeclarationOnly: true,\n outDir: distSrcDir,\n rootDir: srcDir,\n skipLibCheck: true,\n esModuleInterop: true,\n target: TS.ScriptTarget.ES2020,\n module: TS.ModuleKind.ESNext,\n };\n\n // Create program with explicit config to avoid tsconfig.json interference\n const program = TS.createProgram(allTsFiles, compilerOptions);\n const emitResult = program.emit();\n\n if (emitResult.diagnostics.length > 0) {\n const diagnostics = TS.formatDiagnosticsWithColorAndContext(emitResult.diagnostics, {\n getCanonicalFileName: path => path,\n getCurrentDirectory: () => cwd,\n getNewLine: () => '\\n'\n });\n throw new Error(`TypeScript declaration generation failed:\\n${diagnostics}`);\n }\n\n }\n\n // Add triple-slash references for Deno (preserve shebang if present)\n for (const entry of entries) {\n if (entry === \"umd\") continue;\n\n const jsPath = Path.join(distSrcDir, `${entry}.js`);\n const dtsPath = Path.join(distSrcDir, `${entry}.d.ts`);\n\n if (await fileExists(jsPath) && await fileExists(dtsPath)) {\n const content = await FS.readFile(jsPath, \"utf-8\");\n \n // Check if file starts with shebang\n if (content.startsWith(\"#!\")) {\n const lines = content.split(\"\\n\");\n const shebang = lines[0];\n const rest = lines.slice(1).join(\"\\n\");\n await FS.writeFile(jsPath, `${shebang}\\n/// <reference types=\"./${entry}.d.ts\" />\\n${rest}`);\n } else {\n await FS.writeFile(jsPath, `/// <reference types=\"./${entry}.d.ts\" />\\n${content}`);\n }\n }\n }\n\n // Initialize auto-discovered files tracking\n const autoDiscoveredFiles: string[] = [];\n\n // Generate package.json\n console.log(\" Generating package.json...\");\n const cleanedPkg = cleanPackageJSON(pkg, mainEntry, options);\n const exportsResult = generateExports(entries, mainEntry, options, pkg.exports);\n cleanedPkg.exports = fixExportsForDist(exportsResult.exports);\n\n // Handle stale exports\n if (exportsResult.staleExports.length > 0) {\n console.warn(`\u26A0\uFE0F WARNING: Found ${exportsResult.staleExports.length} stale export(s) pointing to missing src/ files:`);\n for (const staleExport of exportsResult.staleExports) {\n console.warn(` - ${staleExport}`);\n }\n if (save) {\n console.log(\" Removing stale exports from root package.json (--save mode)\");\n } else {\n console.warn(\" Use --save to remove these from root package.json\");\n }\n }\n\n // Add auto-discovered files to dist package.json files field\n if (cleanedPkg.files && Array.isArray(cleanedPkg.files)) {\n for (const autoFile of autoDiscoveredFiles) {\n if (!cleanedPkg.files.includes(autoFile)) {\n cleanedPkg.files.push(autoFile);\n }\n }\n }\n\n // Apply path fixes to the dist package.json\n const fixedDistPkg = fixExportsForDist(cleanedPkg);\n \n await FS.writeFile(\n Path.join(distDir, \"package.json\"),\n JSON.stringify(fixedDistPkg, null, 2) + \"\\n\"\n );\n\n // Copy additional files\n const defaultFilesToCopy = [\"README.md\", \"LICENSE\", \"CHANGELOG.md\"];\n\n // Copy default files\n for (const file of defaultFilesToCopy) {\n const srcPath = Path.join(cwd, file);\n if (await fileExists(srcPath)) {\n console.log(` Copying ${file}...`);\n await FS.copyFile(srcPath, Path.join(distDir, file));\n }\n }\n\n // Auto-discover and add common files to files field if files field exists\n const commonFiles = [\"README.md\", \"LICENSE\", \"CHANGELOG.md\", \"COPYING\", \"AUTHORS\"];\n if (pkg.files && Array.isArray(pkg.files)) {\n for (const commonFile of commonFiles) {\n const commonPath = Path.join(cwd, commonFile);\n if (await fileExists(commonPath) && !pkg.files.includes(commonFile)) {\n console.log(` Auto-discovered ${commonFile}, adding to files field...`);\n pkg.files.push(commonFile);\n autoDiscoveredFiles.push(commonFile);\n }\n }\n }\n\n // Copy files specified in package.json files field\n if (pkg.files && Array.isArray(pkg.files)) {\n console.log(\" Copying files from package.json files field...\");\n\n for (const pattern of pkg.files) {\n if (typeof pattern === \"string\" && (pattern.includes(\"src\") || pattern.includes(\"dist\"))) {\n // Skip src/dist patterns as they're handled by the build process\n continue;\n }\n\n if (typeof pattern === \"string\") {\n const srcPath = Path.join(cwd, pattern);\n const destPath = Path.join(distDir, pattern);\n\n if (await fileExists(srcPath)) {\n const stat = await FS.stat(srcPath);\n if (stat.isDirectory()) {\n console.log(` Copying directory ${pattern}/...`);\n await FS.mkdir(Path.dirname(destPath), {recursive: true});\n await FS.cp(srcPath, destPath, {recursive: true});\n } else {\n console.log(` Copying ${pattern}...`);\n await FS.mkdir(Path.dirname(destPath), {recursive: true});\n await FS.copyFile(srcPath, destPath);\n }\n } else if (pattern.includes(\"*\")) {\n const baseDir = pattern.split(\"*\")[0].replace(/\\/$/, \"\");\n if (baseDir && await fileExists(Path.join(cwd, baseDir))) {\n console.log(` Copying pattern ${pattern}...`);\n const baseSrcPath = Path.join(cwd, baseDir);\n const baseDestPath = Path.join(distDir, baseDir);\n await FS.mkdir(Path.dirname(baseDestPath), {recursive: true});\n await FS.cp(baseSrcPath, baseDestPath, {recursive: true});\n } else {\n throw new Error(`Pattern base directory not found for \"${pattern}\". Expected directory: ${Path.join(cwd, baseDir)}`);\n }\n } else {\n throw new Error(`File specified in files field not found: ${srcPath}. Remove \"${pattern}\" from package.json files field or create the file.`);\n }\n } else {\n throw new Error(`Invalid files field entry: ${JSON.stringify(pattern)}. Files field entries must be strings.`);\n }\n }\n }\n\n if (save) {\n console.log(\" Updating root package.json...\");\n const rootPkg = {...pkg};\n\n rootPkg.private = true;\n\n // Update main/module/types to point to dist\n if (options.formats.cjs) {\n rootPkg.main = `./dist/src/${mainEntry}.cjs`;\n }\n rootPkg.module = `./dist/src/${mainEntry}.js`;\n rootPkg.types = `./dist/src/${mainEntry}.d.ts`;\n\n if (rootPkg.typings && typeof rootPkg.typings === \"string\") {\n rootPkg.typings = rootPkg.typings.startsWith(\"./dist/\") ? rootPkg.typings : \"./\" + Path.join(\"dist\", rootPkg.typings);\n }\n\n // Update exports to point to dist\n const rootExports: any = {};\n for (const [key, value] of Object.entries(cleanedPkg.exports)) {\n if (typeof value === \"string\") {\n // Only add ./dist prefix if not already present\n rootExports[key] = value.startsWith(\"./dist/\") ? value : `./dist${value.startsWith('.') ? value.slice(1) : value}`;\n } else if (typeof value === \"object\" && value !== null) {\n rootExports[key] = {};\n for (const [subKey, subValue] of Object.entries(value)) {\n if (typeof subValue === \"string\") {\n // Only add ./dist prefix if not already present\n rootExports[key][subKey] = subValue.startsWith(\"./dist/\") ? subValue : `./dist${subValue.startsWith('.') ? subValue.slice(1) : subValue}`;\n }\n }\n }\n }\n rootPkg.exports = rootExports;\n\n // Update bin to point to dist\n if (rootPkg.bin) {\n if (typeof rootPkg.bin === \"string\") {\n if (!rootPkg.bin.startsWith(\"./dist/\")) {\n rootPkg.bin = \"./\" + Path.join(\"dist\", rootPkg.bin);\n }\n } else {\n for (const [name, binPath] of Object.entries(rootPkg.bin)) {\n if (typeof binPath === \"string\" && !binPath.startsWith(\"./dist/\")) {\n rootPkg.bin[name] = \"./\" + Path.join(\"dist\", binPath);\n }\n }\n }\n }\n\n // Only modify files field if it existed in the original package.json\n if (pkg.files !== undefined) {\n if (!rootPkg.files) {\n rootPkg.files = [];\n } else if (!Array.isArray(rootPkg.files)) {\n rootPkg.files = [rootPkg.files];\n }\n\n // Add any auto-discovered files that aren't already in root files\n for (const autoFile of autoDiscoveredFiles) {\n if (!rootPkg.files.includes(autoFile)) {\n rootPkg.files.push(autoFile);\n }\n }\n\n // Ensure dist/ is included in files\n if (!rootPkg.files.includes(\"dist/\") && !rootPkg.files.includes(\"dist\")) {\n rootPkg.files.push(\"dist/\");\n }\n }\n\n await FS.writeFile(pkgPath, JSON.stringify(rootPkg, null, 2) + \"\\n\");\n } else {\n console.log(\" Skipping root package.json update (use --save to enable)\");\n }\n\n console.log(\"\\nBuild complete!\");\n\n // Show summary\n console.log(`\\n Output: ${distDir}`);\n console.log(`\\n Entries: ${entries.length}`);\n if (options.formats.cjs) {\n console.log(`\\n Formats: ESM, CJS${options.formats.umd ? \", UMD\" : \"\"}`);\n } else {\n console.log(`\\n Formats: ESM${options.formats.umd ? \", UMD\" : \"\"}`);\n }\n\n // Create rootPkg based on whether --save was used\n let rootPkg = pkg;\n if (save) {\n // rootPkg was already created and saved above\n rootPkg = JSON.parse(await FS.readFile(pkgPath, \"utf-8\")) as PackageJSON;\n }\n\n return {distPkg: fixedDistPkg, rootPkg};\n}\n\nexport async function publish(cwd: string, save: boolean = true) {\n await build(cwd, save);\n\n console.log(\"\\nPublishing to npm...\");\n\n const distDir = Path.join(cwd, \"dist\");\n const distPkgPath = Path.join(distDir, \"package.json\");\n\n if (!await fileExists(distPkgPath)) {\n throw new Error(\"No dist/package.json found. Run 'libuild build' first.\");\n }\n\n // Read the package.json to check if it's a scoped package\n const distPkg = JSON.parse(await FS.readFile(distPkgPath, \"utf-8\")) as PackageJSON;\n \n // Run npm publish in dist directory\n const publishArgs = [\"publish\"];\n if (distPkg.name.startsWith(\"@\")) {\n publishArgs.push(\"--access\", \"public\");\n }\n \n const proc = spawn(\"npm\", publishArgs, {\n cwd: distDir,\n stdio: \"inherit\",\n });\n\n const exitCode = await new Promise((resolve) => {\n proc.on(\"close\", resolve);\n });\n\n if (exitCode === 0) {\n const distPkg = JSON.parse(await FS.readFile(distPkgPath, \"utf-8\")) as PackageJSON;\n console.log(`\\nPublished ${distPkg.name}@${distPkg.version}!`);\n } else {\n throw new Error(\"npm publish failed\");\n }\n}\n", "import * as FS from \"fs/promises\";\nimport * as Path from \"path\";\nimport MagicString from \"magic-string\";\n\ninterface UmdPluginOptions {\n globalName: string;\n}\n\nexport function umdPlugin(options: UmdPluginOptions) {\n return {\n name: \"umd-wrapper\",\n setup(build: any) {\n build.onEnd(async (result: any) => {\n if (result.errors.length > 0) return;\n\n // ESBuild doesn't provide outputFiles by default unless write: false\n // We need to find the generated files in the output directory\n const outputDir = build.initialOptions.outdir;\n if (outputDir) {\n const files = await FS.readdir(outputDir);\n for (const file of files) {\n if (file.endsWith(\".js\") && !file.endsWith(\".js.map\")) {\n await wrapWithUmd(Path.join(outputDir, file), options.globalName);\n }\n }\n }\n });\n },\n };\n}\n\nasync function wrapWithUmd(filePath: string, globalName: string) {\n const code = await FS.readFile(filePath, \"utf-8\");\n const ms = new MagicString(code);\n\n // Remove sourcemap comment\n const sourcemapComment = code.match(/\\/\\/# sourceMappingURL=.+$/m);\n if (sourcemapComment) {\n const index = code.lastIndexOf(sourcemapComment[0]);\n ms.remove(index, index + sourcemapComment[0].length);\n }\n\n // Replace module.exports with return\n const exportsMatch = code.match(/\\nmodule\\.exports\\s*=\\s*([^;]+);?\\s*$/);\n if (exportsMatch) {\n const index = code.lastIndexOf(exportsMatch[0]);\n ms.overwrite(index, index + exportsMatch[0].length, `\\nreturn ${exportsMatch[1]};`);\n }\n\n // UMD wrapper\n const umdHeader = `(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD\n define([], factory);\n } else if (typeof module === 'object' && module.exports) {\n // CommonJS\n module.exports = factory();\n } else {\n // Browser globals\n root.${globalName} = factory();\n }\n}(typeof self !== 'undefined' ? self : this, function () {\n`;\n\n const umdFooter = `\n}));`;\n\n // Wrap with UMD\n ms.prepend(umdHeader);\n ms.append(umdFooter);\n\n // Generate sourcemap and write files\n const result = ms.toString();\n const map = ms.generateMap({\n file: Path.basename(filePath),\n source: Path.basename(filePath).replace(\".js\", \".ts\"),\n includeContent: true,\n });\n\n await FS.writeFile(filePath, result);\n await FS.writeFile(filePath + \".map\", map.toString());\n await FS.writeFile(filePath, result + `\\n//# sourceMappingURL=${Path.basename(filePath)}.map`);\n}\n"],
5
- "mappings": "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",
6
- "names": ["exports", "module", "FS", "Path", "build", "MagicString", "exports", "build", "stat", "rootPkg", "distPkg", "build"]
7
- }
package/src/cli.js.map DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/cli.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\nimport {parseArgs} from \"util\";\nimport * as Path from \"path\";\nimport {build, publish} from \"./libuild.ts\";\n\nconst {values, positionals} = parseArgs({\n args: process.argv.slice(2),\n options: {\n help: {type: \"boolean\", short: \"h\"},\n version: {type: \"boolean\", short: \"v\"},\n save: {type: \"boolean\"},\n \"no-save\": {type: \"boolean\"},\n },\n allowPositionals: true,\n});\n\nconst HELP_TEXT = `\nlibuild - Zero-config library builds\n\nUsage:\n libuild [command]\n\nCommands:\n build Build the library (default command)\n publish Build and publish the library\n\nOptions:\n --save Update root package.json to point to dist files\n --no-save Skip package.json updates (for publish command)\n\nExamples:\n libuild # Build the library\n libuild build --save # Build and update package.json for npm link\n libuild publish # Build and publish to npm\n`;\n\nasync function main() {\n if (values.help) {\n console.log(HELP_TEXT);\n process.exit(0);\n }\n\n if (values.version) {\n const pkg = await import(\"../package.json\");\n console.log(pkg.version);\n process.exit(0);\n }\n\n const command = positionals[0] || \"build\";\n const cwd = process.cwd();\n\n // Determine save behavior\n const shouldSave = values.save || (command === \"publish\" && !values[\"no-save\"]);\n\n try {\n switch (command) {\n case \"build\":\n await build(cwd, shouldSave);\n break;\n case \"publish\":\n case \"ship\": // backwards compatibility\n await publish(cwd, shouldSave);\n break;\n default:\n console.error(`Unknown command: ${command}`);\n console.log(HELP_TEXT);\n process.exit(1);\n }\n } catch (error: any) {\n console.error(\"Error:\", error.message);\n process.exit(1);\n }\n}\n\nmain();\n"],
5
- "mappings": ";;;;;;;;AACA,SAAQ,iBAAgB;AAIxB,IAAM,EAAC,QAAQ,YAAW,IAAI,UAAU;AAAA,EACtC,MAAM,QAAQ,KAAK,MAAM,CAAC;AAAA,EAC1B,SAAS;AAAA,IACP,MAAM,EAAC,MAAM,WAAW,OAAO,IAAG;AAAA,IAClC,SAAS,EAAC,MAAM,WAAW,OAAO,IAAG;AAAA,IACrC,MAAM,EAAC,MAAM,UAAS;AAAA,IACtB,WAAW,EAAC,MAAM,UAAS;AAAA,EAC7B;AAAA,EACA,kBAAkB;AACpB,CAAC;AAED,IAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBlB,eAAe,OAAO;AACpB,MAAI,OAAO,MAAM;AACf,YAAQ,IAAI,SAAS;AACrB,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,OAAO,SAAS;AAClB,UAAM,MAAM,MAAM,OAAO,uBAAiB;AAC1C,YAAQ,IAAI,IAAI,OAAO;AACvB,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,UAAU,YAAY,CAAC,KAAK;AAClC,QAAM,MAAM,QAAQ,IAAI;AAGxB,QAAM,aAAa,OAAO,QAAS,YAAY,aAAa,CAAC,OAAO,SAAS;AAE7E,MAAI;AACF,YAAQ,SAAS;AAAA,MACf,KAAK;AACH,cAAM,MAAM,KAAK,UAAU;AAC3B;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,cAAM,QAAQ,KAAK,UAAU;AAC7B;AAAA,MACF;AACE,gBAAQ,MAAM,oBAAoB,OAAO,EAAE;AAC3C,gBAAQ,IAAI,SAAS;AACrB,gBAAQ,KAAK,CAAC;AAAA,IAClB;AAAA,EACF,SAAS,OAAY;AACnB,YAAQ,MAAM,UAAU,MAAM,OAAO;AACrC,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAEA,KAAK;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/libuild.ts", "../../src/umd-plugin.ts"],
4
- "sourcesContent": ["import * as FS from \"fs/promises\";\nimport * as Path from \"path\";\nimport {spawn} from \"child_process\";\n\nimport * as ESBuild from \"esbuild\";\nimport * as TS from \"typescript\";\nimport {umdPlugin} from \"./umd-plugin.js\";\n\ninterface PackageJSON {\n name: string;\n version: string;\n private?: boolean;\n main?: string;\n module?: string;\n types?: string;\n exports?: any;\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n engines?: Record<string, string>;\n [key: string]: any;\n}\n\ninterface BuildOptions {\n formats: {\n esm: boolean;\n cjs: boolean;\n umd: boolean;\n };\n}\n\nfunction isValidEntrypoint(filename: string): boolean {\n if (!filename.endsWith(\".ts\") && !filename.endsWith(\".js\")) return false;\n if (filename.endsWith(\".d.ts\")) return false; // Ignore TypeScript declaration files\n if (filename.startsWith(\"_\")) return false;\n if (filename.startsWith(\".\")) return false;\n return true;\n}\n\nasync function findEntryPoints(srcDir: string): Promise<string[]> {\n const files = await FS.readdir(srcDir);\n return files\n .filter(isValidEntrypoint)\n .map(file => Path.basename(file, Path.extname(file)))\n .sort();\n}\n\nasync function detectMainEntry(pkg: PackageJSON, entries: string[]): Promise<string> {\n // If exports[\".\"] is specified, try to extract the main entry from it\n if (pkg.exports && pkg.exports[\".\"]) {\n const dotExport = pkg.exports[\".\"];\n let importPath: string | undefined;\n\n if (typeof dotExport === \"string\") {\n importPath = dotExport;\n } else if (typeof dotExport === \"object\" && dotExport.import) {\n importPath = dotExport.import;\n }\n\n if (importPath) {\n // Extract entry name from path like \"./src/foo.js\" -> \"foo\"\n const match = importPath.match(/\\.\\/src\\/([^.]+)/);\n if (match && entries.includes(match[1])) {\n return match[1];\n }\n }\n }\n\n // If main is specified in package.json, use it\n if (pkg.main && typeof pkg.main === \"string\") {\n const mainBase = Path.basename(pkg.main, Path.extname(pkg.main));\n if (entries.includes(mainBase)) {\n return mainBase;\n }\n }\n\n // If there's an index entry, that's the main\n if (entries.includes(\"index\")) {\n return \"index\";\n }\n\n // If there's only one entry, that's the main\n if (entries.length === 1) {\n return entries[0];\n }\n\n // Try to use the package name\n const pkgNameParts = pkg.name.split(\"/\");\n const pkgName = pkgNameParts[pkgNameParts.length - 1];\n if (!pkgName) {\n throw new Error(`Invalid package name: ${pkg.name}`);\n }\n if (entries.includes(pkgName)) {\n return pkgName;\n }\n\n // Default to first entry alphabetically\n return entries[0];\n}\n\nfunction checkIfExportIsStale(exportKey: string, exportValue: any, entries: string[]): boolean {\n // System exports like package.json are never stale\n if (exportKey === \"./package.json\" || typeof exportValue === \"string\" && (exportValue === \"./package.json\" || exportValue.endsWith(\"/package.json\"))) {\n return false;\n }\n\n // Extract entry name from export value first (most reliable), then key\n let entryName: string | undefined;\n let hasInvalidPath = false;\n\n // Try to extract from value first (most reliable)\n if (typeof exportValue === \"string\") {\n // Check for nested paths first (these are always invalid)\n if (exportValue.match(/\\.\\/src\\/.*\\/.*\\.(ts|js)$/)) {\n hasInvalidPath = true;\n } else {\n const match = exportValue.match(/\\.\\/src\\/([^/]+)\\.(ts|js)$/);\n if (match) {\n const filename = match[1] + \".\" + match[2];\n // Check if this would be an invalid entrypoint (invalid entrypoints should throw errors, not be treated as stale)\n if (!isValidEntrypoint(filename)) {\n hasInvalidPath = true;\n } else {\n entryName = match[1];\n }\n }\n }\n } else if (typeof exportValue === \"object\" && exportValue !== null) {\n // Try import field first, then require\n const importPath = exportValue.import || exportValue.require;\n if (typeof importPath === \"string\") {\n // Check for nested paths first (these are always invalid)\n if (importPath.match(/\\.\\/src\\/.*\\/.*\\.(ts|js|cjs)$/)) {\n hasInvalidPath = true;\n } else {\n const match = importPath.match(/\\.\\/src\\/([^/]+)\\.(ts|js|cjs)$/);\n if (match) {\n const filename = match[1] + \".\" + match[2].replace('cjs', 'js'); // normalize cjs to js for validation\n if (!isValidEntrypoint(filename)) {\n hasInvalidPath = true;\n } else {\n entryName = match[1];\n }\n }\n }\n }\n }\n\n // If no entry name from value, try to extract from key (e.g., \"./utils\" -> \"utils\", \"./utils.js\" -> \"utils\")\n if (!entryName && !hasInvalidPath && exportKey.startsWith(\"./\") && exportKey !== \".\") {\n const keyName = exportKey.slice(2).replace(/\\.js$/, \"\");\n if (keyName && !keyName.includes(\"/\")) {\n entryName = keyName;\n }\n }\n\n // If we found an invalid path, don't treat as stale - let the validation logic handle it\n if (hasInvalidPath) {\n return false;\n }\n\n // Check if the entry still exists\n return entryName ? !entries.includes(entryName) : false;\n}\n\nfunction generateExports(entries: string[], mainEntry: string, options: BuildOptions, existingExports: any = {}): {exports: any, staleExports: string[]} {\n const exports: any = {};\n const staleExports: string[] = [];\n\n function createExportEntry(entry: string) {\n const exportEntry: any = {\n types: `./src/${entry}.d.ts`,\n import: `./src/${entry}.js`,\n };\n if (options.formats.cjs) {\n exportEntry.require = `./src/${entry}.cjs`;\n }\n return exportEntry;\n }\n\n function expandExistingExport(existing: any, entryFromPath?: string) {\n if (typeof existing === \"string\") {\n // Special case for system exports (package.json, etc.)\n if (existing === \"./package.json\" || existing.endsWith(\"/package.json\")) {\n return existing;\n }\n\n // Extract entry name and validate it's a valid entrypoint\n const match = existing.match(/\\.\\/src\\/([^/]+\\.(?:ts|js))$/);\n if (match) {\n const filename = match[1];\n if (!isValidEntrypoint(filename)) {\n throw new Error(`Export path '${existing}' references '${filename}' which is not a valid entrypoint. Valid entrypoints cannot start with '_' or '.' and must be .ts/.js files in src/.`);\n }\n const entry = Path.basename(filename, Path.extname(filename));\n\n // Convert string export to conditional export\n return options.formats.cjs ? {\n types: `./src/${entry}.d.ts`,\n import: existing,\n require: `./src/${entry}.cjs`,\n } : {\n types: `./src/${entry}.d.ts`,\n import: existing,\n };\n }\n\n // If we have entryFromPath, use it (this is for auto-discovered entries)\n if (entryFromPath) {\n return options.formats.cjs ? {\n types: `./src/${entryFromPath}.d.ts`,\n import: existing,\n require: `./src/${entryFromPath}.cjs`,\n } : {\n types: `./src/${entryFromPath}.d.ts`,\n import: existing,\n };\n }\n\n throw new Error(`Export path '${existing}' must point to a valid entrypoint in src/ (e.g., './src/utils.js'). Nested directories and internal files (starting with '_' or '.') are not allowed.`);\n } else if (typeof existing === \"object\" && existing !== null) {\n // Existing object - expand if needed\n if (options.formats.cjs && !existing.require && existing.import) {\n // Validate the import path\n const match = existing.import?.match(/\\.\\/src\\/([^/]+\\.(?:ts|js))$/);\n if (match) {\n const filename = match[1];\n if (!isValidEntrypoint(filename)) {\n throw new Error(`Export import path '${existing.import}' references '${filename}' which is not a valid entrypoint. Valid entrypoints cannot start with '_' or '.' and must be .ts/.js files in src/.`);\n }\n const entry = Path.basename(filename, Path.extname(filename));\n\n return {\n ...existing,\n types: existing.types || `./src/${entry}.d.ts`,\n require: `./src/${entry}.cjs`,\n };\n }\n\n // If we have entryFromPath, use it\n if (entryFromPath) {\n return {\n ...existing,\n types: existing.types || `./src/${entryFromPath}.d.ts`,\n require: `./src/${entryFromPath}.cjs`,\n };\n }\n\n throw new Error(`Export import path '${existing.import}' must point to a valid entrypoint in src/ (e.g., './src/utils.js'). Nested directories and internal files are not allowed.`);\n }\n return {\n types: existing.types || `./src/${entryFromPath}.d.ts`,\n ...existing,\n };\n }\n return existing;\n }\n\n // First, expand all existing exports and detect stale ones\n // The expandExistingExport function will handle validation\n for (const [key, value] of Object.entries(existingExports)) {\n // Check if this export points to a valid entry\n const isStale = checkIfExportIsStale(key, value, entries);\n if (isStale) {\n staleExports.push(key);\n } else {\n exports[key] = expandExistingExport(value);\n }\n }\n\n // Handle main export - respect existing \".\" export or create new one\n if (!exports[\".\"]) {\n exports[\".\"] = createExportEntry(mainEntry);\n } else {\n exports[\".\"] = expandExistingExport(exports[\".\"], mainEntry);\n }\n\n // All entries (including duplicating main for clarity)\n for (const entry of entries) {\n if (entry === \"umd\") continue; // UMD is special\n\n const key = `./${entry}`;\n\n // Only add if not already specified by user\n if (!exports[key]) {\n exports[key] = createExportEntry(entry);\n } else {\n exports[key] = expandExistingExport(exports[key], entry);\n }\n\n // Legacy .js extension support (only if not user-specified)\n if (!exports[`${key}.js`]) {\n exports[`${key}.js`] = exports[key];\n }\n\n // Special case for jsx-runtime\n if (entry === \"jsx-runtime\") {\n if (!exports[\"./jsx-dev-runtime\"]) {\n exports[\"./jsx-dev-runtime\"] = exports[key];\n }\n if (!exports[\"./jsx-dev-runtime.js\"]) {\n exports[\"./jsx-dev-runtime.js\"] = exports[key];\n }\n }\n }\n\n // UMD export (CommonJS only)\n if (options.formats.umd && !exports[\"./umd\"]) {\n exports[\"./umd\"] = {\n require: \"./src/umd.js\",\n };\n if (!exports[\"./umd.js\"]) {\n exports[\"./umd.js\"] = exports[\"./umd\"];\n }\n }\n\n // Package.json export\n if (!exports[\"./package.json\"]) {\n exports[\"./package.json\"] = \"./package.json\";\n }\n\n return {exports, staleExports};\n}\n\nexport function transformSrcToDist(value: any): any {\n if (typeof value === \"string\") {\n // Add ./ prefix to src references\n if (value.startsWith(\"src/\") || value === \"src\") {\n return \"./\" + value;\n }\n return value;\n } else if (Array.isArray(value)) {\n return value.map(transformSrcToDist);\n } else if (typeof value === \"object\" && value !== null) {\n const transformed: any = {};\n for (const [key, val] of Object.entries(value)) {\n transformed[key] = transformSrcToDist(val);\n }\n return transformed;\n }\n return value;\n}\n\nfunction fixExportsForDist(obj: any): any {\n if (typeof obj === \"string\") {\n // Fix paths that incorrectly have ./dist/dist/dist/... -> ./src/\n if (obj.includes(\"/dist/\") && obj.includes(\"/src/\")) {\n // Extract everything after the last /src/\n const match = obj.match(/.*\\/src\\/(.*)$/);\n if (match) {\n return `./src/${match[1]}`;\n }\n }\n // Fix paths that incorrectly start with ./dist/src/ -> ./src/\n if (obj.startsWith(\"./dist/src/\")) {\n return obj.replace(\"./dist/src/\", \"./src/\");\n }\n // Fix package.json path\n if (obj.includes(\"/dist/\") && obj.endsWith(\"/package.json\")) {\n return \"./package.json\";\n }\n return obj;\n } else if (Array.isArray(obj)) {\n return obj.map(fixExportsForDist);\n } else if (typeof obj === \"object\" && obj !== null) {\n const fixed: any = {};\n for (const [key, val] of Object.entries(obj)) {\n // Handle special cases for package.json fields\n if (key === \"files\" && Array.isArray(val)) {\n // For files field in dist package.json, remove \"dist/\" entries since we're already in dist\n fixed[key] = val.filter((file: string) => file !== \"dist/\" && file !== \"dist\").concat(val.includes(\"dist/\") || val.includes(\"dist\") ? [\"src/\"] : []);\n } else {\n fixed[key] = fixExportsForDist(val);\n }\n }\n return fixed;\n }\n return obj;\n}\n\nfunction cleanPackageJSON(pkg: PackageJSON, mainEntry: string, options: BuildOptions): PackageJSON {\n const cleaned: PackageJSON = {\n name: pkg.name,\n version: pkg.version,\n };\n\n const fieldsToKeep = [\n \"description\",\n \"keywords\",\n \"author\",\n \"contributors\",\n \"maintainers\",\n \"license\",\n \"repository\",\n \"bugs\",\n \"homepage\",\n \"funding\",\n \"bin\",\n \"scripts\",\n \"dependencies\",\n \"peerDependencies\",\n \"optionalDependencies\",\n \"bundledDependencies\",\n \"engines\",\n \"cpu\",\n \"os\",\n \"type\",\n \"types\",\n \"files\",\n \"sideEffects\",\n \"browserslist\",\n ];\n\n const pathFields = [\"files\", \"types\", \"scripts\"];\n\n for (const field of fieldsToKeep) {\n if (pkg[field] !== undefined) {\n if (field === \"scripts\") {\n // Only keep scripts that npm actually runs for installed packages\n const npmLifecycleScripts = [\"postinstall\", \"preinstall\", \"install\", \"preuninstall\", \"postuninstall\", \"shrinkwrap\"];\n const filteredScripts: Record<string, string> = {};\n for (const [scriptName, scriptValue] of Object.entries(pkg[field] || {})) {\n if (npmLifecycleScripts.includes(scriptName)) {\n filteredScripts[scriptName] = scriptValue;\n }\n }\n if (Object.keys(filteredScripts).length > 0) {\n // Apply path transformation to the filtered scripts\n cleaned[field] = transformSrcToDist(filteredScripts);\n }\n } else if (field === \"bin\") {\n // Apply path transformation to bin field\n cleaned[field] = transformSrcToDist(pkg[field]);\n } else if (pathFields.includes(field)) {\n cleaned[field] = transformSrcToDist(pkg[field]);\n } else {\n cleaned[field] = pkg[field];\n }\n }\n }\n\n if (!cleaned.type) {\n cleaned.type = \"module\";\n }\n\n if (options.formats.cjs) {\n cleaned.main = `src/${mainEntry}.cjs`;\n }\n cleaned.module = `src/${mainEntry}.js`;\n cleaned.types = `src/${mainEntry}.d.ts`;\n\n return cleaned;\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n await FS.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\n\nexport async function build(cwd: string, save: boolean = false): Promise<{distPkg: PackageJSON, rootPkg: PackageJSON}> {\n console.log(\"Building with libuild...\");\n\n const srcDir = Path.join(cwd, \"src\");\n const distDir = Path.join(cwd, \"dist\");\n const distSrcDir = Path.join(distDir, \"src\");\n\n // Check src directory exists\n if (!await fileExists(srcDir)) {\n throw new Error(\"No src/ directory found\");\n }\n\n // Load package.json\n const pkgPath = Path.join(cwd, \"package.json\");\n const pkg = JSON.parse(await FS.readFile(pkgPath, \"utf-8\")) as PackageJSON;\n\n // Check for unsafe publishing conditions\n if (!pkg.private) {\n console.warn(\"\u26A0\uFE0F WARNING: Root package.json is not private - this could lead to accidental publishing of development package.json\");\n console.warn(\" Consider setting 'private: true' in your root package.json\");\n }\n\n // Check if dist directory is gitignored\n const gitignorePath = Path.join(cwd, \".gitignore\");\n if (await fileExists(gitignorePath)) {\n const gitignoreContent = await FS.readFile(gitignorePath, \"utf-8\");\n const isDistIgnored = gitignoreContent.includes(\"dist/\") ||\n gitignoreContent.includes(\"/dist\") ||\n gitignoreContent.includes(\"dist\\n\") ||\n gitignoreContent.includes(\"dist\\r\\n\");\n\n if (!isDistIgnored) {\n console.warn(\"\u26A0\uFE0F WARNING: dist/ directory is not in .gitignore - built files should not be committed\");\n console.warn(\" Add 'dist/' to your .gitignore file\");\n }\n }\n\n // Find entry points\n const entries = await findEntryPoints(srcDir);\n if (entries.length === 0) {\n throw new Error(\"No entry points found in src/\");\n }\n\n const options: BuildOptions = {\n formats: {\n esm: true, // Always build ESM\n cjs: !!pkg.main, // Generate CJS only if main field exists\n umd: entries.includes(\"umd\")\n }\n };\n \n const mainEntry = await detectMainEntry(pkg, entries);\n\n console.log(\" Found entries:\", entries.join(\", \"));\n console.log(\" Main entry:\", mainEntry);\n if (options.formats.cjs) {\n console.log(\" Formats: ESM, CJS\" + (options.formats.umd ? \", UMD\" : \"\"));\n } else {\n console.log(\" Formats: ESM\" + (options.formats.umd ? \", UMD\" : \"\") + \" (no main field - CJS disabled)\");\n }\n\n // Clean dist directory\n if (await fileExists(distDir)) {\n await FS.rm(distDir, {recursive: true});\n }\n await FS.mkdir(distDir, {recursive: true});\n\n // Prepare entry points for batch building\n const entryPoints: string[] = [];\n const umdEntries: string[] = [];\n\n for (const entry of entries) {\n const entryPath = Path.join(srcDir, `${entry}.ts`);\n const jsEntryPath = Path.join(srcDir, `${entry}.js`);\n const actualPath = await fileExists(entryPath) ? entryPath : jsEntryPath;\n\n if (!await fileExists(actualPath)) {\n throw new Error(`Entry point file not found: ${actualPath}. Expected ${entry}.ts or ${entry}.js in src/ directory.`);\n }\n\n if (entry === \"umd\") {\n umdEntries.push(actualPath);\n } else {\n entryPoints.push(actualPath);\n }\n }\n\n // Build all regular entries together for shared chunk deduplication\n if (entryPoints.length > 0) {\n // ESM build with splitting for shared chunks\n console.log(` Building ${entryPoints.length} entries (ESM)...`);\n await ESBuild.build({\n entryPoints,\n outdir: distSrcDir,\n format: \"esm\",\n entryNames: \"[name]\",\n outExtension: {\".js\": \".js\"},\n bundle: true,\n splitting: true, // Enable shared chunk extraction\n minify: false,\n sourcemap: true,\n external: Object.keys(pkg.dependencies || {}),\n platform: \"node\",\n target: \"node16\",\n });\n\n // CJS build (only if main field exists)\n if (options.formats.cjs) {\n console.log(` Building ${entryPoints.length} entries (CJS)...`);\n await ESBuild.build({\n entryPoints,\n outdir: distSrcDir,\n format: \"cjs\",\n entryNames: \"[name]\",\n outExtension: {\".js\": \".cjs\"},\n bundle: true,\n minify: false,\n sourcemap: true,\n external: Object.keys(pkg.dependencies || {}),\n platform: \"node\",\n target: \"node16\",\n // Note: CJS doesn't support splitting, but building together still helps with consistency\n });\n }\n }\n\n // Build UMD entries separately (they need special plugin handling)\n for (const umdPath of umdEntries) {\n const entry = Path.basename(umdPath, Path.extname(umdPath));\n console.log(` Building ${entry} (UMD)...`);\n const globalName = pkg.name.includes(\"/\")\n ? pkg.name.split(\"/\").pop()!.replace(/-/g, \"\").charAt(0).toUpperCase() + pkg.name.split(\"/\").pop()!.replace(/-/g, \"\").slice(1)\n : pkg.name.replace(/-/g, \"\").charAt(0).toUpperCase() + pkg.name.replace(/-/g, \"\").slice(1);\n\n await ESBuild.build({\n entryPoints: [umdPath],\n outdir: distSrcDir,\n format: \"cjs\",\n entryNames: \"[name]\",\n bundle: true,\n minify: false,\n sourcemap: true,\n external: Object.keys(pkg.dependencies || {}),\n platform: \"node\",\n target: \"node16\",\n plugins: [umdPlugin({globalName})],\n });\n }\n\n // Generate TypeScript declarations using TypeScript compiler API\n console.log(\" Generating TypeScript declarations...\");\n\n // Find all TypeScript source files (including UMD entries)\n const allTsFiles = [...entryPoints, ...umdEntries].filter(file => file.endsWith('.ts'));\n\n if (allTsFiles.length > 0) {\n const compilerOptions: TS.CompilerOptions = {\n declaration: true,\n emitDeclarationOnly: true,\n outDir: distSrcDir,\n rootDir: srcDir,\n skipLibCheck: true,\n esModuleInterop: true,\n target: TS.ScriptTarget.ES2020,\n module: TS.ModuleKind.ESNext,\n };\n\n // Create program with explicit config to avoid tsconfig.json interference\n const program = TS.createProgram(allTsFiles, compilerOptions);\n const emitResult = program.emit();\n\n if (emitResult.diagnostics.length > 0) {\n const diagnostics = TS.formatDiagnosticsWithColorAndContext(emitResult.diagnostics, {\n getCanonicalFileName: path => path,\n getCurrentDirectory: () => cwd,\n getNewLine: () => '\\n'\n });\n throw new Error(`TypeScript declaration generation failed:\\n${diagnostics}`);\n }\n\n }\n\n // Add triple-slash references for Deno (preserve shebang if present)\n for (const entry of entries) {\n if (entry === \"umd\") continue;\n\n const jsPath = Path.join(distSrcDir, `${entry}.js`);\n const dtsPath = Path.join(distSrcDir, `${entry}.d.ts`);\n\n if (await fileExists(jsPath) && await fileExists(dtsPath)) {\n const content = await FS.readFile(jsPath, \"utf-8\");\n \n // Check if file starts with shebang\n if (content.startsWith(\"#!\")) {\n const lines = content.split(\"\\n\");\n const shebang = lines[0];\n const rest = lines.slice(1).join(\"\\n\");\n await FS.writeFile(jsPath, `${shebang}\\n/// <reference types=\"./${entry}.d.ts\" />\\n${rest}`);\n } else {\n await FS.writeFile(jsPath, `/// <reference types=\"./${entry}.d.ts\" />\\n${content}`);\n }\n }\n }\n\n // Initialize auto-discovered files tracking\n const autoDiscoveredFiles: string[] = [];\n\n // Generate package.json\n console.log(\" Generating package.json...\");\n const cleanedPkg = cleanPackageJSON(pkg, mainEntry, options);\n const exportsResult = generateExports(entries, mainEntry, options, pkg.exports);\n cleanedPkg.exports = fixExportsForDist(exportsResult.exports);\n\n // Handle stale exports\n if (exportsResult.staleExports.length > 0) {\n console.warn(`\u26A0\uFE0F WARNING: Found ${exportsResult.staleExports.length} stale export(s) pointing to missing src/ files:`);\n for (const staleExport of exportsResult.staleExports) {\n console.warn(` - ${staleExport}`);\n }\n if (save) {\n console.log(\" Removing stale exports from root package.json (--save mode)\");\n } else {\n console.warn(\" Use --save to remove these from root package.json\");\n }\n }\n\n // Add auto-discovered files to dist package.json files field\n if (cleanedPkg.files && Array.isArray(cleanedPkg.files)) {\n for (const autoFile of autoDiscoveredFiles) {\n if (!cleanedPkg.files.includes(autoFile)) {\n cleanedPkg.files.push(autoFile);\n }\n }\n }\n\n // Apply path fixes to the dist package.json\n const fixedDistPkg = fixExportsForDist(cleanedPkg);\n \n await FS.writeFile(\n Path.join(distDir, \"package.json\"),\n JSON.stringify(fixedDistPkg, null, 2) + \"\\n\"\n );\n\n // Copy additional files\n const defaultFilesToCopy = [\"README.md\", \"LICENSE\", \"CHANGELOG.md\"];\n\n // Copy default files\n for (const file of defaultFilesToCopy) {\n const srcPath = Path.join(cwd, file);\n if (await fileExists(srcPath)) {\n console.log(` Copying ${file}...`);\n await FS.copyFile(srcPath, Path.join(distDir, file));\n }\n }\n\n // Auto-discover and add common files to files field if files field exists\n const commonFiles = [\"README.md\", \"LICENSE\", \"CHANGELOG.md\", \"COPYING\", \"AUTHORS\"];\n if (pkg.files && Array.isArray(pkg.files)) {\n for (const commonFile of commonFiles) {\n const commonPath = Path.join(cwd, commonFile);\n if (await fileExists(commonPath) && !pkg.files.includes(commonFile)) {\n console.log(` Auto-discovered ${commonFile}, adding to files field...`);\n pkg.files.push(commonFile);\n autoDiscoveredFiles.push(commonFile);\n }\n }\n }\n\n // Copy files specified in package.json files field\n if (pkg.files && Array.isArray(pkg.files)) {\n console.log(\" Copying files from package.json files field...\");\n\n for (const pattern of pkg.files) {\n if (typeof pattern === \"string\" && (pattern.includes(\"src\") || pattern.includes(\"dist\"))) {\n // Skip src/dist patterns as they're handled by the build process\n continue;\n }\n\n if (typeof pattern === \"string\") {\n const srcPath = Path.join(cwd, pattern);\n const destPath = Path.join(distDir, pattern);\n\n if (await fileExists(srcPath)) {\n const stat = await FS.stat(srcPath);\n if (stat.isDirectory()) {\n console.log(` Copying directory ${pattern}/...`);\n await FS.mkdir(Path.dirname(destPath), {recursive: true});\n await FS.cp(srcPath, destPath, {recursive: true});\n } else {\n console.log(` Copying ${pattern}...`);\n await FS.mkdir(Path.dirname(destPath), {recursive: true});\n await FS.copyFile(srcPath, destPath);\n }\n } else if (pattern.includes(\"*\")) {\n const baseDir = pattern.split(\"*\")[0].replace(/\\/$/, \"\");\n if (baseDir && await fileExists(Path.join(cwd, baseDir))) {\n console.log(` Copying pattern ${pattern}...`);\n const baseSrcPath = Path.join(cwd, baseDir);\n const baseDestPath = Path.join(distDir, baseDir);\n await FS.mkdir(Path.dirname(baseDestPath), {recursive: true});\n await FS.cp(baseSrcPath, baseDestPath, {recursive: true});\n } else {\n throw new Error(`Pattern base directory not found for \"${pattern}\". Expected directory: ${Path.join(cwd, baseDir)}`);\n }\n } else {\n throw new Error(`File specified in files field not found: ${srcPath}. Remove \"${pattern}\" from package.json files field or create the file.`);\n }\n } else {\n throw new Error(`Invalid files field entry: ${JSON.stringify(pattern)}. Files field entries must be strings.`);\n }\n }\n }\n\n if (save) {\n console.log(\" Updating root package.json...\");\n const rootPkg = {...pkg};\n\n rootPkg.private = true;\n\n // Update main/module/types to point to dist\n if (options.formats.cjs) {\n rootPkg.main = `./dist/src/${mainEntry}.cjs`;\n }\n rootPkg.module = `./dist/src/${mainEntry}.js`;\n rootPkg.types = `./dist/src/${mainEntry}.d.ts`;\n\n if (rootPkg.typings && typeof rootPkg.typings === \"string\") {\n rootPkg.typings = rootPkg.typings.startsWith(\"./dist/\") ? rootPkg.typings : \"./\" + Path.join(\"dist\", rootPkg.typings);\n }\n\n // Update exports to point to dist\n const rootExports: any = {};\n for (const [key, value] of Object.entries(cleanedPkg.exports)) {\n if (typeof value === \"string\") {\n // Only add ./dist prefix if not already present\n rootExports[key] = value.startsWith(\"./dist/\") ? value : `./dist${value.startsWith('.') ? value.slice(1) : value}`;\n } else if (typeof value === \"object\" && value !== null) {\n rootExports[key] = {};\n for (const [subKey, subValue] of Object.entries(value)) {\n if (typeof subValue === \"string\") {\n // Only add ./dist prefix if not already present\n rootExports[key][subKey] = subValue.startsWith(\"./dist/\") ? subValue : `./dist${subValue.startsWith('.') ? subValue.slice(1) : subValue}`;\n }\n }\n }\n }\n rootPkg.exports = rootExports;\n\n // Update bin to point to dist\n if (rootPkg.bin) {\n if (typeof rootPkg.bin === \"string\") {\n if (!rootPkg.bin.startsWith(\"./dist/\")) {\n rootPkg.bin = \"./\" + Path.join(\"dist\", rootPkg.bin);\n }\n } else {\n for (const [name, binPath] of Object.entries(rootPkg.bin)) {\n if (typeof binPath === \"string\" && !binPath.startsWith(\"./dist/\")) {\n rootPkg.bin[name] = \"./\" + Path.join(\"dist\", binPath);\n }\n }\n }\n }\n\n // Only modify files field if it existed in the original package.json\n if (pkg.files !== undefined) {\n if (!rootPkg.files) {\n rootPkg.files = [];\n } else if (!Array.isArray(rootPkg.files)) {\n rootPkg.files = [rootPkg.files];\n }\n\n // Add any auto-discovered files that aren't already in root files\n for (const autoFile of autoDiscoveredFiles) {\n if (!rootPkg.files.includes(autoFile)) {\n rootPkg.files.push(autoFile);\n }\n }\n\n // Ensure dist/ is included in files\n if (!rootPkg.files.includes(\"dist/\") && !rootPkg.files.includes(\"dist\")) {\n rootPkg.files.push(\"dist/\");\n }\n }\n\n await FS.writeFile(pkgPath, JSON.stringify(rootPkg, null, 2) + \"\\n\");\n } else {\n console.log(\" Skipping root package.json update (use --save to enable)\");\n }\n\n console.log(\"\\nBuild complete!\");\n\n // Show summary\n console.log(`\\n Output: ${distDir}`);\n console.log(`\\n Entries: ${entries.length}`);\n if (options.formats.cjs) {\n console.log(`\\n Formats: ESM, CJS${options.formats.umd ? \", UMD\" : \"\"}`);\n } else {\n console.log(`\\n Formats: ESM${options.formats.umd ? \", UMD\" : \"\"}`);\n }\n\n // Create rootPkg based on whether --save was used\n let rootPkg = pkg;\n if (save) {\n // rootPkg was already created and saved above\n rootPkg = JSON.parse(await FS.readFile(pkgPath, \"utf-8\")) as PackageJSON;\n }\n\n return {distPkg: fixedDistPkg, rootPkg};\n}\n\nexport async function publish(cwd: string, save: boolean = true) {\n await build(cwd, save);\n\n console.log(\"\\nPublishing to npm...\");\n\n const distDir = Path.join(cwd, \"dist\");\n const distPkgPath = Path.join(distDir, \"package.json\");\n\n if (!await fileExists(distPkgPath)) {\n throw new Error(\"No dist/package.json found. Run 'libuild build' first.\");\n }\n\n // Read the package.json to check if it's a scoped package\n const distPkg = JSON.parse(await FS.readFile(distPkgPath, \"utf-8\")) as PackageJSON;\n \n // Run npm publish in dist directory\n const publishArgs = [\"publish\"];\n if (distPkg.name.startsWith(\"@\")) {\n publishArgs.push(\"--access\", \"public\");\n }\n \n const proc = spawn(\"npm\", publishArgs, {\n cwd: distDir,\n stdio: \"inherit\",\n });\n\n const exitCode = await new Promise((resolve) => {\n proc.on(\"close\", resolve);\n });\n\n if (exitCode === 0) {\n const distPkg = JSON.parse(await FS.readFile(distPkgPath, \"utf-8\")) as PackageJSON;\n console.log(`\\nPublished ${distPkg.name}@${distPkg.version}!`);\n } else {\n throw new Error(\"npm publish failed\");\n }\n}\n", "import * as FS from \"fs/promises\";\nimport * as Path from \"path\";\nimport MagicString from \"magic-string\";\n\ninterface UmdPluginOptions {\n globalName: string;\n}\n\nexport function umdPlugin(options: UmdPluginOptions) {\n return {\n name: \"umd-wrapper\",\n setup(build: any) {\n build.onEnd(async (result: any) => {\n if (result.errors.length > 0) return;\n\n // ESBuild doesn't provide outputFiles by default unless write: false\n // We need to find the generated files in the output directory\n const outputDir = build.initialOptions.outdir;\n if (outputDir) {\n const files = await FS.readdir(outputDir);\n for (const file of files) {\n if (file.endsWith(\".js\") && !file.endsWith(\".js.map\")) {\n await wrapWithUmd(Path.join(outputDir, file), options.globalName);\n }\n }\n }\n });\n },\n };\n}\n\nasync function wrapWithUmd(filePath: string, globalName: string) {\n const code = await FS.readFile(filePath, \"utf-8\");\n const ms = new MagicString(code);\n\n // Remove sourcemap comment\n const sourcemapComment = code.match(/\\/\\/# sourceMappingURL=.+$/m);\n if (sourcemapComment) {\n const index = code.lastIndexOf(sourcemapComment[0]);\n ms.remove(index, index + sourcemapComment[0].length);\n }\n\n // Replace module.exports with return\n const exportsMatch = code.match(/\\nmodule\\.exports\\s*=\\s*([^;]+);?\\s*$/);\n if (exportsMatch) {\n const index = code.lastIndexOf(exportsMatch[0]);\n ms.overwrite(index, index + exportsMatch[0].length, `\\nreturn ${exportsMatch[1]};`);\n }\n\n // UMD wrapper\n const umdHeader = `(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD\n define([], factory);\n } else if (typeof module === 'object' && module.exports) {\n // CommonJS\n module.exports = factory();\n } else {\n // Browser globals\n root.${globalName} = factory();\n }\n}(typeof self !== 'undefined' ? self : this, function () {\n`;\n\n const umdFooter = `\n}));`;\n\n // Wrap with UMD\n ms.prepend(umdHeader);\n ms.append(umdFooter);\n\n // Generate sourcemap and write files\n const result = ms.toString();\n const map = ms.generateMap({\n file: Path.basename(filePath),\n source: Path.basename(filePath).replace(\".js\", \".ts\"),\n includeContent: true,\n });\n\n await FS.writeFile(filePath, result);\n await FS.writeFile(filePath + \".map\", map.toString());\n await FS.writeFile(filePath, result + `\\n//# sourceMappingURL=${Path.basename(filePath)}.map`);\n}\n"],
5
- "mappings": "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",
6
- "names": ["build", "FS", "Path", "build", "MagicString", "exports", "build", "stat", "rootPkg", "distPkg"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }
@@ -1,132 +0,0 @@
1
- // package.json
2
- var name = "@b9g/libuild";
3
- var version = "0.1.3";
4
- var description = "Zero-config library builds";
5
- var main = "./dist/src/libuild.cjs";
6
- var private2 = true;
7
- var bin = {
8
- libuild: "./dist/src/cli.js"
9
- };
10
- var type = "module";
11
- var scripts = {
12
- build: "bun run src/cli.ts",
13
- dev: "bun run src/cli.ts",
14
- publish: "bun run src/cli.ts publish",
15
- test: "bun test",
16
- "test-src": "node test.js"
17
- };
18
- var dependencies = {
19
- esbuild: "^0.19.0",
20
- "magic-string": "^0.30.0",
21
- typescript: "^5.0.0"
22
- };
23
- var devDependencies = {
24
- "@types/bun": "latest"
25
- };
26
- var keywords = [
27
- "build",
28
- "library",
29
- "bundler",
30
- "bun",
31
- "zero-config",
32
- "typescript"
33
- ];
34
- var engines = {
35
- bun: ">=1.0.0"
36
- };
37
- var repository = {
38
- type: "git",
39
- url: "https://github.com/bikeshaving/libuild.git"
40
- };
41
- var bugs = {
42
- url: "https://github.com/bikeshaving/libuild/issues"
43
- };
44
- var license = "MIT";
45
- var module = "./dist/src/libuild.js";
46
- var types = "./dist/src/libuild.d.ts";
47
- var exports = {
48
- ".": {
49
- types: "./dist/src/libuild.d.ts",
50
- import: "./dist/src/libuild.js",
51
- require: "./dist/src/libuild.cjs"
52
- },
53
- "./cli": {
54
- types: "./dist/src/cli.d.ts",
55
- import: "./dist/src/cli.js",
56
- require: "./dist/src/cli.cjs"
57
- },
58
- "./cli.js": {
59
- types: "./dist/src/cli.d.ts",
60
- import: "./dist/src/cli.js",
61
- require: "./dist/src/cli.cjs"
62
- },
63
- "./libuild": {
64
- types: "./dist/src/libuild.d.ts",
65
- import: "./dist/src/libuild.js",
66
- require: "./dist/src/libuild.cjs"
67
- },
68
- "./libuild.js": {
69
- types: "./dist/src/libuild.d.ts",
70
- import: "./dist/src/libuild.js",
71
- require: "./dist/src/libuild.cjs"
72
- },
73
- "./umd-plugin": {
74
- types: "./dist/src/umd-plugin.d.ts",
75
- import: "./dist/src/umd-plugin.js",
76
- require: "./dist/src/umd-plugin.cjs"
77
- },
78
- "./umd-plugin.js": {
79
- types: "./dist/src/umd-plugin.d.ts",
80
- import: "./dist/src/umd-plugin.js",
81
- require: "./dist/src/umd-plugin.cjs"
82
- },
83
- "./package.json": "./dist/package.json"
84
- };
85
- var files = [
86
- "dist/",
87
- "README.md"
88
- ];
89
- var package_default = {
90
- name,
91
- version,
92
- description,
93
- main,
94
- private: private2,
95
- bin,
96
- type,
97
- scripts,
98
- dependencies,
99
- devDependencies,
100
- keywords,
101
- engines,
102
- repository,
103
- bugs,
104
- license,
105
- module,
106
- types,
107
- exports,
108
- files
109
- };
110
- export {
111
- bin,
112
- bugs,
113
- package_default as default,
114
- dependencies,
115
- description,
116
- devDependencies,
117
- engines,
118
- exports,
119
- files,
120
- keywords,
121
- license,
122
- main,
123
- module,
124
- name,
125
- private2 as private,
126
- repository,
127
- scripts,
128
- type,
129
- types,
130
- version
131
- };
132
- //# sourceMappingURL=package-4E3XK74J.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../package.json"],
4
- "sourcesContent": ["{\n \"name\": \"@b9g/libuild\",\n \"version\": \"0.1.3\",\n \"description\": \"Zero-config library builds\",\n \"main\": \"./dist/src/libuild.cjs\",\n \"private\": true,\n \"bin\": {\n \"libuild\": \"./dist/src/cli.js\"\n },\n \"type\": \"module\",\n \"scripts\": {\n \"build\": \"bun run src/cli.ts\",\n \"dev\": \"bun run src/cli.ts\",\n \"publish\": \"bun run src/cli.ts publish\",\n \"test\": \"bun test\",\n \"test-src\": \"node test.js\"\n },\n \"dependencies\": {\n \"esbuild\": \"^0.19.0\",\n \"magic-string\": \"^0.30.0\",\n \"typescript\": \"^5.0.0\"\n },\n \"devDependencies\": {\n \"@types/bun\": \"latest\"\n },\n \"keywords\": [\n \"build\",\n \"library\",\n \"bundler\",\n \"bun\",\n \"zero-config\",\n \"typescript\"\n ],\n \"engines\": {\n \"bun\": \">=1.0.0\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/bikeshaving/libuild.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/bikeshaving/libuild/issues\"\n },\n \"license\": \"MIT\",\n \"module\": \"./dist/src/libuild.js\",\n \"types\": \"./dist/src/libuild.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/src/libuild.d.ts\",\n \"import\": \"./dist/src/libuild.js\",\n \"require\": \"./dist/src/libuild.cjs\"\n },\n \"./cli\": {\n \"types\": \"./dist/src/cli.d.ts\",\n \"import\": \"./dist/src/cli.js\",\n \"require\": \"./dist/src/cli.cjs\"\n },\n \"./cli.js\": {\n \"types\": \"./dist/src/cli.d.ts\",\n \"import\": \"./dist/src/cli.js\",\n \"require\": \"./dist/src/cli.cjs\"\n },\n \"./libuild\": {\n \"types\": \"./dist/src/libuild.d.ts\",\n \"import\": \"./dist/src/libuild.js\",\n \"require\": \"./dist/src/libuild.cjs\"\n },\n \"./libuild.js\": {\n \"types\": \"./dist/src/libuild.d.ts\",\n \"import\": \"./dist/src/libuild.js\",\n \"require\": \"./dist/src/libuild.cjs\"\n },\n \"./umd-plugin\": {\n \"types\": \"./dist/src/umd-plugin.d.ts\",\n \"import\": \"./dist/src/umd-plugin.js\",\n \"require\": \"./dist/src/umd-plugin.cjs\"\n },\n \"./umd-plugin.js\": {\n \"types\": \"./dist/src/umd-plugin.d.ts\",\n \"import\": \"./dist/src/umd-plugin.js\",\n \"require\": \"./dist/src/umd-plugin.cjs\"\n },\n \"./package.json\": \"./dist/package.json\"\n },\n \"files\": [\n \"dist/\",\n \"README.md\"\n ]\n}\n"],
5
- "mappings": ";AACE,WAAQ;AACR,cAAW;AACX,kBAAe;AACf,WAAQ;AACR,IAAAA,WAAW;AACX,UAAO;AAAA,EACL,SAAW;AACb;AACA,WAAQ;AACR,cAAW;AAAA,EACT,OAAS;AAAA,EACT,KAAO;AAAA,EACP,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,YAAY;AACd;AACA,mBAAgB;AAAA,EACd,SAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,YAAc;AAChB;AACA,sBAAmB;AAAA,EACjB,cAAc;AAChB;AACA,eAAY;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,cAAW;AAAA,EACT,KAAO;AACT;AACA,iBAAc;AAAA,EACZ,MAAQ;AAAA,EACR,KAAO;AACT;AACA,WAAQ;AAAA,EACN,KAAO;AACT;AACA,cAAW;AACX,aAAU;AACV,YAAS;AACT,cAAW;AAAA,EACT,KAAK;AAAA,IACH,OAAS;AAAA,IACT,QAAU;AAAA,IACV,SAAW;AAAA,EACb;AAAA,EACA,SAAS;AAAA,IACP,OAAS;AAAA,IACT,QAAU;AAAA,IACV,SAAW;AAAA,EACb;AAAA,EACA,YAAY;AAAA,IACV,OAAS;AAAA,IACT,QAAU;AAAA,IACV,SAAW;AAAA,EACb;AAAA,EACA,aAAa;AAAA,IACX,OAAS;AAAA,IACT,QAAU;AAAA,IACV,SAAW;AAAA,EACb;AAAA,EACA,gBAAgB;AAAA,IACd,OAAS;AAAA,IACT,QAAU;AAAA,IACV,SAAW;AAAA,EACb;AAAA,EACA,gBAAgB;AAAA,IACd,OAAS;AAAA,IACT,QAAU;AAAA,IACV,SAAW;AAAA,EACb;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAS;AAAA,IACT,QAAU;AAAA,IACV,SAAW;AAAA,EACb;AAAA,EACA,kBAAkB;AACpB;AACA,YAAS;AAAA,EACP;AAAA,EACA;AACF;AAvFF;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAAA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EAOA;AAAA,EAKA;AAAA,EAGA;AAAA,EAQA;AAAA,EAGA;AAAA,EAIA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAsCA;AAIF;",
6
- "names": ["private"]
7
- }