@visulima/packem 2.0.0-alpha.6 → 2.0.0-alpha.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/CHANGELOG.md +732 -2
  2. package/LICENSE.md +552 -2582
  3. package/README.md +58 -12
  4. package/dist/builder/typedoc/generate-reference-documentation.d.ts +4 -0
  5. package/dist/builder/typedoc/index.d.ts +3 -26
  6. package/dist/builder/typedoc/index.js +3 -3
  7. package/dist/cli/commands/add.d.ts +4 -0
  8. package/dist/cli/commands/build.d.ts +21 -0
  9. package/dist/cli/commands/init.d.ts +3 -0
  10. package/dist/cli/commands/migrate.d.ts +21 -0
  11. package/dist/cli/commands/utils/css-loader-dependencies.d.ts +2 -0
  12. package/dist/cli/index.d.ts +1 -0
  13. package/dist/cli/index.js +50 -37
  14. package/dist/config/index.d.ts +48 -28
  15. package/dist/config/preset/auto.d.ts +3 -0
  16. package/dist/config/preset/preact.d.ts +18 -0
  17. package/dist/config/preset/preact.js +2 -0
  18. package/dist/config/preset/react.d.ts +59 -0
  19. package/dist/config/preset/react.js +1 -0
  20. package/dist/config/preset/solid.d.ts +101 -0
  21. package/dist/config/preset/solid.js +1 -0
  22. package/dist/config/preset/svelte.d.ts +71 -0
  23. package/dist/config/preset/svelte.js +1 -0
  24. package/dist/config/preset/utils/infer-entries.d.ts +12 -0
  25. package/dist/config/preset/utils/overwrite-with-publish-config.d.ts +4 -0
  26. package/dist/config/preset/vue.d.ts +53 -0
  27. package/dist/config/preset/vue.js +1 -0
  28. package/dist/config/utils/find-packem-file.d.ts +2 -0
  29. package/dist/config/utils/load-env-file.d.ts +15 -0
  30. package/dist/config/utils/load-package-json.d.ts +6 -0
  31. package/dist/config/utils/load-packem-config.d.ts +7 -0
  32. package/dist/config/utils/load-preset.d.ts +4 -0
  33. package/dist/config/utils/load-tsconfig.d.ts +5 -0
  34. package/dist/config/utils/prepare-entries.d.ts +4 -0
  35. package/dist/index.d.ts +45 -32
  36. package/dist/index.js +1 -1
  37. package/dist/jit/create-stub.d.ts +4 -0
  38. package/dist/lib/concurrency.d.ts +6 -0
  39. package/dist/packem/build.d.ts +21 -0
  40. package/dist/packem/index.d.ts +24 -0
  41. package/dist/packem/node10-compatibility.d.ts +7 -0
  42. package/dist/packem/utils/brotli-size.d.ts +2 -0
  43. package/dist/packem/utils/group-by-keys.d.ts +12 -0
  44. package/dist/packem/utils/gzip-size.d.ts +2 -0
  45. package/dist/packem_shared/create-or-update-key-storage-U4wgANkm.js +1 -0
  46. package/dist/packem_shared/index-Bm8Oe89l.js +83 -0
  47. package/dist/rollup/build-types.d.ts +5 -0
  48. package/dist/rollup/build.d.ts +5 -0
  49. package/dist/rollup/get-rollup-options.d.ts +5 -0
  50. package/dist/rollup/plugins/css/loaders/less.d.ts +1 -1
  51. package/dist/rollup/plugins/css/loaders/less.js +1 -1
  52. package/dist/rollup/plugins/css/loaders/lightningcss.d.ts +1 -1
  53. package/dist/rollup/plugins/css/loaders/lightningcss.js +1 -1
  54. package/dist/rollup/plugins/css/loaders/postcss.d.ts +1 -1
  55. package/dist/rollup/plugins/css/loaders/postcss.js +1 -1
  56. package/dist/rollup/plugins/css/loaders/sass.d.ts +1 -1
  57. package/dist/rollup/plugins/css/loaders/sass.js +1 -1
  58. package/dist/rollup/plugins/css/loaders/sourcemap.d.ts +1 -8
  59. package/dist/rollup/plugins/css/loaders/sourcemap.js +1 -1
  60. package/dist/rollup/plugins/css/loaders/stylus.d.ts +1 -1
  61. package/dist/rollup/plugins/css/loaders/stylus.js +1 -1
  62. package/dist/rollup/plugins/css/loaders/tailwindcss.d.ts +1 -0
  63. package/dist/rollup/plugins/css/loaders/tailwindcss.js +1 -0
  64. package/dist/rollup/plugins/css/minifiers/cssnano.d.ts +1 -1
  65. package/dist/rollup/plugins/css/minifiers/cssnano.js +1 -1
  66. package/dist/rollup/plugins/css/minifiers/lightningcss.d.ts +1 -1
  67. package/dist/rollup/plugins/css/minifiers/lightningcss.js +1 -1
  68. package/dist/rollup/plugins/esbuild/index.d.ts +2 -24
  69. package/dist/rollup/plugins/esbuild/index.js +1 -1
  70. package/dist/rollup/plugins/externalize-dependencies.d.ts +28 -0
  71. package/dist/rollup/plugins/oxc/isolated-declarations-oxc-transformer.d.ts +1 -25
  72. package/dist/rollup/plugins/oxc/isolated-declarations-oxc-transformer.js +1 -1
  73. package/dist/rollup/plugins/oxc/oxc-transformer.d.ts +2 -20
  74. package/dist/rollup/plugins/oxc/oxc-transformer.js +1 -1
  75. package/dist/rollup/plugins/resolve-externals-plugin.d.ts +62 -0
  76. package/dist/rollup/plugins/resolve-implicit-externals.d.ts +21 -0
  77. package/dist/rollup/plugins/sucrase/index.d.ts +2 -19
  78. package/dist/rollup/plugins/sucrase/index.js +1 -1
  79. package/dist/rollup/plugins/swc/isolated-declarations-swc-transformer.d.ts +1 -20
  80. package/dist/rollup/plugins/swc/isolated-declarations-swc-transformer.js +1 -1
  81. package/dist/rollup/plugins/swc/swc-plugin.d.ts +2 -26
  82. package/dist/rollup/plugins/swc/swc-plugin.js +1 -1
  83. package/dist/rollup/plugins/typescript/isolated-declarations-typescript-transformer.d.ts +1 -24
  84. package/dist/rollup/plugins/typescript/isolated-declarations-typescript-transformer.js +1 -1
  85. package/dist/rollup/utils/resolve-aliases.d.ts +4 -0
  86. package/dist/rollup/watch.d.ts +5 -0
  87. package/dist/types.d.ts +335 -0
  88. package/dist/utils/clean-distribution-directories.d.ts +4 -0
  89. package/dist/utils/create-defu-with-hooks-merger.d.ts +14 -0
  90. package/dist/utils/create-or-update-key-storage.d.ts +3 -0
  91. package/dist/utils/extract-export-filenames.d.ts +16 -0
  92. package/dist/utils/find-alternatives.d.ts +2 -0
  93. package/dist/utils/get-package-side-effect.d.ts +3 -0
  94. package/dist/utils/import-specifier.d.ts +20 -0
  95. package/dist/utils/infer-export-type.d.ts +3 -0
  96. package/dist/utils/kill-process.d.ts +14 -0
  97. package/dist/utils/log-build-errors.d.ts +4 -0
  98. package/dist/utils/remove-old-cache-folders.d.ts +3 -0
  99. package/dist/utils/warn-legacy-cjs.d.ts +8 -0
  100. package/dist/validator/attw.d.ts +7 -0
  101. package/dist/validator/package-json/index.d.ts +4 -0
  102. package/dist/validator/package-json/validate-dependencies.d.ts +4 -0
  103. package/dist/validator/package-json/validate-engines.d.ts +4 -0
  104. package/dist/validator/package-json/validate-package-entries.d.ts +4 -0
  105. package/dist/validator/package-json/validate-package-fields.d.ts +4 -0
  106. package/dist/validator/validate-alias-entries.d.ts +3 -0
  107. package/dist/validator/validate-bundle-size.d.ts +4 -0
  108. package/files.d.ts +37 -0
  109. package/package.json +90 -36
  110. package/dist/packem_shared/browserslistToEsbuild-C0IWmbNe-C6xPL1oW.js +0 -1
  111. package/dist/packem_shared/create-or-update-key-storage-GwAIWW7R.js +0 -3
  112. package/dist/packem_shared/default-B6X7-Lx3.js +0 -1
  113. package/dist/packem_shared/default-B_dUKZ_J.js +0 -1
  114. package/dist/packem_shared/default-C3sdXf4G.js +0 -1
  115. package/dist/packem_shared/default-DR5Fia_R.js +0 -1
  116. package/dist/packem_shared/default-DqRcOUe1.js +0 -1
  117. package/dist/packem_shared/esbuildPlugin-BAwyhG6L-yty60jMl.js +0 -3
  118. package/dist/packem_shared/index-BHVpfOuE.js +0 -138
  119. package/dist/packem_shared/index-CUp9WuCG.js +0 -1
  120. package/dist/packem_shared/index-zikl8Yu3.d.ts +0 -5229
  121. package/dist/packem_shared/isolatedDeclarationsOxcTransformer-WbfE6cGu-NeZOx2Y7.js +0 -1
  122. package/dist/packem_shared/isolatedDeclarationsSwcTransformer-Ch2AgtWC-B-0lOgFf.js +0 -1
  123. package/dist/packem_shared/isolatedDeclarationsTypescriptTransformer-DkuEkofo-Cwe3ODMG.js +0 -3
  124. package/dist/packem_shared/oxcResolvePlugin-BJpi-eSG-BsYx9cDO.js +0 -1
  125. package/dist/packem_shared/oxcTransformPlugin-DfVQouIB-Cpfv95eA.js +0 -4
  126. package/dist/packem_shared/resolveTypescriptMjsCtsPlugin-DcZrZTmM-BEkYWTsH.js +0 -6
  127. package/dist/packem_shared/swcPlugin-Boip4lWG-CwJ-HVJc.js +0 -1
  128. package/dist/packem_shared/types-Dn9KmF6u.d.ts +0 -163
package/README.md CHANGED
@@ -53,7 +53,7 @@ It uses the `exports` configuration in `package.json` and recognizes entry file
53
53
  - ✅ Supports react server and client components
54
54
  - ✅ Supports shared modules
55
55
  - ✅ Supports dynamic import
56
- - ✅ Supports `tsconfig.json` paths and `package.json` imports resolution
56
+ - ✅ Supports `tsconfig.json` paths and `package.json`, `package.yml`, `package.yaml` and `package.json5` imports resolution
57
57
  - ✅ ESM ⇄ CJS interoperability
58
58
  - ✅ Supports isolated declaration types (experimental) (Typescript version 5.5 or higher)
59
59
  - ✅ Supports wasm [WebAssembly modules](http://webassembly.org)
@@ -163,13 +163,9 @@ Enable the automatic `node 10` typesVersions generation in packem.config.js:
163
163
  ```js
164
164
  export default defineConfig({
165
165
  // ...
166
- rollup: {
167
- // ...
168
- node10Compatibility: {
169
- typeScriptVersion: ">=5.0", // Chose the version of TypeScript you want to support
170
- writeToPackageJson: true,
171
- },
172
- // ...
166
+ node10Compatibility: {
167
+ typeScriptVersion: ">=5.0", // Chose the version of TypeScript you want to support
168
+ writeToPackageJson: true,
173
169
  },
174
170
  transformer,
175
171
  });
@@ -454,13 +450,13 @@ Native Node.js import mapping supports conditional imports (eg. resolving differ
454
450
  {
455
451
  // ...
456
452
 
457
- "imports": {
453
+ imports: {
458
454
  // Mapping '~utils' to './src/utils.js'
459
455
  "~utils": "./src/utils.js",
460
456
 
461
457
  // Native Node.js import mapping (can't reference ./src)
462
- "#internal-package": "./vendors/package/index.js"
463
- }
458
+ "#internal-package": "./vendors/package/index.js",
459
+ },
464
460
  }
465
461
  ```
466
462
 
@@ -499,6 +495,48 @@ This will replace all instances of `process.env.NODE_ENV` with `'production'` an
499
495
  packem build --env.NODE_ENV=production
500
496
  ```
501
497
 
498
+ #### Loading from .env files
499
+
500
+ You can also load environment variables from `.env` files using the `--env-file` option:
501
+
502
+ ```sh
503
+ # Load from .env file with default prefix (PACKEM_)
504
+ packem build --env-file .env
505
+
506
+ # Load from custom .env file with custom prefix
507
+ packem build --env-file .env.production --env-prefix BUILD_
508
+
509
+ # Combine .env file with CLI variables (CLI vars override .env vars)
510
+ packem build --env-file .env --env.API_URL=https://api.example.com
511
+ ```
512
+
513
+ **Configuration file:**
514
+
515
+ You can also configure this in your `packem.config.ts`:
516
+
517
+ ```typescript
518
+ export default defineConfig({
519
+ envFile: ".env",
520
+ envPrefix: "PACKEM_", // default: "PACKEM_"
521
+ // ...
522
+ });
523
+ ```
524
+
525
+ **How it works:**
526
+
527
+ - Variables from `.env` files are loaded first
528
+ - CLI `--env.*` variables override `.env` file variables
529
+ - Only variables matching the prefix (default: `PACKEM_`) are loaded for security
530
+ - Variables are replaced at compile-time in your code
531
+
532
+ **Example .env file:**
533
+
534
+ ```env
535
+ PACKEM_API_URL=https://api.example.com
536
+ PACKEM_VERSION=1.0.0
537
+ PACKEM_DEBUG=true
538
+ ```
539
+
502
540
  ## Programmatic Usage
503
541
 
504
542
  You can use Packem programmatically in your Node.js applications without the CLI:
@@ -895,7 +933,15 @@ Will look for `_custom` first (_with the appropriate extension(s)_), and then fo
895
933
  styles({
896
934
  mode: "inject", // Unnecessary, set by default
897
935
  // ...or with custom options for injector
898
- mode: ["inject", { attributes: { id: "global" }, container: "body", prepend: true, singleTag: true }],
936
+ mode: [
937
+ "inject",
938
+ {
939
+ attributes: { id: "global" },
940
+ container: "body",
941
+ prepend: true,
942
+ singleTag: true,
943
+ },
944
+ ],
899
945
  // ...or with custom injector
900
946
  mode: ["inject", (varname, id) => `console.log(${varname},${JSON.stringify(id)})`],
901
947
  });
@@ -0,0 +1,4 @@
1
+ import type { Pail } from "@visulima/pail";
2
+ import type { BuildEntry, TypeDocumentOptions } from "../../types.d.ts";
3
+ declare const generateReferenceDocumentation: (options: TypeDocumentOptions, entries: BuildEntry[], outputDirectory: string, logger: Pail) => Promise<void>;
4
+ export default generateReferenceDocumentation;
@@ -1,27 +1,4 @@
1
- import { B as BuildContext } from '../../packem_shared/index-zikl8Yu3.js';
2
- import { I as InternalBuildOptions } from '../../packem_shared/types-Dn9KmF6u.js';
3
- import '@rollup/plugin-alias';
4
- import '@rollup/plugin-commonjs';
5
- import '@rollup/plugin-json';
6
- import '@rollup/plugin-node-resolve';
7
- import '@rollup/plugin-replace';
8
- import '@rollup/plugin-wasm';
9
- import '@rollup/pluginutils';
10
- import 'rollup';
11
- import 'rollup-plugin-dts';
12
- import 'rollup-plugin-polyfill-node';
13
- import 'rollup-plugin-pure';
14
- import 'rollup-plugin-visualizer';
15
- import 'esbuild';
16
- import '@visulima/package';
17
- import '@visulima/colorize';
18
- import 'oxc-resolver';
19
- import 'oxc-transform';
20
- import 'sucrase';
21
- import '@visulima/rollup-css-plugin';
22
- import 'jiti';
23
- import 'typedoc';
24
-
1
+ import type { BuildContext } from "@visulima/packem-share/types";
2
+ import type { InternalBuildOptions } from "../../types.d.ts";
25
3
  declare const builder: (context: BuildContext<InternalBuildOptions>, cachePath: string | undefined, _: never, logged: boolean) => Promise<void>;
26
-
27
- export { builder as default };
4
+ export default builder;
@@ -1,3 +1,3 @@
1
- var j=Object.defineProperty;var g=(e,o)=>j(e,"name",{value:o,configurable:!0});import{cyan as v}from"@visulima/colorize";import{join as h}from"@visulima/path";import{p as $,d as P}from"../../packem_shared/create-or-update-key-storage-GwAIWW7R.js";import{readdirSync as A}from"node:fs";import{readFileSync as w,writeFileSync as F}from"@visulima/fs";import{Application as b}from"typedoc";var T=Object.defineProperty,_=g((e,o)=>T(e,"name",{value:o,configurable:!0}),"w");const C=_(async(e,o,a,s)=>{if(o.length===0)return;const{format:t,jsonFileName:n,marker:i,output:x,plugin:k,readmePath:p,...y}=e;if(t==="inline"&&p===void 0)throw new Error("The `readmePath` option is required when using the `inline` format.");if(t!=="inline"&&typeof p=="string"&&s.warn({message:"The `readmePath` option is only used when the `inline` format is used.",prefix:"typedoc"}),t==="json"){if(n===void 0)throw new Error("The `jsonFileName` option is required when using the `json` format.");if(!n.endsWith(".json"))throw new Error("The `jsonFileName` option must end with `.json`.")}t!=="json"&&typeof n=="string"&&s.warn({message:"The `jsonFileName` option is only used when the `json` format is used.",prefix:"typedoc"});const E=o.map(m=>m.input),u=k??[];u.push("typedoc-plugin-rename-defaults"),(t==="inline"||t==="markdown")&&u.push("typedoc-plugin-markdown");const l=await b.bootstrapWithPlugins({...y,compilerOptions:{allowJs:!0,declaration:!1,declarationMap:!1,esModuleInterop:!0,module:99,moduleResolution:100,noEmit:!0,noImplicitAny:!1,skipLibCheck:!0,sourceMap:!1,target:99,...y.compilerOptions},entryPoints:E,hideGenerator:!0,out:a,plugin:u,...t==="inline"?{hideBreadcrumbs:!0,hidePageHeader:!0,navigation:!1,outputFileStrategy:"modules",useCodeBlocks:!0}:{}},[]),d=await l.convert();if(d){if(t==="json")await l.generateJson(d,n);else if(t==="html")await l.generateDocs(d,a);else if(await l.generateOutputs(d),t==="inline"){if(i===void 0)throw new Error("The `marker` option is required when using the `inline` format.");const m=A(a,{withFileTypes:!0}).filter(r=>r.isFile());let f="";for(const r of m)r.name==="README.md"&&o.length>1||(f+=w(h(a,r.name)).replaceAll(`<!-- ${i}`,`<!-- _REPLACE_${i}`).replaceAll("<!-- ${marker}",`<!-- _REPLACE_\\${i}`));if(f!==""){const r=w(p),c=$(r,i,`
2
- ${f}`);if(!c){s.error({message:`Could not find the typedoc marker: <!-- ${i} --><!-- /${i} --> in ${p}`,prefix:"typedoc"});return}if(r===c)return;c&&F(p,c.replaceAll(`<!-- _REPLACE_${i}`,`<!-- ${i}`).replaceAll(`<!-- _REPLACE_\\${i}`,"<!-- ${marker}"),{overwrite:!0})}}}},"generateReferenceDocumentation");var R=Object.defineProperty,D=g((e,o)=>R(e,"name",{value:o,configurable:!0}),"r");const B=D(async(e,o,a,s)=>{if(e.options.typedoc&&e.options.typedoc.format!==void 0){let t="unknown";e.pkg.dependencies?.typedoc?t=e.pkg.dependencies.typedoc:e.pkg.devDependencies?.typedoc&&(t=e.pkg.devDependencies.typedoc),o&&P("typedoc",o,e.logger,!0),s&&e.logger.raw(`
3
- `),e.logger.info({message:`Using ${v("typedoc")} ${t} to generate reference documentation`,prefix:"typedoc"}),await e.hooks.callHook("typedoc:before",e);let n=e.options.rootDir;e.options.typedoc.output?n=e.options.typedoc.output:e.options.typedoc.format==="inline"&&o?n=h(o,"typedoc"):e.options.typedoc.format!=="json"&&(n=h(n,"api-docs")),await C(e.options.typedoc,e.options.entries,n,e.logger),await e.hooks.callHook("typedoc:done",e)}},"builder");export{B as default};
1
+ var j=Object.defineProperty;var h=(e,o)=>j(e,"name",{value:o,configurable:!0});import{cyan as v}from"@visulima/colorize";import{join as g}from"@visulima/path";import{d as $}from"../../packem_shared/create-or-update-key-storage-U4wgANkm.js";import{readdirSync as P}from"node:fs";import{readFileSync as w,writeFileSync as A}from"@visulima/fs";import{replaceContentWithinMarker as F}from"@visulima/packem-share";import{Application as b}from"typedoc";var C=Object.defineProperty,T=h((e,o)=>C(e,"name",{value:o,configurable:!0}),"w");const _=T(async(e,o,a,s)=>{if(o.length===0)return;const{format:t,jsonFileName:n,marker:i,output:x,plugin:k,readmePath:p,...y}=e;if(t==="inline"&&p===void 0)throw new Error("The `readmePath` option is required when using the `inline` format.");if(t!=="inline"&&typeof p=="string"&&s.warn({message:"The `readmePath` option is only used when the `inline` format is used.",prefix:"typedoc"}),t==="json"){if(n===void 0)throw new Error("The `jsonFileName` option is required when using the `json` format.");if(!n.endsWith(".json"))throw new Error("The `jsonFileName` option must end with `.json`.")}t!=="json"&&typeof n=="string"&&s.warn({message:"The `jsonFileName` option is only used when the `json` format is used.",prefix:"typedoc"});const E=o.map(m=>m.input),u=k??[];u.push("typedoc-plugin-rename-defaults"),(t==="inline"||t==="markdown")&&u.push("typedoc-plugin-markdown");const l=await b.bootstrapWithPlugins({...y,compilerOptions:{allowJs:!0,declaration:!1,declarationMap:!1,esModuleInterop:!0,module:99,moduleResolution:100,noEmit:!0,noImplicitAny:!1,skipLibCheck:!0,sourceMap:!1,target:99,...y.compilerOptions},entryPoints:E,hideGenerator:!0,out:a,plugin:u,...t==="inline"?{hideBreadcrumbs:!0,hidePageHeader:!0,navigation:!1,outputFileStrategy:"modules",useCodeBlocks:!0}:{}},[]),d=await l.convert();if(d){if(t==="json")await l.generateJson(d,n);else if(t==="html")await l.generateDocs(d,a);else if(await l.generateOutputs(d),t==="inline"){if(i===void 0)throw new Error("The `marker` option is required when using the `inline` format.");const m=P(a,{withFileTypes:!0}).filter(r=>r.isFile());let f="";for(const r of m)r.name==="README.md"&&o.length>1||(f+=w(g(a,r.name)).replaceAll(`<!-- ${i}`,`<!-- _REPLACE_${i}`).replaceAll("<!-- ${marker}",`<!-- _REPLACE_\\${i}`));if(f!==""){const r=w(p),c=F(r,i,`
2
+ ${f}`);if(!c){s.error({message:`Could not find the typedoc marker: <!-- ${i} --><!-- /${i} --> in ${p}`,prefix:"typedoc"});return}if(r===c)return;c&&A(p,c.replaceAll(`<!-- _REPLACE_${i}`,`<!-- ${i}`).replaceAll(`<!-- _REPLACE_\\${i}`,"<!-- ${marker}"),{overwrite:!0})}}}},"generateReferenceDocumentation");var R=Object.defineProperty,D=h((e,o)=>R(e,"name",{value:o,configurable:!0}),"r");const B=D(async(e,o,a,s)=>{if(e.options.typedoc&&e.options.typedoc.format!==void 0){let t="unknown";e.pkg.dependencies?.typedoc?t=e.pkg.dependencies.typedoc:e.pkg.devDependencies?.typedoc&&(t=e.pkg.devDependencies.typedoc),o&&$("typedoc",o,e.logger,!0),s&&e.logger.raw(`
3
+ `),e.logger.info({message:`Using ${v("typedoc")} ${t} to generate reference documentation`,prefix:"typedoc"}),await e.hooks.callHook("typedoc:before",e);let n=e.options.rootDir;e.options.typedoc.output?n=e.options.typedoc.output:e.options.typedoc.format==="inline"&&o?n=g(o,"typedoc"):e.options.typedoc.format!=="json"&&(n=g(n,"api-docs")),await _(e.options.typedoc,e.options.entries,n,e.logger),await e.hooks.callHook("typedoc:done",e)}},"builder");export{B as default};
@@ -0,0 +1,4 @@
1
+ import type { Cli } from "@visulima/cerebro";
2
+ import type { Pail } from "@visulima/pail";
3
+ declare const createAddCommand: (cli: Cli<Pail>) => void;
4
+ export default createAddCommand;
@@ -0,0 +1,21 @@
1
+ import type { Cli } from "@visulima/cerebro";
2
+ /**
3
+ * Creates and registers the build command with the CLI.
4
+ * Handles various build modes, environment variables, and build configurations.
5
+ * @param cli CLI instance to register the command with
6
+ * @example
7
+ * ```typescript
8
+ * // Usage from command line:
9
+ * // Build for production:
10
+ * // packem build --production
11
+ *
12
+ * // Watch mode with development environment:
13
+ * // packem build --watch --development
14
+ *
15
+ * // With custom environment variables:
16
+ * // packem build --env.API_URL=http://api.example.com
17
+ * ```
18
+ * @internal
19
+ */
20
+ declare const createBuildCommand: (cli: Cli<Console>) => void;
21
+ export default createBuildCommand;
@@ -0,0 +1,3 @@
1
+ import type { Cli } from "@visulima/cerebro";
2
+ declare const createInitCommand: (cli: Cli<Console>) => void;
3
+ export default createInitCommand;
@@ -0,0 +1,21 @@
1
+ import type { Cli } from "@visulima/cerebro";
2
+ /**
3
+ * Creates and registers the migrate command with the CLI.
4
+ * Handles migration from other bundlers (tsup, unbuild, bunchee, etc.) to packem.
5
+ * @param cli CLI instance to register the command with
6
+ * @example
7
+ * ```typescript
8
+ * // From command line:
9
+ * // Migrate from tsup to packem:
10
+ * // packem migrate
11
+ *
12
+ * // Dry run to preview changes:
13
+ * // packem migrate --dry-run
14
+ *
15
+ * // Specify custom directory:
16
+ * // packem migrate --cwd /path/to/project
17
+ * ```
18
+ * @internal
19
+ */
20
+ declare const createMigrateCommand: (cli: Cli<Console>) => void;
21
+ export default createMigrateCommand;
@@ -0,0 +1,2 @@
1
+ declare const cssLoaderDependencies: Record<string, string[]>;
2
+ export default cssLoaderDependencies;
@@ -0,0 +1 @@
1
+ export {};
package/dist/cli/index.js CHANGED
@@ -1,55 +1,68 @@
1
1
  #!/usr/bin/env node
2
- var Y=Object.defineProperty;var h=(t,s)=>Y(t,"name",{value:s,configurable:!0});import Q from"@visulima/cerebro";import{SimpleReporter as Z}from"@visulima/pail/reporter";import{cwd as A,exit as ee}from"node:process";import{installPackage as N}from"@antfu/install-pkg";import{spinner as K,select as $,multiselect as F,confirm as w,intro as te,log as G,cancel as se,outro as oe}from"@clack/prompts";import{isAccessible as ie,readFile as ne,writeFile as ae,isAccessibleSync as S,collectSync as re,writeJsonSync as le,writeFileSync as ce}from"@visulima/fs";import{join as j,resolve as M,extname as W,toNamespacedPath as pe}from"@visulima/path";import de from"magic-string";import{t as I,E as V,e as ue,N as q,_ as me,c as fe}from"../packem_shared/index-CUp9WuCG.js";import{defu as ye}from"defu";import{createJiti as ge}from"jiti";import{cyan as ve,bold as O,gray as be}from"@visulima/colorize";import{e as we,i as J,c as he,y as ke}from"../packem_shared/index-BHVpfOuE.js";import{parsePackageJson as $e}from"@visulima/package/package-json";import __cjs_mod__ from "node:module"; // -- packem CommonJS require shim --
2
+ var Z=Object.defineProperty;var v=(t,s)=>Z(t,"name",{value:s,configurable:!0});import{createCerebro as ee}from"@visulima/cerebro";import se from"@visulima/cerebro/logger/pail";import{SimpleReporter as te}from"@visulima/pail/reporter/simple";import j,{cwd as B,exit as ae}from"node:process";import{installPackage as D}from"@antfu/install-pkg";import{confirm as w,select as h,multiselect as U,spinner as N,cancel as G,intro as ie,log as A,outro as re}from"@clack/prompts";import{isAccessible as oe,readFile as ne,writeFile as ce,isAccessibleSync as L,writeJsonSync as le,writeFileSync as de}from"@visulima/fs";import{parsePackageJson as z}from"@visulima/package/package-json";import{join as $,resolve as I}from"@visulima/path";import pe from"magic-string";import{exec as ue}from"tinyexec";import{PRODUCTION_ENV as R,DEVELOPMENT_ENV as me}from"@visulima/packem-share/constants";import{createJiti as fe}from"jiti";import{c as ge,$ as ye,S as be}from"../packem_shared/index-Bm8Oe89l.js";import{existsSync as V}from"node:fs";import{parseEnv as F}from"node:util";import{readFile as we,writeFile as ve}from"node:fs/promises";import{createInterface as he}from"node:readline/promises";import __cjs_mod__ from "node:module"; // -- packem CommonJS require shim --
3
3
  const require = __cjs_mod__.createRequire(import.meta.url);
4
- const Se="@visulima/packem",je="2.0.0-alpha.5";var xe=Object.defineProperty,Ce=h((t,s)=>xe(t,"name",{value:s,configurable:!0}),"t$2");const _=Ce(async(t,s="")=>{let e=s;if(!e){const r=["packem.config.js","packem.config.mjs","packem.config.cjs","packem.config.ts","packem.config.cts","packem.config.mts"];for(const n of r)if(await ie(j(t,n))){e=`./${n}`;break}}if(!/\.(?:js|mjs|cjs|ts|cts|mts)$/.test(e))throw new Error("Invalid packem config file extension. Only .js, .mjs, .cjs, .ts, .cts and .mts extensions are allowed.");return e},"findPackemFile"),X={less:["less"],lightningcss:["lightningcss"],"node-sass":["node-sass"],postcss:["postcss","postcss-load-config","postcss-modules-extract-imports","postcss-modules-local-by-default","postcss-modules-scope","postcss-modules-values","postcss-value-parser","@csstools/css-parser-algorithms","@csstools/css-tokenizer","@csstools/postcss-slow-plugins","icss-utils"],sass:["sass"],"sass-embedded":["sass-embedded"],stylus:["stylus"]};var Ee=Object.defineProperty,R=h((t,s)=>Ee(t,"name",{value:s,configurable:!0}),"g");const De=["typedoc","typedoc-plugin-markdown","typedoc-plugin-rename-defaults"],Pe=R(t=>{t.addCommand({argument:{description:"Add a packem feature to your project",name:"feature",required:!0},description:"Add a optional packem feature to your project",execute:R(async({argument:s,logger:e,options:r})=>{const n=K(),i=M(A(),r.dir??".");let p;try{p=await _(i,r.config)}catch{e.error("Could not find a packem config file, please run `packem init` first.");return}const m=await ne(p,{buffer:!1});let y="cjs";m.includes("import")&&(y="esm");const o=new de(m),d=" transformer,";let c=" transformer";if(m.includes(" transformer,")&&(c=" transformer,"),s.includes("typedoc")){if(m.includes("typedoc: typedocBuilder")||m.includes("@visulima/packem/builder/typedoc")){e.warn("Typedoc has already been added to the packem config.");return}y==="cjs"?o.prepend(`const typedocBuilder = require("@visulima/packem/builder/typedoc");
5
- `):o.prepend(`import typedocBuilder from "@visulima/packem/builder/typedoc";
6
- `),m.includes("builder: {")?o.replace("builder: {",`builder: {
4
+ var ke="@visulima/packem",W="2.0.0-alpha.59";const q={version:W};var Se=Object.defineProperty,$e=v((t,s)=>Se(t,"name",{value:s,configurable:!0}),"t");const _=$e(async(t,s="")=>{let a=s;if(!a){const e=["packem.config.js","packem.config.mjs","packem.config.cjs","packem.config.ts","packem.config.cts","packem.config.mts"];for(const r of e)if(await oe($(t,r))){a=`./${r}`;break}}if(!/\.(?:js|mjs|cjs|ts|cts|mts)$/.test(a))throw new Error("Invalid packem config file extension. Only .js, .mjs, .cjs, .ts, .cts and .mts extensions are allowed.");return a},"findPackemFile"),X={less:["less"],lightningcss:["lightningcss"],"node-sass":["node-sass"],postcss:["postcss","postcss-load-config","postcss-modules-extract-imports","postcss-modules-local-by-default","postcss-modules-scope","postcss-modules-values","postcss-value-parser","@csstools/css-parser-algorithms","@csstools/css-tokenizer","@csstools/postcss-slow-plugins","icss-utils","@visulima/css-style-inject"],sass:["sass"],"sass-embedded":["sass-embedded"],stylus:["stylus"],tailwindcss:["@tailwindcss/node","@tailwindcss/oxide","tailwindcss"]};var Ce=Object.defineProperty,b=v((t,s)=>Ce(t,"name",{value:s,configurable:!0}),"r$1");const je=["typedoc","typedoc-plugin-markdown","typedoc-plugin-rename-defaults"],Pe=["@babel/core","@babel/preset-react"],xe=["react","react-dom"],De=["@babel/core","babel-preset-solid"],Me=["solid-js"],Oe=["@babel/core","@babel/preset-react","babel-plugin-transform-hook-names"],Ee=["preact"],Te=["unplugin-vue"],Ie=["vue"],Le=["rollup-plugin-svelte"],Ne=["svelte"],M=b((t,s,a)=>t.includes(`preset: '${s}'`)||t.includes(`preset: "${s}"`)||t.includes(`preset: '${s}',`)||t.includes(`preset: "${s}",`)||t.includes(a)||t.includes(`@visulima/packem/config/preset/${s}`),"checkPresetExists"),O=b((t,s)=>{const{logger:a,magic:e,packemConfig:r}=t,o=r.match(/defineConfig\s*\(\s*\{/);if(o&&o.index!==void 0){const n=o.index+o[0].length;if(r.includes("preset:")){const i=r.match(/preset:\s*['"]([^'"]+)['"]/);if(i)e.replace(i[0],`preset: '${s}'`);else throw a.warn(`A preset already exists in the config. Please manually set it to '${s}'.`),new Error("Preset exists but is not a string")}else e.appendLeft(n,`
5
+ preset: '${s}',`)}else if(r.includes("transformer:"))e.replace("transformer:",`preset: '${s}',
6
+ transformer:`);else{const n=r.indexOf("{");n!==-1&&e.appendLeft(n+1,`
7
+ preset: '${s}',`)}},"insertPreset"),Be=b(async t=>{try{return((await ue("git",["status","--porcelain"],{nodeOptions:{cwd:t,stdio:["pipe","pipe","pipe"]}})).stdout?.trim().length??0)>0}catch{return!1}},"checkGitDirty"),H=b(async t=>{const s=$(t,"package.json"),a=await z(s,{resolveCatalogs:!0});return!!(a.devDependencies?.typescript??a.dependencies?.typescript)},"checkTypeScriptInstalled"),Ve=b(async t=>{const s=await H(t),a=[...xe],e=[...Pe];return s?e.push("@types/react","@types/react-dom"):await w({initialValue:!1,message:"Do you want to use TypeScript?"})&&e.push("typescript","@types/react","@types/react-dom"),{devPackages:e,packages:a}},"getReactTypeDependencies"),E=b(async(t,s,a)=>{const{rootDirectory:e,spinner:r}=t;r.start("Installing packages"),await D(a,{cwd:e,dev:!1,silent:!0}),await D(s,{cwd:e,dev:!0,silent:!0}),r.stop("Installed packages")},"installPackages"),Ae=b(async t=>{const{logger:s,magic:a,packemConfig:e,packemConfigFormat:r,rootDirectory:o,spinner:n,transformerReplaceKey:i,transformerSearchKey:l}=t;if(e.includes("typedoc: typedocBuilder")||e.includes("@visulima/packem/builder/typedoc")){s.warn("Typedoc has already been added to the packem config.");return}r==="cjs"?a.prepend(`const typedocBuilder = require("@visulima/packem/builder/typedoc");
8
+ `):a.prepend(`import typedocBuilder from "@visulima/packem/builder/typedoc";
9
+ `),e.includes("builder: {")?a.replace("builder: {",`builder: {
7
10
  typedoc: typedocBuilder,
8
- `):o.replace(c,`${d}
11
+ `):a.replace(l,`${i}
9
12
  builder: {
10
13
  typedoc: typedocBuilder,
11
- },`),e.info("Adding typedoc dependencies..."),n.start("Installing packages"),await N(De,{cwd:i,dev:!0,silent:!0}),n.stop("Installed packages"),e.success(`
12
- Typedoc added!`)}if(s.includes("css")){if(m.includes("css: {")||m.includes("@visulima/packem/css")){e.warn("Css loaders have already been added to the packem config.");return}const l=[],b=await $({message:"Pick a css loader",options:[{label:"PostCSS",value:"postcss"},{hint:"experimental",label:"Lightning CSS",value:"lightningcss"}]});l.push(b);let v=await F({message:"Pick extra loaders",options:[{label:"Sass",value:"sass"},{label:"Stylus",value:"stylus"},{label:"Less",value:"less"}],required:!1});if(v.includes("sass")){const g=await $({message:"Pick a sass loader",options:[{hint:"recommended",label:"Sass embedded",value:"sass-embedded"},{label:"Sass",value:"sass"},{hint:"legacy",label:"Node Sass",value:"node-sass"}]});g!=="sass"&&(v=v.filter(x=>x!=="sass"),v.push(g))}l.push(...v);const a=[];for(const g of l)a.push(...X[g]);l.push("sourceMap");for(let g of l)(g==="sass-embedded"||g==="node-sass")&&(g="sass"),y==="cjs"?o.prepend(`const ${g}Loader = require("@visulima/packem/css/loader/${g.toLowerCase()}");
13
- `):o.prepend(`import ${g}Loader from "@visulima/packem/css/loader/${g.toLowerCase()}";
14
- `);const u=await w({initialValue:!1,message:"Do you want to minify your css?"});let f;u&&(f=await $({message:"Pick a css minifier",options:[{label:"CSSNano",value:"cssnano"},{label:"Lightning CSS",value:"lightningcss"}]}),l.includes("lightningcss")||a.push(f),y==="cjs"?o.prepend(`const ${f}Minifier = require("@visulima/packem/css/minifier/${f.toLowerCase()}");
15
- `):o.prepend(`import ${f}Minifier from "@visulima/packem/css/minifier/${f.toLowerCase()}";
16
- `));const k=l.map(g=>((g==="sass-embedded"||g==="node-sass")&&(g="sass"),`${g}Loader`)).join(", ");m.includes("rollup: {")?o.replace("rollup: {",`rollup: {
17
- css: {${f?`
18
- minifier: ${f}Minifier,`:""}
19
- loaders: [${k}],
14
+ },`),s.info("Adding typedoc dependencies..."),n.start("Installing packages"),await D(je,{cwd:o,dev:!0,silent:!0}),n.stop("Installed packages"),s.success(`
15
+ Typedoc added!`)},"addTypedoc"),Re=b(async t=>{const{logger:s,packemConfig:a}=t;if(M(a,"react","createReactPreset")){s.warn("React preset has already been added to the packem config.");return}O(t,"react");const{devPackages:e,packages:r}=await Ve(t.rootDirectory);s.info("Adding React dependencies..."),await E(t,e,r),s.success(`
16
+ React preset added!`)},"addReact"),Fe=b(async t=>{const{logger:s,packemConfig:a}=t;if(M(a,"solid","createSolidPreset")){s.warn("Solid preset has already been added to the packem config.");return}O(t,"solid"),s.info("Adding Solid dependencies..."),await E(t,De,Me),s.success(`
17
+ Solid preset added!`)},"addSolid"),qe=b(async t=>{const s=await H(t),a=[...Ee],e=[...Oe];return s?e.push("@types/preact"):await w({initialValue:!1,message:"Do you want to use TypeScript?"})&&e.push("typescript","@types/preact"),{devPackages:e,packages:a}},"getPreactTypeDependencies"),Je=b(async t=>{const{logger:s,packemConfig:a}=t;if(M(a,"preact","createPreactPreset")){s.warn("Preact preset has already been added to the packem config.");return}O(t,"preact");const{devPackages:e,packages:r}=await qe(t.rootDirectory);s.info("Adding Preact dependencies..."),await E(t,e,r),s.success(`
18
+ Preact preset added!`)},"addPreact"),Ke=b(async t=>{const{logger:s,packemConfig:a}=t;if(M(a,"vue","createVuePreset")){s.warn("Vue preset has already been added to the packem config.");return}O(t,"vue"),s.info("Adding Vue dependencies..."),await E(t,Te,Ie),s.success(`
19
+ Vue preset added!`)},"addVue"),Ue=b(async t=>{const{logger:s,packemConfig:a}=t;if(M(a,"svelte","createSveltePreset")){s.warn("Svelte preset has already been added to the packem config.");return}O(t,"svelte"),s.info("Adding Svelte dependencies..."),await E(t,Le,Ne),s.success(`
20
+ Svelte preset added!`)},"addSvelte"),Ge=b(async t=>{const{logger:s,magic:a,packemConfig:e,packemConfigFormat:r,transformerReplaceKey:o,transformerSearchKey:n}=t;if(e.includes("css: {")||e.includes("@visulima/packem/css")){s.warn("Css loaders have already been added to the packem config.");return}const i=[],l=await h({message:"Pick a css loader",options:[{label:"PostCSS",value:"postcss"},{hint:"experimental",label:"Lightning CSS",value:"lightningcss"},{hint:"Tailwind Css Oxide",label:"Tailwind CSS",value:"tailwindcss"}]});if(i.push(l),l!=="tailwindcss"){let p=await U({message:"Pick extra loaders",options:[{label:"Sass",value:"sass"},{label:"Stylus",value:"stylus"},{label:"Less",value:"less"}],required:!1});if(p.includes("sass")){const y=await h({message:"Pick a sass loader",options:[{hint:"recommended",label:"Sass embedded",value:"sass-embedded"},{label:"Sass",value:"sass"},{hint:"legacy",label:"Node Sass",value:"node-sass"}]});y!=="sass"&&(p=p.filter(k=>k!=="sass"),p.push(y))}i.push(...p)}const u=[];for(const p of i)u.push(...X[p]);l!=="tailwindcss"&&i.push("sourceMap");for(const p of i){const y=p==="sass-embedded"||p==="node-sass"?"sass":p;r==="cjs"?a.prepend(`const ${y}Loader = require("@visulima/packem/css/loader/${y.toLowerCase()}");
21
+ `):a.prepend(`import ${y}Loader from "@visulima/packem/css/loader/${y.toLowerCase()}";
22
+ `)}const f=await w({initialValue:!1,message:"Do you want to minify your css?"});let d;f&&(d=await h({message:"Pick a css minifier",options:[{label:"CSSNano",value:"cssnano"},{label:"Lightning CSS",value:"lightningcss"}]}),i.includes("lightningcss")||u.push(d),r==="cjs"?a.prepend(`const ${d}Minifier = require("@visulima/packem/css/minifier/${d.toLowerCase()}");
23
+ `):a.prepend(`import ${d}Minifier from "@visulima/packem/css/minifier/${d.toLowerCase()}";
24
+ `));const g=i.map(p=>p==="sass-embedded"||p==="node-sass"?"sass":`${p}Loader`).join(", ");e.includes("rollup: {")?a.replace("rollup: {",`rollup: {
25
+ css: {${d?`
26
+ minifier: ${d}Minifier,`:""}
27
+ loaders: [${g}],
20
28
  },
21
- `):o.replace(c,`${d}
29
+ `):a.replace(n,`${o}
22
30
  rollup: {
23
- css: {${f?`
24
- minifier: ${f}Minifier,`:""}
25
- loaders: [${k}],
31
+ css: {${d?`
32
+ minifier: ${d}Minifier,`:""}
33
+ loaders: [${g}],
26
34
  },
27
- },`),n.start("Installing packages"),await N(a,{cwd:i,dev:!0,silent:!0}),n.stop("Installed packages"),e.success(`
28
- CSS loaders added!`)}await ae(p,o.toString(),{overwrite:!0})},"execute"),name:"add",options:[{defaultValue:".",description:"The directory to build",name:"dir",type:String},{description:"Use a custom config file",name:"config",type:String}]})},"createAddCommand");var Ie=Object.defineProperty,Me=h((t,s)=>Ie(t,"name",{value:s,configurable:!0}),"e$1");const Te=Me(async(t,s,e,r,n)=>{const i=await _(s,n);let p=await t.import(i,{default:!0,try:!0})||{};return typeof p=="function"&&(p=await p(e,r)),{config:p,path:i}},"loadPackemConfig");var Be=Object.defineProperty,T=h((t,s)=>Be(t,"name",{value:s,configurable:!0}),"E$1");const Le=T((t,s)=>t.key==="exports"&&t.subKey===I?I:t.key==="exports"&&t.subKey===V?V:s,"getEnvironment"),P=T((t,s,e,r,n,i,p)=>{const m=Le(n,i.environment);let y=i.options.runtime;for(const c of ue)if(n.file.includes(`.${c}.`)||n.subKey===c){y=c;break}let o=t.find(c=>c.input===s&&c.environment===m&&c.runtime===y);o===void 0?o=t[t.push({environment:m,exportKey:new Set([n.exportKey].filter(Boolean)),input:s,runtime:y})-1]:o.exportKey&&n.exportKey&&o.exportKey.add(n.exportKey),p&&(o.isGlob=!0),e&&(o.outDir=r),n.isExecutable?(o.executable=!0,o.declaration=!1,n.type==="cjs"?o.cjs=!0:n.type==="esm"&&(o.esm=!0)):(/\.d\.[mc]?ts$/.test(n.file)&&i.options.declaration!==!1&&(o.declaration=i.options.declaration),n.type==="cjs"?o.cjs=!0:n.type==="esm"&&(o.esm=!0));const d=n.file.replace(W(n.file),"").replace(new RegExp(`^./${i.options.outDir.replace(/^\.\//,"")}/`),"");q.has(n.subKey)&&!s.includes(d)&&(o.fileAlias=d)},"createOrUpdateEntry");let U=!1;const z=T(t=>{if(t.pkg?.dependencies?.typescript===void 0&&t.pkg?.devDependencies?.typescript===void 0)throw new Error("You tried to use a `.ts`, `.cts` or `.mts` file but `typescript` was not found in your package.json.")},"validateIfTypescriptIsInstalled"),Oe=T((t,s,e)=>{const r=(e.options.outputExtensionMap?.cjs??"cjs").replaceAll(".",String.raw`\.`),n=(e.options.outputExtensionMap?.esm??"mjs").replaceAll(".",String.raw`\.`),i=[];s.sort((o,d)=>o.split("/").length-d.split("/").length);const p=t.type==="module"?"esm":"cjs";p==="esm"&&(e.options.emitESM=!0),p==="cjs"&&(e.options.emitCJS=!0);const m=we(t.exports,p,e.options.declaration,[],e.options.ignoreExportKeys).filter(o=>!o.ignored);if(t.bin){const o=(typeof t.bin=="string"?[t.bin]:Object.values(t.bin)).filter(Boolean);for(const d of o){const c=J(d);if(c&&c!==p)throw new Error(`Exported file "${d}" has an extension that does not match the package.json type "${t.type??"commonjs"}".`);m.push({file:d,isExecutable:!0,key:"bin",type:c??p})}}t.main&&m.push({file:t.main,key:"main",type:J(t.main)??p}),t.module&&m.push({file:t.module,key:"module",type:"esm"}),(t.types||t.typings)&&(z(e),e.options.declaration===void 0&&(e.options.declaration="compatible"),m.push({file:t.types??t.typings,key:"types"}));const y=[];for(const o of m){const d=W(o.file);if(d!==""&&!me.includes(d))continue;e.options.declaration===void 0&&(o.key==="types"||o.subKey==="types")&&(e.options.declaration=o.file.includes(".d.ts")?"compatible":!0),e.options.emitCJS===void 0&&o.type==="cjs"&&(e.options.emitCJS=!0),e.options.emitESM===void 0&&o.type==="esm"&&(e.options.emitESM=!0);const c=o.file.replace(new RegExp(String.raw`(?:\*[^/\\]|\.d\.[mc]?ts|\.\w+|${[`\\.${r}`,`\\.${n}`].join("|")})$`),""),l=c.endsWith("/");if(l&&["./","/"].includes(c))continue;const b=c.replace(new RegExp(`(./)?${e.options.outDir}`),e.options.sourceDir).replace("./",""),v="(?<=/|$)",a=l?"":String.raw`(\.d\.[cm]?ts|(\.[cm]?[tj]sx?)|${[`\\.${r}`,`\\.${n}`].join("|")})$`;if(o.file.includes("/*")&&o.key==="exports"){U||(e.logger.debug("Private subfolders are not supported, if you need this feature please open an issue on GitHub."),U=!0);const g=[],x=new RegExp(v+b.replace("*","(.*)")+a),L=b.replace(/^(.+?)\.[^.]*$/,"$1"),H=new RegExp(v+L.replace("*","(.*)")+a);for(const C of s)(x.test(C)||q.has(o.subKey)&&H.test(C))&&g.push(C);if(g.length===0){i.push(`Could not find entrypoint for \`${o.file}\``);continue}for(const C of g)P(y,C,l,c,o,e,!0);continue}const u=new RegExp(v+b+a);let f=s.find(g=>u.test(g));if(q.has(o.subKey)&&f===void 0){const g=b.replace(/^(.+?)\.[^.]*$/,"$1"),x=new RegExp(v+g+a);f=s.find(L=>x.test(L))}if(f===void 0){S(M(e.options.rootDir,o.file))||i.push(`Could not find entrypoint for \`${o.file}\``);continue}S(f)&&/\.[cm]?tsx?$/.test(f)&&z(e);const k=pe(f.replace(fe,""));S(`${k}.cts`)&&S(`${k}.mts`)?(P(y,`${k}.cts`,l,c,{...o,type:"cjs"},e,!1),P(y,`${k}.mts`,l,c,{...o,type:"esm"},e,!1)):P(y,f,l,c,o,e,!1)}return e.options.emitESM&&!e.options.emitCJS&&e.options.declaration===void 0&&(e.options.declaration="node16"),{entries:y,warnings:i}},"inferEntries");var Ne=Object.defineProperty,Ke=h((t,s)=>Ne(t,"name",{value:s,configurable:!0}),"o");const Ve=Ke((t,s)=>{const{publishConfig:e}=t;return e&&(e.bin&&(typeof e.bin=="object"||typeof e.bin=="string")&&(t.bin=e.bin),e.type&&typeof e.type=="string"&&e.type!==""&&(t.type=e.type),e.main&&typeof e.main=="string"&&e.main!==""&&(t.main=e.main),e.module&&typeof e.module=="string"&&e.module!==""&&(t.module=e.module),s===void 0&&e.types&&typeof e.types=="string"&&e.types!==""?t.types=e.types:s===void 0&&e.typings&&typeof e.typings=="string"&&e.typings!==""&&(t.typings=e.typings),e.exports&&typeof e.exports=="object"&&(t.exports=e.exports)),t},"overwriteWithPublishConfig");var qe=Object.defineProperty,Ae=h((t,s)=>qe(t,"name",{value:s,configurable:!0}),"t$1");const Ge={hooks:{"build:prepare":Ae(function(t){if(t.options.entries.length>0)return;const s=j(t.options.rootDir,t.options.sourceDir);if(!S(s))throw new Error("No 'src' directory found. Please provide entries manually.");const e=re(s,{extensions:[],includeDirs:!1,includeSymlinks:!1,skip:[/.*\/node_modules\/.*/,/.*\/dist\/.*/]});if(e.length===0)throw new Error("No source files found in 'src' directory. Please provide entries manually.");let r={...t.pkg};r.publishConfig&&(t.logger.info(`Using publishConfig found in package.json, to override the default key-value pairs of "${Object.keys(r.publishConfig).join(", ")}".`),t.logger.debug(r.publishConfig),r=Ve(r,t.options.declaration));const n=Oe(r,e,t);for(const i of n.warnings)he(t,i);if(t.options.entries.push(...n.entries),t.options.entries.length===0)throw new Error("No entries detected. Please provide entries manually.");t.logger.info("Automatically detected entries:",ve(t.options.entries.map(i=>i.fileAlias?`${O(i.fileAlias)} => ${O(i.input.replace(`${t.options.rootDir}/`,"").replace(/\/$/,"/*"))}`:O(i.input.replace(`${t.options.rootDir}/`,"").replace(/\/$/,"/*"))).join(", ")),be([t.options.emitESM&&"esm",t.options.emitCJS&&"cjs",t.options.declaration&&"dts"].filter(Boolean).map(i=>`[${i}]`).join(" ")))},"build:prepare")}};var Je=Object.defineProperty,Re=h((t,s)=>Je(t,"name",{value:s,configurable:!0}),"t");const Ue=Re(async(t,s)=>{if(t==="auto")t=Ge;else{if(t==="none")return{};typeof t=="string"&&(t=await s.import(t)||{})}return typeof t=="function"&&(t=t()),t},"loadPreset");var ze=Object.defineProperty,E=h((t,s)=>ze(t,"name",{value:s,configurable:!0}),"r");const Fe=E(t=>{t.addCommand({description:"Demonstrate options required",execute:E(async({logger:s,options:e})=>{let r="build";e.watch?r="watch":e.jit&&(r="jit");const n={};let i;if(e.env)for(const l of e.env)l.key==="NODE_ENV"?i=l.value:n[`process.env.${l.key}`]=JSON.stringify(l.value);i===void 0&&(e.production?i=I:e.development&&(i=V));const p=[];if(e.external)for(const l of e.external)p.push(l.split(","));const m=M(A(),e.dir??"."),y=ge(m,{debug:e.debug}),{config:o,path:d}=await Te(y,m,i,r,e.config??void 0);s.debug("Using packem config found at",d);const c=await Ue(o.preset??"auto",y);e.minify&&e.sourcemap===void 0&&(e.sourcemap=!0);try{await ke(m,r,i,s,e.debug,ye(o,c,{analyze:e.analyze,cjsInterop:e.cjsInterop,clean:e.clean,dtsOnly:e.dtsOnly,externals:p,killSignal:e.killSignal,minify:e.minify===void 0?i===I:e.minify,onSuccess:e.onSuccess,rollup:{esbuild:{target:e.target},license:{path:e.license},metafile:e.metafile,replace:{values:n},resolveExternals:e.noExternal?{builtins:!1,deps:!1,devDeps:!1,optDeps:!1,peerDeps:!1}:{}},runtime:e.runtime,sourcemap:e.metafile||e.analyze||e.sourcemap,validation:e.validation===!1?!1:{},...e.typedoc?{typedoc:{format:"html"}}:{}}),e.tsconfig??void 0)}catch(l){s.error(l),ee(1)}},"execute"),name:"build",options:[{defaultValue:".",description:"The directory to build",name:"dir",type:String},{alias:"t",description:"Environments to support. `target` in tsconfig.json is automatically added. Defaults to the current Node.js version.",name:"target"},{description:"Use a custom config file",name:"config",type:String},{description:"Path to the tsconfig.json file",name:"tsconfig",type:String},{description:"Minify the output",name:"minify",type:Boolean},{description:"Generate sourcemaps (experimental)",name:"sourcemap",type:Boolean},{conflicts:"jit",description:"Watch for changes",name:"watch",type:Boolean},{conflicts:"watch",description:"Stub the package for JIT compilation",name:"jit",type:Boolean},{description:"Compile-time environment variables (eg. --env.NODE_ENV=production)",multiple:!0,name:"env",type:E(s=>{const[e,r]=s.split("=");return{key:e,value:r}},"type")},{defaultValue:!1,description:"Generate meta file (experimental)",name:"metafile",type:Boolean},{description:"Path to the license file",name:"license",type:String},{conflicts:"watch",description:"Visualize and analyze the bundle",name:"analyze",type:Boolean},{description:"CJS interop mode, can export default and named export, (experimental).",name:"cjsInterop",type:Boolean},{conflicts:"development",description:"Run code in production environment",name:"production",type:Boolean},{conflicts:"production",description:"Run code in development environment",name:"development",type:Boolean},{description:"Do not clean the dist directory before building",name:"no-clean",type:Boolean},{description:"Only generate .d.ts files",name:"dts-only",type:Boolean},{description:"Disable the output validation",name:"no-validation",type:Boolean},{description:"Disable the cache",name:"no-cache",type:Boolean},{description:"Generate type documentation",name:"typedoc",type:Boolean},{description:"Execute command after successful build, specially useful for watch mode",name:"onSuccess",type:String},{description:'Signal to kill child process, "SIGTERM" or "SIGKILL"',name:"killSignal",type:E(s=>{if(s==="SIGTERM"||s==="SIGKILL")return s;throw new Error("Invalid kill signal. Use 'SIGTERM' or 'SIGKILL'.")},"type")},{description:"Specify an external dependency, separate by comma (eg. --external lodash,react,react-dom)",multiple:!0,name:"external",typeLabel:"string[]"},{description:"do not bundle external dependencies",name:"no-external",type:Boolean},{description:"Specify the build runtime (nodejs, browser).",name:"runtime",type:E(s=>{if(s==="node"||s==="browser")return s;throw new Error("Invalid runtime. Use 'node' or 'browser'.")},"type")}]})},"createBuildCommand");var We=Object.defineProperty,D=h((t,s)=>We(t,"name",{value:s,configurable:!0}),"f");const _e=D(t=>{t.addCommand({description:"Initialize packem configuration",execute:D(async({logger:s,options:e})=>{if(te("Welcome to packem setup"),S(j(e.dir,"packem.config.mjs"))){s.info("Packem project already initialized, you can use `packem build` to build your project");return}const r=M(A(),e.dir??"."),n=j(r,"package.json");if(!S(n))throw new Error("No package.json found in the directory");const i=$e(n),p=[];i.dependencies&&p.push(...Object.keys(i.dependencies)),i.devDependencies&&p.push(...Object.keys(i.devDependencies));const m=!!(i.devDependencies?.typescript??i.dependencies?.typescript),y=[];if(e.typescript===void 0&&!m?(e.typescript=await w({message:"Do you want to install TypeScript?"}),e.typescript&&y.push("typescript@latest")):G.message(`TypeScript version ${i.devDependencies?.typescript??i.dependencies?.typescript} is already installed`),!S(j(r,"tsconfig.json"))){const a=await w({message:"Do you want to use generate a tsconfig.json?"}),u=await w({message:"Do you want to run your code in the DOM?"});if(a){const f=K();f.start("Generating tsconfig.json"),le(j(r,"tsconfig.json"),{compilerOptions:{esModuleInterop:!0,skipLibCheck:!0,target:"es2022",allowJs:!0,resolveJsonModule:!0,moduleDetection:"force",isolatedModules:!0,verbatimModuleSyntax:!0,strict:!0,noUncheckedIndexedAccess:!0,noImplicitOverride:!0,module:"NodeNext",outDir:"dist",sourceMap:!0,declaration:!0,lib:u?["es2022","dom","dom.iterable"]:["es2022"]}}),f.stop("")}}if(e.runtime===void 0&&(e.runtime=await $({message:"Pick a build runtime",options:[{label:"Node",value:"node"},{label:"Browser",value:"browser"}]})),p.includes("esbuild")?e.transformer="esbuild":p.includes("@swc/core")?e.transformer="swc":p.includes("sucrase")&&(e.transformer="sucrase"),e.transformer===void 0?(e.transformer=await $({message:"Pick a transformer",options:[{label:"esbuild",value:"esbuild"},{label:"swc",value:"swc"},{label:"Sucrase",value:"sucrase"},{label:"OXC",value:"oxc"}]}),e.transformer&&e.transformer!=="oxc"&&!p.includes(e.transformer)&&await w({message:`Do you want to install ${e.transformer}?`})&&y.push(e.transformer==="swc"?"@swc/core":e.transformer)):G.message(`Transformer ${e.transformer} is already installed.`),e.isolatedDeclarationTransformer===void 0&&(e.isolatedDeclarationTransformer=await w({message:"Do you want to use an isolated declaration types?",initialValue:!1})),e.isolatedDeclarationTransformer===void 0&&(e.isolatedDeclarationTransformer=await $({message:"Pick a isolated declaration transformer",options:[{label:"Typescript",value:"typescript"},{label:"swc",value:"swc"},{label:"OXC",value:"oxc"},{label:"None",value:void 0}]}),e.isolatedDeclarationTransformer!==void 0)){let a;switch(e.isolatedDeclarationTransformer){case"oxc":{a="oxc-transform";break}case"swc":{a="@swc/core";break}case"typescript":{a="typescript";break}default:se("Invalid isolated declaration transformer")}a!==void 0&&!p.includes(a)&&await w({message:`Do you want to install ${a}?`})&&y.push(a)}e.css===void 0&&(e.css=await w({message:"Do you want to use css in your project?",initialValue:!1}));const o=[];if(e.css){const a=await $({message:"Pick a css loader",options:[{label:"PostCSS",value:"postcss"},{hint:"experimental",label:"Lightning CSS",value:"lightningcss"}]});o.push(a);let u=await F({message:"Pick your loaders",options:[{label:"Sass",value:"sass"},{label:"Stylus",value:"stylus"},{label:"Less",value:"less"}],required:!1});if(u.includes("sass")){const f=await $({message:"Pick a sass loader",options:[{label:"Sass embedded",value:"sass-embedded",hint:"recommended"},{label:"Sass",value:"sass"},{label:"Node Sass",value:"node-sass",hint:"legacy"}]});f!=="sass"&&(u=u.filter(k=>k!=="sass"),u.push(f))}if(o.push(...u),await w({message:`Do you want to install "${o.join('", "')}"?`}))for(const f of o)y.push(...X[f]);o.push("sourceMap")}e.cssMinifier===void 0&&(e.cssMinifier=await w({message:"Do you want to minify your css?",initialValue:!1}));let d;e.cssMinifier&&(d=await $({message:"Pick a css minifier",options:[{label:"CSSNano",value:"cssnano"},{label:"Lightning CSS",value:"lightningcss"}]}),o.includes("lightningcss")||await w({message:`Do you want to install "${d}"?`})&&y.push(d));let c="",l="";if(e.isolatedDeclarationTransformer&&(l+=`,
29
- isolatedDeclarationTransformer`),(e.css||e.cssMinifier)&&(l+=`,
35
+ },`),t.spinner.start("Installing packages"),await D(u,{cwd:t.rootDirectory,dev:!0,silent:!0}),t.spinner.stop("Installed packages"),s.success(`
36
+ CSS loaders added!`)},"addCss"),ze=b(t=>{t.addCommand({argument:{description:"Add a packem feature to your project",name:"feature",required:!0},description:"Add a optional packem feature to your project",execute:b(async({argument:s,logger:a,options:e})=>{const r=N(),o=I(B(),e.dir??".");let n;try{n=await _(o,e.config)}catch{a.error("Could not find a packem config file, please run `packem init` first.");return}if(await Be(o)&&!await w({initialValue:!1,message:"Git repository has uncommitted changes. Do you want to proceed?"})){G("Operation cancelled.");return}const i=await ne(n,{buffer:!1}),l=i.includes("import")?"esm":"cjs",u=new pe(i),f=" transformer,",d=i.includes(" transformer,")?" transformer,":" transformer",g={logger:a,magic:u,packemConfig:i,packemConfigFilePath:n,packemConfigFormat:l,rootDirectory:o,spinner:r,transformerReplaceKey:f,transformerSearchKey:d};s.includes("typedoc")&&await Ae(g),s.includes("react")&&await Re(g),s.includes("solid")&&await Fe(g),s.includes("preact")&&await Je(g),s.includes("vue")&&await Ke(g),s.includes("svelte")&&await Ue(g),s.includes("css")&&await Ge(g),await ce(n,u.toString(),{overwrite:!0})},"execute"),name:"add",options:[{defaultValue:".",description:"The directory to build",name:"dir",type:String},{description:"Use a custom config file",name:"config",type:String}]})},"createAddCommand");var We=Object.defineProperty,Y=v((t,s)=>We(t,"name",{value:s,configurable:!0}),"a$1");const _e=Y(async(t,s,a="PACKEM_")=>{const e=I(s,t);if(!V(e))return{};const{readFile:r}=await import("node:fs/promises"),o=await r(e,"utf-8"),n={};if(typeof F=="function")try{const i=F(o);for(const[l,u]of Object.entries(i))(!a||l.startsWith(a))&&(n[`process.env.${l}`]=JSON.stringify(u))}catch{return J(o,a)}else return J(o,a);return n},"loadEnvFile"),J=Y((t,s="PACKEM_")=>{const a={};for(const e of t.split(`
37
+ `)){const r=e.trim();if(!r||r.startsWith("#"))continue;const o=r.match(/^([^=:#]+)=(.*)$/);if(o&&o[1]&&o[2]!==void 0){const n=o[1].trim();let i=o[2].trim();(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),(!s||n.startsWith(s))&&(a[`process.env.${n}`]=JSON.stringify(i))}}return a},"loadEnvFileManually");var Xe=Object.defineProperty,He=v((t,s)=>Xe(t,"name",{value:s,configurable:!0}),"e$2");const Ye=He(async(t,s,a,e,r)=>{const o=await _(s,r);let n=await t.import(o,{default:!0,try:!0})||{};return typeof n=="function"&&(n=await n(a,e)),{config:n,path:o}},"loadPackemConfig");var Qe=Object.defineProperty,Ze=v((t,s)=>Qe(t,"name",{value:s,configurable:!0}),"e$1");const es=Ze(async(t,s)=>{switch(t){case"none":return{};case"preact":{const{createPreactPreset:a}=await import("../config/preset/preact.js");t=a();break}case"react":{const{createReactPreset:a}=await import("../config/preset/react.js");t=a();break}case"solid":{const{createSolidPreset:a}=await import("../config/preset/solid.js");t=a();break}case"svelte":{const{createSveltePreset:a}=await import("../config/preset/svelte.js");t=a();break}case"vue":{const{createVuePreset:a}=await import("../config/preset/vue.js");t=a();break}default:typeof t=="string"&&(t=await s.import(t)||{})}return typeof t=="function"&&(t=t()),t},"loadPreset");var ss=Object.defineProperty,P=v((t,s)=>ss(t,"name",{value:s,configurable:!0}),"o");const ts=P(t=>{t.addCommand({description:"Demonstrate options required",execute:P(async({logger:s,options:a})=>{const e=a;let r="build";e.watch?r="watch":e.jit&&(r="jit");let o;const n={};if(e.env)for(const c of e.env)c.key==="NODE_ENV"?o=c.value:n[`process.env.${c.key}`]=JSON.stringify(c.value);o===void 0&&(e.production?o=R:e.development&&(o=me));const i=[];if(e.external)for(const c of e.external)i.push(c.split(","));const l=I(B(),e.dir??"."),u=fe(l,{debug:e.debug}),{config:f,path:d}=await Ye(u,l,o,r,e.config??void 0);s.debug("Using packem config found at",d);const g=e.envFile??f.envFile,p=e.envPrefix??f.envPrefix??"PACKEM_",y={};if(g){const c=await _e(g,l,p);Object.assign(y,c)}Object.assign(y,n);const k=await es(f.preset??"none",u);e.minify&&e.sourcemap===void 0&&(e.sourcemap=!0);try{const c=ge()(f,ye,k,{analyze:e.analyze,cjsInterop:e.cjsInterop,clean:e.clean,dtsOnly:e.dtsOnly,externals:i,killSignal:e.killSignal,minify:e.minify===void 0?o===R:e.minify,onSuccess:e.onSuccess,rollup:{esbuild:{target:e.target},license:{path:e.license},metafile:e.metafile,...Object.keys(y).length>0||Object.keys(n).length>0?{replace:{values:y}}:{},resolveExternals:e.noExternal?{builtins:!1,deps:!1,devDeps:!1,optDeps:!1,peerDeps:!1}:{}},runtime:e.runtime,sourcemap:e.metafile||e.analyze||e.sourcemap,unbundle:e.unbundle,validation:e.validation===!1?!1:{},...e.typedoc?{typedoc:{format:"html"}}:{}});e.validation===!1&&!f.validation&&(c.validation=!1),await be(l,r,o,s,e.debug,c,e.tsconfig??void 0)}catch(c){s.error(c),ae(1)}},"execute"),name:"build",options:[{defaultValue:".",description:"The directory to build",name:"dir",type:String},{alias:"t",description:"Environments to support. `target` in tsconfig.json is automatically added. Defaults to the current Node.js version.",name:"target"},{description:"Use a custom config file",name:"config",type:String},{description:"Path to the tsconfig.json file",name:"tsconfig",type:String},{description:"Minify the output",name:"minify",type:Boolean},{description:"Generate sourcemaps (experimental)",name:"sourcemap",type:Boolean},{conflicts:"jit",description:"Watch for changes",name:"watch",type:Boolean},{conflicts:"watch",description:"Stub the package for JIT compilation",name:"jit",type:Boolean},{description:"Compile-time environment variables (eg. --env.NODE_ENV=production)",multiple:!0,name:"env",type:P(s=>{const[a,e]=s.split("=");return{key:a,value:e}},"type")},{description:"Path to the .env file to load environment variables from",name:"env-file",type:String},{description:"Prefix for environment variables to load from .env file (default: PACKEM_)",name:"env-prefix",type:String},{defaultValue:!1,description:"Generate meta file (experimental)",name:"metafile",type:Boolean},{description:"Path to the license file",name:"license",type:String},{conflicts:"watch",description:"Visualize and analyze the bundle",name:"analyze",type:Boolean},{description:"CJS interop mode, can export default and named export, (experimental).",name:"cjsInterop",type:Boolean},{conflicts:"development",description:"Run code in production environment",name:"production",type:Boolean},{conflicts:"production",description:"Run code in development environment",name:"development",type:Boolean},{description:"Do not clean the dist directory before building",name:"no-clean",type:Boolean},{description:"Only generate .d.ts files",name:"dts-only",type:Boolean},{description:"Disable the output validation",name:"no-validation",type:Boolean},{description:"Disable the cache",name:"no-cache",type:Boolean},{description:"Generate type documentation",name:"typedoc",type:Boolean},{description:"Execute command after successful build, specially useful for watch mode",name:"onSuccess",type:String},{description:'Signal to kill child process, "SIGTERM" or "SIGKILL"',name:"killSignal",type:P(s=>{if(s==="SIGTERM"||s==="SIGKILL")return s;throw new Error("Invalid kill signal. Use 'SIGTERM' or 'SIGKILL'.")},"type")},{description:"Specify an external dependency, separate by comma (eg. --external lodash,react,react-dom)",multiple:!0,name:"external",typeLabel:"string[]"},{description:"do not bundle external dependencies",name:"no-external",type:Boolean},{description:"Specify the build runtime (nodejs, browser).",name:"runtime",type:P(s=>{if(s==="node"||s==="browser")return s;throw new Error("Invalid runtime. Use 'node' or 'browser'.")},"type")},{description:"Enable unbundle mode to preserve source file structure instead of bundling into a single file",name:"unbundle",type:Boolean}]})},"createBuildCommand");var as=Object.defineProperty,x=v((t,s)=>as(t,"name",{value:s,configurable:!0}),"f");const is=x(t=>{t.addCommand({description:"Initialize packem configuration",execute:x(async({logger:s,options:a})=>{const e=a;if(ie("Welcome to packem setup"),L($(e.dir,"packem.config.mjs"))){s.info("Packem project already initialized, you can use `packem build` to build your project");return}const r=I(B(),e.dir??"."),o=$(r,"package.json");if(!L(o))throw new Error("No package.json found in the directory");const n=await z(o,{resolveCatalogs:!0}),i=[];n.dependencies&&i.push(...Object.keys(n.dependencies)),n.devDependencies&&i.push(...Object.keys(n.devDependencies));const l=!!(n.devDependencies?.typescript??n.dependencies?.typescript),u=[];if(e.typescript===void 0&&!l?(e.typescript=await w({message:"Do you want to install TypeScript?"}),e.typescript&&u.push("typescript@latest")):A.message(`TypeScript version ${n.devDependencies?.typescript??n.dependencies?.typescript} is already installed`),!L($(r,"tsconfig.json"))){const c=await w({message:"Do you want to use generate a tsconfig.json?"}),m=await w({message:"Do you want to run your code in the DOM?"});if(c){const S=N();S.start("Generating tsconfig.json"),le($(r,"tsconfig.json"),{compilerOptions:{esModuleInterop:!0,skipLibCheck:!0,target:"es2022",allowJs:!0,resolveJsonModule:!0,moduleDetection:"force",isolatedModules:!0,verbatimModuleSyntax:!0,strict:!0,noUncheckedIndexedAccess:!0,noImplicitOverride:!0,module:"NodeNext",outDir:"dist",sourceMap:!0,declaration:!0,lib:m?["es2022","dom","dom.iterable"]:["es2022"]}}),S.stop("")}}if(e.runtime===void 0&&(e.runtime=await h({message:"Pick a build runtime",options:[{label:"Node",value:"node"},{label:"Browser",value:"browser"}]})),i.includes("esbuild")?e.transformer="esbuild":i.includes("@swc/core")?e.transformer="swc":i.includes("sucrase")&&(e.transformer="sucrase"),e.transformer===void 0?(e.transformer=await h({message:"Pick a transformer",options:[{label:"esbuild",value:"esbuild"},{label:"swc",value:"swc"},{label:"Sucrase",value:"sucrase"},{label:"OXC",value:"oxc"}]}),e.transformer&&e.transformer!=="oxc"&&!i.includes(e.transformer)&&await w({message:`Do you want to install ${e.transformer}?`})&&u.push(e.transformer==="swc"?"@swc/core":e.transformer)):A.message(`Transformer ${e.transformer} is already installed.`),e.isolatedDeclarationTransformer===void 0&&(e.isolatedDeclarationTransformer=await w({message:"Do you want to use an isolated declaration types?",initialValue:!1})),e.isolatedDeclarationTransformer===void 0&&(e.isolatedDeclarationTransformer=await h({message:"Pick a isolated declaration transformer",options:[{label:"Typescript",value:"typescript"},{label:"swc",value:"swc"},{label:"OXC",value:"oxc"},{label:"None",value:void 0}]}),e.isolatedDeclarationTransformer!==void 0)){let c;switch(e.isolatedDeclarationTransformer){case"oxc":{c="oxc-transform";break}case"swc":{c="@swc/core";break}case"typescript":{c="typescript";break}default:G("Invalid isolated declaration transformer")}c!==void 0&&!i.includes(c)&&await w({message:`Do you want to install ${c}?`})&&u.push(c)}e.css===void 0&&(e.css=await w({message:"Do you want to use css in your project?",initialValue:!1}));const f=[];if(e.css){const c=await h({message:"Pick a css loader",options:[{label:"PostCSS",value:"postcss"},{hint:"experimental",label:"Lightning CSS",value:"lightningcss"}]});f.push(c);let m=await U({message:"Pick your loaders",options:[{label:"Sass",value:"sass"},{label:"Stylus",value:"stylus"},{label:"Less",value:"less"}],required:!1});if(m.includes("sass")){const S=await h({message:"Pick a sass loader",options:[{label:"Sass embedded",value:"sass-embedded",hint:"recommended"},{label:"Sass",value:"sass"},{label:"Node Sass",value:"node-sass",hint:"legacy"}]});S!=="sass"&&(m=m.filter(Q=>Q!=="sass"),m.push(S))}if(f.push(...m),await w({message:`Do you want to install "${f.join('", "')}"?`}))for(const S of f)u.push(...X[S]);f.push("sourceMap")}e.cssMinifier===void 0&&(e.cssMinifier=await w({message:"Do you want to minify your css?",initialValue:!1}));let d;e.cssMinifier&&(d=await h({message:"Pick a css minifier",options:[{label:"CSSNano",value:"cssnano"},{label:"Lightning CSS",value:"lightningcss"}]}),f.includes("lightningcss")||await w({message:`Do you want to install "${d}"?`})&&u.push(d));let g="",p="";if(e.isolatedDeclarationTransformer&&(p+=`,
38
+ isolatedDeclarationTransformer`),(e.css||e.cssMinifier)&&(p+=`,
30
39
  rollup: {
31
- css: {`),e.css){const a=o.map(u=>((u==="sass-embedded"||u==="node-sass")&&(u="sass"),`${u}Loader`)).join(", ");l+=`
32
- loaders: [${a}],`}if(e.cssMinifier&&d&&(l+=`
33
- minifier: ${d}Minifier,`),(e.css||e.cssMinifier)&&(l+=`
40
+ css: {`),e.css){const c=f.map(m=>((m==="sass-embedded"||m==="node-sass")&&(m="sass"),`${m}Loader`)).join(", ");p+=`
41
+ loaders: [${c}],`}if(e.cssMinifier&&d&&(p+=`
42
+ minifier: ${d}Minifier,`),(e.css||e.cssMinifier)&&(p+=`
34
43
  }
35
- }`),m||i.type==="module"){let a="";if(e.isolatedDeclarationTransformer&&(a+=`import isolatedDeclarationTransformer from "@visulima/packem/dts/isolated/transformer/${e.isolatedDeclarationTransformer}";
36
- `),e.css)for(let u of o)(u==="sass-embedded"||u==="node-sass")&&(u="sass"),a+=`import ${u}Loader from "@visulima/packem/css/loader/${u.toLowerCase()}";
37
- `;e.cssMinifier&&d&&(a+=`import ${d}Minifier from "@visulima/packem/css/minifier/${d.toLowerCase()}";
38
- `),c=`import { defineConfig } from "@visulima/packem/config";
44
+ }`),l||n.type==="module"){let c="";if(e.isolatedDeclarationTransformer&&(c+=`import isolatedDeclarationTransformer from "@visulima/packem/dts/isolated/transformer/${e.isolatedDeclarationTransformer}";
45
+ `),e.css)for(let m of f)(m==="sass-embedded"||m==="node-sass")&&(m="sass"),c+=`import ${m}Loader from "@visulima/packem/css/loader/${m.toLowerCase()}";
46
+ `;e.cssMinifier&&d&&(c+=`import ${d}Minifier from "@visulima/packem/css/minifier/${d.toLowerCase()}";
47
+ `),g=`import { defineConfig } from "@visulima/packem/config";
39
48
  import transformer from "@visulima/packem/transformer/${e.transformer}";
40
- ${a}
49
+ ${c}
41
50
  export default defineConfig({
42
51
  runtime: "${e.runtime}",
43
- transformer${l}
52
+ transformer${p}
44
53
  });
45
- `}else{let a="";if(e.isolatedDeclarationTransformer&&(a+=`const isolatedDeclarationTransformer = require("@visulima/packem/dts/isolated/transformer/${e.isolatedDeclarationTransformer}");
46
- `),e.css)for(let u of o)(u==="sass-embedded"||u==="node-sass")&&(u="sass"),a+=`const ${u}Loader = require("@visulima/packem/css/loader/${u.toLowerCase()}");
47
- `;e.cssMinifier&&d&&(a+=`const ${d}Minifier = require("@visulima/packem/css/minifier/${d.toLowerCase()}");
48
- `),c=`const { defineConfig } = require("@visulima/packem/config");
54
+ `}else{let c="";if(e.isolatedDeclarationTransformer&&(c+=`const isolatedDeclarationTransformer = require("@visulima/packem/dts/isolated/transformer/${e.isolatedDeclarationTransformer}");
55
+ `),e.css)for(let m of f)(m==="sass-embedded"||m==="node-sass")&&(m="sass"),c+=`const ${m}Loader = require("@visulima/packem/css/loader/${m.toLowerCase()}");
56
+ `;e.cssMinifier&&d&&(c+=`const ${d}Minifier = require("@visulima/packem/css/minifier/${d.toLowerCase()}");
57
+ `),g=`const { defineConfig } = require("@visulima/packem/config");
49
58
  const transformer = require("@visulima/packem/transformer/${e.transformer}");
50
- ${a}
59
+ ${c}
51
60
  module.exports = defineConfig({
52
61
  runtime: ${e.runtime},
53
- transformer${l}
62
+ transformer${p}
54
63
  });
55
- `}const b=K(),v=m?"ts":"js";y.length>0&&(b.start("Installing packages"),await N(y,{cwd:r,dev:!0,silent:!0}),b.stop("Installed packages")),b.start(`Creating packem.config.${v}`),ce(j(r,`packem.config.${v}`),c),b.stop(`Created packem.config.${v}`),oe("Now you can run `packem build` to build your project")},"execute"),name:"init",options:[{defaultValue:".",description:"The directory to initialize",name:"dir",type:String},{description:"Choose a transformer",name:"transformer",type:D(s=>{if(typeof s=="string"&&["esbuild","sucrase","swc"].includes(s))return s;throw new Error("Invalid transformer, please choose one of 'swc', 'sucrase' or 'esbuild'")},"type")},{description:"Choose a isolated declaration transformer",name:"isolated-declaration-transformer",type:D(s=>{if(typeof s=="string"&&["none","oxc","swc","typescript"].includes(s))return s;throw new Error("Invalid isolated declaration isolated declaration, please choose one of 'none', 'oxc', 'swc' or 'typescript'")},"type")},{description:"Use CSS",name:"css",type:Boolean},{description:"Use CSS minifier",name:"css-minifier",type:Boolean},{Description:"Use TypeScript",name:"typescript",type:Boolean},{description:"Specify the build runtime (nodejs, browser).",name:"runtime",type:D(s=>{if(s==="node"||s==="browser")return s;throw new Error("Invalid runtime. Use 'node' or 'browser'.")},"type")}]})},"createInitCommand");try{require("node:module")?.enableCompileCache?.()||require("v8-compile-cache")}catch{}const B=new Q("packem",{logger:{reporters:[new Z({error:{hideErrorCauseCodeView:!0,hideErrorCodeView:!0,hideErrorErrorsCodeView:!0}})],scope:"packem"},packageName:Se,packageVersion:je});_e(B);Fe(B);Pe(B);B.run({shouldExitProcess:!1});
64
+ `}const y=N(),k=l?"ts":"js";u.length>0&&(y.start("Installing packages"),await D(u,{cwd:r,dev:!0,silent:!0}),y.stop("Installed packages")),y.start(`Creating packem.config.${k}`),de($(r,`packem.config.${k}`),g),y.stop(`Created packem.config.${k}`),re("Now you can run `packem build` to build your project")},"execute"),name:"init",options:[{defaultValue:".",description:"The directory to initialize",name:"dir",type:String},{description:"Choose a transformer",name:"transformer",type:x(s=>{if(typeof s=="string"&&["esbuild","sucrase","swc"].includes(s))return s;throw new Error("Invalid transformer, please choose one of 'swc', 'sucrase' or 'esbuild'")},"type")},{description:"Choose a isolated declaration transformer",name:"isolated-declaration-transformer",type:x(s=>{if(typeof s=="string"&&["none","oxc","swc","typescript"].includes(s))return s;throw new Error("Invalid isolated declaration isolated declaration, please choose one of 'none', 'oxc', 'swc' or 'typescript'")},"type")},{description:"Use CSS",name:"css",type:Boolean},{description:"Use CSS minifier",name:"css-minifier",type:Boolean},{Description:"Use TypeScript",name:"typescript",type:Boolean},{description:"Specify the build runtime (nodejs, browser).",name:"runtime",type:x(s=>{if(s==="node"||s==="browser")return s;throw new Error("Invalid runtime. Use 'node' or 'browser'.")},"type")}]})},"createInitCommand");var rs=Object.defineProperty,C=v((t,s)=>rs(t,"name",{value:s,configurable:!0}),"a");const os=C(async({cwd:t,dryRun:s,logger:a})=>{if(s)a.info("Dry run enabled. No changes will be made.");else{const r=he({input:j.stdin,output:j.stdout});a.warn(`
65
+
66
+ Before proceeding, review the migration guide at https://www.visulima.com/docs/package/packem, as this process will modify your files.
67
+ Uncommitted changes will be lost. Use the --dry-run flag to preview changes without applying them.`);const o=await r.question("Continue? (Y/n) ");if(r.close(),!(o.toLowerCase()==="y"||o==="")){a.error("Migration cancelled."),j.exitCode=1;return}}t&&j.chdir(t);let e=!1;await cs(s,a)&&(e=!0),await ds(s,a)&&(e=!0),e?a.success("Migration completed. Remember to run install command with your package manager."):(a.error("No migration performed."),j.exitCode=1)},"migrate"),K={bunchee:"@visulima/packem",tsup:"@visulima/packem","tsup-node":"@visulima/packem",unbuild:"@visulima/packem"},ns={dependencies:`^${q.version}`,devDependencies:`^${q.version}`,peerDependencies:"*"},cs=C(async(t,s)=>{if(!V("package.json"))return s.error("No package.json found"),!1;const a=await we("package.json","utf8"),e=JSON.parse(a);let r=!1;for(const[i,l]of Object.entries(ns))for(const[u,f]of Object.entries(K))e[i]?.[u]&&(s.info(`Migrating \`${i}\` from ${u} to ${f}.`),r=!0,e[i]=ps(e[i],u,f,l));if(e.scripts)for(const i of Object.keys(e.scripts)){for(const[l,u]of Object.entries(K))e.scripts[i].includes(l)&&(s.info(`Migrating \`${i}\` script from ${l} to packem`),r=!0,e.scripts[i]=e.scripts[i].replaceAll(new RegExp(String.raw`\b${l}\b`,"g"),"packem").replaceAll(new RegExp(String.raw`\b${l}-node\b`,"g"),"packem"));e.scripts[i].includes("tsup")&&(s.info(`Migrating \`${i}\` script from tsup to packem`),r=!0,e.scripts[i]=e.scripts[i].replaceAll(/\btsup(?:-node)?/g,"packem build").replaceAll(/\bbuild\b/g,"build")),e.scripts[i].includes("unbuild")&&(s.info(`Migrating \`${i}\` script from unbuild to packem`),r=!0,e.scripts[i]=e.scripts[i].replaceAll(/\bunbuild\b/g,"packem build")),e.scripts[i].includes("bunchee")&&(s.info(`Migrating \`${i}\` script from bunchee to packem`),r=!0,e.scripts[i]=e.scripts[i].replaceAll(/\bbunchee\b/g,"packem build"))}const o=["tsup","unbuild","bunchee"];for(const i of o)e[i]&&s.info(`Found \`${i}\` config field in package.json. Consider moving to packem.config.ts`);if(!r)return s.warn("No migratable bundler dependencies found in package.json"),!1;const n=`${JSON.stringify(e,null,a.includes(" ")?" ":2)}
68
+ `;return t?(s.info("[dry-run] package.json changes:"),s.info("Old content:"),console.info(a),s.info("New content:"),console.info(n)):(await ve("package.json",n),s.success("Migrated `package.json`")),!0},"migratePackageJson"),ls=["tsup.config.ts","tsup.config.cts","tsup.config.mts","tsup.config.js","tsup.config.cjs","tsup.config.mjs","tsup.config.json","build.config.ts","build.config.cts","build.config.mts","build.config.js","build.config.cjs","build.config.mjs","bunchee.config.ts","bunchee.config.cts","bunchee.config.mts","bunchee.config.js","bunchee.config.cjs","bunchee.config.mjs"],ds=C(async(t,s)=>{let a=!1;for(const e of ls)V(e)&&(s.info(`Found config file \`${e}\`. Consider creating packem.config.ts instead.`),s.warn("Manual migration required for config files. See https://www.visulima.com/docs/package/packem"),a=!0);return a||s.warn("No bundler config files found"),a},"migrateConfigFiles"),ps=C((t,s,a,e)=>{const r={};for(const o of Object.keys(t))o===s?r[a]=e||t[s]:r[o]=t[o];return r},"renameKey"),us=C(t=>{t.addCommand({description:"Migrate from other bundlers (tsup, unbuild, bunchee, etc.) to packem",execute:C(async({logger:s,options:a})=>{const e=a;await os({cwd:e.cwd,dryRun:e.dryRun,logger:s})},"execute"),name:"migrate",options:[{defaultValue:".",description:"The directory to migrate",name:"cwd",type:String},{description:"Preview changes without applying them",name:"dry-run",type:Boolean}]})},"createMigrateCommand");try{require("node:module")?.enableCompileCache?.()||require("v8-compile-cache")}catch{}const T=ee("packem",{logger:await se({reporters:[new te({error:{hideErrorCauseCodeView:!0,hideErrorCodeView:!0,hideErrorErrorsCodeView:!0}})],scope:"packem"}),packageName:ke,packageVersion:W});is(T);ts(T);ze(T);us(T);T.run({shouldExitProcess:!1});
@@ -1,28 +1,48 @@
1
- import { B as BuildConfig, c as BuildConfigFunction, d as BuildPreset } from '../packem_shared/types-Dn9KmF6u.js';
2
- export { d as BuildHooks } from '../packem_shared/index-zikl8Yu3.js';
3
- import '@visulima/rollup-css-plugin';
4
- import 'jiti';
5
- import 'typedoc';
6
- import '@rollup/plugin-alias';
7
- import '@rollup/plugin-commonjs';
8
- import '@rollup/plugin-json';
9
- import '@rollup/plugin-node-resolve';
10
- import '@rollup/plugin-replace';
11
- import '@rollup/plugin-wasm';
12
- import '@rollup/pluginutils';
13
- import 'rollup';
14
- import 'rollup-plugin-dts';
15
- import 'rollup-plugin-polyfill-node';
16
- import 'rollup-plugin-pure';
17
- import 'rollup-plugin-visualizer';
18
- import 'esbuild';
19
- import '@visulima/package';
20
- import '@visulima/colorize';
21
- import 'oxc-resolver';
22
- import 'oxc-transform';
23
- import 'sucrase';
24
-
25
- declare const defineConfig: (config: BuildConfig | BuildConfigFunction) => BuildConfig | BuildConfigFunction;
26
- declare const definePreset: (preset: BuildPreset) => BuildPreset;
27
-
28
- export { BuildConfig, BuildConfigFunction, BuildPreset, defineConfig, definePreset };
1
+ import type { BuildConfig, BuildConfigFunction, BuildPreset } from "../types.d.ts";
2
+ export type { BuildConfig, BuildConfigFunction, BuildPreset } from "../types.d.ts";
3
+ export type { BuildHooks } from "@visulima/packem-share/types";
4
+ /**
5
+ * Defines a build configuration for Packem.
6
+ * Supports both static configuration objects and dynamic configuration functions.
7
+ * @param config Static build configuration object or function returning configuration
8
+ * @returns The provided configuration
9
+ * @example
10
+ * ```typescript
11
+ * // Static configuration
12
+ * export default defineConfig({
13
+ * entries: ['./src/index.ts'],
14
+ * outDir: './dist'
15
+ * });
16
+ *
17
+ * // Dynamic configuration
18
+ * export default defineConfig((env, mode) => ({
19
+ * entries: ['./src/index.ts'],
20
+ * outDir: env === 'production' ? './dist' : './dev'
21
+ * }));
22
+ * ```
23
+ * @public
24
+ */
25
+ export declare const defineConfig: (config: BuildConfig | BuildConfigFunction) => BuildConfig | BuildConfigFunction;
26
+ /**
27
+ * Defines a build preset for Packem.
28
+ * Build presets provide reusable configuration templates that can be shared across projects.
29
+ * @param preset Build preset configuration
30
+ * @returns The provided preset configuration
31
+ * @example
32
+ * ```typescript
33
+ * export default definePreset({
34
+ * name: 'my-preset',
35
+ * defaults: {
36
+ * entries: ['./src/index.ts'],
37
+ * outDir: './dist'
38
+ * },
39
+ * hooks: {
40
+ * 'build:before': (context) => {
41
+ * // Custom build preparation logic
42
+ * }
43
+ * }
44
+ * });
45
+ * ```
46
+ * @public
47
+ */
48
+ export declare const definePreset: (preset: BuildPreset) => BuildPreset;
@@ -0,0 +1,3 @@
1
+ import type { BuildConfig } from "../../types.d.ts";
2
+ declare const autoPreset: BuildConfig;
3
+ export default autoPreset;
@@ -0,0 +1,18 @@
1
+ import type { BabelPluginConfig } from "@visulima/packem-rollup/babel";
2
+ import type { BuildConfig } from "../../types.d.ts";
3
+ export interface PreactPresetOptions {
4
+ /**
5
+ * Enable Preact devtools in production builds
6
+ * @default false
7
+ */
8
+ devtoolsInProd?: boolean;
9
+ /**
10
+ * Custom Babel plugins to add
11
+ */
12
+ plugins?: BabelPluginConfig["plugins"];
13
+ /**
14
+ * Custom Babel presets to add
15
+ */
16
+ presets?: BabelPluginConfig["presets"];
17
+ }
18
+ export declare const createPreactPreset: (options?: PreactPresetOptions) => BuildConfig;
@@ -0,0 +1,2 @@
1
+ var A=Object.defineProperty;var f=(o,a)=>A(o,"name",{value:a,configurable:!0});var v=Object.defineProperty,l=f((o,a)=>v(o,"name",{value:a,configurable:!0}),"l");const j=l(()=>({name:"packem:preact-alias-transform",transform(o,a){if(a.includes("/node_modules/"))return;let t=!1,e=o;if((e.includes('from "react"')||e.includes("from 'react'"))&&(e=e.replaceAll(/from\s+["']react["']/g,'from "preact/compat"'),t=!0),(e.includes('from "react-dom"')||e.includes("from 'react-dom'"))&&(e=e.replaceAll(/from\s+["']react-dom["']/g,'from "preact/compat"'),t=!0),(e.includes('from "react-dom/test-utils"')||e.includes("from 'react-dom/test-utils'"))&&(e=e.replaceAll(/from\s+["']react-dom\/test-utils["']/g,'from "preact/test-utils"'),t=!0),(e.includes('from "react-dom/client"')||e.includes("from 'react-dom/client'"))&&(e=e.replaceAll(/from\s+["']react-dom\/client["']/g,'from "preact/compat"'),t=!0),(e.includes('from "react/jsx-runtime"')||e.includes("from 'react/jsx-runtime'"))&&(e=e.replaceAll(/from\s+["']react\/jsx-runtime["']/g,'from "preact/jsx-runtime"'),t=!0),!!t)return{code:e,map:void 0}}}),"createPreactAliasTransformPlugin"),P=l((o,a)=>({name:"packem:preact-devtools",transform(t,e){return!this.getModuleInfo(e)?.isEntry||a&&!o||t.includes("preact/debug")||t.includes("preact/devtools")?void 0:{code:`import "${a?"preact/devtools":"preact/debug"}";
2
+ ${t}`,map:void 0}}}),"createPreactDevtoolsPlugin"),h=l((o={})=>{const{devtoolsInProd:a=!1,plugins:t=[],presets:e=[]}=o,i=[],g=[["@babel/preset-react",{importSource:"preact",runtime:"automatic"}]];i.push("babel-plugin-transform-hook-names");const m=[...i,...Array.isArray(t)?t:[]],p=[...g,...Array.isArray(e)?e:[]];return{hooks:{"rollup:options":l((u,c)=>{const s=u.options.rollup.babel,d=u.environment==="production";if(s&&typeof s=="object"&&s.presets){const r=s.presets.findIndex(n=>Array.isArray(n)&&n[0]==="@babel/preset-react");if(r!==-1){const n=s.presets[r];s.presets[r]=[n[0],{...typeof n[1]=="object"&&n[1]!==null?n[1]:{},development:!d}]}}if(!c.input&&!c.plugins)return;Array.isArray(c.plugins)||(c.plugins=[]);const b=j();c.plugins.some(r=>typeof r=="object"&&r!==null&&"name"in r&&r.name==="packem:preact-alias-transform"||Array.isArray(r)&&r[0]&&typeof r[0]=="object"&&r[0]!==null&&"name"in r[0]&&r[0].name==="packem:preact-alias-transform")||c.plugins.unshift(b);const y=P(a,d);c.plugins.some(r=>typeof r=="object"&&r!==null&&"name"in r&&r.name==="packem:preact-devtools"||Array.isArray(r)&&r[0]&&typeof r[0]=="object"&&r[0]!==null&&"name"in r[0]&&r[0].name==="packem:preact-devtools")||c.plugins.push(y)},"rollup:options")},rollup:{alias:{entries:[{find:"react",replacement:"preact/compat"},{find:"react-dom",replacement:"preact/compat"},{find:"react-dom/test-utils",replacement:"preact/test-utils"},{find:"react/jsx-runtime",replacement:"preact/jsx-runtime"}]},babel:{plugins:m.length>0?m:void 0,presets:p.length>0?p:void 0}},validation:{dependencies:{hoisted:{exclude:["react","react-dom"]},unused:{exclude:["preact","react","react-dom"]}}}}},"createPreactPreset");export{h as createPreactPreset};