jiek 0.4.7-alpha.3 → 0.4.7-alpha.4

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/cli.js CHANGED
@@ -1,45 +1,24 @@
1
- 'use strict';
2
-
3
- var fs = require('node:fs');
4
- var path = require('node:path');
5
- var filterWorkspacePackages = require('@pnpm/filter-workspace-packages');
6
- var commander = require('commander');
7
- var jsYaml = require('js-yaml');
8
- var getWorkspaceDir = require('@jiek/utils/getWorkspaceDir');
9
- var cliProgress = require('cli-progress');
10
- var execa = require('execa');
11
- var detectIndent = require('detect-indent');
12
- var inquirer = require('inquirer');
13
- var jsoncParser = require('jsonc-parser');
14
- var micromatch = require('micromatch');
15
- var childProcess = require('node:child_process');
16
- var bumper = require('@jiek/utils/bumper');
17
- var entrypoints = require('@jiek/pkger/entrypoints');
18
-
19
- function _interopNamespaceDefault(e) {
20
- var n = Object.create(null);
21
- if (e) {
22
- Object.keys(e).forEach(function (k) {
23
- if (k !== 'default') {
24
- var d = Object.getOwnPropertyDescriptor(e, k);
25
- Object.defineProperty(n, k, d.get ? d : {
26
- enumerable: true,
27
- get: function () { return e[k]; }
28
- });
29
- }
30
- });
31
- }
32
- n.default = e;
33
- return Object.freeze(n);
34
- }
35
-
36
- var childProcess__namespace = /*#__PURE__*/_interopNamespaceDefault(childProcess);
1
+ import fs from 'node:fs';
2
+ import path, { resolve as resolve$1, relative } from 'node:path';
3
+ import { filterPackagesFromDir } from '@pnpm/filter-workspace-packages';
4
+ import { program } from 'commander';
5
+ import { load } from 'js-yaml';
6
+ import { isWorkspaceDir, getWorkspaceDir } from '@jiek/utils/getWorkspaceDir';
7
+ import { MultiBar, Presets } from 'cli-progress';
8
+ import { execaCommand } from 'execa';
9
+ import detectIndent from 'detect-indent';
10
+ import inquirer from 'inquirer';
11
+ import { applyEdits, modify } from 'jsonc-parser';
12
+ import { isMatch } from 'micromatch';
13
+ import * as childProcess from 'node:child_process';
14
+ import { bump } from '@jiek/utils/bumper';
15
+ import { resolveEntrypoints, filterLeafs, DEFAULT_SKIP_VALUES, entrypoints2Exports } from '@jiek/pkger/entrypoints';
37
16
 
38
17
  let root;
39
18
  function getRoot() {
40
19
  if (root)
41
20
  return root;
42
- const rootOption = commander.program.getOptionValue("root");
21
+ const rootOption = program.getOptionValue("root");
43
22
  root = rootOption ? path.isAbsolute(rootOption) ? rootOption : path.resolve(process.cwd(), rootOption) : void 0;
44
23
  return root;
45
24
  }
@@ -51,13 +30,13 @@ function getWD() {
51
30
  return { wd, notWorkspace };
52
31
  const root = getRoot();
53
32
  if (root !== void 0) {
54
- const isWorkspace = getWorkspaceDir.isWorkspaceDir(root, type);
33
+ const isWorkspace = isWorkspaceDir(root, type);
55
34
  notWorkspace = !isWorkspace;
56
35
  wd = root;
57
36
  return { wd, notWorkspace };
58
37
  }
59
38
  try {
60
- wd = getWorkspaceDir.getWorkspaceDir(type);
39
+ wd = getWorkspaceDir(type);
61
40
  } catch (e) {
62
41
  if ("message" in e && e.message === "workspace root not found") {
63
42
  wd = root;
@@ -76,16 +55,16 @@ try {
76
55
  } catch {
77
56
  }
78
57
  if (type !== "") {
79
- commander.program.option("-f, --filter <filter>", "filter packages");
58
+ program.option("-f, --filter <filter>", "filter packages");
80
59
  }
81
60
  async function getSelectedProjectsGraph() {
82
- let filter = commander.program.getOptionValue("filter");
61
+ let filter = program.getOptionValue("filter");
83
62
  const root = getRoot();
84
63
  const { wd, notWorkspace } = getWD();
85
64
  if (!notWorkspace && type === "pnpm") {
86
65
  const pnpmWorkspaceFilePath = path.resolve(wd, "pnpm-workspace.yaml");
87
66
  const pnpmWorkspaceFileContent = fs.readFileSync(pnpmWorkspaceFilePath, "utf-8");
88
- const pnpmWorkspace = jsYaml.load(pnpmWorkspaceFileContent);
67
+ const pnpmWorkspace = load(pnpmWorkspaceFileContent);
89
68
  if (root === wd && !filter) {
90
69
  throw new Error("root path is workspace root, please provide a filter");
91
70
  }
@@ -100,7 +79,7 @@ async function getSelectedProjectsGraph() {
100
79
  }
101
80
  filter = packageJSON.name;
102
81
  }
103
- const { selectedProjectsGraph } = await filterWorkspacePackages.filterPackagesFromDir(wd, [{
82
+ const { selectedProjectsGraph } = await filterPackagesFromDir(wd, [{
104
83
  filter: filter ?? "",
105
84
  followProdDepsOnly: true
106
85
  }], {
@@ -128,7 +107,7 @@ async function getSelectedProjectsGraph() {
128
107
 
129
108
  var pkg = require("../package.json");
130
109
 
131
- commander.program.version(pkg.version).description(pkg.description).option("--root <root>", "root path").option("-c, --config-path <configPath>", "config path");
110
+ program.version(pkg.version).description(pkg.description).option("--root <root>", "root path").option("-c, --config-path <configPath>", "config path");
132
111
 
133
112
  let resolve;
134
113
  function actionDone() {
@@ -193,7 +172,7 @@ function getConfigPath(root, dir) {
193
172
  }
194
173
  function loadConfig(dir) {
195
174
  const { wd: root } = getWD();
196
- let configPath = commander.program.getOptionValue("configPath");
175
+ let configPath = program.getOptionValue("configPath");
197
176
  if (!configPath) {
198
177
  configPath = getConfigPath(root, dir);
199
178
  } else {
@@ -213,7 +192,7 @@ function loadConfig(dir) {
213
192
  case ".json":
214
193
  return require(configPath);
215
194
  case ".yaml":
216
- return jsYaml.load(fs.readFileSync(configPath, "utf-8"));
195
+ return load(fs.readFileSync(configPath, "utf-8"));
217
196
  case ".ts":
218
197
  if (tsRegisterName) {
219
198
  require(tsRegisterName);
@@ -238,7 +217,7 @@ const FILE_TEMPLATE = (manifest) => `
238
217
  const manifest = ${JSON.stringify(manifest, null, 2)}
239
218
  module.exports = require('jiek/rollup').template(manifest)
240
219
  `.trimStart();
241
- commander.program.command("build").option("-s, --silent", "Don't display logs.").option("-e, --entries <ENTRIES>", "Specify the entries of the package.json's 'exports' field.(support glob)").action(async ({
220
+ program.command("build").option("-s, --silent", "Don't display logs.").option("-e, --entries <ENTRIES>", "Specify the entries of the package.json's 'exports' field.(support glob)").action(async ({
242
221
  silent,
243
222
  entries
244
223
  }) => {
@@ -261,11 +240,11 @@ commander.program.command("build").option("-s, --silent", "Don't display logs.")
261
240
  fs.mkdirSync(jiekTempDir());
262
241
  }
263
242
  const rollupBinaryPath = require.resolve("rollup").replace(/dist\/rollup.js$/, "dist/bin/rollup");
264
- const multiBars = new cliProgress.MultiBar({
243
+ const multiBars = new MultiBar({
265
244
  clearOnComplete: false,
266
245
  hideCursor: true,
267
246
  format: "- {bar} | {status} | {input} | {message}"
268
- }, cliProgress.Presets.shades_classic);
247
+ }, Presets.shades_classic);
269
248
  let i = 0;
270
249
  await Promise.all(
271
250
  Object.entries(value).map(async ([dir, manifest]) => {
@@ -279,7 +258,7 @@ commander.program.command("build").option("-s, --silent", "Don't display logs.")
279
258
  prefix = `node -r ${tsRegisterName} `;
280
259
  }
281
260
  const command = `${prefix}${rollupBinaryPath} --silent -c ${configFile}`;
282
- const child = execa.execaCommand(command, {
261
+ const child = execaCommand(command, {
283
262
  ipc: true,
284
263
  cwd: dir,
285
264
  env: {
@@ -453,12 +432,12 @@ async function getName(named, name, {
453
432
  }
454
433
  } else {
455
434
  for (const [key, value] of Object.entries(named)) {
456
- if (micromatch.isMatch(relativePath, key)) {
435
+ if (isMatch(relativePath, key)) {
457
436
  matchedKey = key;
458
437
  matchedRule = value;
459
438
  break;
460
439
  }
461
- if (micromatch.isMatch(`${relativePath}/jiek_ignore_dont_use_same_file_name`, key)) {
440
+ if (isMatch(`${relativePath}/jiek_ignore_dont_use_same_file_name`, key)) {
462
441
  isParentMatched = true;
463
442
  matchedKey = key;
464
443
  matchedRule = value;
@@ -498,8 +477,8 @@ async function getName(named, name, {
498
477
  }
499
478
  throw new Error("no matched rule");
500
479
  }
501
- commander.program.command("init [name]").option("-t, --template <template>", "the package.json template file path or file content").action(async () => {
502
- const [, name] = commander.program.args;
480
+ program.command("init [name]").option("-t, --template <template>", "the package.json template file path or file content").action(async () => {
481
+ const [, name] = program.args;
503
482
  const cwd = process.cwd();
504
483
  const { init = {} } = loadConfig() ?? {};
505
484
  const { wd } = getWD();
@@ -533,9 +512,9 @@ commander.program.command("init [name]").option("-t, --template <template>", "th
533
512
  ];
534
513
  let newJSONString = templateString;
535
514
  for (const field of passFields) {
536
- newJSONString = jsoncParser.applyEdits(
515
+ newJSONString = applyEdits(
537
516
  newJSONString,
538
- jsoncParser.modify(
517
+ modify(
539
518
  newJSONString,
540
519
  [field],
541
520
  getWDPackageJSONFiled(wd, field),
@@ -566,7 +545,7 @@ commander.program.command("init [name]").option("-t, --template <template>", "th
566
545
  });
567
546
  pkgName = inputName;
568
547
  }
569
- newJSONString = jsoncParser.applyEdits(newJSONString, jsoncParser.modify(newJSONString, ["name"], pkgName, { formattingOptions }));
548
+ newJSONString = applyEdits(newJSONString, modify(newJSONString, ["name"], pkgName, { formattingOptions }));
570
549
  let pkgRepo = getWDPackageJSONFiled(wd, "repository");
571
550
  if (typeof pkgRepo === "string") {
572
551
  pkgRepo = {
@@ -575,9 +554,9 @@ commander.program.command("init [name]").option("-t, --template <template>", "th
575
554
  directory: pkgDir
576
555
  };
577
556
  }
578
- newJSONString = jsoncParser.applyEdits(
557
+ newJSONString = applyEdits(
579
558
  newJSONString,
580
- jsoncParser.modify(
559
+ modify(
581
560
  newJSONString,
582
561
  ["repository"],
583
562
  pkgRepo,
@@ -585,9 +564,9 @@ commander.program.command("init [name]").option("-t, --template <template>", "th
585
564
  )
586
565
  );
587
566
  const homepage = `${pkgRepo?.url}/blob/master/${pkgDir}/README.md`;
588
- newJSONString = jsoncParser.applyEdits(
567
+ newJSONString = applyEdits(
589
568
  newJSONString,
590
- jsoncParser.modify(
569
+ modify(
591
570
  newJSONString,
592
571
  ["homepage"],
593
572
  homepage,
@@ -603,9 +582,9 @@ commander.program.command("init [name]").option("-t, --template <template>", "th
603
582
  }
604
583
  labels.push(`scope:${pkgName}`);
605
584
  const bugs = `${pkgRepo?.url}/issues/new?template=${resolvedBug.template}&labels=${labels.join(",")}`;
606
- newJSONString = jsoncParser.applyEdits(
585
+ newJSONString = applyEdits(
607
586
  newJSONString,
608
- jsoncParser.modify(
587
+ modify(
609
588
  newJSONString,
610
589
  ["bugs"],
611
590
  bugs,
@@ -639,15 +618,17 @@ commander.program.command("init [name]").option("-t, --template <template>", "th
639
618
 
640
619
  const intersection = (a, b) => new Set([...a].filter((i) => b.has(i)));
641
620
  function getExports({
642
- entrypoints: entrypoints$1,
621
+ entrypoints,
643
622
  pkgIsModule,
644
623
  entries,
645
624
  config,
646
625
  dir,
647
- noFilter
626
+ noFilter,
627
+ withSource,
628
+ withSuffix
648
629
  }) {
649
- const dirResolve = (...paths) => path.resolve(dir ?? process.cwd(), ...paths);
650
- const dirRelative = (path$1) => path.relative(dir ?? process.cwd(), path$1);
630
+ const dirResolve = (...paths) => resolve$1(dir ?? process.cwd(), ...paths);
631
+ const dirRelative = (path) => relative(dir ?? process.cwd(), path);
651
632
  const { build = {} } = config ?? {};
652
633
  const {
653
634
  crossModuleConvertor = true
@@ -655,21 +636,21 @@ function getExports({
655
636
  const jsOutdir = `./${dirRelative(dirResolve(
656
637
  (typeof build?.output?.dir === "object" ? build.output.dir.js : build?.output?.dir) ?? "dist"
657
638
  ))}`;
658
- const [, resolvedEntrypoints] = entrypoints.resolveEntrypoints(entrypoints$1);
639
+ const [, resolvedEntrypoints] = resolveEntrypoints(entrypoints);
659
640
  if (entries) {
660
641
  Object.entries(resolvedEntrypoints).forEach(([key]) => {
661
- if (!entries.some((e) => micromatch.isMatch(key, e, { matchBase: true }))) {
642
+ if (!entries.some((e) => isMatch(key, e, { matchBase: true }))) {
662
643
  delete resolvedEntrypoints[key];
663
644
  }
664
645
  });
665
646
  }
666
- const filteredResolvedEntrypoints = noFilter ? resolvedEntrypoints : entrypoints.filterLeafs(
647
+ const filteredResolvedEntrypoints = noFilter ? resolvedEntrypoints : filterLeafs(
667
648
  resolvedEntrypoints,
668
649
  {
669
650
  skipValue: [
670
651
  // ignore values that filename starts with `.jk-noentry`
671
652
  /(^|\/)\.jk-noentry/,
672
- ...entrypoints.DEFAULT_SKIP_VALUES
653
+ ...DEFAULT_SKIP_VALUES
673
654
  ]
674
655
  }
675
656
  );
@@ -685,8 +666,10 @@ function getExports({
685
666
  } : {};
686
667
  return [
687
668
  filteredResolvedEntrypoints,
688
- entrypoints.entrypoints2Exports(filteredResolvedEntrypoints, {
669
+ entrypoints2Exports(filteredResolvedEntrypoints, {
689
670
  outdir: jsOutdir,
671
+ withSource,
672
+ withSuffix,
690
673
  withConditional: {
691
674
  ...crossModuleWithConditional
692
675
  }
@@ -694,7 +677,7 @@ function getExports({
694
677
  ];
695
678
  }
696
679
 
697
- commander.program.command("publish").aliases(["pub", "p"]).option("-b, --bumper <bumper>", "bump version", "patch").option("-p, --preview", "preview publish").action(async ({ preview, bumper: bumper$1, ...options }) => {
680
+ program.command("publish").aliases(["pub", "p"]).option("-b, --bumper <bumper>", "bump version", "patch").option("-p, --preview", "preview publish").action(async ({ preview, bumper, ...options }) => {
698
681
  actionRestore();
699
682
  const { value = {} } = await getSelectedProjectsGraph() ?? {};
700
683
  const selectedProjectsGraphEntries = Object.entries(value);
@@ -710,7 +693,9 @@ commander.program.command("publish").aliases(["pub", "p"]).option("-b, --bumper
710
693
  pkgIsModule,
711
694
  config: loadConfig(dir),
712
695
  dir,
713
- noFilter: true
696
+ noFilter: true,
697
+ withSource: true,
698
+ withSuffix: true
714
699
  });
715
700
  newManifest.exports = {
716
701
  ...resolvedEntrypoints,
@@ -727,16 +712,16 @@ commander.program.command("publish").aliases(["pub", "p"]).option("-b, --bumper
727
712
  for (const [dir, manifest] of manifests) {
728
713
  const oldJSONString = fs.readFileSync(path.join(dir, "package.json"), "utf-8");
729
714
  const oldJSON = JSON.parse(oldJSONString) ?? "0.0.0";
730
- const newVersion = bumper.bump(oldJSON.version, bumper$1);
715
+ const newVersion = bump(oldJSON.version, bumper);
731
716
  const { indent = " " } = detectIndent(oldJSONString);
732
717
  const formattingOptions = {
733
718
  tabSize: indent.length,
734
719
  insertSpaces: true
735
720
  };
736
721
  let newJSONString = oldJSONString;
737
- newJSONString = jsoncParser.applyEdits(
722
+ newJSONString = applyEdits(
738
723
  newJSONString,
739
- jsoncParser.modify(
724
+ modify(
740
725
  newJSONString,
741
726
  ["version"],
742
727
  newVersion,
@@ -747,9 +732,9 @@ commander.program.command("publish").aliases(["pub", "p"]).option("-b, --bumper
747
732
  if (JSON.stringify(value2) === JSON.stringify(oldJSON[key]))
748
733
  continue;
749
734
  if (key !== "exports") {
750
- newJSONString = jsoncParser.applyEdits(
735
+ newJSONString = applyEdits(
751
736
  newJSONString,
752
- jsoncParser.modify(
737
+ modify(
753
738
  newJSONString,
754
739
  ["publishConfig", key],
755
740
  value2,
@@ -759,9 +744,9 @@ commander.program.command("publish").aliases(["pub", "p"]).option("-b, --bumper
759
744
  } else {
760
745
  const exports = value2;
761
746
  for (const [k, v] of Object.entries(exports)) {
762
- newJSONString = jsoncParser.applyEdits(
747
+ newJSONString = applyEdits(
763
748
  newJSONString,
764
- jsoncParser.modify(
749
+ modify(
765
750
  newJSONString,
766
751
  ["publishConfig", "exports", k],
767
752
  v,
@@ -786,9 +771,9 @@ commander.program.command("publish").aliases(["pub", "p"]).option("-b, --bumper
786
771
  for (const [k, v] of Object.entries(indexPublishConfig)) {
787
772
  if (v === void 0)
788
773
  continue;
789
- newJSONString = jsoncParser.applyEdits(
774
+ newJSONString = applyEdits(
790
775
  newJSONString,
791
- jsoncParser.modify(
776
+ modify(
792
777
  newJSONString,
793
778
  ["publishConfig", k],
794
779
  v,
@@ -807,11 +792,11 @@ commander.program.command("publish").aliases(["pub", "p"]).option("-b, --bumper
807
792
  console.warn("preview mode");
808
793
  continue;
809
794
  }
810
- childProcess__namespace.execSync(["pnpm", "publish", "--access", "public", "--no-git-checks", ...passArgs].join(" "), {
795
+ childProcess.execSync(["pnpm", "publish", "--access", "public", "--no-git-checks", ...passArgs].join(" "), {
811
796
  cwd: dir,
812
797
  stdio: "inherit"
813
798
  });
814
- const modifyVersionPackageJSON = jsoncParser.applyEdits(oldJSONString, jsoncParser.modify(oldJSONString, ["version"], newVersion, {}));
799
+ const modifyVersionPackageJSON = applyEdits(oldJSONString, modify(oldJSONString, ["version"], newVersion, {}));
815
800
  fs.writeFileSync(path.join(dir, "package.json.bak"), modifyVersionPackageJSON);
816
801
  } finally {
817
802
  fs.unlinkSync(path.join(dir, "package.json"));
@@ -821,4 +806,4 @@ commander.program.command("publish").aliases(["pub", "p"]).option("-b, --bumper
821
806
  actionDone();
822
807
  });
823
808
 
824
- commander.program.parse(process.argv);
809
+ program.parse(process.argv);
@@ -0,0 +1 @@
1
+ "use strict";var e=require("node:fs"),t=require("node:path"),r=require("@pnpm/filter-workspace-packages"),n=require("commander"),o=require("js-yaml"),i=require("@jiek/utils/getWorkspaceDir"),s=require("cli-progress"),a=require("execa"),c=require("detect-indent"),p=require("inquirer"),l=require("jsonc-parser"),u=require("micromatch"),f=require("node:child_process"),d=require("@jiek/utils/bumper"),m=require("@jiek/pkger/entrypoints");function g(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var y=g(f);let w,h;function b(){if(w)return w;const e=n.program.getOptionValue("root");return w=e?t.isAbsolute(e)?e:t.resolve(process.cwd(),e):void 0,w}let k=!1;function j(){if(h)return{wd:h,notWorkspace:k};const e=b();if(void 0!==e){const t=i.isWorkspaceDir(e,S);return k=!t,h=e,{wd:h,notWorkspace:k}}try{h=i.getWorkspaceDir(S)}catch(t){if(!("message"in t)||"workspace root not found"!==t.message)throw t;h=e,k=!0}return{wd:h,notWorkspace:k}}let S="";try{require.resolve("@pnpm/filter-workspace-packages"),S="pnpm"}catch{}async function v(){let i=n.program.getOptionValue("filter");const s=b(),{wd:a,notWorkspace:c}=j();if(!c&&"pnpm"===S){const n=t.resolve(a,"pnpm-workspace.yaml"),c=e.readFileSync(n,"utf-8"),p=o.load(c);if(s===a&&!i)throw new Error("root path is workspace root, please provide a filter");if(s!==a&&!i){if(!e.existsSync(t.resolve(s,"package.json")))throw new Error("root path is not workspace root, please provide a filter");const r=JSON.parse(e.readFileSync(t.resolve(s,"package.json"),"utf-8"));if(!r.name)throw new Error("root path is not workspace root, please provide a filter");i=r.name}const{selectedProjectsGraph:l}=await r.filterPackagesFromDir(a,[{filter:i??"",followProdDepsOnly:!0}],{prefix:s,workspaceDir:a,patterns:p.packages});return{wd:a,root:s,value:Object.entries(l).reduce(((e,[t,r])=>(e[t]=r.package.manifest,e)),{})}}return{wd:a,root:s,value:{[a]:JSON.parse(e.readFileSync(t.resolve(a,"package.json"),"utf-8"))}}}""!==S&&n.program.option("-f, --filter <filter>","filter packages");var $=require("../package.json");let E,O;function q(){E()}function x(){new Promise((e=>E=e))}function F(e){try{return require.resolve(e),!0}catch(e){return!1}}n.program.version($.version).description($.description).option("--root <root>","root path").option("-c, --config-path <configPath>","config path");const _=[process.env.JIEK_TS_REGISTER,"esbuild-register","@swc-node/register","ts-node/register"].filter(Boolean);for(const e of _)if(F(e)){O=e;break}let J="jiek.config";function M(r){const{wd:i}=j();let s=n.program.getOptionValue("configPath");if(s){if(!e.existsSync(s))throw new Error(`config file not found: ${s}`);t.isAbsolute(s)||(s=t.resolve(i,s))}else s=function(r,n){const o=!!O;function i(o){const i=[t.resolve(process.cwd(),`${J}.${o}`),t.resolve(process.cwd(),`.${J}.${o}`),t.resolve(r,`${J}.${o}`),t.resolve(r,`.${J}.${o}`)];n&&i.unshift(t.resolve(n,`${J}.${o}`),t.resolve(n,`.${J}.${o}`));for(const t of i)if(e.existsSync(t)&&e.lstatSync(t).isFile())return t}return J=i("js")??J,J=i("json")??J,J=i("yaml")??J,o&&(J=i("ts")??J),t.resolve(r,J)}(i,r);const a=t.extname(s);let c;switch(a){case".js":c=require(s);break;case".json":return require(s);case".yaml":return o.load(e.readFileSync(s,"utf-8"));case".ts":if(O){require(O),c=require(s);break}throw new Error("ts config file is not supported without ts register, please install esbuild-register or set JIEK_TS_REGISTER env for custom ts register");case".config":c={};break;default:throw new Error(`unsupported config file type: ${a}`)}if(!c)throw new Error("config file is empty");return c.default??c}n.program.command("build").option("-s, --silent","Don't display logs.").option("-e, --entries <ENTRIES>","Specify the entries of the package.json's 'exports' field.(support glob)").action((async({silent:r,entries:n})=>{x();const{build:o}=M();r=r??o?.silent??!1;const{wd:i,value:c={}}=await v()??{};if(0===Object.keys(c).length)throw new Error("no package found");const p=t.resolve(i,"node_modules");e.existsSync(p)||e.mkdirSync(p);const l=(...e)=>t.resolve(p,".jiek",...e);e.existsSync(l())||e.mkdirSync(l());const u=require.resolve("rollup").replace(/dist\/rollup.js$/,"dist/bin/rollup"),f=new s.MultiBar({clearOnComplete:!1,hideCursor:!0,format:"- {bar} | {status} | {input} | {message}"},s.Presets.shades_classic);let d=0;await Promise.all(Object.entries(c).map((async([t,o])=>{const s=o.name?.replace(/^@/g,"").replace(/\//g,"+"),c=l(`${s??"anonymous-"+d++}.rollup.config.js`);e.writeFileSync(c,(e=>`\nconst manifest = ${JSON.stringify(e,null,2)}\nmodule.exports = require('jiek/rollup').template(manifest)\n`.trimStart())(o));let p="";O&&(p=`node -r ${O} `);const m=`${p}${u} --silent -c ${c}`,g=a.execaCommand(m,{ipc:!0,cwd:t,env:{...process.env,JIEK_ROOT:i,JIEK_ENTRIES:n}}),y={};let w=10;g.on("message",(e=>{"debug"===e.type&&console.log(...Array.isArray(e.data)?e.data:[e.data])})),!r&&g.on("message",(e=>{if("init"===e.type){const{leafMap:t,targetsLength:r}=e.data,n=Array.from(t.entries()).flatMap((([e,t])=>t.map((([t,...r])=>({input:e,path:t,conditions:r})))));console.log(`Package '${o.name}' has ${r} targets to build`),n.forEach((({input:e})=>{w=Math.max(w,e.length)})),n.forEach((({input:e,path:t})=>{const r=`${e}:${t}`;y[r]||(y[r]=f.create(50,0,{input:e.padEnd(w),status:"waiting".padEnd(10)},{barsize:20,linewrap:!0}))}))}if("progress"===e.type){const{path:t,tags:r,input:n,event:o,message:i}=e.data,s=y[`${n}:${t}`];if(!s)return;s.update({start:0,resolve:20,end:50}[o??"start"]??0,{input:n.padEnd(w),status:o?.padEnd(10),message:`${r?.join(", ")}: ${i}`})}})),await new Promise(((e,t)=>{let r="";g.stderr?.on("data",(e=>{r+=e})),g.once("exit",(n=>0===n?e():t(new Error(`rollup build failed:\n${r}`))))}))}))).finally((()=>{f.stop()})),q()}));const N='{\n "name": "",\n "version": "0.0.1",\n "description": "",\n "license": "",\n "author": "",\n "files": ["dist"],\n "exports": {\n ".": "./src/index.ts"\n },\n "scripts": {\n },\n "homepage": "",\n "repository": "",\n "bugs": ""\n}'.trimStart(),P="# $name\n\n## Installation\n\n```bash\nnpm install $name\n# or\npnpm install $name\n# or\nyarn add $name\n```\n\n## Usage\n\n\n## License\n\n$license\n".trimStart();const D=new Map;function I(r,n){if(D.has(r))return D.get(r)[n];const o=t.resolve(r,"package.json"),i=JSON.parse(e.readFileSync(o,"utf-8"));return D.set(r,i),i[n]}n.program.command("init [name]").option("-t, --template <template>","the package.json template file path or file content").action((async()=>{const[,r]=n.program.args,o=process.cwd(),{init:i={}}=M()??{},{wd:s}=j(),a=t.basename(s),{named:f,template:d,bug:m={},readme:g=P,readmeTemplate:y}=i,w={template:"bug_report.yml",labels:["bug"],...m};let h=g;if(y){const r=t.resolve(s,y);h=e.readFileSync(r,"utf-8")}const b=function(r,n){let o=n??N,i=!1;try{n&&JSON.parse(n)}catch(e){i=!0}if(i){const i=t.resolve(r,n);o=e.readFileSync(i,"utf-8")}return o}(s,d),{indent:k=" "}=c(b),S={tabSize:k.length,insertSpaces:!0},v=["license","author"];let $=b;for(const e of v)$=l.applyEdits($,l.modify($,[e],I(s,e),{formattingOptions:S}));let[E,O]=await async function(e,r,{wd:n,cwd:o,workspaceName:i}){const s=o.replace(`${n}/`,"");let a=t.basename(o);if("function"==typeof e)return e(r,{full:n,relative:o});let c,l,f=!1;if("object"==typeof e)if(o===n){const{rule:t}=await p.prompt({type:"list",name:"rule",message:"choose a rule",default:"default",choices:["default"].concat(Object.keys(e))});"default"!==t&&(c=t,l=e[t])}else for(const[t,r]of Object.entries(e)){if(u.isMatch(s,t)){c=t,l=r;break}if(u.isMatch(`${s}/jiek_ignore_dont_use_same_file_name`,t)){f=!0,c=t,l=r;break}}if(l||(c="packages/*",l=`@${i}/$basename`),!l)throw new Error("no matched rule");if(!r&&f&&(a=await p.prompt({type:"input",name:"name",message:`the matched rule is \`${String(l)}\`, please input the basename\n`}).then((({name:e})=>e))),"function"==typeof l)return l(r,{full:n,relative:o,basename:a});if("string"==typeof l){const e=r??a;return[l.replace(/\$basename/g,e),c?.replace(/\/\*$/g,`/${e}`)]}throw new Error("no matched rule")}(f,r,{wd:s,cwd:o,workspaceName:a});if(!O){const{dir:e}=await p.prompt({type:"input",name:"dir",message:"package directory",default:r});O=e}if(!E){const{name:e}=await p.prompt({type:"input",name:"name",message:"package name",default:r});E=e}$=l.applyEdits($,l.modify($,["name"],E,{formattingOptions:S}));let q=I(s,"repository");"string"==typeof q&&(q={type:"git",url:q,directory:O}),$=l.applyEdits($,l.modify($,["repository"],q,{formattingOptions:S}));const x=`${q?.url}/blob/master/${O}/README.md`;$=l.applyEdits($,l.modify($,["homepage"],x,{formattingOptions:S}));let F=w.labels;"function"==typeof F&&(F=F({name:E,dir:O})),F.push(`scope:${E}`);const _=`${q?.url}/issues/new?template=${w.template}&labels=${F.join(",")}`;function J(e){if(!O)throw new Error("pkgDir is not defined");return t.resolve(O,e)}$=l.applyEdits($,l.modify($,["bugs"],_,{formattingOptions:S})),e.existsSync(O)||e.mkdirSync(O);const D=J("package.json");if(e.existsSync(D))throw new Error("package.json already exists");e.writeFileSync(D,$),console.log($,"written to",D);const A=I(s,"license"),R=J("README.md");"function"==typeof h&&(h=h({dir:O,packageJson:JSON.parse($)}));const T=h.replace(/\$name/g,E).replace(/\$license/g,A);e.writeFileSync(R,T)}));const A=(e,t)=>new Set([...e].filter((e=>t.has(e))));function R({entrypoints:e,pkgIsModule:r,entries:n,config:o,dir:i,noFilter:s,withSource:a,withSuffix:c}){const{build:p={}}=o??{},{crossModuleConvertor:l=!0}=p,f=`./${d=((...e)=>t.resolve(i??process.cwd(),...e))(("object"==typeof p?.output?.dir?p.output.dir.js:p?.output?.dir)??"dist"),t.relative(i??process.cwd(),d)}`;var d;const[,g]=m.resolveEntrypoints(e);n&&Object.entries(g).forEach((([e])=>{n.some((t=>u.isMatch(e,t,{matchBase:!0})))||delete g[e]}));const y=s?g:m.filterLeafs(g,{skipValue:[/(^|\/)\.jk-noentry/,...m.DEFAULT_SKIP_VALUES]}),w=l?{import:e=>!r&&0===A(new Set(e.conditionals),new Set(["import","module"])).size&&e.dist.replace(/\.js$/,".mjs"),require:e=>!(!r||0!==A(new Set(e.conditionals),new Set(["require","node"])).size)&&e.dist.replace(/\.js$/,".cjs")}:{};return[y,m.entrypoints2Exports(y,{outdir:f,withSource:a,withSuffix:c,withConditional:{...w}})]}n.program.command("publish").aliases(["pub","p"]).option("-b, --bumper <bumper>","bump version","patch").option("-p, --preview","preview publish").action((async({preview:r,bumper:n,...o})=>{x();const{value:i={}}=await v()??{},s=Object.entries(i);if(0===s.length)throw new Error("no packages selected");const a=s.map((([e,t])=>{const{type:r,exports:n={}}=t,o="module"===r,i={...t},[s,a]=R({entrypoints:n,pkgIsModule:o,config:M(e),dir:e,noFilter:!0,withSource:!0,withSuffix:!0});return i.exports={...s,...a},[e,i]})),p=Object.entries(o).reduce(((e,[t,r])=>(r&&e.push(`--${t}`,r),e)),[]);for(const[o,i]of a){const s=e.readFileSync(t.join(o,"package.json"),"utf-8"),a=JSON.parse(s)??"0.0.0",u=d.bump(a.version,n),{indent:f=" "}=c(s),m={tabSize:f.length,insertSpaces:!0};let g=s;g=l.applyEdits(g,l.modify(g,["version"],u,{formattingOptions:m}));for(const[e,t]of Object.entries(i))if(JSON.stringify(t)!==JSON.stringify(a[e]))if("exports"!==e)g=l.applyEdits(g,l.modify(g,["publishConfig",e],t,{formattingOptions:m}));else{const e=t;for(const[t,r]of Object.entries(e))g=l.applyEdits(g,l.modify(g,["publishConfig","exports",t],r,{formattingOptions:m}));const r=e?.["."],n={};if(r){switch(typeof r){case"string":n["module"===i?.type?"module":"main"]=r;break;case"object":{const e=r;n.main=e.require??e.default,n.module=e.import??e.module??e.default;break}}for(const[e,t]of Object.entries(n))void 0!==t&&(g=l.applyEdits(g,l.modify(g,["publishConfig",e],t,{formattingOptions:m})))}}try{if(e.renameSync(t.join(o,"package.json"),t.join(o,"package.json.bak")),e.writeFileSync(t.join(o,"package.json"),g),console.log(g),r){console.warn("preview mode");continue}y.execSync(["pnpm","publish","--access","public","--no-git-checks",...p].join(" "),{cwd:o,stdio:"inherit"});const n=l.applyEdits(s,l.modify(s,["version"],u,{}));e.writeFileSync(t.join(o,"package.json.bak"),n)}finally{e.unlinkSync(t.join(o,"package.json")),e.renameSync(t.join(o,"package.json.bak"),t.join(o,"package.json"))}}q()})),n.program.parse(process.argv);
package/dist/cli.min.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("node:fs"),t=require("node:path"),r=require("@pnpm/filter-workspace-packages"),n=require("commander"),o=require("js-yaml"),s=require("@jiek/utils/getWorkspaceDir"),i=require("cli-progress"),a=require("execa"),c=require("detect-indent"),p=require("inquirer"),l=require("jsonc-parser"),u=require("micromatch"),f=require("node:child_process"),d=require("@jiek/utils/bumper"),m=require("@jiek/pkger/entrypoints");function g(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var y=g(f);let w,h;function b(){if(w)return w;const e=n.program.getOptionValue("root");return w=e?t.isAbsolute(e)?e:t.resolve(process.cwd(),e):void 0,w}let k=!1;function j(){if(h)return{wd:h,notWorkspace:k};const e=b();if(void 0!==e){const t=s.isWorkspaceDir(e,v);return k=!t,h=e,{wd:h,notWorkspace:k}}try{h=s.getWorkspaceDir(v)}catch(t){if(!("message"in t)||"workspace root not found"!==t.message)throw t;h=e,k=!0}return{wd:h,notWorkspace:k}}let v="";try{require.resolve("@pnpm/filter-workspace-packages"),v="pnpm"}catch{}async function S(){let s=n.program.getOptionValue("filter");const i=b(),{wd:a,notWorkspace:c}=j();if(!c&&"pnpm"===v){const n=t.resolve(a,"pnpm-workspace.yaml"),c=e.readFileSync(n,"utf-8"),p=o.load(c);if(i===a&&!s)throw new Error("root path is workspace root, please provide a filter");if(i!==a&&!s){if(!e.existsSync(t.resolve(i,"package.json")))throw new Error("root path is not workspace root, please provide a filter");const r=JSON.parse(e.readFileSync(t.resolve(i,"package.json"),"utf-8"));if(!r.name)throw new Error("root path is not workspace root, please provide a filter");s=r.name}const{selectedProjectsGraph:l}=await r.filterPackagesFromDir(a,[{filter:s??"",followProdDepsOnly:!0}],{prefix:i,workspaceDir:a,patterns:p.packages});return{wd:a,root:i,value:Object.entries(l).reduce(((e,[t,r])=>(e[t]=r.package.manifest,e)),{})}}return{wd:a,root:i,value:{[a]:JSON.parse(e.readFileSync(t.resolve(a,"package.json"),"utf-8"))}}}""!==v&&n.program.option("-f, --filter <filter>","filter packages");var $=require("../package.json");let E,O;function q(){E()}function x(){new Promise((e=>E=e))}function F(e){try{return require.resolve(e),!0}catch(e){return!1}}n.program.version($.version).description($.description).option("--root <root>","root path").option("-c, --config-path <configPath>","config path");const _=[process.env.JIEK_TS_REGISTER,"esbuild-register","@swc-node/register","ts-node/register"].filter(Boolean);for(const e of _)if(F(e)){O=e;break}let J="jiek.config";function M(r){const{wd:s}=j();let i=n.program.getOptionValue("configPath");if(i){if(!e.existsSync(i))throw new Error(`config file not found: ${i}`);t.isAbsolute(i)||(i=t.resolve(s,i))}else i=function(r,n){const o=!!O;function s(o){const s=[t.resolve(process.cwd(),`${J}.${o}`),t.resolve(process.cwd(),`.${J}.${o}`),t.resolve(r,`${J}.${o}`),t.resolve(r,`.${J}.${o}`)];n&&s.unshift(t.resolve(n,`${J}.${o}`),t.resolve(n,`.${J}.${o}`));for(const t of s)if(e.existsSync(t)&&e.lstatSync(t).isFile())return t}return J=s("js")??J,J=s("json")??J,J=s("yaml")??J,o&&(J=s("ts")??J),t.resolve(r,J)}(s,r);const a=t.extname(i);let c;switch(a){case".js":c=require(i);break;case".json":return require(i);case".yaml":return o.load(e.readFileSync(i,"utf-8"));case".ts":if(O){require(O),c=require(i);break}throw new Error("ts config file is not supported without ts register, please install esbuild-register or set JIEK_TS_REGISTER env for custom ts register");case".config":c={};break;default:throw new Error(`unsupported config file type: ${a}`)}if(!c)throw new Error("config file is empty");return c.default??c}n.program.command("build").option("-s, --silent","Don't display logs.").option("-e, --entries <ENTRIES>","Specify the entries of the package.json's 'exports' field.(support glob)").action((async({silent:r,entries:n})=>{x();const{build:o}=M();r=r??o?.silent??!1;const{wd:s,value:c={}}=await S()??{};if(0===Object.keys(c).length)throw new Error("no package found");const p=t.resolve(s,"node_modules");e.existsSync(p)||e.mkdirSync(p);const l=(...e)=>t.resolve(p,".jiek",...e);e.existsSync(l())||e.mkdirSync(l());const u=require.resolve("rollup").replace(/dist\/rollup.js$/,"dist/bin/rollup"),f=new i.MultiBar({clearOnComplete:!1,hideCursor:!0,format:"- {bar} | {status} | {input} | {message}"},i.Presets.shades_classic);let d=0;await Promise.all(Object.entries(c).map((async([t,o])=>{const i=o.name?.replace(/^@/g,"").replace(/\//g,"+"),c=l(`${i??"anonymous-"+d++}.rollup.config.js`);e.writeFileSync(c,(e=>`\nconst manifest = ${JSON.stringify(e,null,2)}\nmodule.exports = require('jiek/rollup').template(manifest)\n`.trimStart())(o));let p="";O&&(p=`node -r ${O} `);const m=`${p}${u} --silent -c ${c}`,g=a.execaCommand(m,{ipc:!0,cwd:t,env:{...process.env,JIEK_ROOT:s,JIEK_ENTRIES:n}}),y={};let w=10;g.on("message",(e=>{"debug"===e.type&&console.log(...Array.isArray(e.data)?e.data:[e.data])})),!r&&g.on("message",(e=>{if("init"===e.type){const{leafMap:t,targetsLength:r}=e.data,n=Array.from(t.entries()).flatMap((([e,t])=>t.map((([t,...r])=>({input:e,path:t,conditions:r})))));console.log(`Package '${o.name}' has ${r} targets to build`),n.forEach((({input:e})=>{w=Math.max(w,e.length)})),n.forEach((({input:e,path:t})=>{const r=`${e}:${t}`;y[r]||(y[r]=f.create(50,0,{input:e.padEnd(w),status:"waiting".padEnd(10)},{barsize:20,linewrap:!0}))}))}if("progress"===e.type){const{path:t,tags:r,input:n,event:o,message:s}=e.data,i=y[`${n}:${t}`];if(!i)return;i.update({start:0,resolve:20,end:50}[o??"start"]??0,{input:n.padEnd(w),status:o?.padEnd(10),message:`${r?.join(", ")}: ${s}`})}})),await new Promise(((e,t)=>{let r="";g.stderr?.on("data",(e=>{r+=e})),g.once("exit",(n=>0===n?e():t(new Error(`rollup build failed:\n${r}`))))}))}))).finally((()=>{f.stop()})),q()}));const N='{\n "name": "",\n "version": "0.0.1",\n "description": "",\n "license": "",\n "author": "",\n "files": ["dist"],\n "exports": {\n ".": "./src/index.ts"\n },\n "scripts": {\n },\n "homepage": "",\n "repository": "",\n "bugs": ""\n}'.trimStart(),P="# $name\n\n## Installation\n\n```bash\nnpm install $name\n# or\npnpm install $name\n# or\nyarn add $name\n```\n\n## Usage\n\n\n## License\n\n$license\n".trimStart();const D=new Map;function I(r,n){if(D.has(r))return D.get(r)[n];const o=t.resolve(r,"package.json"),s=JSON.parse(e.readFileSync(o,"utf-8"));return D.set(r,s),s[n]}n.program.command("init [name]").option("-t, --template <template>","the package.json template file path or file content").action((async()=>{const[,r]=n.program.args,o=process.cwd(),{init:s={}}=M()??{},{wd:i}=j(),a=t.basename(i),{named:f,template:d,bug:m={},readme:g=P,readmeTemplate:y}=s,w={template:"bug_report.yml",labels:["bug"],...m};let h=g;if(y){const r=t.resolve(i,y);h=e.readFileSync(r,"utf-8")}const b=function(r,n){let o=n??N,s=!1;try{n&&JSON.parse(n)}catch(e){s=!0}if(s){const s=t.resolve(r,n);o=e.readFileSync(s,"utf-8")}return o}(i,d),{indent:k=" "}=c(b),v={tabSize:k.length,insertSpaces:!0},S=["license","author"];let $=b;for(const e of S)$=l.applyEdits($,l.modify($,[e],I(i,e),{formattingOptions:v}));let[E,O]=await async function(e,r,{wd:n,cwd:o,workspaceName:s}){const i=o.replace(`${n}/`,"");let a=t.basename(o);if("function"==typeof e)return e(r,{full:n,relative:o});let c,l,f=!1;if("object"==typeof e)if(o===n){const{rule:t}=await p.prompt({type:"list",name:"rule",message:"choose a rule",default:"default",choices:["default"].concat(Object.keys(e))});"default"!==t&&(c=t,l=e[t])}else for(const[t,r]of Object.entries(e)){if(u.isMatch(i,t)){c=t,l=r;break}if(u.isMatch(`${i}/jiek_ignore_dont_use_same_file_name`,t)){f=!0,c=t,l=r;break}}if(l||(c="packages/*",l=`@${s}/$basename`),!l)throw new Error("no matched rule");if(!r&&f&&(a=await p.prompt({type:"input",name:"name",message:`the matched rule is \`${String(l)}\`, please input the basename\n`}).then((({name:e})=>e))),"function"==typeof l)return l(r,{full:n,relative:o,basename:a});if("string"==typeof l){const e=r??a;return[l.replace(/\$basename/g,e),c?.replace(/\/\*$/g,`/${e}`)]}throw new Error("no matched rule")}(f,r,{wd:i,cwd:o,workspaceName:a});if(!O){const{dir:e}=await p.prompt({type:"input",name:"dir",message:"package directory",default:r});O=e}if(!E){const{name:e}=await p.prompt({type:"input",name:"name",message:"package name",default:r});E=e}$=l.applyEdits($,l.modify($,["name"],E,{formattingOptions:v}));let q=I(i,"repository");"string"==typeof q&&(q={type:"git",url:q,directory:O}),$=l.applyEdits($,l.modify($,["repository"],q,{formattingOptions:v}));const x=`${q?.url}/blob/master/${O}/README.md`;$=l.applyEdits($,l.modify($,["homepage"],x,{formattingOptions:v}));let F=w.labels;"function"==typeof F&&(F=F({name:E,dir:O})),F.push(`scope:${E}`);const _=`${q?.url}/issues/new?template=${w.template}&labels=${F.join(",")}`;function J(e){if(!O)throw new Error("pkgDir is not defined");return t.resolve(O,e)}$=l.applyEdits($,l.modify($,["bugs"],_,{formattingOptions:v})),e.existsSync(O)||e.mkdirSync(O);const D=J("package.json");if(e.existsSync(D))throw new Error("package.json already exists");e.writeFileSync(D,$),console.log($,"written to",D);const A=I(i,"license"),R=J("README.md");"function"==typeof h&&(h=h({dir:O,packageJson:JSON.parse($)}));const T=h.replace(/\$name/g,E).replace(/\$license/g,A);e.writeFileSync(R,T)}));const A=(e,t)=>new Set([...e].filter((e=>t.has(e))));function R({entrypoints:e,pkgIsModule:r,entries:n,config:o,dir:s,noFilter:i}){const{build:a={}}=o??{},{crossModuleConvertor:c=!0}=a,p=`./${l=((...e)=>t.resolve(s??process.cwd(),...e))(("object"==typeof a?.output?.dir?a.output.dir.js:a?.output?.dir)??"dist"),t.relative(s??process.cwd(),l)}`;var l;const[,f]=m.resolveEntrypoints(e);n&&Object.entries(f).forEach((([e])=>{n.some((t=>u.isMatch(e,t,{matchBase:!0})))||delete f[e]}));const d=i?f:m.filterLeafs(f,{skipValue:[/(^|\/)\.jk-noentry/,...m.DEFAULT_SKIP_VALUES]}),g=c?{import:e=>!r&&0===A(new Set(e.conditionals),new Set(["import","module"])).size&&e.dist.replace(/\.js$/,".mjs"),require:e=>!(!r||0!==A(new Set(e.conditionals),new Set(["require","node"])).size)&&e.dist.replace(/\.js$/,".cjs")}:{};return[d,m.entrypoints2Exports(d,{outdir:p,withConditional:{...g}})]}n.program.command("publish").aliases(["pub","p"]).option("-b, --bumper <bumper>","bump version","patch").option("-p, --preview","preview publish").action((async({preview:r,bumper:n,...o})=>{x();const{value:s={}}=await S()??{},i=Object.entries(s);if(0===i.length)throw new Error("no packages selected");const a=i.map((([e,t])=>{const{type:r,exports:n={}}=t,o="module"===r,s={...t},[i,a]=R({entrypoints:n,pkgIsModule:o,config:M(e),dir:e,noFilter:!0});return s.exports={...i,...a},[e,s]})),p=Object.entries(o).reduce(((e,[t,r])=>(r&&e.push(`--${t}`,r),e)),[]);for(const[o,s]of a){const i=e.readFileSync(t.join(o,"package.json"),"utf-8"),a=JSON.parse(i)??"0.0.0",u=d.bump(a.version,n),{indent:f=" "}=c(i),m={tabSize:f.length,insertSpaces:!0};let g=i;g=l.applyEdits(g,l.modify(g,["version"],u,{formattingOptions:m}));for(const[e,t]of Object.entries(s))if(JSON.stringify(t)!==JSON.stringify(a[e]))if("exports"!==e)g=l.applyEdits(g,l.modify(g,["publishConfig",e],t,{formattingOptions:m}));else{const e=t;for(const[t,r]of Object.entries(e))g=l.applyEdits(g,l.modify(g,["publishConfig","exports",t],r,{formattingOptions:m}));const r=e?.["."],n={};if(r){switch(typeof r){case"string":n["module"===s?.type?"module":"main"]=r;break;case"object":{const e=r;n.main=e.require??e.default,n.module=e.import??e.module??e.default;break}}for(const[e,t]of Object.entries(n))void 0!==t&&(g=l.applyEdits(g,l.modify(g,["publishConfig",e],t,{formattingOptions:m})))}}try{if(e.renameSync(t.join(o,"package.json"),t.join(o,"package.json.bak")),e.writeFileSync(t.join(o,"package.json"),g),console.log(g),r){console.warn("preview mode");continue}y.execSync(["pnpm","publish","--access","public","--no-git-checks",...p].join(" "),{cwd:o,stdio:"inherit"});const n=l.applyEdits(i,l.modify(i,["version"],u,{}));e.writeFileSync(t.join(o,"package.json.bak"),n)}finally{e.unlinkSync(t.join(o,"package.json")),e.renameSync(t.join(o,"package.json.bak"),t.join(o,"package.json"))}}q()})),n.program.parse(process.argv);
1
+ import e from"node:fs";import t,{resolve as n,relative as o}from"node:path";import{filterPackagesFromDir as r}from"@pnpm/filter-workspace-packages";import{program as s}from"commander";import{load as i}from"js-yaml";import{isWorkspaceDir as a,getWorkspaceDir as c}from"@jiek/utils/getWorkspaceDir";import{MultiBar as p,Presets as l}from"cli-progress";import{execaCommand as f}from"execa";import u from"detect-indent";import m from"inquirer";import{applyEdits as d,modify as g}from"jsonc-parser";import{isMatch as w}from"micromatch";import*as y from"node:child_process";import{bump as h}from"@jiek/utils/bumper";import{resolveEntrypoints as k,filterLeafs as b,DEFAULT_SKIP_VALUES as j,entrypoints2Exports as S}from"@jiek/pkger/entrypoints";let v,$;function E(){if(v)return v;const e=s.getOptionValue("root");return v=e?t.isAbsolute(e)?e:t.resolve(process.cwd(),e):void 0,v}let O=!1;function x(){if($)return{wd:$,notWorkspace:O};const e=E();if(void 0!==e){const t=a(e,F);return O=!t,$=e,{wd:$,notWorkspace:O}}try{$=c(F)}catch(t){if(!("message"in t)||"workspace root not found"!==t.message)throw t;$=e,O=!0}return{wd:$,notWorkspace:O}}let F="";try{require.resolve("@pnpm/filter-workspace-packages"),F="pnpm"}catch{}async function _(){let n=s.getOptionValue("filter");const o=E(),{wd:a,notWorkspace:c}=x();if(!c&&"pnpm"===F){const s=t.resolve(a,"pnpm-workspace.yaml"),c=e.readFileSync(s,"utf-8"),p=i(c);if(o===a&&!n)throw new Error("root path is workspace root, please provide a filter");if(o!==a&&!n){if(!e.existsSync(t.resolve(o,"package.json")))throw new Error("root path is not workspace root, please provide a filter");const r=JSON.parse(e.readFileSync(t.resolve(o,"package.json"),"utf-8"));if(!r.name)throw new Error("root path is not workspace root, please provide a filter");n=r.name}const{selectedProjectsGraph:l}=await r(a,[{filter:n??"",followProdDepsOnly:!0}],{prefix:o,workspaceDir:a,patterns:p.packages});return{wd:a,root:o,value:Object.entries(l).reduce(((e,[t,n])=>(e[t]=n.package.manifest,e)),{})}}return{wd:a,root:o,value:{[a]:JSON.parse(e.readFileSync(t.resolve(a,"package.json"),"utf-8"))}}}""!==F&&s.option("-f, --filter <filter>","filter packages");var J=require("../package.json");let q,N;function I(){q()}function M(){new Promise((e=>q=e))}function R(e){try{return require.resolve(e),!0}catch(e){return!1}}s.version(J.version).description(J.description).option("--root <root>","root path").option("-c, --config-path <configPath>","config path");const P=[process.env.JIEK_TS_REGISTER,"esbuild-register","@swc-node/register","ts-node/register"].filter(Boolean);for(const e of P)if(R(e)){N=e;break}let T="jiek.config";function A(n){const{wd:o}=x();let r=s.getOptionValue("configPath");if(r){if(!e.existsSync(r))throw new Error(`config file not found: ${r}`);t.isAbsolute(r)||(r=t.resolve(o,r))}else r=function(n,o){const r=!!N;function s(r){const s=[t.resolve(process.cwd(),`${T}.${r}`),t.resolve(process.cwd(),`.${T}.${r}`),t.resolve(n,`${T}.${r}`),t.resolve(n,`.${T}.${r}`)];o&&s.unshift(t.resolve(o,`${T}.${r}`),t.resolve(o,`.${T}.${r}`));for(const t of s)if(e.existsSync(t)&&e.lstatSync(t).isFile())return t}return T=s("js")??T,T=s("json")??T,T=s("yaml")??T,r&&(T=s("ts")??T),t.resolve(n,T)}(o,n);const a=t.extname(r);let c;switch(a){case".js":c=require(r);break;case".json":return require(r);case".yaml":return i(e.readFileSync(r,"utf-8"));case".ts":if(N){require(N),c=require(r);break}throw new Error("ts config file is not supported without ts register, please install esbuild-register or set JIEK_TS_REGISTER env for custom ts register");case".config":c={};break;default:throw new Error(`unsupported config file type: ${a}`)}if(!c)throw new Error("config file is empty");return c.default??c}s.command("build").option("-s, --silent","Don't display logs.").option("-e, --entries <ENTRIES>","Specify the entries of the package.json's 'exports' field.(support glob)").action((async({silent:n,entries:o})=>{M();const{build:r}=A();n=n??r?.silent??!1;const{wd:s,value:i={}}=await _()??{};if(0===Object.keys(i).length)throw new Error("no package found");const a=t.resolve(s,"node_modules");e.existsSync(a)||e.mkdirSync(a);const c=(...e)=>t.resolve(a,".jiek",...e);e.existsSync(c())||e.mkdirSync(c());const u=require.resolve("rollup").replace(/dist\/rollup.js$/,"dist/bin/rollup"),m=new p({clearOnComplete:!1,hideCursor:!0,format:"- {bar} | {status} | {input} | {message}"},l.shades_classic);let d=0;await Promise.all(Object.entries(i).map((async([t,r])=>{const i=r.name?.replace(/^@/g,"").replace(/\//g,"+"),a=c(`${i??"anonymous-"+d++}.rollup.config.js`);e.writeFileSync(a,(e=>`\nconst manifest = ${JSON.stringify(e,null,2)}\nmodule.exports = require('jiek/rollup').template(manifest)\n`.trimStart())(r));let p="";N&&(p=`node -r ${N} `);const l=f(`${p}${u} --silent -c ${a}`,{ipc:!0,cwd:t,env:{...process.env,JIEK_ROOT:s,JIEK_ENTRIES:o}}),g={};let w=10;l.on("message",(e=>{"debug"===e.type&&console.log(...Array.isArray(e.data)?e.data:[e.data])})),!n&&l.on("message",(e=>{if("init"===e.type){const{leafMap:t,targetsLength:n}=e.data,o=Array.from(t.entries()).flatMap((([e,t])=>t.map((([t,...n])=>({input:e,path:t,conditions:n})))));console.log(`Package '${r.name}' has ${n} targets to build`),o.forEach((({input:e})=>{w=Math.max(w,e.length)})),o.forEach((({input:e,path:t})=>{const n=`${e}:${t}`;g[n]||(g[n]=m.create(50,0,{input:e.padEnd(w),status:"waiting".padEnd(10)},{barsize:20,linewrap:!0}))}))}if("progress"===e.type){const{path:t,tags:n,input:o,event:r,message:s}=e.data,i=g[`${o}:${t}`];if(!i)return;i.update({start:0,resolve:20,end:50}[r??"start"]??0,{input:o.padEnd(w),status:r?.padEnd(10),message:`${n?.join(", ")}: ${s}`})}})),await new Promise(((e,t)=>{let n="";l.stderr?.on("data",(e=>{n+=e})),l.once("exit",(o=>0===o?e():t(new Error(`rollup build failed:\n${n}`))))}))}))).finally((()=>{m.stop()})),I()}));const C='{\n "name": "",\n "version": "0.0.1",\n "description": "",\n "license": "",\n "author": "",\n "files": ["dist"],\n "exports": {\n ".": "./src/index.ts"\n },\n "scripts": {\n },\n "homepage": "",\n "repository": "",\n "bugs": ""\n}'.trimStart(),D="# $name\n\n## Installation\n\n```bash\nnpm install $name\n# or\npnpm install $name\n# or\nyarn add $name\n```\n\n## Usage\n\n\n## License\n\n$license\n".trimStart();const z=new Map;function W(n,o){if(z.has(n))return z.get(n)[o];const r=t.resolve(n,"package.json"),s=JSON.parse(e.readFileSync(r,"utf-8"));return z.set(n,s),s[o]}s.command("init [name]").option("-t, --template <template>","the package.json template file path or file content").action((async()=>{const[,n]=s.args,o=process.cwd(),{init:r={}}=A()??{},{wd:i}=x(),a=t.basename(i),{named:c,template:p,bug:l={},readme:f=D,readmeTemplate:y}=r,h={template:"bug_report.yml",labels:["bug"],...l};let k=f;if(y){const n=t.resolve(i,y);k=e.readFileSync(n,"utf-8")}const b=function(n,o){let r=o??C,s=!1;try{o&&JSON.parse(o)}catch(e){s=!0}if(s){const s=t.resolve(n,o);r=e.readFileSync(s,"utf-8")}return r}(i,p),{indent:j=" "}=u(b),S={tabSize:j.length,insertSpaces:!0},v=["license","author"];let $=b;for(const e of v)$=d($,g($,[e],W(i,e),{formattingOptions:S}));let[E,O]=await async function(e,n,{wd:o,cwd:r,workspaceName:s}){const i=r.replace(`${o}/`,"");let a=t.basename(r);if("function"==typeof e)return e(n,{full:o,relative:r});let c,p,l=!1;if("object"==typeof e)if(r===o){const{rule:t}=await m.prompt({type:"list",name:"rule",message:"choose a rule",default:"default",choices:["default"].concat(Object.keys(e))});"default"!==t&&(c=t,p=e[t])}else for(const[t,n]of Object.entries(e)){if(w(i,t)){c=t,p=n;break}if(w(`${i}/jiek_ignore_dont_use_same_file_name`,t)){l=!0,c=t,p=n;break}}if(p||(c="packages/*",p=`@${s}/$basename`),!p)throw new Error("no matched rule");if(!n&&l&&(a=await m.prompt({type:"input",name:"name",message:`the matched rule is \`${String(p)}\`, please input the basename\n`}).then((({name:e})=>e))),"function"==typeof p)return p(n,{full:o,relative:r,basename:a});if("string"==typeof p){const e=n??a;return[p.replace(/\$basename/g,e),c?.replace(/\/\*$/g,`/${e}`)]}throw new Error("no matched rule")}(c,n,{wd:i,cwd:o,workspaceName:a});if(!O){const{dir:e}=await m.prompt({type:"input",name:"dir",message:"package directory",default:n});O=e}if(!E){const{name:e}=await m.prompt({type:"input",name:"name",message:"package name",default:n});E=e}$=d($,g($,["name"],E,{formattingOptions:S}));let F=W(i,"repository");"string"==typeof F&&(F={type:"git",url:F,directory:O}),$=d($,g($,["repository"],F,{formattingOptions:S}));$=d($,g($,["homepage"],`${F?.url}/blob/master/${O}/README.md`,{formattingOptions:S}));let _=h.labels;"function"==typeof _&&(_=_({name:E,dir:O})),_.push(`scope:${E}`);const J=`${F?.url}/issues/new?template=${h.template}&labels=${_.join(",")}`;function q(e){if(!O)throw new Error("pkgDir is not defined");return t.resolve(O,e)}$=d($,g($,["bugs"],J,{formattingOptions:S})),e.existsSync(O)||e.mkdirSync(O);const N=q("package.json");if(e.existsSync(N))throw new Error("package.json already exists");e.writeFileSync(N,$),console.log($,"written to",N);const I=W(i,"license"),M=q("README.md");"function"==typeof k&&(k=k({dir:O,packageJson:JSON.parse($)}));const R=k.replace(/\$name/g,E).replace(/\$license/g,I);e.writeFileSync(M,R)}));const K=(e,t)=>new Set([...e].filter((e=>t.has(e))));s.command("publish").aliases(["pub","p"]).option("-b, --bumper <bumper>","bump version","patch").option("-p, --preview","preview publish").action((async({preview:r,bumper:s,...i})=>{M();const{value:a={}}=await _()??{},c=Object.entries(a);if(0===c.length)throw new Error("no packages selected");const p=c.map((([e,t])=>{const{type:r,exports:s={}}=t,i="module"===r,a={...t},[c,p]=function({entrypoints:e,pkgIsModule:t,entries:r,config:s,dir:i,noFilter:a,withSource:c,withSuffix:p}){const{build:l={}}=s??{},{crossModuleConvertor:f=!0}=l,u=`./${(e=>o(i??process.cwd(),e))(((...e)=>n(i??process.cwd(),...e))(("object"==typeof l?.output?.dir?l.output.dir.js:l?.output?.dir)??"dist"))}`,[,m]=k(e);r&&Object.entries(m).forEach((([e])=>{r.some((t=>w(e,t,{matchBase:!0})))||delete m[e]}));const d=a?m:b(m,{skipValue:[/(^|\/)\.jk-noentry/,...j]});return[d,S(d,{outdir:u,withSource:c,withSuffix:p,withConditional:{...f?{import:e=>!t&&0===K(new Set(e.conditionals),new Set(["import","module"])).size&&e.dist.replace(/\.js$/,".mjs"),require:e=>!(!t||0!==K(new Set(e.conditionals),new Set(["require","node"])).size)&&e.dist.replace(/\.js$/,".cjs")}:{}}})]}({entrypoints:s,pkgIsModule:i,config:A(e),dir:e,noFilter:!0,withSource:!0,withSuffix:!0});return a.exports={...c,...p},[e,a]})),l=Object.entries(i).reduce(((e,[t,n])=>(n&&e.push(`--${t}`,n),e)),[]);for(const[n,o]of p){const i=e.readFileSync(t.join(n,"package.json"),"utf-8"),a=JSON.parse(i)??"0.0.0",c=h(a.version,s),{indent:p=" "}=u(i),f={tabSize:p.length,insertSpaces:!0};let m=i;m=d(m,g(m,["version"],c,{formattingOptions:f}));for(const[e,t]of Object.entries(o))if(JSON.stringify(t)!==JSON.stringify(a[e]))if("exports"!==e)m=d(m,g(m,["publishConfig",e],t,{formattingOptions:f}));else{const e=t;for(const[t,n]of Object.entries(e))m=d(m,g(m,["publishConfig","exports",t],n,{formattingOptions:f}));const n=e?.["."],r={};if(n){switch(typeof n){case"string":r["module"===o?.type?"module":"main"]=n;break;case"object":{const e=n;r.main=e.require??e.default,r.module=e.import??e.module??e.default;break}}for(const[e,t]of Object.entries(r))void 0!==t&&(m=d(m,g(m,["publishConfig",e],t,{formattingOptions:f})))}}try{if(e.renameSync(t.join(n,"package.json"),t.join(n,"package.json.bak")),e.writeFileSync(t.join(n,"package.json"),m),console.log(m),r){console.warn("preview mode");continue}y.execSync(["pnpm","publish","--access","public","--no-git-checks",...l].join(" "),{cwd:n,stdio:"inherit"});const o=d(i,g(i,["version"],c,{}));e.writeFileSync(t.join(n,"package.json.bak"),o)}finally{e.unlinkSync(t.join(n,"package.json")),e.renameSync(t.join(n,"package.json.bak"),t.join(n,"package.json"))}}I()})),s.parse(process.argv);
package/dist/index.cjs ADDED
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ const defineConfig = (config) => config;
4
+
5
+ exports.defineConfig = defineConfig;
package/dist/index.js CHANGED
@@ -1,5 +1,3 @@
1
- 'use strict';
2
-
3
1
  const defineConfig = (config) => config;
4
2
 
5
- exports.defineConfig = defineConfig;
3
+ export { defineConfig };
@@ -0,0 +1 @@
1
+ "use strict";exports.defineConfig=e=>e;
package/dist/index.min.js CHANGED
@@ -1 +1 @@
1
- "use strict";exports.defineConfig=e=>e;
1
+ const o=o=>o;export{o as defineConfig};