smartbundle 0.11.0-alpha.0 → 0.11.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +3 -0
  2. package/__compiled__/cjs/src/buildVite.d.ts +1 -2
  3. package/__compiled__/cjs/src/buildVite.js +21 -6
  4. package/__compiled__/cjs/src/buildVite.js.map +1 -1
  5. package/__compiled__/cjs/src/createViteConfig.d.ts +3 -1
  6. package/__compiled__/cjs/src/createViteConfig.js +13 -3
  7. package/__compiled__/cjs/src/createViteConfig.js.map +1 -1
  8. package/__compiled__/cjs/src/detectModules.d.ts +7 -0
  9. package/__compiled__/cjs/src/detectModules.js +74 -0
  10. package/__compiled__/cjs/src/detectModules.js.map +1 -0
  11. package/__compiled__/cjs/src/index.d.ts +7 -6
  12. package/__compiled__/cjs/src/index.js +19 -5
  13. package/__compiled__/cjs/src/index.js.map +1 -1
  14. package/__compiled__/cjs/src/log.d.ts +5 -0
  15. package/__compiled__/cjs/src/log.js +26 -0
  16. package/__compiled__/cjs/src/log.js.map +1 -0
  17. package/__compiled__/cjs/src/plugins/babel/index.d.ts +4 -2
  18. package/__compiled__/cjs/src/plugins/babel/index.js +20 -36
  19. package/__compiled__/cjs/src/plugins/babel/index.js.map +1 -1
  20. package/__compiled__/cjs/src/plugins/react/index.d.ts +7 -0
  21. package/__compiled__/cjs/src/plugins/react/index.js +61 -0
  22. package/__compiled__/cjs/src/plugins/react/index.js.map +1 -0
  23. package/__compiled__/cjs/src/run.js +7 -1
  24. package/__compiled__/cjs/src/run.js.map +1 -1
  25. package/__compiled__/cjs/src/tasks/binsTask.d.ts +1 -1
  26. package/__compiled__/cjs/src/tasks/binsTask.js +4 -1
  27. package/__compiled__/cjs/src/tasks/binsTask.js.map +1 -1
  28. package/__compiled__/cjs/src/tasks/buildTypesTask/buildTypesTask.d.ts +3 -1
  29. package/__compiled__/cjs/src/tasks/buildTypesTask/buildTypesTask.js +11 -32
  30. package/__compiled__/cjs/src/tasks/buildTypesTask/buildTypesTask.js.map +1 -1
  31. package/__compiled__/cjs/src/tasks/buildTypesTask/callTypescript.js +14 -2
  32. package/__compiled__/cjs/src/tasks/buildTypesTask/callTypescript.js.map +1 -1
  33. package/__compiled__/cjs/src/tasks/buildTypesTask/inlineExtensions.d.ts +3 -2
  34. package/__compiled__/cjs/src/tasks/buildTypesTask/inlineExtensions.js +13 -8
  35. package/__compiled__/cjs/src/tasks/buildTypesTask/inlineExtensions.js.map +1 -1
  36. package/__compiled__/cjs/src/tasks/copyStaticFilesTask.d.ts +1 -1
  37. package/__compiled__/cjs/src/tasks/copyStaticFilesTask.js +7 -1
  38. package/__compiled__/cjs/src/tasks/copyStaticFilesTask.js.map +1 -1
  39. package/__compiled__/cjs/src/tasks/jsFilesTask.d.ts +1 -1
  40. package/__compiled__/cjs/src/tasks/jsFilesTask.js +2 -1
  41. package/__compiled__/cjs/src/tasks/jsFilesTask.js.map +1 -1
  42. package/__compiled__/cjs/src/writePackageJson.js +2 -0
  43. package/__compiled__/cjs/src/writePackageJson.js.map +1 -1
  44. package/__compiled__/esm/src/buildVite.d.mts +1 -2
  45. package/__compiled__/esm/src/buildVite.mjs +21 -6
  46. package/__compiled__/esm/src/buildVite.mjs.map +1 -1
  47. package/__compiled__/esm/src/createViteConfig.d.mts +3 -1
  48. package/__compiled__/esm/src/createViteConfig.mjs +12 -2
  49. package/__compiled__/esm/src/createViteConfig.mjs.map +1 -1
  50. package/__compiled__/esm/src/detectModules.d.mts +7 -0
  51. package/__compiled__/esm/src/detectModules.mjs +52 -0
  52. package/__compiled__/esm/src/detectModules.mjs.map +1 -0
  53. package/__compiled__/esm/src/index.d.mts +7 -6
  54. package/__compiled__/esm/src/index.mjs +19 -5
  55. package/__compiled__/esm/src/index.mjs.map +1 -1
  56. package/__compiled__/esm/src/log.d.mts +5 -0
  57. package/__compiled__/esm/src/log.mjs +26 -0
  58. package/__compiled__/esm/src/log.mjs.map +1 -0
  59. package/__compiled__/esm/src/plugins/babel/index.d.mts +4 -2
  60. package/__compiled__/esm/src/plugins/babel/index.mjs +20 -14
  61. package/__compiled__/esm/src/plugins/babel/index.mjs.map +1 -1
  62. package/__compiled__/esm/src/plugins/react/index.d.mts +7 -0
  63. package/__compiled__/esm/src/plugins/react/index.mjs +61 -0
  64. package/__compiled__/esm/src/plugins/react/index.mjs.map +1 -0
  65. package/__compiled__/esm/src/run.mjs +7 -1
  66. package/__compiled__/esm/src/run.mjs.map +1 -1
  67. package/__compiled__/esm/src/tasks/binsTask.d.mts +1 -1
  68. package/__compiled__/esm/src/tasks/binsTask.mjs +4 -1
  69. package/__compiled__/esm/src/tasks/binsTask.mjs.map +1 -1
  70. package/__compiled__/esm/src/tasks/buildTypesTask/buildTypesTask.d.mts +3 -1
  71. package/__compiled__/esm/src/tasks/buildTypesTask/buildTypesTask.mjs +11 -10
  72. package/__compiled__/esm/src/tasks/buildTypesTask/buildTypesTask.mjs.map +1 -1
  73. package/__compiled__/esm/src/tasks/buildTypesTask/callTypescript.mjs +14 -2
  74. package/__compiled__/esm/src/tasks/buildTypesTask/callTypescript.mjs.map +1 -1
  75. package/__compiled__/esm/src/tasks/buildTypesTask/inlineExtensions.d.mts +3 -2
  76. package/__compiled__/esm/src/tasks/buildTypesTask/inlineExtensions.mjs +13 -8
  77. package/__compiled__/esm/src/tasks/buildTypesTask/inlineExtensions.mjs.map +1 -1
  78. package/__compiled__/esm/src/tasks/copyStaticFilesTask.d.mts +1 -1
  79. package/__compiled__/esm/src/tasks/copyStaticFilesTask.mjs +7 -1
  80. package/__compiled__/esm/src/tasks/copyStaticFilesTask.mjs.map +1 -1
  81. package/__compiled__/esm/src/tasks/jsFilesTask.d.mts +1 -1
  82. package/__compiled__/esm/src/tasks/jsFilesTask.mjs +2 -1
  83. package/__compiled__/esm/src/tasks/jsFilesTask.mjs.map +1 -1
  84. package/__compiled__/esm/src/writePackageJson.mjs +2 -0
  85. package/__compiled__/esm/src/writePackageJson.mjs.map +1 -1
  86. package/package.json +9 -7
package/README.md CHANGED
@@ -64,6 +64,9 @@ Just install `typescript@^5.0.0` as a dev dependency and start creating ts files
64
64
  ### Babel
65
65
  Just install `@babel/core@^7.0.0` as a dev dependency and create a Babel configuration file in the project root.
66
66
 
67
+ ### React
68
+ Just install `react`. More information on React integration can be found [here](./docs/react.md).
69
+
67
70
  ## `package.json` limitations
68
71
  To reduce potential errors and ensure smooth package generation, we follow a stricter configuration for `package.json`.
69
72
 
@@ -1,5 +1,4 @@
1
- import { type UserConfig } from "vite";
2
- import { Rollup } from "vite";
1
+ import { type UserConfig, type Rollup } from "vite";
3
2
  type BuildViteOptions = {
4
3
  viteConfig: UserConfig;
5
4
  };
@@ -5,16 +5,31 @@ const errors = require("./errors.js");
5
5
  async function buildVite({
6
6
  viteConfig
7
7
  }) {
8
- const outputs = await vite.build(viteConfig);
9
- if (!Array.isArray(outputs)) {
8
+ try {
9
+ const outputs = await vite.build(viteConfig);
10
+ if (!Array.isArray(outputs)) {
11
+ return {
12
+ error: true,
13
+ errors: [errors.errors.rollupError]
14
+ };
15
+ }
10
16
  return {
11
- error: true,
12
- errors: [errors.errors.rollupError]
17
+ error: false,
18
+ output: outputs.flatMap(
19
+ (x) => x.output.filter((x2) => x2.type === "chunk")
20
+ )
13
21
  };
22
+ } catch (e) {
23
+ if (e instanceof Error) {
24
+ return {
25
+ error: true,
26
+ errors: [e.message]
27
+ };
28
+ }
14
29
  }
15
30
  return {
16
- error: false,
17
- output: outputs.flatMap((x) => x.output.filter((x2) => x2.type === "chunk"))
31
+ error: true,
32
+ errors: [errors.errors.rollupError]
18
33
  };
19
34
  }
20
35
  exports.buildVite = buildVite;
@@ -1 +1 @@
1
- {"version":3,"file":"buildVite.js","sources":["../../../../src/buildVite.ts"],"sourcesContent":["import { build, type UserConfig } from \"vite\";\nimport { errors } from \"./errors.js\";\nimport { Rollup } from \"vite\";\n\ntype BuildViteOptions = {\n viteConfig: UserConfig;\n};\n\ntype BuildSuccess = {\n error: false;\n output: Rollup.OutputChunk[];\n};\ntype BuildError = {\n error: true;\n errors: Array<string>;\n};\n\ntype BuildResult = BuildSuccess | BuildError;\n\nexport async function buildVite({\n viteConfig,\n}: BuildViteOptions): Promise<BuildResult> {\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) => x.output.filter((x) => x.type === \"chunk\")),\n };\n}\n"],"names":["build","errors","x"],"mappings":";;;;AAmBA,eAAsB,UAAU;AAAA,EAC9B;AACF,GAA2C;AACnC,QAAA,UAAU,MAAMA,WAAM,UAAU;AACtC,MAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AACpB,WAAA;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,CAACC,OAAA,OAAO,WAAW;AAAA,IAAA;AAAA,EAE/B;AAEO,SAAA;AAAA,IACL,OAAO;AAAA,IACP,QAAQ,QAAQ,QAAQ,CAAC,MAAM,EAAE,OAAO,OAAO,CAACC,OAAMA,GAAE,SAAS,OAAO,CAAC;AAAA,EAAA;AAE7E;;"}
1
+ {"version":3,"file":"buildVite.js","sources":["../../../../src/buildVite.ts"],"sourcesContent":["import { build, type UserConfig, type Rollup } from \"vite\";\nimport { errors } from \"./errors.js\";\n\ntype BuildViteOptions = {\n viteConfig: UserConfig;\n};\n\ntype BuildSuccess = {\n error: false;\n output: Rollup.OutputChunk[];\n};\ntype BuildError = {\n error: true;\n errors: Array<string>;\n};\n\ntype BuildResult = BuildSuccess | BuildError;\n\nexport async function buildVite({\n viteConfig,\n}: BuildViteOptions): 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"],"names":["build","errors","x"],"mappings":";;;;AAkBA,eAAsB,UAAU;AAAA,EAC9B;AACF,GAA2C;AACrC,MAAA;AACI,UAAA,UAAU,MAAMA,WAAM,UAAU;AACtC,QAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AACpB,aAAA;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,CAACC,OAAA,OAAO,WAAW;AAAA,MAAA;AAAA,IAE/B;AAEO,WAAA;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,QAAQ;AAAA,QAAQ,CAAC,MACvB,EAAE,OAAO,OAAO,CAACC,OAAMA,GAAE,SAAS,OAAO;AAAA,MAC3C;AAAA,IAAA;AAAA,WAEK,GAAG;AACV,QAAI,aAAa,OAAO;AACf,aAAA;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,CAAC,EAAE,OAAO;AAAA,MAAA;AAAA,IAEtB;AAAA,EACF;AACO,SAAA;AAAA,IACL,OAAO;AAAA,IACP,QAAQ,CAACD,OAAA,OAAO,WAAW;AAAA,EAAA;AAE/B;;"}
@@ -1,10 +1,12 @@
1
1
  import { type Dirs } from "./resolveDirs.js";
2
2
  import { type PackageJson } from "./packageJson.js";
3
+ import { type DetectedModules } from "./detectModules.js";
3
4
  type CreateViteConfigParam = {
4
5
  dirs: Dirs;
5
6
  packageJson: PackageJson;
7
+ modules: DetectedModules;
6
8
  };
7
- export declare function createViteConfig({ dirs, packageJson }: CreateViteConfigParam): {
9
+ export declare function createViteConfig({ dirs, packageJson, modules, }: CreateViteConfigParam): {
8
10
  viteConfig: import("vite").UserConfig;
9
11
  entrypoints: Map<string, string>;
10
12
  bins: Map<string, string>;
@@ -4,7 +4,9 @@ const path = require("node:path");
4
4
  require("node:fs/promises");
5
5
  require("zod");
6
6
  const vite = require("vite");
7
- const index = require("./plugins/babel/index.js");
7
+ const index$1 = require("./plugins/babel/index.js");
8
+ const index = require("./plugins/react/index.js");
9
+ require("semver");
8
10
  function mapToObject(map) {
9
11
  const obj = {};
10
12
  for (const [key, value] of map) {
@@ -40,7 +42,11 @@ function createExternalDepValidator(packageJson) {
40
42
  return false;
41
43
  };
42
44
  }
43
- function createViteConfig({ dirs, packageJson }) {
45
+ function createViteConfig({
46
+ dirs,
47
+ packageJson,
48
+ modules
49
+ }) {
44
50
  const { sourceDir, outDir } = dirs;
45
51
  const entrypoints = /* @__PURE__ */ new Map();
46
52
  if (packageJson.exports) {
@@ -58,9 +64,13 @@ function createViteConfig({ dirs, packageJson }) {
58
64
  const mergedEntries = new Map([...entrypoints, ...bins]);
59
65
  const depsValidator = createExternalDepValidator(packageJson);
60
66
  const viteConfig = vite.defineConfig({
61
- plugins: [index.babelPlugin({ packageJson, dirs })],
67
+ plugins: [
68
+ index.reactPlugin({ modules }),
69
+ index$1.babelPlugin({ packageJson, dirs, modules })
70
+ ],
62
71
  publicDir: false,
63
72
  root: sourceDir,
73
+ logLevel: "silent",
64
74
  build: {
65
75
  outDir,
66
76
  write: true,
@@ -1 +1 @@
1
- {"version":3,"file":"createViteConfig.js","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\";\n\ntype CreateViteConfigParam = {\n dirs: Dirs;\n packageJson: PackageJson;\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({ dirs, packageJson }: CreateViteConfigParam) {\n const { sourceDir, outDir } = 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 viteConfig = defineConfig({\n plugins: [babelPlugin({ packageJson, dirs })],\n publicDir: false,\n root: sourceDir,\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(\"__compiled__\", \"esm\", `${noExt}.mjs`);\n } else {\n return join(\"__compiled__\", \"cjs\", `${noExt}.js`);\n }\n }\n\n if (format === \"es\") {\n return join(\n \"__compiled__\",\n \"esm\",\n relative(sourceDir, entrypoint).replace(/\\.[^.]+$/, \"\") + \".mjs\",\n );\n } else {\n return join(\n \"__compiled__\",\n \"cjs\",\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":["join","defineConfig","babelPlugin","relative"],"mappings":"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"}
1
+ {"version":3,"file":"createViteConfig.js","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 } = 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 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(\"__compiled__\", \"esm\", `${noExt}.mjs`);\n } else {\n return join(\"__compiled__\", \"cjs\", `${noExt}.js`);\n }\n }\n\n if (format === \"es\") {\n return join(\n \"__compiled__\",\n \"esm\",\n relative(sourceDir, entrypoint).replace(/\\.[^.]+$/, \"\") + \".mjs\",\n );\n } else {\n return join(\n \"__compiled__\",\n \"cjs\",\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":["join","defineConfig","reactPlugin","babelPlugin","relative"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type PackageJson } from "./packageJson.js";
2
+ export type DetectedModules = {
3
+ ts?: typeof import("typescript");
4
+ babel?: typeof import("@babel/core");
5
+ react?: "legacy" | "modern";
6
+ };
7
+ export declare function detectModules(packageJson: PackageJson): Promise<DetectedModules>;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
25
+ require("node:fs/promises");
26
+ require("zod");
27
+ require("node:path");
28
+ const semver = require("semver");
29
+ const log = require("./log.js");
30
+ async function detectBabel(packageJson) {
31
+ if ("@babel/core" in (packageJson.optionalDependencies ?? {})) {
32
+ log.errorLog("babel excluded because inside optionalDependencies");
33
+ return;
34
+ }
35
+ try {
36
+ const babel = await import("@babel/core");
37
+ log.okLog("babel, version:", babel.version);
38
+ return babel;
39
+ } catch {
40
+ log.errorLog("babel");
41
+ }
42
+ }
43
+ async function detectReact(packageJson) {
44
+ var _a, _b, _c;
45
+ 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);
46
+ if (reactVersion) {
47
+ const minReactVersion = semver.minVersion(reactVersion);
48
+ if (minReactVersion) {
49
+ const isLegacy = semver.lt(minReactVersion, "17.0.0");
50
+ const transform = isLegacy ? "legacy" : "modern";
51
+ log.okLog(
52
+ `react, min version: ${minReactVersion.version}. Transform: ${transform}`
53
+ );
54
+ return transform;
55
+ }
56
+ }
57
+ log.errorLog("react");
58
+ }
59
+ async function detectModules(packageJson) {
60
+ const result = {};
61
+ log.log("Detecting modules");
62
+ try {
63
+ result.ts = (await import("typescript")).default;
64
+ log.okLog("typescript, version:", result.ts.version);
65
+ } catch {
66
+ log.errorLog("typescript");
67
+ }
68
+ result.babel = await detectBabel(packageJson);
69
+ result.react = await detectReact(packageJson);
70
+ log.lineLog();
71
+ return result;
72
+ }
73
+ exports.detectModules = detectModules;
74
+ //# sourceMappingURL=detectModules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectModules.js","sources":["../../../../src/detectModules.ts"],"sourcesContent":["import { type PackageJson } from \"./packageJson.js\";\nimport semver from \"semver\";\nimport { okLog, errorLog, log, lineLog } from \"./log.js\";\n\nexport type DetectedModules = {\n ts?: typeof import(\"typescript\");\n babel?: typeof import(\"@babel/core\");\n react?: \"legacy\" | \"modern\";\n};\n\nasync function detectBabel(\n packageJson: PackageJson,\n): Promise<typeof import(\"@babel/core\") | undefined> {\n if (\"@babel/core\" in (packageJson.optionalDependencies ?? {})) {\n errorLog(\"babel excluded because inside optionalDependencies\");\n return;\n }\n\n try {\n const babel = await import(\"@babel/core\");\n okLog(\"babel, version:\", babel.version);\n return babel;\n } catch {\n errorLog(\"babel\");\n }\n}\n\nasync function detectReact(\n packageJson: PackageJson,\n): Promise<\"legacy\" | \"modern\" | undefined> {\n const reactVersion =\n packageJson.dependencies?.react ??\n packageJson.devDependencies?.react ??\n packageJson.optionalDependencies?.react;\n if (reactVersion) {\n const minReactVersion = semver.minVersion(reactVersion);\n if (minReactVersion) {\n const isLegacy = semver.lt(minReactVersion, \"17.0.0\");\n const transform = isLegacy ? \"legacy\" : \"modern\";\n okLog(\n `react, min version: ${minReactVersion.version}. Transform: ${transform}`,\n );\n return transform;\n }\n }\n errorLog(\"react\");\n}\n\nexport async function detectModules(\n packageJson: PackageJson,\n): Promise<DetectedModules> {\n const result: DetectedModules = {};\n log(\"Detecting modules\");\n try {\n // ts <=4.3 has no named exports. The all methods is located in the default export\n result.ts = (await import(\"typescript\")).default;\n okLog(\"typescript, version:\", result.ts.version);\n } catch {\n errorLog(\"typescript\");\n }\n\n result.babel = await detectBabel(packageJson);\n result.react = await detectReact(packageJson);\n\n lineLog();\n return result;\n}\n"],"names":["errorLog","okLog","log","lineLog"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,eAAe,YACb,aACmD;AACnD,MAAI,kBAAkB,YAAY,wBAAwB,CAAK,IAAA;AAC7DA,QAAA,SAAS,oDAAoD;AAC7D;AAAA,EACF;AAEI,MAAA;AACI,UAAA,QAAQ,MAAM,OAAO,aAAa;AAClCC,QAAAA,MAAA,mBAAmB,MAAM,OAAO;AAC/B,WAAA;AAAA,EAAA,QACD;AACND,QAAA,SAAS,OAAO;AAAA,EAClB;AACF;AAEA,eAAe,YACb,aAC0C;;AACpC,QAAA,iBACJ,iBAAY,iBAAZ,mBAA0B,YAC1B,iBAAY,oBAAZ,mBAA6B,YAC7B,iBAAY,yBAAZ,mBAAkC;AACpC,MAAI,cAAc;AACV,UAAA,kBAAkB,OAAO,WAAW,YAAY;AACtD,QAAI,iBAAiB;AACnB,YAAM,WAAW,OAAO,GAAG,iBAAiB,QAAQ;AAC9C,YAAA,YAAY,WAAW,WAAW;AACxCC,UAAA;AAAA,QACE,uBAAuB,gBAAgB,OAAO,gBAAgB,SAAS;AAAA,MAAA;AAElE,aAAA;AAAA,IACT;AAAA,EACF;AACAD,MAAA,SAAS,OAAO;AAClB;AAEA,eAAsB,cACpB,aAC0B;AAC1B,QAAM,SAA0B,CAAA;AAChCE,MAAA,IAAI,mBAAmB;AACnB,MAAA;AAEF,WAAO,MAAM,MAAM,OAAO,YAAY,GAAG;AACnCD,QAAAA,MAAA,wBAAwB,OAAO,GAAG,OAAO;AAAA,EAAA,QACzC;AACND,QAAA,SAAS,YAAY;AAAA,EACvB;AAEO,SAAA,QAAQ,MAAM,YAAY,WAAW;AACrC,SAAA,QAAQ,MAAM,YAAY,WAAW;AAEpCG,MAAAA;AACD,SAAA;AACT;;"}
@@ -1,9 +1,10 @@
1
1
  import { type Args } from "./resolveDirs.js";
2
2
  export declare function defineViteConfig(args?: Args): Promise<import("vite").UserConfig>;
3
- export declare function run(args: Args): Promise<{
4
- error: boolean;
5
- errors: string[];
3
+ type RunResult = {
4
+ error: false;
6
5
  } | {
7
- error: boolean;
8
- errors?: undefined;
9
- }>;
6
+ error: true;
7
+ errors: Array<string>;
8
+ };
9
+ export declare function run(args: Args): Promise<RunResult>;
10
+ export {};
@@ -12,11 +12,14 @@ const buildTypesTask = require("./tasks/buildTypesTask/buildTypesTask.js");
12
12
  const error = require("./error.js");
13
13
  const jsFilesTask = require("./tasks/jsFilesTask.js");
14
14
  const binsTask = require("./tasks/binsTask.js");
15
+ const detectModules = require("./detectModules.js");
16
+ const log = require("./log.js");
15
17
  function setExports(exportsMap, exportName, mapFn) {
16
18
  const entry = exportsMap.get(exportName) ?? {};
17
19
  exportsMap.set(exportName, mapFn(entry));
18
20
  }
19
21
  async function defineViteConfig(args = {}) {
22
+ log.disableLog();
20
23
  const dirs = resolveDirs.resolveDirs(args);
21
24
  const { sourceDir, outDir, packagePath } = dirs;
22
25
  await fs.rm(outDir, { recursive: true, force: true });
@@ -26,7 +29,8 @@ async function defineViteConfig(args = {}) {
26
29
  console.error(packageJson$1);
27
30
  throw new Error("Failed to parse package.json");
28
31
  }
29
- const { viteConfig } = createViteConfig.createViteConfig({ dirs, packageJson: packageJson$1 });
32
+ const modules = await detectModules.detectModules(packageJson$1);
33
+ const { viteConfig } = createViteConfig.createViteConfig({ dirs, packageJson: packageJson$1, modules });
30
34
  return viteConfig;
31
35
  }
32
36
  async function run(args) {
@@ -36,13 +40,15 @@ async function run(args) {
36
40
  await fs.mkdir(outDir, { recursive: true });
37
41
  const packageJson$1 = await packageJson.parsePackageJson({ sourceDir, packagePath });
38
42
  if (Array.isArray(packageJson$1)) {
39
- console.log(packageJson$1);
40
43
  return { error: true, errors: packageJson$1 };
41
44
  }
45
+ const modules = await detectModules.detectModules(packageJson$1);
42
46
  const { viteConfig, entrypoints, bins } = createViteConfig.createViteConfig({
43
47
  dirs,
44
- packageJson: packageJson$1
48
+ packageJson: packageJson$1,
49
+ modules
45
50
  });
51
+ log.okLog("Vite");
46
52
  const outputs = await buildVite.buildVite({ viteConfig });
47
53
  if (outputs.error) {
48
54
  return { error: true, errors: outputs.errors };
@@ -56,7 +62,8 @@ async function run(args) {
56
62
  sourceDir,
57
63
  outDir,
58
64
  entrypoints,
59
- buildOutput: viteOutput
65
+ buildOutput: viteOutput,
66
+ modules
60
67
  }).then((res) => {
61
68
  for (const [types, source] of res) {
62
69
  setExports(exportsMap, source, (entry) => {
@@ -93,7 +100,12 @@ async function run(args) {
93
100
  }
94
101
  )
95
102
  ]);
96
- const errors = tasksRes.filter((res) => res.status === "rejected").map((res) => res.reason).filter((res) => res instanceof error.BuildError).map((res) => res.error);
103
+ const errors = tasksRes.filter((res) => res.status === "rejected").map((res) => res.reason).map((res) => {
104
+ if (res instanceof error.BuildError) {
105
+ return res.error;
106
+ }
107
+ return res.message;
108
+ });
97
109
  if (errors.length > 0) {
98
110
  return { error: true, errors };
99
111
  }
@@ -101,6 +113,8 @@ async function run(args) {
101
113
  exportsMap,
102
114
  binsMap
103
115
  });
116
+ log.lineLog();
117
+ log.log(`Build finished: ./${path.relative(sourceDir, outDir)}`);
104
118
  return { error: false };
105
119
  }
106
120
  exports.defineViteConfig = defineViteConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/index.ts"],"sourcesContent":["import { relative } from \"node:path\";\nimport { mkdir, rm } from \"node:fs/promises\";\nimport { parsePackageJson } from \"./packageJson.js\";\nimport { type ExportsObject, writePackageJson } from \"./writePackageJson.js\";\nimport { 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\nexport async function run(args: Args) {\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 console.log(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":["resolveDirs","rm","mkdir","packageJson","parsePackageJson","createViteConfig","buildVite","copyStaticFilesTask","buildTypesTask","relative","jsFilesTask","binsTask","BuildError","writePackageJson"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/index.ts"],"sourcesContent":["import { relative } from \"node:path\";\nimport { mkdir, rm } from \"node:fs/promises\";\nimport { parsePackageJson } from \"./packageJson.js\";\nimport { type ExportsObject, writePackageJson } from \"./writePackageJson.js\";\nimport { 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":["disableLog","resolveDirs","rm","mkdir","packageJson","parsePackageJson","detectModules","createViteConfig","okLog","buildVite","copyStaticFilesTask","buildTypesTask","relative","jsFilesTask","binsTask","BuildError","writePackageJson","lineLog","log"],"mappings":";;;;;;;;;;;;;;;;AAeA,SAAS,WACP,YACA,YACA,OACA;AACA,QAAM,QAAQ,WAAW,IAAI,UAAU,KAAM,CAAA;AAC7C,aAAW,IAAI,YAAY,MAAM,KAAK,CAAC;AACzC;AAEsB,eAAA,iBAAiB,OAAa,IAAI;AAC3CA,MAAAA;AACL,QAAA,OAAOC,wBAAY,IAAI;AAC7B,QAAM,EAAE,WAAW,QAAQ,YAAA,IAAgB;AAE3C,QAAMC,GAAAA,GAAG,QAAQ,EAAE,WAAW,MAAM,OAAO,MAAM;AACjD,QAAMC,GAAM,MAAA,QAAQ,EAAE,WAAW,KAAM,CAAA;AACvC,QAAMC,gBAAc,MAAMC,YAAA,iBAAiB,EAAE,WAAW,YAAa,CAAA;AAEjE,MAAA,MAAM,QAAQD,aAAW,GAAG;AAC9B,YAAQ,MAAMA,aAAW;AACnB,UAAA,IAAI,MAAM,8BAA8B;AAAA,EAChD;AAEM,QAAA,UAAU,MAAME,4BAAcF,aAAW;AACzC,QAAA,EAAE,eAAeG,iBAAA,iBAAiB,EAAE,mBAAMH,eAAa,SAAS;AAE/D,SAAA;AACT;AAWA,eAAsB,IAAI,MAAgC;AAClD,QAAA,OAAOH,wBAAY,IAAI;AAC7B,QAAM,EAAE,WAAW,QAAQ,aAAa,eAAe;AAEvD,QAAMC,GAAAA,GAAG,QAAQ,EAAE,WAAW,MAAM,OAAO,MAAM;AACjD,QAAMC,GAAM,MAAA,QAAQ,EAAE,WAAW,KAAM,CAAA;AACvC,QAAMC,gBAAc,MAAMC,YAAA,iBAAiB,EAAE,WAAW,YAAa,CAAA;AAEjE,MAAA,MAAM,QAAQD,aAAW,GAAG;AAC9B,WAAO,EAAE,OAAO,MAAM,QAAQA,cAAY;AAAA,EAC5C;AAEM,QAAA,UAAU,MAAME,4BAAcF,aAAW;AAC/C,QAAM,EAAE,YAAY,aAAa,KAAA,IAASG,iBAAAA,iBAAiB;AAAA,IACzD;AAAA,IAAA,aACAH;AAAAA,IACA;AAAA,EAAA,CACD;AAEDI,MAAA,MAAM,MAAM;AACZ,QAAM,UAAU,MAAMC,UAAAA,UAAU,EAAE,WAAY,CAAA;AAC9C,MAAI,QAAQ,OAAO;AACjB,WAAO,EAAE,OAAO,MAAM,QAAQ,QAAQ,OAAO;AAAA,EAC/C;AACA,QAAM,aAAa,QAAQ;AAErB,QAAA,iCAAiB;AACjB,QAAA,8BAAc;AACd,QAAA,WAAW,MAAM,QAAQ,WAAW;AAAA,IACxCC,oBAAA,oBAAoB,WAAW,MAAM;AAAA,IACrCC,8BAAe;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb;AAAA,IAAA,CACD,EAAE,KAAK,CAAC,QAAQ;AACf,iBAAW,CAAC,OAAO,MAAM,KAAK,KAAK;AACtB,mBAAA,YAAY,QAAQ,CAAC,UAAU;AACpC,cAAA,MAAM,SAAS,OAAO,GAAG;AAC3B,kBAAM,OAAO,OAAOC,KAAS,SAAA,QAAQ,KAAK;AAAA,UAC5C;AACI,cAAA,MAAM,SAAS,QAAQ,GAAG;AAC5B,kBAAM,OAAO,OAAOA,KAAS,SAAA,QAAQ,KAAK;AAAA,UAC5C;AACO,iBAAA;AAAA,QAAA,CACR;AAAA,MACH;AAAA,IAAA,CACD;AAAA,IACDC,wBAAY,EAAE,aAAa,YAAY,aAAa,OAAQ,CAAA,EAAE;AAAA,MAC5D,CAAC,QAAQ;AACP,mBAAW,CAAC,UAAU,IAAI,KAAK,KAAK;AACvB,qBAAA,YAAY,MAAM,CAAC,UAAU;AACtC,kBAAM,SAAS,SAAS,SAAS,KAAK,IAAI,QAAQ;AAClD,gBAAI,WAAW,MAAM;AACnB,oBAAM,MAAM,OAAO;AAAA,YAAA,WACV,WAAW,OAAO;AAC3B,oBAAM,MAAM,OAAO;AAAA,YACrB;AACO,mBAAA;AAAA,UAAA,CACR;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IACAC,SAAA,SAAS,EAAE,YAAY,MAAM,aAAa,YAAY,OAAQ,CAAA,EAAE;AAAA,MAC9D,CAAC,QAAQ;AACP,mBAAW,CAAC,OAAO,GAAG,KAAK,KAAK;AACtB,kBAAA,IAAI,KAAK,KAAK;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EAAA,CACD;AAED,QAAM,SAAS,SACZ,OAAO,CAAC,QAAQ,IAAI,WAAW,UAAU,EACzC,IAAI,CAAC,QAAQ,IAAI,MAAM,EACvB,IAAI,CAAC,QAAQ;AACZ,QAAI,eAAeC,MAAAA,YAAY;AAC7B,aAAO,IAAI;AAAA,IACb;AAEA,WAAO,IAAI;AAAA,EAAA,CACZ;AAEC,MAAA,OAAO,SAAS,GAAG;AACd,WAAA,EAAE,OAAO,MAAM;EACxB;AAEM,QAAAC,iBAAA,iBAAiB,QAAQZ,eAAa;AAAA,IAC1C;AAAA,IACA;AAAA,EAAA,CACD;AAEOa,MAAAA;AACRC,MAAA,IAAI,qBAAqBN,KAAA,SAAS,WAAW,MAAM,CAAC,EAAE;AAC/C,SAAA,EAAE,OAAO;AAClB;;;"}
@@ -0,0 +1,5 @@
1
+ export declare function disableLog(): void;
2
+ export declare function log(...messages: Array<string>): void;
3
+ export declare function okLog(...messages: Array<string>): void;
4
+ export declare function errorLog(...messages: Array<string>): void;
5
+ export declare function lineLog(): void;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ let logEnabled = true;
4
+ function disableLog() {
5
+ logEnabled = false;
6
+ }
7
+ function log(...messages) {
8
+ if (logEnabled) {
9
+ console.log(...messages);
10
+ }
11
+ }
12
+ function okLog(...messages) {
13
+ log(`✅ ${messages.join(" ")}`);
14
+ }
15
+ function errorLog(...messages) {
16
+ log(`❌ ${messages.join(" ")}`);
17
+ }
18
+ function lineLog() {
19
+ log("=".repeat(40));
20
+ }
21
+ exports.disableLog = disableLog;
22
+ exports.errorLog = errorLog;
23
+ exports.lineLog = lineLog;
24
+ exports.log = log;
25
+ exports.okLog = okLog;
26
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","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}\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;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,32 +1,11 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __copyProps = (to, from, except, desc) => {
9
- if (from && typeof from === "object" || typeof from === "function") {
10
- for (let key of __getOwnPropNames(from))
11
- if (!__hasOwnProp.call(to, key) && key !== except)
12
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
- }
14
- return to;
15
- };
16
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
- // If the importer is in node compatibility mode or this is not an ESM
18
- // file that has been converted to a CommonJS file using a Babel-
19
- // compatible transform (i.e. "__esModule" has not been set), then set
20
- // "default" to the CommonJS "module.exports" for node compatibility.
21
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
- mod
23
- ));
24
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
25
- require("vite");
26
3
  const path = require("node:path");
27
4
  const findBabelConfig = require("./findBabelConfig.js");
28
5
  require("node:fs/promises");
29
6
  require("zod");
7
+ require("semver");
8
+ const log = require("../../log.js");
30
9
  function _interopNamespaceDefault(e) {
31
10
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
32
11
  if (e) {
@@ -44,25 +23,21 @@ function _interopNamespaceDefault(e) {
44
23
  return Object.freeze(n);
45
24
  }
46
25
  const path__namespace = /* @__PURE__ */ _interopNamespaceDefault(path);
47
- function babelPlugin({ packageJson, dirs }) {
48
- let babelCore;
26
+ function babelPlugin({
27
+ packageJson,
28
+ dirs,
29
+ modules
30
+ }) {
49
31
  let hasBabelConfig = false;
50
32
  return {
51
33
  name: "smartbundle:babel",
52
34
  async buildStart() {
53
- try {
54
- if (!("@babel/core" in (packageJson.optionalDependencies ?? {}))) {
55
- babelCore = await import("@babel/core");
56
- }
57
- } catch (e) {
58
- console.error(e);
59
- }
60
35
  hasBabelConfig = await findBabelConfig.findBabelConfig(dirs.sourceDir, packageJson);
61
- if (babelCore && !hasBabelConfig) {
36
+ if (modules.babel && !hasBabelConfig) {
62
37
  this.warn(
63
38
  "We have found a @babel/core package, but config was not found. It could be a bug"
64
39
  );
65
- } else if (!babelCore && hasBabelConfig) {
40
+ } else if (!modules.babel && hasBabelConfig) {
66
41
  this.error(
67
42
  new Error(
68
43
  "We have found a babel config. Please install @babel/core to devDeps or remove the config file"
@@ -71,7 +46,7 @@ function babelPlugin({ packageJson, dirs }) {
71
46
  }
72
47
  },
73
48
  async transform(code, id) {
74
- if (!babelCore || !hasBabelConfig) {
49
+ if (!modules.babel || !hasBabelConfig) {
75
50
  return null;
76
51
  }
77
52
  const extname = path__namespace.extname(id);
@@ -79,7 +54,7 @@ function babelPlugin({ packageJson, dirs }) {
79
54
  return null;
80
55
  }
81
56
  const map = this.getCombinedSourcemap();
82
- const result = await babelCore.transformAsync(code, {
57
+ const result = await modules.babel.transformAsync(code, {
83
58
  filename: id,
84
59
  sourceMaps: true,
85
60
  inputSourceMap: map
@@ -91,6 +66,15 @@ function babelPlugin({ packageJson, dirs }) {
91
66
  code: result.code,
92
67
  map: result.map
93
68
  };
69
+ },
70
+ buildEnd(error) {
71
+ if (!error) {
72
+ if (modules.babel && hasBabelConfig) {
73
+ log.okLog("Babel");
74
+ }
75
+ } else {
76
+ this.error(error);
77
+ }
94
78
  }
95
79
  };
96
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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":["findBabelConfig","path"],"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,MAAMA,gBAAA,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,UAAUC,gBAAK,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.js","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":["findBabelConfig","path","okLog"],"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,MAAMA,gBAAA,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,UAAUC,gBAAK,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;AACnCC,cAAA,MAAM,OAAO;AAAA,QACf;AAAA,MAAA,OACK;AACL,aAAK,MAAM,KAAK;AAAA,MAClB;AAAA,IACF;AAAA,EAAA;AAEJ;;"}
@@ -0,0 +1,7 @@
1
+ import type { Plugin } from "vite";
2
+ import { type DetectedModules } from "../../detectModules.js";
3
+ type ReactPluginArg = {
4
+ modules: DetectedModules;
5
+ };
6
+ export declare function reactPlugin({ modules }: ReactPluginArg): Plugin;
7
+ export {};
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const vite = require("vite");
4
+ require("node:fs/promises");
5
+ require("zod");
6
+ require("node:path");
7
+ require("semver");
8
+ const log = require("../../log.js");
9
+ const errorJsxMessage = "SmartBundle cannot find the react dependency inside dependencies, optionalDependencies or peerDependencies. Please, install it before bundling";
10
+ function reactPlugin({ modules }) {
11
+ const pluginName = "smartbundle:react";
12
+ if (modules.react == null) {
13
+ return {
14
+ name: pluginName,
15
+ transform(code, id) {
16
+ if (id.endsWith(".jsx") || id.endsWith(".tsx")) {
17
+ this.error(new Error(errorJsxMessage));
18
+ }
19
+ },
20
+ buildEnd(err) {
21
+ if (err) {
22
+ const isJsxError = err.message.includes("JSX");
23
+ if (isJsxError) {
24
+ this.error(new Error(errorJsxMessage));
25
+ }
26
+ }
27
+ }
28
+ };
29
+ }
30
+ return {
31
+ name: pluginName,
32
+ enforce: "pre",
33
+ async transform(code, id) {
34
+ const isJs = id.endsWith(".js");
35
+ const isJsx = id.endsWith(".jsx");
36
+ const isTsx = id.endsWith(".tsx");
37
+ if (!(isJs || isJsx || isTsx)) {
38
+ return null;
39
+ }
40
+ return await vite.transformWithEsbuild(
41
+ code,
42
+ id,
43
+ {
44
+ loader: isJs || isJsx ? "jsx" : "tsx",
45
+ jsx: modules.react === "legacy" ? "transform" : "automatic",
46
+ sourcemap: true
47
+ },
48
+ this.getCombinedSourcemap()
49
+ );
50
+ },
51
+ buildEnd(err) {
52
+ if (!err) {
53
+ log.okLog("React");
54
+ } else {
55
+ this.error(err);
56
+ }
57
+ }
58
+ };
59
+ }
60
+ exports.reactPlugin = reactPlugin;
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","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":["transformWithEsbuild","okLog"],"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,MAAMA,KAAA;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;AACRC,YAAA,MAAM,OAAO;AAAA,MAAA,OACR;AACL,aAAK,MAAM,GAAG;AAAA,MAChB;AAAA,IACF;AAAA,EAAA;AAEJ;;"}