smartbundle 0.11.0-alpha.1 → 0.11.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/__compiled__/cjs/src/buildVite.d.ts +1 -1
  2. package/__compiled__/cjs/src/buildVite.js.map +1 -1
  3. package/__compiled__/cjs/src/createViteConfig.d.ts +3 -1
  4. package/__compiled__/cjs/src/createViteConfig.js +10 -2
  5. package/__compiled__/cjs/src/createViteConfig.js.map +1 -1
  6. package/__compiled__/cjs/src/detectModules.d.ts +7 -0
  7. package/__compiled__/cjs/src/detectModules.js +102 -0
  8. package/__compiled__/cjs/src/detectModules.js.map +1 -0
  9. package/__compiled__/cjs/src/index.js +19 -4
  10. package/__compiled__/cjs/src/index.js.map +1 -1
  11. package/__compiled__/cjs/src/log.d.ts +6 -0
  12. package/__compiled__/cjs/src/log.js +32 -0
  13. package/__compiled__/cjs/src/log.js.map +1 -0
  14. package/__compiled__/cjs/src/plugins/babel/index.d.ts +4 -2
  15. package/__compiled__/cjs/src/plugins/babel/index.js +20 -36
  16. package/__compiled__/cjs/src/plugins/babel/index.js.map +1 -1
  17. package/__compiled__/cjs/src/plugins/react/index.d.ts +4 -4
  18. package/__compiled__/cjs/src/plugins/react/index.js +15 -10
  19. package/__compiled__/cjs/src/plugins/react/index.js.map +1 -1
  20. package/__compiled__/cjs/src/tasks/binsTask.d.ts +1 -1
  21. package/__compiled__/cjs/src/tasks/binsTask.js +4 -1
  22. package/__compiled__/cjs/src/tasks/binsTask.js.map +1 -1
  23. package/__compiled__/cjs/src/tasks/buildTypesTask/buildTypesTask.d.ts +3 -1
  24. package/__compiled__/cjs/src/tasks/buildTypesTask/buildTypesTask.js +11 -32
  25. package/__compiled__/cjs/src/tasks/buildTypesTask/buildTypesTask.js.map +1 -1
  26. package/__compiled__/cjs/src/tasks/buildTypesTask/callTypescript.js +14 -2
  27. package/__compiled__/cjs/src/tasks/buildTypesTask/callTypescript.js.map +1 -1
  28. package/__compiled__/cjs/src/tasks/buildTypesTask/inlineExtensions.d.ts +3 -2
  29. package/__compiled__/cjs/src/tasks/buildTypesTask/inlineExtensions.js +13 -8
  30. package/__compiled__/cjs/src/tasks/buildTypesTask/inlineExtensions.js.map +1 -1
  31. package/__compiled__/cjs/src/tasks/copyStaticFilesTask.d.ts +1 -1
  32. package/__compiled__/cjs/src/tasks/copyStaticFilesTask.js +7 -1
  33. package/__compiled__/cjs/src/tasks/copyStaticFilesTask.js.map +1 -1
  34. package/__compiled__/cjs/src/tasks/jsFilesTask.d.ts +1 -1
  35. package/__compiled__/cjs/src/tasks/jsFilesTask.js +2 -1
  36. package/__compiled__/cjs/src/tasks/jsFilesTask.js.map +1 -1
  37. package/__compiled__/cjs/src/writePackageJson.js +2 -0
  38. package/__compiled__/cjs/src/writePackageJson.js.map +1 -1
  39. package/__compiled__/esm/src/buildVite.d.mts +1 -1
  40. package/__compiled__/esm/src/buildVite.mjs.map +1 -1
  41. package/__compiled__/esm/src/createViteConfig.d.mts +3 -1
  42. package/__compiled__/esm/src/createViteConfig.mjs +10 -2
  43. package/__compiled__/esm/src/createViteConfig.mjs.map +1 -1
  44. package/__compiled__/esm/src/detectModules.d.mts +7 -0
  45. package/__compiled__/esm/src/detectModules.mjs +80 -0
  46. package/__compiled__/esm/src/detectModules.mjs.map +1 -0
  47. package/__compiled__/esm/src/index.mjs +19 -4
  48. package/__compiled__/esm/src/index.mjs.map +1 -1
  49. package/__compiled__/esm/src/log.d.mts +6 -0
  50. package/__compiled__/esm/src/log.mjs +32 -0
  51. package/__compiled__/esm/src/log.mjs.map +1 -0
  52. package/__compiled__/esm/src/plugins/babel/index.d.mts +4 -2
  53. package/__compiled__/esm/src/plugins/babel/index.mjs +20 -14
  54. package/__compiled__/esm/src/plugins/babel/index.mjs.map +1 -1
  55. package/__compiled__/esm/src/plugins/react/index.d.mts +4 -4
  56. package/__compiled__/esm/src/plugins/react/index.mjs +15 -10
  57. package/__compiled__/esm/src/plugins/react/index.mjs.map +1 -1
  58. package/__compiled__/esm/src/tasks/binsTask.d.mts +1 -1
  59. package/__compiled__/esm/src/tasks/binsTask.mjs +4 -1
  60. package/__compiled__/esm/src/tasks/binsTask.mjs.map +1 -1
  61. package/__compiled__/esm/src/tasks/buildTypesTask/buildTypesTask.d.mts +3 -1
  62. package/__compiled__/esm/src/tasks/buildTypesTask/buildTypesTask.mjs +11 -10
  63. package/__compiled__/esm/src/tasks/buildTypesTask/buildTypesTask.mjs.map +1 -1
  64. package/__compiled__/esm/src/tasks/buildTypesTask/callTypescript.mjs +14 -2
  65. package/__compiled__/esm/src/tasks/buildTypesTask/callTypescript.mjs.map +1 -1
  66. package/__compiled__/esm/src/tasks/buildTypesTask/inlineExtensions.d.mts +3 -2
  67. package/__compiled__/esm/src/tasks/buildTypesTask/inlineExtensions.mjs +13 -8
  68. package/__compiled__/esm/src/tasks/buildTypesTask/inlineExtensions.mjs.map +1 -1
  69. package/__compiled__/esm/src/tasks/copyStaticFilesTask.d.mts +1 -1
  70. package/__compiled__/esm/src/tasks/copyStaticFilesTask.mjs +7 -1
  71. package/__compiled__/esm/src/tasks/copyStaticFilesTask.mjs.map +1 -1
  72. package/__compiled__/esm/src/tasks/jsFilesTask.d.mts +1 -1
  73. package/__compiled__/esm/src/tasks/jsFilesTask.mjs +2 -1
  74. package/__compiled__/esm/src/tasks/jsFilesTask.mjs.map +1 -1
  75. package/__compiled__/esm/src/writePackageJson.mjs +2 -0
  76. package/__compiled__/esm/src/writePackageJson.mjs.map +1 -1
  77. package/package.json +1 -1
@@ -10,11 +10,14 @@ import { buildTypesTask } from "./tasks/buildTypesTask/buildTypesTask.mjs";
10
10
  import { BuildError } from "./error.mjs";
11
11
  import { jsFilesTask } from "./tasks/jsFilesTask.mjs";
12
12
  import { binsTask } from "./tasks/binsTask.mjs";
13
+ import { detectModules } from "./detectModules.mjs";
14
+ import { okLog, lineLog, log, disableLog } from "./log.mjs";
13
15
  function setExports(exportsMap, exportName, mapFn) {
14
16
  const entry = exportsMap.get(exportName) ?? {};
15
17
  exportsMap.set(exportName, mapFn(entry));
16
18
  }
17
19
  async function defineViteConfig(args = {}) {
20
+ disableLog();
18
21
  const dirs = resolveDirs(args);
19
22
  const { sourceDir, outDir, packagePath } = dirs;
20
23
  await rm(outDir, { recursive: true, force: true });
@@ -24,7 +27,8 @@ async function defineViteConfig(args = {}) {
24
27
  console.error(packageJson);
25
28
  throw new Error("Failed to parse package.json");
26
29
  }
27
- const { viteConfig } = createViteConfig({ dirs, packageJson });
30
+ const modules = await detectModules(packageJson);
31
+ const { viteConfig } = createViteConfig({ dirs, packageJson, modules });
28
32
  return viteConfig;
29
33
  }
30
34
  async function run(args) {
@@ -36,10 +40,13 @@ async function run(args) {
36
40
  if (Array.isArray(packageJson)) {
37
41
  return { error: true, errors: packageJson };
38
42
  }
43
+ const modules = await detectModules(packageJson);
39
44
  const { viteConfig, entrypoints, bins } = createViteConfig({
40
45
  dirs,
41
- packageJson
46
+ packageJson,
47
+ modules
42
48
  });
49
+ okLog("Vite");
43
50
  const outputs = await buildVite({ viteConfig });
44
51
  if (outputs.error) {
45
52
  return { error: true, errors: outputs.errors };
@@ -53,7 +60,8 @@ async function run(args) {
53
60
  sourceDir,
54
61
  outDir,
55
62
  entrypoints,
56
- buildOutput: viteOutput
63
+ buildOutput: viteOutput,
64
+ modules
57
65
  }).then((res) => {
58
66
  for (const [types, source] of res) {
59
67
  setExports(exportsMap, source, (entry) => {
@@ -90,7 +98,12 @@ async function run(args) {
90
98
  }
91
99
  )
92
100
  ]);
93
- const errors = tasksRes.filter((res) => res.status === "rejected").map((res) => res.reason).filter((res) => res instanceof BuildError).map((res) => res.error);
101
+ const errors = tasksRes.filter((res) => res.status === "rejected").map((res) => res.reason).map((res) => {
102
+ if (res instanceof BuildError) {
103
+ return res.error;
104
+ }
105
+ return res.message;
106
+ });
94
107
  if (errors.length > 0) {
95
108
  return { error: true, errors };
96
109
  }
@@ -98,6 +111,8 @@ async function run(args) {
98
111
  exportsMap,
99
112
  binsMap
100
113
  });
114
+ lineLog();
115
+ log(`Build finished: ./${relative(sourceDir, outDir)}`);
101
116
  return { error: false };
102
117
  }
103
118
  export {
@@ -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 { buildVite } from \"./buildVite.js\";\nimport { type Args, 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\";\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 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 { viteConfig } = createViteConfig({ dirs, packageJson });\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 { viteConfig, entrypoints, bins } = createViteConfig({\n dirs,\n packageJson,\n });\n\n const outputs = await buildVite({ viteConfig });\n if (outputs.error) {\n return { error: true, errors: outputs.errors };\n }\n const viteOutput = outputs.output;\n\n const exportsMap = new Map<string, ExportsObject>();\n const binsMap = new Map<string, string>();\n const tasksRes = await Promise.allSettled([\n copyStaticFilesTask(sourceDir, outDir),\n buildTypesTask({\n sourceDir,\n outDir,\n entrypoints,\n buildOutput: viteOutput,\n }).then((res) => {\n for (const [types, source] of res) {\n setExports(exportsMap, source, (entry) => {\n if (types.endsWith(\".d.ts\")) {\n entry.dcts = \"./\" + relative(outDir, types);\n }\n if (types.endsWith(\".d.mts\")) {\n entry.dmts = \"./\" + relative(outDir, types);\n }\n return entry;\n });\n }\n }),\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 const errors = tasksRes\n .filter((res) => res.status === \"rejected\")\n .map((res) => res.reason)\n .filter((res): res is BuildError => res instanceof BuildError)\n .map((res) => res.error);\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 return { error: false };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/index.ts"],"sourcesContent":["import { relative } from \"node:path\";\nimport { mkdir, rm } from \"node:fs/promises\";\nimport { parsePackageJson } from \"./packageJson.js\";\nimport { type ExportsObject, writePackageJson } from \"./writePackageJson.js\";\nimport { buildVite } from \"./buildVite.js\";\nimport { type Args, 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\";\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 modules = await detectModules(packageJson);\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 modules = await detectModules(packageJson);\n const { viteConfig, entrypoints, bins } = createViteConfig({\n dirs,\n packageJson,\n modules,\n });\n\n okLog(\"Vite\");\n const outputs = await buildVite({ viteConfig });\n if (outputs.error) {\n return { error: true, errors: outputs.errors };\n }\n const viteOutput = outputs.output;\n\n const exportsMap = new Map<string, ExportsObject>();\n const binsMap = new Map<string, string>();\n const tasksRes = await Promise.allSettled([\n copyStaticFilesTask(sourceDir, outDir),\n buildTypesTask({\n sourceDir,\n outDir,\n entrypoints,\n buildOutput: viteOutput,\n modules,\n }).then((res) => {\n for (const [types, source] of res) {\n setExports(exportsMap, source, (entry) => {\n if (types.endsWith(\".d.ts\")) {\n entry.dcts = \"./\" + relative(outDir, types);\n }\n if (types.endsWith(\".d.mts\")) {\n entry.dmts = \"./\" + relative(outDir, types);\n }\n return entry;\n });\n }\n }),\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 const errors = tasksRes\n .filter((res) => res.status === \"rejected\")\n .map((res) => res.reason)\n .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":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function disableLog(): void;
2
+ export declare function log(...messages: Array<string>): void;
3
+ export declare function warnLog(...messages: Array<string>): void;
4
+ export declare function okLog(...messages: Array<string>): void;
5
+ export declare function errorLog(...messages: Array<string>): void;
6
+ export declare function lineLog(): void;
@@ -0,0 +1,32 @@
1
+ let logEnabled = true;
2
+ function disableLog() {
3
+ logEnabled = false;
4
+ }
5
+ function log(...messages) {
6
+ if (logEnabled) {
7
+ console.log(...messages);
8
+ }
9
+ }
10
+ function warnLog(...messages) {
11
+ if (logEnabled) {
12
+ console.warn(...messages);
13
+ }
14
+ }
15
+ function okLog(...messages) {
16
+ log(`✅ ${messages.join(" ")}`);
17
+ }
18
+ function errorLog(...messages) {
19
+ log(`❌ ${messages.join(" ")}`);
20
+ }
21
+ function lineLog() {
22
+ log("=".repeat(40));
23
+ }
24
+ export {
25
+ disableLog,
26
+ errorLog,
27
+ lineLog,
28
+ log,
29
+ okLog,
30
+ warnLog
31
+ };
32
+ //# sourceMappingURL=log.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.mjs","sources":["../../../../src/log.ts"],"sourcesContent":["let logEnabled = true;\nexport function disableLog() {\n logEnabled = false;\n}\n\nexport function log(...messages: Array<string>) {\n if (logEnabled) {\n console.log(...messages);\n }\n}\nexport function warnLog(...messages: Array<string>) {\n if (logEnabled) {\n console.warn(...messages);\n }\n}\n\nexport function okLog(...messages: Array<string>) {\n log(`✅ ${messages.join(\" \")}`);\n}\nexport function errorLog(...messages: Array<string>) {\n log(`❌ ${messages.join(\" \")}`);\n}\nexport function lineLog() {\n log(\"=\".repeat(40));\n}\n"],"names":[],"mappings":"AAAA,IAAI,aAAa;AACV,SAAS,aAAa;AACd,eAAA;AACf;AAEO,SAAS,OAAO,UAAyB;AAC9C,MAAI,YAAY;AACN,YAAA,IAAI,GAAG,QAAQ;AAAA,EACzB;AACF;AACO,SAAS,WAAW,UAAyB;AAClD,MAAI,YAAY;AACN,YAAA,KAAK,GAAG,QAAQ;AAAA,EAC1B;AACF;AAEO,SAAS,SAAS,UAAyB;AAChD,MAAI,KAAK,SAAS,KAAK,GAAG,CAAC,EAAE;AAC/B;AACO,SAAS,YAAY,UAAyB;AACnD,MAAI,KAAK,SAAS,KAAK,GAAG,CAAC,EAAE;AAC/B;AACO,SAAS,UAAU;AACpB,MAAA,IAAI,OAAO,EAAE,CAAC;AACpB;"}
@@ -1,9 +1,11 @@
1
- import { type Plugin } from "vite";
1
+ import type { Plugin } from "vite";
2
2
  import { type PackageJson } from "../../packageJson.js";
3
3
  import { type Dirs } from "../../resolveDirs.js";
4
+ import { type DetectedModules } from "../../detectModules.js";
4
5
  type BabelPluginOptions = {
5
6
  packageJson: PackageJson;
6
7
  dirs: Dirs;
8
+ modules: DetectedModules;
7
9
  };
8
- export declare function babelPlugin({ packageJson, dirs }: BabelPluginOptions): Plugin;
10
+ export declare function babelPlugin({ packageJson, dirs, modules, }: BabelPluginOptions): Plugin;
9
11
  export {};
@@ -1,27 +1,24 @@
1
- import "vite";
2
1
  import * as path from "node:path";
3
2
  import { findBabelConfig } from "./findBabelConfig.mjs";
4
3
  import "node:fs/promises";
5
4
  import "zod";
6
- function babelPlugin({ packageJson, dirs }) {
7
- let babelCore;
5
+ import "semver";
6
+ import { okLog } from "../../log.mjs";
7
+ function babelPlugin({
8
+ packageJson,
9
+ dirs,
10
+ modules
11
+ }) {
8
12
  let hasBabelConfig = false;
9
13
  return {
10
14
  name: "smartbundle:babel",
11
15
  async buildStart() {
12
- try {
13
- if (!("@babel/core" in (packageJson.optionalDependencies ?? {}))) {
14
- babelCore = await import("@babel/core");
15
- }
16
- } catch (e) {
17
- console.error(e);
18
- }
19
16
  hasBabelConfig = await findBabelConfig(dirs.sourceDir, packageJson);
20
- if (babelCore && !hasBabelConfig) {
17
+ if (modules.babel && !hasBabelConfig) {
21
18
  this.warn(
22
19
  "We have found a @babel/core package, but config was not found. It could be a bug"
23
20
  );
24
- } else if (!babelCore && hasBabelConfig) {
21
+ } else if (!modules.babel && hasBabelConfig) {
25
22
  this.error(
26
23
  new Error(
27
24
  "We have found a babel config. Please install @babel/core to devDeps or remove the config file"
@@ -30,7 +27,7 @@ function babelPlugin({ packageJson, dirs }) {
30
27
  }
31
28
  },
32
29
  async transform(code, id) {
33
- if (!babelCore || !hasBabelConfig) {
30
+ if (!modules.babel || !hasBabelConfig) {
34
31
  return null;
35
32
  }
36
33
  const extname = path.extname(id);
@@ -38,7 +35,7 @@ function babelPlugin({ packageJson, dirs }) {
38
35
  return null;
39
36
  }
40
37
  const map = this.getCombinedSourcemap();
41
- const result = await babelCore.transformAsync(code, {
38
+ const result = await modules.babel.transformAsync(code, {
42
39
  filename: id,
43
40
  sourceMaps: true,
44
41
  inputSourceMap: map
@@ -50,6 +47,15 @@ function babelPlugin({ packageJson, dirs }) {
50
47
  code: result.code,
51
48
  map: result.map
52
49
  };
50
+ },
51
+ buildEnd(error) {
52
+ if (!error) {
53
+ if (modules.babel && hasBabelConfig) {
54
+ okLog("Babel");
55
+ }
56
+ } else {
57
+ this.error(error);
58
+ }
53
59
  }
54
60
  };
55
61
  }
@@ -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\";\n\ntype BabelPluginOptions = {\n packageJson: PackageJson;\n dirs: Dirs;\n};\n\nexport function babelPlugin({ packageJson, dirs }: BabelPluginOptions): Plugin {\n let babelCore: typeof import(\"@babel/core\") | undefined;\n let hasBabelConfig = false;\n\n return {\n name: \"smartbundle:babel\",\n async buildStart() {\n try {\n if (!(\"@babel/core\" in (packageJson.optionalDependencies ?? {}))) {\n babelCore = await import(\"@babel/core\");\n }\n } catch (e) {\n console.error(e);\n // Leave babelCore as undefined\n }\n\n hasBabelConfig = await findBabelConfig(dirs.sourceDir, packageJson);\n if (babelCore && !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 (!babelCore && 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 (!babelCore || !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 babelCore.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 };\n}\n"],"names":[],"mappings":";;;;;AAWO,SAAS,YAAY,EAAE,aAAa,QAAoC;AACzE,MAAA;AACJ,MAAI,iBAAiB;AAEd,SAAA;AAAA,IACL,MAAM;AAAA,IACN,MAAM,aAAa;AACb,UAAA;AACF,YAAI,EAAE,kBAAkB,YAAY,wBAAwB,CAAA,KAAM;AACpD,sBAAA,MAAM,OAAO,aAAa;AAAA,QACxC;AAAA,eACO,GAAG;AACV,gBAAQ,MAAM,CAAC;AAAA,MAEjB;AAEA,uBAAiB,MAAM,gBAAgB,KAAK,WAAW,WAAW;AAC9D,UAAA,aAAa,CAAC,gBAAgB;AAC3B,aAAA;AAAA,UACH;AAAA,QAAA;AAAA,MACF,WACS,CAAC,aAAa,gBAAgB;AAClC,aAAA;AAAA,UACH,IAAI;AAAA,YACF;AAAA,UACF;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAAA,IACA,MAAM,UAAU,MAAM,IAAI;AACpB,UAAA,CAAC,aAAa,CAAC,gBAAgB;AAC1B,eAAA;AAAA,MACT;AAEM,YAAA,UAAU,KAAK,QAAQ,EAAE;AAC/B,UAAI,CAAC,CAAC,OAAO,KAAK,EAAE,SAAS,OAAO,GAAG;AAC9B,eAAA;AAAA,MACT;AAEM,YAAA,MAAM,KAAK;AAEjB,YAAM,SAAS,MAAM,UAAU,eAAe,MAAM;AAAA,QAClD,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,gBAAgB;AAAA,MAAA,CACjB;AAEG,UAAA,EAAC,iCAAQ,OAAM;AACX,cAAA,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AAEO,aAAA;AAAA,QACL,MAAM,OAAO;AAAA,QACb,KAAK,OAAO;AAAA,MAAA;AAAA,IAEhB;AAAA,EAAA;AAEJ;"}
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,QAAA;AAAA,MAEO,WAAA,CAAC,QAAQ,SAAS,gBAAgB;AACtC,aAAA;AAAA,UACH,IAAI;AAAA,YACF;AAAA,UACF;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAAA,IACA,MAAM,UAAU,MAAM,IAAI;AACxB,UAAI,CAAC,QAAQ,SAAS,CAAC,gBAAgB;AAC9B,eAAA;AAAA,MACT;AAEM,YAAA,UAAU,KAAK,QAAQ,EAAE;AAC/B,UAAI,CAAC,CAAC,OAAO,KAAK,EAAE,SAAS,OAAO,GAAG;AAC9B,eAAA;AAAA,MACT;AAEM,YAAA,MAAM,KAAK;AAEjB,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,MAC/C;AAEO,aAAA;AAAA,QACL,MAAM,OAAO;AAAA,QACb,KAAK,OAAO;AAAA,MAAA;AAAA,IAEhB;AAAA,IACA,SAAS,OAAO;AACd,UAAI,CAAC,OAAO;AACN,YAAA,QAAQ,SAAS,gBAAgB;AACnC,gBAAM,OAAO;AAAA,QACf;AAAA,MAAA,OACK;AACL,aAAK,MAAM,KAAK;AAAA,MAClB;AAAA,IACF;AAAA,EAAA;AAEJ;"}
@@ -1,7 +1,7 @@
1
- import { type Plugin } from "vite";
2
- import type { PackageJson } from "../../packageJson.js";
1
+ import type { Plugin } from "vite";
2
+ import { type DetectedModules } from "../../detectModules.js";
3
3
  type ReactPluginArg = {
4
- packageJson: PackageJson;
4
+ modules: DetectedModules;
5
5
  };
6
- export declare function reactPlugin({ packageJson }: ReactPluginArg): Plugin;
6
+ export declare function reactPlugin({ modules }: ReactPluginArg): Plugin;
7
7
  export {};
@@ -1,11 +1,13 @@
1
1
  import { transformWithEsbuild } from "vite";
2
- import semver from "semver";
2
+ import "node:fs/promises";
3
+ import "zod";
4
+ import "node:path";
5
+ import "semver";
6
+ import { okLog } from "../../log.mjs";
3
7
  const errorJsxMessage = "SmartBundle cannot find the react dependency inside dependencies, optionalDependencies or peerDependencies. Please, install it before bundling";
4
- function reactPlugin({ packageJson }) {
5
- var _a, _b, _c;
8
+ function reactPlugin({ modules }) {
6
9
  const pluginName = "smartbundle:react";
7
- const reactVersion = ((_a = packageJson.dependencies) == null ? void 0 : _a.react) ?? ((_b = packageJson.devDependencies) == null ? void 0 : _b.react) ?? ((_c = packageJson.optionalDependencies) == null ? void 0 : _c.react);
8
- if (!reactVersion) {
10
+ if (modules.react == null) {
9
11
  return {
10
12
  name: pluginName,
11
13
  transform(code, id) {
@@ -23,10 +25,6 @@ function reactPlugin({ packageJson }) {
23
25
  }
24
26
  };
25
27
  }
26
- const isLegacyTransform = semver.lt(
27
- semver.minVersion(reactVersion),
28
- "17.0.0"
29
- );
30
28
  return {
31
29
  name: pluginName,
32
30
  enforce: "pre",
@@ -42,11 +40,18 @@ function reactPlugin({ packageJson }) {
42
40
  id,
43
41
  {
44
42
  loader: isJs || isJsx ? "jsx" : "tsx",
45
- jsx: isLegacyTransform ? "transform" : "automatic",
43
+ jsx: modules.react === "legacy" ? "transform" : "automatic",
46
44
  sourcemap: true
47
45
  },
48
46
  this.getCombinedSourcemap()
49
47
  );
48
+ },
49
+ buildEnd(err) {
50
+ if (!err) {
51
+ okLog("React");
52
+ } else {
53
+ this.error(err);
54
+ }
50
55
  }
51
56
  };
52
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../../src/plugins/react/index.ts"],"sourcesContent":["import { type Plugin, transformWithEsbuild } from \"vite\";\nimport type { PackageJson } from \"../../packageJson.js\";\nimport semver from \"semver\";\n\ntype ReactPluginArg = {\n packageJson: PackageJson;\n};\n\nconst errorJsxMessage =\n \"SmartBundle cannot find the react dependency inside dependencies, optionalDependencies or peerDependencies. Please, install it before bundling\";\n\nexport function reactPlugin({ packageJson }: ReactPluginArg): Plugin {\n const pluginName = \"smartbundle:react\";\n\n const reactVersion =\n packageJson.dependencies?.react ??\n packageJson.devDependencies?.react ??\n packageJson.optionalDependencies?.react;\n\n if (!reactVersion) {\n return {\n name: pluginName,\n transform(code, id) {\n if (id.endsWith(\".jsx\") || id.endsWith(\".tsx\")) {\n this.error(new Error(errorJsxMessage));\n }\n },\n buildEnd(err) {\n if (err) {\n const isJsxError = err.message.includes(\"JSX\");\n if (isJsxError) {\n this.error(new Error(errorJsxMessage));\n }\n }\n },\n };\n }\n\n const isLegacyTransform = semver.lt(\n semver.minVersion(reactVersion)!,\n \"17.0.0\",\n );\n\n return {\n name: pluginName,\n enforce: \"pre\",\n async transform(code, id) {\n const isJs = id.endsWith(\".js\");\n const isJsx = id.endsWith(\".jsx\");\n const isTsx = id.endsWith(\".tsx\");\n if (!(isJs || isJsx || isTsx)) {\n return null;\n }\n\n return await transformWithEsbuild(\n code,\n id,\n {\n loader: isJs || isJsx ? \"jsx\" : \"tsx\",\n jsx: isLegacyTransform ? \"transform\" : \"automatic\",\n sourcemap: true,\n },\n this.getCombinedSourcemap(),\n );\n },\n };\n}\n"],"names":[],"mappings":";;AAQA,MAAM,kBACJ;AAEc,SAAA,YAAY,EAAE,eAAuC;;AACnE,QAAM,aAAa;AAEb,QAAA,iBACJ,iBAAY,iBAAZ,mBAA0B,YAC1B,iBAAY,oBAAZ,mBAA6B,YAC7B,iBAAY,yBAAZ,mBAAkC;AAEpC,MAAI,CAAC,cAAc;AACV,WAAA;AAAA,MACL,MAAM;AAAA,MACN,UAAU,MAAM,IAAI;AAClB,YAAI,GAAG,SAAS,MAAM,KAAK,GAAG,SAAS,MAAM,GAAG;AAC9C,eAAK,MAAM,IAAI,MAAM,eAAe,CAAC;AAAA,QACvC;AAAA,MACF;AAAA,MACA,SAAS,KAAK;AACZ,YAAI,KAAK;AACP,gBAAM,aAAa,IAAI,QAAQ,SAAS,KAAK;AAC7C,cAAI,YAAY;AACd,iBAAK,MAAM,IAAI,MAAM,eAAe,CAAC;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,oBAAoB,OAAO;AAAA,IAC/B,OAAO,WAAW,YAAY;AAAA,IAC9B;AAAA,EAAA;AAGK,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,UAAU,MAAM,IAAI;AAClB,YAAA,OAAO,GAAG,SAAS,KAAK;AACxB,YAAA,QAAQ,GAAG,SAAS,MAAM;AAC1B,YAAA,QAAQ,GAAG,SAAS,MAAM;AAC5B,UAAA,EAAE,QAAQ,SAAS,QAAQ;AACtB,eAAA;AAAA,MACT;AAEA,aAAO,MAAM;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,UACE,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,UAChC,KAAK,oBAAoB,cAAc;AAAA,UACvC,WAAW;AAAA,QACb;AAAA,QACA,KAAK,qBAAqB;AAAA,MAAA;AAAA,IAE9B;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../../src/plugins/react/index.ts"],"sourcesContent":["import type { Plugin } from \"vite\";\nimport { transformWithEsbuild } from \"vite\";\nimport { type DetectedModules } from \"../../detectModules.js\";\nimport { okLog } from \"../../log.js\";\n\ntype ReactPluginArg = {\n modules: DetectedModules;\n};\n\nconst errorJsxMessage =\n \"SmartBundle cannot find the react dependency inside dependencies, optionalDependencies or peerDependencies. Please, install it before bundling\";\n\nexport function reactPlugin({ modules }: ReactPluginArg): Plugin {\n const pluginName = \"smartbundle:react\";\n\n if (modules.react == null) {\n return {\n name: pluginName,\n transform(code, id) {\n if (id.endsWith(\".jsx\") || id.endsWith(\".tsx\")) {\n this.error(new Error(errorJsxMessage));\n }\n },\n buildEnd(err) {\n if (err) {\n const isJsxError = err.message.includes(\"JSX\");\n if (isJsxError) {\n this.error(new Error(errorJsxMessage));\n }\n }\n },\n };\n }\n\n return {\n name: pluginName,\n enforce: \"pre\",\n async transform(code, id) {\n const isJs = id.endsWith(\".js\");\n const isJsx = id.endsWith(\".jsx\");\n const isTsx = id.endsWith(\".tsx\");\n if (!(isJs || isJsx || isTsx)) {\n return null;\n }\n\n return await transformWithEsbuild(\n code,\n id,\n {\n loader: isJs || isJsx ? \"jsx\" : \"tsx\",\n jsx: modules.react === \"legacy\" ? \"transform\" : \"automatic\",\n sourcemap: true,\n },\n this.getCombinedSourcemap(),\n );\n },\n buildEnd(err) {\n if (!err) {\n okLog(\"React\");\n } else {\n this.error(err);\n }\n },\n };\n}\n"],"names":[],"mappings":";;;;;;AASA,MAAM,kBACJ;AAEc,SAAA,YAAY,EAAE,WAAmC;AAC/D,QAAM,aAAa;AAEf,MAAA,QAAQ,SAAS,MAAM;AAClB,WAAA;AAAA,MACL,MAAM;AAAA,MACN,UAAU,MAAM,IAAI;AAClB,YAAI,GAAG,SAAS,MAAM,KAAK,GAAG,SAAS,MAAM,GAAG;AAC9C,eAAK,MAAM,IAAI,MAAM,eAAe,CAAC;AAAA,QACvC;AAAA,MACF;AAAA,MACA,SAAS,KAAK;AACZ,YAAI,KAAK;AACP,gBAAM,aAAa,IAAI,QAAQ,SAAS,KAAK;AAC7C,cAAI,YAAY;AACd,iBAAK,MAAM,IAAI,MAAM,eAAe,CAAC;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AAEO,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,UAAU,MAAM,IAAI;AAClB,YAAA,OAAO,GAAG,SAAS,KAAK;AACxB,YAAA,QAAQ,GAAG,SAAS,MAAM;AAC1B,YAAA,QAAQ,GAAG,SAAS,MAAM;AAC5B,UAAA,EAAE,QAAQ,SAAS,QAAQ;AACtB,eAAA;AAAA,MACT;AAEA,aAAO,MAAM;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,UACE,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,UAChC,KAAK,QAAQ,UAAU,WAAW,cAAc;AAAA,UAChD,WAAW;AAAA,QACb;AAAA,QACA,KAAK,qBAAqB;AAAA,MAAA;AAAA,IAE9B;AAAA,IACA,SAAS,KAAK;AACZ,UAAI,CAAC,KAAK;AACR,cAAM,OAAO;AAAA,MAAA,OACR;AACL,aAAK,MAAM,GAAG;AAAA,MAChB;AAAA,IACF;AAAA,EAAA;AAEJ;"}
@@ -1,4 +1,4 @@
1
- import { type Rollup } from "vite";
1
+ import type { Rollup } from "vite";
2
2
  type BinsTaskOption = {
3
3
  buildOutput: Rollup.OutputChunk[];
4
4
  bins: Map<string, string>;
@@ -1,7 +1,7 @@
1
1
  import { mkdir, writeFile } from "node:fs/promises";
2
2
  import { relative, join } from "node:path";
3
- import "vite";
4
3
  import { reverseMap } from "./utils.mjs";
4
+ import { okLog } from "../log.mjs";
5
5
  async function binsTask({
6
6
  buildOutput,
7
7
  bins,
@@ -37,6 +37,9 @@ import("${totalPath}");
37
37
  res.set(relative(outDir, execPath), binName);
38
38
  }
39
39
  }
40
+ if (res.size) {
41
+ okLog("Bin:", [...res.values()].join(", "));
42
+ }
40
43
  return res;
41
44
  }
42
45
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"binsTask.mjs","sources":["../../../../../src/tasks/binsTask.ts"],"sourcesContent":["import { mkdir, writeFile } from \"node:fs/promises\";\nimport { join, relative } from \"node:path\";\nimport { type Rollup } from \"vite\";\nimport { reverseMap } from \"./utils.js\";\n\ntype BinsTaskOption = {\n buildOutput: Rollup.OutputChunk[];\n bins: Map<string, string>;\n outBinsDir: string;\n outDir: string;\n};\n\nexport async function binsTask({\n buildOutput,\n bins,\n outBinsDir,\n outDir,\n}: BinsTaskOption) {\n if (bins.size === 0) {\n return new Map<string, string>();\n }\n await mkdir(outBinsDir, { recursive: true });\n const reversedEntrypoints = reverseMap(bins);\n const res = new Map<string, string>();\n for (const el of buildOutput) {\n if (el.facadeModuleId == null) {\n continue;\n }\n if (el.fileName.endsWith(\".js\")) {\n continue;\n }\n const binsNames = reversedEntrypoints.get(el.facadeModuleId);\n if (!binsNames) {\n continue;\n }\n for (const binName of binsNames) {\n const totalPath = relative(outBinsDir, join(outDir, el.fileName));\n const execPath = join(outBinsDir, `${binName}.js`);\n await writeFile(\n execPath,\n `#!/usr/bin/env node\nimport(\"${totalPath}\");\n`,\n );\n res.set(relative(outDir, execPath), binName);\n }\n }\n\n return res;\n}\n"],"names":[],"mappings":";;;;AAYA,eAAsB,SAAS;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmB;AACb,MAAA,KAAK,SAAS,GAAG;AACnB,+BAAW,IAAoB;AAAA,EACjC;AACA,QAAM,MAAM,YAAY,EAAE,WAAW,KAAM,CAAA;AACrC,QAAA,sBAAsB,WAAW,IAAI;AACrC,QAAA,0BAAU;AAChB,aAAW,MAAM,aAAa;AACxB,QAAA,GAAG,kBAAkB,MAAM;AAC7B;AAAA,IACF;AACA,QAAI,GAAG,SAAS,SAAS,KAAK,GAAG;AAC/B;AAAA,IACF;AACA,UAAM,YAAY,oBAAoB,IAAI,GAAG,cAAc;AAC3D,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AACA,eAAW,WAAW,WAAW;AAC/B,YAAM,YAAY,SAAS,YAAY,KAAK,QAAQ,GAAG,QAAQ,CAAC;AAChE,YAAM,WAAW,KAAK,YAAY,GAAG,OAAO,KAAK;AAC3C,YAAA;AAAA,QACJ;AAAA,QACA;AAAA,UACE,SAAS;AAAA;AAAA,MAAA;AAGb,UAAI,IAAI,SAAS,QAAQ,QAAQ,GAAG,OAAO;AAAA,IAC7C;AAAA,EACF;AAEO,SAAA;AACT;"}
1
+ {"version":3,"file":"binsTask.mjs","sources":["../../../../../src/tasks/binsTask.ts"],"sourcesContent":["import { mkdir, writeFile } from \"node:fs/promises\";\nimport { join, relative } from \"node:path\";\nimport type { Rollup } from \"vite\";\nimport { reverseMap } from \"./utils.js\";\nimport { okLog } from \"../log.js\";\n\ntype BinsTaskOption = {\n buildOutput: Rollup.OutputChunk[];\n bins: Map<string, string>;\n outBinsDir: string;\n outDir: string;\n};\n\nexport async function binsTask({\n buildOutput,\n bins,\n outBinsDir,\n outDir,\n}: BinsTaskOption) {\n if (bins.size === 0) {\n return new Map<string, string>();\n }\n await mkdir(outBinsDir, { recursive: true });\n const reversedEntrypoints = reverseMap(bins);\n const res = new Map<string, string>();\n for (const el of buildOutput) {\n if (el.facadeModuleId == null) {\n continue;\n }\n if (el.fileName.endsWith(\".js\")) {\n continue;\n }\n const binsNames = reversedEntrypoints.get(el.facadeModuleId);\n if (!binsNames) {\n continue;\n }\n for (const binName of binsNames) {\n const totalPath = relative(outBinsDir, join(outDir, el.fileName));\n const execPath = join(outBinsDir, `${binName}.js`);\n await writeFile(\n execPath,\n `#!/usr/bin/env node\nimport(\"${totalPath}\");\n`,\n );\n res.set(relative(outDir, execPath), binName);\n }\n }\n\n if (res.size) {\n okLog(\"Bin:\", [...res.values()].join(\", \"));\n }\n\n return res;\n}\n"],"names":[],"mappings":";;;;AAaA,eAAsB,SAAS;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmB;AACb,MAAA,KAAK,SAAS,GAAG;AACnB,+BAAW,IAAoB;AAAA,EACjC;AACA,QAAM,MAAM,YAAY,EAAE,WAAW,KAAM,CAAA;AACrC,QAAA,sBAAsB,WAAW,IAAI;AACrC,QAAA,0BAAU;AAChB,aAAW,MAAM,aAAa;AACxB,QAAA,GAAG,kBAAkB,MAAM;AAC7B;AAAA,IACF;AACA,QAAI,GAAG,SAAS,SAAS,KAAK,GAAG;AAC/B;AAAA,IACF;AACA,UAAM,YAAY,oBAAoB,IAAI,GAAG,cAAc;AAC3D,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AACA,eAAW,WAAW,WAAW;AAC/B,YAAM,YAAY,SAAS,YAAY,KAAK,QAAQ,GAAG,QAAQ,CAAC;AAChE,YAAM,WAAW,KAAK,YAAY,GAAG,OAAO,KAAK;AAC3C,YAAA;AAAA,QACJ;AAAA,QACA;AAAA,UACE,SAAS;AAAA;AAAA,MAAA;AAGb,UAAI,IAAI,SAAS,QAAQ,QAAQ,GAAG,OAAO;AAAA,IAC7C;AAAA,EACF;AAEA,MAAI,IAAI,MAAM;AACN,UAAA,QAAQ,CAAC,GAAG,IAAI,QAAQ,EAAE,KAAK,IAAI,CAAC;AAAA,EAC5C;AAEO,SAAA;AACT;"}
@@ -1,9 +1,11 @@
1
1
  import { type Rollup } from "vite";
2
+ import type { DetectedModules } from "../../detectModules.js";
2
3
  type BuildTypesTaskOption = {
3
4
  buildOutput: Rollup.OutputChunk[];
4
5
  entrypoints: Map<string, string>;
5
6
  sourceDir: string;
6
7
  outDir: string;
8
+ modules: DetectedModules;
7
9
  };
8
- export declare function buildTypesTask({ buildOutput, entrypoints, sourceDir, outDir, }: BuildTypesTaskOption): Promise<Map<string, string>>;
10
+ export declare function buildTypesTask({ buildOutput, entrypoints, sourceDir, outDir, modules, }: BuildTypesTaskOption): Promise<Map<string, string>>;
9
11
  export {};
@@ -1,28 +1,28 @@
1
1
  import "vite";
2
- import { errors } from "../../errors.mjs";
3
2
  import { callTypescript } from "./callTypescript.mjs";
4
3
  import { reverseMap } from "../utils.mjs";
4
+ import { okLog } from "../../log.mjs";
5
5
  async function buildTypesTask({
6
6
  buildOutput,
7
7
  entrypoints,
8
8
  sourceDir,
9
- outDir
9
+ outDir,
10
+ modules
10
11
  }) {
11
12
  const reversedEntrypoints = reverseMap(entrypoints);
12
13
  const tsEntrypoints = [...entrypoints.values()].filter(
13
14
  (entry) => entry.endsWith(".ts")
14
15
  );
15
- if (tsEntrypoints.length === 0) {
16
+ if (tsEntrypoints.length === 0 || modules.ts == null) {
16
17
  return /* @__PURE__ */ new Map();
17
18
  }
18
- let ts;
19
- try {
20
- ts = (await import("typescript")).default;
21
- } catch (e) {
22
- throw errors.typescriptNotFound;
23
- }
24
19
  const files = buildOutput.map((el) => el.facadeModuleId ?? "");
25
- const dtsMap = await callTypescript({ ts, sourceDir, files, outDir });
20
+ const dtsMap = await callTypescript({
21
+ ts: modules.ts,
22
+ sourceDir,
23
+ files,
24
+ outDir
25
+ });
26
26
  const result = /* @__PURE__ */ new Map();
27
27
  for (const [types, source] of dtsMap) {
28
28
  const exportPath = reversedEntrypoints.get(source);
@@ -33,6 +33,7 @@ async function buildTypesTask({
33
33
  result.set(types, path);
34
34
  }
35
35
  }
36
+ okLog(".d.ts");
36
37
  return result;
37
38
  }
38
39
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"buildTypesTask.mjs","sources":["../../../../../../src/tasks/buildTypesTask/buildTypesTask.ts"],"sourcesContent":["import { type Rollup } from \"vite\";\nimport { errors } from \"../../errors.js\";\nimport { callTypescript } from \"./callTypescript.js\";\nimport { reverseMap } from \"../utils.js\";\n\ntype BuildTypesTaskOption = {\n buildOutput: Rollup.OutputChunk[];\n entrypoints: Map<string, string>;\n sourceDir: string;\n outDir: string;\n};\n\nexport async function buildTypesTask({\n buildOutput,\n entrypoints,\n sourceDir,\n outDir,\n}: BuildTypesTaskOption) {\n const reversedEntrypoints = reverseMap(entrypoints);\n const tsEntrypoints = [...entrypoints.values()].filter((entry) =>\n entry.endsWith(\".ts\"),\n );\n if (tsEntrypoints.length === 0) {\n return new Map<string, string>();\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 (e) {\n throw errors.typescriptNotFound;\n }\n\n const files = buildOutput.map((el) => el.facadeModuleId ?? \"\");\n const dtsMap = await callTypescript({ ts, sourceDir, files, outDir });\n\n const result = new Map<string, string>();\n for (const [types, source] of dtsMap) {\n const exportPath = reversedEntrypoints.get(source);\n if (!exportPath) {\n continue;\n }\n for (const path of exportPath) {\n result.set(types, path);\n }\n }\n\n return result;\n}\n"],"names":[],"mappings":";;;;AAYA,eAAsB,eAAe;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACjB,QAAA,sBAAsB,WAAW,WAAW;AAClD,QAAM,gBAAgB,CAAC,GAAG,YAAY,OAAA,CAAQ,EAAE;AAAA,IAAO,CAAC,UACtD,MAAM,SAAS,KAAK;AAAA,EAAA;AAElB,MAAA,cAAc,WAAW,GAAG;AAC9B,+BAAW,IAAoB;AAAA,EACjC;AAEI,MAAA;AACA,MAAA;AAEI,UAAA,MAAM,OAAO,YAAY,GAAG;AAAA,WAC3B,GAAG;AACV,UAAM,OAAO;AAAA,EACf;AAEA,QAAM,QAAQ,YAAY,IAAI,CAAC,OAAO,GAAG,kBAAkB,EAAE;AACvD,QAAA,SAAS,MAAM,eAAe,EAAE,IAAI,WAAW,OAAO,QAAQ;AAE9D,QAAA,6BAAa;AACnB,aAAW,CAAC,OAAO,MAAM,KAAK,QAAQ;AAC9B,UAAA,aAAa,oBAAoB,IAAI,MAAM;AACjD,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AACA,eAAW,QAAQ,YAAY;AACtB,aAAA,IAAI,OAAO,IAAI;AAAA,IACxB;AAAA,EACF;AAEO,SAAA;AACT;"}
1
+ {"version":3,"file":"buildTypesTask.mjs","sources":["../../../../../../src/tasks/buildTypesTask/buildTypesTask.ts"],"sourcesContent":["import { type Rollup } from \"vite\";\nimport { callTypescript } from \"./callTypescript.js\";\nimport { reverseMap } from \"../utils.js\";\nimport { okLog } from \"../../log.js\";\nimport type { DetectedModules } from \"../../detectModules.js\";\n\ntype BuildTypesTaskOption = {\n buildOutput: Rollup.OutputChunk[];\n entrypoints: Map<string, string>;\n sourceDir: string;\n outDir: string;\n modules: DetectedModules;\n};\n\nexport async function buildTypesTask({\n buildOutput,\n entrypoints,\n sourceDir,\n outDir,\n modules,\n}: BuildTypesTaskOption) {\n const reversedEntrypoints = reverseMap(entrypoints);\n const tsEntrypoints = [...entrypoints.values()].filter((entry) =>\n entry.endsWith(\".ts\"),\n );\n if (tsEntrypoints.length === 0 || modules.ts == null) {\n return new Map<string, string>();\n }\n\n const files = buildOutput.map((el) => el.facadeModuleId ?? \"\");\n const dtsMap = await callTypescript({\n ts: modules.ts,\n sourceDir,\n files,\n outDir,\n });\n\n const result = new Map<string, string>();\n for (const [types, source] of dtsMap) {\n const exportPath = reversedEntrypoints.get(source);\n if (!exportPath) {\n continue;\n }\n for (const path of exportPath) {\n result.set(types, path);\n }\n }\n\n okLog(\".d.ts\");\n\n return result;\n}\n"],"names":[],"mappings":";;;;AAcA,eAAsB,eAAe;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACjB,QAAA,sBAAsB,WAAW,WAAW;AAClD,QAAM,gBAAgB,CAAC,GAAG,YAAY,OAAA,CAAQ,EAAE;AAAA,IAAO,CAAC,UACtD,MAAM,SAAS,KAAK;AAAA,EAAA;AAEtB,MAAI,cAAc,WAAW,KAAK,QAAQ,MAAM,MAAM;AACpD,+BAAW,IAAoB;AAAA,EACjC;AAEA,QAAM,QAAQ,YAAY,IAAI,CAAC,OAAO,GAAG,kBAAkB,EAAE;AACvD,QAAA,SAAS,MAAM,eAAe;AAAA,IAClC,IAAI,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAEK,QAAA,6BAAa;AACnB,aAAW,CAAC,OAAO,MAAM,KAAK,QAAQ;AAC9B,UAAA,aAAa,oBAAoB,IAAI,MAAM;AACjD,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AACA,eAAW,QAAQ,YAAY;AACtB,aAAA,IAAI,OAAO,IAAI;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,OAAO;AAEN,SAAA;AACT;"}
@@ -1,6 +1,12 @@
1
1
  import * as path from "node:path";
2
2
  import * as fs from "node:fs";
3
3
  import { inlineExtensionsMjs, inlineExtensionsCjs } from "./inlineExtensions.mjs";
4
+ function makeFileExists(outDir, type, filePath) {
5
+ return (p) => {
6
+ const dir = path.join(outDir, "__compiled__", type, path.dirname(filePath));
7
+ return fs.existsSync(path.join(dir, p));
8
+ };
9
+ }
4
10
  async function callTypescript({
5
11
  ts,
6
12
  sourceDir,
@@ -43,10 +49,16 @@ async function callTypescript({
43
49
  const esmFinalPath = finalEsmPath.replace(/\.d\.ts$/, ".d.mts");
44
50
  sourceToDtsMap.set(esmFinalPath, sourceFileName);
45
51
  fs.mkdirSync(path.dirname(esmFinalPath), { recursive: true });
46
- fs.writeFileSync(esmFinalPath, inlineExtensionsMjs(data));
52
+ fs.writeFileSync(
53
+ esmFinalPath,
54
+ inlineExtensionsMjs(data, makeFileExists(outDir, "esm", relativePath))
55
+ );
47
56
  const finalCjsPath = path.join(outDir, "__compiled__", "cjs", relativePath);
48
57
  const cjsFinalPath = finalCjsPath.replace(/\.d\.ts$/, ".d.ts");
49
- fs.writeFileSync(cjsFinalPath, inlineExtensionsCjs(data));
58
+ fs.writeFileSync(
59
+ cjsFinalPath,
60
+ inlineExtensionsCjs(data, makeFileExists(outDir, "cjs", relativePath))
61
+ );
50
62
  sourceToDtsMap.set(cjsFinalPath, sourceFileName);
51
63
  });
52
64
  return sourceToDtsMap;
@@ -1 +1 @@
1
- {"version":3,"file":"callTypescript.mjs","sources":["../../../../../../src/tasks/buildTypesTask/callTypescript.ts"],"sourcesContent":["import * as path from \"node:path\";\nimport * as fs from \"node:fs\";\nimport { inlineExtensionsMjs, inlineExtensionsCjs } from \"./inlineExtensions.js\";\n\ntype BuildTypesOptions = {\n ts: typeof import(\"typescript\");\n sourceDir: string;\n files: string[];\n outDir: string;\n};\n\n// It needs for vscode. It cannot resolve the import/export if it has no extension\nconst reexportRegex = /export { (.+?) } from \"(.+)\"/g;\nfunction inlineExtensionMjs(content: string) {}\n\nexport async function callTypescript({\n ts,\n sourceDir,\n files,\n outDir,\n}: BuildTypesOptions) {\n const configPath = path.join(sourceDir, \"tsconfig.json\");\n const configFile = ts.readConfigFile(configPath, (path) =>\n // https://github.com/XaveScor/bobrik/issues/22\n fs.readFileSync(path, \"utf-8\"),\n );\n\n const parsedCommandLine = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n 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 // https://github.com/XaveScor/bobrik/issues/22#issuecomment-2308552352\n noEmit: false,\n },\n configPath,\n );\n\n const host = ts.createCompilerHost(parsedCommandLine.options);\n\n const sourceToDtsMap = new Map<string, string>();\n const program = ts.createProgram(files, parsedCommandLine.options, host);\n program.emit(undefined, (fileName, data) => {\n // .d.ts for cjs because \"type\": \"commonjs\" in package.json\n // .d.mts for esm\n const relativePath = path.relative(sourceDir, fileName);\n const sourceFileName = fileName.replace(/\\.d\\.ts$/, \".ts\"); // Assuming source files have .ts extension\n\n const finalEsmPath = path.join(outDir, \"__compiled__\", \"esm\", relativePath);\n const esmFinalPath = finalEsmPath.replace(/\\.d\\.ts$/, \".d.mts\");\n sourceToDtsMap.set(esmFinalPath, sourceFileName);\n fs.mkdirSync(path.dirname(esmFinalPath), { recursive: true });\n fs.writeFileSync(esmFinalPath, inlineExtensionsMjs(data));\n\n const finalCjsPath = path.join(outDir, \"__compiled__\", \"cjs\", relativePath);\n const cjsFinalPath = finalCjsPath.replace(/\\.d\\.ts$/, \".d.ts\");\n fs.writeFileSync(cjsFinalPath, inlineExtensionsCjs(data));\n sourceToDtsMap.set(cjsFinalPath, sourceFileName);\n });\n\n return sourceToDtsMap;\n}\n"],"names":["path"],"mappings":";;;AAeA,eAAsB,eAAe;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsB;AACpB,QAAM,aAAa,KAAK,KAAK,WAAW,eAAe;AACvD,QAAM,aAAa,GAAG;AAAA,IAAe;AAAA,IAAY,CAACA;AAAAA;AAAAA,MAEhD,GAAG,aAAaA,OAAM,OAAO;AAAA;AAAA,EAAA;AAG/B,QAAM,oBAAoB,GAAG;AAAA,IAC3B,WAAW;AAAA,IACX,GAAG;AAAA,IACH;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,qBAAqB;AAAA,MACrB,QAAQ;AAAA,MACR,kBAAkB;AAAA,MAClB,qBAAqB;AAAA,MACrB,8BAA8B;AAAA,MAC9B,cAAc;AAAA,MACd,qBAAqB;AAAA;AAAA,MAErB,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,OAAO,GAAG,mBAAmB,kBAAkB,OAAO;AAEtD,QAAA,qCAAqB;AAC3B,QAAM,UAAU,GAAG,cAAc,OAAO,kBAAkB,SAAS,IAAI;AACvE,UAAQ,KAAK,QAAW,CAAC,UAAU,SAAS;AAG1C,UAAM,eAAe,KAAK,SAAS,WAAW,QAAQ;AACtD,UAAM,iBAAiB,SAAS,QAAQ,YAAY,KAAK;AAEzD,UAAM,eAAe,KAAK,KAAK,QAAQ,gBAAgB,OAAO,YAAY;AAC1E,UAAM,eAAe,aAAa,QAAQ,YAAY,QAAQ;AAC/C,mBAAA,IAAI,cAAc,cAAc;AAC5C,OAAA,UAAU,KAAK,QAAQ,YAAY,GAAG,EAAE,WAAW,MAAM;AAC5D,OAAG,cAAc,cAAc,oBAAoB,IAAI,CAAC;AAExD,UAAM,eAAe,KAAK,KAAK,QAAQ,gBAAgB,OAAO,YAAY;AAC1E,UAAM,eAAe,aAAa,QAAQ,YAAY,OAAO;AAC7D,OAAG,cAAc,cAAc,oBAAoB,IAAI,CAAC;AACzC,mBAAA,IAAI,cAAc,cAAc;AAAA,EAAA,CAChD;AAEM,SAAA;AACT;"}
1
+ {"version":3,"file":"callTypescript.mjs","sources":["../../../../../../src/tasks/buildTypesTask/callTypescript.ts"],"sourcesContent":["import * as path from \"node:path\";\nimport * as fs from \"node:fs\";\nimport {\n inlineExtensionsMjs,\n inlineExtensionsCjs,\n} from \"./inlineExtensions.js\";\n\ntype BuildTypesOptions = {\n ts: typeof import(\"typescript\");\n sourceDir: string;\n files: string[];\n outDir: string;\n};\n\nfunction makeFileExists(outDir: string, type: \"esm\" | \"cjs\", filePath: string) {\n return (p: string) => {\n const dir = path.join(outDir, \"__compiled__\", type, path.dirname(filePath));\n return fs.existsSync(path.join(dir, p));\n };\n}\n\nexport async function callTypescript({\n ts,\n sourceDir,\n files,\n outDir,\n}: BuildTypesOptions) {\n const configPath = path.join(sourceDir, \"tsconfig.json\");\n const configFile = ts.readConfigFile(configPath, (path) =>\n // https://github.com/XaveScor/bobrik/issues/22\n fs.readFileSync(path, \"utf-8\"),\n );\n\n const parsedCommandLine = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n 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 // https://github.com/XaveScor/bobrik/issues/22#issuecomment-2308552352\n noEmit: false,\n },\n configPath,\n );\n\n const host = ts.createCompilerHost(parsedCommandLine.options);\n\n const sourceToDtsMap = new Map<string, string>();\n const program = ts.createProgram(files, parsedCommandLine.options, host);\n program.emit(undefined, (fileName, data) => {\n // .d.ts for cjs because \"type\": \"commonjs\" in package.json\n // .d.mts for esm\n const relativePath = path.relative(sourceDir, fileName);\n const sourceFileName = fileName.replace(/\\.d\\.ts$/, \".ts\"); // Assuming source files have .ts extension\n\n const finalEsmPath = path.join(outDir, \"__compiled__\", \"esm\", relativePath);\n const esmFinalPath = finalEsmPath.replace(/\\.d\\.ts$/, \".d.mts\");\n sourceToDtsMap.set(esmFinalPath, sourceFileName);\n fs.mkdirSync(path.dirname(esmFinalPath), { recursive: true });\n fs.writeFileSync(\n esmFinalPath,\n inlineExtensionsMjs(data, makeFileExists(outDir, \"esm\", relativePath)),\n );\n\n const finalCjsPath = path.join(outDir, \"__compiled__\", \"cjs\", relativePath);\n const cjsFinalPath = finalCjsPath.replace(/\\.d\\.ts$/, \".d.ts\");\n fs.writeFileSync(\n cjsFinalPath,\n inlineExtensionsCjs(data, makeFileExists(outDir, \"cjs\", relativePath)),\n );\n sourceToDtsMap.set(cjsFinalPath, sourceFileName);\n });\n\n return sourceToDtsMap;\n}\n"],"names":["path"],"mappings":";;;AAcA,SAAS,eAAe,QAAgB,MAAqB,UAAkB;AAC7E,SAAO,CAAC,MAAc;AACd,UAAA,MAAM,KAAK,KAAK,QAAQ,gBAAgB,MAAM,KAAK,QAAQ,QAAQ,CAAC;AAC1E,WAAO,GAAG,WAAW,KAAK,KAAK,KAAK,CAAC,CAAC;AAAA,EAAA;AAE1C;AAEA,eAAsB,eAAe;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsB;AACpB,QAAM,aAAa,KAAK,KAAK,WAAW,eAAe;AACvD,QAAM,aAAa,GAAG;AAAA,IAAe;AAAA,IAAY,CAACA;AAAAA;AAAAA,MAEhD,GAAG,aAAaA,OAAM,OAAO;AAAA;AAAA,EAAA;AAG/B,QAAM,oBAAoB,GAAG;AAAA,IAC3B,WAAW;AAAA,IACX,GAAG;AAAA,IACH;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,qBAAqB;AAAA,MACrB,QAAQ;AAAA,MACR,kBAAkB;AAAA,MAClB,qBAAqB;AAAA,MACrB,8BAA8B;AAAA,MAC9B,cAAc;AAAA,MACd,qBAAqB;AAAA;AAAA,MAErB,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,OAAO,GAAG,mBAAmB,kBAAkB,OAAO;AAEtD,QAAA,qCAAqB;AAC3B,QAAM,UAAU,GAAG,cAAc,OAAO,kBAAkB,SAAS,IAAI;AACvE,UAAQ,KAAK,QAAW,CAAC,UAAU,SAAS;AAG1C,UAAM,eAAe,KAAK,SAAS,WAAW,QAAQ;AACtD,UAAM,iBAAiB,SAAS,QAAQ,YAAY,KAAK;AAEzD,UAAM,eAAe,KAAK,KAAK,QAAQ,gBAAgB,OAAO,YAAY;AAC1E,UAAM,eAAe,aAAa,QAAQ,YAAY,QAAQ;AAC/C,mBAAA,IAAI,cAAc,cAAc;AAC5C,OAAA,UAAU,KAAK,QAAQ,YAAY,GAAG,EAAE,WAAW,MAAM;AACzD,OAAA;AAAA,MACD;AAAA,MACA,oBAAoB,MAAM,eAAe,QAAQ,OAAO,YAAY,CAAC;AAAA,IAAA;AAGvE,UAAM,eAAe,KAAK,KAAK,QAAQ,gBAAgB,OAAO,YAAY;AAC1E,UAAM,eAAe,aAAa,QAAQ,YAAY,OAAO;AAC1D,OAAA;AAAA,MACD;AAAA,MACA,oBAAoB,MAAM,eAAe,QAAQ,OAAO,YAAY,CAAC;AAAA,IAAA;AAExD,mBAAA,IAAI,cAAc,cAAc;AAAA,EAAA,CAChD;AAEM,SAAA;AACT;"}
@@ -1,2 +1,3 @@
1
- export declare function inlineExtensionsMjs(content: string): string;
2
- export declare function inlineExtensionsCjs(content: string): string;
1
+ export type FileExists = (path: string) => boolean;
2
+ export declare function inlineExtensionsMjs(content: string, fileExists: FileExists): string;
3
+ export declare function inlineExtensionsCjs(content: string, fileExists: FileExists): string;
@@ -1,24 +1,29 @@
1
+ import { join } from "node:path";
1
2
  const importExportRegex = /(?:import|export)\s*(?:type\s*)?(?:(?:{\s*.+?\s*}|\*|[^{}\s]+)\s*from\s*)?["'](.+)["']/g;
2
3
  const dynamicImportRegex = /import\(["'](.+)["']\)/g;
3
- function addExtension(content, regex, ext) {
4
+ function addExtension(content, regex, ext, fileExists) {
4
5
  return content.replace(regex, (match, p1) => {
5
6
  if (!p1.startsWith(".")) {
6
7
  return match;
7
8
  }
8
9
  if (!p1.endsWith(".cjs") && !p1.endsWith(".mjs") && !p1.endsWith(".js")) {
9
- return match.replace(p1, `${p1}${ext}`);
10
+ const file = `${p1}${ext}`;
11
+ if (fileExists(file)) return match.replace(p1, file);
12
+ const indexFile = "./" + join(p1, `index${ext}`);
13
+ if (fileExists(indexFile)) return match.replace(p1, indexFile);
14
+ return match;
10
15
  }
11
16
  return match;
12
17
  });
13
18
  }
14
- function inlineExtensionsMjs(content) {
15
- content = addExtension(content, importExportRegex, ".mjs");
16
- content = addExtension(content, dynamicImportRegex, ".mjs");
19
+ function inlineExtensionsMjs(content, fileExists) {
20
+ content = addExtension(content, importExportRegex, ".mjs", fileExists);
21
+ content = addExtension(content, dynamicImportRegex, ".mjs", fileExists);
17
22
  return content;
18
23
  }
19
- function inlineExtensionsCjs(content) {
20
- content = addExtension(content, importExportRegex, ".js");
21
- content = addExtension(content, dynamicImportRegex, ".js");
24
+ function inlineExtensionsCjs(content, fileExists) {
25
+ content = addExtension(content, importExportRegex, ".js", fileExists);
26
+ content = addExtension(content, dynamicImportRegex, ".js", fileExists);
22
27
  return content;
23
28
  }
24
29
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"inlineExtensions.mjs","sources":["../../../../../../src/tasks/buildTypesTask/inlineExtensions.ts"],"sourcesContent":["// It needs for VSCode. It cannot resolve the import/export if it has no extension\n\nconst importExportRegex =\n /(?:import|export)\\s*(?:type\\s*)?(?:(?:{\\s*.+?\\s*}|\\*|[^{}\\s]+)\\s*from\\s*)?[\"'](.+)[\"']/g;\nconst dynamicImportRegex = /import\\([\"'](.+)[\"']\\)/g;\n\nfunction addExtension(content: string, regex: RegExp, ext: string) {\n return content.replace(regex, (match, p1) => {\n if (!p1.startsWith(\".\")) {\n return match;\n }\n if (!p1.endsWith(\".cjs\") && !p1.endsWith(\".mjs\") && !p1.endsWith(\".js\")) {\n return match.replace(p1, `${p1}${ext}`);\n }\n return match;\n });\n}\n\nexport function inlineExtensionsMjs(content: string) {\n content = addExtension(content, importExportRegex, \".mjs\");\n content = addExtension(content, dynamicImportRegex, \".mjs\");\n return content;\n}\n\nexport function inlineExtensionsCjs(content: string) {\n content = addExtension(content, importExportRegex, \".js\");\n content = addExtension(content, dynamicImportRegex, \".js\");\n return content;\n}\n"],"names":[],"mappings":"AAEA,MAAM,oBACJ;AACF,MAAM,qBAAqB;AAE3B,SAAS,aAAa,SAAiB,OAAe,KAAa;AACjE,SAAO,QAAQ,QAAQ,OAAO,CAAC,OAAO,OAAO;AAC3C,QAAI,CAAC,GAAG,WAAW,GAAG,GAAG;AAChB,aAAA;AAAA,IACT;AACA,QAAI,CAAC,GAAG,SAAS,MAAM,KAAK,CAAC,GAAG,SAAS,MAAM,KAAK,CAAC,GAAG,SAAS,KAAK,GAAG;AACvE,aAAO,MAAM,QAAQ,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE;AAAA,IACxC;AACO,WAAA;AAAA,EAAA,CACR;AACH;AAEO,SAAS,oBAAoB,SAAiB;AACzC,YAAA,aAAa,SAAS,mBAAmB,MAAM;AAC/C,YAAA,aAAa,SAAS,oBAAoB,MAAM;AACnD,SAAA;AACT;AAEO,SAAS,oBAAoB,SAAiB;AACzC,YAAA,aAAa,SAAS,mBAAmB,KAAK;AAC9C,YAAA,aAAa,SAAS,oBAAoB,KAAK;AAClD,SAAA;AACT;"}
1
+ {"version":3,"file":"inlineExtensions.mjs","sources":["../../../../../../src/tasks/buildTypesTask/inlineExtensions.ts"],"sourcesContent":["import { join } from \"node:path\";\n\n// It needs for VSCode. It cannot resolve the import/export if it has no extension\n\nconst importExportRegex =\n /(?:import|export)\\s*(?:type\\s*)?(?:(?:{\\s*.+?\\s*}|\\*|[^{}\\s]+)\\s*from\\s*)?[\"'](.+)[\"']/g;\nconst dynamicImportRegex = /import\\([\"'](.+)[\"']\\)/g;\n\nexport type FileExists = (path: string) => boolean;\n\nfunction addExtension(\n content: string,\n regex: RegExp,\n ext: string,\n fileExists: FileExists,\n) {\n return content.replace(regex, (match, p1) => {\n if (!p1.startsWith(\".\")) {\n return match;\n }\n\n if (!p1.endsWith(\".cjs\") && !p1.endsWith(\".mjs\") && !p1.endsWith(\".js\")) {\n const file = `${p1}${ext}`;\n if (fileExists(file)) return match.replace(p1, file);\n const indexFile = \"./\" + join(p1, `index${ext}`);\n if (fileExists(indexFile)) return match.replace(p1, indexFile);\n\n return match;\n }\n return match;\n });\n}\n\nexport function inlineExtensionsMjs(content: string, fileExists: FileExists) {\n content = addExtension(content, importExportRegex, \".mjs\", fileExists);\n content = addExtension(content, dynamicImportRegex, \".mjs\", fileExists);\n return content;\n}\n\nexport function inlineExtensionsCjs(content: string, fileExists: FileExists) {\n content = addExtension(content, importExportRegex, \".js\", fileExists);\n content = addExtension(content, dynamicImportRegex, \".js\", fileExists);\n return content;\n}\n"],"names":[],"mappings":";AAIA,MAAM,oBACJ;AACF,MAAM,qBAAqB;AAI3B,SAAS,aACP,SACA,OACA,KACA,YACA;AACA,SAAO,QAAQ,QAAQ,OAAO,CAAC,OAAO,OAAO;AAC3C,QAAI,CAAC,GAAG,WAAW,GAAG,GAAG;AAChB,aAAA;AAAA,IACT;AAEA,QAAI,CAAC,GAAG,SAAS,MAAM,KAAK,CAAC,GAAG,SAAS,MAAM,KAAK,CAAC,GAAG,SAAS,KAAK,GAAG;AACvE,YAAM,OAAO,GAAG,EAAE,GAAG,GAAG;AACxB,UAAI,WAAW,IAAI,UAAU,MAAM,QAAQ,IAAI,IAAI;AACnD,YAAM,YAAY,OAAO,KAAK,IAAI,QAAQ,GAAG,EAAE;AAC/C,UAAI,WAAW,SAAS,UAAU,MAAM,QAAQ,IAAI,SAAS;AAEtD,aAAA;AAAA,IACT;AACO,WAAA;AAAA,EAAA,CACR;AACH;AAEgB,SAAA,oBAAoB,SAAiB,YAAwB;AAC3E,YAAU,aAAa,SAAS,mBAAmB,QAAQ,UAAU;AACrE,YAAU,aAAa,SAAS,oBAAoB,QAAQ,UAAU;AAC/D,SAAA;AACT;AAEgB,SAAA,oBAAoB,SAAiB,YAAwB;AAC3E,YAAU,aAAa,SAAS,mBAAmB,OAAO,UAAU;AACpE,YAAU,aAAa,SAAS,oBAAoB,OAAO,UAAU;AAC9D,SAAA;AACT;"}
@@ -1 +1 @@
1
- export declare function copyStaticFilesTask(sourceDir: string, outDir: string): Promise<void>;
1
+ export declare function copyStaticFilesTask(sourceDir: string, outDir: string): Promise<Set<string>>;
@@ -1,11 +1,14 @@
1
1
  import { join } from "node:path";
2
2
  import { readdir, copyFile } from "node:fs/promises";
3
+ import { okLog } from "../log.mjs";
3
4
  async function copyStaticFilesTask(sourceDir, outDir) {
4
- return copyStaticFiles({
5
+ const files = await copyStaticFiles({
5
6
  relativeFiles: /* @__PURE__ */ new Set(["readme.md"]),
6
7
  sourceDir,
7
8
  outDir
8
9
  });
10
+ okLog("Static files:", [...files].join(", "));
11
+ return files;
9
12
  }
10
13
  async function copyStaticFiles({
11
14
  sourceDir,
@@ -17,6 +20,7 @@ async function copyStaticFiles({
17
20
  (f) => [f.toLowerCase(), f]
18
21
  )
19
22
  );
23
+ const res = /* @__PURE__ */ new Set();
20
24
  for (const file of relativeFiles) {
21
25
  try {
22
26
  const matchingFile = dirFiles.get(file.toLowerCase());
@@ -24,10 +28,12 @@ async function copyStaticFiles({
24
28
  const outFilePath = join(outDir, matchingFile);
25
29
  const filePath = join(sourceDir, matchingFile);
26
30
  await copyFile(filePath, outFilePath);
31
+ res.add(matchingFile);
27
32
  }
28
33
  } catch {
29
34
  }
30
35
  }
36
+ return res;
31
37
  }
32
38
  export {
33
39
  copyStaticFilesTask
@@ -1 +1 @@
1
- {"version":3,"file":"copyStaticFilesTask.mjs","sources":["../../../../../src/tasks/copyStaticFilesTask.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport { copyFile, readdir } from \"node:fs/promises\";\n\nexport async function copyStaticFilesTask(sourceDir: string, outDir: string) {\n return copyStaticFiles({\n relativeFiles: new Set([\"readme.md\"]),\n sourceDir,\n outDir,\n });\n}\n\ntype CopyStaticFilesOptions = {\n relativeFiles: Set<string>;\n sourceDir: string;\n outDir: string;\n};\n\nasync function copyStaticFiles({\n sourceDir,\n outDir,\n relativeFiles,\n}: CopyStaticFilesOptions) {\n const dirFiles = new Map(\n (await readdir(sourceDir, { recursive: true })).map(\n (f) => [f.toLowerCase(), f] as const,\n ),\n );\n\n for (const file of relativeFiles) {\n try {\n const matchingFile = dirFiles.get(file.toLowerCase());\n\n if (matchingFile) {\n const outFilePath = join(outDir, matchingFile);\n const filePath = join(sourceDir, matchingFile);\n await copyFile(filePath, outFilePath);\n }\n } catch {}\n }\n}\n"],"names":[],"mappings":";;AAGsB,eAAA,oBAAoB,WAAmB,QAAgB;AAC3E,SAAO,gBAAgB;AAAA,IACrB,eAAe,oBAAI,IAAI,CAAC,WAAW,CAAC;AAAA,IACpC;AAAA,IACA;AAAA,EAAA,CACD;AACH;AAQA,eAAe,gBAAgB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AACF,GAA2B;AACzB,QAAM,WAAW,IAAI;AAAA,KAClB,MAAM,QAAQ,WAAW,EAAE,WAAW,KAAM,CAAA,GAAG;AAAA,MAC9C,CAAC,MAAM,CAAC,EAAE,YAAA,GAAe,CAAC;AAAA,IAC5B;AAAA,EAAA;AAGF,aAAW,QAAQ,eAAe;AAC5B,QAAA;AACF,YAAM,eAAe,SAAS,IAAI,KAAK,YAAa,CAAA;AAEpD,UAAI,cAAc;AACV,cAAA,cAAc,KAAK,QAAQ,YAAY;AACvC,cAAA,WAAW,KAAK,WAAW,YAAY;AACvC,cAAA,SAAS,UAAU,WAAW;AAAA,MACtC;AAAA,IAAA,QACM;AAAA,IAAC;AAAA,EACX;AACF;"}
1
+ {"version":3,"file":"copyStaticFilesTask.mjs","sources":["../../../../../src/tasks/copyStaticFilesTask.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport { copyFile, readdir } from \"node:fs/promises\";\nimport { okLog } from \"../log.js\";\n\nexport async function copyStaticFilesTask(sourceDir: string, outDir: string) {\n const files = await copyStaticFiles({\n relativeFiles: new Set([\"readme.md\"]),\n sourceDir,\n outDir,\n });\n\n okLog(\"Static files:\", [...files].join(\", \"));\n\n return files;\n}\n\ntype CopyStaticFilesOptions = {\n relativeFiles: Set<string>;\n sourceDir: string;\n outDir: string;\n};\n\nasync function copyStaticFiles({\n sourceDir,\n outDir,\n relativeFiles,\n}: CopyStaticFilesOptions) {\n const dirFiles = new Map(\n (await readdir(sourceDir, { recursive: true })).map(\n (f) => [f.toLowerCase(), f] as const,\n ),\n );\n\n const res = new Set<string>();\n for (const file of relativeFiles) {\n try {\n const matchingFile = dirFiles.get(file.toLowerCase());\n\n if (matchingFile) {\n const outFilePath = join(outDir, matchingFile);\n const filePath = join(sourceDir, matchingFile);\n await copyFile(filePath, outFilePath);\n res.add(matchingFile);\n }\n } catch {}\n }\n\n return res;\n}\n"],"names":[],"mappings":";;;AAIsB,eAAA,oBAAoB,WAAmB,QAAgB;AACrE,QAAA,QAAQ,MAAM,gBAAgB;AAAA,IAClC,eAAe,oBAAI,IAAI,CAAC,WAAW,CAAC;AAAA,IACpC;AAAA,IACA;AAAA,EAAA,CACD;AAED,QAAM,iBAAiB,CAAC,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC;AAErC,SAAA;AACT;AAQA,eAAe,gBAAgB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AACF,GAA2B;AACzB,QAAM,WAAW,IAAI;AAAA,KAClB,MAAM,QAAQ,WAAW,EAAE,WAAW,KAAM,CAAA,GAAG;AAAA,MAC9C,CAAC,MAAM,CAAC,EAAE,YAAA,GAAe,CAAC;AAAA,IAC5B;AAAA,EAAA;AAGI,QAAA,0BAAU;AAChB,aAAW,QAAQ,eAAe;AAC5B,QAAA;AACF,YAAM,eAAe,SAAS,IAAI,KAAK,YAAa,CAAA;AAEpD,UAAI,cAAc;AACV,cAAA,cAAc,KAAK,QAAQ,YAAY;AACvC,cAAA,WAAW,KAAK,WAAW,YAAY;AACvC,cAAA,SAAS,UAAU,WAAW;AACpC,YAAI,IAAI,YAAY;AAAA,MACtB;AAAA,IAAA,QACM;AAAA,IAAC;AAAA,EACX;AAEO,SAAA;AACT;"}