smartbundle 0.12.4 → 0.13.0-alpha.0

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 (65) hide show
  1. package/__compiled__/cjs/src/PrettyErrors.d.ts +2 -0
  2. package/__compiled__/cjs/src/PrettyErrors.js +6 -0
  3. package/__compiled__/cjs/src/PrettyErrors.js.map +1 -0
  4. package/__compiled__/cjs/src/createViteConfig.d.ts +2 -1
  5. package/__compiled__/cjs/src/createViteConfig.js +8 -35
  6. package/__compiled__/cjs/src/createViteConfig.js.map +1 -1
  7. package/__compiled__/cjs/src/index.d.ts +2 -1
  8. package/__compiled__/cjs/src/index.js +10 -1
  9. package/__compiled__/cjs/src/index.js.map +1 -1
  10. package/__compiled__/cjs/src/plugins/babel/index.js +2 -6
  11. package/__compiled__/cjs/src/plugins/babel/index.js.map +1 -1
  12. package/__compiled__/cjs/src/plugins/imports/ImportError.d.ts +7 -0
  13. package/__compiled__/cjs/src/plugins/imports/ImportError.js +35 -0
  14. package/__compiled__/cjs/src/plugins/imports/ImportError.js.map +1 -0
  15. package/__compiled__/cjs/src/plugins/imports/index.d.ts +3 -0
  16. package/__compiled__/cjs/src/plugins/imports/index.js +89 -0
  17. package/__compiled__/cjs/src/plugins/imports/index.js.map +1 -0
  18. package/__compiled__/cjs/src/promiseSettledResultErrors.js +1 -1
  19. package/__compiled__/cjs/src/promiseSettledResultErrors.js.map +1 -1
  20. package/__compiled__/cjs/src/run.js +13 -4
  21. package/__compiled__/cjs/src/run.js.map +1 -1
  22. package/__compiled__/cjs/src/tasks/buildTypesTask/callTypescript.js +8 -1
  23. package/__compiled__/cjs/src/tasks/buildTypesTask/callTypescript.js.map +1 -1
  24. package/__compiled__/cjs/src/tasks/buildTypesTask/findTypingsNames.d.ts +2 -1
  25. package/__compiled__/cjs/src/tasks/buildTypesTask/findTypingsNames.js +12 -30
  26. package/__compiled__/cjs/src/tasks/buildTypesTask/findTypingsNames.js.map +1 -1
  27. package/__compiled__/cjs/src/tasks/buildTypesTask/findTypingsPackages.d.ts +2 -1
  28. package/__compiled__/cjs/src/tasks/buildTypesTask/findTypingsPackages.js +13 -13
  29. package/__compiled__/cjs/src/tasks/buildTypesTask/findTypingsPackages.js.map +1 -1
  30. package/__compiled__/cjs/src/tasks/viteTask.d.ts +1 -11
  31. package/__compiled__/cjs/src/tasks/viteTask.js +11 -5
  32. package/__compiled__/cjs/src/tasks/viteTask.js.map +1 -1
  33. package/__compiled__/esm/src/PrettyErrors.d.mts +2 -0
  34. package/__compiled__/esm/src/PrettyErrors.mjs +6 -0
  35. package/__compiled__/esm/src/PrettyErrors.mjs.map +1 -0
  36. package/__compiled__/esm/src/createViteConfig.d.mts +2 -1
  37. package/__compiled__/esm/src/createViteConfig.mjs +4 -31
  38. package/__compiled__/esm/src/createViteConfig.mjs.map +1 -1
  39. package/__compiled__/esm/src/index.d.mts +2 -1
  40. package/__compiled__/esm/src/index.mjs +10 -1
  41. package/__compiled__/esm/src/index.mjs.map +1 -1
  42. package/__compiled__/esm/src/plugins/babel/index.mjs +2 -6
  43. package/__compiled__/esm/src/plugins/babel/index.mjs.map +1 -1
  44. package/__compiled__/esm/src/plugins/imports/ImportError.d.mts +7 -0
  45. package/__compiled__/esm/src/plugins/imports/ImportError.mjs +35 -0
  46. package/__compiled__/esm/src/plugins/imports/ImportError.mjs.map +1 -0
  47. package/__compiled__/esm/src/plugins/imports/index.d.mts +3 -0
  48. package/__compiled__/esm/src/plugins/imports/index.mjs +72 -0
  49. package/__compiled__/esm/src/plugins/imports/index.mjs.map +1 -0
  50. package/__compiled__/esm/src/promiseSettledResultErrors.mjs +1 -1
  51. package/__compiled__/esm/src/promiseSettledResultErrors.mjs.map +1 -1
  52. package/__compiled__/esm/src/run.mjs +13 -4
  53. package/__compiled__/esm/src/run.mjs.map +1 -1
  54. package/__compiled__/esm/src/tasks/buildTypesTask/callTypescript.mjs +8 -1
  55. package/__compiled__/esm/src/tasks/buildTypesTask/callTypescript.mjs.map +1 -1
  56. package/__compiled__/esm/src/tasks/buildTypesTask/findTypingsNames.d.mts +2 -1
  57. package/__compiled__/esm/src/tasks/buildTypesTask/findTypingsNames.mjs +3 -4
  58. package/__compiled__/esm/src/tasks/buildTypesTask/findTypingsNames.mjs.map +1 -1
  59. package/__compiled__/esm/src/tasks/buildTypesTask/findTypingsPackages.d.mts +2 -1
  60. package/__compiled__/esm/src/tasks/buildTypesTask/findTypingsPackages.mjs +5 -4
  61. package/__compiled__/esm/src/tasks/buildTypesTask/findTypingsPackages.mjs.map +1 -1
  62. package/__compiled__/esm/src/tasks/viteTask.d.mts +1 -11
  63. package/__compiled__/esm/src/tasks/viteTask.mjs +11 -5
  64. package/__compiled__/esm/src/tasks/viteTask.mjs.map +1 -1
  65. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"findTypingsNames.js","sources":["../../../../../../src/tasks/buildTypesTask/findTypingsNames.ts"],"sourcesContent":["import * as ts from \"typescript\";\nimport { join, relative } from \"node:path\";\nimport { readdirSync, statSync } from \"node:fs\";\n\nfunction createCompilerHostWithVirtualSource(sourceDir: string) {\n return ts.createCompilerHost({\n target: ts.ScriptTarget.ESNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n baseUrl: \".\",\n sourceRoot: sourceDir,\n noEmit: true,\n emitDeclarationOnly: true,\n noEmitOnError: true,\n });\n}\n\n/*\nChatGPT told me we need to specify all files in rootNames for the program to work correctly.\n */\nfunction collectAllFilesInDir(sourceDir: string, ext: string) {\n const files = readdirSync(sourceDir);\n const ret = new Array<string>();\n for (const file of files) {\n // check if the file is a directory\n const stat = statSync(join(sourceDir, file));\n if (stat.isDirectory()) {\n ret.push(...collectAllFilesInDir(join(sourceDir, file), ext));\n } else if (file.endsWith(ext)) {\n ret.push(join(sourceDir, file));\n }\n }\n\n return ret;\n}\n\nexport function findTypingsNames(\n entrypoint: string,\n sourceDir: string,\n ext: string,\n) {\n const host = createCompilerHostWithVirtualSource(sourceDir);\n const program = ts.createProgram({\n rootNames: collectAllFilesInDir(sourceDir, ext),\n options: {},\n host,\n });\n\n const packages = new Set<string>();\n const processedFiles = new Set<string>();\n const filesQueue = [relative(sourceDir, entrypoint)];\n\n function processModuleSpecifier(moduleSpecifier: ts.StringLiteral) {\n const moduleName = moduleSpecifier.text;\n if (moduleName.startsWith(\".\")) {\n filesQueue.push(moduleName.replace(/\\.js$/, ext));\n return;\n }\n\n packages.add(moduleName);\n }\n\n while (filesQueue.length > 0) {\n const relativeCurrentFile = filesQueue.pop()!;\n const currentFile = join(sourceDir, relativeCurrentFile);\n if (processedFiles.has(currentFile)) continue;\n\n const sourceFile = program.getSourceFile(currentFile);\n if (!sourceFile) continue;\n\n function visit(node: ts.Node) {\n // import \"moduleSpecifier\";\n if (\n ts.isImportDeclaration(node) &&\n ts.isStringLiteral(node.moduleSpecifier)\n ) {\n processModuleSpecifier(node.moduleSpecifier);\n }\n\n // Generic<import(\"node\")>;\n if (\n ts.isImportTypeNode(node) &&\n ts.isLiteralTypeNode(node.argument) &&\n ts.isStringLiteral(node.argument.literal)\n ) {\n processModuleSpecifier(node.argument.literal);\n }\n\n // export * from \"moduleSpecifier\";\n if (\n ts.isExportDeclaration(node) &&\n node.moduleSpecifier &&\n ts.isStringLiteral(node.moduleSpecifier)\n ) {\n processModuleSpecifier(node.moduleSpecifier);\n }\n\n ts.forEachChild(node, visit);\n }\n\n processedFiles.add(currentFile);\n\n ts.forEachChild(sourceFile, visit);\n }\n\n return packages;\n}\n"],"names":["ts","readdirSync","statSync","join","relative"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAIA,SAAS,oCAAoC,WAAmB;AAC9D,SAAOA,cAAG,mBAAmB;AAAA,IAC3B,QAAQA,cAAG,aAAa;AAAA,IACxB,kBAAkBA,cAAG,qBAAqB;AAAA,IAC1C,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,qBAAqB;AAAA,IACrB,eAAe;AAAA,EAAA,CAChB;AACH;AAKA,SAAS,qBAAqB,WAAmB,KAAa;AACtD,QAAA,QAAQC,eAAY,SAAS;AAC7B,QAAA,MAAM,IAAI,MAAc;AAC9B,aAAW,QAAQ,OAAO;AAExB,UAAM,OAAOC,GAAA,SAASC,KAAK,KAAA,WAAW,IAAI,CAAC;AACvC,QAAA,KAAK,eAAe;AAClB,UAAA,KAAK,GAAG,qBAAqBA,KAAAA,KAAK,WAAW,IAAI,GAAG,GAAG,CAAC;AAAA,IACnD,WAAA,KAAK,SAAS,GAAG,GAAG;AAC7B,UAAI,KAAKA,KAAAA,KAAK,WAAW,IAAI,CAAC;AAAA,IAAA;AAAA,EAChC;AAGK,SAAA;AACT;AAEgB,SAAA,iBACd,YACA,WACA,KACA;AACM,QAAA,OAAO,oCAAoC,SAAS;AACpD,QAAA,UAAUH,cAAG,cAAc;AAAA,IAC/B,WAAW,qBAAqB,WAAW,GAAG;AAAA,IAC9C,SAAS,CAAC;AAAA,IACV;AAAA,EAAA,CACD;AAEK,QAAA,+BAAe,IAAY;AAC3B,QAAA,qCAAqB,IAAY;AACvC,QAAM,aAAa,CAACI,KAAAA,SAAS,WAAW,UAAU,CAAC;AAEnD,WAAS,uBAAuB,iBAAmC;AACjE,UAAM,aAAa,gBAAgB;AAC/B,QAAA,WAAW,WAAW,GAAG,GAAG;AAC9B,iBAAW,KAAK,WAAW,QAAQ,SAAS,GAAG,CAAC;AAChD;AAAA,IAAA;AAGF,aAAS,IAAI,UAAU;AAAA,EAAA;AAGlB,SAAA,WAAW,SAAS,GAAG;AAQnB,QAAA,QAAT,SAAe,MAAe;AAG1B,UAAAJ,cAAG,oBAAoB,IAAI,KAC3BA,cAAG,gBAAgB,KAAK,eAAe,GACvC;AACA,+BAAuB,KAAK,eAAe;AAAA,MAAA;AAI7C,UACEA,cAAG,iBAAiB,IAAI,KACxBA,cAAG,kBAAkB,KAAK,QAAQ,KAClCA,cAAG,gBAAgB,KAAK,SAAS,OAAO,GACxC;AACuB,+BAAA,KAAK,SAAS,OAAO;AAAA,MAAA;AAK5C,UAAAA,cAAG,oBAAoB,IAAI,KAC3B,KAAK,mBACLA,cAAG,gBAAgB,KAAK,eAAe,GACvC;AACA,+BAAuB,KAAK,eAAe;AAAA,MAAA;AAG1CA,oBAAA,aAAa,MAAM,KAAK;AAAA,IAC7B;AAnCM,UAAA,sBAAsB,WAAW,IAAI;AACrC,UAAA,cAAcG,KAAAA,KAAK,WAAW,mBAAmB;AACnD,QAAA,eAAe,IAAI,WAAW,EAAG;AAE/B,UAAA,aAAa,QAAQ,cAAc,WAAW;AACpD,QAAI,CAAC,WAAY;AAgCjB,mBAAe,IAAI,WAAW;AAE3BH,kBAAA,aAAa,YAAY,KAAK;AAAA,EAAA;AAG5B,SAAA;AACT;;"}
1
+ {"version":3,"file":"findTypingsNames.js","sources":["../../../../../../src/tasks/buildTypesTask/findTypingsNames.ts"],"sourcesContent":["import type * as ts from \"typescript\";\nimport { join, relative } from \"node:path\";\nimport { readdirSync, statSync } from \"node:fs\";\nimport type { TS } from \"../../detectModules.js\";\n\nfunction createCompilerHostWithVirtualSource(ts: TS[\"ts\"], sourceDir: string) {\n return ts.createCompilerHost({\n target: ts.ScriptTarget.ESNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n baseUrl: \".\",\n sourceRoot: sourceDir,\n noEmit: true,\n emitDeclarationOnly: true,\n noEmitOnError: true,\n });\n}\n\n/*\nChatGPT told me we need to specify all files in rootNames for the program to work correctly.\n */\nfunction collectAllFilesInDir(sourceDir: string, ext: string) {\n const files = readdirSync(sourceDir);\n const ret = new Array<string>();\n for (const file of files) {\n // check if the file is a directory\n const stat = statSync(join(sourceDir, file));\n if (stat.isDirectory()) {\n ret.push(...collectAllFilesInDir(join(sourceDir, file), ext));\n } else if (file.endsWith(ext)) {\n ret.push(join(sourceDir, file));\n }\n }\n\n return ret;\n}\n\nexport function findTypingsNames(\n { ts }: TS,\n entrypoint: string,\n sourceDir: string,\n ext: string,\n) {\n const host = createCompilerHostWithVirtualSource(ts, sourceDir);\n const program = ts.createProgram({\n rootNames: collectAllFilesInDir(sourceDir, ext),\n options: {},\n host,\n });\n\n const packages = new Set<string>();\n const processedFiles = new Set<string>();\n const filesQueue = [relative(sourceDir, entrypoint)];\n\n function processModuleSpecifier(moduleSpecifier: ts.StringLiteral) {\n const moduleName = moduleSpecifier.text;\n if (moduleName.startsWith(\".\")) {\n filesQueue.push(moduleName.replace(/\\.js$/, ext));\n return;\n }\n\n packages.add(moduleName);\n }\n\n while (filesQueue.length > 0) {\n const relativeCurrentFile = filesQueue.pop()!;\n const currentFile = join(sourceDir, relativeCurrentFile);\n if (processedFiles.has(currentFile)) continue;\n\n const sourceFile = program.getSourceFile(currentFile);\n if (!sourceFile) continue;\n\n function visit(node: ts.Node) {\n // import \"moduleSpecifier\";\n if (\n ts.isImportDeclaration(node) &&\n ts.isStringLiteral(node.moduleSpecifier)\n ) {\n processModuleSpecifier(node.moduleSpecifier);\n }\n\n // Generic<import(\"node\")>;\n if (\n ts.isImportTypeNode(node) &&\n ts.isLiteralTypeNode(node.argument) &&\n ts.isStringLiteral(node.argument.literal)\n ) {\n processModuleSpecifier(node.argument.literal);\n }\n\n // export * from \"moduleSpecifier\";\n if (\n ts.isExportDeclaration(node) &&\n node.moduleSpecifier &&\n ts.isStringLiteral(node.moduleSpecifier)\n ) {\n processModuleSpecifier(node.moduleSpecifier);\n }\n\n ts.forEachChild(node, visit);\n }\n\n processedFiles.add(currentFile);\n\n ts.forEachChild(sourceFile, visit);\n }\n\n return packages;\n}\n"],"names":["readdirSync","statSync","join","relative"],"mappings":";;;;AAKA,SAAS,oCAAoC,IAAc,WAAmB;AAC5E,SAAO,GAAG,mBAAmB;AAAA,IAC3B,QAAQ,GAAG,aAAa;AAAA,IACxB,kBAAkB,GAAG,qBAAqB;AAAA,IAC1C,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,qBAAqB;AAAA,IACrB,eAAe;AAAA,EAAA,CAChB;AACH;AAKA,SAAS,qBAAqB,WAAmB,KAAa;AACtD,QAAA,QAAQA,eAAY,SAAS;AAC7B,QAAA,MAAM,IAAI,MAAc;AAC9B,aAAW,QAAQ,OAAO;AAExB,UAAM,OAAOC,GAAA,SAASC,KAAK,KAAA,WAAW,IAAI,CAAC;AACvC,QAAA,KAAK,eAAe;AAClB,UAAA,KAAK,GAAG,qBAAqBA,KAAAA,KAAK,WAAW,IAAI,GAAG,GAAG,CAAC;AAAA,IACnD,WAAA,KAAK,SAAS,GAAG,GAAG;AAC7B,UAAI,KAAKA,KAAAA,KAAK,WAAW,IAAI,CAAC;AAAA,IAAA;AAAA,EAChC;AAGK,SAAA;AACT;AAEO,SAAS,iBACd,EAAE,GAAA,GACF,YACA,WACA,KACA;AACM,QAAA,OAAO,oCAAoC,IAAI,SAAS;AACxD,QAAA,UAAU,GAAG,cAAc;AAAA,IAC/B,WAAW,qBAAqB,WAAW,GAAG;AAAA,IAC9C,SAAS,CAAC;AAAA,IACV;AAAA,EAAA,CACD;AAEK,QAAA,+BAAe,IAAY;AAC3B,QAAA,qCAAqB,IAAY;AACvC,QAAM,aAAa,CAACC,KAAAA,SAAS,WAAW,UAAU,CAAC;AAEnD,WAAS,uBAAuB,iBAAmC;AACjE,UAAM,aAAa,gBAAgB;AAC/B,QAAA,WAAW,WAAW,GAAG,GAAG;AAC9B,iBAAW,KAAK,WAAW,QAAQ,SAAS,GAAG,CAAC;AAChD;AAAA,IAAA;AAGF,aAAS,IAAI,UAAU;AAAA,EAAA;AAGlB,SAAA,WAAW,SAAS,GAAG;AAQnB,QAAA,QAAT,SAAe,MAAe;AAG1B,UAAA,GAAG,oBAAoB,IAAI,KAC3B,GAAG,gBAAgB,KAAK,eAAe,GACvC;AACA,+BAAuB,KAAK,eAAe;AAAA,MAAA;AAI7C,UACE,GAAG,iBAAiB,IAAI,KACxB,GAAG,kBAAkB,KAAK,QAAQ,KAClC,GAAG,gBAAgB,KAAK,SAAS,OAAO,GACxC;AACuB,+BAAA,KAAK,SAAS,OAAO;AAAA,MAAA;AAK5C,UAAA,GAAG,oBAAoB,IAAI,KAC3B,KAAK,mBACL,GAAG,gBAAgB,KAAK,eAAe,GACvC;AACA,+BAAuB,KAAK,eAAe;AAAA,MAAA;AAG1C,SAAA,aAAa,MAAM,KAAK;AAAA,IAC7B;AAnCM,UAAA,sBAAsB,WAAW,IAAI;AACrC,UAAA,cAAcD,KAAAA,KAAK,WAAW,mBAAmB;AACnD,QAAA,eAAe,IAAI,WAAW,EAAG;AAE/B,UAAA,aAAa,QAAQ,cAAc,WAAW;AACpD,QAAI,CAAC,WAAY;AAgCjB,mBAAe,IAAI,WAAW;AAE3B,OAAA,aAAa,YAAY,KAAK;AAAA,EAAA;AAG5B,SAAA;AACT;;"}
@@ -1,4 +1,5 @@
1
- export declare function findTypingsPackages(packages: Set<string>, sourceDir: string): {
1
+ import type { TS } from "../../detectModules.js";
2
+ export declare function findTypingsPackages({ ts }: TS, packages: Set<string>, sourceDir: string): {
2
3
  missingTypings: Set<string>;
3
4
  existingTypingPackages: Set<string>;
4
5
  };
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const ts = require("typescript");
4
3
  const path = require("node:path");
5
4
  function _interopNamespaceDefault(e) {
6
5
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
@@ -18,12 +17,11 @@ function _interopNamespaceDefault(e) {
18
17
  n.default = e;
19
18
  return Object.freeze(n);
20
19
  }
21
- const ts__namespace = /* @__PURE__ */ _interopNamespaceDefault(ts);
22
20
  const path__namespace = /* @__PURE__ */ _interopNamespaceDefault(path);
23
- function createVirtualHostFunctions(virtualFilePath, virtualSourceContent, originalHost) {
21
+ function createVirtualHostFunctions(ts, virtualFilePath, virtualSourceContent, originalHost) {
24
22
  const getSourceFile = (fileName, languageVersion) => {
25
23
  if (fileName === virtualFilePath) {
26
- return ts__namespace.createSourceFile(
24
+ return ts.createSourceFile(
27
25
  fileName,
28
26
  virtualSourceContent,
29
27
  languageVersion
@@ -49,13 +47,13 @@ function createVirtualHostFunctions(virtualFilePath, virtualSourceContent, origi
49
47
  readFile
50
48
  };
51
49
  }
52
- function createCompilerHostWithVirtualSource(packages, sourceDir) {
50
+ function createCompilerHostWithVirtualSource(ts, packages, sourceDir) {
53
51
  const virtualSourceContent = [...packages].map((p) => `import "${p}";`).join("\n") + // for ignoring the `Generated an empty chunk: "."` error
54
52
  "export const a = 1;\n";
55
53
  const virtualFilePath = path__namespace.join(sourceDir, "virtual.ts");
56
- const originalHost = ts__namespace.createCompilerHost({
57
- target: ts__namespace.ScriptTarget.ESNext,
58
- moduleResolution: ts__namespace.ModuleResolutionKind.NodeNext,
54
+ const originalHost = ts.createCompilerHost({
55
+ target: ts.ScriptTarget.ESNext,
56
+ moduleResolution: ts.ModuleResolutionKind.NodeNext,
59
57
  baseUrl: ".",
60
58
  sourceRoot: sourceDir,
61
59
  noEmit: true,
@@ -66,6 +64,7 @@ function createCompilerHostWithVirtualSource(packages, sourceDir) {
66
64
  }
67
65
  });
68
66
  const virtualFunctions = createVirtualHostFunctions(
67
+ ts,
69
68
  virtualFilePath,
70
69
  virtualSourceContent,
71
70
  originalHost
@@ -79,12 +78,13 @@ function createCompilerHostWithVirtualSource(packages, sourceDir) {
79
78
  virtualFilePath
80
79
  };
81
80
  }
82
- function findTypingsPackages(packages, sourceDir) {
81
+ function findTypingsPackages({ ts }, packages, sourceDir) {
83
82
  const { host, virtualFilePath } = createCompilerHostWithVirtualSource(
83
+ ts,
84
84
  packages,
85
85
  sourceDir
86
86
  );
87
- const program = ts__namespace.createProgram({
87
+ const program = ts.createProgram({
88
88
  rootNames: [virtualFilePath],
89
89
  options: {},
90
90
  host
@@ -99,10 +99,10 @@ function findTypingsPackages(packages, sourceDir) {
99
99
  const existingTypingPackages = /* @__PURE__ */ new Set();
100
100
  sourceFile.forEachChild((node) => {
101
101
  var _a;
102
- if (ts__namespace.isImportDeclaration(node)) {
102
+ if (ts.isImportDeclaration(node)) {
103
103
  const moduleSpecifier = node.moduleSpecifier;
104
- if (ts__namespace.isStringLiteral(moduleSpecifier)) {
105
- const moduleResolution = ts__namespace.resolveModuleName(
104
+ if (ts.isStringLiteral(moduleSpecifier)) {
105
+ const moduleResolution = ts.resolveModuleName(
106
106
  moduleSpecifier.text,
107
107
  virtualFilePath,
108
108
  {},
@@ -1 +1 @@
1
- {"version":3,"file":"findTypingsPackages.js","sources":["../../../../../../src/tasks/buildTypesTask/findTypingsPackages.ts"],"sourcesContent":["import * as ts from \"typescript\";\nimport * as path from \"node:path\";\n\ntype HostFunctions = {\n getSourceFile: ts.CompilerHost[\"getSourceFile\"];\n fileExists: ts.CompilerHost[\"fileExists\"];\n readFile: ts.CompilerHost[\"readFile\"];\n};\n\nfunction createVirtualHostFunctions(\n virtualFilePath: string,\n virtualSourceContent: string,\n originalHost: ts.CompilerHost,\n): HostFunctions {\n const getSourceFile: ts.CompilerHost[\"getSourceFile\"] = (\n fileName,\n languageVersion,\n ) => {\n if (fileName === virtualFilePath) {\n return ts.createSourceFile(\n fileName,\n virtualSourceContent,\n languageVersion,\n );\n }\n return originalHost.getSourceFile(fileName, languageVersion);\n };\n\n const fileExists: ts.CompilerHost[\"fileExists\"] = (fileName) => {\n if (fileName === virtualFilePath) {\n return true;\n }\n return originalHost.fileExists(fileName);\n };\n\n const readFile: ts.CompilerHost[\"readFile\"] = (fileName) => {\n if (fileName === virtualFilePath) {\n return virtualSourceContent;\n }\n return originalHost.readFile(fileName);\n };\n\n return {\n getSourceFile,\n fileExists,\n readFile,\n };\n}\n\nfunction createCompilerHostWithVirtualSource(\n packages: Set<string>,\n sourceDir: string,\n) {\n const virtualSourceContent =\n [...packages].map((p) => `import \"${p}\";`).join(\"\\n\") +\n // for ignoring the `Generated an empty chunk: \".\"` error\n \"export const a = 1;\\n\";\n const virtualFilePath = path.join(sourceDir, \"virtual.ts\");\n\n const originalHost = ts.createCompilerHost({\n target: ts.ScriptTarget.ESNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n baseUrl: \".\",\n sourceRoot: sourceDir,\n noEmit: true,\n emitDeclarationOnly: true,\n noEmitOnError: true,\n paths: {\n \"*\": [\"node_modules/*\"],\n },\n });\n const virtualFunctions = createVirtualHostFunctions(\n virtualFilePath,\n virtualSourceContent,\n originalHost,\n );\n\n return {\n host: new Proxy(originalHost, {\n get(target, prop: keyof ts.CompilerHost) {\n return virtualFunctions[prop as keyof HostFunctions] || target[prop];\n },\n }),\n virtualFilePath,\n };\n}\n\nexport function findTypingsPackages(packages: Set<string>, sourceDir: string) {\n const { host, virtualFilePath } = createCompilerHostWithVirtualSource(\n packages,\n sourceDir,\n );\n\n const program = ts.createProgram({\n rootNames: [virtualFilePath],\n options: {},\n host: host,\n });\n\n const sourceFile = program.getSourceFile(virtualFilePath);\n if (!sourceFile) {\n throw new Error(\n \"[getSourceFile] Impossible error inside findMissingTypings\",\n );\n }\n\n const missingTypings = new Set<string>();\n const existingTypingPackages = new Set<string>();\n sourceFile.forEachChild((node) => {\n if (ts.isImportDeclaration(node)) {\n const moduleSpecifier = node.moduleSpecifier;\n if (ts.isStringLiteral(moduleSpecifier)) {\n const moduleResolution = ts.resolveModuleName(\n moduleSpecifier.text,\n virtualFilePath,\n {},\n host,\n );\n\n if (!moduleResolution?.resolvedModule?.packageId) {\n missingTypings.add(moduleSpecifier.text);\n } else {\n existingTypingPackages.add(\n moduleResolution.resolvedModule.packageId.name,\n );\n }\n }\n }\n });\n\n return { missingTypings, existingTypingPackages };\n}\n"],"names":["ts","path"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AASA,SAAS,2BACP,iBACA,sBACA,cACe;AACT,QAAA,gBAAkD,CACtD,UACA,oBACG;AACH,QAAI,aAAa,iBAAiB;AAChC,aAAOA,cAAG;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IAAA;AAEK,WAAA,aAAa,cAAc,UAAU,eAAe;AAAA,EAC7D;AAEM,QAAA,aAA4C,CAAC,aAAa;AAC9D,QAAI,aAAa,iBAAiB;AACzB,aAAA;AAAA,IAAA;AAEF,WAAA,aAAa,WAAW,QAAQ;AAAA,EACzC;AAEM,QAAA,WAAwC,CAAC,aAAa;AAC1D,QAAI,aAAa,iBAAiB;AACzB,aAAA;AAAA,IAAA;AAEF,WAAA,aAAa,SAAS,QAAQ;AAAA,EACvC;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,oCACP,UACA,WACA;AACA,QAAM,uBACJ,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,KAAK,IAAI;AAAA,EAEpD;AACF,QAAM,kBAAkBC,gBAAK,KAAK,WAAW,YAAY;AAEnD,QAAA,eAAeD,cAAG,mBAAmB;AAAA,IACzC,QAAQA,cAAG,aAAa;AAAA,IACxB,kBAAkBA,cAAG,qBAAqB;AAAA,IAC1C,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,qBAAqB;AAAA,IACrB,eAAe;AAAA,IACf,OAAO;AAAA,MACL,KAAK,CAAC,gBAAgB;AAAA,IAAA;AAAA,EACxB,CACD;AACD,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEO,SAAA;AAAA,IACL,MAAM,IAAI,MAAM,cAAc;AAAA,MAC5B,IAAI,QAAQ,MAA6B;AACvC,eAAO,iBAAiB,IAA2B,KAAK,OAAO,IAAI;AAAA,MAAA;AAAA,IACrE,CACD;AAAA,IACD;AAAA,EACF;AACF;AAEgB,SAAA,oBAAoB,UAAuB,WAAmB;AACtE,QAAA,EAAE,MAAM,gBAAA,IAAoB;AAAA,IAChC;AAAA,IACA;AAAA,EACF;AAEM,QAAA,UAAUA,cAAG,cAAc;AAAA,IAC/B,WAAW,CAAC,eAAe;AAAA,IAC3B,SAAS,CAAC;AAAA,IACV;AAAA,EAAA,CACD;AAEK,QAAA,aAAa,QAAQ,cAAc,eAAe;AACxD,MAAI,CAAC,YAAY;AACf,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EAAA;AAGI,QAAA,qCAAqB,IAAY;AACjC,QAAA,6CAA6B,IAAY;AACpC,aAAA,aAAa,CAAC,SAAS;;AAC5B,QAAAA,cAAG,oBAAoB,IAAI,GAAG;AAChC,YAAM,kBAAkB,KAAK;AACzB,UAAAA,cAAG,gBAAgB,eAAe,GAAG;AACvC,cAAM,mBAAmBA,cAAG;AAAA,UAC1B,gBAAgB;AAAA,UAChB;AAAA,UACA,CAAC;AAAA,UACD;AAAA,QACF;AAEI,YAAA,GAAC,0DAAkB,mBAAlB,mBAAkC,YAAW;AACjC,yBAAA,IAAI,gBAAgB,IAAI;AAAA,QAAA,OAClC;AACkB,iCAAA;AAAA,YACrB,iBAAiB,eAAe,UAAU;AAAA,UAC5C;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CACD;AAEM,SAAA,EAAE,gBAAgB,uBAAuB;AAClD;;"}
1
+ {"version":3,"file":"findTypingsPackages.js","sources":["../../../../../../src/tasks/buildTypesTask/findTypingsPackages.ts"],"sourcesContent":["import type * as ts from \"typescript\";\nimport * as path from \"node:path\";\nimport type { TS } from \"../../detectModules.js\";\n\ntype HostFunctions = {\n getSourceFile: ts.CompilerHost[\"getSourceFile\"];\n fileExists: ts.CompilerHost[\"fileExists\"];\n readFile: ts.CompilerHost[\"readFile\"];\n};\n\nfunction createVirtualHostFunctions(\n ts: TS[\"ts\"],\n virtualFilePath: string,\n virtualSourceContent: string,\n originalHost: ts.CompilerHost,\n): HostFunctions {\n const getSourceFile: ts.CompilerHost[\"getSourceFile\"] = (\n fileName,\n languageVersion,\n ) => {\n if (fileName === virtualFilePath) {\n return ts.createSourceFile(\n fileName,\n virtualSourceContent,\n languageVersion,\n );\n }\n return originalHost.getSourceFile(fileName, languageVersion);\n };\n\n const fileExists: ts.CompilerHost[\"fileExists\"] = (fileName) => {\n if (fileName === virtualFilePath) {\n return true;\n }\n return originalHost.fileExists(fileName);\n };\n\n const readFile: ts.CompilerHost[\"readFile\"] = (fileName) => {\n if (fileName === virtualFilePath) {\n return virtualSourceContent;\n }\n return originalHost.readFile(fileName);\n };\n\n return {\n getSourceFile,\n fileExists,\n readFile,\n };\n}\n\nfunction createCompilerHostWithVirtualSource(\n ts: TS[\"ts\"],\n packages: Set<string>,\n sourceDir: string,\n) {\n const virtualSourceContent =\n [...packages].map((p) => `import \"${p}\";`).join(\"\\n\") +\n // for ignoring the `Generated an empty chunk: \".\"` error\n \"export const a = 1;\\n\";\n const virtualFilePath = path.join(sourceDir, \"virtual.ts\");\n\n const originalHost = ts.createCompilerHost({\n target: ts.ScriptTarget.ESNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n baseUrl: \".\",\n sourceRoot: sourceDir,\n noEmit: true,\n emitDeclarationOnly: true,\n noEmitOnError: true,\n paths: {\n \"*\": [\"node_modules/*\"],\n },\n });\n const virtualFunctions = createVirtualHostFunctions(\n ts,\n virtualFilePath,\n virtualSourceContent,\n originalHost,\n );\n\n return {\n host: new Proxy(originalHost, {\n get(target, prop: keyof ts.CompilerHost) {\n return virtualFunctions[prop as keyof HostFunctions] || target[prop];\n },\n }),\n virtualFilePath,\n };\n}\n\nexport function findTypingsPackages(\n { ts }: TS,\n packages: Set<string>,\n sourceDir: string,\n) {\n const { host, virtualFilePath } = createCompilerHostWithVirtualSource(\n ts,\n packages,\n sourceDir,\n );\n\n const program = ts.createProgram({\n rootNames: [virtualFilePath],\n options: {},\n host: host,\n });\n\n const sourceFile = program.getSourceFile(virtualFilePath);\n if (!sourceFile) {\n throw new Error(\n \"[getSourceFile] Impossible error inside findMissingTypings\",\n );\n }\n\n const missingTypings = new Set<string>();\n const existingTypingPackages = new Set<string>();\n sourceFile.forEachChild((node) => {\n if (ts.isImportDeclaration(node)) {\n const moduleSpecifier = node.moduleSpecifier;\n if (ts.isStringLiteral(moduleSpecifier)) {\n const moduleResolution = ts.resolveModuleName(\n moduleSpecifier.text,\n virtualFilePath,\n {},\n host,\n );\n\n if (!moduleResolution?.resolvedModule?.packageId) {\n missingTypings.add(moduleSpecifier.text);\n } else {\n existingTypingPackages.add(\n moduleResolution.resolvedModule.packageId.name,\n );\n }\n }\n }\n });\n\n return { missingTypings, existingTypingPackages };\n}\n"],"names":["path"],"mappings":";;;;;;;;;;;;;;;;;;;;AAUA,SAAS,2BACP,IACA,iBACA,sBACA,cACe;AACT,QAAA,gBAAkD,CACtD,UACA,oBACG;AACH,QAAI,aAAa,iBAAiB;AAChC,aAAO,GAAG;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IAAA;AAEK,WAAA,aAAa,cAAc,UAAU,eAAe;AAAA,EAC7D;AAEM,QAAA,aAA4C,CAAC,aAAa;AAC9D,QAAI,aAAa,iBAAiB;AACzB,aAAA;AAAA,IAAA;AAEF,WAAA,aAAa,WAAW,QAAQ;AAAA,EACzC;AAEM,QAAA,WAAwC,CAAC,aAAa;AAC1D,QAAI,aAAa,iBAAiB;AACzB,aAAA;AAAA,IAAA;AAEF,WAAA,aAAa,SAAS,QAAQ;AAAA,EACvC;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,oCACP,IACA,UACA,WACA;AACA,QAAM,uBACJ,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,KAAK,IAAI;AAAA,EAEpD;AACF,QAAM,kBAAkBA,gBAAK,KAAK,WAAW,YAAY;AAEnD,QAAA,eAAe,GAAG,mBAAmB;AAAA,IACzC,QAAQ,GAAG,aAAa;AAAA,IACxB,kBAAkB,GAAG,qBAAqB;AAAA,IAC1C,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,qBAAqB;AAAA,IACrB,eAAe;AAAA,IACf,OAAO;AAAA,MACL,KAAK,CAAC,gBAAgB;AAAA,IAAA;AAAA,EACxB,CACD;AACD,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEO,SAAA;AAAA,IACL,MAAM,IAAI,MAAM,cAAc;AAAA,MAC5B,IAAI,QAAQ,MAA6B;AACvC,eAAO,iBAAiB,IAA2B,KAAK,OAAO,IAAI;AAAA,MAAA;AAAA,IACrE,CACD;AAAA,IACD;AAAA,EACF;AACF;AAEO,SAAS,oBACd,EAAE,MACF,UACA,WACA;AACM,QAAA,EAAE,MAAM,gBAAA,IAAoB;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEM,QAAA,UAAU,GAAG,cAAc;AAAA,IAC/B,WAAW,CAAC,eAAe;AAAA,IAC3B,SAAS,CAAC;AAAA,IACV;AAAA,EAAA,CACD;AAEK,QAAA,aAAa,QAAQ,cAAc,eAAe;AACxD,MAAI,CAAC,YAAY;AACf,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EAAA;AAGI,QAAA,qCAAqB,IAAY;AACjC,QAAA,6CAA6B,IAAY;AACpC,aAAA,aAAa,CAAC,SAAS;;AAC5B,QAAA,GAAG,oBAAoB,IAAI,GAAG;AAChC,YAAM,kBAAkB,KAAK;AACzB,UAAA,GAAG,gBAAgB,eAAe,GAAG;AACvC,cAAM,mBAAmB,GAAG;AAAA,UAC1B,gBAAgB;AAAA,UAChB;AAAA,UACA,CAAC;AAAA,UACD;AAAA,QACF;AAEI,YAAA,GAAC,0DAAkB,mBAAlB,mBAAkC,YAAW;AACjC,yBAAA,IAAI,gBAAgB,IAAI;AAAA,QAAA,OAClC;AACkB,iCAAA;AAAA,YACrB,iBAAiB,eAAe,UAAU;AAAA,UAC5C;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CACD;AAEM,SAAA,EAAE,gBAAgB,uBAAuB;AAClD;;"}
@@ -1,16 +1,6 @@
1
- import { type UserConfig, type Rollup } from "vite";
1
+ import { type UserConfig } from "vite";
2
2
  type ViteTaskParams = {
3
3
  viteConfig: UserConfig;
4
4
  };
5
- type BuildSuccess = {
6
- error: false;
7
- output: Rollup.OutputChunk[];
8
- };
9
- type BuildErrorType = {
10
- error: true;
11
- errors: Array<string>;
12
- };
13
- type BuildResult = BuildSuccess | BuildErrorType;
14
- export declare function buildVite({ viteConfig, }: ViteTaskParams): Promise<BuildResult>;
15
5
  export declare function viteTask({ viteConfig }: ViteTaskParams): Promise<any>;
16
6
  export {};
@@ -4,9 +4,8 @@ const vite = require("vite");
4
4
  const errors = require("../errors.js");
5
5
  const log = require("../log.js");
6
6
  const error = require("../error.js");
7
- async function buildVite({
8
- viteConfig
9
- }) {
7
+ const PrettyErrors = require("../PrettyErrors.js");
8
+ async function buildVite({ viteConfig }) {
10
9
  try {
11
10
  const outputs = await vite.build(viteConfig);
12
11
  if (!Array.isArray(outputs)) {
@@ -22,6 +21,12 @@ async function buildVite({
22
21
  )
23
22
  };
24
23
  } catch (e) {
24
+ if (e instanceof PrettyErrors.PrettyError) {
25
+ return {
26
+ error: true,
27
+ errors: [e]
28
+ };
29
+ }
25
30
  if (e instanceof Error) {
26
31
  return {
27
32
  error: true,
@@ -37,11 +42,12 @@ async function buildVite({
37
42
  async function viteTask({ viteConfig }) {
38
43
  const outputs = await buildVite({ viteConfig });
39
44
  if (outputs.error) {
40
- throw outputs.errors.map((e) => new error.BuildError(e));
45
+ throw outputs.errors.map(
46
+ (e) => e instanceof PrettyErrors.PrettyError ? e : new error.BuildError(e)
47
+ );
41
48
  }
42
49
  log.okLog("Vite");
43
50
  return outputs.output;
44
51
  }
45
- exports.buildVite = buildVite;
46
52
  exports.viteTask = viteTask;
47
53
  //# sourceMappingURL=viteTask.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"viteTask.js","sources":["../../../../../src/tasks/viteTask.ts"],"sourcesContent":["import { build, type UserConfig, type Rollup } from \"vite\";\nimport { errors } from \"../errors.js\";\nimport { okLog } from \"../log.js\";\nimport { BuildError } from \"../error.js\";\n\ntype ViteTaskParams = {\n viteConfig: UserConfig;\n};\n\ntype BuildSuccess = {\n error: false;\n output: Rollup.OutputChunk[];\n};\ntype BuildErrorType = {\n error: true;\n errors: Array<string>;\n};\n\ntype BuildResult = BuildSuccess | BuildErrorType;\n\nexport async function buildVite({\n viteConfig,\n}: ViteTaskParams): Promise<BuildResult> {\n try {\n const outputs = await build(viteConfig);\n if (!Array.isArray(outputs)) {\n return {\n error: true,\n errors: [errors.rollupError],\n };\n }\n\n return {\n error: false,\n output: outputs.flatMap((x) =>\n x.output.filter((x) => x.type === \"chunk\"),\n ),\n };\n } catch (e) {\n if (e instanceof Error) {\n return {\n error: true,\n errors: [e.message],\n };\n }\n }\n return {\n error: true,\n errors: [errors.rollupError],\n };\n}\n\nexport async function viteTask({ viteConfig }: ViteTaskParams) {\n const outputs = await buildVite({ viteConfig });\n if (outputs.error) {\n throw outputs.errors.map((e) => new BuildError(e));\n }\n\n okLog(\"Vite\");\n return outputs.output;\n}\n"],"names":["build","errors","x","BuildError","okLog"],"mappings":";;;;;;AAoBA,eAAsB,UAAU;AAAA,EAC9B;AACF,GAAyC;AACnC,MAAA;AACI,UAAA,UAAU,MAAMA,KAAA,MAAM,UAAU;AACtC,QAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AACpB,aAAA;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,CAACC,OAAAA,OAAO,WAAW;AAAA,MAC7B;AAAA,IAAA;AAGK,WAAA;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,QAAQ;AAAA,QAAQ,CAAC,MACvB,EAAE,OAAO,OAAO,CAACC,OAAMA,GAAE,SAAS,OAAO;AAAA,MAAA;AAAA,IAE7C;AAAA,WACO,GAAG;AACV,QAAI,aAAa,OAAO;AACf,aAAA;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,CAAC,EAAE,OAAO;AAAA,MACpB;AAAA,IAAA;AAAA,EACF;AAEK,SAAA;AAAA,IACL,OAAO;AAAA,IACP,QAAQ,CAACD,OAAAA,OAAO,WAAW;AAAA,EAC7B;AACF;AAEsB,eAAA,SAAS,EAAE,cAA8B;AAC7D,QAAM,UAAU,MAAM,UAAU,EAAE,YAAY;AAC9C,MAAI,QAAQ,OAAO;AACX,UAAA,QAAQ,OAAO,IAAI,CAAC,MAAM,IAAIE,MAAAA,WAAW,CAAC,CAAC;AAAA,EAAA;AAGnDC,MAAAA,MAAM,MAAM;AACZ,SAAO,QAAQ;AACjB;;;"}
1
+ {"version":3,"file":"viteTask.js","sources":["../../../../../src/tasks/viteTask.ts"],"sourcesContent":["import { build, type UserConfig, type Rollup } from \"vite\";\nimport { errors } from \"../errors.js\";\nimport { okLog } from \"../log.js\";\nimport { BuildError } from \"../error.js\";\nimport { PrettyError } from \"../PrettyErrors.js\";\n\ntype ViteTaskParams = {\n viteConfig: UserConfig;\n};\n\ntype BuildSuccess = {\n error: false;\n output: Rollup.OutputChunk[];\n};\ntype BuildErrorType = {\n error: true;\n errors: Array<string | PrettyError>;\n};\n\ntype BuildResult = BuildSuccess | BuildErrorType;\n\nasync function buildVite({ viteConfig }: ViteTaskParams): Promise<BuildResult> {\n try {\n const outputs = await build(viteConfig);\n if (!Array.isArray(outputs)) {\n return {\n error: true,\n errors: [errors.rollupError],\n };\n }\n\n return {\n error: false,\n output: outputs.flatMap((x) =>\n x.output.filter((x) => x.type === \"chunk\"),\n ),\n };\n } catch (e) {\n if (e instanceof PrettyError) {\n return {\n error: true,\n errors: [e],\n };\n }\n if (e instanceof Error) {\n return {\n error: true,\n errors: [e.message],\n };\n }\n }\n return {\n error: true,\n errors: [errors.rollupError],\n };\n}\n\nexport async function viteTask({ viteConfig }: ViteTaskParams) {\n const outputs = await buildVite({ viteConfig });\n if (outputs.error) {\n throw outputs.errors.map((e) =>\n e instanceof PrettyError ? e : new BuildError(e),\n );\n }\n\n okLog(\"Vite\");\n return outputs.output;\n}\n"],"names":["build","errors","x","PrettyError","BuildError","okLog"],"mappings":";;;;;;;AAqBA,eAAe,UAAU,EAAE,cAAoD;AACzE,MAAA;AACI,UAAA,UAAU,MAAMA,KAAA,MAAM,UAAU;AACtC,QAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AACpB,aAAA;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,CAACC,OAAAA,OAAO,WAAW;AAAA,MAC7B;AAAA,IAAA;AAGK,WAAA;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,QAAQ;AAAA,QAAQ,CAAC,MACvB,EAAE,OAAO,OAAO,CAACC,OAAMA,GAAE,SAAS,OAAO;AAAA,MAAA;AAAA,IAE7C;AAAA,WACO,GAAG;AACV,QAAI,aAAaC,aAAAA,aAAa;AACrB,aAAA;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,CAAC,CAAC;AAAA,MACZ;AAAA,IAAA;AAEF,QAAI,aAAa,OAAO;AACf,aAAA;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,CAAC,EAAE,OAAO;AAAA,MACpB;AAAA,IAAA;AAAA,EACF;AAEK,SAAA;AAAA,IACL,OAAO;AAAA,IACP,QAAQ,CAACF,OAAAA,OAAO,WAAW;AAAA,EAC7B;AACF;AAEsB,eAAA,SAAS,EAAE,cAA8B;AAC7D,QAAM,UAAU,MAAM,UAAU,EAAE,YAAY;AAC9C,MAAI,QAAQ,OAAO;AACjB,UAAM,QAAQ,OAAO;AAAA,MAAI,CAAC,MACxB,aAAaE,aAAAA,cAAc,IAAI,IAAIC,iBAAW,CAAC;AAAA,IACjD;AAAA,EAAA;AAGFC,MAAAA,MAAM,MAAM;AACZ,SAAO,QAAQ;AACjB;;"}
@@ -0,0 +1,2 @@
1
+ export declare class PrettyError extends Error {
2
+ }
@@ -0,0 +1,6 @@
1
+ class PrettyError extends Error {
2
+ }
3
+ export {
4
+ PrettyError
5
+ };
6
+ //# sourceMappingURL=PrettyErrors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrettyErrors.mjs","sources":["../../../../src/PrettyErrors.ts"],"sourcesContent":["export class PrettyError extends Error {}\n"],"names":[],"mappings":"AAAO,MAAM,oBAAoB,MAAM;AAAC;"}
@@ -5,8 +5,9 @@ type CreateViteConfigParam = {
5
5
  dirs: Dirs;
6
6
  packageJson: PackageJson;
7
7
  modules: DetectedModules;
8
+ test?: boolean;
8
9
  };
9
- export declare function createViteConfig({ dirs, packageJson, modules, }: CreateViteConfigParam): {
10
+ export declare function createViteConfig({ dirs, packageJson, modules, test, }: CreateViteConfigParam): {
10
11
  viteConfig: import("vite").UserConfig;
11
12
  entrypoints: Map<string, string>;
12
13
  bins: Map<string, string>;
@@ -6,6 +6,7 @@ import { defineConfig } from "vite";
6
6
  import { babelPlugin } from "./plugins/babel/index.mjs";
7
7
  import { reactPlugin } from "./plugins/react/index.mjs";
8
8
  import "semver";
9
+ import { importsPlugin } from "./plugins/imports/index.mjs";
9
10
  function mapToObject(map) {
10
11
  const obj = {};
11
12
  for (const [key, value] of map) {
@@ -13,38 +14,11 @@ function mapToObject(map) {
13
14
  }
14
15
  return obj;
15
16
  }
16
- function createExternalDepValidator(packageJson) {
17
- const allExternalPackages = /* @__PURE__ */ new Set();
18
- for (const key of [
19
- "dependencies",
20
- "optionalDependencies",
21
- "peerDependencies"
22
- ]) {
23
- for (const dep of Object.keys(packageJson[key] ?? {})) {
24
- allExternalPackages.add(dep);
25
- }
26
- }
27
- allExternalPackages.add(packageJson.name);
28
- return (id) => {
29
- if (id.startsWith("node:")) {
30
- return true;
31
- }
32
- const segments = id.split("/");
33
- let current = "";
34
- for (const segment of segments) {
35
- current += segment;
36
- if (allExternalPackages.has(current)) {
37
- return true;
38
- }
39
- current += "/";
40
- }
41
- return false;
42
- };
43
- }
44
17
  function createViteConfig({
45
18
  dirs,
46
19
  packageJson,
47
- modules
20
+ modules,
21
+ test
48
22
  }) {
49
23
  const { sourceDir, outDir, esmOutDir, cjsOutDir } = dirs;
50
24
  const entrypoints = /* @__PURE__ */ new Map();
@@ -61,11 +35,11 @@ function createViteConfig({
61
35
  }
62
36
  }
63
37
  const mergedEntries = new Map([...entrypoints, ...bins]);
64
- const depsValidator = createExternalDepValidator(packageJson);
65
38
  const esmRelativeOutPath = relative(outDir, esmOutDir);
66
39
  const cjsRelativeOutPath = relative(outDir, cjsOutDir);
67
40
  const viteConfig = defineConfig({
68
41
  plugins: [
42
+ importsPlugin(packageJson, test),
69
43
  reactPlugin({ modules }),
70
44
  babelPlugin({ packageJson, dirs, modules })
71
45
  ],
@@ -110,7 +84,6 @@ function createViteConfig({
110
84
  }
111
85
  },
112
86
  rollupOptions: {
113
- external: depsValidator,
114
87
  output: {
115
88
  preserveModulesRoot: sourceDir,
116
89
  exports: "named",
@@ -1 +1 @@
1
- {"version":3,"file":"createViteConfig.mjs","sources":["../../../../src/createViteConfig.ts"],"sourcesContent":["import { type Dirs } from \"./resolveDirs.js\";\nimport { type PackageJson } from \"./packageJson.js\";\nimport { join, relative } from \"node:path\";\nimport { defineConfig } from \"vite\";\nimport { babelPlugin } from \"./plugins/babel/index.js\";\nimport { reactPlugin } from \"./plugins/react/index.js\";\nimport { type DetectedModules } from \"./detectModules.js\";\n\ntype CreateViteConfigParam = {\n dirs: Dirs;\n packageJson: PackageJson;\n modules: DetectedModules;\n};\n\nfunction mapToObject(map: Map<string, string>) {\n const obj: Record<string, string> = {};\n for (const [key, value] of map) {\n obj[key] = value;\n }\n return obj;\n}\n\nfunction createExternalDepValidator(packageJson: PackageJson) {\n const allExternalPackages = new Set();\n for (const key of [\n \"dependencies\",\n \"optionalDependencies\",\n \"peerDependencies\",\n ] as const) {\n for (const dep of Object.keys(packageJson[key] ?? {})) {\n allExternalPackages.add(dep);\n }\n }\n allExternalPackages.add(packageJson.name);\n\n return (id: string) => {\n if (id.startsWith(\"node:\")) {\n return true;\n }\n const segments = id.split(\"/\");\n let current = \"\";\n for (const segment of segments) {\n current += segment;\n // import {} from \"a/b/c/d\"; case\n if (allExternalPackages.has(current)) {\n return true;\n }\n current += \"/\";\n }\n return false;\n };\n}\n\nexport function createViteConfig({\n dirs,\n packageJson,\n modules,\n}: CreateViteConfigParam) {\n const { sourceDir, outDir, esmOutDir, cjsOutDir } = dirs;\n\n const entrypoints = new Map<string, string>();\n if (packageJson.exports) {\n for (const [key, value] of packageJson.exports) {\n const entry = join(sourceDir, value);\n entrypoints.set(key, entry);\n }\n }\n\n const bins = new Map<string, string>();\n if (packageJson.bin) {\n for (const [key, value] of packageJson.bin) {\n bins.set(key, join(sourceDir, value));\n }\n }\n\n const mergedEntries = new Map([...entrypoints, ...bins]);\n\n const depsValidator = createExternalDepValidator(packageJson);\n\n const esmRelativeOutPath = relative(outDir, esmOutDir);\n const cjsRelativeOutPath = relative(outDir, cjsOutDir);\n const viteConfig = defineConfig({\n plugins: [\n reactPlugin({ modules }),\n babelPlugin({ packageJson, dirs, modules }),\n ],\n publicDir: false,\n root: sourceDir,\n logLevel: \"silent\",\n build: {\n outDir,\n write: true,\n minify: false,\n emptyOutDir: false,\n sourcemap: true,\n assetsInlineLimit: 0,\n terserOptions: {\n compress: false,\n mangle: false,\n },\n lib: {\n entry: mapToObject(mergedEntries),\n formats: [\"es\", \"cjs\"],\n fileName: (format, entryName) => {\n const entrypoint = mergedEntries.get(entryName);\n if (!entrypoint) {\n const noExt = entryName.replace(/\\.[^.]+$/, \"\");\n if (format === \"es\") {\n return join(esmRelativeOutPath, `${noExt}.mjs`);\n } else {\n return join(cjsRelativeOutPath, `${noExt}.js`);\n }\n }\n\n if (format === \"es\") {\n return join(\n esmRelativeOutPath,\n relative(sourceDir, entrypoint).replace(/\\.[^.]+$/, \"\") + \".mjs\",\n );\n } else {\n return join(\n cjsRelativeOutPath,\n relative(sourceDir, entrypoint).replace(/\\.[^.]+$/, \"\") + \".js\",\n );\n }\n },\n },\n rollupOptions: {\n external: depsValidator,\n output: {\n preserveModulesRoot: sourceDir,\n exports: \"named\",\n preserveModules: true,\n },\n },\n },\n });\n\n return { viteConfig, entrypoints, bins };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createViteConfig.mjs","sources":["../../../../src/createViteConfig.ts"],"sourcesContent":["import { type Dirs } from \"./resolveDirs.js\";\nimport { type PackageJson } from \"./packageJson.js\";\nimport { join, relative } from \"node:path\";\nimport { defineConfig } from \"vite\";\nimport { babelPlugin } from \"./plugins/babel/index.js\";\nimport { reactPlugin } from \"./plugins/react/index.js\";\nimport { type DetectedModules } from \"./detectModules.js\";\nimport { importsPlugin } from \"./plugins/imports/index.js\";\n\ntype CreateViteConfigParam = {\n dirs: Dirs;\n packageJson: PackageJson;\n modules: DetectedModules;\n test?: boolean;\n};\n\nfunction mapToObject(map: Map<string, string>) {\n const obj: Record<string, string> = {};\n for (const [key, value] of map) {\n obj[key] = value;\n }\n return obj;\n}\n\nexport function createViteConfig({\n dirs,\n packageJson,\n modules,\n test,\n}: CreateViteConfigParam) {\n const { sourceDir, outDir, esmOutDir, cjsOutDir } = dirs;\n\n const entrypoints = new Map<string, string>();\n if (packageJson.exports) {\n for (const [key, value] of packageJson.exports) {\n const entry = join(sourceDir, value);\n entrypoints.set(key, entry);\n }\n }\n\n const bins = new Map<string, string>();\n if (packageJson.bin) {\n for (const [key, value] of packageJson.bin) {\n bins.set(key, join(sourceDir, value));\n }\n }\n\n const mergedEntries = new Map([...entrypoints, ...bins]);\n\n const esmRelativeOutPath = relative(outDir, esmOutDir);\n const cjsRelativeOutPath = relative(outDir, cjsOutDir);\n const viteConfig = defineConfig({\n plugins: [\n importsPlugin(packageJson, test),\n reactPlugin({ modules }),\n babelPlugin({ packageJson, dirs, modules }),\n ],\n publicDir: false,\n root: sourceDir,\n logLevel: \"silent\",\n build: {\n outDir,\n write: true,\n minify: false,\n emptyOutDir: false,\n sourcemap: true,\n assetsInlineLimit: 0,\n terserOptions: {\n compress: false,\n mangle: false,\n },\n lib: {\n entry: mapToObject(mergedEntries),\n formats: [\"es\", \"cjs\"],\n fileName: (format, entryName) => {\n const entrypoint = mergedEntries.get(entryName);\n if (!entrypoint) {\n const noExt = entryName.replace(/\\.[^.]+$/, \"\");\n if (format === \"es\") {\n return join(esmRelativeOutPath, `${noExt}.mjs`);\n } else {\n return join(cjsRelativeOutPath, `${noExt}.js`);\n }\n }\n\n if (format === \"es\") {\n return join(\n esmRelativeOutPath,\n relative(sourceDir, entrypoint).replace(/\\.[^.]+$/, \"\") + \".mjs\",\n );\n } else {\n return join(\n cjsRelativeOutPath,\n relative(sourceDir, entrypoint).replace(/\\.[^.]+$/, \"\") + \".js\",\n );\n }\n },\n },\n rollupOptions: {\n output: {\n preserveModulesRoot: sourceDir,\n exports: \"named\",\n preserveModules: true,\n },\n },\n },\n });\n\n return { viteConfig, entrypoints, bins };\n}\n"],"names":[],"mappings":";;;;;;;;;AAgBA,SAAS,YAAY,KAA0B;AAC7C,QAAM,MAA8B,CAAC;AACrC,aAAW,CAAC,KAAK,KAAK,KAAK,KAAK;AAC9B,QAAI,GAAG,IAAI;AAAA,EAAA;AAEN,SAAA;AACT;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,EAAE,WAAW,QAAQ,WAAW,UAAc,IAAA;AAE9C,QAAA,kCAAkB,IAAoB;AAC5C,MAAI,YAAY,SAAS;AACvB,eAAW,CAAC,KAAK,KAAK,KAAK,YAAY,SAAS;AACxC,YAAA,QAAQ,KAAK,WAAW,KAAK;AACvB,kBAAA,IAAI,KAAK,KAAK;AAAA,IAAA;AAAA,EAC5B;AAGI,QAAA,2BAAW,IAAoB;AACrC,MAAI,YAAY,KAAK;AACnB,eAAW,CAAC,KAAK,KAAK,KAAK,YAAY,KAAK;AAC1C,WAAK,IAAI,KAAK,KAAK,WAAW,KAAK,CAAC;AAAA,IAAA;AAAA,EACtC;AAGI,QAAA,gBAAgB,IAAI,IAAI,CAAC,GAAG,aAAa,GAAG,IAAI,CAAC;AAEjD,QAAA,qBAAqB,SAAS,QAAQ,SAAS;AAC/C,QAAA,qBAAqB,SAAS,QAAQ,SAAS;AACrD,QAAM,aAAa,aAAa;AAAA,IAC9B,SAAS;AAAA,MACP,cAAc,aAAa,IAAI;AAAA,MAC/B,YAAY,EAAE,SAAS;AAAA,MACvB,YAAY,EAAE,aAAa,MAAM,QAAS,CAAA;AAAA,IAC5C;AAAA,IACA,WAAW;AAAA,IACX,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,MACL;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,WAAW;AAAA,MACX,mBAAmB;AAAA,MACnB,eAAe;AAAA,QACb,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,MACA,KAAK;AAAA,QACH,OAAO,YAAY,aAAa;AAAA,QAChC,SAAS,CAAC,MAAM,KAAK;AAAA,QACrB,UAAU,CAAC,QAAQ,cAAc;AACzB,gBAAA,aAAa,cAAc,IAAI,SAAS;AAC9C,cAAI,CAAC,YAAY;AACf,kBAAM,QAAQ,UAAU,QAAQ,YAAY,EAAE;AAC9C,gBAAI,WAAW,MAAM;AACnB,qBAAO,KAAK,oBAAoB,GAAG,KAAK,MAAM;AAAA,YAAA,OACzC;AACL,qBAAO,KAAK,oBAAoB,GAAG,KAAK,KAAK;AAAA,YAAA;AAAA,UAC/C;AAGF,cAAI,WAAW,MAAM;AACZ,mBAAA;AAAA,cACL;AAAA,cACA,SAAS,WAAW,UAAU,EAAE,QAAQ,YAAY,EAAE,IAAI;AAAA,YAC5D;AAAA,UAAA,OACK;AACE,mBAAA;AAAA,cACL;AAAA,cACA,SAAS,WAAW,UAAU,EAAE,QAAQ,YAAY,EAAE,IAAI;AAAA,YAC5D;AAAA,UAAA;AAAA,QACF;AAAA,MAEJ;AAAA,MACA,eAAe;AAAA,QACb,QAAQ;AAAA,UACN,qBAAqB;AAAA,UACrB,SAAS;AAAA,UACT,iBAAiB;AAAA,QAAA;AAAA,MACnB;AAAA,IACF;AAAA,EACF,CACD;AAEM,SAAA,EAAE,YAAY,aAAa,KAAK;AACzC;"}
@@ -1,4 +1,5 @@
1
1
  import { type Args } from "./args.js";
2
+ import { PrettyError } from "./PrettyErrors.js";
2
3
  export declare function defineViteConfig(args?: Args): Promise<import("vite").UserConfig | {
3
4
  error: boolean;
4
5
  errors: string[];
@@ -7,7 +8,7 @@ type RunResult = {
7
8
  error: false;
8
9
  } | {
9
10
  error: true;
10
- errors: Array<string>;
11
+ errors: Array<string | PrettyError>;
11
12
  };
12
13
  export declare function run(args: Args): Promise<RunResult>;
13
14
  export {};
@@ -15,6 +15,7 @@ import { runSettled } from "./pipeline.mjs";
15
15
  import "./args.mjs";
16
16
  import { viteTask } from "./tasks/viteTask.mjs";
17
17
  import { promiseSettledResultErrors } from "./promiseSettledResultErrors.mjs";
18
+ import { PrettyError } from "./PrettyErrors.mjs";
18
19
  function setExports(exportsMap, exportName, mapFn) {
19
20
  const entry = exportsMap.get(exportName) ?? {};
20
21
  exportsMap.set(exportName, mapFn(entry));
@@ -35,7 +36,12 @@ async function defineViteConfig(args = {}) {
35
36
  return { error: true, errors: modulesResult.errors };
36
37
  }
37
38
  const { modules } = modulesResult;
38
- const { viteConfig } = createViteConfig({ dirs, packageJson, modules });
39
+ const { viteConfig } = createViteConfig({
40
+ dirs,
41
+ packageJson,
42
+ modules,
43
+ test: true
44
+ });
39
45
  return viteConfig;
40
46
  }
41
47
  async function run(args) {
@@ -108,6 +114,9 @@ async function run(args) {
108
114
  )
109
115
  ]);
110
116
  const errors = promiseSettledResultErrors(tasksRes).map((res) => {
117
+ if (res instanceof PrettyError) {
118
+ return res;
119
+ }
111
120
  if (res instanceof BuildError) {
112
121
  return res.error;
113
122
  }
@@ -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\";\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({ dirs, packageJson, modules });\n\n return viteConfig;\n}\n\ntype RunResult =\n | {\n error: false;\n }\n | {\n error: true;\n errors: Array<string>;\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 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":";;;;;;;;;;;;;;;;;AAkBA,SAAS,WACP,YACA,YACA,OACA;AACA,QAAM,QAAQ,WAAW,IAAI,UAAU,KAAM,CAAC;AAC9C,aAAW,IAAI,YAAY,MAAM,KAAK,CAAC;AACzC;AAEsB,eAAA,iBAAiB,OAAa,IAAI;AAC3C,aAAA;AACL,QAAA,OAAO,YAAY,IAAI;AAC7B,QAAM,EAAE,WAAW,QAAQ,YAAgB,IAAA;AAE3C,QAAM,GAAG,QAAQ,EAAE,WAAW,MAAM,OAAO,MAAM;AACjD,QAAM,MAAM,QAAQ,EAAE,WAAW,MAAM;AACvC,QAAM,cAAc,MAAM,iBAAiB,EAAE,WAAW,aAAa;AAEjE,MAAA,MAAM,QAAQ,WAAW,GAAG;AAC9B,YAAQ,MAAM,WAAW;AACnB,UAAA,IAAI,MAAM,8BAA8B;AAAA,EAAA;AAGhD,QAAM,gBAAgB,MAAM,cAAc,aAAa,IAAI;AAC3D,MAAI,cAAc,OAAO;AACvB,WAAO,EAAE,OAAO,MAAM,QAAQ,cAAc,OAAO;AAAA,EAAA;AAE/C,QAAA,EAAE,YAAY;AACd,QAAA,EAAE,eAAe,iBAAiB,EAAE,MAAM,aAAa,SAAS;AAE/D,SAAA;AACT;AAWA,eAAsB,IAAI,MAAgC;AAClD,QAAA,OAAO,YAAY,IAAI;AAC7B,QAAM,EAAE,WAAW,QAAQ,aAAa,WAAe,IAAA;AAEvD,QAAM,GAAG,QAAQ,EAAE,WAAW,MAAM,OAAO,MAAM;AACjD,QAAM,MAAM,QAAQ,EAAE,WAAW,MAAM;AACvC,QAAM,cAAc,MAAM,iBAAiB,EAAE,WAAW,aAAa;AAEjE,MAAA,MAAM,QAAQ,WAAW,GAAG;AAC9B,WAAO,EAAE,OAAO,MAAM,QAAQ,YAAY;AAAA,EAAA;AAG5C,QAAM,gBAAgB,MAAM,cAAc,aAAa,IAAI;AAC3D,MAAI,cAAc,OAAO;AACvB,WAAO,EAAE,OAAO,MAAM,QAAQ,cAAc,OAAO;AAAA,EAAA;AAE/C,QAAA,EAAE,YAAY;AACpB,QAAM,EAAE,YAAY,aAAa,KAAA,IAAS,iBAAiB;AAAA,IACzD;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAEK,QAAA,iCAAiB,IAA2B;AAC5C,QAAA,8BAAc,IAAoB;AAElC,QAAA,WAAW,MAAM,WAAW,MAAM;AAAA,IACtC,oBAAoB,WAAW,MAAM;AAAA,IACrC,eAAe;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAA,EAAE,KAAK,CAAC,EAAE,sBAAsB,4BAA4B;AAC3D,iBAAW,CAAC,YAAY,GAAG,KAAK,sBAAsB;AACzC,mBAAA,YAAY,YAAY,CAAC,UAAU;AAC5C,gBAAM,OAAO,OAAO,SAAS,QAAQ,GAAG;AACjC,iBAAA;AAAA,QAAA,CACR;AAAA,MAAA;AAGH,iBAAW,CAAC,YAAY,GAAG,KAAK,uBAAuB;AAC1C,mBAAA,YAAY,YAAY,CAAC,UAAU;AAC5C,gBAAM,OAAO,OAAO,SAAS,QAAQ,GAAG;AACjC,iBAAA;AAAA,QAAA,CACR;AAAA,MAAA;AAAA,IACH,CACD;AAAA,IACD,SAAS,EAAE,WAAY,CAAA,EAAE;AAAA,MAAK,CAAC,eAC7B,WAAW,MAAM;AAAA,QACf,YAAY,EAAE,aAAa,YAAY,aAAa,OAAQ,CAAA,EAAE;AAAA,UAC5D,CAAC,QAAQ;AACP,uBAAW,CAAC,UAAU,IAAI,KAAK,KAAK;AACvB,yBAAA,YAAY,MAAM,CAAC,UAAU;AACtC,sBAAM,SAAS,SAAS,SAAS,KAAK,IAAI,QAAQ;AAClD,oBAAI,WAAW,MAAM;AACnB,wBAAM,MAAM,OAAO;AAAA,gBAAA,WACV,WAAW,OAAO;AAC3B,wBAAM,MAAM,OAAO;AAAA,gBAAA;AAEd,uBAAA;AAAA,cAAA,CACR;AAAA,YAAA;AAAA,UACH;AAAA,QAEJ;AAAA,QACA,SAAS,EAAE,YAAY,MAAM,aAAa,YAAY,OAAQ,CAAA,EAAE;AAAA,UAC9D,CAAC,QAAQ;AACP,uBAAW,CAAC,OAAO,GAAG,KAAK,KAAK;AACtB,sBAAA,IAAI,KAAK,KAAK;AAAA,YAAA;AAAA,UACxB;AAAA,QACF;AAAA,MAEH,CAAA;AAAA,IAAA;AAAA,EACH,CACD;AAED,QAAM,SAAS,2BAA2B,QAAQ,EAAE,IAAI,CAAC,QAAQ;AAC/D,QAAI,eAAe,YAAY;AAC7B,aAAO,IAAI;AAAA,IAAA;AAGb,WAAO,IAAI;AAAA,EAAA,CACZ;AAEG,MAAA,OAAO,SAAS,GAAG;AACd,WAAA,EAAE,OAAO,MAAM,OAAO;AAAA,EAAA;AAGzB,QAAA,iBAAiB,QAAQ,aAAa;AAAA,IAC1C;AAAA,IACA;AAAA,EAAA,CACD;AAEO,UAAA;AACR,MAAI,qBAAqB,SAAS,WAAW,MAAM,CAAC,EAAE;AAC/C,SAAA,EAAE,OAAO,MAAM;AACxB;"}
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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"}
@@ -50,12 +50,8 @@ function babelPlugin({
50
50
  };
51
51
  },
52
52
  buildEnd(error) {
53
- if (!error) {
54
- if (modules.babel && hasBabelConfig) {
55
- okLog("Babel");
56
- }
57
- } else {
58
- this.error(error);
53
+ if (modules.babel && hasBabelConfig) {
54
+ okLog("Babel");
59
55
  }
60
56
  }
61
57
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../../src/plugins/babel/index.ts"],"sourcesContent":["import type { Plugin } from \"vite\";\nimport * as path from \"node:path\";\nimport { findBabelConfig } from \"./findBabelConfig.js\";\nimport { type PackageJson } from \"../../packageJson.js\";\nimport { type Dirs } from \"../../resolveDirs.js\";\nimport { type DetectedModules } from \"../../detectModules.js\";\nimport { okLog } from \"../../log.js\";\n\ntype BabelPluginOptions = {\n packageJson: PackageJson;\n dirs: Dirs;\n modules: DetectedModules;\n};\n\nexport function babelPlugin({\n packageJson,\n dirs,\n modules,\n}: BabelPluginOptions): Plugin {\n let hasBabelConfig = false;\n\n return {\n name: \"smartbundle:babel\",\n async buildStart() {\n hasBabelConfig = await findBabelConfig(dirs.sourceDir, packageJson);\n if (modules.babel && !hasBabelConfig) {\n this.warn(\n \"We have found a @babel/core package, but config was not found. It could be a bug\",\n );\n } else if (!modules.babel && hasBabelConfig) {\n this.error(\n new Error(\n \"We have found a babel config. Please install @babel/core to devDeps or remove the config file\",\n ),\n );\n }\n },\n async transform(code, id) {\n if (!modules.babel || !hasBabelConfig) {\n return null;\n }\n\n const extname = path.extname(id);\n if (![\".js\", \".ts\"].includes(extname)) {\n return null;\n }\n\n const map = this.getCombinedSourcemap();\n\n const result = await modules.babel.transformAsync(code, {\n filename: id,\n sourceMaps: true,\n inputSourceMap: map,\n });\n\n if (!result?.code) {\n throw new Error(\"Babel transformation failed\");\n }\n\n return {\n code: result.code,\n map: result.map,\n };\n },\n buildEnd(error) {\n if (!error) {\n if (modules.babel && hasBabelConfig) {\n okLog(\"Babel\");\n }\n } else {\n this.error(error);\n }\n },\n };\n}\n"],"names":[],"mappings":";;;;;;;AAcO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAA+B;AAC7B,MAAI,iBAAiB;AAEd,SAAA;AAAA,IACL,MAAM;AAAA,IACN,MAAM,aAAa;AACjB,uBAAiB,MAAM,gBAAgB,KAAK,WAAW,WAAW;AAC9D,UAAA,QAAQ,SAAS,CAAC,gBAAgB;AAC/B,aAAA;AAAA,UACH;AAAA,QACF;AAAA,MACS,WAAA,CAAC,QAAQ,SAAS,gBAAgB;AACtC,aAAA;AAAA,UACH,IAAI;AAAA,YACF;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IAEJ;AAAA,IACA,MAAM,UAAU,MAAM,IAAI;AACxB,UAAI,CAAC,QAAQ,SAAS,CAAC,gBAAgB;AAC9B,eAAA;AAAA,MAAA;AAGH,YAAA,UAAU,KAAK,QAAQ,EAAE;AAC/B,UAAI,CAAC,CAAC,OAAO,KAAK,EAAE,SAAS,OAAO,GAAG;AAC9B,eAAA;AAAA,MAAA;AAGH,YAAA,MAAM,KAAK,qBAAqB;AAEtC,YAAM,SAAS,MAAM,QAAQ,MAAM,eAAe,MAAM;AAAA,QACtD,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,gBAAgB;AAAA,MAAA,CACjB;AAEG,UAAA,EAAC,iCAAQ,OAAM;AACX,cAAA,IAAI,MAAM,6BAA6B;AAAA,MAAA;AAGxC,aAAA;AAAA,QACL,MAAM,OAAO;AAAA,QACb,KAAK,OAAO;AAAA,MACd;AAAA,IACF;AAAA,IACA,SAAS,OAAO;AACd,UAAI,CAAC,OAAO;AACN,YAAA,QAAQ,SAAS,gBAAgB;AACnC,gBAAM,OAAO;AAAA,QAAA;AAAA,MACf,OACK;AACL,aAAK,MAAM,KAAK;AAAA,MAAA;AAAA,IAClB;AAAA,EAEJ;AACF;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../../src/plugins/babel/index.ts"],"sourcesContent":["import type { Plugin } from \"vite\";\nimport * as path from \"node:path\";\nimport { findBabelConfig } from \"./findBabelConfig.js\";\nimport { type PackageJson } from \"../../packageJson.js\";\nimport { type Dirs } from \"../../resolveDirs.js\";\nimport { type DetectedModules } from \"../../detectModules.js\";\nimport { okLog } from \"../../log.js\";\n\ntype BabelPluginOptions = {\n packageJson: PackageJson;\n dirs: Dirs;\n modules: DetectedModules;\n};\n\nexport function babelPlugin({\n packageJson,\n dirs,\n modules,\n}: BabelPluginOptions): Plugin {\n let hasBabelConfig = false;\n\n return {\n name: \"smartbundle:babel\",\n async buildStart() {\n hasBabelConfig = await findBabelConfig(dirs.sourceDir, packageJson);\n if (modules.babel && !hasBabelConfig) {\n this.warn(\n \"We have found a @babel/core package, but config was not found. It could be a bug\",\n );\n } else if (!modules.babel && hasBabelConfig) {\n this.error(\n new Error(\n \"We have found a babel config. Please install @babel/core to devDeps or remove the config file\",\n ),\n );\n }\n },\n async transform(code, id) {\n if (!modules.babel || !hasBabelConfig) {\n return null;\n }\n\n const extname = path.extname(id);\n if (![\".js\", \".ts\"].includes(extname)) {\n return null;\n }\n\n const map = this.getCombinedSourcemap();\n\n const result = await modules.babel.transformAsync(code, {\n filename: id,\n sourceMaps: true,\n inputSourceMap: map,\n });\n\n if (!result?.code) {\n throw new Error(\"Babel transformation failed\");\n }\n\n return {\n code: result.code,\n map: result.map,\n };\n },\n buildEnd(error) {\n if (modules.babel && hasBabelConfig) {\n okLog(\"Babel\");\n }\n },\n };\n}\n"],"names":[],"mappings":";;;;;;;AAcO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAA+B;AAC7B,MAAI,iBAAiB;AAEd,SAAA;AAAA,IACL,MAAM;AAAA,IACN,MAAM,aAAa;AACjB,uBAAiB,MAAM,gBAAgB,KAAK,WAAW,WAAW;AAC9D,UAAA,QAAQ,SAAS,CAAC,gBAAgB;AAC/B,aAAA;AAAA,UACH;AAAA,QACF;AAAA,MACS,WAAA,CAAC,QAAQ,SAAS,gBAAgB;AACtC,aAAA;AAAA,UACH,IAAI;AAAA,YACF;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IAEJ;AAAA,IACA,MAAM,UAAU,MAAM,IAAI;AACxB,UAAI,CAAC,QAAQ,SAAS,CAAC,gBAAgB;AAC9B,eAAA;AAAA,MAAA;AAGH,YAAA,UAAU,KAAK,QAAQ,EAAE;AAC/B,UAAI,CAAC,CAAC,OAAO,KAAK,EAAE,SAAS,OAAO,GAAG;AAC9B,eAAA;AAAA,MAAA;AAGH,YAAA,MAAM,KAAK,qBAAqB;AAEtC,YAAM,SAAS,MAAM,QAAQ,MAAM,eAAe,MAAM;AAAA,QACtD,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,gBAAgB;AAAA,MAAA,CACjB;AAEG,UAAA,EAAC,iCAAQ,OAAM;AACX,cAAA,IAAI,MAAM,6BAA6B;AAAA,MAAA;AAGxC,aAAA;AAAA,QACL,MAAM,OAAO;AAAA,QACb,KAAK,OAAO;AAAA,MACd;AAAA,IACF;AAAA,IACA,SAAS,OAAO;AACV,UAAA,QAAQ,SAAS,gBAAgB;AACnC,cAAM,OAAO;AAAA,MAAA;AAAA,IACf;AAAA,EAEJ;AACF;"}
@@ -0,0 +1,7 @@
1
+ import { PrettyError } from "../../PrettyErrors.js";
2
+ export declare class ImportError extends PrettyError {
3
+ private importName;
4
+ private path;
5
+ private constructor();
6
+ static create(importName: string, path: string | undefined, fsReadFile: typeof import("fs/promises").readFile): Promise<ImportError>;
7
+ }
@@ -0,0 +1,35 @@
1
+ import { PrettyError } from "../../PrettyErrors.mjs";
2
+ class ImportError extends PrettyError {
3
+ constructor(importName, path) {
4
+ super(
5
+ `ImportError: The "${importName}" library is marked as an optional dependency.
6
+ It cannot be imported directly in:
7
+ "${path ?? "unknown path"}"
8
+
9
+ To resolve this, consider:
10
+ 1. Using a type import (e.g., 'import type').
11
+ 2. Dynamically importing the library (e.g., 'await import("${importName}")').
12
+
13
+ This ensures compatibility with environments where "${importName}" is not installed.`
14
+ );
15
+ this.importName = importName;
16
+ this.path = path;
17
+ }
18
+ static async create(importName, path, fsReadFile) {
19
+ if (!path) {
20
+ return new ImportError(importName, path);
21
+ }
22
+ const content = await fsReadFile(path, "utf-8");
23
+ const lines = content.split("\n");
24
+ const affectedLine = lines.findIndex((line) => line.includes(importName));
25
+ const error = new ImportError(importName, path);
26
+ error.stack = `ImportError: you cannot import ${importName} because it marked as optional inside package.json
27
+
28
+ at ${path}:${affectedLine + 1}:0`;
29
+ return error;
30
+ }
31
+ }
32
+ export {
33
+ ImportError
34
+ };
35
+ //# sourceMappingURL=ImportError.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImportError.mjs","sources":["../../../../../../src/plugins/imports/ImportError.ts"],"sourcesContent":["import { PrettyError } from \"../../PrettyErrors.js\";\n\nexport class ImportError extends PrettyError {\n private constructor(\n private importName: string,\n private path: string | undefined,\n ) {\n super(\n `ImportError: The \"${importName}\" library is marked as an optional dependency.\\n` +\n `It cannot be imported directly in:\\n` +\n ` \"${path ?? \"unknown path\"}\"\\n\\n` +\n `To resolve this, consider:\\n` +\n `1. Using a type import (e.g., 'import type').\\n` +\n `2. Dynamically importing the library (e.g., 'await import(\"${importName}\")').\\n\\n` +\n `This ensures compatibility with environments where \"${importName}\" is not installed.`,\n );\n }\n\n static async create(\n importName: string,\n path: string | undefined,\n fsReadFile: typeof import(\"fs/promises\").readFile,\n ) {\n if (!path) {\n return new ImportError(importName, path);\n }\n const content = await fsReadFile(path, \"utf-8\");\n const lines = content.split(\"\\n\");\n\n const affectedLine = lines.findIndex((line) => line.includes(importName));\n\n const error = new ImportError(importName, path);\n error.stack = `ImportError: you cannot import ${importName} because it marked as optional inside package.json \\n\n at ${path}:${affectedLine + 1}:0`;\n\n return error;\n }\n}\n"],"names":[],"mappings":";AAEO,MAAM,oBAAoB,YAAY;AAAA,EACnC,YACE,YACA,MACR;AACA;AAAA,MACE,qBAAqB,UAAU;AAAA;AAAA,KAEvB,QAAQ,cAAc;AAAA;AAAA;AAAA;AAAA,6DAGkC,UAAU;AAAA;AAAA,sDACjB,UAAU;AAAA,IACrE;AAXQ,SAAA,aAAA;AACA,SAAA,OAAA;AAAA,EAAA;AAAA,EAaV,aAAa,OACX,YACA,MACA,YACA;AACA,QAAI,CAAC,MAAM;AACF,aAAA,IAAI,YAAY,YAAY,IAAI;AAAA,IAAA;AAEzC,UAAM,UAAU,MAAM,WAAW,MAAM,OAAO;AACxC,UAAA,QAAQ,QAAQ,MAAM,IAAI;AAE1B,UAAA,eAAe,MAAM,UAAU,CAAC,SAAS,KAAK,SAAS,UAAU,CAAC;AAExE,UAAM,QAAQ,IAAI,YAAY,YAAY,IAAI;AACxC,UAAA,QAAQ,kCAAkC,UAAU;AAAA;AAAA,SACrD,IAAI,IAAI,eAAe,CAAC;AAEtB,WAAA;AAAA,EAAA;AAEX;"}
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from "vite";
2
+ import type { PackageJson } from "../../packageJson.js";
3
+ export declare function importsPlugin(packageJson: PackageJson, test?: boolean): Plugin;
@@ -0,0 +1,72 @@
1
+ import { ImportError } from "./ImportError.mjs";
2
+ import * as fs from "node:fs/promises";
3
+ function isNodeModule(id) {
4
+ return id.startsWith("node:");
5
+ }
6
+ function importsPlugin(packageJson, test) {
7
+ var _a, _b;
8
+ if (test) {
9
+ return {
10
+ name: "smartbundle:imports"
11
+ };
12
+ }
13
+ const dynamicDeps = /* @__PURE__ */ new Set();
14
+ const staticDeps = /* @__PURE__ */ new Set();
15
+ for (const dep of Object.keys(packageJson.dependencies ?? {})) {
16
+ dynamicDeps.add(dep);
17
+ staticDeps.add(dep);
18
+ }
19
+ for (const dep of Object.keys(packageJson.peerDependencies ?? {})) {
20
+ if (!((_b = (_a = packageJson.peerDependenciesMeta) == null ? void 0 : _a[dep]) == null ? void 0 : _b.optional)) {
21
+ staticDeps.add(dep);
22
+ }
23
+ dynamicDeps.add(dep);
24
+ }
25
+ for (const dep of Object.keys(packageJson.optionalDependencies ?? {})) {
26
+ dynamicDeps.add(dep);
27
+ }
28
+ dynamicDeps.add(packageJson.name);
29
+ staticDeps.add(packageJson.name);
30
+ function createDepResolver(depsSet) {
31
+ return (id) => {
32
+ const segments = id.split("/");
33
+ let current = "";
34
+ for (const segment of segments) {
35
+ current += segment;
36
+ if (depsSet.has(current)) {
37
+ return true;
38
+ }
39
+ current += "/";
40
+ }
41
+ return false;
42
+ };
43
+ }
44
+ const dynamicDepResolver = createDepResolver(dynamicDeps);
45
+ const staticDepResolver = createDepResolver(staticDeps);
46
+ return {
47
+ name: "smartbundle:imports",
48
+ enforce: "pre",
49
+ async resolveId(id, importer) {
50
+ if (isNodeModule(id) || staticDepResolver(id)) {
51
+ return false;
52
+ }
53
+ if (dynamicDepResolver(id)) {
54
+ this.error(await ImportError.create(id, importer, fs.readFile));
55
+ }
56
+ return null;
57
+ },
58
+ resolveDynamicImport(id) {
59
+ if (typeof id !== "string") {
60
+ return null;
61
+ }
62
+ if (isNodeModule(id) || dynamicDepResolver(id)) {
63
+ return false;
64
+ }
65
+ return null;
66
+ }
67
+ };
68
+ }
69
+ export {
70
+ importsPlugin
71
+ };
72
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../../src/plugins/imports/index.ts"],"sourcesContent":["import type { Plugin } from \"vite\";\nimport type { PackageJson } from \"../../packageJson.js\";\nimport { ImportError } from \"./ImportError.js\";\nimport * as fs from \"node:fs/promises\";\n\nfunction isNodeModule(id: string) {\n return id.startsWith(\"node:\");\n}\n\nexport function importsPlugin(\n packageJson: PackageJson,\n test?: boolean,\n): Plugin {\n if (test) {\n return {\n name: \"smartbundle:imports\",\n };\n }\n\n const dynamicDeps = new Set<string>();\n const staticDeps = new Set<string>();\n for (const dep of Object.keys(packageJson.dependencies ?? {})) {\n dynamicDeps.add(dep);\n staticDeps.add(dep);\n }\n for (const dep of Object.keys(packageJson.peerDependencies ?? {})) {\n if (!packageJson.peerDependenciesMeta?.[dep]?.optional) {\n staticDeps.add(dep);\n }\n dynamicDeps.add(dep);\n }\n for (const dep of Object.keys(packageJson.optionalDependencies ?? {})) {\n dynamicDeps.add(dep);\n }\n dynamicDeps.add(packageJson.name);\n staticDeps.add(packageJson.name);\n\n function createDepResolver(depsSet: Set<string>) {\n return (id: string) => {\n const segments = id.split(\"/\");\n let current = \"\";\n for (const segment of segments) {\n current += segment;\n // import {} from \"a/b/c/d\"; case\n if (depsSet.has(current)) {\n return true;\n }\n current += \"/\";\n }\n return false;\n };\n }\n\n const dynamicDepResolver = createDepResolver(dynamicDeps);\n const staticDepResolver = createDepResolver(staticDeps);\n return {\n name: \"smartbundle:imports\",\n enforce: \"pre\",\n async resolveId(id, importer) {\n if (isNodeModule(id) || staticDepResolver(id)) {\n return false;\n }\n if (dynamicDepResolver(id)) {\n this.error(await ImportError.create(id, importer, fs.readFile));\n }\n return null;\n },\n resolveDynamicImport(id) {\n if (typeof id !== \"string\") {\n return null;\n }\n if (isNodeModule(id) || dynamicDepResolver(id)) {\n return false;\n }\n\n return null;\n },\n };\n}\n"],"names":[],"mappings":";;AAKA,SAAS,aAAa,IAAY;AACzB,SAAA,GAAG,WAAW,OAAO;AAC9B;AAEgB,SAAA,cACd,aACA,MACQ;;AACR,MAAI,MAAM;AACD,WAAA;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EAAA;AAGI,QAAA,kCAAkB,IAAY;AAC9B,QAAA,iCAAiB,IAAY;AACnC,aAAW,OAAO,OAAO,KAAK,YAAY,gBAAgB,CAAA,CAAE,GAAG;AAC7D,gBAAY,IAAI,GAAG;AACnB,eAAW,IAAI,GAAG;AAAA,EAAA;AAEpB,aAAW,OAAO,OAAO,KAAK,YAAY,oBAAoB,CAAA,CAAE,GAAG;AACjE,QAAI,GAAC,uBAAY,yBAAZ,mBAAmC,SAAnC,mBAAyC,WAAU;AACtD,iBAAW,IAAI,GAAG;AAAA,IAAA;AAEpB,gBAAY,IAAI,GAAG;AAAA,EAAA;AAErB,aAAW,OAAO,OAAO,KAAK,YAAY,wBAAwB,CAAA,CAAE,GAAG;AACrE,gBAAY,IAAI,GAAG;AAAA,EAAA;AAET,cAAA,IAAI,YAAY,IAAI;AACrB,aAAA,IAAI,YAAY,IAAI;AAE/B,WAAS,kBAAkB,SAAsB;AAC/C,WAAO,CAAC,OAAe;AACf,YAAA,WAAW,GAAG,MAAM,GAAG;AAC7B,UAAI,UAAU;AACd,iBAAW,WAAW,UAAU;AACnB,mBAAA;AAEP,YAAA,QAAQ,IAAI,OAAO,GAAG;AACjB,iBAAA;AAAA,QAAA;AAEE,mBAAA;AAAA,MAAA;AAEN,aAAA;AAAA,IACT;AAAA,EAAA;AAGI,QAAA,qBAAqB,kBAAkB,WAAW;AAClD,QAAA,oBAAoB,kBAAkB,UAAU;AAC/C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,UAAU,IAAI,UAAU;AAC5B,UAAI,aAAa,EAAE,KAAK,kBAAkB,EAAE,GAAG;AACtC,eAAA;AAAA,MAAA;AAEL,UAAA,mBAAmB,EAAE,GAAG;AACrB,aAAA,MAAM,MAAM,YAAY,OAAO,IAAI,UAAU,GAAG,QAAQ,CAAC;AAAA,MAAA;AAEzD,aAAA;AAAA,IACT;AAAA,IACA,qBAAqB,IAAI;AACnB,UAAA,OAAO,OAAO,UAAU;AACnB,eAAA;AAAA,MAAA;AAET,UAAI,aAAa,EAAE,KAAK,mBAAmB,EAAE,GAAG;AACvC,eAAA;AAAA,MAAA;AAGF,aAAA;AAAA,IAAA;AAAA,EAEX;AACF;"}
@@ -1,7 +1,7 @@
1
1
  function promiseSettledResultErrors(results) {
2
2
  const errors = [];
3
3
  for (const result of results) {
4
- if (result instanceof Array) {
4
+ if (Array.isArray(result)) {
5
5
  errors.push(promiseSettledResultErrors(result));
6
6
  } else if (result.status === "rejected") {
7
7
  errors.push(result.reason);
@@ -1 +1 @@
1
- {"version":3,"file":"promiseSettledResultErrors.mjs","sources":["../../../../src/promiseSettledResultErrors.ts"],"sourcesContent":["type Hierarchy = Array<PromiseSettledResult<any> | Hierarchy>;\n\nexport function promiseSettledResultErrors<H extends Hierarchy>(results: H) {\n const errors: Array<any> = [];\n for (const result of results) {\n if (result instanceof Array) {\n errors.push(promiseSettledResultErrors(result));\n } else if (result.status === \"rejected\") {\n errors.push(result.reason);\n }\n }\n return errors.flat(Infinity);\n}\n"],"names":[],"mappings":"AAEO,SAAS,2BAAgD,SAAY;AAC1E,QAAM,SAAqB,CAAC;AAC5B,aAAW,UAAU,SAAS;AAC5B,QAAI,kBAAkB,OAAO;AACpB,aAAA,KAAK,2BAA2B,MAAM,CAAC;AAAA,IAAA,WACrC,OAAO,WAAW,YAAY;AAChC,aAAA,KAAK,OAAO,MAAM;AAAA,IAAA;AAAA,EAC3B;AAEK,SAAA,OAAO,KAAK,QAAQ;AAC7B;"}
1
+ {"version":3,"file":"promiseSettledResultErrors.mjs","sources":["../../../../src/promiseSettledResultErrors.ts"],"sourcesContent":["type Hierarchy = Array<PromiseSettledResult<any> | Hierarchy>;\n\nexport function promiseSettledResultErrors<H extends Hierarchy>(results: H) {\n const errors: Array<any> = [];\n for (const result of results) {\n if (Array.isArray(result)) {\n errors.push(promiseSettledResultErrors(result));\n } else if (result.status === \"rejected\") {\n errors.push(result.reason);\n }\n }\n return errors.flat(Infinity);\n}\n"],"names":[],"mappings":"AAEO,SAAS,2BAAgD,SAAY;AAC1E,QAAM,SAAqB,CAAC;AAC5B,aAAW,UAAU,SAAS;AACxB,QAAA,MAAM,QAAQ,MAAM,GAAG;AAClB,aAAA,KAAK,2BAA2B,MAAM,CAAC;AAAA,IAAA,WACrC,OAAO,WAAW,YAAY;AAChC,aAAA,KAAK,OAAO,MAAM;AAAA,IAAA;AAAA,EAC3B;AAEK,SAAA,OAAO,KAAK,QAAQ;AAC7B;"}