smartbundle 0.15.0-alpha.1 → 0.15.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -9
- package/__compiled__/cjs/src/args.d.ts +5 -5
- package/__compiled__/cjs/src/args.js +1 -1
- package/__compiled__/cjs/src/args.js.map +1 -1
- package/__compiled__/cjs/src/detectModules.js +0 -4
- package/__compiled__/cjs/src/detectModules.js.map +1 -1
- package/__compiled__/cjs/src/index.d.ts +1 -1
- package/__compiled__/cjs/src/monorepo/buildAll.js +1 -1
- package/__compiled__/cjs/src/monorepo/buildAll.js.map +1 -1
- package/__compiled__/cjs/src/monorepo/convertPackageJson.d.ts +17 -17
- package/__compiled__/cjs/src/monorepo/createLinkPackages/createLinkPackages.js +3 -2
- package/__compiled__/cjs/src/monorepo/createLinkPackages/createLinkPackages.js.map +1 -1
- package/__compiled__/cjs/src/packageJson.d.ts +68 -68
- package/__compiled__/cjs/src/resolveDirs.js +1 -1
- package/__compiled__/cjs/src/resolveDirs.js.map +1 -1
- package/__compiled__/cjs/src/tasks/viteTask.d.ts +2 -2
- package/__compiled__/esm/src/args.d.mts +5 -5
- package/__compiled__/esm/src/args.mjs +1 -1
- package/__compiled__/esm/src/args.mjs.map +1 -1
- package/__compiled__/esm/src/detectModules.mjs +0 -4
- package/__compiled__/esm/src/detectModules.mjs.map +1 -1
- package/__compiled__/esm/src/index.d.mts +1 -1
- package/__compiled__/esm/src/monorepo/buildAll.mjs +1 -1
- package/__compiled__/esm/src/monorepo/buildAll.mjs.map +1 -1
- package/__compiled__/esm/src/monorepo/convertPackageJson.d.mts +17 -17
- package/__compiled__/esm/src/monorepo/createLinkPackages/createLinkPackages.mjs +3 -2
- package/__compiled__/esm/src/monorepo/createLinkPackages/createLinkPackages.mjs.map +1 -1
- package/__compiled__/esm/src/packageJson.d.mts +68 -68
- package/__compiled__/esm/src/resolveDirs.mjs +1 -1
- package/__compiled__/esm/src/resolveDirs.mjs.map +1 -1
- package/__compiled__/esm/src/tasks/viteTask.d.mts +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
@@ -51,7 +51,7 @@ npm install --save-dev smartbundle@latest
|
|
51
51
|
```bash
|
52
52
|
npm run build
|
53
53
|
```
|
54
|
-
4) Your built files (including an auto-generated package.json) will be in the ./dist folder
|
54
|
+
4) Your built files (including an auto-generated package.json) will be in the ./sb-dist folder
|
55
55
|
|
56
56
|
## Features
|
57
57
|
|
@@ -68,14 +68,14 @@ npm run build
|
|
68
68
|
Every bundled package is tested in real environments - from Node.js and Bun to Webpack and Metro - to ensure it just works.
|
69
69
|
|
70
70
|
### Runtimes
|
71
|
-
| Runtime | Version
|
72
|
-
|
73
|
-
| Node.js | ^18.0.0
|
74
|
-
| | ^20.0.0
|
75
|
-
| | ^22.0.0
|
76
|
-
| | ^
|
77
|
-
| Bun | ^1.0.0
|
78
|
-
| Deno | ^2.0.0
|
71
|
+
| Runtime | Version | Supported | E2E Tests |
|
72
|
+
|------------|---------|:---------:|:---------:|
|
73
|
+
| Node.js | ^18.0.0 | ✔ | ✔ |
|
74
|
+
| | ^20.0.0 | ✔ | ✔ |
|
75
|
+
| | ^22.0.0 | ✔ | ✔ |
|
76
|
+
| | ^24.0.0 | ✔ | ✔ |
|
77
|
+
| Bun | ^1.0.0 | ✔ | ✔ |
|
78
|
+
| Deno | ^2.0.0 | ✔ | - |
|
79
79
|
|
80
80
|
### Bundlers
|
81
81
|
| Bundler | Version | Supported | E2E Tests |
|
@@ -1,10 +1,10 @@
|
|
1
1
|
export declare const args: {
|
2
2
|
[x: string]: unknown;
|
3
|
-
sourceDir: string;
|
4
|
-
packagePath: string;
|
5
|
-
outputDir: string;
|
6
|
-
seq: boolean;
|
7
|
-
ci: boolean;
|
3
|
+
sourceDir: string | undefined;
|
4
|
+
packagePath: string | undefined;
|
5
|
+
outputDir: string | undefined;
|
6
|
+
seq: boolean | undefined;
|
7
|
+
ci: boolean | undefined;
|
8
8
|
_: (string | number)[];
|
9
9
|
$0: string;
|
10
10
|
};
|
@@ -31,7 +31,7 @@ const argsSchema = yargs().option("sourceDir", {
|
|
31
31
|
}).option("outputDir", {
|
32
32
|
alias: "o",
|
33
33
|
type: "string",
|
34
|
-
describe: "path to the output directory. Default: cwd()/dist"
|
34
|
+
describe: "path to the output directory. Default: cwd()/sb-dist"
|
35
35
|
}).option("seq", {
|
36
36
|
type: "boolean",
|
37
37
|
describe: "run internal tasks sequentially. It is useful for performance testing and debugging. This option is unstable and not recommended for production use."
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"args.js","sources":["../../../../src/args.ts"],"sourcesContent":["import yargs from \"yargs\";\nimport * as process from \"node:process\";\nimport { hideBin } from \"yargs/helpers\";\n\nconst argsSchema = yargs()\n .option(\"sourceDir\", {\n alias: \"s\",\n type: \"string\",\n describe:\n \"path to the project directory. Default: current working directory\",\n })\n .option(\"packagePath\", {\n alias: \"p\",\n type: \"string\",\n describe: \"path to the package.json. Default: cwd()/package.json\",\n })\n .option(\"outputDir\", {\n alias: \"o\",\n type: \"string\",\n describe: \"path to the output directory. Default: cwd()/dist\",\n })\n // Do not cover this option in tests because it is unstable\n .option(\"seq\", {\n type: \"boolean\",\n describe:\n \"run internal tasks sequentially. It is useful for performance testing and debugging. This option is unstable and not recommended for production use.\",\n })\n .option(\"ci\", {\n type: \"boolean\",\n describe: \"run in CI mode\",\n })\n .help(\"help\");\n\nexport const args = argsSchema.parseSync(hideBin(process.argv));\n\ntype OmitUnknown<T> = {\n [K in keyof T as string extends K ? never : K]: T[K];\n};\ntype ConvertUndefinedToOptional<T> = {\n [K in keyof T as undefined extends T[K] ? K : never]?: Exclude<\n T[K],\n undefined\n >;\n} & {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K];\n};\n\nexport type Monorepo = {\n type: \"pnpm\";\n devDeps: Record<string, string>;\n};\n\nexport type Args = ConvertUndefinedToOptional<\n Omit<OmitUnknown<typeof args>, \"_\" | \"$0\">\n> & {\n monorepo?: Monorepo;\n skipGitignore?: boolean;\n};\n"],"names":["hideBin","process"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,aAAa,MAAA,EAChB,OAAO,aAAa;AAAA,EACnB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UACE;AACJ,CAAC,EACA,OAAO,eAAe;AAAA,EACrB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AACZ,CAAC,EACA,OAAO,aAAa;AAAA,EACnB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AACZ,CAAC,EAEA,OAAO,OAAO;AAAA,EACb,MAAM;AAAA,EACN,UACE;AACJ,CAAC,EACA,OAAO,MAAM;AAAA,EACZ,MAAM;AAAA,EACN,UAAU;AACZ,CAAC,EACA,KAAK,MAAM;AAEP,MAAM,OAAO,WAAW,UAAUA,QAAAA,QAAQC,mBAAQ,IAAI,CAAC;;"}
|
1
|
+
{"version":3,"file":"args.js","sources":["../../../../src/args.ts"],"sourcesContent":["import yargs from \"yargs\";\nimport * as process from \"node:process\";\nimport { hideBin } from \"yargs/helpers\";\n\nconst argsSchema = yargs()\n .option(\"sourceDir\", {\n alias: \"s\",\n type: \"string\",\n describe:\n \"path to the project directory. Default: current working directory\",\n })\n .option(\"packagePath\", {\n alias: \"p\",\n type: \"string\",\n describe: \"path to the package.json. Default: cwd()/package.json\",\n })\n .option(\"outputDir\", {\n alias: \"o\",\n type: \"string\",\n describe: \"path to the output directory. Default: cwd()/sb-dist\",\n })\n // Do not cover this option in tests because it is unstable\n .option(\"seq\", {\n type: \"boolean\",\n describe:\n \"run internal tasks sequentially. It is useful for performance testing and debugging. This option is unstable and not recommended for production use.\",\n })\n .option(\"ci\", {\n type: \"boolean\",\n describe: \"run in CI mode\",\n })\n .help(\"help\");\n\nexport const args = argsSchema.parseSync(hideBin(process.argv));\n\ntype OmitUnknown<T> = {\n [K in keyof T as string extends K ? never : K]: T[K];\n};\ntype ConvertUndefinedToOptional<T> = {\n [K in keyof T as undefined extends T[K] ? K : never]?: Exclude<\n T[K],\n undefined\n >;\n} & {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K];\n};\n\nexport type Monorepo = {\n type: \"pnpm\";\n devDeps: Record<string, string>;\n};\n\nexport type Args = ConvertUndefinedToOptional<\n Omit<OmitUnknown<typeof args>, \"_\" | \"$0\">\n> & {\n monorepo?: Monorepo;\n skipGitignore?: boolean;\n};\n"],"names":["hideBin","process"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,aAAa,MAAA,EAChB,OAAO,aAAa;AAAA,EACnB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UACE;AACJ,CAAC,EACA,OAAO,eAAe;AAAA,EACrB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AACZ,CAAC,EACA,OAAO,aAAa;AAAA,EACnB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AACZ,CAAC,EAEA,OAAO,OAAO;AAAA,EACb,MAAM;AAAA,EACN,UACE;AACJ,CAAC,EACA,OAAO,MAAM;AAAA,EACZ,MAAM;AAAA,EACN,UAAU;AACZ,CAAC,EACA,KAAK,MAAM;AAEP,MAAM,OAAO,WAAW,UAAUA,QAAAA,QAAQC,mBAAQ,IAAI,CAAC;;"}
|
@@ -190,10 +190,6 @@ See https://pnpm.io/settings#dependency-hoisting-settings for more details.`
|
|
190
190
|
{
|
191
191
|
declaration: true,
|
192
192
|
emitDeclarationOnly: true,
|
193
|
-
strict: false,
|
194
|
-
strictNullChecks: false,
|
195
|
-
strictFunctionTypes: false,
|
196
|
-
strictPropertyInitialization: false,
|
197
193
|
skipLibCheck: true,
|
198
194
|
skipDefaultLibCheck: true,
|
199
195
|
outDir: "",
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"detectModules.js","sources":["../../../../src/detectModules.ts"],"sourcesContent":["import { type PackageJson } from \"./packageJson.js\";\nimport semver from \"semver\";\nimport { okLog, errorLog, log, lineLog, warnLog } from \"./log.js\";\nimport type { Dirs } from \"./resolveDirs.js\";\nimport type { Monorepo } from \"./args.js\";\n\ntype DetectionResult<T> =\n // We have undefined here is module is not found\n // It is not an error because the user would disable some functionality by not installing deps\n { success: true; module: T | undefined } | { success: false; error: string };\n\ntype ModuleWithVersion<T> = T & { version: string };\n\ntype TSModuleData = {\n ts: typeof import(\"typescript\");\n parsedConfig: import(\"typescript\").ParsedCommandLine;\n host: import(\"typescript\").CompilerHost;\n};\n\ntype BabelModuleData = {\n babel: typeof import(\"@babel/core\");\n};\n\ntype ReactModuleData = {\n transform: \"legacy\" | \"modern\";\n};\n\nexport type TSModule = ModuleWithVersion<TSModuleData>;\nexport type BabelModule = ModuleWithVersion<BabelModuleData>;\nexport type ReactModule = ModuleWithVersion<ReactModuleData>;\n\nexport type DetectedModules = {\n ts?: TSModule;\n babel?: BabelModule;\n react?: ReactModule;\n};\n\nexport type DetectModulesResult =\n | { success: true; modules: DetectedModules }\n | { success: false; errors: string[] };\n\ntype DepType =\n | \"dependencies\"\n | \"devDependencies\"\n | \"peerDependencies\"\n | \"optionalDependencies\";\nexport function getMinVersion(\n packageJson: PackageJson,\n depName: string,\n exclude: DepType[],\n): semver.SemVer | null {\n const allDepKeys = new Set<DepType>([\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n \"optionalDependencies\",\n ]);\n for (const e of exclude) {\n allDepKeys.delete(e);\n }\n\n let minVersion: semver.SemVer | null = null;\n\n for (const depKey of allDepKeys) {\n const depVersion = packageJson[depKey]?.[depName];\n if (depVersion) {\n const version = semver.minVersion(depVersion);\n if (!version) {\n warnLog(\"node-semver cannot parse version of\", depName, \"from\", depKey);\n warnLog(\"Version:\", depVersion);\n continue;\n }\n if (!minVersion) {\n minVersion = version;\n continue;\n }\n if (semver.lt(version, minVersion)) {\n minVersion = version;\n }\n }\n }\n\n return minVersion;\n}\n\nasync function detectBabel(\n packageJson: PackageJson,\n isMonorepoPackage: boolean,\n): Promise<DetectionResult<BabelModule>> {\n const hasBabelInPackage = getMinVersion(packageJson, \"@babel/core\", [\n \"optionalDependencies\",\n ]);\n\n if (isMonorepoPackage && hasBabelInPackage) {\n return {\n success: false,\n error:\n `Babel found in package-level package.json for monorepo package \"${packageJson.name}\".\\n` +\n `In monorepos, build tools like Babel should be defined in the workspace root package.json, not in individual packages.\\n` +\n `Please move \"@babel/core\" from this package's dependencies/devDependencies to the root package.json's devDependencies.`,\n };\n }\n\n if (\"@babel/core\" in (packageJson.optionalDependencies ?? {})) {\n errorLog(\"babel excluded because inside optionalDependencies\");\n return {\n success: false,\n error: \"Babel excluded because it's in optionalDependencies\",\n };\n }\n\n // Check for babel in package deps\n const babelVersion = getMinVersion(packageJson, \"@babel/core\", [\n \"optionalDependencies\",\n ]);\n\n if (!babelVersion) {\n errorLog(\"babel\");\n return { success: true, module: undefined };\n }\n\n try {\n const babel = await import(\"@babel/core\");\n okLog(\"babel, version:\", babel.version);\n return {\n success: true,\n module: {\n babel,\n version: babel.version,\n },\n };\n } catch {\n errorLog(\"babel\");\n return { success: false, error: \"Failed to import @babel/core\" };\n }\n}\n\nasync function detectReact(\n packageJson: PackageJson,\n isMonorepoPackage: boolean,\n): Promise<DetectionResult<ReactModule>> {\n const reactVersionInPackage = getMinVersion(packageJson, \"react\", [\n \"devDependencies\",\n ]);\n\n if (isMonorepoPackage && reactVersionInPackage) {\n return {\n success: false,\n error:\n `React found in package-level package.json for monorepo package \"${packageJson.name}\".\\n` +\n `In monorepos, build tools like React should be defined in the workspace root package.json, not in individual packages.\\n` +\n `Please move \"react\" from this package's dependencies/peerDependencies to the root package.json's dependencies or peerDependencies.`,\n };\n }\n\n const reactVersion = getMinVersion(packageJson, \"react\", [\"devDependencies\"]);\n\n if (reactVersion) {\n const isLegacy = semver.lt(reactVersion, \"17.0.0\");\n const transform = isLegacy ? \"legacy\" : \"modern\";\n okLog(\n `react, min version: ${reactVersion.version}. Transform: ${transform}`,\n );\n return {\n success: true,\n module: {\n transform,\n version: reactVersion.version,\n },\n };\n }\n\n errorLog(\"react\");\n return { success: true, module: undefined };\n}\n\nasync function detectTypescript(\n packageJson: PackageJson,\n dirs: Dirs,\n monorepoType?: \"pnpm\" | null,\n): Promise<DetectionResult<TSModule>> {\n const typescriptVersion = getMinVersion(packageJson, \"typescript\", []);\n\n if (monorepoType != null && typescriptVersion) {\n return {\n success: false,\n error:\n `TypeScript found in package-level package.json for monorepo package \"${packageJson.name}\".\\n` +\n `In monorepos, build tools like TypeScript should be defined in the workspace root package.json, not in individual packages.\\n` +\n `Please move \"typescript\" from this package's dependencies/devDependencies to the root package.json's devDependencies.`,\n };\n }\n\n if (!typescriptVersion) {\n errorLog(\"typescript\");\n return { success: true, module: undefined };\n }\n\n let ts: typeof import(\"typescript\");\n try {\n // ts <=4.3 has no named exports. The all methods are located in the default export\n ts = (await import(\"typescript\")).default;\n } catch {\n if (monorepoType === \"pnpm\") {\n return {\n success: false,\n error:\n 'smartbundle found the .ts entrypoint but required \"typescript\" to build .d.ts files. ' +\n 'Please install the \"typescript\" dependency. ' +\n \"In pnpm workspaces, you may need to either:\\n\" +\n '1. Add \"hoist-workspace-packages=true\" to your pnpm-workspace.yaml file (recommended), or\\n' +\n '2. Add \"public-hoist-pattern[]=[\\\\\"typescript\\\\\"]\" to your pnpm-workspace.yaml file, or\\n' +\n '3. Add \"typescript\" as a devDependency in each package\\'s package.json\\n' +\n \"See https://pnpm.io/settings#dependency-hoisting-settings for more details.\",\n };\n } else {\n return {\n success: false,\n error:\n 'smartbundle found the .ts entrypoint but required \"typescript\" to build .d.ts files. ' +\n 'Please install the \"typescript\" dependency.',\n };\n }\n }\n\n okLog(\"typescript, version:\", ts.version);\n\n const configFilePath = ts.findConfigFile(dirs.sourceDir, ts.sys.fileExists);\n if (!configFilePath) {\n return {\n success: false,\n error:\n \"Cannot find a tsconfig.json file. You should declare it. Please, read the https://github.com/XaveScor/smartbundle/issues/131 for more information\",\n };\n }\n const configFile = ts.readConfigFile(configFilePath, ts.sys.readFile);\n if (configFile.error) {\n const readableError = ts.flattenDiagnosticMessageText(\n configFile.error.messageText,\n \"\\n\",\n );\n return {\n success: false,\n error: `Cannot read tsconfig.json file, error: ${readableError}`,\n };\n }\n const parsedConfig = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n dirs.sourceDir,\n {\n declaration: true,\n emitDeclarationOnly: true,\n strict: false,\n strictNullChecks: false,\n strictFunctionTypes: false,\n strictPropertyInitialization: false,\n skipLibCheck: true,\n skipDefaultLibCheck: true,\n outDir: \"\",\n // https://github.com/XaveScor/bobrik/issues/22#issuecomment-2308552352\n noEmit: false,\n },\n configFilePath,\n );\n\n if (!parsedConfig.options.verbatimModuleSyntax) {\n return {\n success: false,\n error:\n \"verbatimModuleSyntax should be enabled in tsconfig.json. Read https://github.com/XaveScor/smartbundle/issues/131 for more explanation.\\n\" +\n \"You also can upvote the issue if you need the support of verbatimModuleSyntax: false in your library\",\n };\n }\n\n const host = ts.createCompilerHost(parsedConfig.options);\n\n return {\n success: true,\n module: {\n ts,\n parsedConfig,\n host,\n version: ts.version,\n },\n };\n}\n\nexport async function detectModules(\n packageJson: PackageJson,\n dirs: Dirs,\n monorepo?: Monorepo,\n): Promise<DetectModulesResult> {\n if (!monorepo) {\n return detectPackageModules(packageJson, dirs);\n }\n\n // First, check if package has ts/babel (which is wrong in monorepo)\n const packageValidation = await detectPackageModules(\n packageJson,\n dirs,\n monorepo.type,\n );\n\n // Collect validation errors\n const errors: string[] = [];\n if (!packageValidation.success) {\n errors.push(...packageValidation.errors);\n } else {\n if (packageValidation.modules.ts) {\n errors.push(\n `Package \"${packageJson.name}\" has ts/babel in package.json, but it's not allowed in monorepo.`,\n );\n }\n if (packageValidation.modules.babel) {\n errors.push(\n `Package \"${packageJson.name}\" has babel in package.json, but it's not allowed in monorepo.`,\n );\n }\n }\n\n // Create merged package.json with workspace devDeps for ts/babel\n const mergedPackageJson: PackageJson = {\n ...packageJson,\n devDependencies: {\n ...monorepo.devDeps,\n ...packageJson.devDependencies,\n },\n };\n\n // Detect modules with merged package.json (ts/babel from workspace, react from package)\n const result = await detectPackageModules(mergedPackageJson, dirs);\n\n if (!result.success) {\n errors.push(...result.errors);\n }\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return result;\n}\n\nasync function detectPackageModules(\n packageJson: PackageJson,\n dirs: Dirs,\n monorepoType?: \"pnpm\" | null,\n): Promise<DetectModulesResult> {\n log(\"Detecting modules\");\n\n const [tsResult, babelResult, reactResult] = await Promise.all([\n detectTypescript(packageJson, dirs, monorepoType),\n detectBabel(packageJson, monorepoType != null),\n detectReact(packageJson, monorepoType != null),\n ]);\n\n const errors: string[] = [];\n const modules: DetectedModules = {};\n\n if (!tsResult.success) {\n errors.push(tsResult.error);\n } else if (tsResult.module) {\n modules.ts = tsResult.module;\n }\n\n if (!babelResult.success) {\n errors.push(babelResult.error);\n } else if (babelResult.module) {\n modules.babel = babelResult.module;\n }\n\n if (!reactResult.success) {\n errors.push(reactResult.error);\n } else if (reactResult.module) {\n modules.react = reactResult.module;\n }\n\n lineLog();\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return { success: true, modules };\n}\n"],"names":["warnLog","errorLog","okLog","log","lineLog"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"detectModules.js","sources":["../../../../src/detectModules.ts"],"sourcesContent":["import { type PackageJson } from \"./packageJson.js\";\nimport semver from \"semver\";\nimport { okLog, errorLog, log, lineLog, warnLog } from \"./log.js\";\nimport type { Dirs } from \"./resolveDirs.js\";\nimport type { Monorepo } from \"./args.js\";\n\ntype DetectionResult<T> =\n // We have undefined here is module is not found\n // It is not an error because the user would disable some functionality by not installing deps\n { success: true; module: T | undefined } | { success: false; error: string };\n\ntype ModuleWithVersion<T> = T & { version: string };\n\ntype TSModuleData = {\n ts: typeof import(\"typescript\");\n parsedConfig: import(\"typescript\").ParsedCommandLine;\n host: import(\"typescript\").CompilerHost;\n};\n\ntype BabelModuleData = {\n babel: typeof import(\"@babel/core\");\n};\n\ntype ReactModuleData = {\n transform: \"legacy\" | \"modern\";\n};\n\nexport type TSModule = ModuleWithVersion<TSModuleData>;\nexport type BabelModule = ModuleWithVersion<BabelModuleData>;\nexport type ReactModule = ModuleWithVersion<ReactModuleData>;\n\nexport type DetectedModules = {\n ts?: TSModule;\n babel?: BabelModule;\n react?: ReactModule;\n};\n\nexport type DetectModulesResult =\n | { success: true; modules: DetectedModules }\n | { success: false; errors: string[] };\n\ntype DepType =\n | \"dependencies\"\n | \"devDependencies\"\n | \"peerDependencies\"\n | \"optionalDependencies\";\nexport function getMinVersion(\n packageJson: PackageJson,\n depName: string,\n exclude: DepType[],\n): semver.SemVer | null {\n const allDepKeys = new Set<DepType>([\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n \"optionalDependencies\",\n ]);\n for (const e of exclude) {\n allDepKeys.delete(e);\n }\n\n let minVersion: semver.SemVer | null = null;\n\n for (const depKey of allDepKeys) {\n const depVersion = packageJson[depKey]?.[depName];\n if (depVersion) {\n const version = semver.minVersion(depVersion);\n if (!version) {\n warnLog(\"node-semver cannot parse version of\", depName, \"from\", depKey);\n warnLog(\"Version:\", depVersion);\n continue;\n }\n if (!minVersion) {\n minVersion = version;\n continue;\n }\n if (semver.lt(version, minVersion)) {\n minVersion = version;\n }\n }\n }\n\n return minVersion;\n}\n\nasync function detectBabel(\n packageJson: PackageJson,\n isMonorepoPackage: boolean,\n): Promise<DetectionResult<BabelModule>> {\n const hasBabelInPackage = getMinVersion(packageJson, \"@babel/core\", [\n \"optionalDependencies\",\n ]);\n\n if (isMonorepoPackage && hasBabelInPackage) {\n return {\n success: false,\n error:\n `Babel found in package-level package.json for monorepo package \"${packageJson.name}\".\\n` +\n `In monorepos, build tools like Babel should be defined in the workspace root package.json, not in individual packages.\\n` +\n `Please move \"@babel/core\" from this package's dependencies/devDependencies to the root package.json's devDependencies.`,\n };\n }\n\n if (\"@babel/core\" in (packageJson.optionalDependencies ?? {})) {\n errorLog(\"babel excluded because inside optionalDependencies\");\n return {\n success: false,\n error: \"Babel excluded because it's in optionalDependencies\",\n };\n }\n\n // Check for babel in package deps\n const babelVersion = getMinVersion(packageJson, \"@babel/core\", [\n \"optionalDependencies\",\n ]);\n\n if (!babelVersion) {\n errorLog(\"babel\");\n return { success: true, module: undefined };\n }\n\n try {\n const babel = await import(\"@babel/core\");\n okLog(\"babel, version:\", babel.version);\n return {\n success: true,\n module: {\n babel,\n version: babel.version,\n },\n };\n } catch {\n errorLog(\"babel\");\n return { success: false, error: \"Failed to import @babel/core\" };\n }\n}\n\nasync function detectReact(\n packageJson: PackageJson,\n isMonorepoPackage: boolean,\n): Promise<DetectionResult<ReactModule>> {\n const reactVersionInPackage = getMinVersion(packageJson, \"react\", [\n \"devDependencies\",\n ]);\n\n if (isMonorepoPackage && reactVersionInPackage) {\n return {\n success: false,\n error:\n `React found in package-level package.json for monorepo package \"${packageJson.name}\".\\n` +\n `In monorepos, build tools like React should be defined in the workspace root package.json, not in individual packages.\\n` +\n `Please move \"react\" from this package's dependencies/peerDependencies to the root package.json's dependencies or peerDependencies.`,\n };\n }\n\n const reactVersion = getMinVersion(packageJson, \"react\", [\"devDependencies\"]);\n\n if (reactVersion) {\n const isLegacy = semver.lt(reactVersion, \"17.0.0\");\n const transform = isLegacy ? \"legacy\" : \"modern\";\n okLog(\n `react, min version: ${reactVersion.version}. Transform: ${transform}`,\n );\n return {\n success: true,\n module: {\n transform,\n version: reactVersion.version,\n },\n };\n }\n\n errorLog(\"react\");\n return { success: true, module: undefined };\n}\n\nasync function detectTypescript(\n packageJson: PackageJson,\n dirs: Dirs,\n monorepoType?: \"pnpm\" | null,\n): Promise<DetectionResult<TSModule>> {\n const typescriptVersion = getMinVersion(packageJson, \"typescript\", []);\n\n if (monorepoType != null && typescriptVersion) {\n return {\n success: false,\n error:\n `TypeScript found in package-level package.json for monorepo package \"${packageJson.name}\".\\n` +\n `In monorepos, build tools like TypeScript should be defined in the workspace root package.json, not in individual packages.\\n` +\n `Please move \"typescript\" from this package's dependencies/devDependencies to the root package.json's devDependencies.`,\n };\n }\n\n if (!typescriptVersion) {\n errorLog(\"typescript\");\n return { success: true, module: undefined };\n }\n\n let ts: typeof import(\"typescript\");\n try {\n // ts <=4.3 has no named exports. The all methods are located in the default export\n ts = (await import(\"typescript\")).default;\n } catch {\n if (monorepoType === \"pnpm\") {\n return {\n success: false,\n error:\n 'smartbundle found the .ts entrypoint but required \"typescript\" to build .d.ts files. ' +\n 'Please install the \"typescript\" dependency. ' +\n \"In pnpm workspaces, you may need to either:\\n\" +\n '1. Add \"hoist-workspace-packages=true\" to your pnpm-workspace.yaml file (recommended), or\\n' +\n '2. Add \"public-hoist-pattern[]=[\\\\\"typescript\\\\\"]\" to your pnpm-workspace.yaml file, or\\n' +\n '3. Add \"typescript\" as a devDependency in each package\\'s package.json\\n' +\n \"See https://pnpm.io/settings#dependency-hoisting-settings for more details.\",\n };\n } else {\n return {\n success: false,\n error:\n 'smartbundle found the .ts entrypoint but required \"typescript\" to build .d.ts files. ' +\n 'Please install the \"typescript\" dependency.',\n };\n }\n }\n\n okLog(\"typescript, version:\", ts.version);\n\n const configFilePath = ts.findConfigFile(dirs.sourceDir, ts.sys.fileExists);\n if (!configFilePath) {\n return {\n success: false,\n error:\n \"Cannot find a tsconfig.json file. You should declare it. Please, read the https://github.com/XaveScor/smartbundle/issues/131 for more information\",\n };\n }\n const configFile = ts.readConfigFile(configFilePath, ts.sys.readFile);\n if (configFile.error) {\n const readableError = ts.flattenDiagnosticMessageText(\n configFile.error.messageText,\n \"\\n\",\n );\n return {\n success: false,\n error: `Cannot read tsconfig.json file, error: ${readableError}`,\n };\n }\n const parsedConfig = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n dirs.sourceDir,\n {\n declaration: true,\n emitDeclarationOnly: true,\n skipLibCheck: true,\n skipDefaultLibCheck: true,\n outDir: \"\",\n // https://github.com/XaveScor/bobrik/issues/22#issuecomment-2308552352\n noEmit: false,\n },\n configFilePath,\n );\n\n if (!parsedConfig.options.verbatimModuleSyntax) {\n return {\n success: false,\n error:\n \"verbatimModuleSyntax should be enabled in tsconfig.json. Read https://github.com/XaveScor/smartbundle/issues/131 for more explanation.\\n\" +\n \"You also can upvote the issue if you need the support of verbatimModuleSyntax: false in your library\",\n };\n }\n\n const host = ts.createCompilerHost(parsedConfig.options);\n\n return {\n success: true,\n module: {\n ts,\n parsedConfig,\n host,\n version: ts.version,\n },\n };\n}\n\nexport async function detectModules(\n packageJson: PackageJson,\n dirs: Dirs,\n monorepo?: Monorepo,\n): Promise<DetectModulesResult> {\n if (!monorepo) {\n return detectPackageModules(packageJson, dirs);\n }\n\n // First, check if package has ts/babel (which is wrong in monorepo)\n const packageValidation = await detectPackageModules(\n packageJson,\n dirs,\n monorepo.type,\n );\n\n // Collect validation errors\n const errors: string[] = [];\n if (!packageValidation.success) {\n errors.push(...packageValidation.errors);\n } else {\n if (packageValidation.modules.ts) {\n errors.push(\n `Package \"${packageJson.name}\" has ts/babel in package.json, but it's not allowed in monorepo.`,\n );\n }\n if (packageValidation.modules.babel) {\n errors.push(\n `Package \"${packageJson.name}\" has babel in package.json, but it's not allowed in monorepo.`,\n );\n }\n }\n\n // Create merged package.json with workspace devDeps for ts/babel\n const mergedPackageJson: PackageJson = {\n ...packageJson,\n devDependencies: {\n ...monorepo.devDeps,\n ...packageJson.devDependencies,\n },\n };\n\n // Detect modules with merged package.json (ts/babel from workspace, react from package)\n const result = await detectPackageModules(mergedPackageJson, dirs);\n\n if (!result.success) {\n errors.push(...result.errors);\n }\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return result;\n}\n\nasync function detectPackageModules(\n packageJson: PackageJson,\n dirs: Dirs,\n monorepoType?: \"pnpm\" | null,\n): Promise<DetectModulesResult> {\n log(\"Detecting modules\");\n\n const [tsResult, babelResult, reactResult] = await Promise.all([\n detectTypescript(packageJson, dirs, monorepoType),\n detectBabel(packageJson, monorepoType != null),\n detectReact(packageJson, monorepoType != null),\n ]);\n\n const errors: string[] = [];\n const modules: DetectedModules = {};\n\n if (!tsResult.success) {\n errors.push(tsResult.error);\n } else if (tsResult.module) {\n modules.ts = tsResult.module;\n }\n\n if (!babelResult.success) {\n errors.push(babelResult.error);\n } else if (babelResult.module) {\n modules.babel = babelResult.module;\n }\n\n if (!reactResult.success) {\n errors.push(reactResult.error);\n } else if (reactResult.module) {\n modules.react = reactResult.module;\n }\n\n lineLog();\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return { success: true, modules };\n}\n"],"names":["warnLog","errorLog","okLog","log","lineLog"],"mappings":"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"}
|
@@ -2,7 +2,7 @@ import { type Args } from "./args.js";
|
|
2
2
|
import { PrettyError } from "./PrettyErrors.js";
|
3
3
|
export declare function defineViteConfig(args?: Args): Promise<import("vite").UserConfig | {
|
4
4
|
error: boolean;
|
5
|
-
errors:
|
5
|
+
errors: string[];
|
6
6
|
}>;
|
7
7
|
type RunResult = {
|
8
8
|
error: false;
|
@@ -33,7 +33,7 @@ async function buildMonorepo(args) {
|
|
33
33
|
...args,
|
34
34
|
sourceDir: packageSourceDir,
|
35
35
|
packagePath: path.join(packageSourceDir, "package.json"),
|
36
|
-
outputDir: path.join(packageSourceDir, "dist"),
|
36
|
+
outputDir: path.join(packageSourceDir, "sb-dist"),
|
37
37
|
monorepo
|
38
38
|
};
|
39
39
|
const buildResult = await _.run(packageArgs);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"buildAll.js","sources":["../../../../../src/monorepo/buildAll.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport { parseMonorepo } from \"./parseMonorepo/parseMonorepo.js\";\nimport { run } from \"../index.js\";\nimport { type Args } from \"../args.js\";\nimport { log, lineLog } from \"../log.js\";\nimport { PrettyError } from \"../PrettyErrors.js\";\n\nexport type MonorepoBuildResult = {\n totalPackages: number;\n successfulBuilds: number;\n failedBuilds: number;\n errors: Array<{ packagePath: string; errors: Array<string | PrettyError> }>;\n};\n\nexport async function buildMonorepo(args: Args): Promise<MonorepoBuildResult> {\n const sourceDir = args.sourceDir || process.cwd();\n\n // Use existing monorepo detection\n const { monorepo, projectPaths } = await parseMonorepo({ sourceDir });\n\n if (!monorepo) {\n throw new PrettyError(\"Not a monorepo - pnpm-workspace.yaml not found\");\n }\n\n if (projectPaths.length === 0) {\n throw new PrettyError(\n \"No packages with -sbsources suffix found in monorepo\",\n );\n }\n\n log(`Found ${projectPaths.length} packages to build in monorepo`);\n lineLog();\n\n const result: MonorepoBuildResult = {\n totalPackages: projectPaths.length,\n successfulBuilds: 0,\n failedBuilds: 0,\n errors: [],\n };\n\n // Build each package sequentially for now\n // TODO: Add dependency analysis and parallel builds\n for (let i = 0; i < projectPaths.length; i++) {\n const packagePath = projectPaths[i];\n const packageSourceDir = join(sourceDir, packagePath);\n\n log(`[${i + 1}/${projectPaths.length}] Building ${packagePath}...`);\n\n // Create args for this specific package\n const packageArgs: Args = {\n ...args,\n sourceDir: packageSourceDir,\n packagePath: join(packageSourceDir, \"package.json\"),\n outputDir: join(packageSourceDir, \"dist\"),\n monorepo,\n };\n\n // Reuse existing run logic\n const buildResult = await run(packageArgs);\n\n if (buildResult.error) {\n result.failedBuilds++;\n result.errors.push({\n packagePath,\n errors: buildResult.errors,\n });\n log(\n `[${i + 1}/${projectPaths.length}] ❌ Failed to build ${packagePath}`,\n );\n } else {\n result.successfulBuilds++;\n log(`[${i + 1}/${projectPaths.length}] ✅ Built ${packagePath}`);\n }\n\n lineLog();\n }\n\n // Summary\n log(`Monorepo build completed:`);\n log(` Total packages: ${result.totalPackages}`);\n log(` Successful: ${result.successfulBuilds}`);\n log(` Failed: ${result.failedBuilds}`);\n\n return result;\n}\n"],"names":["parseMonorepo","PrettyError","log","lineLog","join","run"],"mappings":";;;;;;;;AAcA,eAAsB,cAAc,MAA0C;AAC5E,QAAM,YAAY,KAAK,aAAa,QAAQ,IAAI;AAG1C,QAAA,EAAE,UAAU,aAAa,IAAI,MAAMA,cAAc,cAAA,EAAE,WAAW;AAEpE,MAAI,CAAC,UAAU;AACP,UAAA,IAAIC,yBAAY,gDAAgD;AAAA,EAAA;AAGpE,MAAA,aAAa,WAAW,GAAG;AAC7B,UAAM,IAAIA,aAAA;AAAA,MACR;AAAA,IACF;AAAA,EAAA;AAGEC,MAAAA,IAAA,SAAS,aAAa,MAAM,gCAAgC;AACxDC,cAAA;AAER,QAAM,SAA8B;AAAA,IAClC,eAAe,aAAa;AAAA,IAC5B,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,QAAQ,CAAA;AAAA,EACV;AAIA,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AACtC,UAAA,cAAc,aAAa,CAAC;AAC5B,UAAA,mBAAmBC,KAAAA,KAAK,WAAW,WAAW;AAEhDF,QAAAA,IAAA,IAAI,IAAI,CAAC,IAAI,aAAa,MAAM,cAAc,WAAW,KAAK;AAGlE,UAAM,cAAoB;AAAA,MACxB,GAAG;AAAA,MACH,WAAW;AAAA,MACX,aAAaE,KAAAA,KAAK,kBAAkB,cAAc;AAAA,MAClD,WAAWA,KAAAA,KAAK,kBAAkB,
|
1
|
+
{"version":3,"file":"buildAll.js","sources":["../../../../../src/monorepo/buildAll.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport { parseMonorepo } from \"./parseMonorepo/parseMonorepo.js\";\nimport { run } from \"../index.js\";\nimport { type Args } from \"../args.js\";\nimport { log, lineLog } from \"../log.js\";\nimport { PrettyError } from \"../PrettyErrors.js\";\n\nexport type MonorepoBuildResult = {\n totalPackages: number;\n successfulBuilds: number;\n failedBuilds: number;\n errors: Array<{ packagePath: string; errors: Array<string | PrettyError> }>;\n};\n\nexport async function buildMonorepo(args: Args): Promise<MonorepoBuildResult> {\n const sourceDir = args.sourceDir || process.cwd();\n\n // Use existing monorepo detection\n const { monorepo, projectPaths } = await parseMonorepo({ sourceDir });\n\n if (!monorepo) {\n throw new PrettyError(\"Not a monorepo - pnpm-workspace.yaml not found\");\n }\n\n if (projectPaths.length === 0) {\n throw new PrettyError(\n \"No packages with -sbsources suffix found in monorepo\",\n );\n }\n\n log(`Found ${projectPaths.length} packages to build in monorepo`);\n lineLog();\n\n const result: MonorepoBuildResult = {\n totalPackages: projectPaths.length,\n successfulBuilds: 0,\n failedBuilds: 0,\n errors: [],\n };\n\n // Build each package sequentially for now\n // TODO: Add dependency analysis and parallel builds\n for (let i = 0; i < projectPaths.length; i++) {\n const packagePath = projectPaths[i];\n const packageSourceDir = join(sourceDir, packagePath);\n\n log(`[${i + 1}/${projectPaths.length}] Building ${packagePath}...`);\n\n // Create args for this specific package\n const packageArgs: Args = {\n ...args,\n sourceDir: packageSourceDir,\n packagePath: join(packageSourceDir, \"package.json\"),\n outputDir: join(packageSourceDir, \"sb-dist\"),\n monorepo,\n };\n\n // Reuse existing run logic\n const buildResult = await run(packageArgs);\n\n if (buildResult.error) {\n result.failedBuilds++;\n result.errors.push({\n packagePath,\n errors: buildResult.errors,\n });\n log(\n `[${i + 1}/${projectPaths.length}] ❌ Failed to build ${packagePath}`,\n );\n } else {\n result.successfulBuilds++;\n log(`[${i + 1}/${projectPaths.length}] ✅ Built ${packagePath}`);\n }\n\n lineLog();\n }\n\n // Summary\n log(`Monorepo build completed:`);\n log(` Total packages: ${result.totalPackages}`);\n log(` Successful: ${result.successfulBuilds}`);\n log(` Failed: ${result.failedBuilds}`);\n\n return result;\n}\n"],"names":["parseMonorepo","PrettyError","log","lineLog","join","run"],"mappings":";;;;;;;;AAcA,eAAsB,cAAc,MAA0C;AAC5E,QAAM,YAAY,KAAK,aAAa,QAAQ,IAAI;AAG1C,QAAA,EAAE,UAAU,aAAa,IAAI,MAAMA,cAAc,cAAA,EAAE,WAAW;AAEpE,MAAI,CAAC,UAAU;AACP,UAAA,IAAIC,yBAAY,gDAAgD;AAAA,EAAA;AAGpE,MAAA,aAAa,WAAW,GAAG;AAC7B,UAAM,IAAIA,aAAA;AAAA,MACR;AAAA,IACF;AAAA,EAAA;AAGEC,MAAAA,IAAA,SAAS,aAAa,MAAM,gCAAgC;AACxDC,cAAA;AAER,QAAM,SAA8B;AAAA,IAClC,eAAe,aAAa;AAAA,IAC5B,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,QAAQ,CAAA;AAAA,EACV;AAIA,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AACtC,UAAA,cAAc,aAAa,CAAC;AAC5B,UAAA,mBAAmBC,KAAAA,KAAK,WAAW,WAAW;AAEhDF,QAAAA,IAAA,IAAI,IAAI,CAAC,IAAI,aAAa,MAAM,cAAc,WAAW,KAAK;AAGlE,UAAM,cAAoB;AAAA,MACxB,GAAG;AAAA,MACH,WAAW;AAAA,MACX,aAAaE,KAAAA,KAAK,kBAAkB,cAAc;AAAA,MAClD,WAAWA,KAAAA,KAAK,kBAAkB,SAAS;AAAA,MAC3C;AAAA,IACF;AAGM,UAAA,cAAc,MAAMC,EAAA,IAAI,WAAW;AAEzC,QAAI,YAAY,OAAO;AACd,aAAA;AACP,aAAO,OAAO,KAAK;AAAA,QACjB;AAAA,QACA,QAAQ,YAAY;AAAA,MAAA,CACrB;AACDH,UAAA;AAAA,QACE,IAAI,IAAI,CAAC,IAAI,aAAa,MAAM,uBAAuB,WAAW;AAAA,MACpE;AAAA,IAAA,OACK;AACE,aAAA;AACHA,UAAAA,IAAA,IAAI,IAAI,CAAC,IAAI,aAAa,MAAM,aAAa,WAAW,EAAE;AAAA,IAAA;AAGxDC,gBAAA;AAAA,EAAA;AAIVD,MAAA,IAAI,2BAA2B;AAC3BA,MAAAA,IAAA,qBAAqB,OAAO,aAAa,EAAE;AAC3CA,MAAAA,IAAA,iBAAiB,OAAO,gBAAgB,EAAE;AAC1CA,MAAAA,IAAA,aAAa,OAAO,YAAY,EAAE;AAE/B,SAAA;AACT;;"}
|
@@ -1,25 +1,25 @@
|
|
1
1
|
import type { PackageJson } from "../packageJson.js";
|
2
2
|
export declare function convertPackageJson(packageJson: PackageJson): {
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
description?: string;
|
8
|
-
dependencies?: Record<string, string
|
9
|
-
optionalDependencies?: Record<string, string
|
10
|
-
bin?: Map<string, string
|
3
|
+
name: string;
|
4
|
+
version: string;
|
5
|
+
private: boolean;
|
6
|
+
exports?: Map<string, string> | undefined;
|
7
|
+
description?: string | undefined;
|
8
|
+
dependencies?: Record<string, string> | undefined;
|
9
|
+
optionalDependencies?: Record<string, string> | undefined;
|
10
|
+
bin?: Map<string, string> | undefined;
|
11
11
|
repository?: any;
|
12
|
-
keywords?: string[];
|
12
|
+
keywords?: string[] | undefined;
|
13
13
|
author?: any;
|
14
|
-
contributors?: (string | {})[];
|
14
|
+
contributors?: (string | {})[] | undefined;
|
15
15
|
license?: any;
|
16
|
-
devDependencies?: Record<string, string
|
17
|
-
peerDependencies?: Record<string, string
|
18
|
-
engines?: Record<string, string
|
19
|
-
browser?: string | Record<string, string
|
20
|
-
funding?: string | {};
|
21
|
-
os?: string[];
|
22
|
-
cpu?: string[];
|
16
|
+
devDependencies?: Record<string, string> | undefined;
|
17
|
+
peerDependencies?: Record<string, string> | undefined;
|
18
|
+
engines?: Record<string, string> | undefined;
|
19
|
+
browser?: string | Record<string, string> | undefined;
|
20
|
+
funding?: string | {} | undefined;
|
21
|
+
os?: string[] | undefined;
|
22
|
+
cpu?: string[] | undefined;
|
23
23
|
scripts?: any;
|
24
24
|
maintainers?: any;
|
25
25
|
bugs?: any;
|
@@ -7,7 +7,7 @@ const fs = require("node:fs/promises");
|
|
7
7
|
async function createLinkPackages({
|
8
8
|
sourceDir
|
9
9
|
}) {
|
10
|
-
const {
|
10
|
+
const { monorepo, projectPaths } = await parseMonorepo.parseMonorepo({ sourceDir });
|
11
11
|
if (projectPaths.length === 0) {
|
12
12
|
console.log("No SmartBundle-bundled projects found in the monorepo");
|
13
13
|
return;
|
@@ -31,7 +31,7 @@ async function createLinkPackages({
|
|
31
31
|
/-sbsources$/,
|
32
32
|
""
|
33
33
|
);
|
34
|
-
const linkPackageDir = path.join(sourceDir, projectPath, "dist");
|
34
|
+
const linkPackageDir = path.join(sourceDir, projectPath, "sb-dist");
|
35
35
|
await fs.mkdir(linkPackageDir, { recursive: true });
|
36
36
|
const linkExports = {};
|
37
37
|
const reexportFiles = [];
|
@@ -67,6 +67,7 @@ async function createLinkPackages({
|
|
67
67
|
}
|
68
68
|
const linkPackageJson = {
|
69
69
|
name: linkPackageName,
|
70
|
+
private: true,
|
70
71
|
version: projectPackageJson.version ?? "0.0.0",
|
71
72
|
type: "module",
|
72
73
|
description: `Link package for ${projectPackageJson.name}`,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"createLinkPackages.js","sources":["../../../../../../src/monorepo/createLinkPackages/createLinkPackages.ts"],"sourcesContent":["import { parsePackageJson } from \"../../packageJson.js\";\nimport { parseMonorepo } from \"../parseMonorepo/parseMonorepo.js\";\nimport path from \"node:path\";\nimport fs from \"node:fs/promises\";\n\ntype CreateLinkPackagesArgs = {\n sourceDir: string;\n};\n\n/**\n * Creates link packages for all SmartBundle-bundled projects in a monorepo\n * A link package is a reference package that points to the bundled output\n */\nexport async function createLinkPackages({\n sourceDir,\n}: CreateLinkPackagesArgs) {\n // Find all SmartBundle-bundled projects in the monorepo\n const {
|
1
|
+
{"version":3,"file":"createLinkPackages.js","sources":["../../../../../../src/monorepo/createLinkPackages/createLinkPackages.ts"],"sourcesContent":["import { parsePackageJson } from \"../../packageJson.js\";\nimport { parseMonorepo } from \"../parseMonorepo/parseMonorepo.js\";\nimport path from \"node:path\";\nimport fs from \"node:fs/promises\";\n\ntype CreateLinkPackagesArgs = {\n sourceDir: string;\n};\n\n/**\n * Creates link packages for all SmartBundle-bundled projects in a monorepo\n * A link package is a reference package that points to the bundled output\n */\nexport async function createLinkPackages({\n sourceDir,\n}: CreateLinkPackagesArgs) {\n // Find all SmartBundle-bundled projects in the monorepo\n const { monorepo, projectPaths } = await parseMonorepo({ sourceDir });\n\n if (projectPaths.length === 0) {\n console.log(\"No SmartBundle-bundled projects found in the monorepo\");\n return;\n }\n\n // Create link packages for each SmartBundle-bundled project\n for (const projectPath of projectPaths) {\n const projectDir = path.join(sourceDir, projectPath);\n const projectPackageJsonPath = path.join(projectDir, \"package.json\");\n\n try {\n const projectPackageJson = await parsePackageJson({\n sourceDir: projectDir,\n packagePath: projectPackageJsonPath,\n });\n\n if (Array.isArray(projectPackageJson)) {\n console.error(\n `Failed to parse package.json for ${projectPath}:`,\n projectPackageJson,\n );\n continue;\n }\n\n // Create the link package directory inside the source package\n const linkPackageName = projectPackageJson.name.replace(\n /-sbsources$/,\n \"\",\n );\n const linkPackageDir = path.join(sourceDir, projectPath, \"sb-dist\");\n\n // Ensure the directory exists\n await fs.mkdir(linkPackageDir, { recursive: true });\n\n // Create re-export files for each export entry\n const linkExports: Record<string, string> = {};\n const reexportFiles: string[] = [];\n const reexportDirs = new Set<string>();\n\n if (projectPackageJson.exports) {\n for (const [exportKey, exportPath] of projectPackageJson.exports) {\n // Get the file extension from the source file\n const sourceExt = path.extname(exportPath);\n\n // Create the re-export file path based on the export key\n let reexportFileName: string;\n if (exportKey === \".\") {\n reexportFileName = `index${sourceExt}`;\n } else {\n // Remove \"./\" prefix and add the source extension\n const cleanKey = exportKey.startsWith(\"./\")\n ? exportKey.slice(2)\n : exportKey;\n reexportFileName = `${cleanKey}${sourceExt}`;\n }\n\n const reexportFilePath = path.join(linkPackageDir, reexportFileName);\n\n // Create directory for the re-export file if needed\n const reexportDir = path.dirname(reexportFilePath);\n if (reexportDir !== linkPackageDir) {\n await fs.mkdir(reexportDir, { recursive: true });\n // Track all parent directories\n let currentDir = path.relative(linkPackageDir, reexportDir);\n while (currentDir && currentDir !== \".\") {\n reexportDirs.add(currentDir);\n currentDir = path.dirname(currentDir);\n if (currentDir === \".\") break;\n }\n }\n\n // Create the re-export content\n const importPath =\n exportKey === \".\"\n ? projectPackageJson.name\n : `${projectPackageJson.name}/${exportKey.slice(2)}`;\n\n const reexportContent = `export * from \"${importPath}\";\\n`;\n\n // Write the re-export file\n await fs.writeFile(reexportFilePath, reexportContent);\n\n // Track the file for gitignore\n reexportFiles.push(reexportFileName);\n\n // Add to link package exports\n linkExports[exportKey] = `./${reexportFileName}`;\n }\n }\n\n // Create a package.json for the link package\n const linkPackageJson = {\n name: linkPackageName,\n private: true,\n version: projectPackageJson.version ?? \"0.0.0\",\n type: \"module\" as const,\n description: `Link package for ${projectPackageJson.name}`,\n exports: linkExports,\n // Add a devDependency on the source package to create a wire between source and dist\n devDependencies: {\n [projectPackageJson.name]: \"workspace:*\",\n },\n };\n\n // Write the package.json for the link package\n await fs.writeFile(\n path.join(linkPackageDir, \"package.json\"),\n JSON.stringify(linkPackageJson, null, 2),\n );\n\n console.log(\n `Created link package for ${projectPackageJson.name} at ${linkPackageDir}`,\n );\n } catch (error) {\n console.error(`Error creating link package for ${projectPath}:`, error);\n }\n }\n}\n"],"names":["parseMonorepo","parsePackageJson"],"mappings":";;;;;;AAaA,eAAsB,mBAAmB;AAAA,EACvC;AACF,GAA2B;AAEnB,QAAA,EAAE,UAAU,aAAa,IAAI,MAAMA,cAAc,cAAA,EAAE,WAAW;AAEhE,MAAA,aAAa,WAAW,GAAG;AAC7B,YAAQ,IAAI,uDAAuD;AACnE;AAAA,EAAA;AAIF,aAAW,eAAe,cAAc;AACtC,UAAM,aAAa,KAAK,KAAK,WAAW,WAAW;AACnD,UAAM,yBAAyB,KAAK,KAAK,YAAY,cAAc;AAE/D,QAAA;AACI,YAAA,qBAAqB,MAAMC,6BAAiB;AAAA,QAChD,WAAW;AAAA,QACX,aAAa;AAAA,MAAA,CACd;AAEG,UAAA,MAAM,QAAQ,kBAAkB,GAAG;AAC7B,gBAAA;AAAA,UACN,oCAAoC,WAAW;AAAA,UAC/C;AAAA,QACF;AACA;AAAA,MAAA;AAII,YAAA,kBAAkB,mBAAmB,KAAK;AAAA,QAC9C;AAAA,QACA;AAAA,MACF;AACA,YAAM,iBAAiB,KAAK,KAAK,WAAW,aAAa,SAAS;AAGlE,YAAM,GAAG,MAAM,gBAAgB,EAAE,WAAW,MAAM;AAGlD,YAAM,cAAsC,CAAC;AAC7C,YAAM,gBAA0B,CAAC;AAC3B,YAAA,mCAAmB,IAAY;AAErC,UAAI,mBAAmB,SAAS;AAC9B,mBAAW,CAAC,WAAW,UAAU,KAAK,mBAAmB,SAAS;AAE1D,gBAAA,YAAY,KAAK,QAAQ,UAAU;AAGrC,cAAA;AACJ,cAAI,cAAc,KAAK;AACrB,+BAAmB,QAAQ,SAAS;AAAA,UAAA,OAC/B;AAEC,kBAAA,WAAW,UAAU,WAAW,IAAI,IACtC,UAAU,MAAM,CAAC,IACjB;AACe,+BAAA,GAAG,QAAQ,GAAG,SAAS;AAAA,UAAA;AAG5C,gBAAM,mBAAmB,KAAK,KAAK,gBAAgB,gBAAgB;AAG7D,gBAAA,cAAc,KAAK,QAAQ,gBAAgB;AACjD,cAAI,gBAAgB,gBAAgB;AAClC,kBAAM,GAAG,MAAM,aAAa,EAAE,WAAW,MAAM;AAE/C,gBAAI,aAAa,KAAK,SAAS,gBAAgB,WAAW;AACnD,mBAAA,cAAc,eAAe,KAAK;AACvC,2BAAa,IAAI,UAAU;AACd,2BAAA,KAAK,QAAQ,UAAU;AACpC,kBAAI,eAAe,IAAK;AAAA,YAAA;AAAA,UAC1B;AAIF,gBAAM,aACJ,cAAc,MACV,mBAAmB,OACnB,GAAG,mBAAmB,IAAI,IAAI,UAAU,MAAM,CAAC,CAAC;AAEhD,gBAAA,kBAAkB,kBAAkB,UAAU;AAAA;AAG9C,gBAAA,GAAG,UAAU,kBAAkB,eAAe;AAGpD,wBAAc,KAAK,gBAAgB;AAGvB,sBAAA,SAAS,IAAI,KAAK,gBAAgB;AAAA,QAAA;AAAA,MAChD;AAIF,YAAM,kBAAkB;AAAA,QACtB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS,mBAAmB,WAAW;AAAA,QACvC,MAAM;AAAA,QACN,aAAa,oBAAoB,mBAAmB,IAAI;AAAA,QACxD,SAAS;AAAA;AAAA,QAET,iBAAiB;AAAA,UACf,CAAC,mBAAmB,IAAI,GAAG;AAAA,QAAA;AAAA,MAE/B;AAGA,YAAM,GAAG;AAAA,QACP,KAAK,KAAK,gBAAgB,cAAc;AAAA,QACxC,KAAK,UAAU,iBAAiB,MAAM,CAAC;AAAA,MACzC;AAEQ,cAAA;AAAA,QACN,4BAA4B,mBAAmB,IAAI,OAAO,cAAc;AAAA,MAC1E;AAAA,aACO,OAAO;AACd,cAAQ,MAAM,mCAAmC,WAAW,KAAK,KAAK;AAAA,IAAA;AAAA,EACxE;AAEJ;;"}
|
@@ -44,26 +44,26 @@ declare function createPackageJsonSchema(sourceDir: string): z.ZodEffects<z.ZodO
|
|
44
44
|
babel: z.ZodOptional<z.ZodAny>;
|
45
45
|
peerDependenciesMeta: z.ZodOptional<z.ZodAny>;
|
46
46
|
}, "strip", z.ZodTypeAny, {
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
description?: string;
|
52
|
-
dependencies?: Record<string, string
|
53
|
-
optionalDependencies?: Record<string, string
|
54
|
-
bin?: Map<string, string
|
47
|
+
name: string;
|
48
|
+
version: string;
|
49
|
+
private: boolean;
|
50
|
+
exports?: Map<string, string> | undefined;
|
51
|
+
description?: string | undefined;
|
52
|
+
dependencies?: Record<string, string> | undefined;
|
53
|
+
optionalDependencies?: Record<string, string> | undefined;
|
54
|
+
bin?: Map<string, string> | undefined;
|
55
55
|
repository?: any;
|
56
|
-
keywords?: string[];
|
56
|
+
keywords?: string[] | undefined;
|
57
57
|
author?: any;
|
58
|
-
contributors?: (string | {})[];
|
58
|
+
contributors?: (string | {})[] | undefined;
|
59
59
|
license?: any;
|
60
|
-
devDependencies?: Record<string, string
|
61
|
-
peerDependencies?: Record<string, string
|
62
|
-
engines?: Record<string, string
|
63
|
-
browser?: string | Record<string, string
|
64
|
-
funding?: string | {};
|
65
|
-
os?: string[];
|
66
|
-
cpu?: string[];
|
60
|
+
devDependencies?: Record<string, string> | undefined;
|
61
|
+
peerDependencies?: Record<string, string> | undefined;
|
62
|
+
engines?: Record<string, string> | undefined;
|
63
|
+
browser?: string | Record<string, string> | undefined;
|
64
|
+
funding?: string | {} | undefined;
|
65
|
+
os?: string[] | undefined;
|
66
|
+
cpu?: string[] | undefined;
|
67
67
|
scripts?: any;
|
68
68
|
maintainers?: any;
|
69
69
|
bugs?: any;
|
@@ -73,26 +73,26 @@ declare function createPackageJsonSchema(sourceDir: string): z.ZodEffects<z.ZodO
|
|
73
73
|
babel?: any;
|
74
74
|
peerDependenciesMeta?: any;
|
75
75
|
}, {
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
description?: string;
|
81
|
-
dependencies?: Record<string, string
|
82
|
-
optionalDependencies?: Record<string, string
|
83
|
-
bin?: string | Record<string, string
|
76
|
+
name: string;
|
77
|
+
version: string;
|
78
|
+
private: boolean;
|
79
|
+
exports?: string | Record<string, string> | undefined;
|
80
|
+
description?: string | undefined;
|
81
|
+
dependencies?: Record<string, string> | undefined;
|
82
|
+
optionalDependencies?: Record<string, string> | undefined;
|
83
|
+
bin?: string | Record<string, string> | undefined;
|
84
84
|
repository?: any;
|
85
|
-
keywords?: string[];
|
85
|
+
keywords?: string[] | undefined;
|
86
86
|
author?: any;
|
87
|
-
contributors?: (string | {})[];
|
87
|
+
contributors?: (string | {})[] | undefined;
|
88
88
|
license?: any;
|
89
|
-
devDependencies?: Record<string, string
|
90
|
-
peerDependencies?: Record<string, string
|
91
|
-
engines?: Record<string, string
|
92
|
-
browser?: string | Record<string, string
|
93
|
-
funding?: string | {};
|
94
|
-
os?: string[];
|
95
|
-
cpu?: string[];
|
89
|
+
devDependencies?: Record<string, string> | undefined;
|
90
|
+
peerDependencies?: Record<string, string> | undefined;
|
91
|
+
engines?: Record<string, string> | undefined;
|
92
|
+
browser?: string | Record<string, string> | undefined;
|
93
|
+
funding?: string | {} | undefined;
|
94
|
+
os?: string[] | undefined;
|
95
|
+
cpu?: string[] | undefined;
|
96
96
|
scripts?: any;
|
97
97
|
maintainers?: any;
|
98
98
|
bugs?: any;
|
@@ -102,26 +102,26 @@ declare function createPackageJsonSchema(sourceDir: string): z.ZodEffects<z.ZodO
|
|
102
102
|
babel?: any;
|
103
103
|
peerDependenciesMeta?: any;
|
104
104
|
}>, {
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
description?: string;
|
110
|
-
dependencies?: Record<string, string
|
111
|
-
optionalDependencies?: Record<string, string
|
112
|
-
bin?: Map<string, string
|
105
|
+
name: string;
|
106
|
+
version: string;
|
107
|
+
private: boolean;
|
108
|
+
exports?: Map<string, string> | undefined;
|
109
|
+
description?: string | undefined;
|
110
|
+
dependencies?: Record<string, string> | undefined;
|
111
|
+
optionalDependencies?: Record<string, string> | undefined;
|
112
|
+
bin?: Map<string, string> | undefined;
|
113
113
|
repository?: any;
|
114
|
-
keywords?: string[];
|
114
|
+
keywords?: string[] | undefined;
|
115
115
|
author?: any;
|
116
|
-
contributors?: (string | {})[];
|
116
|
+
contributors?: (string | {})[] | undefined;
|
117
117
|
license?: any;
|
118
|
-
devDependencies?: Record<string, string
|
119
|
-
peerDependencies?: Record<string, string
|
120
|
-
engines?: Record<string, string
|
121
|
-
browser?: string | Record<string, string
|
122
|
-
funding?: string | {};
|
123
|
-
os?: string[];
|
124
|
-
cpu?: string[];
|
118
|
+
devDependencies?: Record<string, string> | undefined;
|
119
|
+
peerDependencies?: Record<string, string> | undefined;
|
120
|
+
engines?: Record<string, string> | undefined;
|
121
|
+
browser?: string | Record<string, string> | undefined;
|
122
|
+
funding?: string | {} | undefined;
|
123
|
+
os?: string[] | undefined;
|
124
|
+
cpu?: string[] | undefined;
|
125
125
|
scripts?: any;
|
126
126
|
maintainers?: any;
|
127
127
|
bugs?: any;
|
@@ -131,26 +131,26 @@ declare function createPackageJsonSchema(sourceDir: string): z.ZodEffects<z.ZodO
|
|
131
131
|
babel?: any;
|
132
132
|
peerDependenciesMeta?: any;
|
133
133
|
}, {
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
description?: string;
|
139
|
-
dependencies?: Record<string, string
|
140
|
-
optionalDependencies?: Record<string, string
|
141
|
-
bin?: string | Record<string, string
|
134
|
+
name: string;
|
135
|
+
version: string;
|
136
|
+
private: boolean;
|
137
|
+
exports?: string | Record<string, string> | undefined;
|
138
|
+
description?: string | undefined;
|
139
|
+
dependencies?: Record<string, string> | undefined;
|
140
|
+
optionalDependencies?: Record<string, string> | undefined;
|
141
|
+
bin?: string | Record<string, string> | undefined;
|
142
142
|
repository?: any;
|
143
|
-
keywords?: string[];
|
143
|
+
keywords?: string[] | undefined;
|
144
144
|
author?: any;
|
145
|
-
contributors?: (string | {})[];
|
145
|
+
contributors?: (string | {})[] | undefined;
|
146
146
|
license?: any;
|
147
|
-
devDependencies?: Record<string, string
|
148
|
-
peerDependencies?: Record<string, string
|
149
|
-
engines?: Record<string, string
|
150
|
-
browser?: string | Record<string, string
|
151
|
-
funding?: string | {};
|
152
|
-
os?: string[];
|
153
|
-
cpu?: string[];
|
147
|
+
devDependencies?: Record<string, string> | undefined;
|
148
|
+
peerDependencies?: Record<string, string> | undefined;
|
149
|
+
engines?: Record<string, string> | undefined;
|
150
|
+
browser?: string | Record<string, string> | undefined;
|
151
|
+
funding?: string | {} | undefined;
|
152
|
+
os?: string[] | undefined;
|
153
|
+
cpu?: string[] | undefined;
|
154
154
|
scripts?: any;
|
155
155
|
maintainers?: any;
|
156
156
|
bugs?: any;
|
@@ -14,7 +14,7 @@ function resolveDirs(args) {
|
|
14
14
|
sourceDir,
|
15
15
|
args.packagePath ?? "./package.json"
|
16
16
|
);
|
17
|
-
const outDir = myResolve(process.cwd(), args.outputDir ?? "./dist");
|
17
|
+
const outDir = myResolve(process.cwd(), args.outputDir ?? "./sb-dist");
|
18
18
|
const esmOutDir = myResolve(outDir, "__compiled__/esm");
|
19
19
|
const cjsOutDir = myResolve(outDir, "__compiled__/cjs");
|
20
20
|
const outBinsDir = myResolve(outDir, "__bin__");
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"resolveDirs.js","sources":["../../../../src/resolveDirs.ts"],"sourcesContent":["import { isAbsolute, join } from \"node:path\";\nimport { type Args } from \"./args.js\";\n\nfunction myResolve(path1: string, path2: string) {\n if (isAbsolute(path2)) {\n return path2;\n }\n\n return join(path1, path2);\n}\n\nexport function resolveDirs(args: Args) {\n const sourceDir = myResolve(process.cwd(), args.sourceDir ?? \".\");\n const packagePath = myResolve(\n sourceDir,\n args.packagePath ?? \"./package.json\",\n );\n const outDir = myResolve(process.cwd(), args.outputDir ?? \"./dist\");\n const esmOutDir = myResolve(outDir, \"__compiled__/esm\");\n const cjsOutDir = myResolve(outDir, \"__compiled__/cjs\");\n const outBinsDir = myResolve(outDir, \"__bin__\");\n\n return { sourceDir, packagePath, outDir, outBinsDir, cjsOutDir, esmOutDir };\n}\n\nexport type Dirs = ReturnType<typeof resolveDirs>;\n"],"names":["isAbsolute","join"],"mappings":";;;;AAGA,SAAS,UAAU,OAAe,OAAe;AAC3C,MAAAA,KAAAA,WAAW,KAAK,GAAG;AACd,WAAA;AAAA,EAAA;AAGF,SAAAC,KAAA,KAAK,OAAO,KAAK;AAC1B;AAEO,SAAS,YAAY,MAAY;AACtC,QAAM,YAAY,UAAU,QAAQ,OAAO,KAAK,aAAa,GAAG;AAChE,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,KAAK,eAAe;AAAA,EACtB;AACA,QAAM,SAAS,UAAU,QAAQ,OAAO,KAAK,aAAa,
|
1
|
+
{"version":3,"file":"resolveDirs.js","sources":["../../../../src/resolveDirs.ts"],"sourcesContent":["import { isAbsolute, join } from \"node:path\";\nimport { type Args } from \"./args.js\";\n\nfunction myResolve(path1: string, path2: string) {\n if (isAbsolute(path2)) {\n return path2;\n }\n\n return join(path1, path2);\n}\n\nexport function resolveDirs(args: Args) {\n const sourceDir = myResolve(process.cwd(), args.sourceDir ?? \".\");\n const packagePath = myResolve(\n sourceDir,\n args.packagePath ?? \"./package.json\",\n );\n const outDir = myResolve(process.cwd(), args.outputDir ?? \"./sb-dist\");\n const esmOutDir = myResolve(outDir, \"__compiled__/esm\");\n const cjsOutDir = myResolve(outDir, \"__compiled__/cjs\");\n const outBinsDir = myResolve(outDir, \"__bin__\");\n\n return { sourceDir, packagePath, outDir, outBinsDir, cjsOutDir, esmOutDir };\n}\n\nexport type Dirs = ReturnType<typeof resolveDirs>;\n"],"names":["isAbsolute","join"],"mappings":";;;;AAGA,SAAS,UAAU,OAAe,OAAe;AAC3C,MAAAA,KAAAA,WAAW,KAAK,GAAG;AACd,WAAA;AAAA,EAAA;AAGF,SAAAC,KAAA,KAAK,OAAO,KAAK;AAC1B;AAEO,SAAS,YAAY,MAAY;AACtC,QAAM,YAAY,UAAU,QAAQ,OAAO,KAAK,aAAa,GAAG;AAChE,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,KAAK,eAAe;AAAA,EACtB;AACA,QAAM,SAAS,UAAU,QAAQ,OAAO,KAAK,aAAa,WAAW;AAC/D,QAAA,YAAY,UAAU,QAAQ,kBAAkB;AAChD,QAAA,YAAY,UAAU,QAAQ,kBAAkB;AAChD,QAAA,aAAa,UAAU,QAAQ,SAAS;AAE9C,SAAO,EAAE,WAAW,aAAa,QAAQ,YAAY,WAAW,UAAU;AAC5E;;"}
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import { type UserConfig } from "vite";
|
1
|
+
import { type UserConfig, type Rollup } from "vite";
|
2
2
|
type ViteTaskParams = {
|
3
3
|
viteConfig: UserConfig;
|
4
4
|
};
|
5
|
-
export declare function viteTask({ viteConfig }: ViteTaskParams): Promise<
|
5
|
+
export declare function viteTask({ viteConfig }: ViteTaskParams): Promise<Rollup.OutputChunk[]>;
|
6
6
|
export {};
|
@@ -1,10 +1,10 @@
|
|
1
1
|
export declare const args: {
|
2
2
|
[x: string]: unknown;
|
3
|
-
sourceDir: string;
|
4
|
-
packagePath: string;
|
5
|
-
outputDir: string;
|
6
|
-
seq: boolean;
|
7
|
-
ci: boolean;
|
3
|
+
sourceDir: string | undefined;
|
4
|
+
packagePath: string | undefined;
|
5
|
+
outputDir: string | undefined;
|
6
|
+
seq: boolean | undefined;
|
7
|
+
ci: boolean | undefined;
|
8
8
|
_: (string | number)[];
|
9
9
|
$0: string;
|
10
10
|
};
|
@@ -12,7 +12,7 @@ const argsSchema = yargs().option("sourceDir", {
|
|
12
12
|
}).option("outputDir", {
|
13
13
|
alias: "o",
|
14
14
|
type: "string",
|
15
|
-
describe: "path to the output directory. Default: cwd()/dist"
|
15
|
+
describe: "path to the output directory. Default: cwd()/sb-dist"
|
16
16
|
}).option("seq", {
|
17
17
|
type: "boolean",
|
18
18
|
describe: "run internal tasks sequentially. It is useful for performance testing and debugging. This option is unstable and not recommended for production use."
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"args.mjs","sources":["../../../../src/args.ts"],"sourcesContent":["import yargs from \"yargs\";\nimport * as process from \"node:process\";\nimport { hideBin } from \"yargs/helpers\";\n\nconst argsSchema = yargs()\n .option(\"sourceDir\", {\n alias: \"s\",\n type: \"string\",\n describe:\n \"path to the project directory. Default: current working directory\",\n })\n .option(\"packagePath\", {\n alias: \"p\",\n type: \"string\",\n describe: \"path to the package.json. Default: cwd()/package.json\",\n })\n .option(\"outputDir\", {\n alias: \"o\",\n type: \"string\",\n describe: \"path to the output directory. Default: cwd()/dist\",\n })\n // Do not cover this option in tests because it is unstable\n .option(\"seq\", {\n type: \"boolean\",\n describe:\n \"run internal tasks sequentially. It is useful for performance testing and debugging. This option is unstable and not recommended for production use.\",\n })\n .option(\"ci\", {\n type: \"boolean\",\n describe: \"run in CI mode\",\n })\n .help(\"help\");\n\nexport const args = argsSchema.parseSync(hideBin(process.argv));\n\ntype OmitUnknown<T> = {\n [K in keyof T as string extends K ? never : K]: T[K];\n};\ntype ConvertUndefinedToOptional<T> = {\n [K in keyof T as undefined extends T[K] ? K : never]?: Exclude<\n T[K],\n undefined\n >;\n} & {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K];\n};\n\nexport type Monorepo = {\n type: \"pnpm\";\n devDeps: Record<string, string>;\n};\n\nexport type Args = ConvertUndefinedToOptional<\n Omit<OmitUnknown<typeof args>, \"_\" | \"$0\">\n> & {\n monorepo?: Monorepo;\n skipGitignore?: boolean;\n};\n"],"names":[],"mappings":";;;AAIA,MAAM,aAAa,MAAA,EAChB,OAAO,aAAa;AAAA,EACnB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UACE;AACJ,CAAC,EACA,OAAO,eAAe;AAAA,EACrB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AACZ,CAAC,EACA,OAAO,aAAa;AAAA,EACnB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AACZ,CAAC,EAEA,OAAO,OAAO;AAAA,EACb,MAAM;AAAA,EACN,UACE;AACJ,CAAC,EACA,OAAO,MAAM;AAAA,EACZ,MAAM;AAAA,EACN,UAAU;AACZ,CAAC,EACA,KAAK,MAAM;AAEP,MAAM,OAAO,WAAW,UAAU,QAAQ,QAAQ,IAAI,CAAC;"}
|
1
|
+
{"version":3,"file":"args.mjs","sources":["../../../../src/args.ts"],"sourcesContent":["import yargs from \"yargs\";\nimport * as process from \"node:process\";\nimport { hideBin } from \"yargs/helpers\";\n\nconst argsSchema = yargs()\n .option(\"sourceDir\", {\n alias: \"s\",\n type: \"string\",\n describe:\n \"path to the project directory. Default: current working directory\",\n })\n .option(\"packagePath\", {\n alias: \"p\",\n type: \"string\",\n describe: \"path to the package.json. Default: cwd()/package.json\",\n })\n .option(\"outputDir\", {\n alias: \"o\",\n type: \"string\",\n describe: \"path to the output directory. Default: cwd()/sb-dist\",\n })\n // Do not cover this option in tests because it is unstable\n .option(\"seq\", {\n type: \"boolean\",\n describe:\n \"run internal tasks sequentially. It is useful for performance testing and debugging. This option is unstable and not recommended for production use.\",\n })\n .option(\"ci\", {\n type: \"boolean\",\n describe: \"run in CI mode\",\n })\n .help(\"help\");\n\nexport const args = argsSchema.parseSync(hideBin(process.argv));\n\ntype OmitUnknown<T> = {\n [K in keyof T as string extends K ? never : K]: T[K];\n};\ntype ConvertUndefinedToOptional<T> = {\n [K in keyof T as undefined extends T[K] ? K : never]?: Exclude<\n T[K],\n undefined\n >;\n} & {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K];\n};\n\nexport type Monorepo = {\n type: \"pnpm\";\n devDeps: Record<string, string>;\n};\n\nexport type Args = ConvertUndefinedToOptional<\n Omit<OmitUnknown<typeof args>, \"_\" | \"$0\">\n> & {\n monorepo?: Monorepo;\n skipGitignore?: boolean;\n};\n"],"names":[],"mappings":";;;AAIA,MAAM,aAAa,MAAA,EAChB,OAAO,aAAa;AAAA,EACnB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UACE;AACJ,CAAC,EACA,OAAO,eAAe;AAAA,EACrB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AACZ,CAAC,EACA,OAAO,aAAa;AAAA,EACnB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AACZ,CAAC,EAEA,OAAO,OAAO;AAAA,EACb,MAAM;AAAA,EACN,UACE;AACJ,CAAC,EACA,OAAO,MAAM;AAAA,EACZ,MAAM;AAAA,EACN,UAAU;AACZ,CAAC,EACA,KAAK,MAAM;AAEP,MAAM,OAAO,WAAW,UAAU,QAAQ,QAAQ,IAAI,CAAC;"}
|
@@ -166,10 +166,6 @@ See https://pnpm.io/settings#dependency-hoisting-settings for more details.`
|
|
166
166
|
{
|
167
167
|
declaration: true,
|
168
168
|
emitDeclarationOnly: true,
|
169
|
-
strict: false,
|
170
|
-
strictNullChecks: false,
|
171
|
-
strictFunctionTypes: false,
|
172
|
-
strictPropertyInitialization: false,
|
173
169
|
skipLibCheck: true,
|
174
170
|
skipDefaultLibCheck: true,
|
175
171
|
outDir: "",
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"detectModules.mjs","sources":["../../../../src/detectModules.ts"],"sourcesContent":["import { type PackageJson } from \"./packageJson.js\";\nimport semver from \"semver\";\nimport { okLog, errorLog, log, lineLog, warnLog } from \"./log.js\";\nimport type { Dirs } from \"./resolveDirs.js\";\nimport type { Monorepo } from \"./args.js\";\n\ntype DetectionResult<T> =\n // We have undefined here is module is not found\n // It is not an error because the user would disable some functionality by not installing deps\n { success: true; module: T | undefined } | { success: false; error: string };\n\ntype ModuleWithVersion<T> = T & { version: string };\n\ntype TSModuleData = {\n ts: typeof import(\"typescript\");\n parsedConfig: import(\"typescript\").ParsedCommandLine;\n host: import(\"typescript\").CompilerHost;\n};\n\ntype BabelModuleData = {\n babel: typeof import(\"@babel/core\");\n};\n\ntype ReactModuleData = {\n transform: \"legacy\" | \"modern\";\n};\n\nexport type TSModule = ModuleWithVersion<TSModuleData>;\nexport type BabelModule = ModuleWithVersion<BabelModuleData>;\nexport type ReactModule = ModuleWithVersion<ReactModuleData>;\n\nexport type DetectedModules = {\n ts?: TSModule;\n babel?: BabelModule;\n react?: ReactModule;\n};\n\nexport type DetectModulesResult =\n | { success: true; modules: DetectedModules }\n | { success: false; errors: string[] };\n\ntype DepType =\n | \"dependencies\"\n | \"devDependencies\"\n | \"peerDependencies\"\n | \"optionalDependencies\";\nexport function getMinVersion(\n packageJson: PackageJson,\n depName: string,\n exclude: DepType[],\n): semver.SemVer | null {\n const allDepKeys = new Set<DepType>([\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n \"optionalDependencies\",\n ]);\n for (const e of exclude) {\n allDepKeys.delete(e);\n }\n\n let minVersion: semver.SemVer | null = null;\n\n for (const depKey of allDepKeys) {\n const depVersion = packageJson[depKey]?.[depName];\n if (depVersion) {\n const version = semver.minVersion(depVersion);\n if (!version) {\n warnLog(\"node-semver cannot parse version of\", depName, \"from\", depKey);\n warnLog(\"Version:\", depVersion);\n continue;\n }\n if (!minVersion) {\n minVersion = version;\n continue;\n }\n if (semver.lt(version, minVersion)) {\n minVersion = version;\n }\n }\n }\n\n return minVersion;\n}\n\nasync function detectBabel(\n packageJson: PackageJson,\n isMonorepoPackage: boolean,\n): Promise<DetectionResult<BabelModule>> {\n const hasBabelInPackage = getMinVersion(packageJson, \"@babel/core\", [\n \"optionalDependencies\",\n ]);\n\n if (isMonorepoPackage && hasBabelInPackage) {\n return {\n success: false,\n error:\n `Babel found in package-level package.json for monorepo package \"${packageJson.name}\".\\n` +\n `In monorepos, build tools like Babel should be defined in the workspace root package.json, not in individual packages.\\n` +\n `Please move \"@babel/core\" from this package's dependencies/devDependencies to the root package.json's devDependencies.`,\n };\n }\n\n if (\"@babel/core\" in (packageJson.optionalDependencies ?? {})) {\n errorLog(\"babel excluded because inside optionalDependencies\");\n return {\n success: false,\n error: \"Babel excluded because it's in optionalDependencies\",\n };\n }\n\n // Check for babel in package deps\n const babelVersion = getMinVersion(packageJson, \"@babel/core\", [\n \"optionalDependencies\",\n ]);\n\n if (!babelVersion) {\n errorLog(\"babel\");\n return { success: true, module: undefined };\n }\n\n try {\n const babel = await import(\"@babel/core\");\n okLog(\"babel, version:\", babel.version);\n return {\n success: true,\n module: {\n babel,\n version: babel.version,\n },\n };\n } catch {\n errorLog(\"babel\");\n return { success: false, error: \"Failed to import @babel/core\" };\n }\n}\n\nasync function detectReact(\n packageJson: PackageJson,\n isMonorepoPackage: boolean,\n): Promise<DetectionResult<ReactModule>> {\n const reactVersionInPackage = getMinVersion(packageJson, \"react\", [\n \"devDependencies\",\n ]);\n\n if (isMonorepoPackage && reactVersionInPackage) {\n return {\n success: false,\n error:\n `React found in package-level package.json for monorepo package \"${packageJson.name}\".\\n` +\n `In monorepos, build tools like React should be defined in the workspace root package.json, not in individual packages.\\n` +\n `Please move \"react\" from this package's dependencies/peerDependencies to the root package.json's dependencies or peerDependencies.`,\n };\n }\n\n const reactVersion = getMinVersion(packageJson, \"react\", [\"devDependencies\"]);\n\n if (reactVersion) {\n const isLegacy = semver.lt(reactVersion, \"17.0.0\");\n const transform = isLegacy ? \"legacy\" : \"modern\";\n okLog(\n `react, min version: ${reactVersion.version}. Transform: ${transform}`,\n );\n return {\n success: true,\n module: {\n transform,\n version: reactVersion.version,\n },\n };\n }\n\n errorLog(\"react\");\n return { success: true, module: undefined };\n}\n\nasync function detectTypescript(\n packageJson: PackageJson,\n dirs: Dirs,\n monorepoType?: \"pnpm\" | null,\n): Promise<DetectionResult<TSModule>> {\n const typescriptVersion = getMinVersion(packageJson, \"typescript\", []);\n\n if (monorepoType != null && typescriptVersion) {\n return {\n success: false,\n error:\n `TypeScript found in package-level package.json for monorepo package \"${packageJson.name}\".\\n` +\n `In monorepos, build tools like TypeScript should be defined in the workspace root package.json, not in individual packages.\\n` +\n `Please move \"typescript\" from this package's dependencies/devDependencies to the root package.json's devDependencies.`,\n };\n }\n\n if (!typescriptVersion) {\n errorLog(\"typescript\");\n return { success: true, module: undefined };\n }\n\n let ts: typeof import(\"typescript\");\n try {\n // ts <=4.3 has no named exports. The all methods are located in the default export\n ts = (await import(\"typescript\")).default;\n } catch {\n if (monorepoType === \"pnpm\") {\n return {\n success: false,\n error:\n 'smartbundle found the .ts entrypoint but required \"typescript\" to build .d.ts files. ' +\n 'Please install the \"typescript\" dependency. ' +\n \"In pnpm workspaces, you may need to either:\\n\" +\n '1. Add \"hoist-workspace-packages=true\" to your pnpm-workspace.yaml file (recommended), or\\n' +\n '2. Add \"public-hoist-pattern[]=[\\\\\"typescript\\\\\"]\" to your pnpm-workspace.yaml file, or\\n' +\n '3. Add \"typescript\" as a devDependency in each package\\'s package.json\\n' +\n \"See https://pnpm.io/settings#dependency-hoisting-settings for more details.\",\n };\n } else {\n return {\n success: false,\n error:\n 'smartbundle found the .ts entrypoint but required \"typescript\" to build .d.ts files. ' +\n 'Please install the \"typescript\" dependency.',\n };\n }\n }\n\n okLog(\"typescript, version:\", ts.version);\n\n const configFilePath = ts.findConfigFile(dirs.sourceDir, ts.sys.fileExists);\n if (!configFilePath) {\n return {\n success: false,\n error:\n \"Cannot find a tsconfig.json file. You should declare it. Please, read the https://github.com/XaveScor/smartbundle/issues/131 for more information\",\n };\n }\n const configFile = ts.readConfigFile(configFilePath, ts.sys.readFile);\n if (configFile.error) {\n const readableError = ts.flattenDiagnosticMessageText(\n configFile.error.messageText,\n \"\\n\",\n );\n return {\n success: false,\n error: `Cannot read tsconfig.json file, error: ${readableError}`,\n };\n }\n const parsedConfig = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n dirs.sourceDir,\n {\n declaration: true,\n emitDeclarationOnly: true,\n strict: false,\n strictNullChecks: false,\n strictFunctionTypes: false,\n strictPropertyInitialization: false,\n skipLibCheck: true,\n skipDefaultLibCheck: true,\n outDir: \"\",\n // https://github.com/XaveScor/bobrik/issues/22#issuecomment-2308552352\n noEmit: false,\n },\n configFilePath,\n );\n\n if (!parsedConfig.options.verbatimModuleSyntax) {\n return {\n success: false,\n error:\n \"verbatimModuleSyntax should be enabled in tsconfig.json. Read https://github.com/XaveScor/smartbundle/issues/131 for more explanation.\\n\" +\n \"You also can upvote the issue if you need the support of verbatimModuleSyntax: false in your library\",\n };\n }\n\n const host = ts.createCompilerHost(parsedConfig.options);\n\n return {\n success: true,\n module: {\n ts,\n parsedConfig,\n host,\n version: ts.version,\n },\n };\n}\n\nexport async function detectModules(\n packageJson: PackageJson,\n dirs: Dirs,\n monorepo?: Monorepo,\n): Promise<DetectModulesResult> {\n if (!monorepo) {\n return detectPackageModules(packageJson, dirs);\n }\n\n // First, check if package has ts/babel (which is wrong in monorepo)\n const packageValidation = await detectPackageModules(\n packageJson,\n dirs,\n monorepo.type,\n );\n\n // Collect validation errors\n const errors: string[] = [];\n if (!packageValidation.success) {\n errors.push(...packageValidation.errors);\n } else {\n if (packageValidation.modules.ts) {\n errors.push(\n `Package \"${packageJson.name}\" has ts/babel in package.json, but it's not allowed in monorepo.`,\n );\n }\n if (packageValidation.modules.babel) {\n errors.push(\n `Package \"${packageJson.name}\" has babel in package.json, but it's not allowed in monorepo.`,\n );\n }\n }\n\n // Create merged package.json with workspace devDeps for ts/babel\n const mergedPackageJson: PackageJson = {\n ...packageJson,\n devDependencies: {\n ...monorepo.devDeps,\n ...packageJson.devDependencies,\n },\n };\n\n // Detect modules with merged package.json (ts/babel from workspace, react from package)\n const result = await detectPackageModules(mergedPackageJson, dirs);\n\n if (!result.success) {\n errors.push(...result.errors);\n }\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return result;\n}\n\nasync function detectPackageModules(\n packageJson: PackageJson,\n dirs: Dirs,\n monorepoType?: \"pnpm\" | null,\n): Promise<DetectModulesResult> {\n log(\"Detecting modules\");\n\n const [tsResult, babelResult, reactResult] = await Promise.all([\n detectTypescript(packageJson, dirs, monorepoType),\n detectBabel(packageJson, monorepoType != null),\n detectReact(packageJson, monorepoType != null),\n ]);\n\n const errors: string[] = [];\n const modules: DetectedModules = {};\n\n if (!tsResult.success) {\n errors.push(tsResult.error);\n } else if (tsResult.module) {\n modules.ts = tsResult.module;\n }\n\n if (!babelResult.success) {\n errors.push(babelResult.error);\n } else if (babelResult.module) {\n modules.babel = babelResult.module;\n }\n\n if (!reactResult.success) {\n errors.push(reactResult.error);\n } else if (reactResult.module) {\n modules.react = reactResult.module;\n }\n\n lineLog();\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return { success: true, modules };\n}\n"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"detectModules.mjs","sources":["../../../../src/detectModules.ts"],"sourcesContent":["import { type PackageJson } from \"./packageJson.js\";\nimport semver from \"semver\";\nimport { okLog, errorLog, log, lineLog, warnLog } from \"./log.js\";\nimport type { Dirs } from \"./resolveDirs.js\";\nimport type { Monorepo } from \"./args.js\";\n\ntype DetectionResult<T> =\n // We have undefined here is module is not found\n // It is not an error because the user would disable some functionality by not installing deps\n { success: true; module: T | undefined } | { success: false; error: string };\n\ntype ModuleWithVersion<T> = T & { version: string };\n\ntype TSModuleData = {\n ts: typeof import(\"typescript\");\n parsedConfig: import(\"typescript\").ParsedCommandLine;\n host: import(\"typescript\").CompilerHost;\n};\n\ntype BabelModuleData = {\n babel: typeof import(\"@babel/core\");\n};\n\ntype ReactModuleData = {\n transform: \"legacy\" | \"modern\";\n};\n\nexport type TSModule = ModuleWithVersion<TSModuleData>;\nexport type BabelModule = ModuleWithVersion<BabelModuleData>;\nexport type ReactModule = ModuleWithVersion<ReactModuleData>;\n\nexport type DetectedModules = {\n ts?: TSModule;\n babel?: BabelModule;\n react?: ReactModule;\n};\n\nexport type DetectModulesResult =\n | { success: true; modules: DetectedModules }\n | { success: false; errors: string[] };\n\ntype DepType =\n | \"dependencies\"\n | \"devDependencies\"\n | \"peerDependencies\"\n | \"optionalDependencies\";\nexport function getMinVersion(\n packageJson: PackageJson,\n depName: string,\n exclude: DepType[],\n): semver.SemVer | null {\n const allDepKeys = new Set<DepType>([\n \"dependencies\",\n \"devDependencies\",\n \"peerDependencies\",\n \"optionalDependencies\",\n ]);\n for (const e of exclude) {\n allDepKeys.delete(e);\n }\n\n let minVersion: semver.SemVer | null = null;\n\n for (const depKey of allDepKeys) {\n const depVersion = packageJson[depKey]?.[depName];\n if (depVersion) {\n const version = semver.minVersion(depVersion);\n if (!version) {\n warnLog(\"node-semver cannot parse version of\", depName, \"from\", depKey);\n warnLog(\"Version:\", depVersion);\n continue;\n }\n if (!minVersion) {\n minVersion = version;\n continue;\n }\n if (semver.lt(version, minVersion)) {\n minVersion = version;\n }\n }\n }\n\n return minVersion;\n}\n\nasync function detectBabel(\n packageJson: PackageJson,\n isMonorepoPackage: boolean,\n): Promise<DetectionResult<BabelModule>> {\n const hasBabelInPackage = getMinVersion(packageJson, \"@babel/core\", [\n \"optionalDependencies\",\n ]);\n\n if (isMonorepoPackage && hasBabelInPackage) {\n return {\n success: false,\n error:\n `Babel found in package-level package.json for monorepo package \"${packageJson.name}\".\\n` +\n `In monorepos, build tools like Babel should be defined in the workspace root package.json, not in individual packages.\\n` +\n `Please move \"@babel/core\" from this package's dependencies/devDependencies to the root package.json's devDependencies.`,\n };\n }\n\n if (\"@babel/core\" in (packageJson.optionalDependencies ?? {})) {\n errorLog(\"babel excluded because inside optionalDependencies\");\n return {\n success: false,\n error: \"Babel excluded because it's in optionalDependencies\",\n };\n }\n\n // Check for babel in package deps\n const babelVersion = getMinVersion(packageJson, \"@babel/core\", [\n \"optionalDependencies\",\n ]);\n\n if (!babelVersion) {\n errorLog(\"babel\");\n return { success: true, module: undefined };\n }\n\n try {\n const babel = await import(\"@babel/core\");\n okLog(\"babel, version:\", babel.version);\n return {\n success: true,\n module: {\n babel,\n version: babel.version,\n },\n };\n } catch {\n errorLog(\"babel\");\n return { success: false, error: \"Failed to import @babel/core\" };\n }\n}\n\nasync function detectReact(\n packageJson: PackageJson,\n isMonorepoPackage: boolean,\n): Promise<DetectionResult<ReactModule>> {\n const reactVersionInPackage = getMinVersion(packageJson, \"react\", [\n \"devDependencies\",\n ]);\n\n if (isMonorepoPackage && reactVersionInPackage) {\n return {\n success: false,\n error:\n `React found in package-level package.json for monorepo package \"${packageJson.name}\".\\n` +\n `In monorepos, build tools like React should be defined in the workspace root package.json, not in individual packages.\\n` +\n `Please move \"react\" from this package's dependencies/peerDependencies to the root package.json's dependencies or peerDependencies.`,\n };\n }\n\n const reactVersion = getMinVersion(packageJson, \"react\", [\"devDependencies\"]);\n\n if (reactVersion) {\n const isLegacy = semver.lt(reactVersion, \"17.0.0\");\n const transform = isLegacy ? \"legacy\" : \"modern\";\n okLog(\n `react, min version: ${reactVersion.version}. Transform: ${transform}`,\n );\n return {\n success: true,\n module: {\n transform,\n version: reactVersion.version,\n },\n };\n }\n\n errorLog(\"react\");\n return { success: true, module: undefined };\n}\n\nasync function detectTypescript(\n packageJson: PackageJson,\n dirs: Dirs,\n monorepoType?: \"pnpm\" | null,\n): Promise<DetectionResult<TSModule>> {\n const typescriptVersion = getMinVersion(packageJson, \"typescript\", []);\n\n if (monorepoType != null && typescriptVersion) {\n return {\n success: false,\n error:\n `TypeScript found in package-level package.json for monorepo package \"${packageJson.name}\".\\n` +\n `In monorepos, build tools like TypeScript should be defined in the workspace root package.json, not in individual packages.\\n` +\n `Please move \"typescript\" from this package's dependencies/devDependencies to the root package.json's devDependencies.`,\n };\n }\n\n if (!typescriptVersion) {\n errorLog(\"typescript\");\n return { success: true, module: undefined };\n }\n\n let ts: typeof import(\"typescript\");\n try {\n // ts <=4.3 has no named exports. The all methods are located in the default export\n ts = (await import(\"typescript\")).default;\n } catch {\n if (monorepoType === \"pnpm\") {\n return {\n success: false,\n error:\n 'smartbundle found the .ts entrypoint but required \"typescript\" to build .d.ts files. ' +\n 'Please install the \"typescript\" dependency. ' +\n \"In pnpm workspaces, you may need to either:\\n\" +\n '1. Add \"hoist-workspace-packages=true\" to your pnpm-workspace.yaml file (recommended), or\\n' +\n '2. Add \"public-hoist-pattern[]=[\\\\\"typescript\\\\\"]\" to your pnpm-workspace.yaml file, or\\n' +\n '3. Add \"typescript\" as a devDependency in each package\\'s package.json\\n' +\n \"See https://pnpm.io/settings#dependency-hoisting-settings for more details.\",\n };\n } else {\n return {\n success: false,\n error:\n 'smartbundle found the .ts entrypoint but required \"typescript\" to build .d.ts files. ' +\n 'Please install the \"typescript\" dependency.',\n };\n }\n }\n\n okLog(\"typescript, version:\", ts.version);\n\n const configFilePath = ts.findConfigFile(dirs.sourceDir, ts.sys.fileExists);\n if (!configFilePath) {\n return {\n success: false,\n error:\n \"Cannot find a tsconfig.json file. You should declare it. Please, read the https://github.com/XaveScor/smartbundle/issues/131 for more information\",\n };\n }\n const configFile = ts.readConfigFile(configFilePath, ts.sys.readFile);\n if (configFile.error) {\n const readableError = ts.flattenDiagnosticMessageText(\n configFile.error.messageText,\n \"\\n\",\n );\n return {\n success: false,\n error: `Cannot read tsconfig.json file, error: ${readableError}`,\n };\n }\n const parsedConfig = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n dirs.sourceDir,\n {\n declaration: true,\n emitDeclarationOnly: true,\n skipLibCheck: true,\n skipDefaultLibCheck: true,\n outDir: \"\",\n // https://github.com/XaveScor/bobrik/issues/22#issuecomment-2308552352\n noEmit: false,\n },\n configFilePath,\n );\n\n if (!parsedConfig.options.verbatimModuleSyntax) {\n return {\n success: false,\n error:\n \"verbatimModuleSyntax should be enabled in tsconfig.json. Read https://github.com/XaveScor/smartbundle/issues/131 for more explanation.\\n\" +\n \"You also can upvote the issue if you need the support of verbatimModuleSyntax: false in your library\",\n };\n }\n\n const host = ts.createCompilerHost(parsedConfig.options);\n\n return {\n success: true,\n module: {\n ts,\n parsedConfig,\n host,\n version: ts.version,\n },\n };\n}\n\nexport async function detectModules(\n packageJson: PackageJson,\n dirs: Dirs,\n monorepo?: Monorepo,\n): Promise<DetectModulesResult> {\n if (!monorepo) {\n return detectPackageModules(packageJson, dirs);\n }\n\n // First, check if package has ts/babel (which is wrong in monorepo)\n const packageValidation = await detectPackageModules(\n packageJson,\n dirs,\n monorepo.type,\n );\n\n // Collect validation errors\n const errors: string[] = [];\n if (!packageValidation.success) {\n errors.push(...packageValidation.errors);\n } else {\n if (packageValidation.modules.ts) {\n errors.push(\n `Package \"${packageJson.name}\" has ts/babel in package.json, but it's not allowed in monorepo.`,\n );\n }\n if (packageValidation.modules.babel) {\n errors.push(\n `Package \"${packageJson.name}\" has babel in package.json, but it's not allowed in monorepo.`,\n );\n }\n }\n\n // Create merged package.json with workspace devDeps for ts/babel\n const mergedPackageJson: PackageJson = {\n ...packageJson,\n devDependencies: {\n ...monorepo.devDeps,\n ...packageJson.devDependencies,\n },\n };\n\n // Detect modules with merged package.json (ts/babel from workspace, react from package)\n const result = await detectPackageModules(mergedPackageJson, dirs);\n\n if (!result.success) {\n errors.push(...result.errors);\n }\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return result;\n}\n\nasync function detectPackageModules(\n packageJson: PackageJson,\n dirs: Dirs,\n monorepoType?: \"pnpm\" | null,\n): Promise<DetectModulesResult> {\n log(\"Detecting modules\");\n\n const [tsResult, babelResult, reactResult] = await Promise.all([\n detectTypescript(packageJson, dirs, monorepoType),\n detectBabel(packageJson, monorepoType != null),\n detectReact(packageJson, monorepoType != null),\n ]);\n\n const errors: string[] = [];\n const modules: DetectedModules = {};\n\n if (!tsResult.success) {\n errors.push(tsResult.error);\n } else if (tsResult.module) {\n modules.ts = tsResult.module;\n }\n\n if (!babelResult.success) {\n errors.push(babelResult.error);\n } else if (babelResult.module) {\n modules.babel = babelResult.module;\n }\n\n if (!reactResult.success) {\n errors.push(reactResult.error);\n } else if (reactResult.module) {\n modules.react = reactResult.module;\n }\n\n lineLog();\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return { success: true, modules };\n}\n"],"names":[],"mappings":"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"}
|
@@ -2,7 +2,7 @@ import { type Args } from "./args.js";
|
|
2
2
|
import { PrettyError } from "./PrettyErrors.js";
|
3
3
|
export declare function defineViteConfig(args?: Args): Promise<import("vite").UserConfig | {
|
4
4
|
error: boolean;
|
5
|
-
errors:
|
5
|
+
errors: string[];
|
6
6
|
}>;
|
7
7
|
type RunResult = {
|
8
8
|
error: false;
|
@@ -31,7 +31,7 @@ async function buildMonorepo(args) {
|
|
31
31
|
...args,
|
32
32
|
sourceDir: packageSourceDir,
|
33
33
|
packagePath: join(packageSourceDir, "package.json"),
|
34
|
-
outputDir: join(packageSourceDir, "dist"),
|
34
|
+
outputDir: join(packageSourceDir, "sb-dist"),
|
35
35
|
monorepo
|
36
36
|
};
|
37
37
|
const buildResult = await run(packageArgs);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"buildAll.mjs","sources":["../../../../../src/monorepo/buildAll.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport { parseMonorepo } from \"./parseMonorepo/parseMonorepo.js\";\nimport { run } from \"../index.js\";\nimport { type Args } from \"../args.js\";\nimport { log, lineLog } from \"../log.js\";\nimport { PrettyError } from \"../PrettyErrors.js\";\n\nexport type MonorepoBuildResult = {\n totalPackages: number;\n successfulBuilds: number;\n failedBuilds: number;\n errors: Array<{ packagePath: string; errors: Array<string | PrettyError> }>;\n};\n\nexport async function buildMonorepo(args: Args): Promise<MonorepoBuildResult> {\n const sourceDir = args.sourceDir || process.cwd();\n\n // Use existing monorepo detection\n const { monorepo, projectPaths } = await parseMonorepo({ sourceDir });\n\n if (!monorepo) {\n throw new PrettyError(\"Not a monorepo - pnpm-workspace.yaml not found\");\n }\n\n if (projectPaths.length === 0) {\n throw new PrettyError(\n \"No packages with -sbsources suffix found in monorepo\",\n );\n }\n\n log(`Found ${projectPaths.length} packages to build in monorepo`);\n lineLog();\n\n const result: MonorepoBuildResult = {\n totalPackages: projectPaths.length,\n successfulBuilds: 0,\n failedBuilds: 0,\n errors: [],\n };\n\n // Build each package sequentially for now\n // TODO: Add dependency analysis and parallel builds\n for (let i = 0; i < projectPaths.length; i++) {\n const packagePath = projectPaths[i];\n const packageSourceDir = join(sourceDir, packagePath);\n\n log(`[${i + 1}/${projectPaths.length}] Building ${packagePath}...`);\n\n // Create args for this specific package\n const packageArgs: Args = {\n ...args,\n sourceDir: packageSourceDir,\n packagePath: join(packageSourceDir, \"package.json\"),\n outputDir: join(packageSourceDir, \"dist\"),\n monorepo,\n };\n\n // Reuse existing run logic\n const buildResult = await run(packageArgs);\n\n if (buildResult.error) {\n result.failedBuilds++;\n result.errors.push({\n packagePath,\n errors: buildResult.errors,\n });\n log(\n `[${i + 1}/${projectPaths.length}] ❌ Failed to build ${packagePath}`,\n );\n } else {\n result.successfulBuilds++;\n log(`[${i + 1}/${projectPaths.length}] ✅ Built ${packagePath}`);\n }\n\n lineLog();\n }\n\n // Summary\n log(`Monorepo build completed:`);\n log(` Total packages: ${result.totalPackages}`);\n log(` Successful: ${result.successfulBuilds}`);\n log(` Failed: ${result.failedBuilds}`);\n\n return result;\n}\n"],"names":[],"mappings":";;;;;;AAcA,eAAsB,cAAc,MAA0C;AAC5E,QAAM,YAAY,KAAK,aAAa,QAAQ,IAAI;AAG1C,QAAA,EAAE,UAAU,aAAa,IAAI,MAAM,cAAc,EAAE,WAAW;AAEpE,MAAI,CAAC,UAAU;AACP,UAAA,IAAI,YAAY,gDAAgD;AAAA,EAAA;AAGpE,MAAA,aAAa,WAAW,GAAG;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EAAA;AAGE,MAAA,SAAS,aAAa,MAAM,gCAAgC;AACxD,UAAA;AAER,QAAM,SAA8B;AAAA,IAClC,eAAe,aAAa;AAAA,IAC5B,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,QAAQ,CAAA;AAAA,EACV;AAIA,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AACtC,UAAA,cAAc,aAAa,CAAC;AAC5B,UAAA,mBAAmB,KAAK,WAAW,WAAW;AAEhD,QAAA,IAAI,IAAI,CAAC,IAAI,aAAa,MAAM,cAAc,WAAW,KAAK;AAGlE,UAAM,cAAoB;AAAA,MACxB,GAAG;AAAA,MACH,WAAW;AAAA,MACX,aAAa,KAAK,kBAAkB,cAAc;AAAA,MAClD,WAAW,KAAK,kBAAkB,
|
1
|
+
{"version":3,"file":"buildAll.mjs","sources":["../../../../../src/monorepo/buildAll.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport { parseMonorepo } from \"./parseMonorepo/parseMonorepo.js\";\nimport { run } from \"../index.js\";\nimport { type Args } from \"../args.js\";\nimport { log, lineLog } from \"../log.js\";\nimport { PrettyError } from \"../PrettyErrors.js\";\n\nexport type MonorepoBuildResult = {\n totalPackages: number;\n successfulBuilds: number;\n failedBuilds: number;\n errors: Array<{ packagePath: string; errors: Array<string | PrettyError> }>;\n};\n\nexport async function buildMonorepo(args: Args): Promise<MonorepoBuildResult> {\n const sourceDir = args.sourceDir || process.cwd();\n\n // Use existing monorepo detection\n const { monorepo, projectPaths } = await parseMonorepo({ sourceDir });\n\n if (!monorepo) {\n throw new PrettyError(\"Not a monorepo - pnpm-workspace.yaml not found\");\n }\n\n if (projectPaths.length === 0) {\n throw new PrettyError(\n \"No packages with -sbsources suffix found in monorepo\",\n );\n }\n\n log(`Found ${projectPaths.length} packages to build in monorepo`);\n lineLog();\n\n const result: MonorepoBuildResult = {\n totalPackages: projectPaths.length,\n successfulBuilds: 0,\n failedBuilds: 0,\n errors: [],\n };\n\n // Build each package sequentially for now\n // TODO: Add dependency analysis and parallel builds\n for (let i = 0; i < projectPaths.length; i++) {\n const packagePath = projectPaths[i];\n const packageSourceDir = join(sourceDir, packagePath);\n\n log(`[${i + 1}/${projectPaths.length}] Building ${packagePath}...`);\n\n // Create args for this specific package\n const packageArgs: Args = {\n ...args,\n sourceDir: packageSourceDir,\n packagePath: join(packageSourceDir, \"package.json\"),\n outputDir: join(packageSourceDir, \"sb-dist\"),\n monorepo,\n };\n\n // Reuse existing run logic\n const buildResult = await run(packageArgs);\n\n if (buildResult.error) {\n result.failedBuilds++;\n result.errors.push({\n packagePath,\n errors: buildResult.errors,\n });\n log(\n `[${i + 1}/${projectPaths.length}] ❌ Failed to build ${packagePath}`,\n );\n } else {\n result.successfulBuilds++;\n log(`[${i + 1}/${projectPaths.length}] ✅ Built ${packagePath}`);\n }\n\n lineLog();\n }\n\n // Summary\n log(`Monorepo build completed:`);\n log(` Total packages: ${result.totalPackages}`);\n log(` Successful: ${result.successfulBuilds}`);\n log(` Failed: ${result.failedBuilds}`);\n\n return result;\n}\n"],"names":[],"mappings":";;;;;;AAcA,eAAsB,cAAc,MAA0C;AAC5E,QAAM,YAAY,KAAK,aAAa,QAAQ,IAAI;AAG1C,QAAA,EAAE,UAAU,aAAa,IAAI,MAAM,cAAc,EAAE,WAAW;AAEpE,MAAI,CAAC,UAAU;AACP,UAAA,IAAI,YAAY,gDAAgD;AAAA,EAAA;AAGpE,MAAA,aAAa,WAAW,GAAG;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EAAA;AAGE,MAAA,SAAS,aAAa,MAAM,gCAAgC;AACxD,UAAA;AAER,QAAM,SAA8B;AAAA,IAClC,eAAe,aAAa;AAAA,IAC5B,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,QAAQ,CAAA;AAAA,EACV;AAIA,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AACtC,UAAA,cAAc,aAAa,CAAC;AAC5B,UAAA,mBAAmB,KAAK,WAAW,WAAW;AAEhD,QAAA,IAAI,IAAI,CAAC,IAAI,aAAa,MAAM,cAAc,WAAW,KAAK;AAGlE,UAAM,cAAoB;AAAA,MACxB,GAAG;AAAA,MACH,WAAW;AAAA,MACX,aAAa,KAAK,kBAAkB,cAAc;AAAA,MAClD,WAAW,KAAK,kBAAkB,SAAS;AAAA,MAC3C;AAAA,IACF;AAGM,UAAA,cAAc,MAAM,IAAI,WAAW;AAEzC,QAAI,YAAY,OAAO;AACd,aAAA;AACP,aAAO,OAAO,KAAK;AAAA,QACjB;AAAA,QACA,QAAQ,YAAY;AAAA,MAAA,CACrB;AACD;AAAA,QACE,IAAI,IAAI,CAAC,IAAI,aAAa,MAAM,uBAAuB,WAAW;AAAA,MACpE;AAAA,IAAA,OACK;AACE,aAAA;AACH,UAAA,IAAI,IAAI,CAAC,IAAI,aAAa,MAAM,aAAa,WAAW,EAAE;AAAA,IAAA;AAGxD,YAAA;AAAA,EAAA;AAIV,MAAI,2BAA2B;AAC3B,MAAA,qBAAqB,OAAO,aAAa,EAAE;AAC3C,MAAA,iBAAiB,OAAO,gBAAgB,EAAE;AAC1C,MAAA,aAAa,OAAO,YAAY,EAAE;AAE/B,SAAA;AACT;"}
|
@@ -1,25 +1,25 @@
|
|
1
1
|
import type { PackageJson } from "../packageJson.js";
|
2
2
|
export declare function convertPackageJson(packageJson: PackageJson): {
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
description?: string;
|
8
|
-
dependencies?: Record<string, string
|
9
|
-
optionalDependencies?: Record<string, string
|
10
|
-
bin?: Map<string, string
|
3
|
+
name: string;
|
4
|
+
version: string;
|
5
|
+
private: boolean;
|
6
|
+
exports?: Map<string, string> | undefined;
|
7
|
+
description?: string | undefined;
|
8
|
+
dependencies?: Record<string, string> | undefined;
|
9
|
+
optionalDependencies?: Record<string, string> | undefined;
|
10
|
+
bin?: Map<string, string> | undefined;
|
11
11
|
repository?: any;
|
12
|
-
keywords?: string[];
|
12
|
+
keywords?: string[] | undefined;
|
13
13
|
author?: any;
|
14
|
-
contributors?: (string | {})[];
|
14
|
+
contributors?: (string | {})[] | undefined;
|
15
15
|
license?: any;
|
16
|
-
devDependencies?: Record<string, string
|
17
|
-
peerDependencies?: Record<string, string
|
18
|
-
engines?: Record<string, string
|
19
|
-
browser?: string | Record<string, string
|
20
|
-
funding?: string | {};
|
21
|
-
os?: string[];
|
22
|
-
cpu?: string[];
|
16
|
+
devDependencies?: Record<string, string> | undefined;
|
17
|
+
peerDependencies?: Record<string, string> | undefined;
|
18
|
+
engines?: Record<string, string> | undefined;
|
19
|
+
browser?: string | Record<string, string> | undefined;
|
20
|
+
funding?: string | {} | undefined;
|
21
|
+
os?: string[] | undefined;
|
22
|
+
cpu?: string[] | undefined;
|
23
23
|
scripts?: any;
|
24
24
|
maintainers?: any;
|
25
25
|
bugs?: any;
|
@@ -5,7 +5,7 @@ import fs__default from "node:fs/promises";
|
|
5
5
|
async function createLinkPackages({
|
6
6
|
sourceDir
|
7
7
|
}) {
|
8
|
-
const {
|
8
|
+
const { monorepo, projectPaths } = await parseMonorepo({ sourceDir });
|
9
9
|
if (projectPaths.length === 0) {
|
10
10
|
console.log("No SmartBundle-bundled projects found in the monorepo");
|
11
11
|
return;
|
@@ -29,7 +29,7 @@ async function createLinkPackages({
|
|
29
29
|
/-sbsources$/,
|
30
30
|
""
|
31
31
|
);
|
32
|
-
const linkPackageDir = path__default.join(sourceDir, projectPath, "dist");
|
32
|
+
const linkPackageDir = path__default.join(sourceDir, projectPath, "sb-dist");
|
33
33
|
await fs__default.mkdir(linkPackageDir, { recursive: true });
|
34
34
|
const linkExports = {};
|
35
35
|
const reexportFiles = [];
|
@@ -65,6 +65,7 @@ async function createLinkPackages({
|
|
65
65
|
}
|
66
66
|
const linkPackageJson = {
|
67
67
|
name: linkPackageName,
|
68
|
+
private: true,
|
68
69
|
version: projectPackageJson.version ?? "0.0.0",
|
69
70
|
type: "module",
|
70
71
|
description: `Link package for ${projectPackageJson.name}`,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"createLinkPackages.mjs","sources":["../../../../../../src/monorepo/createLinkPackages/createLinkPackages.ts"],"sourcesContent":["import { parsePackageJson } from \"../../packageJson.js\";\nimport { parseMonorepo } from \"../parseMonorepo/parseMonorepo.js\";\nimport path from \"node:path\";\nimport fs from \"node:fs/promises\";\n\ntype CreateLinkPackagesArgs = {\n sourceDir: string;\n};\n\n/**\n * Creates link packages for all SmartBundle-bundled projects in a monorepo\n * A link package is a reference package that points to the bundled output\n */\nexport async function createLinkPackages({\n sourceDir,\n}: CreateLinkPackagesArgs) {\n // Find all SmartBundle-bundled projects in the monorepo\n const {
|
1
|
+
{"version":3,"file":"createLinkPackages.mjs","sources":["../../../../../../src/monorepo/createLinkPackages/createLinkPackages.ts"],"sourcesContent":["import { parsePackageJson } from \"../../packageJson.js\";\nimport { parseMonorepo } from \"../parseMonorepo/parseMonorepo.js\";\nimport path from \"node:path\";\nimport fs from \"node:fs/promises\";\n\ntype CreateLinkPackagesArgs = {\n sourceDir: string;\n};\n\n/**\n * Creates link packages for all SmartBundle-bundled projects in a monorepo\n * A link package is a reference package that points to the bundled output\n */\nexport async function createLinkPackages({\n sourceDir,\n}: CreateLinkPackagesArgs) {\n // Find all SmartBundle-bundled projects in the monorepo\n const { monorepo, projectPaths } = await parseMonorepo({ sourceDir });\n\n if (projectPaths.length === 0) {\n console.log(\"No SmartBundle-bundled projects found in the monorepo\");\n return;\n }\n\n // Create link packages for each SmartBundle-bundled project\n for (const projectPath of projectPaths) {\n const projectDir = path.join(sourceDir, projectPath);\n const projectPackageJsonPath = path.join(projectDir, \"package.json\");\n\n try {\n const projectPackageJson = await parsePackageJson({\n sourceDir: projectDir,\n packagePath: projectPackageJsonPath,\n });\n\n if (Array.isArray(projectPackageJson)) {\n console.error(\n `Failed to parse package.json for ${projectPath}:`,\n projectPackageJson,\n );\n continue;\n }\n\n // Create the link package directory inside the source package\n const linkPackageName = projectPackageJson.name.replace(\n /-sbsources$/,\n \"\",\n );\n const linkPackageDir = path.join(sourceDir, projectPath, \"sb-dist\");\n\n // Ensure the directory exists\n await fs.mkdir(linkPackageDir, { recursive: true });\n\n // Create re-export files for each export entry\n const linkExports: Record<string, string> = {};\n const reexportFiles: string[] = [];\n const reexportDirs = new Set<string>();\n\n if (projectPackageJson.exports) {\n for (const [exportKey, exportPath] of projectPackageJson.exports) {\n // Get the file extension from the source file\n const sourceExt = path.extname(exportPath);\n\n // Create the re-export file path based on the export key\n let reexportFileName: string;\n if (exportKey === \".\") {\n reexportFileName = `index${sourceExt}`;\n } else {\n // Remove \"./\" prefix and add the source extension\n const cleanKey = exportKey.startsWith(\"./\")\n ? exportKey.slice(2)\n : exportKey;\n reexportFileName = `${cleanKey}${sourceExt}`;\n }\n\n const reexportFilePath = path.join(linkPackageDir, reexportFileName);\n\n // Create directory for the re-export file if needed\n const reexportDir = path.dirname(reexportFilePath);\n if (reexportDir !== linkPackageDir) {\n await fs.mkdir(reexportDir, { recursive: true });\n // Track all parent directories\n let currentDir = path.relative(linkPackageDir, reexportDir);\n while (currentDir && currentDir !== \".\") {\n reexportDirs.add(currentDir);\n currentDir = path.dirname(currentDir);\n if (currentDir === \".\") break;\n }\n }\n\n // Create the re-export content\n const importPath =\n exportKey === \".\"\n ? projectPackageJson.name\n : `${projectPackageJson.name}/${exportKey.slice(2)}`;\n\n const reexportContent = `export * from \"${importPath}\";\\n`;\n\n // Write the re-export file\n await fs.writeFile(reexportFilePath, reexportContent);\n\n // Track the file for gitignore\n reexportFiles.push(reexportFileName);\n\n // Add to link package exports\n linkExports[exportKey] = `./${reexportFileName}`;\n }\n }\n\n // Create a package.json for the link package\n const linkPackageJson = {\n name: linkPackageName,\n private: true,\n version: projectPackageJson.version ?? \"0.0.0\",\n type: \"module\" as const,\n description: `Link package for ${projectPackageJson.name}`,\n exports: linkExports,\n // Add a devDependency on the source package to create a wire between source and dist\n devDependencies: {\n [projectPackageJson.name]: \"workspace:*\",\n },\n };\n\n // Write the package.json for the link package\n await fs.writeFile(\n path.join(linkPackageDir, \"package.json\"),\n JSON.stringify(linkPackageJson, null, 2),\n );\n\n console.log(\n `Created link package for ${projectPackageJson.name} at ${linkPackageDir}`,\n );\n } catch (error) {\n console.error(`Error creating link package for ${projectPath}:`, error);\n }\n }\n}\n"],"names":["path","fs"],"mappings":";;;;AAaA,eAAsB,mBAAmB;AAAA,EACvC;AACF,GAA2B;AAEnB,QAAA,EAAE,UAAU,aAAa,IAAI,MAAM,cAAc,EAAE,WAAW;AAEhE,MAAA,aAAa,WAAW,GAAG;AAC7B,YAAQ,IAAI,uDAAuD;AACnE;AAAA,EAAA;AAIF,aAAW,eAAe,cAAc;AACtC,UAAM,aAAaA,cAAK,KAAK,WAAW,WAAW;AACnD,UAAM,yBAAyBA,cAAK,KAAK,YAAY,cAAc;AAE/D,QAAA;AACI,YAAA,qBAAqB,MAAM,iBAAiB;AAAA,QAChD,WAAW;AAAA,QACX,aAAa;AAAA,MAAA,CACd;AAEG,UAAA,MAAM,QAAQ,kBAAkB,GAAG;AAC7B,gBAAA;AAAA,UACN,oCAAoC,WAAW;AAAA,UAC/C;AAAA,QACF;AACA;AAAA,MAAA;AAII,YAAA,kBAAkB,mBAAmB,KAAK;AAAA,QAC9C;AAAA,QACA;AAAA,MACF;AACA,YAAM,iBAAiBA,cAAK,KAAK,WAAW,aAAa,SAAS;AAGlE,YAAMC,YAAG,MAAM,gBAAgB,EAAE,WAAW,MAAM;AAGlD,YAAM,cAAsC,CAAC;AAC7C,YAAM,gBAA0B,CAAC;AAC3B,YAAA,mCAAmB,IAAY;AAErC,UAAI,mBAAmB,SAAS;AAC9B,mBAAW,CAAC,WAAW,UAAU,KAAK,mBAAmB,SAAS;AAE1D,gBAAA,YAAYD,cAAK,QAAQ,UAAU;AAGrC,cAAA;AACJ,cAAI,cAAc,KAAK;AACrB,+BAAmB,QAAQ,SAAS;AAAA,UAAA,OAC/B;AAEC,kBAAA,WAAW,UAAU,WAAW,IAAI,IACtC,UAAU,MAAM,CAAC,IACjB;AACe,+BAAA,GAAG,QAAQ,GAAG,SAAS;AAAA,UAAA;AAG5C,gBAAM,mBAAmBA,cAAK,KAAK,gBAAgB,gBAAgB;AAG7D,gBAAA,cAAcA,cAAK,QAAQ,gBAAgB;AACjD,cAAI,gBAAgB,gBAAgB;AAClC,kBAAMC,YAAG,MAAM,aAAa,EAAE,WAAW,MAAM;AAE/C,gBAAI,aAAaD,cAAK,SAAS,gBAAgB,WAAW;AACnD,mBAAA,cAAc,eAAe,KAAK;AACvC,2BAAa,IAAI,UAAU;AACd,2BAAAA,cAAK,QAAQ,UAAU;AACpC,kBAAI,eAAe,IAAK;AAAA,YAAA;AAAA,UAC1B;AAIF,gBAAM,aACJ,cAAc,MACV,mBAAmB,OACnB,GAAG,mBAAmB,IAAI,IAAI,UAAU,MAAM,CAAC,CAAC;AAEhD,gBAAA,kBAAkB,kBAAkB,UAAU;AAAA;AAG9C,gBAAAC,YAAG,UAAU,kBAAkB,eAAe;AAGpD,wBAAc,KAAK,gBAAgB;AAGvB,sBAAA,SAAS,IAAI,KAAK,gBAAgB;AAAA,QAAA;AAAA,MAChD;AAIF,YAAM,kBAAkB;AAAA,QACtB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS,mBAAmB,WAAW;AAAA,QACvC,MAAM;AAAA,QACN,aAAa,oBAAoB,mBAAmB,IAAI;AAAA,QACxD,SAAS;AAAA;AAAA,QAET,iBAAiB;AAAA,UACf,CAAC,mBAAmB,IAAI,GAAG;AAAA,QAAA;AAAA,MAE/B;AAGA,YAAMA,YAAG;AAAA,QACPD,cAAK,KAAK,gBAAgB,cAAc;AAAA,QACxC,KAAK,UAAU,iBAAiB,MAAM,CAAC;AAAA,MACzC;AAEQ,cAAA;AAAA,QACN,4BAA4B,mBAAmB,IAAI,OAAO,cAAc;AAAA,MAC1E;AAAA,aACO,OAAO;AACd,cAAQ,MAAM,mCAAmC,WAAW,KAAK,KAAK;AAAA,IAAA;AAAA,EACxE;AAEJ;"}
|
@@ -44,26 +44,26 @@ declare function createPackageJsonSchema(sourceDir: string): z.ZodEffects<z.ZodO
|
|
44
44
|
babel: z.ZodOptional<z.ZodAny>;
|
45
45
|
peerDependenciesMeta: z.ZodOptional<z.ZodAny>;
|
46
46
|
}, "strip", z.ZodTypeAny, {
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
description?: string;
|
52
|
-
dependencies?: Record<string, string
|
53
|
-
optionalDependencies?: Record<string, string
|
54
|
-
bin?: Map<string, string
|
47
|
+
name: string;
|
48
|
+
version: string;
|
49
|
+
private: boolean;
|
50
|
+
exports?: Map<string, string> | undefined;
|
51
|
+
description?: string | undefined;
|
52
|
+
dependencies?: Record<string, string> | undefined;
|
53
|
+
optionalDependencies?: Record<string, string> | undefined;
|
54
|
+
bin?: Map<string, string> | undefined;
|
55
55
|
repository?: any;
|
56
|
-
keywords?: string[];
|
56
|
+
keywords?: string[] | undefined;
|
57
57
|
author?: any;
|
58
|
-
contributors?: (string | {})[];
|
58
|
+
contributors?: (string | {})[] | undefined;
|
59
59
|
license?: any;
|
60
|
-
devDependencies?: Record<string, string
|
61
|
-
peerDependencies?: Record<string, string
|
62
|
-
engines?: Record<string, string
|
63
|
-
browser?: string | Record<string, string
|
64
|
-
funding?: string | {};
|
65
|
-
os?: string[];
|
66
|
-
cpu?: string[];
|
60
|
+
devDependencies?: Record<string, string> | undefined;
|
61
|
+
peerDependencies?: Record<string, string> | undefined;
|
62
|
+
engines?: Record<string, string> | undefined;
|
63
|
+
browser?: string | Record<string, string> | undefined;
|
64
|
+
funding?: string | {} | undefined;
|
65
|
+
os?: string[] | undefined;
|
66
|
+
cpu?: string[] | undefined;
|
67
67
|
scripts?: any;
|
68
68
|
maintainers?: any;
|
69
69
|
bugs?: any;
|
@@ -73,26 +73,26 @@ declare function createPackageJsonSchema(sourceDir: string): z.ZodEffects<z.ZodO
|
|
73
73
|
babel?: any;
|
74
74
|
peerDependenciesMeta?: any;
|
75
75
|
}, {
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
description?: string;
|
81
|
-
dependencies?: Record<string, string
|
82
|
-
optionalDependencies?: Record<string, string
|
83
|
-
bin?: string | Record<string, string
|
76
|
+
name: string;
|
77
|
+
version: string;
|
78
|
+
private: boolean;
|
79
|
+
exports?: string | Record<string, string> | undefined;
|
80
|
+
description?: string | undefined;
|
81
|
+
dependencies?: Record<string, string> | undefined;
|
82
|
+
optionalDependencies?: Record<string, string> | undefined;
|
83
|
+
bin?: string | Record<string, string> | undefined;
|
84
84
|
repository?: any;
|
85
|
-
keywords?: string[];
|
85
|
+
keywords?: string[] | undefined;
|
86
86
|
author?: any;
|
87
|
-
contributors?: (string | {})[];
|
87
|
+
contributors?: (string | {})[] | undefined;
|
88
88
|
license?: any;
|
89
|
-
devDependencies?: Record<string, string
|
90
|
-
peerDependencies?: Record<string, string
|
91
|
-
engines?: Record<string, string
|
92
|
-
browser?: string | Record<string, string
|
93
|
-
funding?: string | {};
|
94
|
-
os?: string[];
|
95
|
-
cpu?: string[];
|
89
|
+
devDependencies?: Record<string, string> | undefined;
|
90
|
+
peerDependencies?: Record<string, string> | undefined;
|
91
|
+
engines?: Record<string, string> | undefined;
|
92
|
+
browser?: string | Record<string, string> | undefined;
|
93
|
+
funding?: string | {} | undefined;
|
94
|
+
os?: string[] | undefined;
|
95
|
+
cpu?: string[] | undefined;
|
96
96
|
scripts?: any;
|
97
97
|
maintainers?: any;
|
98
98
|
bugs?: any;
|
@@ -102,26 +102,26 @@ declare function createPackageJsonSchema(sourceDir: string): z.ZodEffects<z.ZodO
|
|
102
102
|
babel?: any;
|
103
103
|
peerDependenciesMeta?: any;
|
104
104
|
}>, {
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
description?: string;
|
110
|
-
dependencies?: Record<string, string
|
111
|
-
optionalDependencies?: Record<string, string
|
112
|
-
bin?: Map<string, string
|
105
|
+
name: string;
|
106
|
+
version: string;
|
107
|
+
private: boolean;
|
108
|
+
exports?: Map<string, string> | undefined;
|
109
|
+
description?: string | undefined;
|
110
|
+
dependencies?: Record<string, string> | undefined;
|
111
|
+
optionalDependencies?: Record<string, string> | undefined;
|
112
|
+
bin?: Map<string, string> | undefined;
|
113
113
|
repository?: any;
|
114
|
-
keywords?: string[];
|
114
|
+
keywords?: string[] | undefined;
|
115
115
|
author?: any;
|
116
|
-
contributors?: (string | {})[];
|
116
|
+
contributors?: (string | {})[] | undefined;
|
117
117
|
license?: any;
|
118
|
-
devDependencies?: Record<string, string
|
119
|
-
peerDependencies?: Record<string, string
|
120
|
-
engines?: Record<string, string
|
121
|
-
browser?: string | Record<string, string
|
122
|
-
funding?: string | {};
|
123
|
-
os?: string[];
|
124
|
-
cpu?: string[];
|
118
|
+
devDependencies?: Record<string, string> | undefined;
|
119
|
+
peerDependencies?: Record<string, string> | undefined;
|
120
|
+
engines?: Record<string, string> | undefined;
|
121
|
+
browser?: string | Record<string, string> | undefined;
|
122
|
+
funding?: string | {} | undefined;
|
123
|
+
os?: string[] | undefined;
|
124
|
+
cpu?: string[] | undefined;
|
125
125
|
scripts?: any;
|
126
126
|
maintainers?: any;
|
127
127
|
bugs?: any;
|
@@ -131,26 +131,26 @@ declare function createPackageJsonSchema(sourceDir: string): z.ZodEffects<z.ZodO
|
|
131
131
|
babel?: any;
|
132
132
|
peerDependenciesMeta?: any;
|
133
133
|
}, {
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
description?: string;
|
139
|
-
dependencies?: Record<string, string
|
140
|
-
optionalDependencies?: Record<string, string
|
141
|
-
bin?: string | Record<string, string
|
134
|
+
name: string;
|
135
|
+
version: string;
|
136
|
+
private: boolean;
|
137
|
+
exports?: string | Record<string, string> | undefined;
|
138
|
+
description?: string | undefined;
|
139
|
+
dependencies?: Record<string, string> | undefined;
|
140
|
+
optionalDependencies?: Record<string, string> | undefined;
|
141
|
+
bin?: string | Record<string, string> | undefined;
|
142
142
|
repository?: any;
|
143
|
-
keywords?: string[];
|
143
|
+
keywords?: string[] | undefined;
|
144
144
|
author?: any;
|
145
|
-
contributors?: (string | {})[];
|
145
|
+
contributors?: (string | {})[] | undefined;
|
146
146
|
license?: any;
|
147
|
-
devDependencies?: Record<string, string
|
148
|
-
peerDependencies?: Record<string, string
|
149
|
-
engines?: Record<string, string
|
150
|
-
browser?: string | Record<string, string
|
151
|
-
funding?: string | {};
|
152
|
-
os?: string[];
|
153
|
-
cpu?: string[];
|
147
|
+
devDependencies?: Record<string, string> | undefined;
|
148
|
+
peerDependencies?: Record<string, string> | undefined;
|
149
|
+
engines?: Record<string, string> | undefined;
|
150
|
+
browser?: string | Record<string, string> | undefined;
|
151
|
+
funding?: string | {} | undefined;
|
152
|
+
os?: string[] | undefined;
|
153
|
+
cpu?: string[] | undefined;
|
154
154
|
scripts?: any;
|
155
155
|
maintainers?: any;
|
156
156
|
bugs?: any;
|
@@ -12,7 +12,7 @@ function resolveDirs(args) {
|
|
12
12
|
sourceDir,
|
13
13
|
args.packagePath ?? "./package.json"
|
14
14
|
);
|
15
|
-
const outDir = myResolve(process.cwd(), args.outputDir ?? "./dist");
|
15
|
+
const outDir = myResolve(process.cwd(), args.outputDir ?? "./sb-dist");
|
16
16
|
const esmOutDir = myResolve(outDir, "__compiled__/esm");
|
17
17
|
const cjsOutDir = myResolve(outDir, "__compiled__/cjs");
|
18
18
|
const outBinsDir = myResolve(outDir, "__bin__");
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"resolveDirs.mjs","sources":["../../../../src/resolveDirs.ts"],"sourcesContent":["import { isAbsolute, join } from \"node:path\";\nimport { type Args } from \"./args.js\";\n\nfunction myResolve(path1: string, path2: string) {\n if (isAbsolute(path2)) {\n return path2;\n }\n\n return join(path1, path2);\n}\n\nexport function resolveDirs(args: Args) {\n const sourceDir = myResolve(process.cwd(), args.sourceDir ?? \".\");\n const packagePath = myResolve(\n sourceDir,\n args.packagePath ?? \"./package.json\",\n );\n const outDir = myResolve(process.cwd(), args.outputDir ?? \"./dist\");\n const esmOutDir = myResolve(outDir, \"__compiled__/esm\");\n const cjsOutDir = myResolve(outDir, \"__compiled__/cjs\");\n const outBinsDir = myResolve(outDir, \"__bin__\");\n\n return { sourceDir, packagePath, outDir, outBinsDir, cjsOutDir, esmOutDir };\n}\n\nexport type Dirs = ReturnType<typeof resolveDirs>;\n"],"names":[],"mappings":";;AAGA,SAAS,UAAU,OAAe,OAAe;AAC3C,MAAA,WAAW,KAAK,GAAG;AACd,WAAA;AAAA,EAAA;AAGF,SAAA,KAAK,OAAO,KAAK;AAC1B;AAEO,SAAS,YAAY,MAAY;AACtC,QAAM,YAAY,UAAU,QAAQ,OAAO,KAAK,aAAa,GAAG;AAChE,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,KAAK,eAAe;AAAA,EACtB;AACA,QAAM,SAAS,UAAU,QAAQ,OAAO,KAAK,aAAa,
|
1
|
+
{"version":3,"file":"resolveDirs.mjs","sources":["../../../../src/resolveDirs.ts"],"sourcesContent":["import { isAbsolute, join } from \"node:path\";\nimport { type Args } from \"./args.js\";\n\nfunction myResolve(path1: string, path2: string) {\n if (isAbsolute(path2)) {\n return path2;\n }\n\n return join(path1, path2);\n}\n\nexport function resolveDirs(args: Args) {\n const sourceDir = myResolve(process.cwd(), args.sourceDir ?? \".\");\n const packagePath = myResolve(\n sourceDir,\n args.packagePath ?? \"./package.json\",\n );\n const outDir = myResolve(process.cwd(), args.outputDir ?? \"./sb-dist\");\n const esmOutDir = myResolve(outDir, \"__compiled__/esm\");\n const cjsOutDir = myResolve(outDir, \"__compiled__/cjs\");\n const outBinsDir = myResolve(outDir, \"__bin__\");\n\n return { sourceDir, packagePath, outDir, outBinsDir, cjsOutDir, esmOutDir };\n}\n\nexport type Dirs = ReturnType<typeof resolveDirs>;\n"],"names":[],"mappings":";;AAGA,SAAS,UAAU,OAAe,OAAe;AAC3C,MAAA,WAAW,KAAK,GAAG;AACd,WAAA;AAAA,EAAA;AAGF,SAAA,KAAK,OAAO,KAAK;AAC1B;AAEO,SAAS,YAAY,MAAY;AACtC,QAAM,YAAY,UAAU,QAAQ,OAAO,KAAK,aAAa,GAAG;AAChE,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,KAAK,eAAe;AAAA,EACtB;AACA,QAAM,SAAS,UAAU,QAAQ,OAAO,KAAK,aAAa,WAAW;AAC/D,QAAA,YAAY,UAAU,QAAQ,kBAAkB;AAChD,QAAA,YAAY,UAAU,QAAQ,kBAAkB;AAChD,QAAA,aAAa,UAAU,QAAQ,SAAS;AAE9C,SAAO,EAAE,WAAW,aAAa,QAAQ,YAAY,WAAW,UAAU;AAC5E;"}
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import { type UserConfig } from "vite";
|
1
|
+
import { type UserConfig, type Rollup } from "vite";
|
2
2
|
type ViteTaskParams = {
|
3
3
|
viteConfig: UserConfig;
|
4
4
|
};
|
5
|
-
export declare function viteTask({ viteConfig }: ViteTaskParams): Promise<
|
5
|
+
export declare function viteTask({ viteConfig }: ViteTaskParams): Promise<Rollup.OutputChunk[]>;
|
6
6
|
export {};
|