smartbundle 0.14.1 → 0.15.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +6 -1
  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 +3 -0
  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/index.d.ts +1 -1
  10. package/__compiled__/cjs/src/index.js +11 -5
  11. package/__compiled__/cjs/src/index.js.map +1 -1
  12. package/__compiled__/cjs/src/monorepo/buildAll.js +62 -0
  13. package/__compiled__/cjs/src/monorepo/buildAll.js.map +1 -0
  14. package/__compiled__/cjs/src/monorepo/convertPackageJson.d.ts +31 -0
  15. package/__compiled__/cjs/src/monorepo/convertPackageJson.js +40 -0
  16. package/__compiled__/cjs/src/monorepo/convertPackageJson.js.map +1 -0
  17. package/__compiled__/cjs/src/monorepo/createLinkPackages/createLinkPackages.js +92 -0
  18. package/__compiled__/cjs/src/monorepo/createLinkPackages/createLinkPackages.js.map +1 -0
  19. package/__compiled__/cjs/src/monorepo/link.js +11 -0
  20. package/__compiled__/cjs/src/monorepo/link.js.map +1 -0
  21. package/__compiled__/cjs/src/monorepo/parseMonorepo/parseMonorepo.js +106 -0
  22. package/__compiled__/cjs/src/monorepo/parseMonorepo/parseMonorepo.js.map +1 -0
  23. package/__compiled__/cjs/src/packageJson.d.ts +5 -0
  24. package/__compiled__/cjs/src/packageJson.js +2 -0
  25. package/__compiled__/cjs/src/packageJson.js.map +1 -1
  26. package/__compiled__/cjs/src/plugins/babel/index.js +1 -1
  27. package/__compiled__/cjs/src/plugins/babel/index.js.map +1 -1
  28. package/__compiled__/cjs/src/plugins/react/index.js +3 -2
  29. package/__compiled__/cjs/src/plugins/react/index.js.map +1 -1
  30. package/__compiled__/cjs/src/run.js +47 -8
  31. package/__compiled__/cjs/src/run.js.map +1 -1
  32. package/__compiled__/cjs/src/tasks/buildTypesTask/buildTypesTask.js +1 -3
  33. package/__compiled__/cjs/src/tasks/buildTypesTask/buildTypesTask.js.map +1 -1
  34. package/__compiled__/cjs/src/tasks/buildTypesTask/callTypescript.d.ts +2 -2
  35. package/__compiled__/cjs/src/tasks/buildTypesTask/callTypescript.js.map +1 -1
  36. package/__compiled__/cjs/src/tasks/buildTypesTask/findTypingsNames.d.ts +2 -2
  37. package/__compiled__/cjs/src/tasks/buildTypesTask/findTypingsNames.js.map +1 -1
  38. package/__compiled__/cjs/src/tasks/buildTypesTask/findTypingsPackages.d.ts +2 -2
  39. package/__compiled__/cjs/src/tasks/buildTypesTask/findTypingsPackages.js.map +1 -1
  40. package/__compiled__/cjs/src/tasks/gitignoreTask.d.ts +6 -0
  41. package/__compiled__/cjs/src/tasks/gitignoreTask.js +14 -0
  42. package/__compiled__/cjs/src/tasks/gitignoreTask.js.map +1 -0
  43. package/__compiled__/cjs/src/writePackageJson.js +2 -0
  44. package/__compiled__/cjs/src/writePackageJson.js.map +1 -1
  45. package/__compiled__/esm/src/args.d.mts +9 -1
  46. package/__compiled__/esm/src/args.mjs +3 -0
  47. package/__compiled__/esm/src/args.mjs.map +1 -1
  48. package/__compiled__/esm/src/detectModules.d.mts +25 -11
  49. package/__compiled__/esm/src/detectModules.mjs +165 -28
  50. package/__compiled__/esm/src/detectModules.mjs.map +1 -1
  51. package/__compiled__/esm/src/index.d.mts +1 -1
  52. package/__compiled__/esm/src/index.mjs +11 -5
  53. package/__compiled__/esm/src/index.mjs.map +1 -1
  54. package/__compiled__/esm/src/monorepo/buildAll.mjs +62 -0
  55. package/__compiled__/esm/src/monorepo/buildAll.mjs.map +1 -0
  56. package/__compiled__/esm/src/monorepo/convertPackageJson.d.mts +31 -0
  57. package/__compiled__/esm/src/monorepo/convertPackageJson.mjs +40 -0
  58. package/__compiled__/esm/src/monorepo/convertPackageJson.mjs.map +1 -0
  59. package/__compiled__/esm/src/monorepo/createLinkPackages/createLinkPackages.mjs +92 -0
  60. package/__compiled__/esm/src/monorepo/createLinkPackages/createLinkPackages.mjs.map +1 -0
  61. package/__compiled__/esm/src/monorepo/link.mjs +10 -0
  62. package/__compiled__/esm/src/monorepo/link.mjs.map +1 -0
  63. package/__compiled__/esm/src/monorepo/parseMonorepo/parseMonorepo.mjs +106 -0
  64. package/__compiled__/esm/src/monorepo/parseMonorepo/parseMonorepo.mjs.map +1 -0
  65. package/__compiled__/esm/src/packageJson.d.mts +5 -0
  66. package/__compiled__/esm/src/packageJson.mjs +2 -0
  67. package/__compiled__/esm/src/packageJson.mjs.map +1 -1
  68. package/__compiled__/esm/src/plugins/babel/index.mjs +1 -1
  69. package/__compiled__/esm/src/plugins/babel/index.mjs.map +1 -1
  70. package/__compiled__/esm/src/plugins/react/index.mjs +3 -2
  71. package/__compiled__/esm/src/plugins/react/index.mjs.map +1 -1
  72. package/__compiled__/esm/src/run.mjs +47 -8
  73. package/__compiled__/esm/src/run.mjs.map +1 -1
  74. package/__compiled__/esm/src/tasks/buildTypesTask/buildTypesTask.mjs +1 -3
  75. package/__compiled__/esm/src/tasks/buildTypesTask/buildTypesTask.mjs.map +1 -1
  76. package/__compiled__/esm/src/tasks/buildTypesTask/callTypescript.d.mts +2 -2
  77. package/__compiled__/esm/src/tasks/buildTypesTask/callTypescript.mjs.map +1 -1
  78. package/__compiled__/esm/src/tasks/buildTypesTask/findTypingsNames.d.mts +2 -2
  79. package/__compiled__/esm/src/tasks/buildTypesTask/findTypingsNames.mjs.map +1 -1
  80. package/__compiled__/esm/src/tasks/buildTypesTask/findTypingsPackages.d.mts +2 -2
  81. package/__compiled__/esm/src/tasks/buildTypesTask/findTypingsPackages.mjs.map +1 -1
  82. package/__compiled__/esm/src/tasks/gitignoreTask.d.mts +6 -0
  83. package/__compiled__/esm/src/tasks/gitignoreTask.mjs +14 -0
  84. package/__compiled__/esm/src/tasks/gitignoreTask.mjs.map +1 -0
  85. package/__compiled__/esm/src/writePackageJson.mjs +2 -0
  86. package/__compiled__/esm/src/writePackageJson.mjs.map +1 -1
  87. package/package.json +19 -13
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  <div align="center">
4
4
  <h3>The Library Bundler That Respects Your Time</h3>
5
-
5
+
6
6
  <p>
7
7
  <a href="#getting-started">Getting Started</a> •
8
8
  <a href="#features">Features</a> •
@@ -122,9 +122,14 @@ SmartBundle enforces certain package.json conventions to ensure reliable builds.
122
122
  - Required and banned fields
123
123
  - Configuration limitations
124
124
  - Package.json best practices
125
+ - [Monorepo support](./docs/monorepo.md)
125
126
 
126
127
  See our [package.json guide](./docs/package-json.md).
127
128
 
129
+ ## Monorepo Support
130
+
131
+ SmartBundle provides specialized tooling for monorepo projects. For detailed information about setting up and managing monorepos with SmartBundle, see our [monorepo guide](./docs/monorepo.md).
132
+
128
133
  ## FAQ
129
134
  ### SmartBundle have an issue
130
135
  Please, look at the [known fixable issues](./docs/issues.md) before creating your own one. Some bugs already have a solution but cannot be fixed without user action.
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import("../__compiled__/esm/src/monorepo/link.mjs");
@@ -4,6 +4,7 @@ export declare const args: {
4
4
  packagePath: string;
5
5
  outputDir: string;
6
6
  seq: boolean;
7
+ ci: boolean;
7
8
  _: (string | number)[];
8
9
  $0: string;
9
10
  };
@@ -15,5 +16,12 @@ type ConvertUndefinedToOptional<T> = {
15
16
  } & {
16
17
  [K in keyof T as undefined extends T[K] ? never : K]: T[K];
17
18
  };
18
- export type Args = ConvertUndefinedToOptional<Omit<OmitUnknown<typeof args>, "_" | "$0">>;
19
+ export type Monorepo = {
20
+ type: "pnpm";
21
+ devDeps: Record<string, string>;
22
+ };
23
+ export type Args = ConvertUndefinedToOptional<Omit<OmitUnknown<typeof args>, "_" | "$0">> & {
24
+ monorepo?: Monorepo;
25
+ skipGitignore?: boolean;
26
+ };
19
27
  export {};
@@ -35,6 +35,9 @@ const argsSchema = yargs().option("sourceDir", {
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."
38
+ }).option("ci", {
39
+ type: "boolean",
40
+ describe: "run in CI mode"
38
41
  }).help("help");
39
42
  const args = argsSchema.parseSync(helpers.hideBin(process__namespace.argv));
40
43
  exports.args = args;
@@ -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 .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 Args = ConvertUndefinedToOptional<\n Omit<OmitUnknown<typeof args>, \"_\" | \"$0\">\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,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()/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,23 +1,37 @@
1
1
  import { type PackageJson } from "./packageJson.js";
2
2
  import semver from "semver";
3
3
  import type { Dirs } from "./resolveDirs.js";
4
- export type TS = {
4
+ import type { Monorepo } from "./args.js";
5
+ type ModuleWithVersion<T> = T & {
6
+ version: string;
7
+ };
8
+ type TSModuleData = {
5
9
  ts: typeof import("typescript");
6
10
  parsedConfig: import("typescript").ParsedCommandLine;
7
11
  host: import("typescript").CompilerHost;
8
12
  };
13
+ type BabelModuleData = {
14
+ babel: typeof import("@babel/core");
15
+ };
16
+ type ReactModuleData = {
17
+ transform: "legacy" | "modern";
18
+ };
19
+ export type TSModule = ModuleWithVersion<TSModuleData>;
20
+ export type BabelModule = ModuleWithVersion<BabelModuleData>;
21
+ export type ReactModule = ModuleWithVersion<ReactModuleData>;
9
22
  export type DetectedModules = {
10
- ts?: TS;
11
- babel?: typeof import("@babel/core");
12
- react?: "legacy" | "modern";
23
+ ts?: TSModule;
24
+ babel?: BabelModule;
25
+ react?: ReactModule;
13
26
  };
14
- type DepType = "dependencies" | "devDependencies" | "peerDependencies" | "optionalDependencies";
15
- export declare function getMinVersion(packageJson: PackageJson, depName: string, exclude: DepType[]): semver.SemVer | null;
16
- export declare function detectModules(packageJson: PackageJson, dirs: Dirs): Promise<{
17
- error: false;
27
+ export type DetectModulesResult = {
28
+ success: true;
18
29
  modules: DetectedModules;
19
30
  } | {
20
- error: true;
21
- errors: Array<string>;
22
- }>;
31
+ success: false;
32
+ errors: string[];
33
+ };
34
+ type DepType = "dependencies" | "devDependencies" | "peerDependencies" | "optionalDependencies";
35
+ export declare function getMinVersion(packageJson: PackageJson, depName: string, exclude: DepType[]): semver.SemVer | null;
36
+ export declare function detectModules(packageJson: PackageJson, dirs: Dirs, monorepo?: Monorepo): Promise<DetectModulesResult>;
23
37
  export {};
@@ -59,20 +59,59 @@ function getMinVersion(packageJson, depName, exclude) {
59
59
  }
60
60
  return minVersion;
61
61
  }
62
- async function detectBabel(packageJson) {
62
+ async function detectBabel(packageJson, isMonorepoPackage) {
63
+ const hasBabelInPackage = getMinVersion(packageJson, "@babel/core", [
64
+ "optionalDependencies"
65
+ ]);
66
+ if (isMonorepoPackage && hasBabelInPackage) {
67
+ return {
68
+ success: false,
69
+ error: `Babel found in package-level package.json for monorepo package "${packageJson.name}".
70
+ In monorepos, build tools like Babel should be defined in the workspace root package.json, not in individual packages.
71
+ Please move "@babel/core" from this package's dependencies/devDependencies to the root package.json's devDependencies.`
72
+ };
73
+ }
63
74
  if ("@babel/core" in (packageJson.optionalDependencies ?? {})) {
64
75
  log.errorLog("babel excluded because inside optionalDependencies");
65
- return;
76
+ return {
77
+ success: false,
78
+ error: "Babel excluded because it's in optionalDependencies"
79
+ };
80
+ }
81
+ const babelVersion = getMinVersion(packageJson, "@babel/core", [
82
+ "optionalDependencies"
83
+ ]);
84
+ if (!babelVersion) {
85
+ log.errorLog("babel");
86
+ return { success: true, module: void 0 };
66
87
  }
67
88
  try {
68
89
  const babel = await import("@babel/core");
69
90
  log.okLog("babel, version:", babel.version);
70
- return babel;
91
+ return {
92
+ success: true,
93
+ module: {
94
+ babel,
95
+ version: babel.version
96
+ }
97
+ };
71
98
  } catch {
72
99
  log.errorLog("babel");
100
+ return { success: false, error: "Failed to import @babel/core" };
73
101
  }
74
102
  }
75
- async function detectReact(packageJson) {
103
+ async function detectReact(packageJson, isMonorepoPackage) {
104
+ const reactVersionInPackage = getMinVersion(packageJson, "react", [
105
+ "devDependencies"
106
+ ]);
107
+ if (isMonorepoPackage && reactVersionInPackage) {
108
+ return {
109
+ success: false,
110
+ error: `React found in package-level package.json for monorepo package "${packageJson.name}".
111
+ In monorepos, build tools like React should be defined in the workspace root package.json, not in individual packages.
112
+ Please move "react" from this package's dependencies/peerDependencies to the root package.json's dependencies or peerDependencies.`
113
+ };
114
+ }
76
115
  const reactVersion = getMinVersion(packageJson, "react", ["devDependencies"]);
77
116
  if (reactVersion) {
78
117
  const isLegacy = semver.lt(reactVersion, "17.0.0");
@@ -80,29 +119,58 @@ async function detectReact(packageJson) {
80
119
  log.okLog(
81
120
  `react, min version: ${reactVersion.version}. Transform: ${transform}`
82
121
  );
83
- return transform;
122
+ return {
123
+ success: true,
124
+ module: {
125
+ transform,
126
+ version: reactVersion.version
127
+ }
128
+ };
84
129
  }
85
130
  log.errorLog("react");
131
+ return { success: true, module: void 0 };
86
132
  }
87
- async function detectTypescript(packageJson, dirs) {
133
+ async function detectTypescript(packageJson, dirs, monorepoType) {
88
134
  const typescriptVersion = getMinVersion(packageJson, "typescript", []);
135
+ if (monorepoType != null && typescriptVersion) {
136
+ return {
137
+ success: false,
138
+ error: `TypeScript found in package-level package.json for monorepo package "${packageJson.name}".
139
+ In monorepos, build tools like TypeScript should be defined in the workspace root package.json, not in individual packages.
140
+ Please move "typescript" from this package's dependencies/devDependencies to the root package.json's devDependencies.`
141
+ };
142
+ }
89
143
  if (!typescriptVersion) {
90
144
  log.errorLog("typescript");
91
- return;
145
+ return { success: true, module: void 0 };
92
146
  }
93
147
  let ts;
94
148
  try {
95
149
  ts = (await import("typescript")).default;
96
150
  } catch {
97
- log.errorLog("typescript");
98
- return;
151
+ if (monorepoType === "pnpm") {
152
+ return {
153
+ success: false,
154
+ 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:
155
+ 1. Add "hoist-workspace-packages=true" to your pnpm-workspace.yaml file (recommended), or
156
+ 2. Add "public-hoist-pattern[]=[\\"typescript\\"]" to your pnpm-workspace.yaml file, or
157
+ 3. Add "typescript" as a devDependency in each package's package.json
158
+ See https://pnpm.io/settings#dependency-hoisting-settings for more details.`
159
+ };
160
+ } else {
161
+ return {
162
+ success: false,
163
+ error: 'smartbundle found the .ts entrypoint but required "typescript" to build .d.ts files. Please install the "typescript" dependency.'
164
+ };
165
+ }
99
166
  }
100
167
  log.okLog("typescript, version:", ts.version);
101
168
  const configFilePath = ts.findConfigFile(dirs.sourceDir, ts.sys.fileExists);
102
169
  if (!configFilePath) {
103
- throw new Error(
104
- "Cannot find a tsconfig.json file. You should declare it. Please, read the https://github.com/XaveScor/smartbundle/issues/131 for more information"
105
- );
170
+ return {
171
+ success: false,
172
+ error: "Cannot find a tsconfig.json file. You should declare it. Please, read the https://github.com/XaveScor/smartbundle/issues/131 for more information"
173
+ };
106
174
  }
107
175
  const configFile = ts.readConfigFile(configFilePath, ts.sys.readFile);
108
176
  if (configFile.error) {
@@ -110,7 +178,10 @@ async function detectTypescript(packageJson, dirs) {
110
178
  configFile.error.messageText,
111
179
  "\n"
112
180
  );
113
- throw new Error(`Cannot read tsconfig.json file, error: ${readableError}`);
181
+ return {
182
+ success: false,
183
+ error: `Cannot read tsconfig.json file, error: ${readableError}`
184
+ };
114
185
  }
115
186
  const parsedConfig = ts.parseJsonConfigFileContent(
116
187
  configFile.config,
@@ -132,25 +203,91 @@ async function detectTypescript(packageJson, dirs) {
132
203
  configFilePath
133
204
  );
134
205
  if (!parsedConfig.options.verbatimModuleSyntax) {
135
- throw new Error(
136
- "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"
137
- );
206
+ return {
207
+ success: false,
208
+ 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"
209
+ };
138
210
  }
139
211
  const host = ts.createCompilerHost(parsedConfig.options);
140
- return { ts, parsedConfig, host };
212
+ return {
213
+ success: true,
214
+ module: {
215
+ ts,
216
+ parsedConfig,
217
+ host,
218
+ version: ts.version
219
+ }
220
+ };
141
221
  }
142
- async function detectModules(packageJson, dirs) {
143
- try {
144
- const result = {};
145
- log.log("Detecting modules");
146
- result.ts = await detectTypescript(packageJson, dirs);
147
- result.babel = await detectBabel(packageJson);
148
- result.react = await detectReact(packageJson);
149
- log.lineLog();
150
- return { error: false, modules: result };
151
- } catch (e) {
152
- return { error: true, errors: [e.message] };
222
+ async function detectModules(packageJson, dirs, monorepo) {
223
+ if (!monorepo) {
224
+ return detectPackageModules(packageJson, dirs);
225
+ }
226
+ const packageValidation = await detectPackageModules(
227
+ packageJson,
228
+ dirs,
229
+ monorepo.type
230
+ );
231
+ const errors = [];
232
+ if (!packageValidation.success) {
233
+ errors.push(...packageValidation.errors);
234
+ } else {
235
+ if (packageValidation.modules.ts) {
236
+ errors.push(
237
+ `Package "${packageJson.name}" has ts/babel in package.json, but it's not allowed in monorepo.`
238
+ );
239
+ }
240
+ if (packageValidation.modules.babel) {
241
+ errors.push(
242
+ `Package "${packageJson.name}" has babel in package.json, but it's not allowed in monorepo.`
243
+ );
244
+ }
245
+ }
246
+ const mergedPackageJson = {
247
+ ...packageJson,
248
+ devDependencies: {
249
+ ...monorepo.devDeps,
250
+ ...packageJson.devDependencies
251
+ }
252
+ };
253
+ const result = await detectPackageModules(mergedPackageJson, dirs);
254
+ if (!result.success) {
255
+ errors.push(...result.errors);
256
+ }
257
+ if (errors.length > 0) {
258
+ return { success: false, errors };
259
+ }
260
+ return result;
261
+ }
262
+ async function detectPackageModules(packageJson, dirs, monorepoType) {
263
+ log.log("Detecting modules");
264
+ const [tsResult, babelResult, reactResult] = await Promise.all([
265
+ detectTypescript(packageJson, dirs, monorepoType),
266
+ detectBabel(packageJson, monorepoType != null),
267
+ detectReact(packageJson, monorepoType != null)
268
+ ]);
269
+ const errors = [];
270
+ const modules = {};
271
+ if (!tsResult.success) {
272
+ errors.push(tsResult.error);
273
+ } else if (tsResult.module) {
274
+ modules.ts = tsResult.module;
275
+ }
276
+ if (!babelResult.success) {
277
+ errors.push(babelResult.error);
278
+ } else if (babelResult.module) {
279
+ modules.babel = babelResult.module;
280
+ }
281
+ if (!reactResult.success) {
282
+ errors.push(reactResult.error);
283
+ } else if (reactResult.module) {
284
+ modules.react = reactResult.module;
285
+ }
286
+ log.lineLog();
287
+ if (errors.length > 0) {
288
+ return { success: false, errors };
153
289
  }
290
+ return { success: true, modules };
154
291
  }
155
292
  exports.detectModules = detectModules;
156
293
  exports.getMinVersion = getMinVersion;
@@ -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\";\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":["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 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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"}
@@ -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;
@@ -11,6 +11,7 @@ const buildTypesTask = require("./tasks/buildTypesTask/buildTypesTask.js");
11
11
  const error = require("./error.js");
12
12
  const jsFilesTask = require("./tasks/jsFilesTask.js");
13
13
  const binsTask = require("./tasks/binsTask.js");
14
+ const gitignoreTask = require("./tasks/gitignoreTask.js");
14
15
  const detectModules = require("./detectModules.js");
15
16
  const log = require("./log.js");
16
17
  const pipeline = require("./pipeline.js");
@@ -33,8 +34,8 @@ async function defineViteConfig(args = {}) {
33
34
  console.error(packageJson$1);
34
35
  throw new Error("Failed to parse package.json");
35
36
  }
36
- const modulesResult = await detectModules.detectModules(packageJson$1, dirs);
37
- if (modulesResult.error) {
37
+ const modulesResult = await detectModules.detectModules(packageJson$1, dirs, args.monorepo);
38
+ if (!modulesResult.success) {
38
39
  return { error: true, errors: modulesResult.errors };
39
40
  }
40
41
  const { modules } = modulesResult;
@@ -51,12 +52,12 @@ async function run(args) {
51
52
  const { sourceDir, outDir, packagePath, outBinsDir } = dirs;
52
53
  await fs.rm(outDir, { recursive: true, force: true });
53
54
  await fs.mkdir(outDir, { recursive: true });
54
- const packageJson$1 = await packageJson.parsePackageJson({ sourceDir, packagePath });
55
+ let packageJson$1 = await packageJson.parsePackageJson({ sourceDir, packagePath });
55
56
  if (Array.isArray(packageJson$1)) {
56
57
  return { error: true, errors: packageJson$1 };
57
58
  }
58
- const modulesResult = await detectModules.detectModules(packageJson$1, dirs);
59
- if (modulesResult.error) {
59
+ const modulesResult = await detectModules.detectModules(packageJson$1, dirs, args.monorepo);
60
+ if (!modulesResult.success) {
60
61
  return { error: true, errors: modulesResult.errors };
61
62
  }
62
63
  const { modules } = modulesResult;
@@ -131,6 +132,11 @@ async function run(args) {
131
132
  exportsMap,
132
133
  binsMap
133
134
  });
135
+ if (!args.skipGitignore) {
136
+ await gitignoreTask.gitignoreTask({
137
+ dirs
138
+ });
139
+ }
134
140
  log.lineLog();
135
141
  log.log(`Build finished: ./${path.relative(sourceDir, outDir)}`);
136
142
  return { error: false };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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":["disableLog","resolveDirs","rm","mkdir","packageJson","parsePackageJson","detectModules","createViteConfig","runSettled","copyStaticFilesTask","buildTypesTask","relative","viteTask","jsFilesTask","binsTask","promiseSettledResultErrors","PrettyError","BuildError","writePackageJson","lineLog","log"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","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":["disableLog","resolveDirs","rm","mkdir","packageJson","parsePackageJson","detectModules","createViteConfig","runSettled","copyStaticFilesTask","buildTypesTask","relative","viteTask","jsFilesTask","binsTask","promiseSettledResultErrors","PrettyError","BuildError","writePackageJson","gitignoreTask","lineLog","log"],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const path = require("node:path");
4
+ const parseMonorepo = require("./parseMonorepo/parseMonorepo.js");
5
+ const _ = require("../index.js");
6
+ require("../args.js");
7
+ const log = require("../log.js");
8
+ const PrettyErrors = require("../PrettyErrors.js");
9
+ async function buildMonorepo(args) {
10
+ const sourceDir = args.sourceDir || process.cwd();
11
+ const { monorepo, projectPaths } = await parseMonorepo.parseMonorepo({ sourceDir });
12
+ if (!monorepo) {
13
+ throw new PrettyErrors.PrettyError("Not a monorepo - pnpm-workspace.yaml not found");
14
+ }
15
+ if (projectPaths.length === 0) {
16
+ throw new PrettyErrors.PrettyError(
17
+ "No packages with -sbsources suffix found in monorepo"
18
+ );
19
+ }
20
+ log.log(`Found ${projectPaths.length} packages to build in monorepo`);
21
+ log.lineLog();
22
+ const result = {
23
+ totalPackages: projectPaths.length,
24
+ successfulBuilds: 0,
25
+ failedBuilds: 0,
26
+ errors: []
27
+ };
28
+ for (let i = 0; i < projectPaths.length; i++) {
29
+ const packagePath = projectPaths[i];
30
+ const packageSourceDir = path.join(sourceDir, packagePath);
31
+ log.log(`[${i + 1}/${projectPaths.length}] Building ${packagePath}...`);
32
+ const packageArgs = {
33
+ ...args,
34
+ sourceDir: packageSourceDir,
35
+ packagePath: path.join(packageSourceDir, "package.json"),
36
+ outputDir: path.join(packageSourceDir, "dist"),
37
+ monorepo
38
+ };
39
+ const buildResult = await _.run(packageArgs);
40
+ if (buildResult.error) {
41
+ result.failedBuilds++;
42
+ result.errors.push({
43
+ packagePath,
44
+ errors: buildResult.errors
45
+ });
46
+ log.log(
47
+ `[${i + 1}/${projectPaths.length}] ❌ Failed to build ${packagePath}`
48
+ );
49
+ } else {
50
+ result.successfulBuilds++;
51
+ log.log(`[${i + 1}/${projectPaths.length}] ✅ Built ${packagePath}`);
52
+ }
53
+ log.lineLog();
54
+ }
55
+ log.log(`Monorepo build completed:`);
56
+ log.log(` Total packages: ${result.totalPackages}`);
57
+ log.log(` Successful: ${result.successfulBuilds}`);
58
+ log.log(` Failed: ${result.failedBuilds}`);
59
+ return result;
60
+ }
61
+ exports.buildMonorepo = buildMonorepo;
62
+ //# sourceMappingURL=buildAll.js.map
@@ -0,0 +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,MAAM;AAAA,MACxC;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;;"}
@@ -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
+ };