smartbundle 0.10.1 → 0.11.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/__compiled__/cjs/src/buildVite.d.ts +1 -2
- package/__compiled__/cjs/src/buildVite.js +21 -6
- package/__compiled__/cjs/src/buildVite.js.map +1 -1
- package/__compiled__/cjs/src/createViteConfig.js +4 -0
- package/__compiled__/cjs/src/createViteConfig.js.map +1 -1
- package/__compiled__/cjs/src/index.d.ts +7 -6
- package/__compiled__/cjs/src/index.js +0 -1
- package/__compiled__/cjs/src/index.js.map +1 -1
- package/__compiled__/cjs/src/packageJson.d.ts +3 -0
- package/__compiled__/cjs/src/packageJson.js +2 -1
- package/__compiled__/cjs/src/packageJson.js.map +1 -1
- package/__compiled__/cjs/src/plugins/babel/findBabelConfig.d.ts +2 -0
- package/__compiled__/cjs/src/plugins/babel/findBabelConfig.js +60 -0
- package/__compiled__/cjs/src/plugins/babel/findBabelConfig.js.map +1 -0
- package/__compiled__/cjs/src/plugins/babel/index.d.ts +9 -0
- package/__compiled__/cjs/src/plugins/babel/index.js +98 -0
- package/__compiled__/cjs/src/plugins/babel/index.js.map +1 -0
- package/__compiled__/cjs/src/plugins/react/index.d.ts +7 -0
- package/__compiled__/cjs/src/plugins/react/index.js +56 -0
- package/__compiled__/cjs/src/plugins/react/index.js.map +1 -0
- package/__compiled__/cjs/src/run.js +7 -1
- package/__compiled__/cjs/src/run.js.map +1 -1
- package/__compiled__/esm/src/buildVite.d.mts +1 -2
- package/__compiled__/esm/src/buildVite.mjs +21 -6
- package/__compiled__/esm/src/buildVite.mjs.map +1 -1
- package/__compiled__/esm/src/createViteConfig.mjs +4 -0
- package/__compiled__/esm/src/createViteConfig.mjs.map +1 -1
- package/__compiled__/esm/src/index.d.mts +7 -6
- package/__compiled__/esm/src/index.mjs +0 -1
- package/__compiled__/esm/src/index.mjs.map +1 -1
- package/__compiled__/esm/src/packageJson.d.mts +3 -0
- package/__compiled__/esm/src/packageJson.mjs +2 -1
- package/__compiled__/esm/src/packageJson.mjs.map +1 -1
- package/__compiled__/esm/src/plugins/babel/findBabelConfig.d.mts +2 -0
- package/__compiled__/esm/src/plugins/babel/findBabelConfig.mjs +42 -0
- package/__compiled__/esm/src/plugins/babel/findBabelConfig.mjs.map +1 -0
- package/__compiled__/esm/src/plugins/babel/index.d.mts +9 -0
- package/__compiled__/esm/src/plugins/babel/index.mjs +59 -0
- package/__compiled__/esm/src/plugins/babel/index.mjs.map +1 -0
- package/__compiled__/esm/src/plugins/react/index.d.mts +7 -0
- package/__compiled__/esm/src/plugins/react/index.mjs +56 -0
- package/__compiled__/esm/src/plugins/react/index.mjs.map +1 -0
- package/__compiled__/esm/src/run.mjs +7 -1
- package/__compiled__/esm/src/run.mjs.map +1 -1
- package/package.json +10 -6
package/README.md
CHANGED
@@ -57,6 +57,16 @@ The built files will appear in the `./dist` folder, including an auto-generated
|
|
57
57
|
|
58
58
|
We aim to support as many bundlers and runtimes as possible. If the bundled package doesn't work with your bundler, please let us know.
|
59
59
|
|
60
|
+
## Third party tools support
|
61
|
+
### Typescript
|
62
|
+
Just install `typescript@^5.0.0` as a dev dependency and start creating ts files.
|
63
|
+
|
64
|
+
### Babel
|
65
|
+
Just install `@babel/core@^7.0.0` as a dev dependency and create a Babel configuration file in the project root.
|
66
|
+
|
67
|
+
### React
|
68
|
+
Just install `react`. More information on React integration can be found [here](./docs/react.md).
|
69
|
+
|
60
70
|
## `package.json` limitations
|
61
71
|
To reduce potential errors and ensure smooth package generation, we follow a stricter configuration for `package.json`.
|
62
72
|
|
@@ -5,16 +5,31 @@ const errors = require("./errors.js");
|
|
5
5
|
async function buildVite({
|
6
6
|
viteConfig
|
7
7
|
}) {
|
8
|
-
|
9
|
-
|
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:
|
12
|
-
|
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:
|
17
|
-
|
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\";\
|
1
|
+
{"version":3,"file":"buildVite.js","sources":["../../../../src/buildVite.ts"],"sourcesContent":["import { build, type UserConfig, 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;;"}
|
@@ -4,6 +4,8 @@ const path = require("node:path");
|
|
4
4
|
require("node:fs/promises");
|
5
5
|
require("zod");
|
6
6
|
const vite = require("vite");
|
7
|
+
const index$1 = require("./plugins/babel/index.js");
|
8
|
+
const index = require("./plugins/react/index.js");
|
7
9
|
function mapToObject(map) {
|
8
10
|
const obj = {};
|
9
11
|
for (const [key, value] of map) {
|
@@ -57,8 +59,10 @@ function createViteConfig({ dirs, packageJson }) {
|
|
57
59
|
const mergedEntries = new Map([...entrypoints, ...bins]);
|
58
60
|
const depsValidator = createExternalDepValidator(packageJson);
|
59
61
|
const viteConfig = vite.defineConfig({
|
62
|
+
plugins: [index.reactPlugin({ packageJson }), index$1.babelPlugin({ packageJson, dirs })],
|
60
63
|
publicDir: false,
|
61
64
|
root: sourceDir,
|
65
|
+
logLevel: "silent",
|
62
66
|
build: {
|
63
67
|
outDir,
|
64
68
|
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\";\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 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","relative"],"mappings":"
|
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\";\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: [reactPlugin({ packageJson }), babelPlugin({ packageJson, dirs })],\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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"}
|
@@ -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
|
-
|
4
|
-
error:
|
5
|
-
errors: string[];
|
3
|
+
type RunResult = {
|
4
|
+
error: false;
|
6
5
|
} | {
|
7
|
-
error:
|
8
|
-
errors
|
9
|
-
}
|
6
|
+
error: true;
|
7
|
+
errors: Array<string>;
|
8
|
+
};
|
9
|
+
export declare function run(args: Args): Promise<RunResult>;
|
10
|
+
export {};
|
@@ -36,7 +36,6 @@ async function run(args) {
|
|
36
36
|
await fs.mkdir(outDir, { recursive: true });
|
37
37
|
const packageJson$1 = await packageJson.parsePackageJson({ sourceDir, packagePath });
|
38
38
|
if (Array.isArray(packageJson$1)) {
|
39
|
-
console.log(packageJson$1);
|
40
39
|
return { error: true, errors: packageJson$1 };
|
41
40
|
}
|
42
41
|
const { viteConfig, entrypoints, bins } = createViteConfig.createViteConfig({
|
@@ -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
|
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\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":["resolveDirs","rm","mkdir","packageJson","parsePackageJson","createViteConfig","buildVite","copyStaticFilesTask","buildTypesTask","relative","jsFilesTask","binsTask","BuildError","writePackageJson"],"mappings":"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"}
|
@@ -25,6 +25,7 @@ declare function createPackageJsonSchema(sourceDir: string): z.ZodObject<{
|
|
25
25
|
sideEffects: z.ZodOptional<z.ZodAny>;
|
26
26
|
unpkg: z.ZodOptional<z.ZodAny>;
|
27
27
|
homepage: z.ZodOptional<z.ZodAny>;
|
28
|
+
babel: z.ZodOptional<z.ZodAny>;
|
28
29
|
}, "strip", z.ZodTypeAny, {
|
29
30
|
exports?: Map<string, string>;
|
30
31
|
name?: string;
|
@@ -51,6 +52,7 @@ declare function createPackageJsonSchema(sourceDir: string): z.ZodObject<{
|
|
51
52
|
sideEffects?: any;
|
52
53
|
unpkg?: any;
|
53
54
|
homepage?: any;
|
55
|
+
babel?: any;
|
54
56
|
}, {
|
55
57
|
exports?: string | Record<string, string>;
|
56
58
|
name?: string;
|
@@ -77,6 +79,7 @@ declare function createPackageJsonSchema(sourceDir: string): z.ZodObject<{
|
|
77
79
|
sideEffects?: any;
|
78
80
|
unpkg?: any;
|
79
81
|
homepage?: any;
|
82
|
+
babel?: any;
|
80
83
|
}>;
|
81
84
|
type PackageJsonSchema = ReturnType<typeof createPackageJsonSchema>;
|
82
85
|
export type PackageJson = z.infer<PackageJsonSchema>;
|
@@ -126,7 +126,8 @@ function createPackageJsonSchema(sourceDir) {
|
|
126
126
|
cpu: z.array(z.string(), { message: errors.errors.cpuInvalid }).optional(),
|
127
127
|
sideEffects: z.any().optional(),
|
128
128
|
unpkg: z.any().optional(),
|
129
|
-
homepage: z.any().optional()
|
129
|
+
homepage: z.any().optional(),
|
130
|
+
babel: z.any().optional()
|
130
131
|
});
|
131
132
|
}
|
132
133
|
async function parsePackageJson({
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"packageJson.js","sources":["../../../../src/packageJson.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport z from \"zod\";\nimport { errors } from \"./errors.js\";\nimport { join } from \"node:path\";\n\n// <region>\n// For AI completion. Don't remove.\nconst allPackageJsonFields = [\n \"exports\",\n \"name\",\n \"version\",\n \"private\",\n \"description\",\n \"dependencies\",\n \"optionalDependencies\",\n \"bin\",\n \"repository\",\n \"keywords\",\n \"author\",\n \"contributors\",\n \"license\",\n \"devDependencies\",\n \"peerDependencies\",\n \"engines\",\n \"browser\",\n \"funding\",\n \"os\",\n \"cpu\",\n];\n\nconst requiredFields = [\"exports\", \"name\", \"version\", \"private\"];\n\nconst optionalFields = [\n \"description\",\n \"dependencies\",\n \"optionalDependencies\",\n \"bin\",\n \"repository\",\n \"keywords\",\n \"author\",\n \"contributors\",\n \"license\",\n \"devDependencies\",\n \"peerDependencies\",\n \"engines\",\n \"browser\",\n \"funding\",\n \"os\",\n \"cpu\",\n];\n// </region>\n\nasync function fileExists(filePath: string) {\n try {\n const stats = await fs.stat(filePath);\n return stats.isFile();\n } catch (error) {\n return false;\n }\n}\n\nfunction dependencies(errorText: string) {\n return z\n .record(z.string({ message: errorText }), { message: errorText })\n .optional();\n}\n\nfunction createPathValidator(sourceDir: string) {\n return (path: string) => {\n const finalPath = join(sourceDir, path);\n return fileExists(finalPath);\n };\n}\n\nconst PackageJsonNameField: string = \"___NAME___\";\nfunction fillPackageJson(packageJson: PackageJson) {\n if (packageJson.bin) {\n const binName = packageJson.bin.get(PackageJsonNameField);\n if (binName) {\n packageJson.bin.set(packageJson.name, binName);\n packageJson.bin.delete(PackageJsonNameField);\n }\n }\n}\n\nfunction createPackageJsonSchema(sourceDir: string) {\n const pathValidator = createPathValidator(sourceDir);\n\n return z.object({\n exports: z\n .union(\n [\n z.string().transform((path) => new Map([[\".\", path]])),\n z.record(z.string()).transform((obj) => new Map(Object.entries(obj))),\n ],\n {\n errorMap() {\n return { message: errors.exportsRequired };\n },\n },\n )\n .refine(async (obj) => {\n for (const [key, value] of obj.entries()) {\n if (!(await pathValidator(value))) {\n return false;\n }\n }\n return true;\n }, errors.exportsInvalid)\n .optional(),\n name: z\n .string({ message: errors.nameRequired })\n .min(1, errors.nameMinLength)\n .max(214, errors.nameMaxLength)\n .refine(\n (name) => [\"_\", \".\"].every((start) => !name.startsWith(start)),\n errors.nameStartsIllegalChars,\n ),\n version: z.string({ message: errors.versionRequired }),\n private: z\n .boolean({ message: errors.privateIsTrue })\n .refine((value) => value, errors.privateIsTrue),\n description: z.string({ message: errors.descriptionString }).optional(),\n dependencies: dependencies(errors.dependenciesInvalid),\n optionalDependencies: dependencies(errors.optionalDependenciesInvalid),\n bin: z\n .union(\n [\n z\n .string()\n .transform((value) => new Map([[PackageJsonNameField, value]])),\n z\n .record(z.string())\n .transform((record) => new Map(Object.entries(record))),\n ],\n {\n errorMap() {\n return { message: errors.binFiled };\n },\n },\n )\n .refine(\n async (map) => {\n for (const [key, value] of map.entries()) {\n if (!(await pathValidator(value))) {\n return false;\n }\n }\n return true;\n },\n { message: errors.binFiled },\n )\n .optional(),\n repository: z.any().optional(),\n keywords: z\n .array(z.string(), { message: errors.keywordsInvalid })\n .optional(),\n author: z.any().optional(),\n maintainers: z.any().optional(),\n contributors: z\n .array(\n z.union([\n z.string({ message: errors.contributorsInvalid }),\n z.object({}, { message: errors.contributorsInvalid }),\n ]),\n )\n .optional(),\n license: z.any().optional(),\n devDependencies: dependencies(errors.devDependenciesInvalid),\n peerDependencies: dependencies(errors.peerDependenciesInvalid),\n engines: z\n .record(z.string(), { message: errors.enginesInvalid })\n .optional(),\n browser: z\n .union([\n z.string({ message: errors.browserInvalid }),\n z.record(z.string(), { message: errors.browserInvalid }),\n ])\n .optional(),\n bugs: z.any().optional(),\n funding: z\n .union([\n z.string({ message: errors.fundingInvalid }),\n z.object({}, { message: errors.fundingInvalid }),\n ])\n .optional(),\n os: z.array(z.string(), { message: errors.osInvalid }).optional(),\n cpu: z.array(z.string(), { message: errors.cpuInvalid }).optional(),\n sideEffects: z.any().optional(),\n unpkg: z.any().optional(),\n homepage: z.any().optional(),\n });\n}\ntype PackageJsonSchema = ReturnType<typeof createPackageJsonSchema>;\n\nexport type PackageJson = z.infer<PackageJsonSchema>;\ntype Errors = Array<string>;\n\ntype ParsePackageJsonArg = {\n packagePath: string;\n sourceDir: string;\n};\n\nexport async function parsePackageJson({\n sourceDir,\n packagePath,\n}: ParsePackageJsonArg): Promise<PackageJson | Errors> {\n const packageString = await fs.readFile(packagePath, \"utf-8\");\n const rawJson = JSON.parse(packageString);\n\n const packageJsonSchema = createPackageJsonSchema(sourceDir);\n const packageJson = await packageJsonSchema.safeParseAsync(rawJson);\n if (!packageJson.success) {\n return packageJson.error.errors.map((error) => error.message);\n }\n\n fillPackageJson(packageJson.data);\n return packageJson.data;\n}\n"],"names":["fs","path","join","errors"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"packageJson.js","sources":["../../../../src/packageJson.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport z from \"zod\";\nimport { errors } from \"./errors.js\";\nimport { join } from \"node:path\";\n\n// <region>\n// For AI completion. Don't remove.\nconst allPackageJsonFields = [\n \"exports\",\n \"name\",\n \"version\",\n \"private\",\n \"description\",\n \"dependencies\",\n \"optionalDependencies\",\n \"bin\",\n \"repository\",\n \"keywords\",\n \"author\",\n \"contributors\",\n \"license\",\n \"devDependencies\",\n \"peerDependencies\",\n \"engines\",\n \"browser\",\n \"funding\",\n \"os\",\n \"cpu\",\n];\n\nconst requiredFields = [\"exports\", \"name\", \"version\", \"private\"];\n\nconst optionalFields = [\n \"description\",\n \"dependencies\",\n \"optionalDependencies\",\n \"bin\",\n \"repository\",\n \"keywords\",\n \"author\",\n \"contributors\",\n \"license\",\n \"devDependencies\",\n \"peerDependencies\",\n \"engines\",\n \"browser\",\n \"funding\",\n \"os\",\n \"cpu\",\n];\n// </region>\n\nasync function fileExists(filePath: string) {\n try {\n const stats = await fs.stat(filePath);\n return stats.isFile();\n } catch (error) {\n return false;\n }\n}\n\nfunction dependencies(errorText: string) {\n return z\n .record(z.string({ message: errorText }), { message: errorText })\n .optional();\n}\n\nfunction createPathValidator(sourceDir: string) {\n return (path: string) => {\n const finalPath = join(sourceDir, path);\n return fileExists(finalPath);\n };\n}\n\nconst PackageJsonNameField: string = \"___NAME___\";\nfunction fillPackageJson(packageJson: PackageJson) {\n if (packageJson.bin) {\n const binName = packageJson.bin.get(PackageJsonNameField);\n if (binName) {\n packageJson.bin.set(packageJson.name, binName);\n packageJson.bin.delete(PackageJsonNameField);\n }\n }\n}\n\nfunction createPackageJsonSchema(sourceDir: string) {\n const pathValidator = createPathValidator(sourceDir);\n\n return z.object({\n exports: z\n .union(\n [\n z.string().transform((path) => new Map([[\".\", path]])),\n z.record(z.string()).transform((obj) => new Map(Object.entries(obj))),\n ],\n {\n errorMap() {\n return { message: errors.exportsRequired };\n },\n },\n )\n .refine(async (obj) => {\n for (const [key, value] of obj.entries()) {\n if (!(await pathValidator(value))) {\n return false;\n }\n }\n return true;\n }, errors.exportsInvalid)\n .optional(),\n name: z\n .string({ message: errors.nameRequired })\n .min(1, errors.nameMinLength)\n .max(214, errors.nameMaxLength)\n .refine(\n (name) => [\"_\", \".\"].every((start) => !name.startsWith(start)),\n errors.nameStartsIllegalChars,\n ),\n version: z.string({ message: errors.versionRequired }),\n private: z\n .boolean({ message: errors.privateIsTrue })\n .refine((value) => value, errors.privateIsTrue),\n description: z.string({ message: errors.descriptionString }).optional(),\n dependencies: dependencies(errors.dependenciesInvalid),\n optionalDependencies: dependencies(errors.optionalDependenciesInvalid),\n bin: z\n .union(\n [\n z\n .string()\n .transform((value) => new Map([[PackageJsonNameField, value]])),\n z\n .record(z.string())\n .transform((record) => new Map(Object.entries(record))),\n ],\n {\n errorMap() {\n return { message: errors.binFiled };\n },\n },\n )\n .refine(\n async (map) => {\n for (const [key, value] of map.entries()) {\n if (!(await pathValidator(value))) {\n return false;\n }\n }\n return true;\n },\n { message: errors.binFiled },\n )\n .optional(),\n repository: z.any().optional(),\n keywords: z\n .array(z.string(), { message: errors.keywordsInvalid })\n .optional(),\n author: z.any().optional(),\n maintainers: z.any().optional(),\n contributors: z\n .array(\n z.union([\n z.string({ message: errors.contributorsInvalid }),\n z.object({}, { message: errors.contributorsInvalid }),\n ]),\n )\n .optional(),\n license: z.any().optional(),\n devDependencies: dependencies(errors.devDependenciesInvalid),\n peerDependencies: dependencies(errors.peerDependenciesInvalid),\n engines: z\n .record(z.string(), { message: errors.enginesInvalid })\n .optional(),\n browser: z\n .union([\n z.string({ message: errors.browserInvalid }),\n z.record(z.string(), { message: errors.browserInvalid }),\n ])\n .optional(),\n bugs: z.any().optional(),\n funding: z\n .union([\n z.string({ message: errors.fundingInvalid }),\n z.object({}, { message: errors.fundingInvalid }),\n ])\n .optional(),\n os: z.array(z.string(), { message: errors.osInvalid }).optional(),\n cpu: z.array(z.string(), { message: errors.cpuInvalid }).optional(),\n sideEffects: z.any().optional(),\n unpkg: z.any().optional(),\n homepage: z.any().optional(),\n babel: z.any().optional(),\n });\n}\ntype PackageJsonSchema = ReturnType<typeof createPackageJsonSchema>;\n\nexport type PackageJson = z.infer<PackageJsonSchema>;\ntype Errors = Array<string>;\n\ntype ParsePackageJsonArg = {\n packagePath: string;\n sourceDir: string;\n};\n\nexport async function parsePackageJson({\n sourceDir,\n packagePath,\n}: ParsePackageJsonArg): Promise<PackageJson | Errors> {\n const packageString = await fs.readFile(packagePath, \"utf-8\");\n const rawJson = JSON.parse(packageString);\n\n const packageJsonSchema = createPackageJsonSchema(sourceDir);\n const packageJson = await packageJsonSchema.safeParseAsync(rawJson);\n if (!packageJson.success) {\n return packageJson.error.errors.map((error) => error.message);\n }\n\n fillPackageJson(packageJson.data);\n return packageJson.data;\n}\n"],"names":["fs","path","join","errors"],"mappings":"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"}
|
@@ -0,0 +1,60 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
3
|
+
const path = require("node:path");
|
4
|
+
const fs = require("node:fs/promises");
|
5
|
+
require("zod");
|
6
|
+
function _interopNamespaceDefault(e) {
|
7
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
8
|
+
if (e) {
|
9
|
+
for (const k in e) {
|
10
|
+
if (k !== "default") {
|
11
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
12
|
+
Object.defineProperty(n, k, d.get ? d : {
|
13
|
+
enumerable: true,
|
14
|
+
get: () => e[k]
|
15
|
+
});
|
16
|
+
}
|
17
|
+
}
|
18
|
+
}
|
19
|
+
n.default = e;
|
20
|
+
return Object.freeze(n);
|
21
|
+
}
|
22
|
+
const path__namespace = /* @__PURE__ */ _interopNamespaceDefault(path);
|
23
|
+
const fs__namespace = /* @__PURE__ */ _interopNamespaceDefault(fs);
|
24
|
+
const configFiles = [
|
25
|
+
".babelrc",
|
26
|
+
".babelrc.json",
|
27
|
+
".babelrc.js",
|
28
|
+
".babelrc.cjs",
|
29
|
+
".babelrc.mjs",
|
30
|
+
"babel.config.json",
|
31
|
+
"babel.config.js",
|
32
|
+
"babel.config.cjs",
|
33
|
+
"babel.config.mjs",
|
34
|
+
"package.json"
|
35
|
+
];
|
36
|
+
async function findBabelConfig(dir, packageJson) {
|
37
|
+
try {
|
38
|
+
for (const file of configFiles) {
|
39
|
+
const configPath = path__namespace.join(dir, file);
|
40
|
+
try {
|
41
|
+
const stat = await fs__namespace.stat(configPath);
|
42
|
+
if (stat.isFile()) {
|
43
|
+
if (file === "package.json") {
|
44
|
+
if (packageJson.babel) {
|
45
|
+
return true;
|
46
|
+
}
|
47
|
+
} else {
|
48
|
+
return true;
|
49
|
+
}
|
50
|
+
}
|
51
|
+
} catch {
|
52
|
+
}
|
53
|
+
}
|
54
|
+
return false;
|
55
|
+
} catch {
|
56
|
+
return false;
|
57
|
+
}
|
58
|
+
}
|
59
|
+
exports.findBabelConfig = findBabelConfig;
|
60
|
+
//# sourceMappingURL=findBabelConfig.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"findBabelConfig.js","sources":["../../../../../../src/plugins/babel/findBabelConfig.ts"],"sourcesContent":["import * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\nimport { type PackageJson } from \"../../packageJson.js\";\n\nconst configFiles = [\n \".babelrc\",\n \".babelrc.json\",\n \".babelrc.js\",\n \".babelrc.cjs\",\n \".babelrc.mjs\",\n \"babel.config.json\",\n \"babel.config.js\",\n \"babel.config.cjs\",\n \"babel.config.mjs\",\n \"package.json\",\n];\n\n// We need to check the existance only for better error reporting\n// It helps if a user made the config but forgot to install babel/core\n\nexport async function findBabelConfig(\n dir: string,\n packageJson: PackageJson,\n): Promise<boolean> {\n try {\n for (const file of configFiles) {\n const configPath = path.join(dir, file);\n try {\n const stat = await fs.stat(configPath);\n if (stat.isFile()) {\n if (file === \"package.json\") {\n if (packageJson.babel) {\n return true;\n }\n } else {\n return true;\n }\n }\n } catch {}\n }\n return false;\n } catch {\n return false;\n }\n}\n"],"names":["path","fs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,cAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKsB,eAAA,gBACpB,KACA,aACkB;AACd,MAAA;AACF,eAAW,QAAQ,aAAa;AAC9B,YAAM,aAAaA,gBAAK,KAAK,KAAK,IAAI;AAClC,UAAA;AACF,cAAM,OAAO,MAAMC,cAAG,KAAK,UAAU;AACjC,YAAA,KAAK,UAAU;AACjB,cAAI,SAAS,gBAAgB;AAC3B,gBAAI,YAAY,OAAO;AACd,qBAAA;AAAA,YACT;AAAA,UAAA,OACK;AACE,mBAAA;AAAA,UACT;AAAA,QACF;AAAA,MAAA,QACM;AAAA,MAAC;AAAA,IACX;AACO,WAAA;AAAA,EAAA,QACD;AACC,WAAA;AAAA,EACT;AACF;;"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { type Plugin } from "vite";
|
2
|
+
import { type PackageJson } from "../../packageJson.js";
|
3
|
+
import { type Dirs } from "../../resolveDirs.js";
|
4
|
+
type BabelPluginOptions = {
|
5
|
+
packageJson: PackageJson;
|
6
|
+
dirs: Dirs;
|
7
|
+
};
|
8
|
+
export declare function babelPlugin({ packageJson, dirs }: BabelPluginOptions): Plugin;
|
9
|
+
export {};
|
@@ -0,0 +1,98 @@
|
|
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("vite");
|
26
|
+
const path = require("node:path");
|
27
|
+
const findBabelConfig = require("./findBabelConfig.js");
|
28
|
+
require("node:fs/promises");
|
29
|
+
require("zod");
|
30
|
+
function _interopNamespaceDefault(e) {
|
31
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
32
|
+
if (e) {
|
33
|
+
for (const k in e) {
|
34
|
+
if (k !== "default") {
|
35
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
36
|
+
Object.defineProperty(n, k, d.get ? d : {
|
37
|
+
enumerable: true,
|
38
|
+
get: () => e[k]
|
39
|
+
});
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
n.default = e;
|
44
|
+
return Object.freeze(n);
|
45
|
+
}
|
46
|
+
const path__namespace = /* @__PURE__ */ _interopNamespaceDefault(path);
|
47
|
+
function babelPlugin({ packageJson, dirs }) {
|
48
|
+
let babelCore;
|
49
|
+
let hasBabelConfig = false;
|
50
|
+
return {
|
51
|
+
name: "smartbundle:babel",
|
52
|
+
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
|
+
hasBabelConfig = await findBabelConfig.findBabelConfig(dirs.sourceDir, packageJson);
|
61
|
+
if (babelCore && !hasBabelConfig) {
|
62
|
+
this.warn(
|
63
|
+
"We have found a @babel/core package, but config was not found. It could be a bug"
|
64
|
+
);
|
65
|
+
} else if (!babelCore && hasBabelConfig) {
|
66
|
+
this.error(
|
67
|
+
new Error(
|
68
|
+
"We have found a babel config. Please install @babel/core to devDeps or remove the config file"
|
69
|
+
)
|
70
|
+
);
|
71
|
+
}
|
72
|
+
},
|
73
|
+
async transform(code, id) {
|
74
|
+
if (!babelCore || !hasBabelConfig) {
|
75
|
+
return null;
|
76
|
+
}
|
77
|
+
const extname = path__namespace.extname(id);
|
78
|
+
if (![".js", ".ts"].includes(extname)) {
|
79
|
+
return null;
|
80
|
+
}
|
81
|
+
const map = this.getCombinedSourcemap();
|
82
|
+
const result = await babelCore.transformAsync(code, {
|
83
|
+
filename: id,
|
84
|
+
sourceMaps: true,
|
85
|
+
inputSourceMap: map
|
86
|
+
});
|
87
|
+
if (!(result == null ? void 0 : result.code)) {
|
88
|
+
throw new Error("Babel transformation failed");
|
89
|
+
}
|
90
|
+
return {
|
91
|
+
code: result.code,
|
92
|
+
map: result.map
|
93
|
+
};
|
94
|
+
}
|
95
|
+
};
|
96
|
+
}
|
97
|
+
exports.babelPlugin = babelPlugin;
|
98
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +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;;"}
|
@@ -0,0 +1,56 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
3
|
+
const vite = require("vite");
|
4
|
+
const semver = require("semver");
|
5
|
+
const errorJsxMessage = "SmartBundle cannot find the react dependency inside dependencies, optionalDependencies or peerDependencies. Please, install it before bundling";
|
6
|
+
function reactPlugin({ packageJson }) {
|
7
|
+
var _a, _b, _c;
|
8
|
+
const pluginName = "smartbundle:react";
|
9
|
+
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);
|
10
|
+
if (!reactVersion) {
|
11
|
+
return {
|
12
|
+
name: pluginName,
|
13
|
+
transform(code, id) {
|
14
|
+
if (id.endsWith(".jsx") || id.endsWith(".tsx")) {
|
15
|
+
this.error(new Error(errorJsxMessage));
|
16
|
+
}
|
17
|
+
},
|
18
|
+
buildEnd(err) {
|
19
|
+
if (err) {
|
20
|
+
const isJsxError = err.message.includes("JSX");
|
21
|
+
if (isJsxError) {
|
22
|
+
this.error(new Error(errorJsxMessage));
|
23
|
+
}
|
24
|
+
}
|
25
|
+
}
|
26
|
+
};
|
27
|
+
}
|
28
|
+
const isLegacyTransform = semver.lt(
|
29
|
+
semver.minVersion(reactVersion),
|
30
|
+
"17.0.0"
|
31
|
+
);
|
32
|
+
return {
|
33
|
+
name: pluginName,
|
34
|
+
enforce: "pre",
|
35
|
+
async transform(code, id) {
|
36
|
+
const isJs = id.endsWith(".js");
|
37
|
+
const isJsx = id.endsWith(".jsx");
|
38
|
+
const isTsx = id.endsWith(".tsx");
|
39
|
+
if (!(isJs || isJsx || isTsx)) {
|
40
|
+
return null;
|
41
|
+
}
|
42
|
+
return await vite.transformWithEsbuild(
|
43
|
+
code,
|
44
|
+
id,
|
45
|
+
{
|
46
|
+
loader: isJs || isJsx ? "jsx" : "tsx",
|
47
|
+
jsx: isLegacyTransform ? "transform" : "automatic",
|
48
|
+
sourcemap: true
|
49
|
+
},
|
50
|
+
this.getCombinedSourcemap()
|
51
|
+
);
|
52
|
+
}
|
53
|
+
};
|
54
|
+
}
|
55
|
+
exports.reactPlugin = reactPlugin;
|
56
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","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":["transformWithEsbuild"],"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,MAAMA,KAAA;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,5 +1,11 @@
|
|
1
1
|
"use strict";
|
2
2
|
const args = require("./args.js");
|
3
3
|
const _ = require("./index.js");
|
4
|
-
_.run(args.args)
|
4
|
+
_.run(args.args).then((res) => {
|
5
|
+
if (res.error) {
|
6
|
+
for (const error of res.errors) {
|
7
|
+
console.error(error);
|
8
|
+
}
|
9
|
+
}
|
10
|
+
});
|
5
11
|
//# sourceMappingURL=run.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"run.js","sources":["../../../../src/run.ts"],"sourcesContent":["import { args } from \"./args.js\";\nimport { run } from \"./index.js\";\n\nrun(args);\n"],"names":["run","args"],"mappings":";;;AAGAA,EAAA,IAAIC,SAAI;"}
|
1
|
+
{"version":3,"file":"run.js","sources":["../../../../src/run.ts"],"sourcesContent":["import { args } from \"./args.js\";\nimport { run } from \"./index.js\";\n\nrun(args).then((res) => {\n if (res.error) {\n for (const error of res.errors) {\n console.error(error);\n }\n }\n});\n"],"names":["run","args"],"mappings":";;;AAGAA,EAAA,IAAIC,SAAI,EAAE,KAAK,CAAC,QAAQ;AACtB,MAAI,IAAI,OAAO;AACF,eAAA,SAAS,IAAI,QAAQ;AAC9B,cAAQ,MAAM,KAAK;AAAA,IACrB;AAAA,EACF;AACF,CAAC;"}
|
@@ -3,16 +3,31 @@ import { errors } from "./errors.mjs";
|
|
3
3
|
async function buildVite({
|
4
4
|
viteConfig
|
5
5
|
}) {
|
6
|
-
|
7
|
-
|
6
|
+
try {
|
7
|
+
const outputs = await build(viteConfig);
|
8
|
+
if (!Array.isArray(outputs)) {
|
9
|
+
return {
|
10
|
+
error: true,
|
11
|
+
errors: [errors.rollupError]
|
12
|
+
};
|
13
|
+
}
|
8
14
|
return {
|
9
|
-
error:
|
10
|
-
|
15
|
+
error: false,
|
16
|
+
output: outputs.flatMap(
|
17
|
+
(x) => x.output.filter((x2) => x2.type === "chunk")
|
18
|
+
)
|
11
19
|
};
|
20
|
+
} catch (e) {
|
21
|
+
if (e instanceof Error) {
|
22
|
+
return {
|
23
|
+
error: true,
|
24
|
+
errors: [e.message]
|
25
|
+
};
|
26
|
+
}
|
12
27
|
}
|
13
28
|
return {
|
14
|
-
error:
|
15
|
-
|
29
|
+
error: true,
|
30
|
+
errors: [errors.rollupError]
|
16
31
|
};
|
17
32
|
}
|
18
33
|
export {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"buildVite.mjs","sources":["../../../../src/buildVite.ts"],"sourcesContent":["import { build, type UserConfig } from \"vite\";\nimport { errors } from \"./errors.js\";\
|
1
|
+
{"version":3,"file":"buildVite.mjs","sources":["../../../../src/buildVite.ts"],"sourcesContent":["import { build, type UserConfig, 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":["x"],"mappings":";;AAkBA,eAAsB,UAAU;AAAA,EAC9B;AACF,GAA2C;AACrC,MAAA;AACI,UAAA,UAAU,MAAM,MAAM,UAAU;AACtC,QAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AACpB,aAAA;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,CAAC,OAAO,WAAW;AAAA,MAAA;AAAA,IAE/B;AAEO,WAAA;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,QAAQ;AAAA,QAAQ,CAAC,MACvB,EAAE,OAAO,OAAO,CAACA,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,CAAC,OAAO,WAAW;AAAA,EAAA;AAE/B;"}
|
@@ -2,6 +2,8 @@ import { join, relative } from "node:path";
|
|
2
2
|
import "node:fs/promises";
|
3
3
|
import "zod";
|
4
4
|
import { defineConfig } from "vite";
|
5
|
+
import { babelPlugin } from "./plugins/babel/index.mjs";
|
6
|
+
import { reactPlugin } from "./plugins/react/index.mjs";
|
5
7
|
function mapToObject(map) {
|
6
8
|
const obj = {};
|
7
9
|
for (const [key, value] of map) {
|
@@ -55,8 +57,10 @@ function createViteConfig({ dirs, packageJson }) {
|
|
55
57
|
const mergedEntries = new Map([...entrypoints, ...bins]);
|
56
58
|
const depsValidator = createExternalDepValidator(packageJson);
|
57
59
|
const viteConfig = defineConfig({
|
60
|
+
plugins: [reactPlugin({ packageJson }), babelPlugin({ packageJson, dirs })],
|
58
61
|
publicDir: false,
|
59
62
|
root: sourceDir,
|
63
|
+
logLevel: "silent",
|
60
64
|
build: {
|
61
65
|
outDir,
|
62
66
|
write: true,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"createViteConfig.mjs","sources":["../../../../src/createViteConfig.ts"],"sourcesContent":["import { type Dirs } from \"./resolveDirs.js\";\nimport { type PackageJson } from \"./packageJson.js\";\nimport { join, relative } from \"node:path\";\nimport { defineConfig } from \"vite\";\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 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":[],"mappings":"
|
1
|
+
{"version":3,"file":"createViteConfig.mjs","sources":["../../../../src/createViteConfig.ts"],"sourcesContent":["import { type Dirs } from \"./resolveDirs.js\";\nimport { type PackageJson } from \"./packageJson.js\";\nimport { join, relative } from \"node:path\";\nimport { defineConfig } from \"vite\";\nimport { babelPlugin } from \"./plugins/babel/index.js\";\nimport { reactPlugin } from \"./plugins/react/index.js\";\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: [reactPlugin({ packageJson }), babelPlugin({ packageJson, dirs })],\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":[],"mappings":"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"}
|
@@ -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
|
-
|
4
|
-
error:
|
5
|
-
errors: string[];
|
3
|
+
type RunResult = {
|
4
|
+
error: false;
|
6
5
|
} | {
|
7
|
-
error:
|
8
|
-
errors
|
9
|
-
}
|
6
|
+
error: true;
|
7
|
+
errors: Array<string>;
|
8
|
+
};
|
9
|
+
export declare function run(args: Args): Promise<RunResult>;
|
10
|
+
export {};
|
@@ -34,7 +34,6 @@ async function run(args) {
|
|
34
34
|
await mkdir(outDir, { recursive: true });
|
35
35
|
const packageJson = await parsePackageJson({ sourceDir, packagePath });
|
36
36
|
if (Array.isArray(packageJson)) {
|
37
|
-
console.log(packageJson);
|
38
37
|
return { error: true, errors: packageJson };
|
39
38
|
}
|
40
39
|
const { viteConfig, entrypoints, bins } = createViteConfig({
|
@@ -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\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
|
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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"}
|
@@ -25,6 +25,7 @@ declare function createPackageJsonSchema(sourceDir: string): z.ZodObject<{
|
|
25
25
|
sideEffects: z.ZodOptional<z.ZodAny>;
|
26
26
|
unpkg: z.ZodOptional<z.ZodAny>;
|
27
27
|
homepage: z.ZodOptional<z.ZodAny>;
|
28
|
+
babel: z.ZodOptional<z.ZodAny>;
|
28
29
|
}, "strip", z.ZodTypeAny, {
|
29
30
|
exports?: Map<string, string>;
|
30
31
|
name?: string;
|
@@ -51,6 +52,7 @@ declare function createPackageJsonSchema(sourceDir: string): z.ZodObject<{
|
|
51
52
|
sideEffects?: any;
|
52
53
|
unpkg?: any;
|
53
54
|
homepage?: any;
|
55
|
+
babel?: any;
|
54
56
|
}, {
|
55
57
|
exports?: string | Record<string, string>;
|
56
58
|
name?: string;
|
@@ -77,6 +79,7 @@ declare function createPackageJsonSchema(sourceDir: string): z.ZodObject<{
|
|
77
79
|
sideEffects?: any;
|
78
80
|
unpkg?: any;
|
79
81
|
homepage?: any;
|
82
|
+
babel?: any;
|
80
83
|
}>;
|
81
84
|
type PackageJsonSchema = ReturnType<typeof createPackageJsonSchema>;
|
82
85
|
export type PackageJson = z.infer<PackageJsonSchema>;
|
@@ -107,7 +107,8 @@ function createPackageJsonSchema(sourceDir) {
|
|
107
107
|
cpu: z.array(z.string(), { message: errors.cpuInvalid }).optional(),
|
108
108
|
sideEffects: z.any().optional(),
|
109
109
|
unpkg: z.any().optional(),
|
110
|
-
homepage: z.any().optional()
|
110
|
+
homepage: z.any().optional(),
|
111
|
+
babel: z.any().optional()
|
111
112
|
});
|
112
113
|
}
|
113
114
|
async function parsePackageJson({
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"packageJson.mjs","sources":["../../../../src/packageJson.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport z from \"zod\";\nimport { errors } from \"./errors.js\";\nimport { join } from \"node:path\";\n\n// <region>\n// For AI completion. Don't remove.\nconst allPackageJsonFields = [\n \"exports\",\n \"name\",\n \"version\",\n \"private\",\n \"description\",\n \"dependencies\",\n \"optionalDependencies\",\n \"bin\",\n \"repository\",\n \"keywords\",\n \"author\",\n \"contributors\",\n \"license\",\n \"devDependencies\",\n \"peerDependencies\",\n \"engines\",\n \"browser\",\n \"funding\",\n \"os\",\n \"cpu\",\n];\n\nconst requiredFields = [\"exports\", \"name\", \"version\", \"private\"];\n\nconst optionalFields = [\n \"description\",\n \"dependencies\",\n \"optionalDependencies\",\n \"bin\",\n \"repository\",\n \"keywords\",\n \"author\",\n \"contributors\",\n \"license\",\n \"devDependencies\",\n \"peerDependencies\",\n \"engines\",\n \"browser\",\n \"funding\",\n \"os\",\n \"cpu\",\n];\n// </region>\n\nasync function fileExists(filePath: string) {\n try {\n const stats = await fs.stat(filePath);\n return stats.isFile();\n } catch (error) {\n return false;\n }\n}\n\nfunction dependencies(errorText: string) {\n return z\n .record(z.string({ message: errorText }), { message: errorText })\n .optional();\n}\n\nfunction createPathValidator(sourceDir: string) {\n return (path: string) => {\n const finalPath = join(sourceDir, path);\n return fileExists(finalPath);\n };\n}\n\nconst PackageJsonNameField: string = \"___NAME___\";\nfunction fillPackageJson(packageJson: PackageJson) {\n if (packageJson.bin) {\n const binName = packageJson.bin.get(PackageJsonNameField);\n if (binName) {\n packageJson.bin.set(packageJson.name, binName);\n packageJson.bin.delete(PackageJsonNameField);\n }\n }\n}\n\nfunction createPackageJsonSchema(sourceDir: string) {\n const pathValidator = createPathValidator(sourceDir);\n\n return z.object({\n exports: z\n .union(\n [\n z.string().transform((path) => new Map([[\".\", path]])),\n z.record(z.string()).transform((obj) => new Map(Object.entries(obj))),\n ],\n {\n errorMap() {\n return { message: errors.exportsRequired };\n },\n },\n )\n .refine(async (obj) => {\n for (const [key, value] of obj.entries()) {\n if (!(await pathValidator(value))) {\n return false;\n }\n }\n return true;\n }, errors.exportsInvalid)\n .optional(),\n name: z\n .string({ message: errors.nameRequired })\n .min(1, errors.nameMinLength)\n .max(214, errors.nameMaxLength)\n .refine(\n (name) => [\"_\", \".\"].every((start) => !name.startsWith(start)),\n errors.nameStartsIllegalChars,\n ),\n version: z.string({ message: errors.versionRequired }),\n private: z\n .boolean({ message: errors.privateIsTrue })\n .refine((value) => value, errors.privateIsTrue),\n description: z.string({ message: errors.descriptionString }).optional(),\n dependencies: dependencies(errors.dependenciesInvalid),\n optionalDependencies: dependencies(errors.optionalDependenciesInvalid),\n bin: z\n .union(\n [\n z\n .string()\n .transform((value) => new Map([[PackageJsonNameField, value]])),\n z\n .record(z.string())\n .transform((record) => new Map(Object.entries(record))),\n ],\n {\n errorMap() {\n return { message: errors.binFiled };\n },\n },\n )\n .refine(\n async (map) => {\n for (const [key, value] of map.entries()) {\n if (!(await pathValidator(value))) {\n return false;\n }\n }\n return true;\n },\n { message: errors.binFiled },\n )\n .optional(),\n repository: z.any().optional(),\n keywords: z\n .array(z.string(), { message: errors.keywordsInvalid })\n .optional(),\n author: z.any().optional(),\n maintainers: z.any().optional(),\n contributors: z\n .array(\n z.union([\n z.string({ message: errors.contributorsInvalid }),\n z.object({}, { message: errors.contributorsInvalid }),\n ]),\n )\n .optional(),\n license: z.any().optional(),\n devDependencies: dependencies(errors.devDependenciesInvalid),\n peerDependencies: dependencies(errors.peerDependenciesInvalid),\n engines: z\n .record(z.string(), { message: errors.enginesInvalid })\n .optional(),\n browser: z\n .union([\n z.string({ message: errors.browserInvalid }),\n z.record(z.string(), { message: errors.browserInvalid }),\n ])\n .optional(),\n bugs: z.any().optional(),\n funding: z\n .union([\n z.string({ message: errors.fundingInvalid }),\n z.object({}, { message: errors.fundingInvalid }),\n ])\n .optional(),\n os: z.array(z.string(), { message: errors.osInvalid }).optional(),\n cpu: z.array(z.string(), { message: errors.cpuInvalid }).optional(),\n sideEffects: z.any().optional(),\n unpkg: z.any().optional(),\n homepage: z.any().optional(),\n });\n}\ntype PackageJsonSchema = ReturnType<typeof createPackageJsonSchema>;\n\nexport type PackageJson = z.infer<PackageJsonSchema>;\ntype Errors = Array<string>;\n\ntype ParsePackageJsonArg = {\n packagePath: string;\n sourceDir: string;\n};\n\nexport async function parsePackageJson({\n sourceDir,\n packagePath,\n}: ParsePackageJsonArg): Promise<PackageJson | Errors> {\n const packageString = await fs.readFile(packagePath, \"utf-8\");\n const rawJson = JSON.parse(packageString);\n\n const packageJsonSchema = createPackageJsonSchema(sourceDir);\n const packageJson = await packageJsonSchema.safeParseAsync(rawJson);\n if (!packageJson.success) {\n return packageJson.error.errors.map((error) => error.message);\n }\n\n fillPackageJson(packageJson.data);\n return packageJson.data;\n}\n"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"packageJson.mjs","sources":["../../../../src/packageJson.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport z from \"zod\";\nimport { errors } from \"./errors.js\";\nimport { join } from \"node:path\";\n\n// <region>\n// For AI completion. Don't remove.\nconst allPackageJsonFields = [\n \"exports\",\n \"name\",\n \"version\",\n \"private\",\n \"description\",\n \"dependencies\",\n \"optionalDependencies\",\n \"bin\",\n \"repository\",\n \"keywords\",\n \"author\",\n \"contributors\",\n \"license\",\n \"devDependencies\",\n \"peerDependencies\",\n \"engines\",\n \"browser\",\n \"funding\",\n \"os\",\n \"cpu\",\n];\n\nconst requiredFields = [\"exports\", \"name\", \"version\", \"private\"];\n\nconst optionalFields = [\n \"description\",\n \"dependencies\",\n \"optionalDependencies\",\n \"bin\",\n \"repository\",\n \"keywords\",\n \"author\",\n \"contributors\",\n \"license\",\n \"devDependencies\",\n \"peerDependencies\",\n \"engines\",\n \"browser\",\n \"funding\",\n \"os\",\n \"cpu\",\n];\n// </region>\n\nasync function fileExists(filePath: string) {\n try {\n const stats = await fs.stat(filePath);\n return stats.isFile();\n } catch (error) {\n return false;\n }\n}\n\nfunction dependencies(errorText: string) {\n return z\n .record(z.string({ message: errorText }), { message: errorText })\n .optional();\n}\n\nfunction createPathValidator(sourceDir: string) {\n return (path: string) => {\n const finalPath = join(sourceDir, path);\n return fileExists(finalPath);\n };\n}\n\nconst PackageJsonNameField: string = \"___NAME___\";\nfunction fillPackageJson(packageJson: PackageJson) {\n if (packageJson.bin) {\n const binName = packageJson.bin.get(PackageJsonNameField);\n if (binName) {\n packageJson.bin.set(packageJson.name, binName);\n packageJson.bin.delete(PackageJsonNameField);\n }\n }\n}\n\nfunction createPackageJsonSchema(sourceDir: string) {\n const pathValidator = createPathValidator(sourceDir);\n\n return z.object({\n exports: z\n .union(\n [\n z.string().transform((path) => new Map([[\".\", path]])),\n z.record(z.string()).transform((obj) => new Map(Object.entries(obj))),\n ],\n {\n errorMap() {\n return { message: errors.exportsRequired };\n },\n },\n )\n .refine(async (obj) => {\n for (const [key, value] of obj.entries()) {\n if (!(await pathValidator(value))) {\n return false;\n }\n }\n return true;\n }, errors.exportsInvalid)\n .optional(),\n name: z\n .string({ message: errors.nameRequired })\n .min(1, errors.nameMinLength)\n .max(214, errors.nameMaxLength)\n .refine(\n (name) => [\"_\", \".\"].every((start) => !name.startsWith(start)),\n errors.nameStartsIllegalChars,\n ),\n version: z.string({ message: errors.versionRequired }),\n private: z\n .boolean({ message: errors.privateIsTrue })\n .refine((value) => value, errors.privateIsTrue),\n description: z.string({ message: errors.descriptionString }).optional(),\n dependencies: dependencies(errors.dependenciesInvalid),\n optionalDependencies: dependencies(errors.optionalDependenciesInvalid),\n bin: z\n .union(\n [\n z\n .string()\n .transform((value) => new Map([[PackageJsonNameField, value]])),\n z\n .record(z.string())\n .transform((record) => new Map(Object.entries(record))),\n ],\n {\n errorMap() {\n return { message: errors.binFiled };\n },\n },\n )\n .refine(\n async (map) => {\n for (const [key, value] of map.entries()) {\n if (!(await pathValidator(value))) {\n return false;\n }\n }\n return true;\n },\n { message: errors.binFiled },\n )\n .optional(),\n repository: z.any().optional(),\n keywords: z\n .array(z.string(), { message: errors.keywordsInvalid })\n .optional(),\n author: z.any().optional(),\n maintainers: z.any().optional(),\n contributors: z\n .array(\n z.union([\n z.string({ message: errors.contributorsInvalid }),\n z.object({}, { message: errors.contributorsInvalid }),\n ]),\n )\n .optional(),\n license: z.any().optional(),\n devDependencies: dependencies(errors.devDependenciesInvalid),\n peerDependencies: dependencies(errors.peerDependenciesInvalid),\n engines: z\n .record(z.string(), { message: errors.enginesInvalid })\n .optional(),\n browser: z\n .union([\n z.string({ message: errors.browserInvalid }),\n z.record(z.string(), { message: errors.browserInvalid }),\n ])\n .optional(),\n bugs: z.any().optional(),\n funding: z\n .union([\n z.string({ message: errors.fundingInvalid }),\n z.object({}, { message: errors.fundingInvalid }),\n ])\n .optional(),\n os: z.array(z.string(), { message: errors.osInvalid }).optional(),\n cpu: z.array(z.string(), { message: errors.cpuInvalid }).optional(),\n sideEffects: z.any().optional(),\n unpkg: z.any().optional(),\n homepage: z.any().optional(),\n babel: z.any().optional(),\n });\n}\ntype PackageJsonSchema = ReturnType<typeof createPackageJsonSchema>;\n\nexport type PackageJson = z.infer<PackageJsonSchema>;\ntype Errors = Array<string>;\n\ntype ParsePackageJsonArg = {\n packagePath: string;\n sourceDir: string;\n};\n\nexport async function parsePackageJson({\n sourceDir,\n packagePath,\n}: ParsePackageJsonArg): Promise<PackageJson | Errors> {\n const packageString = await fs.readFile(packagePath, \"utf-8\");\n const rawJson = JSON.parse(packageString);\n\n const packageJsonSchema = createPackageJsonSchema(sourceDir);\n const packageJson = await packageJsonSchema.safeParseAsync(rawJson);\n if (!packageJson.success) {\n return packageJson.error.errors.map((error) => error.message);\n }\n\n fillPackageJson(packageJson.data);\n return packageJson.data;\n}\n"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
import * as path from "node:path";
|
2
|
+
import * as fs from "node:fs/promises";
|
3
|
+
import "zod";
|
4
|
+
const configFiles = [
|
5
|
+
".babelrc",
|
6
|
+
".babelrc.json",
|
7
|
+
".babelrc.js",
|
8
|
+
".babelrc.cjs",
|
9
|
+
".babelrc.mjs",
|
10
|
+
"babel.config.json",
|
11
|
+
"babel.config.js",
|
12
|
+
"babel.config.cjs",
|
13
|
+
"babel.config.mjs",
|
14
|
+
"package.json"
|
15
|
+
];
|
16
|
+
async function findBabelConfig(dir, packageJson) {
|
17
|
+
try {
|
18
|
+
for (const file of configFiles) {
|
19
|
+
const configPath = path.join(dir, file);
|
20
|
+
try {
|
21
|
+
const stat = await fs.stat(configPath);
|
22
|
+
if (stat.isFile()) {
|
23
|
+
if (file === "package.json") {
|
24
|
+
if (packageJson.babel) {
|
25
|
+
return true;
|
26
|
+
}
|
27
|
+
} else {
|
28
|
+
return true;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
} catch {
|
32
|
+
}
|
33
|
+
}
|
34
|
+
return false;
|
35
|
+
} catch {
|
36
|
+
return false;
|
37
|
+
}
|
38
|
+
}
|
39
|
+
export {
|
40
|
+
findBabelConfig
|
41
|
+
};
|
42
|
+
//# sourceMappingURL=findBabelConfig.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"findBabelConfig.mjs","sources":["../../../../../../src/plugins/babel/findBabelConfig.ts"],"sourcesContent":["import * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\nimport { type PackageJson } from \"../../packageJson.js\";\n\nconst configFiles = [\n \".babelrc\",\n \".babelrc.json\",\n \".babelrc.js\",\n \".babelrc.cjs\",\n \".babelrc.mjs\",\n \"babel.config.json\",\n \"babel.config.js\",\n \"babel.config.cjs\",\n \"babel.config.mjs\",\n \"package.json\",\n];\n\n// We need to check the existance only for better error reporting\n// It helps if a user made the config but forgot to install babel/core\n\nexport async function findBabelConfig(\n dir: string,\n packageJson: PackageJson,\n): Promise<boolean> {\n try {\n for (const file of configFiles) {\n const configPath = path.join(dir, file);\n try {\n const stat = await fs.stat(configPath);\n if (stat.isFile()) {\n if (file === \"package.json\") {\n if (packageJson.babel) {\n return true;\n }\n } else {\n return true;\n }\n }\n } catch {}\n }\n return false;\n } catch {\n return false;\n }\n}\n"],"names":[],"mappings":";;;AAIA,MAAM,cAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKsB,eAAA,gBACpB,KACA,aACkB;AACd,MAAA;AACF,eAAW,QAAQ,aAAa;AAC9B,YAAM,aAAa,KAAK,KAAK,KAAK,IAAI;AAClC,UAAA;AACF,cAAM,OAAO,MAAM,GAAG,KAAK,UAAU;AACjC,YAAA,KAAK,UAAU;AACjB,cAAI,SAAS,gBAAgB;AAC3B,gBAAI,YAAY,OAAO;AACd,qBAAA;AAAA,YACT;AAAA,UAAA,OACK;AACE,mBAAA;AAAA,UACT;AAAA,QACF;AAAA,MAAA,QACM;AAAA,MAAC;AAAA,IACX;AACO,WAAA;AAAA,EAAA,QACD;AACC,WAAA;AAAA,EACT;AACF;"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { type Plugin } from "vite";
|
2
|
+
import { type PackageJson } from "../../packageJson.js";
|
3
|
+
import { type Dirs } from "../../resolveDirs.js";
|
4
|
+
type BabelPluginOptions = {
|
5
|
+
packageJson: PackageJson;
|
6
|
+
dirs: Dirs;
|
7
|
+
};
|
8
|
+
export declare function babelPlugin({ packageJson, dirs }: BabelPluginOptions): Plugin;
|
9
|
+
export {};
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import "vite";
|
2
|
+
import * as path from "node:path";
|
3
|
+
import { findBabelConfig } from "./findBabelConfig.mjs";
|
4
|
+
import "node:fs/promises";
|
5
|
+
import "zod";
|
6
|
+
function babelPlugin({ packageJson, dirs }) {
|
7
|
+
let babelCore;
|
8
|
+
let hasBabelConfig = false;
|
9
|
+
return {
|
10
|
+
name: "smartbundle:babel",
|
11
|
+
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
|
+
hasBabelConfig = await findBabelConfig(dirs.sourceDir, packageJson);
|
20
|
+
if (babelCore && !hasBabelConfig) {
|
21
|
+
this.warn(
|
22
|
+
"We have found a @babel/core package, but config was not found. It could be a bug"
|
23
|
+
);
|
24
|
+
} else if (!babelCore && hasBabelConfig) {
|
25
|
+
this.error(
|
26
|
+
new Error(
|
27
|
+
"We have found a babel config. Please install @babel/core to devDeps or remove the config file"
|
28
|
+
)
|
29
|
+
);
|
30
|
+
}
|
31
|
+
},
|
32
|
+
async transform(code, id) {
|
33
|
+
if (!babelCore || !hasBabelConfig) {
|
34
|
+
return null;
|
35
|
+
}
|
36
|
+
const extname = path.extname(id);
|
37
|
+
if (![".js", ".ts"].includes(extname)) {
|
38
|
+
return null;
|
39
|
+
}
|
40
|
+
const map = this.getCombinedSourcemap();
|
41
|
+
const result = await babelCore.transformAsync(code, {
|
42
|
+
filename: id,
|
43
|
+
sourceMaps: true,
|
44
|
+
inputSourceMap: map
|
45
|
+
});
|
46
|
+
if (!(result == null ? void 0 : result.code)) {
|
47
|
+
throw new Error("Babel transformation failed");
|
48
|
+
}
|
49
|
+
return {
|
50
|
+
code: result.code,
|
51
|
+
map: result.map
|
52
|
+
};
|
53
|
+
}
|
54
|
+
};
|
55
|
+
}
|
56
|
+
export {
|
57
|
+
babelPlugin
|
58
|
+
};
|
59
|
+
//# sourceMappingURL=index.mjs.map
|
@@ -0,0 +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;"}
|
@@ -0,0 +1,56 @@
|
|
1
|
+
import { transformWithEsbuild } from "vite";
|
2
|
+
import semver from "semver";
|
3
|
+
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;
|
6
|
+
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) {
|
9
|
+
return {
|
10
|
+
name: pluginName,
|
11
|
+
transform(code, id) {
|
12
|
+
if (id.endsWith(".jsx") || id.endsWith(".tsx")) {
|
13
|
+
this.error(new Error(errorJsxMessage));
|
14
|
+
}
|
15
|
+
},
|
16
|
+
buildEnd(err) {
|
17
|
+
if (err) {
|
18
|
+
const isJsxError = err.message.includes("JSX");
|
19
|
+
if (isJsxError) {
|
20
|
+
this.error(new Error(errorJsxMessage));
|
21
|
+
}
|
22
|
+
}
|
23
|
+
}
|
24
|
+
};
|
25
|
+
}
|
26
|
+
const isLegacyTransform = semver.lt(
|
27
|
+
semver.minVersion(reactVersion),
|
28
|
+
"17.0.0"
|
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 transformWithEsbuild(
|
41
|
+
code,
|
42
|
+
id,
|
43
|
+
{
|
44
|
+
loader: isJs || isJsx ? "jsx" : "tsx",
|
45
|
+
jsx: isLegacyTransform ? "transform" : "automatic",
|
46
|
+
sourcemap: true
|
47
|
+
},
|
48
|
+
this.getCombinedSourcemap()
|
49
|
+
);
|
50
|
+
}
|
51
|
+
};
|
52
|
+
}
|
53
|
+
export {
|
54
|
+
reactPlugin
|
55
|
+
};
|
56
|
+
//# sourceMappingURL=index.mjs.map
|
@@ -0,0 +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 +1 @@
|
|
1
|
-
{"version":3,"file":"run.mjs","sources":["../../../../src/run.ts"],"sourcesContent":["import { args } from \"./args.js\";\nimport { run } from \"./index.js\";\n\nrun(args);\n"],"names":[],"mappings":";;AAGA,IAAI,IAAI;"}
|
1
|
+
{"version":3,"file":"run.mjs","sources":["../../../../src/run.ts"],"sourcesContent":["import { args } from \"./args.js\";\nimport { run } from \"./index.js\";\n\nrun(args).then((res) => {\n if (res.error) {\n for (const error of res.errors) {\n console.error(error);\n }\n }\n});\n"],"names":[],"mappings":";;AAGA,IAAI,IAAI,EAAE,KAAK,CAAC,QAAQ;AACtB,MAAI,IAAI,OAAO;AACF,eAAA,SAAS,IAAI,QAAQ;AAC9B,cAAQ,MAAM,KAAK;AAAA,IACrB;AAAA,EACF;AACF,CAAC;"}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "smartbundle",
|
3
3
|
"type": "commonjs",
|
4
|
-
"version": "0.
|
4
|
+
"version": "0.11.0-alpha.1",
|
5
5
|
"bin": {
|
6
6
|
"smartbundle": "__bin__/smartbundle.js"
|
7
7
|
},
|
@@ -25,12 +25,14 @@
|
|
25
25
|
"./package.json": "./package.json"
|
26
26
|
},
|
27
27
|
"dependencies": {
|
28
|
-
"
|
28
|
+
"semver": "^7.6.3",
|
29
|
+
"vite": "^5.4.11",
|
29
30
|
"yargs": "^17.7.2",
|
30
31
|
"zod": "^3.23.8"
|
31
32
|
},
|
32
33
|
"optionalDependencies": {
|
33
|
-
"
|
34
|
+
"@babel/core": "^7.26.0",
|
35
|
+
"typescript": "^5.6.3"
|
34
36
|
},
|
35
37
|
"repository": {
|
36
38
|
"type": "git",
|
@@ -55,12 +57,14 @@
|
|
55
57
|
},
|
56
58
|
"homepage": "https://github.com/xavescor/smartbundle",
|
57
59
|
"devDependencies": {
|
58
|
-
"@types/
|
60
|
+
"@types/babel__core": "^7.20.5",
|
61
|
+
"@types/node": "^20.17.6",
|
62
|
+
"@types/semver": "^7.5.8",
|
59
63
|
"@types/yargs": "^17.0.33",
|
60
64
|
"prettier": "^3.3.3",
|
61
65
|
"typescript": "^5.6.3",
|
62
|
-
"vitest": "^2.1.
|
66
|
+
"vitest": "^2.1.5",
|
63
67
|
"vitest-directory-snapshot": "^0.2.2",
|
64
|
-
"zx": "^8.
|
68
|
+
"zx": "^8.2.2"
|
65
69
|
}
|
66
70
|
}
|