jiek 1.1.12 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,3 +1,6 @@
1
+ import * as _rollup_plugin_terser from '@rollup/plugin-terser';
2
+ import * as rollup_plugin_swc3 from 'rollup-plugin-swc3';
3
+ import * as rollup_plugin_esbuild from 'rollup-plugin-esbuild';
1
4
  import { InputPluginOption, OutputOptions } from 'rollup';
2
5
 
3
6
  type Mapping2ROO<K extends keyof OutputOptions> = OutputOptions[K] | {
@@ -14,6 +17,7 @@ interface ConfigGenerateContext {
14
17
  conditionals: string[];
15
18
  }
16
19
  type OutputControl = boolean | ((context: ConfigGenerateContext) => boolean);
20
+ declare const BUILDER_TYPES: readonly ["esbuild", "swc"];
17
21
  interface TemplateOptions {
18
22
  /**
19
23
  * When the user configures type: module, the generated output from entry points that don't
@@ -24,6 +28,18 @@ interface TemplateOptions {
24
28
  * @default true
25
29
  */
26
30
  crossModuleConvertor?: boolean;
31
+ /**
32
+ * Auto-detect the builder from the installed dependencies.
33
+ * If the builder is not installed, it will prompt the user to install it.
34
+ * If exists multiple builders, it will fall back to the 'esbuild'.
35
+ *
36
+ * @default 'esbuild'
37
+ */
38
+ builder?: typeof BUILDER_TYPES[number] | ({
39
+ type: 'esbuild';
40
+ } & rollup_plugin_esbuild.Options) | ({
41
+ type: 'swc';
42
+ } & rollup_plugin_swc3.PluginOptions);
27
43
  output?: {
28
44
  /**
29
45
  * @default true
@@ -32,6 +48,13 @@ interface TemplateOptions {
32
48
  * When minify is set to 'only-minify', the output will direct output minified files.
33
49
  */
34
50
  minify?: boolean | 'only-minify';
51
+ minifyOptions?: typeof BUILDER_TYPES[number] | 'terser' | ({
52
+ type: 'terser';
53
+ } & _rollup_plugin_terser.Options) | ({
54
+ type: 'esbuild';
55
+ } & Parameters<typeof rollup_plugin_esbuild.minify>[0]) | ({
56
+ type: 'swc';
57
+ } & Parameters<typeof rollup_plugin_swc3.minify>[0]);
35
58
  /**
36
59
  * @default 'dist'
37
60
  */
@@ -41,6 +64,10 @@ interface TemplateOptions {
41
64
  js?: OutputControl;
42
65
  dts?: OutputControl;
43
66
  };
67
+ /**
68
+ * Set the external dependencies of the package.
69
+ */
70
+ external?: (string | RegExp)[];
44
71
  plugins?: InputPluginOption | ((type: 'js' | 'dts', context: ConfigGenerateContext) => InputPluginOption) | {
45
72
  js: InputPluginOption;
46
73
  dts?: InputPluginOption;
package/dist/index.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+ import * as _rollup_plugin_terser from '@rollup/plugin-terser';
2
+ import * as rollup_plugin_swc3 from 'rollup-plugin-swc3';
3
+ import * as rollup_plugin_esbuild from 'rollup-plugin-esbuild';
1
4
  import { InputPluginOption, OutputOptions } from 'rollup';
2
5
 
3
6
  type Mapping2ROO<K extends keyof OutputOptions> = OutputOptions[K] | {
@@ -14,6 +17,7 @@ interface ConfigGenerateContext {
14
17
  conditionals: string[];
15
18
  }
16
19
  type OutputControl = boolean | ((context: ConfigGenerateContext) => boolean);
20
+ declare const BUILDER_TYPES: readonly ["esbuild", "swc"];
17
21
  interface TemplateOptions {
18
22
  /**
19
23
  * When the user configures type: module, the generated output from entry points that don't
@@ -24,6 +28,18 @@ interface TemplateOptions {
24
28
  * @default true
25
29
  */
26
30
  crossModuleConvertor?: boolean;
31
+ /**
32
+ * Auto-detect the builder from the installed dependencies.
33
+ * If the builder is not installed, it will prompt the user to install it.
34
+ * If exists multiple builders, it will fall back to the 'esbuild'.
35
+ *
36
+ * @default 'esbuild'
37
+ */
38
+ builder?: typeof BUILDER_TYPES[number] | ({
39
+ type: 'esbuild';
40
+ } & rollup_plugin_esbuild.Options) | ({
41
+ type: 'swc';
42
+ } & rollup_plugin_swc3.PluginOptions);
27
43
  output?: {
28
44
  /**
29
45
  * @default true
@@ -32,6 +48,13 @@ interface TemplateOptions {
32
48
  * When minify is set to 'only-minify', the output will direct output minified files.
33
49
  */
34
50
  minify?: boolean | 'only-minify';
51
+ minifyOptions?: typeof BUILDER_TYPES[number] | 'terser' | ({
52
+ type: 'terser';
53
+ } & _rollup_plugin_terser.Options) | ({
54
+ type: 'esbuild';
55
+ } & Parameters<typeof rollup_plugin_esbuild.minify>[0]) | ({
56
+ type: 'swc';
57
+ } & Parameters<typeof rollup_plugin_swc3.minify>[0]);
35
58
  /**
36
59
  * @default 'dist'
37
60
  */
@@ -41,6 +64,10 @@ interface TemplateOptions {
41
64
  js?: OutputControl;
42
65
  dts?: OutputControl;
43
66
  };
67
+ /**
68
+ * Set the external dependencies of the package.
69
+ */
70
+ external?: (string | RegExp)[];
44
71
  plugins?: InputPluginOption | ((type: 'js' | 'dts', context: ConfigGenerateContext) => InputPluginOption) | {
45
72
  js: InputPluginOption;
46
73
  dts?: InputPluginOption;
@@ -8,11 +8,9 @@ var getWorkspaceDir = require('@jiek/utils/getWorkspaceDir');
8
8
  var commonjs = require('@rollup/plugin-commonjs');
9
9
  var json = require('@rollup/plugin-json');
10
10
  var pluginNodeResolve = require('@rollup/plugin-node-resolve');
11
- var terser = require('@rollup/plugin-terser');
12
11
  var execa = require('execa');
13
12
  var require$$0 = require('util');
14
13
  var require$$0$1 = require('path');
15
- var esbuild = require('rollup-plugin-esbuild');
16
14
  var ts = require('typescript');
17
15
  var node_module = require('node:module');
18
16
  var commander = require('commander');
@@ -27,10 +25,8 @@ var fs__default = /*#__PURE__*/_interopDefault(fs);
27
25
  var path__default = /*#__PURE__*/_interopDefault(path);
28
26
  var commonjs__default = /*#__PURE__*/_interopDefault(commonjs);
29
27
  var json__default = /*#__PURE__*/_interopDefault(json);
30
- var terser__default = /*#__PURE__*/_interopDefault(terser);
31
28
  var require$$0__default = /*#__PURE__*/_interopDefault(require$$0);
32
29
  var require$$0__default$1 = /*#__PURE__*/_interopDefault(require$$0$1);
33
- var esbuild__default = /*#__PURE__*/_interopDefault(esbuild);
34
30
  var ts__default = /*#__PURE__*/_interopDefault(ts);
35
31
 
36
32
  var utils$1 = {};
@@ -4255,9 +4251,6 @@ try {
4255
4251
  type = "pnpm";
4256
4252
  } catch {
4257
4253
  }
4258
- if (type !== "") {
4259
- commander.program.option("-f, --filter <filter>", "filter packages, support fuzzy match and array. e.g. -f core,utils");
4260
- }
4261
4254
 
4262
4255
  let wd;
4263
4256
  let notWorkspace = false;
@@ -4503,13 +4496,28 @@ function externalResolver(jsonOrPath = process.cwd()) {
4503
4496
  const {
4504
4497
  JIEK_ROOT,
4505
4498
  JIEK_NAME,
4499
+ JIEK_BUILDER,
4506
4500
  JIEK_ENTRIES,
4501
+ JIEK_EXTERNAL,
4507
4502
  JIEK_WITHOUT_JS,
4508
4503
  JIEK_WITHOUT_DTS,
4509
4504
  JIEK_WITHOUT_MINIFY,
4505
+ JIEK_MINIFY_TYPE,
4510
4506
  JIEK_NO_CLEAN,
4511
- JIEK_ONLY_MINIFY
4507
+ JIEK_ONLY_MINIFY,
4508
+ JIEK_TSCONFIG,
4509
+ JIEK_DTSCONFIG
4512
4510
  } = process.env;
4511
+ const resolveArrayString = (str) => {
4512
+ const arr = [
4513
+ ...new Set(
4514
+ str?.split(",").map((e) => e.trim()).filter((e) => e.length > 0) ?? []
4515
+ )
4516
+ ];
4517
+ return arr?.length ? arr : void 0;
4518
+ };
4519
+ const entries = resolveArrayString(JIEK_ENTRIES)?.map((e) => ({ "index": "." })[e] ?? e);
4520
+ const commandExternal = resolveArrayString(JIEK_EXTERNAL)?.map((e) => new RegExp(`^${e}$`));
4513
4521
  const WORKSPACE_ROOT = JIEK_ROOT ?? getWorkspaceDir.getWorkspaceDir();
4514
4522
  const COMMON_OPTIONS = {};
4515
4523
  const COMMON_PLUGINS = [
@@ -4521,6 +4529,12 @@ const WITHOUT_MINIFY = JIEK_WITHOUT_MINIFY === "true";
4521
4529
  const ONLY_MINIFY = JIEK_ONLY_MINIFY === "true";
4522
4530
  const CLEAN = JIEK_NO_CLEAN !== "true";
4523
4531
  const MINIFY_DEFAULT_VALUE = WITHOUT_MINIFY ? false : ONLY_MINIFY ? "only-minify" : true;
4532
+ const BUILDER_OPTIONS = {
4533
+ type: JIEK_BUILDER ?? "esbuild"
4534
+ };
4535
+ const MINIFY_OPTIONS = {
4536
+ type: JIEK_MINIFY_TYPE ?? "esbuild"
4537
+ };
4524
4538
  const config = loadConfig({
4525
4539
  root: WORKSPACE_ROOT
4526
4540
  }) ?? {};
@@ -4570,41 +4584,53 @@ const reveal = (obj, keys) => keys.reduce((acc, key) => {
4570
4584
  throw new Error(`key ${key} not found in exports`);
4571
4585
  return acc[key];
4572
4586
  }, obj);
4573
- const withMinify = (output, minify = build?.output?.minify ?? MINIFY_DEFAULT_VALUE) => minify === false ? [output] : minify === "only-minify" ? [{
4574
- ...output,
4575
- // TODO replace suffix when pubish to npm and the `build.output.minify` is 'only-minify'
4576
- // TODO resolve dts output file name
4577
- entryFileNames: (chunkInfo) => typeof output.entryFileNames === "function" ? output.entryFileNames(chunkInfo) : (() => {
4578
- throw new Error("entryFileNames must be a function");
4579
- })(),
4580
- plugins: [
4581
- ...output.plugins ?? [],
4582
- terser__default.default()
4583
- ]
4584
- }] : [
4585
- output,
4586
- {
4587
+ const resolveMinifyOptions = (minifyOptions) => typeof minifyOptions === "string" ? { type: minifyOptions } : minifyOptions ?? { type: "esbuild" };
4588
+ const resolveBuilderOptions = (builder) => typeof builder === "string" ? { type: builder } : builder ?? { type: "esbuild" };
4589
+ const resolvedMinifyOptions = resolveMinifyOptions(build.output?.minifyOptions ?? MINIFY_OPTIONS);
4590
+ const { type: _resolvedMinifyOptionsType, ...noTypeResolvedMinifyOptions } = resolvedMinifyOptions;
4591
+ const resolvedBuilderOptions = resolveBuilderOptions(build.builder ?? BUILDER_OPTIONS);
4592
+ const { type: _resolvedBuilderOptionsType, ...noTypeResolvedBuilderOptions } = resolvedBuilderOptions;
4593
+ const withMinify = (output, minify = build?.output?.minify ?? MINIFY_DEFAULT_VALUE) => {
4594
+ if (minify === false)
4595
+ return [output];
4596
+ const minifyPlugin = resolvedMinifyOptions.type === "esbuild" ? import('rollup-plugin-esbuild').then(({ minify: minify2 }) => minify2(noTypeResolvedMinifyOptions)) : resolvedMinifyOptions.type === "swc" ? import('rollup-plugin-swc3').then(({ minify: minify2 }) => minify2(noTypeResolvedMinifyOptions)) : import('@rollup/plugin-terser').then(({ default: minify2 }) => minify2(noTypeResolvedMinifyOptions));
4597
+ return minify === "only-minify" ? [{
4587
4598
  ...output,
4588
- entryFileNames: (chunkInfo) => typeof output.entryFileNames === "function" ? output.entryFileNames(chunkInfo).replace(/(\.[cm]?js)$/, ".min$1") : (() => {
4599
+ // TODO replace suffix when pubish to npm and the `build.output.minify` is 'only-minify'
4600
+ // TODO resolve dts output file name
4601
+ entryFileNames: (chunkInfo) => typeof output.entryFileNames === "function" ? output.entryFileNames(chunkInfo) : (() => {
4589
4602
  throw new Error("entryFileNames must be a function");
4590
4603
  })(),
4591
- file: output.file?.replace(/(\.[cm]?js)$/, ".min$1"),
4592
4604
  plugins: [
4593
4605
  ...output.plugins ?? [],
4594
- terser__default.default()
4606
+ minifyPlugin
4595
4607
  ]
4596
- }
4597
- ];
4608
+ }] : [
4609
+ output,
4610
+ {
4611
+ ...output,
4612
+ entryFileNames: (chunkInfo) => typeof output.entryFileNames === "function" ? output.entryFileNames(chunkInfo).replace(/(\.[cm]?js)$/, ".min$1") : (() => {
4613
+ throw new Error("entryFileNames must be a function");
4614
+ })(),
4615
+ file: output.file?.replace(/(\.[cm]?js)$/, ".min$1"),
4616
+ plugins: [
4617
+ ...output.plugins ?? [],
4618
+ minifyPlugin
4619
+ ]
4620
+ }
4621
+ ];
4622
+ };
4598
4623
  const generateConfigs = (context, options = {}) => {
4599
4624
  const {
4600
4625
  path: path$1,
4601
4626
  name,
4602
4627
  input,
4603
4628
  output,
4604
- external,
4629
+ external: inputExternal,
4605
4630
  pkgIsModule,
4606
4631
  conditionals
4607
4632
  } = context;
4633
+ const external = [...inputExternal, ...options.external ?? [], ...commandExternal ?? []];
4608
4634
  const isModule = conditionals.includes("import");
4609
4635
  const isCommonJS = conditionals.includes("require");
4610
4636
  const isBrowser = conditionals.includes("browser");
@@ -4612,12 +4638,25 @@ const generateConfigs = (context, options = {}) => {
4612
4638
  resolveWorkspacePath("tsconfig.json"),
4613
4639
  resolveWorkspacePath("tsconfig.dts.json")
4614
4640
  ];
4641
+ JIEK_TSCONFIG && dtsTSConfigPaths.push(resolveWorkspacePath(JIEK_TSCONFIG));
4642
+ JIEK_DTSCONFIG && dtsTSConfigPaths.push(resolveWorkspacePath(JIEK_DTSCONFIG));
4643
+ const buildTSConfigPaths = [
4644
+ ...dtsTSConfigPaths,
4645
+ resolveWorkspacePath("tsconfig.build.json")
4646
+ ];
4647
+ JIEK_TSCONFIG && buildTSConfigPaths.push(resolveWorkspacePath(JIEK_TSCONFIG));
4615
4648
  let dtsTSConfigPath;
4616
4649
  dtsTSConfigPaths.forEach((p) => {
4617
4650
  if (fs__default.default.existsSync(p) && fs__default.default.statSync(p).isFile()) {
4618
4651
  dtsTSConfigPath = p;
4619
4652
  }
4620
4653
  });
4654
+ let buildTSConfigPath;
4655
+ buildTSConfigPaths.forEach((p) => {
4656
+ if (fs__default.default.existsSync(p) && fs__default.default.statSync(p).isFile()) {
4657
+ buildTSConfigPath = p;
4658
+ }
4659
+ });
4621
4660
  let compilerOptions = {};
4622
4661
  if (dtsTSConfigPath) {
4623
4662
  const jsonCompilerOptions = getCompilerOptionsByFilePath(dtsTSConfigPath, path.resolve(input));
@@ -4654,6 +4693,23 @@ const generateConfigs = (context, options = {}) => {
4654
4693
  const rollupOptions = [];
4655
4694
  const commonPlugins = [];
4656
4695
  if (jsOutput && !WITHOUT_JS) {
4696
+ const sourcemap = typeof options?.output?.sourcemap === "object" ? options.output.sourcemap.js : options?.output?.sourcemap;
4697
+ const builder = resolvedBuilderOptions.type === "esbuild" ? import('rollup-plugin-esbuild').then(
4698
+ ({ default: esbuild }) => esbuild({
4699
+ sourceMap: sourcemap === "hidden" ? false : !!sourcemap,
4700
+ tsconfig: buildTSConfigPath,
4701
+ ...noTypeResolvedBuilderOptions
4702
+ })
4703
+ ) : import('rollup-plugin-swc3').then(
4704
+ ({ default: swc }) => swc({
4705
+ sourceMaps: typeof sourcemap === "boolean" ? sourcemap : typeof sourcemap === "undefined" ? void 0 : {
4706
+ hidden: false,
4707
+ inline: "inline"
4708
+ }[sourcemap] ?? void 0,
4709
+ tsconfig: buildTSConfigPath,
4710
+ ...noTypeResolvedBuilderOptions
4711
+ })
4712
+ );
4657
4713
  rollupOptions.push({
4658
4714
  input: inputObj,
4659
4715
  external,
@@ -4663,7 +4719,7 @@ const generateConfigs = (context, options = {}) => {
4663
4719
  name,
4664
4720
  interop: "auto",
4665
4721
  entryFileNames: (chunkInfo) => Array.isArray(inputObj) ? chunkInfo.facadeModuleId.replace(`${process.cwd()}/`, "").replace(globCommonDir, pathCommonDir).replace(/(\.[cm]?)ts$/, jsOutputSuffix) : output.replace(`${jsOutdir}/`, ""),
4666
- sourcemap: typeof options?.output?.sourcemap === "object" ? options.output.sourcemap.js : options?.output?.sourcemap,
4722
+ sourcemap,
4667
4723
  format: isModule ? "esm" : isCommonJS ? "cjs" : isBrowser ? "umd" : pkgIsModule ? "esm" : "cjs",
4668
4724
  strict: typeof options?.output?.strict === "object" ? options.output.strict.js : options?.output?.strict
4669
4725
  })
@@ -4677,9 +4733,7 @@ const generateConfigs = (context, options = {}) => {
4677
4733
  minimize: true
4678
4734
  })
4679
4735
  ).catch(() => void 0),
4680
- esbuild__default.default({
4681
- tsconfig: dtsTSConfigPath
4682
- }),
4736
+ builder,
4683
4737
  commonjs__default.default(),
4684
4738
  progress({
4685
4739
  onEvent: (event, message) => execa.sendMessage(
@@ -4712,7 +4766,6 @@ const generateConfigs = (context, options = {}) => {
4712
4766
  rollupPluginDts.dts({
4713
4767
  respectExternal: true,
4714
4768
  compilerOptions: {
4715
- ...compilerOptions,
4716
4769
  // temp directory, it not affect the output
4717
4770
  // but if the user not set it and `declaration`, inputs can't generate any dts files when the input relative imports of `package.json`
4718
4771
  outDir: "dist",
@@ -4722,7 +4775,8 @@ const generateConfigs = (context, options = {}) => {
4722
4775
  // Expected '{', got 'type' (Note that you need plugins to import files that are not JavaScript)
4723
4776
  // https://github.com/Swatinem/rollup-plugin-dts/issues/96
4724
4777
  noEmit: false
4725
- }
4778
+ },
4779
+ tsconfig: dtsTSConfigPath
4726
4780
  }),
4727
4781
  progress({
4728
4782
  onEvent: (event, message) => execa.sendMessage(
@@ -4736,18 +4790,20 @@ const generateConfigs = (context, options = {}) => {
4736
4790
  ]
4737
4791
  });
4738
4792
  }
4739
- rollupOptions[0].plugins = [
4740
- {
4741
- name: "jiek-plugin-watcher",
4742
- watchChange: (id) => execa.sendMessage(
4743
- {
4744
- type: "watchChange",
4745
- data: { id, name: JIEK_NAME, path: path$1, input }
4746
- }
4747
- )
4748
- },
4749
- ...rollupOptions[0].plugins
4750
- ];
4793
+ if (rollupOptions.length > 0) {
4794
+ rollupOptions[0].plugins = [
4795
+ {
4796
+ name: "jiek-plugin-watcher",
4797
+ watchChange: (id) => execa.sendMessage(
4798
+ {
4799
+ type: "watchChange",
4800
+ data: { id, name: JIEK_NAME, path: path$1, input }
4801
+ }
4802
+ )
4803
+ },
4804
+ ...rollupOptions[0].plugins
4805
+ ];
4806
+ }
4751
4807
  return rollupOptions;
4752
4808
  };
4753
4809
  function template(packageJSON) {
@@ -4757,9 +4813,6 @@ function template(packageJSON) {
4757
4813
  throw new Error("package.json name is required");
4758
4814
  if (!entrypoints$1)
4759
4815
  throw new Error("package.json exports is required");
4760
- const entries = JIEK_ENTRIES?.split(",").map((e) => e.trim()).map((e) => ({
4761
- "index": "."
4762
- })[e] ?? e);
4763
4816
  const packageName = pascalCase(name);
4764
4817
  const external = externalResolver(packageJSON);
4765
4818
  const [filteredResolvedEntrypoints, exports] = getExports({
@@ -6,11 +6,9 @@ import { isWorkspaceDir, getWorkspaceDir } from '@jiek/utils/getWorkspaceDir';
6
6
  import commonjs from '@rollup/plugin-commonjs';
7
7
  import json from '@rollup/plugin-json';
8
8
  import { nodeResolve } from '@rollup/plugin-node-resolve';
9
- import terser from '@rollup/plugin-terser';
10
9
  import { sendMessage } from 'execa';
11
10
  import require$$0 from 'util';
12
11
  import require$$0$1 from 'path';
13
- import esbuild from 'rollup-plugin-esbuild';
14
12
  import ts from 'typescript';
15
13
  import { createRequire, builtinModules } from 'node:module';
16
14
  import { program } from 'commander';
@@ -4240,9 +4238,6 @@ try {
4240
4238
  type = "pnpm";
4241
4239
  } catch {
4242
4240
  }
4243
- if (type !== "") {
4244
- program.option("-f, --filter <filter>", "filter packages, support fuzzy match and array. e.g. -f core,utils");
4245
- }
4246
4241
 
4247
4242
  let wd;
4248
4243
  let notWorkspace = false;
@@ -4488,13 +4483,28 @@ function externalResolver(jsonOrPath = process.cwd()) {
4488
4483
  const {
4489
4484
  JIEK_ROOT,
4490
4485
  JIEK_NAME,
4486
+ JIEK_BUILDER,
4491
4487
  JIEK_ENTRIES,
4488
+ JIEK_EXTERNAL,
4492
4489
  JIEK_WITHOUT_JS,
4493
4490
  JIEK_WITHOUT_DTS,
4494
4491
  JIEK_WITHOUT_MINIFY,
4492
+ JIEK_MINIFY_TYPE,
4495
4493
  JIEK_NO_CLEAN,
4496
- JIEK_ONLY_MINIFY
4494
+ JIEK_ONLY_MINIFY,
4495
+ JIEK_TSCONFIG,
4496
+ JIEK_DTSCONFIG
4497
4497
  } = process.env;
4498
+ const resolveArrayString = (str) => {
4499
+ const arr = [
4500
+ ...new Set(
4501
+ str?.split(",").map((e) => e.trim()).filter((e) => e.length > 0) ?? []
4502
+ )
4503
+ ];
4504
+ return arr?.length ? arr : void 0;
4505
+ };
4506
+ const entries = resolveArrayString(JIEK_ENTRIES)?.map((e) => ({ "index": "." })[e] ?? e);
4507
+ const commandExternal = resolveArrayString(JIEK_EXTERNAL)?.map((e) => new RegExp(`^${e}$`));
4498
4508
  const WORKSPACE_ROOT = JIEK_ROOT ?? getWorkspaceDir();
4499
4509
  const COMMON_OPTIONS = {};
4500
4510
  const COMMON_PLUGINS = [
@@ -4506,6 +4516,12 @@ const WITHOUT_MINIFY = JIEK_WITHOUT_MINIFY === "true";
4506
4516
  const ONLY_MINIFY = JIEK_ONLY_MINIFY === "true";
4507
4517
  const CLEAN = JIEK_NO_CLEAN !== "true";
4508
4518
  const MINIFY_DEFAULT_VALUE = WITHOUT_MINIFY ? false : ONLY_MINIFY ? "only-minify" : true;
4519
+ const BUILDER_OPTIONS = {
4520
+ type: JIEK_BUILDER ?? "esbuild"
4521
+ };
4522
+ const MINIFY_OPTIONS = {
4523
+ type: JIEK_MINIFY_TYPE ?? "esbuild"
4524
+ };
4509
4525
  const config = loadConfig({
4510
4526
  root: WORKSPACE_ROOT
4511
4527
  }) ?? {};
@@ -4555,41 +4571,53 @@ const reveal = (obj, keys) => keys.reduce((acc, key) => {
4555
4571
  throw new Error(`key ${key} not found in exports`);
4556
4572
  return acc[key];
4557
4573
  }, obj);
4558
- const withMinify = (output, minify = build?.output?.minify ?? MINIFY_DEFAULT_VALUE) => minify === false ? [output] : minify === "only-minify" ? [{
4559
- ...output,
4560
- // TODO replace suffix when pubish to npm and the `build.output.minify` is 'only-minify'
4561
- // TODO resolve dts output file name
4562
- entryFileNames: (chunkInfo) => typeof output.entryFileNames === "function" ? output.entryFileNames(chunkInfo) : (() => {
4563
- throw new Error("entryFileNames must be a function");
4564
- })(),
4565
- plugins: [
4566
- ...output.plugins ?? [],
4567
- terser()
4568
- ]
4569
- }] : [
4570
- output,
4571
- {
4574
+ const resolveMinifyOptions = (minifyOptions) => typeof minifyOptions === "string" ? { type: minifyOptions } : minifyOptions ?? { type: "esbuild" };
4575
+ const resolveBuilderOptions = (builder) => typeof builder === "string" ? { type: builder } : builder ?? { type: "esbuild" };
4576
+ const resolvedMinifyOptions = resolveMinifyOptions(build.output?.minifyOptions ?? MINIFY_OPTIONS);
4577
+ const { type: _resolvedMinifyOptionsType, ...noTypeResolvedMinifyOptions } = resolvedMinifyOptions;
4578
+ const resolvedBuilderOptions = resolveBuilderOptions(build.builder ?? BUILDER_OPTIONS);
4579
+ const { type: _resolvedBuilderOptionsType, ...noTypeResolvedBuilderOptions } = resolvedBuilderOptions;
4580
+ const withMinify = (output, minify = build?.output?.minify ?? MINIFY_DEFAULT_VALUE) => {
4581
+ if (minify === false)
4582
+ return [output];
4583
+ const minifyPlugin = resolvedMinifyOptions.type === "esbuild" ? import('rollup-plugin-esbuild').then(({ minify: minify2 }) => minify2(noTypeResolvedMinifyOptions)) : resolvedMinifyOptions.type === "swc" ? import('rollup-plugin-swc3').then(({ minify: minify2 }) => minify2(noTypeResolvedMinifyOptions)) : import('@rollup/plugin-terser').then(({ default: minify2 }) => minify2(noTypeResolvedMinifyOptions));
4584
+ return minify === "only-minify" ? [{
4572
4585
  ...output,
4573
- entryFileNames: (chunkInfo) => typeof output.entryFileNames === "function" ? output.entryFileNames(chunkInfo).replace(/(\.[cm]?js)$/, ".min$1") : (() => {
4586
+ // TODO replace suffix when pubish to npm and the `build.output.minify` is 'only-minify'
4587
+ // TODO resolve dts output file name
4588
+ entryFileNames: (chunkInfo) => typeof output.entryFileNames === "function" ? output.entryFileNames(chunkInfo) : (() => {
4574
4589
  throw new Error("entryFileNames must be a function");
4575
4590
  })(),
4576
- file: output.file?.replace(/(\.[cm]?js)$/, ".min$1"),
4577
4591
  plugins: [
4578
4592
  ...output.plugins ?? [],
4579
- terser()
4593
+ minifyPlugin
4580
4594
  ]
4581
- }
4582
- ];
4595
+ }] : [
4596
+ output,
4597
+ {
4598
+ ...output,
4599
+ entryFileNames: (chunkInfo) => typeof output.entryFileNames === "function" ? output.entryFileNames(chunkInfo).replace(/(\.[cm]?js)$/, ".min$1") : (() => {
4600
+ throw new Error("entryFileNames must be a function");
4601
+ })(),
4602
+ file: output.file?.replace(/(\.[cm]?js)$/, ".min$1"),
4603
+ plugins: [
4604
+ ...output.plugins ?? [],
4605
+ minifyPlugin
4606
+ ]
4607
+ }
4608
+ ];
4609
+ };
4583
4610
  const generateConfigs = (context, options = {}) => {
4584
4611
  const {
4585
4612
  path,
4586
4613
  name,
4587
4614
  input,
4588
4615
  output,
4589
- external,
4616
+ external: inputExternal,
4590
4617
  pkgIsModule,
4591
4618
  conditionals
4592
4619
  } = context;
4620
+ const external = [...inputExternal, ...options.external ?? [], ...commandExternal ?? []];
4593
4621
  const isModule = conditionals.includes("import");
4594
4622
  const isCommonJS = conditionals.includes("require");
4595
4623
  const isBrowser = conditionals.includes("browser");
@@ -4597,12 +4625,25 @@ const generateConfigs = (context, options = {}) => {
4597
4625
  resolveWorkspacePath("tsconfig.json"),
4598
4626
  resolveWorkspacePath("tsconfig.dts.json")
4599
4627
  ];
4628
+ JIEK_TSCONFIG && dtsTSConfigPaths.push(resolveWorkspacePath(JIEK_TSCONFIG));
4629
+ JIEK_DTSCONFIG && dtsTSConfigPaths.push(resolveWorkspacePath(JIEK_DTSCONFIG));
4630
+ const buildTSConfigPaths = [
4631
+ ...dtsTSConfigPaths,
4632
+ resolveWorkspacePath("tsconfig.build.json")
4633
+ ];
4634
+ JIEK_TSCONFIG && buildTSConfigPaths.push(resolveWorkspacePath(JIEK_TSCONFIG));
4600
4635
  let dtsTSConfigPath;
4601
4636
  dtsTSConfigPaths.forEach((p) => {
4602
4637
  if (fs.existsSync(p) && fs.statSync(p).isFile()) {
4603
4638
  dtsTSConfigPath = p;
4604
4639
  }
4605
4640
  });
4641
+ let buildTSConfigPath;
4642
+ buildTSConfigPaths.forEach((p) => {
4643
+ if (fs.existsSync(p) && fs.statSync(p).isFile()) {
4644
+ buildTSConfigPath = p;
4645
+ }
4646
+ });
4606
4647
  let compilerOptions = {};
4607
4648
  if (dtsTSConfigPath) {
4608
4649
  const jsonCompilerOptions = getCompilerOptionsByFilePath(dtsTSConfigPath, resolve(input));
@@ -4639,6 +4680,23 @@ const generateConfigs = (context, options = {}) => {
4639
4680
  const rollupOptions = [];
4640
4681
  const commonPlugins = [];
4641
4682
  if (jsOutput && !WITHOUT_JS) {
4683
+ const sourcemap = typeof options?.output?.sourcemap === "object" ? options.output.sourcemap.js : options?.output?.sourcemap;
4684
+ const builder = resolvedBuilderOptions.type === "esbuild" ? import('rollup-plugin-esbuild').then(
4685
+ ({ default: esbuild }) => esbuild({
4686
+ sourceMap: sourcemap === "hidden" ? false : !!sourcemap,
4687
+ tsconfig: buildTSConfigPath,
4688
+ ...noTypeResolvedBuilderOptions
4689
+ })
4690
+ ) : import('rollup-plugin-swc3').then(
4691
+ ({ default: swc }) => swc({
4692
+ sourceMaps: typeof sourcemap === "boolean" ? sourcemap : typeof sourcemap === "undefined" ? void 0 : {
4693
+ hidden: false,
4694
+ inline: "inline"
4695
+ }[sourcemap] ?? void 0,
4696
+ tsconfig: buildTSConfigPath,
4697
+ ...noTypeResolvedBuilderOptions
4698
+ })
4699
+ );
4642
4700
  rollupOptions.push({
4643
4701
  input: inputObj,
4644
4702
  external,
@@ -4648,7 +4706,7 @@ const generateConfigs = (context, options = {}) => {
4648
4706
  name,
4649
4707
  interop: "auto",
4650
4708
  entryFileNames: (chunkInfo) => Array.isArray(inputObj) ? chunkInfo.facadeModuleId.replace(`${process.cwd()}/`, "").replace(globCommonDir, pathCommonDir).replace(/(\.[cm]?)ts$/, jsOutputSuffix) : output.replace(`${jsOutdir}/`, ""),
4651
- sourcemap: typeof options?.output?.sourcemap === "object" ? options.output.sourcemap.js : options?.output?.sourcemap,
4709
+ sourcemap,
4652
4710
  format: isModule ? "esm" : isCommonJS ? "cjs" : isBrowser ? "umd" : pkgIsModule ? "esm" : "cjs",
4653
4711
  strict: typeof options?.output?.strict === "object" ? options.output.strict.js : options?.output?.strict
4654
4712
  })
@@ -4662,9 +4720,7 @@ const generateConfigs = (context, options = {}) => {
4662
4720
  minimize: true
4663
4721
  })
4664
4722
  ).catch(() => void 0),
4665
- esbuild({
4666
- tsconfig: dtsTSConfigPath
4667
- }),
4723
+ builder,
4668
4724
  commonjs(),
4669
4725
  progress({
4670
4726
  onEvent: (event, message) => sendMessage(
@@ -4697,7 +4753,6 @@ const generateConfigs = (context, options = {}) => {
4697
4753
  dts({
4698
4754
  respectExternal: true,
4699
4755
  compilerOptions: {
4700
- ...compilerOptions,
4701
4756
  // temp directory, it not affect the output
4702
4757
  // but if the user not set it and `declaration`, inputs can't generate any dts files when the input relative imports of `package.json`
4703
4758
  outDir: "dist",
@@ -4707,7 +4762,8 @@ const generateConfigs = (context, options = {}) => {
4707
4762
  // Expected '{', got 'type' (Note that you need plugins to import files that are not JavaScript)
4708
4763
  // https://github.com/Swatinem/rollup-plugin-dts/issues/96
4709
4764
  noEmit: false
4710
- }
4765
+ },
4766
+ tsconfig: dtsTSConfigPath
4711
4767
  }),
4712
4768
  progress({
4713
4769
  onEvent: (event, message) => sendMessage(
@@ -4721,18 +4777,20 @@ const generateConfigs = (context, options = {}) => {
4721
4777
  ]
4722
4778
  });
4723
4779
  }
4724
- rollupOptions[0].plugins = [
4725
- {
4726
- name: "jiek-plugin-watcher",
4727
- watchChange: (id) => sendMessage(
4728
- {
4729
- type: "watchChange",
4730
- data: { id, name: JIEK_NAME, path, input }
4731
- }
4732
- )
4733
- },
4734
- ...rollupOptions[0].plugins
4735
- ];
4780
+ if (rollupOptions.length > 0) {
4781
+ rollupOptions[0].plugins = [
4782
+ {
4783
+ name: "jiek-plugin-watcher",
4784
+ watchChange: (id) => sendMessage(
4785
+ {
4786
+ type: "watchChange",
4787
+ data: { id, name: JIEK_NAME, path, input }
4788
+ }
4789
+ )
4790
+ },
4791
+ ...rollupOptions[0].plugins
4792
+ ];
4793
+ }
4736
4794
  return rollupOptions;
4737
4795
  };
4738
4796
  function template(packageJSON) {
@@ -4742,9 +4800,6 @@ function template(packageJSON) {
4742
4800
  throw new Error("package.json name is required");
4743
4801
  if (!entrypoints)
4744
4802
  throw new Error("package.json exports is required");
4745
- const entries = JIEK_ENTRIES?.split(",").map((e) => e.trim()).map((e) => ({
4746
- "index": "."
4747
- })[e] ?? e);
4748
4803
  const packageName = pascalCase(name);
4749
4804
  const external = externalResolver(packageJSON);
4750
4805
  const [filteredResolvedEntrypoints, exports] = getExports({