smartbundle 0.15.0-alpha.0 → 0.15.0-alpha.2

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.
Files changed (91) hide show
  1. package/README.md +15 -10
  2. package/__bin__/smartbundle-monorepo-link.js +2 -0
  3. package/__compiled__/cjs/src/args.d.ts +9 -1
  4. package/__compiled__/cjs/src/args.js +4 -1
  5. package/__compiled__/cjs/src/args.js.map +1 -1
  6. package/__compiled__/cjs/src/detectModules.d.ts +25 -11
  7. package/__compiled__/cjs/src/detectModules.js +165 -28
  8. package/__compiled__/cjs/src/detectModules.js.map +1 -1
  9. package/__compiled__/cjs/src/errors.js +4 -0
  10. package/__compiled__/cjs/src/errors.js.map +1 -1
  11. package/__compiled__/cjs/src/index.d.ts +1 -1
  12. package/__compiled__/cjs/src/index.js +11 -5
  13. package/__compiled__/cjs/src/index.js.map +1 -1
  14. package/__compiled__/cjs/src/monorepo/buildAll.js +62 -0
  15. package/__compiled__/cjs/src/monorepo/buildAll.js.map +1 -0
  16. package/__compiled__/cjs/src/monorepo/convertPackageJson.d.ts +31 -0
  17. package/__compiled__/cjs/src/monorepo/convertPackageJson.js +40 -0
  18. package/__compiled__/cjs/src/monorepo/convertPackageJson.js.map +1 -0
  19. package/__compiled__/cjs/src/monorepo/createLinkPackages/createLinkPackages.js +93 -0
  20. package/__compiled__/cjs/src/monorepo/createLinkPackages/createLinkPackages.js.map +1 -0
  21. package/__compiled__/cjs/src/monorepo/link.js +11 -0
  22. package/__compiled__/cjs/src/monorepo/link.js.map +1 -0
  23. package/__compiled__/cjs/src/monorepo/parseMonorepo/parseMonorepo.js +106 -0
  24. package/__compiled__/cjs/src/monorepo/parseMonorepo/parseMonorepo.js.map +1 -0
  25. package/__compiled__/cjs/src/packageJson.d.ts +5 -0
  26. package/__compiled__/cjs/src/packageJson.js +2 -0
  27. package/__compiled__/cjs/src/packageJson.js.map +1 -1
  28. package/__compiled__/cjs/src/plugins/babel/index.js +1 -1
  29. package/__compiled__/cjs/src/plugins/babel/index.js.map +1 -1
  30. package/__compiled__/cjs/src/plugins/react/index.js +3 -2
  31. package/__compiled__/cjs/src/plugins/react/index.js.map +1 -1
  32. package/__compiled__/cjs/src/resolveDirs.js +1 -1
  33. package/__compiled__/cjs/src/resolveDirs.js.map +1 -1
  34. package/__compiled__/cjs/src/run.js +47 -8
  35. package/__compiled__/cjs/src/run.js.map +1 -1
  36. package/__compiled__/cjs/src/tasks/buildTypesTask/callTypescript.d.ts +2 -2
  37. package/__compiled__/cjs/src/tasks/buildTypesTask/callTypescript.js.map +1 -1
  38. package/__compiled__/cjs/src/tasks/buildTypesTask/findTypingsNames.d.ts +2 -2
  39. package/__compiled__/cjs/src/tasks/buildTypesTask/findTypingsNames.js.map +1 -1
  40. package/__compiled__/cjs/src/tasks/buildTypesTask/findTypingsPackages.d.ts +2 -2
  41. package/__compiled__/cjs/src/tasks/buildTypesTask/findTypingsPackages.js.map +1 -1
  42. package/__compiled__/cjs/src/tasks/gitignoreTask.d.ts +6 -0
  43. package/__compiled__/cjs/src/tasks/gitignoreTask.js +14 -0
  44. package/__compiled__/cjs/src/tasks/gitignoreTask.js.map +1 -0
  45. package/__compiled__/cjs/src/writePackageJson.js +2 -33
  46. package/__compiled__/cjs/src/writePackageJson.js.map +1 -1
  47. package/__compiled__/esm/src/args.d.mts +9 -1
  48. package/__compiled__/esm/src/args.mjs +4 -1
  49. package/__compiled__/esm/src/args.mjs.map +1 -1
  50. package/__compiled__/esm/src/detectModules.d.mts +25 -11
  51. package/__compiled__/esm/src/detectModules.mjs +165 -28
  52. package/__compiled__/esm/src/detectModules.mjs.map +1 -1
  53. package/__compiled__/esm/src/errors.mjs +4 -0
  54. package/__compiled__/esm/src/errors.mjs.map +1 -1
  55. package/__compiled__/esm/src/index.d.mts +1 -1
  56. package/__compiled__/esm/src/index.mjs +11 -5
  57. package/__compiled__/esm/src/index.mjs.map +1 -1
  58. package/__compiled__/esm/src/monorepo/buildAll.mjs +62 -0
  59. package/__compiled__/esm/src/monorepo/buildAll.mjs.map +1 -0
  60. package/__compiled__/esm/src/monorepo/convertPackageJson.d.mts +31 -0
  61. package/__compiled__/esm/src/monorepo/convertPackageJson.mjs +40 -0
  62. package/__compiled__/esm/src/monorepo/convertPackageJson.mjs.map +1 -0
  63. package/__compiled__/esm/src/monorepo/createLinkPackages/createLinkPackages.mjs +93 -0
  64. package/__compiled__/esm/src/monorepo/createLinkPackages/createLinkPackages.mjs.map +1 -0
  65. package/__compiled__/esm/src/monorepo/link.mjs +10 -0
  66. package/__compiled__/esm/src/monorepo/link.mjs.map +1 -0
  67. package/__compiled__/esm/src/monorepo/parseMonorepo/parseMonorepo.mjs +106 -0
  68. package/__compiled__/esm/src/monorepo/parseMonorepo/parseMonorepo.mjs.map +1 -0
  69. package/__compiled__/esm/src/packageJson.d.mts +5 -0
  70. package/__compiled__/esm/src/packageJson.mjs +2 -0
  71. package/__compiled__/esm/src/packageJson.mjs.map +1 -1
  72. package/__compiled__/esm/src/plugins/babel/index.mjs +1 -1
  73. package/__compiled__/esm/src/plugins/babel/index.mjs.map +1 -1
  74. package/__compiled__/esm/src/plugins/react/index.mjs +3 -2
  75. package/__compiled__/esm/src/plugins/react/index.mjs.map +1 -1
  76. package/__compiled__/esm/src/resolveDirs.mjs +1 -1
  77. package/__compiled__/esm/src/resolveDirs.mjs.map +1 -1
  78. package/__compiled__/esm/src/run.mjs +47 -8
  79. package/__compiled__/esm/src/run.mjs.map +1 -1
  80. package/__compiled__/esm/src/tasks/buildTypesTask/callTypescript.d.mts +2 -2
  81. package/__compiled__/esm/src/tasks/buildTypesTask/callTypescript.mjs.map +1 -1
  82. package/__compiled__/esm/src/tasks/buildTypesTask/findTypingsNames.d.mts +2 -2
  83. package/__compiled__/esm/src/tasks/buildTypesTask/findTypingsNames.mjs.map +1 -1
  84. package/__compiled__/esm/src/tasks/buildTypesTask/findTypingsPackages.d.mts +2 -2
  85. package/__compiled__/esm/src/tasks/buildTypesTask/findTypingsPackages.mjs.map +1 -1
  86. package/__compiled__/esm/src/tasks/gitignoreTask.d.mts +6 -0
  87. package/__compiled__/esm/src/tasks/gitignoreTask.mjs +14 -0
  88. package/__compiled__/esm/src/tasks/gitignoreTask.mjs.map +1 -0
  89. package/__compiled__/esm/src/writePackageJson.mjs +2 -33
  90. package/__compiled__/esm/src/writePackageJson.mjs.map +1 -1
  91. package/package.json +17 -11
@@ -35,20 +35,59 @@ function getMinVersion(packageJson, depName, exclude) {
35
35
  }
36
36
  return minVersion;
37
37
  }
38
- async function detectBabel(packageJson) {
38
+ async function detectBabel(packageJson, isMonorepoPackage) {
39
+ const hasBabelInPackage = getMinVersion(packageJson, "@babel/core", [
40
+ "optionalDependencies"
41
+ ]);
42
+ if (isMonorepoPackage && hasBabelInPackage) {
43
+ return {
44
+ success: false,
45
+ error: `Babel found in package-level package.json for monorepo package "${packageJson.name}".
46
+ In monorepos, build tools like Babel should be defined in the workspace root package.json, not in individual packages.
47
+ Please move "@babel/core" from this package's dependencies/devDependencies to the root package.json's devDependencies.`
48
+ };
49
+ }
39
50
  if ("@babel/core" in (packageJson.optionalDependencies ?? {})) {
40
51
  errorLog("babel excluded because inside optionalDependencies");
41
- return;
52
+ return {
53
+ success: false,
54
+ error: "Babel excluded because it's in optionalDependencies"
55
+ };
56
+ }
57
+ const babelVersion = getMinVersion(packageJson, "@babel/core", [
58
+ "optionalDependencies"
59
+ ]);
60
+ if (!babelVersion) {
61
+ errorLog("babel");
62
+ return { success: true, module: void 0 };
42
63
  }
43
64
  try {
44
65
  const babel = await import("@babel/core");
45
66
  okLog("babel, version:", babel.version);
46
- return babel;
67
+ return {
68
+ success: true,
69
+ module: {
70
+ babel,
71
+ version: babel.version
72
+ }
73
+ };
47
74
  } catch {
48
75
  errorLog("babel");
76
+ return { success: false, error: "Failed to import @babel/core" };
49
77
  }
50
78
  }
51
- async function detectReact(packageJson) {
79
+ async function detectReact(packageJson, isMonorepoPackage) {
80
+ const reactVersionInPackage = getMinVersion(packageJson, "react", [
81
+ "devDependencies"
82
+ ]);
83
+ if (isMonorepoPackage && reactVersionInPackage) {
84
+ return {
85
+ success: false,
86
+ error: `React found in package-level package.json for monorepo package "${packageJson.name}".
87
+ In monorepos, build tools like React should be defined in the workspace root package.json, not in individual packages.
88
+ Please move "react" from this package's dependencies/peerDependencies to the root package.json's dependencies or peerDependencies.`
89
+ };
90
+ }
52
91
  const reactVersion = getMinVersion(packageJson, "react", ["devDependencies"]);
53
92
  if (reactVersion) {
54
93
  const isLegacy = semver.lt(reactVersion, "17.0.0");
@@ -56,29 +95,58 @@ async function detectReact(packageJson) {
56
95
  okLog(
57
96
  `react, min version: ${reactVersion.version}. Transform: ${transform}`
58
97
  );
59
- return transform;
98
+ return {
99
+ success: true,
100
+ module: {
101
+ transform,
102
+ version: reactVersion.version
103
+ }
104
+ };
60
105
  }
61
106
  errorLog("react");
107
+ return { success: true, module: void 0 };
62
108
  }
63
- async function detectTypescript(packageJson, dirs) {
109
+ async function detectTypescript(packageJson, dirs, monorepoType) {
64
110
  const typescriptVersion = getMinVersion(packageJson, "typescript", []);
111
+ if (monorepoType != null && typescriptVersion) {
112
+ return {
113
+ success: false,
114
+ error: `TypeScript found in package-level package.json for monorepo package "${packageJson.name}".
115
+ In monorepos, build tools like TypeScript should be defined in the workspace root package.json, not in individual packages.
116
+ Please move "typescript" from this package's dependencies/devDependencies to the root package.json's devDependencies.`
117
+ };
118
+ }
65
119
  if (!typescriptVersion) {
66
120
  errorLog("typescript");
67
- return;
121
+ return { success: true, module: void 0 };
68
122
  }
69
123
  let ts;
70
124
  try {
71
125
  ts = (await import("typescript")).default;
72
126
  } catch {
73
- errorLog("typescript");
74
- return;
127
+ if (monorepoType === "pnpm") {
128
+ return {
129
+ success: false,
130
+ error: `smartbundle found the .ts entrypoint but required "typescript" to build .d.ts files. Please install the "typescript" dependency. In pnpm workspaces, you may need to either:
131
+ 1. Add "hoist-workspace-packages=true" to your pnpm-workspace.yaml file (recommended), or
132
+ 2. Add "public-hoist-pattern[]=[\\"typescript\\"]" to your pnpm-workspace.yaml file, or
133
+ 3. Add "typescript" as a devDependency in each package's package.json
134
+ See https://pnpm.io/settings#dependency-hoisting-settings for more details.`
135
+ };
136
+ } else {
137
+ return {
138
+ success: false,
139
+ error: 'smartbundle found the .ts entrypoint but required "typescript" to build .d.ts files. Please install the "typescript" dependency.'
140
+ };
141
+ }
75
142
  }
76
143
  okLog("typescript, version:", ts.version);
77
144
  const configFilePath = ts.findConfigFile(dirs.sourceDir, ts.sys.fileExists);
78
145
  if (!configFilePath) {
79
- throw new Error(
80
- "Cannot find a tsconfig.json file. You should declare it. Please, read the https://github.com/XaveScor/smartbundle/issues/131 for more information"
81
- );
146
+ return {
147
+ success: false,
148
+ error: "Cannot find a tsconfig.json file. You should declare it. Please, read the https://github.com/XaveScor/smartbundle/issues/131 for more information"
149
+ };
82
150
  }
83
151
  const configFile = ts.readConfigFile(configFilePath, ts.sys.readFile);
84
152
  if (configFile.error) {
@@ -86,7 +154,10 @@ async function detectTypescript(packageJson, dirs) {
86
154
  configFile.error.messageText,
87
155
  "\n"
88
156
  );
89
- throw new Error(`Cannot read tsconfig.json file, error: ${readableError}`);
157
+ return {
158
+ success: false,
159
+ error: `Cannot read tsconfig.json file, error: ${readableError}`
160
+ };
90
161
  }
91
162
  const parsedConfig = ts.parseJsonConfigFileContent(
92
163
  configFile.config,
@@ -108,25 +179,91 @@ async function detectTypescript(packageJson, dirs) {
108
179
  configFilePath
109
180
  );
110
181
  if (!parsedConfig.options.verbatimModuleSyntax) {
111
- throw new Error(
112
- "verbatimModuleSyntax should be enabled in tsconfig.json. Read https://github.com/XaveScor/smartbundle/issues/131 for more explanation.\nYou also can upvote the issue if you need the support of verbatimModuleSyntax: false in your library"
113
- );
182
+ return {
183
+ success: false,
184
+ error: "verbatimModuleSyntax should be enabled in tsconfig.json. Read https://github.com/XaveScor/smartbundle/issues/131 for more explanation.\nYou also can upvote the issue if you need the support of verbatimModuleSyntax: false in your library"
185
+ };
114
186
  }
115
187
  const host = ts.createCompilerHost(parsedConfig.options);
116
- return { ts, parsedConfig, host };
188
+ return {
189
+ success: true,
190
+ module: {
191
+ ts,
192
+ parsedConfig,
193
+ host,
194
+ version: ts.version
195
+ }
196
+ };
117
197
  }
118
- async function detectModules(packageJson, dirs) {
119
- try {
120
- const result = {};
121
- log("Detecting modules");
122
- result.ts = await detectTypescript(packageJson, dirs);
123
- result.babel = await detectBabel(packageJson);
124
- result.react = await detectReact(packageJson);
125
- lineLog();
126
- return { error: false, modules: result };
127
- } catch (e) {
128
- return { error: true, errors: [e.message] };
198
+ async function detectModules(packageJson, dirs, monorepo) {
199
+ if (!monorepo) {
200
+ return detectPackageModules(packageJson, dirs);
201
+ }
202
+ const packageValidation = await detectPackageModules(
203
+ packageJson,
204
+ dirs,
205
+ monorepo.type
206
+ );
207
+ const errors = [];
208
+ if (!packageValidation.success) {
209
+ errors.push(...packageValidation.errors);
210
+ } else {
211
+ if (packageValidation.modules.ts) {
212
+ errors.push(
213
+ `Package "${packageJson.name}" has ts/babel in package.json, but it's not allowed in monorepo.`
214
+ );
215
+ }
216
+ if (packageValidation.modules.babel) {
217
+ errors.push(
218
+ `Package "${packageJson.name}" has babel in package.json, but it's not allowed in monorepo.`
219
+ );
220
+ }
221
+ }
222
+ const mergedPackageJson = {
223
+ ...packageJson,
224
+ devDependencies: {
225
+ ...monorepo.devDeps,
226
+ ...packageJson.devDependencies
227
+ }
228
+ };
229
+ const result = await detectPackageModules(mergedPackageJson, dirs);
230
+ if (!result.success) {
231
+ errors.push(...result.errors);
232
+ }
233
+ if (errors.length > 0) {
234
+ return { success: false, errors };
235
+ }
236
+ return result;
237
+ }
238
+ async function detectPackageModules(packageJson, dirs, monorepoType) {
239
+ log("Detecting modules");
240
+ const [tsResult, babelResult, reactResult] = await Promise.all([
241
+ detectTypescript(packageJson, dirs, monorepoType),
242
+ detectBabel(packageJson, monorepoType != null),
243
+ detectReact(packageJson, monorepoType != null)
244
+ ]);
245
+ const errors = [];
246
+ const modules = {};
247
+ if (!tsResult.success) {
248
+ errors.push(tsResult.error);
249
+ } else if (tsResult.module) {
250
+ modules.ts = tsResult.module;
251
+ }
252
+ if (!babelResult.success) {
253
+ errors.push(babelResult.error);
254
+ } else if (babelResult.module) {
255
+ modules.babel = babelResult.module;
256
+ }
257
+ if (!reactResult.success) {
258
+ errors.push(reactResult.error);
259
+ } else if (reactResult.module) {
260
+ modules.react = reactResult.module;
261
+ }
262
+ lineLog();
263
+ if (errors.length > 0) {
264
+ return { success: false, errors };
129
265
  }
266
+ return { success: true, modules };
130
267
  }
131
268
  export {
132
269
  detectModules,
@@ -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\";\n\nexport type TS = {\n ts: typeof import(\"typescript\");\n parsedConfig: import(\"typescript\").ParsedCommandLine;\n host: import(\"typescript\").CompilerHost;\n};\nexport type DetectedModules = {\n ts?: TS;\n babel?: typeof import(\"@babel/core\");\n react?: \"legacy\" | \"modern\";\n};\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 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): Promise<typeof import(\"@babel/core\") | undefined> {\n if (\"@babel/core\" in (packageJson.optionalDependencies ?? {})) {\n errorLog(\"babel excluded because inside optionalDependencies\");\n return;\n }\n\n try {\n const babel = await import(\"@babel/core\");\n okLog(\"babel, version:\", babel.version);\n return babel;\n } catch {\n errorLog(\"babel\");\n }\n}\n\nasync function detectReact(\n packageJson: PackageJson,\n): Promise<\"legacy\" | \"modern\" | undefined> {\n const reactVersion = getMinVersion(packageJson, \"react\", [\"devDependencies\"]);\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 transform;\n }\n errorLog(\"react\");\n}\n\nasync function detectTypescript(\n packageJson: PackageJson,\n dirs: Dirs,\n): Promise<TS | undefined> {\n const typescriptVersion = getMinVersion(packageJson, \"typescript\", []);\n if (!typescriptVersion) {\n errorLog(\"typescript\");\n return;\n }\n\n let ts: typeof import(\"typescript\");\n try {\n // ts <=4.3 has no named exports. The all methods is located in the default export\n ts = (await import(\"typescript\")).default;\n } catch {\n errorLog(\"typescript\");\n return;\n }\n\n okLog(\"typescript, version:\", ts.version);\n\n const configFilePath = ts.findConfigFile(dirs.sourceDir, ts.sys.fileExists);\n if (!configFilePath) {\n throw new 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 throw new Error(`Cannot read tsconfig.json file, error: ${readableError}`);\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 throw new 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 { ts, parsedConfig, host };\n}\n\nexport async function detectModules(\n packageJson: PackageJson,\n dirs: Dirs,\n): Promise<\n | { error: false; modules: DetectedModules }\n | { error: true; errors: Array<string> }\n> {\n try {\n const result: DetectedModules = {};\n log(\"Detecting modules\");\n\n result.ts = await detectTypescript(packageJson, dirs);\n result.babel = await detectBabel(packageJson);\n result.react = await detectReact(packageJson);\n\n lineLog();\n return { error: false, modules: result };\n } catch (e: any) {\n return { error: true, errors: [e.message] };\n }\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 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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"}
@@ -11,9 +11,13 @@ const errors = {
11
11
  dependenciesInvalid: "The `dependencies` field must be an Object<string, string>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#dependencies",
12
12
  binFiled: "The `bin` field must be a path or Record<string, FilePath>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#bin",
13
13
  rollupError: "An error occurred while building the package. Please, report it to the issues on GitHub",
14
+ typescriptNotFound: "The package.json contains typescript entrypoints, but the typescript package is not found. Please, install typescript@^5.0.0",
14
15
  optionalDependenciesInvalid: "The `optionalDependencies` field must be an Object<string, string>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#optionaldependencies",
16
+ repositoryInvalid: "The `repository` field must be an object with 'type' and 'url' properties or a string. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#repository",
15
17
  keywordsInvalid: "The `keywords` field must be an array of strings. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#keywords",
18
+ authorInvalid: "The `author` field must be an object or a string. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#people-fields-author-contributors",
16
19
  contributorsInvalid: "The `contributors` field must be an array of objects or strings. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#people-fields-author-contributors",
20
+ licenseInvalid: "The `license` field must be a string specifying the license. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#license",
17
21
  devDependenciesInvalid: "The `devDependencies` field must be an Object<string, string>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#devdependencies",
18
22
  peerDependenciesInvalid: "The `peerDependencies` field must be an Object<string, string>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#peerdependencies",
19
23
  enginesInvalid: "The `engines` field must be an object specifying version requirements. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#engines",
@@ -1 +1 @@
1
- {"version":3,"file":"errors.mjs","sources":["../../../../src/errors.ts"],"sourcesContent":["export const errors = {\n exportsRequired:\n \"The `exports` or `bin` field is required. Please, verify the value. More info: https://nodejs.org/api/packages.html#package-entry-points\",\n exportsInvalid:\n \"The `exports` field must be a path to entrypoint. Please, verify the value. More info: https://nodejs.org/api/packages.html#package-entry-points\",\n nameRequired:\n \"The `name` field is required string. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#name\",\n nameMinLength:\n 'Min length of \"name\" is 1 character. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#name',\n nameMaxLength:\n 'Max length of \"name\" is 214 characters. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#name',\n nameStartsIllegalChars:\n \"Name cannot start with `_` or `.` if it is not a scoped package. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#name\",\n versionRequired:\n \"The `version` field is required string. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#version\",\n privateIsTrue:\n \"The `private` field must be `true` for avoiding accidental publish. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#private\",\n descriptionString:\n \"The `description` field must be a string. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#description\",\n dependenciesInvalid:\n \"The `dependencies` field must be an Object<string, string>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#dependencies\",\n binFiled:\n \"The `bin` field must be a path or Record<string, FilePath>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#bin\",\n rollupError:\n \"An error occurred while building the package. Please, report it to the issues on GitHub\",\n typescriptNotFound:\n \"The package.json contains typescript entrypoints, but the typescript package is not found. Please, install typescript@^5.0.0\",\n optionalDependenciesInvalid:\n \"The `optionalDependencies` field must be an Object<string, string>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#optionaldependencies\",\n repositoryInvalid:\n \"The `repository` field must be an object with 'type' and 'url' properties or a string. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#repository\",\n keywordsInvalid:\n \"The `keywords` field must be an array of strings. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#keywords\",\n authorInvalid:\n \"The `author` field must be an object or a string. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#people-fields-author-contributors\",\n contributorsInvalid:\n \"The `contributors` field must be an array of objects or strings. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#people-fields-author-contributors\",\n licenseInvalid:\n \"The `license` field must be a string specifying the license. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#license\",\n devDependenciesInvalid:\n \"The `devDependencies` field must be an Object<string, string>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#devdependencies\",\n peerDependenciesInvalid:\n \"The `peerDependencies` field must be an Object<string, string>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#peerdependencies\",\n enginesInvalid:\n \"The `engines` field must be an object specifying version requirements. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#engines\",\n browserInvalid:\n \"The `browser` field must be a string or an object. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#browser\",\n fundingInvalid:\n \"The `funding` field must be an object or a string. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#funding\",\n osInvalid:\n \"The `os` field must be an array of strings. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#os\",\n cpuInvalid:\n \"The `cpu` field must be an array of strings. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#cpu\",\n};\n"],"names":[],"mappings":"AAAO,MAAM,SAAS;AAAA,EACpB,iBACE;AAAA,EACF,gBACE;AAAA,EACF,cACE;AAAA,EACF,eACE;AAAA,EACF,eACE;AAAA,EACF,wBACE;AAAA,EACF,iBACE;AAAA,EACF,eACE;AAAA,EACF,mBACE;AAAA,EACF,qBACE;AAAA,EACF,UACE;AAAA,EACF,aACE;AAAA,EAGF,6BACE;AAAA,EAGF,iBACE;AAAA,EAGF,qBACE;AAAA,EAGF,wBACE;AAAA,EACF,yBACE;AAAA,EACF,gBACE;AAAA,EACF,gBACE;AAAA,EACF,gBACE;AAAA,EACF,WACE;AAAA,EACF,YACE;AACJ;"}
1
+ {"version":3,"file":"errors.mjs","sources":["../../../../src/errors.ts"],"sourcesContent":["export const errors = {\n exportsRequired:\n \"The `exports` or `bin` field is required. Please, verify the value. More info: https://nodejs.org/api/packages.html#package-entry-points\",\n exportsInvalid:\n \"The `exports` field must be a path to entrypoint. Please, verify the value. More info: https://nodejs.org/api/packages.html#package-entry-points\",\n nameRequired:\n \"The `name` field is required string. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#name\",\n nameMinLength:\n 'Min length of \"name\" is 1 character. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#name',\n nameMaxLength:\n 'Max length of \"name\" is 214 characters. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#name',\n nameStartsIllegalChars:\n \"Name cannot start with `_` or `.` if it is not a scoped package. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#name\",\n versionRequired:\n \"The `version` field is required string. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#version\",\n privateIsTrue:\n \"The `private` field must be `true` for avoiding accidental publish. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#private\",\n descriptionString:\n \"The `description` field must be a string. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#description\",\n dependenciesInvalid:\n \"The `dependencies` field must be an Object<string, string>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#dependencies\",\n binFiled:\n \"The `bin` field must be a path or Record<string, FilePath>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#bin\",\n rollupError:\n \"An error occurred while building the package. Please, report it to the issues on GitHub\",\n typescriptNotFound:\n \"The package.json contains typescript entrypoints, but the typescript package is not found. Please, install typescript@^5.0.0\",\n optionalDependenciesInvalid:\n \"The `optionalDependencies` field must be an Object<string, string>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#optionaldependencies\",\n repositoryInvalid:\n \"The `repository` field must be an object with 'type' and 'url' properties or a string. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#repository\",\n keywordsInvalid:\n \"The `keywords` field must be an array of strings. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#keywords\",\n authorInvalid:\n \"The `author` field must be an object or a string. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#people-fields-author-contributors\",\n contributorsInvalid:\n \"The `contributors` field must be an array of objects or strings. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#people-fields-author-contributors\",\n licenseInvalid:\n \"The `license` field must be a string specifying the license. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#license\",\n devDependenciesInvalid:\n \"The `devDependencies` field must be an Object<string, string>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#devdependencies\",\n peerDependenciesInvalid:\n \"The `peerDependencies` field must be an Object<string, string>. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#peerdependencies\",\n enginesInvalid:\n \"The `engines` field must be an object specifying version requirements. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#engines\",\n browserInvalid:\n \"The `browser` field must be a string or an object. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#browser\",\n fundingInvalid:\n \"The `funding` field must be an object or a string. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#funding\",\n osInvalid:\n \"The `os` field must be an array of strings. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#os\",\n cpuInvalid:\n \"The `cpu` field must be an array of strings. Please, verify the value. More info: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#cpu\",\n};\n"],"names":[],"mappings":"AAAO,MAAM,SAAS;AAAA,EACpB,iBACE;AAAA,EACF,gBACE;AAAA,EACF,cACE;AAAA,EACF,eACE;AAAA,EACF,eACE;AAAA,EACF,wBACE;AAAA,EACF,iBACE;AAAA,EACF,eACE;AAAA,EACF,mBACE;AAAA,EACF,qBACE;AAAA,EACF,UACE;AAAA,EACF,aACE;AAAA,EACF,oBACE;AAAA,EACF,6BACE;AAAA,EACF,mBACE;AAAA,EACF,iBACE;AAAA,EACF,eACE;AAAA,EACF,qBACE;AAAA,EACF,gBACE;AAAA,EACF,wBACE;AAAA,EACF,yBACE;AAAA,EACF,gBACE;AAAA,EACF,gBACE;AAAA,EACF,gBACE;AAAA,EACF,WACE;AAAA,EACF,YACE;AACJ;"}
@@ -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: string[];
5
+ errors: any;
6
6
  }>;
7
7
  type RunResult = {
8
8
  error: false;
@@ -9,6 +9,7 @@ import { buildTypesTask } from "./tasks/buildTypesTask/buildTypesTask.mjs";
9
9
  import { BuildError } from "./error.mjs";
10
10
  import { jsFilesTask } from "./tasks/jsFilesTask.mjs";
11
11
  import { binsTask } from "./tasks/binsTask.mjs";
12
+ import { gitignoreTask } from "./tasks/gitignoreTask.mjs";
12
13
  import { detectModules } from "./detectModules.mjs";
13
14
  import { lineLog, log, disableLog } from "./log.mjs";
14
15
  import { runSettled } from "./pipeline.mjs";
@@ -31,8 +32,8 @@ async function defineViteConfig(args = {}) {
31
32
  console.error(packageJson);
32
33
  throw new Error("Failed to parse package.json");
33
34
  }
34
- const modulesResult = await detectModules(packageJson, dirs);
35
- if (modulesResult.error) {
35
+ const modulesResult = await detectModules(packageJson, dirs, args.monorepo);
36
+ if (!modulesResult.success) {
36
37
  return { error: true, errors: modulesResult.errors };
37
38
  }
38
39
  const { modules } = modulesResult;
@@ -49,12 +50,12 @@ async function run(args) {
49
50
  const { sourceDir, outDir, packagePath, outBinsDir } = dirs;
50
51
  await rm(outDir, { recursive: true, force: true });
51
52
  await mkdir(outDir, { recursive: true });
52
- const packageJson = await parsePackageJson({ sourceDir, packagePath });
53
+ let packageJson = await parsePackageJson({ sourceDir, packagePath });
53
54
  if (Array.isArray(packageJson)) {
54
55
  return { error: true, errors: packageJson };
55
56
  }
56
- const modulesResult = await detectModules(packageJson, dirs);
57
- if (modulesResult.error) {
57
+ const modulesResult = await detectModules(packageJson, dirs, args.monorepo);
58
+ if (!modulesResult.success) {
58
59
  return { error: true, errors: modulesResult.errors };
59
60
  }
60
61
  const { modules } = modulesResult;
@@ -129,6 +130,11 @@ async function run(args) {
129
130
  exportsMap,
130
131
  binsMap
131
132
  });
133
+ if (!args.skipGitignore) {
134
+ await gitignoreTask({
135
+ dirs
136
+ });
137
+ }
132
138
  lineLog();
133
139
  log(`Build finished: ./${relative(sourceDir, outDir)}`);
134
140
  return { error: false };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../src/index.ts"],"sourcesContent":["import { relative } from \"node:path\";\nimport { mkdir, rm } from \"node:fs/promises\";\nimport { parsePackageJson } from \"./packageJson.js\";\nimport { type ExportsObject, writePackageJson } from \"./writePackageJson.js\";\nimport { resolveDirs } from \"./resolveDirs.js\";\nimport { createViteConfig } from \"./createViteConfig.js\";\nimport { copyStaticFilesTask } from \"./tasks/copyStaticFilesTask.js\";\nimport { buildTypesTask } from \"./tasks/buildTypesTask/buildTypesTask.js\";\nimport { BuildError } from \"./error.js\";\nimport { jsFilesTask } from \"./tasks/jsFilesTask.js\";\nimport { binsTask } from \"./tasks/binsTask.js\";\nimport { detectModules } from \"./detectModules.js\";\nimport { disableLog, lineLog, log, okLog } from \"./log.js\";\nimport { runSettled } from \"./pipeline.js\";\nimport { type Args } from \"./args.js\";\nimport { viteTask } from \"./tasks/viteTask.js\";\nimport { promiseSettledResultErrors } from \"./promiseSettledResultErrors.js\";\nimport { PrettyError } from \"./PrettyErrors.js\";\n\nfunction setExports(\n exportsMap: Map<string, ExportsObject>,\n exportName: string,\n mapFn: (entry: ExportsObject) => ExportsObject,\n) {\n const entry = exportsMap.get(exportName) ?? ({} as ExportsObject);\n exportsMap.set(exportName, mapFn(entry));\n}\n\nexport async function defineViteConfig(args: Args = {}) {\n disableLog();\n const dirs = resolveDirs(args);\n const { sourceDir, outDir, packagePath } = dirs;\n\n await rm(outDir, { recursive: true, force: true });\n await mkdir(outDir, { recursive: true });\n const packageJson = await parsePackageJson({ sourceDir, packagePath });\n\n if (Array.isArray(packageJson)) {\n console.error(packageJson);\n throw new Error(\"Failed to parse package.json\");\n }\n\n const modulesResult = await detectModules(packageJson, dirs);\n if (modulesResult.error) {\n return { error: true, errors: modulesResult.errors };\n }\n const { modules } = modulesResult;\n const { viteConfig } = createViteConfig({\n dirs,\n packageJson,\n modules,\n test: true,\n });\n\n return viteConfig;\n}\n\ntype RunResult =\n | {\n error: false;\n }\n | {\n error: true;\n errors: Array<string | PrettyError>;\n };\n\nexport async function run(args: Args): Promise<RunResult> {\n const dirs = resolveDirs(args);\n const { sourceDir, outDir, packagePath, outBinsDir } = dirs;\n\n await rm(outDir, { recursive: true, force: true });\n await mkdir(outDir, { recursive: true });\n const packageJson = await parsePackageJson({ sourceDir, packagePath });\n\n if (Array.isArray(packageJson)) {\n return { error: true, errors: packageJson };\n }\n\n const modulesResult = await detectModules(packageJson, dirs);\n if (modulesResult.error) {\n return { error: true, errors: modulesResult.errors };\n }\n const { modules } = modulesResult;\n const { viteConfig, entrypoints, bins } = createViteConfig({\n dirs,\n packageJson,\n modules,\n });\n\n const exportsMap = new Map<string, ExportsObject>();\n const binsMap = new Map<string, string>();\n\n const tasksRes = await runSettled(args, [\n copyStaticFilesTask(sourceDir, outDir),\n buildTypesTask({\n dirs,\n packageJson,\n entrypoints,\n modules,\n }).then(({ entrypointToEsDtsMap, entrypointToCjsDtsMap }) => {\n for (const [entrypoint, dts] of entrypointToEsDtsMap) {\n setExports(exportsMap, entrypoint, (entry) => {\n entry.dmts = \"./\" + relative(outDir, dts);\n return entry;\n });\n }\n\n for (const [entrypoint, dts] of entrypointToCjsDtsMap) {\n setExports(exportsMap, entrypoint, (entry) => {\n entry.dcts = \"./\" + relative(outDir, dts);\n return entry;\n });\n }\n }),\n viteTask({ viteConfig }).then((viteOutput) =>\n runSettled(args, [\n jsFilesTask({ buildOutput: viteOutput, entrypoints, outDir }).then(\n (res) => {\n for (const [filePath, name] of res) {\n setExports(exportsMap, name, (entry) => {\n const format = filePath.endsWith(\".js\") ? \"cjs\" : \"es\";\n if (format === \"es\") {\n entry.mjs = \"./\" + filePath;\n } else if (format === \"cjs\") {\n entry.cjs = \"./\" + filePath;\n }\n return entry;\n });\n }\n },\n ),\n binsTask({ outBinsDir, bins, buildOutput: viteOutput, outDir }).then(\n (res) => {\n for (const [value, key] of res) {\n binsMap.set(key, value);\n }\n },\n ),\n ]),\n ),\n ]);\n\n const errors = promiseSettledResultErrors(tasksRes).map((res) => {\n if (res instanceof PrettyError) {\n return res;\n }\n\n if (res instanceof BuildError) {\n return res.error;\n }\n\n return res.message;\n });\n\n if (errors.length > 0) {\n return { error: true, errors };\n }\n\n await writePackageJson(outDir, packageJson, {\n exportsMap,\n binsMap,\n });\n\n lineLog();\n log(`Build finished: ./${relative(sourceDir, outDir)}`);\n return { error: false };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/index.ts"],"sourcesContent":["import { relative } from \"node:path\";\nimport { mkdir, rm } from \"node:fs/promises\";\nimport { parsePackageJson } from \"./packageJson.js\";\nimport { type ExportsObject, writePackageJson } from \"./writePackageJson.js\";\nimport { resolveDirs } from \"./resolveDirs.js\";\nimport { createViteConfig } from \"./createViteConfig.js\";\nimport { copyStaticFilesTask } from \"./tasks/copyStaticFilesTask.js\";\nimport { buildTypesTask } from \"./tasks/buildTypesTask/buildTypesTask.js\";\nimport { BuildError } from \"./error.js\";\nimport { jsFilesTask } from \"./tasks/jsFilesTask.js\";\nimport { binsTask } from \"./tasks/binsTask.js\";\nimport { gitignoreTask } from \"./tasks/gitignoreTask.js\";\nimport { detectModules } from \"./detectModules.js\";\nimport { disableLog, lineLog, log } from \"./log.js\";\nimport { runSettled } from \"./pipeline.js\";\nimport { type Args } from \"./args.js\";\nimport { viteTask } from \"./tasks/viteTask.js\";\nimport { promiseSettledResultErrors } from \"./promiseSettledResultErrors.js\";\nimport { PrettyError } from \"./PrettyErrors.js\";\n\nfunction setExports(\n exportsMap: Map<string, ExportsObject>,\n exportName: string,\n mapFn: (entry: ExportsObject) => ExportsObject,\n) {\n const entry = exportsMap.get(exportName) ?? ({} as ExportsObject);\n exportsMap.set(exportName, mapFn(entry));\n}\n\nexport async function defineViteConfig(args: Args = {}) {\n disableLog();\n const dirs = resolveDirs(args);\n const { sourceDir, outDir, packagePath } = dirs;\n\n await rm(outDir, { recursive: true, force: true });\n await mkdir(outDir, { recursive: true });\n const packageJson = await parsePackageJson({ sourceDir, packagePath });\n\n if (Array.isArray(packageJson)) {\n console.error(packageJson);\n throw new Error(\"Failed to parse package.json\");\n }\n\n const modulesResult = await detectModules(packageJson, dirs, args.monorepo);\n if (!modulesResult.success) {\n return { error: true, errors: modulesResult.errors };\n }\n const { modules } = modulesResult;\n const { viteConfig } = createViteConfig({\n dirs,\n packageJson,\n modules,\n test: true,\n });\n\n return viteConfig;\n}\n\ntype RunResult =\n | {\n error: false;\n }\n | {\n error: true;\n errors: Array<string | PrettyError>;\n };\n\nexport async function run(args: Args): Promise<RunResult> {\n const dirs = resolveDirs(args);\n const { sourceDir, outDir, packagePath, outBinsDir } = dirs;\n\n await rm(outDir, { recursive: true, force: true });\n await mkdir(outDir, { recursive: true });\n let packageJson = await parsePackageJson({ sourceDir, packagePath });\n\n if (Array.isArray(packageJson)) {\n return { error: true, errors: packageJson };\n }\n\n const modulesResult = await detectModules(packageJson, dirs, args.monorepo);\n if (!modulesResult.success) {\n return { error: true, errors: modulesResult.errors };\n }\n const { modules } = modulesResult;\n const { viteConfig, entrypoints, bins } = createViteConfig({\n dirs,\n packageJson,\n modules,\n });\n\n const exportsMap = new Map<string, ExportsObject>();\n const binsMap = new Map<string, string>();\n\n const tasksRes = await runSettled(args, [\n copyStaticFilesTask(sourceDir, outDir),\n buildTypesTask({\n dirs,\n packageJson,\n entrypoints,\n modules,\n }).then(({ entrypointToEsDtsMap, entrypointToCjsDtsMap }) => {\n for (const [entrypoint, dts] of entrypointToEsDtsMap) {\n setExports(exportsMap, entrypoint, (entry) => {\n entry.dmts = \"./\" + relative(outDir, dts);\n return entry;\n });\n }\n\n for (const [entrypoint, dts] of entrypointToCjsDtsMap) {\n setExports(exportsMap, entrypoint, (entry) => {\n entry.dcts = \"./\" + relative(outDir, dts);\n return entry;\n });\n }\n }),\n viteTask({ viteConfig }).then((viteOutput) =>\n runSettled(args, [\n jsFilesTask({ buildOutput: viteOutput, entrypoints, outDir }).then(\n (res) => {\n for (const [filePath, name] of res) {\n setExports(exportsMap, name, (entry) => {\n const format = filePath.endsWith(\".js\") ? \"cjs\" : \"es\";\n if (format === \"es\") {\n entry.mjs = \"./\" + filePath;\n } else if (format === \"cjs\") {\n entry.cjs = \"./\" + filePath;\n }\n return entry;\n });\n }\n },\n ),\n binsTask({ outBinsDir, bins, buildOutput: viteOutput, outDir }).then(\n (res) => {\n for (const [value, key] of res) {\n binsMap.set(key, value);\n }\n },\n ),\n ]),\n ),\n ]);\n\n const errors = promiseSettledResultErrors(tasksRes).map((res) => {\n if (res instanceof PrettyError) {\n return res;\n }\n\n if (res instanceof BuildError) {\n return res.error;\n }\n\n return res.message;\n });\n\n if (errors.length > 0) {\n return { error: true, errors };\n }\n\n await writePackageJson(outDir, packageJson, {\n exportsMap,\n binsMap,\n });\n\n if (!args.skipGitignore) {\n await gitignoreTask({\n dirs,\n });\n }\n\n lineLog();\n log(`Build finished: ./${relative(sourceDir, outDir)}`);\n return { error: false };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { join } from "node:path";
2
+ import { parseMonorepo } from "./parseMonorepo/parseMonorepo.mjs";
3
+ import { run } from "../index.mjs";
4
+ import "../args.mjs";
5
+ import { log, lineLog } from "../log.mjs";
6
+ import { PrettyError } from "../PrettyErrors.mjs";
7
+ async function buildMonorepo(args) {
8
+ const sourceDir = args.sourceDir || process.cwd();
9
+ const { monorepo, projectPaths } = await parseMonorepo({ sourceDir });
10
+ if (!monorepo) {
11
+ throw new PrettyError("Not a monorepo - pnpm-workspace.yaml not found");
12
+ }
13
+ if (projectPaths.length === 0) {
14
+ throw new PrettyError(
15
+ "No packages with -sbsources suffix found in monorepo"
16
+ );
17
+ }
18
+ log(`Found ${projectPaths.length} packages to build in monorepo`);
19
+ lineLog();
20
+ const result = {
21
+ totalPackages: projectPaths.length,
22
+ successfulBuilds: 0,
23
+ failedBuilds: 0,
24
+ errors: []
25
+ };
26
+ for (let i = 0; i < projectPaths.length; i++) {
27
+ const packagePath = projectPaths[i];
28
+ const packageSourceDir = join(sourceDir, packagePath);
29
+ log(`[${i + 1}/${projectPaths.length}] Building ${packagePath}...`);
30
+ const packageArgs = {
31
+ ...args,
32
+ sourceDir: packageSourceDir,
33
+ packagePath: join(packageSourceDir, "package.json"),
34
+ outputDir: join(packageSourceDir, "sb-dist"),
35
+ monorepo
36
+ };
37
+ const buildResult = await run(packageArgs);
38
+ if (buildResult.error) {
39
+ result.failedBuilds++;
40
+ result.errors.push({
41
+ packagePath,
42
+ errors: buildResult.errors
43
+ });
44
+ log(
45
+ `[${i + 1}/${projectPaths.length}] ❌ Failed to build ${packagePath}`
46
+ );
47
+ } else {
48
+ result.successfulBuilds++;
49
+ log(`[${i + 1}/${projectPaths.length}] ✅ Built ${packagePath}`);
50
+ }
51
+ lineLog();
52
+ }
53
+ log(`Monorepo build completed:`);
54
+ log(` Total packages: ${result.totalPackages}`);
55
+ log(` Successful: ${result.successfulBuilds}`);
56
+ log(` Failed: ${result.failedBuilds}`);
57
+ return result;
58
+ }
59
+ export {
60
+ buildMonorepo
61
+ };
62
+ //# sourceMappingURL=buildAll.mjs.map
@@ -0,0 +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, \"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;"}
@@ -0,0 +1,31 @@
1
+ import type { PackageJson } from "../packageJson.js";
2
+ export declare function convertPackageJson(packageJson: PackageJson): {
3
+ exports?: Map<string, string>;
4
+ name?: string;
5
+ version?: string;
6
+ private?: boolean;
7
+ description?: string;
8
+ dependencies?: Record<string, string>;
9
+ optionalDependencies?: Record<string, string>;
10
+ bin?: Map<string, string>;
11
+ repository?: any;
12
+ keywords?: string[];
13
+ author?: any;
14
+ contributors?: (string | {})[];
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[];
23
+ scripts?: any;
24
+ maintainers?: any;
25
+ bugs?: any;
26
+ sideEffects?: any;
27
+ unpkg?: any;
28
+ homepage?: any;
29
+ babel?: any;
30
+ peerDependenciesMeta?: any;
31
+ };
@@ -0,0 +1,40 @@
1
+ const monorepoPostfix = "-sbsources";
2
+ const monorepoPostfixRegex = new RegExp(`${monorepoPostfix}$`);
3
+ function walkOverMonorepoDepsToRemovePostfix(deps) {
4
+ if (!deps) {
5
+ return void 0;
6
+ }
7
+ const res = {};
8
+ for (const [key, value] of Object.entries(deps)) {
9
+ if (key.endsWith(monorepoPostfix)) {
10
+ res[key.replace(monorepoPostfixRegex, "")] = value;
11
+ } else {
12
+ res[key] = value;
13
+ }
14
+ }
15
+ return res;
16
+ }
17
+ const allDepsClauses = [
18
+ "dependencies",
19
+ "optionalDependencies",
20
+ "peerDependencies",
21
+ "devDependencies"
22
+ ];
23
+ function convertPackageJson(packageJson) {
24
+ if (packageJson.name.endsWith(monorepoPostfix)) {
25
+ const originalName = packageJson.name;
26
+ packageJson.name = packageJson.name.replace(monorepoPostfix, "");
27
+ for (const depClause of allDepsClauses) {
28
+ packageJson[depClause] = walkOverMonorepoDepsToRemovePostfix(
29
+ packageJson[depClause]
30
+ );
31
+ }
32
+ packageJson.devDependencies = packageJson.devDependencies ?? {};
33
+ packageJson.devDependencies[originalName] = "workspace:*";
34
+ }
35
+ return packageJson;
36
+ }
37
+ export {
38
+ convertPackageJson
39
+ };
40
+ //# sourceMappingURL=convertPackageJson.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertPackageJson.mjs","sources":["../../../../../src/monorepo/convertPackageJson.ts"],"sourcesContent":["import type { PackageJson } from \"../packageJson.js\";\n\nconst monorepoPostfix = \"-sbsources\";\nconst monorepoPostfixRegex = new RegExp(`${monorepoPostfix}$`);\n\nfunction walkOverMonorepoDepsToRemovePostfix(\n deps: Record<string, string> | undefined,\n) {\n if (!deps) {\n return undefined;\n }\n\n const res: Record<string, string> = {};\n for (const [key, value] of Object.entries(deps)) {\n if (key.endsWith(monorepoPostfix)) {\n res[key.replace(monorepoPostfixRegex, \"\")] = value;\n } else {\n res[key] = value;\n }\n }\n return res;\n}\n\nconst allDepsClauses = [\n \"dependencies\",\n \"optionalDependencies\",\n \"peerDependencies\",\n \"devDependencies\",\n] as const;\n\nexport function convertPackageJson(packageJson: PackageJson) {\n if (packageJson.name.endsWith(monorepoPostfix)) {\n const originalName = packageJson.name;\n packageJson.name = packageJson.name.replace(monorepoPostfix, \"\");\n\n for (const depClause of allDepsClauses) {\n packageJson[depClause] = walkOverMonorepoDepsToRemovePostfix(\n packageJson[depClause],\n );\n }\n\n // add the sources to the devDeps to create a wire between source and dist\n packageJson.devDependencies = packageJson.devDependencies ?? {};\n packageJson.devDependencies[originalName] = \"workspace:*\";\n }\n\n return packageJson;\n}\n"],"names":[],"mappings":"AAEA,MAAM,kBAAkB;AACxB,MAAM,uBAAuB,IAAI,OAAO,GAAG,eAAe,GAAG;AAE7D,SAAS,oCACP,MACA;AACA,MAAI,CAAC,MAAM;AACF,WAAA;AAAA,EAAA;AAGT,QAAM,MAA8B,CAAC;AACrC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC3C,QAAA,IAAI,SAAS,eAAe,GAAG;AACjC,UAAI,IAAI,QAAQ,sBAAsB,EAAE,CAAC,IAAI;AAAA,IAAA,OACxC;AACL,UAAI,GAAG,IAAI;AAAA,IAAA;AAAA,EACb;AAEK,SAAA;AACT;AAEA,MAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,mBAAmB,aAA0B;AAC3D,MAAI,YAAY,KAAK,SAAS,eAAe,GAAG;AAC9C,UAAM,eAAe,YAAY;AACjC,gBAAY,OAAO,YAAY,KAAK,QAAQ,iBAAiB,EAAE;AAE/D,eAAW,aAAa,gBAAgB;AACtC,kBAAY,SAAS,IAAI;AAAA,QACvB,YAAY,SAAS;AAAA,MACvB;AAAA,IAAA;AAIU,gBAAA,kBAAkB,YAAY,mBAAmB,CAAC;AAClD,gBAAA,gBAAgB,YAAY,IAAI;AAAA,EAAA;AAGvC,SAAA;AACT;"}