jiek 1.1.11 → 1.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -35
- package/dist/cli.cjs +45 -15
- package/dist/cli.d.cts +4 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.js +45 -15
- package/dist/index.d.cts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/rollup/index.cjs +36 -8
- package/dist/rollup/index.js +36 -8
- package/package.json +2 -2
- package/src/commands/build.ts +41 -8
- package/src/rollup/base.ts +13 -0
- package/src/rollup/index.ts +53 -15
- package/src/rollup/plugins/globals.ts +0 -34
package/README.md
CHANGED
@@ -1,47 +1,35 @@
|
|
1
1
|
# Jiek
|
2
2
|
|
3
|
-
|
3
|
+
| zh-Hans | [en](./.about/en/README.md) |
|
4
4
|
|
5
|
-
|
5
|
+
[](https://npmjs.com/package/jiek)
|
6
|
+
[](https://npm.chart.dev/jiek)
|
6
7
|
|
7
|
-
|
8
|
-
- A: `tsup` 基于 esbuild 与 rollup,是他们上层的一个 no-config 构建工具
|
9
|
-
- 关于类型编译的支持并不足够智能,无法自动找到对应的 `tsconfig.json`,在 `monorepo` 下面会遇到相关的问题
|
10
|
-
- 虽然它是声称 no-config,但是在多入口,以及其他的复杂情况下的产物时,仍需要编写相关配置
|
11
|
-
- 偏向于使用 cli 中的相关参数,以及配置文件,不够自然
|
12
|
-
- 在 `monorepo` 的场景下使用起来进行开发时,在复杂依赖关系的情况下需要管理复杂的构建依赖关系
|
13
|
-
- 老牌工具,符合时代背景下的相关需求;沉淀时间久,功能相对来说较为完善;生态较为丰富,网络上的资源较多
|
14
|
-
|
15
|
-
- Q: [`unbuild`](https://github.com/unjs/unbuild)
|
16
|
-
- A: 该工具的底座技术与 `tsup` 也是极为一致,与其不同的便是他的 config 实际上是可以基于 package.json 生成的。
|
17
|
-
- 该工具与 `tsup` 一样,存在对:「`monorepo` 支持不好」、「不支持 Project Reference」这些问题
|
18
|
-
- 使用的时候你需要根据模版声明输出,再反向根据约定好的规则去创建相关的入口文件,不够自然,也不够灵活过于死板
|
19
|
-
- 不过该工具在无配置化上也前进了较大一步,对于一些简单的项目来说,是一个不错的选择
|
20
|
-
|
21
|
-
- Q: [`bunchee`](https://github.com/huozhi/bunchee)
|
22
|
-
- A: 换成了 `swc` + `rollup`,嗯。
|
23
|
-
- 同样在 `monorepo` 下有着相关问题,同样没办法处理 Project Reference
|
24
|
-
- 定义了一定的 exports 产物到输入文件的规则,能实现一定的灵活性,但是编写导出规则时会过于冗长
|
25
|
-
- 没办法在 monorepo 的复杂依赖关系场景中去减轻开发负担
|
8
|
+
> 基于 `package.json` 元数据并适用于 `Monorepo` 的**轻便**工具库编译管理套件。
|
26
9
|
|
27
|
-
|
10
|
+
- 自动推断:基于 `package.json` 的相关字段自动推断出构建规则
|
11
|
+
- `exports`:根据入口文件推断构建目标与类型
|
12
|
+
- `type: module`:当开启时智能决定输出文件后缀,不需要考虑 `cjs` 与 `esm` 的适配问题
|
13
|
+
- `dependencies`、`peerDependencies`、`optionalDependencies`:自动将符合规则的依赖标记为 `external`
|
14
|
+
- `devDependencies`:将标记为开发依赖的 bundle 进对应的最终产物之中
|
15
|
+
- 工作空间友好:支持在 pnpm 下的工作空间
|
16
|
+
- 类型定义文件:支持聚合生成类型定义文件
|
17
|
+
- 监听模式:适配 rollup 的监听模式
|
18
|
+
- 发布适配:支持同构生成 `package.json` 等相关字段
|
28
19
|
|
29
|
-
|
20
|
+
## 安装
|
30
21
|
|
31
22
|
```bash
|
32
|
-
|
23
|
+
npm i -D jiek
|
24
|
+
# or
|
25
|
+
pnpm i -D jiek
|
26
|
+
# or
|
27
|
+
yarn add -D jiek
|
33
28
|
```
|
34
29
|
|
35
|
-
##
|
36
|
-
|
37
|
-
有啥好用的?
|
38
|
-
|
39
|
-
- 简化你的导出规则,不需要去写一些能够自动化生成的代码
|
40
|
-
- 自然而然的对你的输入进行构建,按照统一的规则你可以几乎不用去写多余的配置
|
41
|
-
- 在构建的时候不再依赖预构建目标的依赖或者是整体的全量构建,每一次构建只需要关注自己的目标
|
42
|
-
- 预集成了一套完整的构建工具链,自动根据需求激活相关的插件进行工作
|
30
|
+
## 使用
|
43
31
|
|
44
|
-
###
|
32
|
+
### 构建
|
45
33
|
|
46
34
|
写构建脚本一直不是一件简单的事情,那么怎么把一个复杂的事情变简单呢?我们可以回到需求的本身,那就是「定义什么便构建什么」。在这里我们用自然的方式来定义构建产物,而不需要去多写一行多余的代码。
|
47
35
|
|
@@ -125,7 +113,16 @@ export default defineConfig({
|
|
125
113
|
- [ ] 支持更多的 PM
|
126
114
|
- [ ] 工作空间构建流
|
127
115
|
- [ ] 依赖分析工具
|
128
|
-
- 本次构建哪些在
|
116
|
+
- 本次构建哪些在 package 中声明的依赖没用用到,可以移除(提供配置关闭该警告)
|
129
117
|
- 针对构建产物的依赖关系生成关系图(可配置颗粒度为文件或者导出方法)
|
130
118
|
|
131
|
-
###
|
119
|
+
### 发布
|
120
|
+
|
121
|
+
## 为什么不使用 X?
|
122
|
+
|
123
|
+
在这里与 `jiek` 类似的工具有:[`tsup`](https://github.com/egoist/tsup)、[`unbuild`](https://github.com/unjs/unbuild)、[`bunchee`](https://github.com/huozhi/bunchee)、[`pkgroll`](https://github.com/privatenumber/pkgroll)、[`tsdown`](https://github.com/sxzz/tsdown)。但是他们都有着一些共同问题没有解决,我们来看看:
|
124
|
+
|
125
|
+
- `monorepo` 的支持存在一定的问题,在依赖工作空间其他的包时必须重新编译相关依赖
|
126
|
+
- 编写入口文件的规则过于繁琐,不够自然
|
127
|
+
- 无法处理 `tsconfig.json` 中的 `Project Reference` 相关问题
|
128
|
+
- 根据`conditions`
|
package/dist/cli.cjs
CHANGED
@@ -149,7 +149,7 @@ async function getSelectedProjectsGraph(filter = commander.program.getOptionValu
|
|
149
149
|
|
150
150
|
var name = "jiek";
|
151
151
|
var type = "module";
|
152
|
-
var version = "1.1.
|
152
|
+
var version = "1.1.13";
|
153
153
|
var description$1 = "YiJie's personal kits.";
|
154
154
|
var bin = {
|
155
155
|
jiek: "bin/jiek.js",
|
@@ -176,7 +176,7 @@ var imports = {
|
|
176
176
|
};
|
177
177
|
var dependencies = {
|
178
178
|
"@jiek/pkger": "workspace:^",
|
179
|
-
"@jiek/rollup-plugin-dts": "^6.1
|
179
|
+
"@jiek/rollup-plugin-dts": "^6.2.1",
|
180
180
|
"@jiek/utils": "workspace:^",
|
181
181
|
"@rollup/plugin-commonjs": "^28.0.0",
|
182
182
|
"@rollup/plugin-json": "^6.0.1",
|
@@ -265,14 +265,6 @@ var pkg = {
|
|
265
265
|
|
266
266
|
commander.program.version(pkg.version).description(pkg.description).option("--root <root>", "root path").option("-c, --config-path <configPath>", "config path");
|
267
267
|
|
268
|
-
let resolve;
|
269
|
-
function actionDone() {
|
270
|
-
resolve();
|
271
|
-
}
|
272
|
-
function actionRestore() {
|
273
|
-
new Promise((r) => resolve = r);
|
274
|
-
}
|
275
|
-
|
276
268
|
const require$3 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('cli.cjs', document.baseURI).href)));
|
277
269
|
function packageIsExist(name) {
|
278
270
|
try {
|
@@ -399,7 +391,10 @@ function parseBoolean(v) {
|
|
399
391
|
return true;
|
400
392
|
return Boolean(v);
|
401
393
|
}
|
402
|
-
commander.program.command("build").description(description).option("-o, --outdir <OUTDIR>", outdirDescription, String, "dist").option(
|
394
|
+
commander.program.command("build").description(description).option("-o, --outdir <OUTDIR>", outdirDescription, String, "dist").option(
|
395
|
+
"-e, --entries <ENTRIES>",
|
396
|
+
"Specify the build entry-points of the package.json's 'exports' field.(support glob)"
|
397
|
+
).option("--external <EXTERNAL>", "Specify the external dependencies of the package.", String).option("-nj, --noJs", "Do not output js files.", parseBoolean).option("-nd, --noDts", "Do not output dts files.", parseBoolean).option("-nm, --noMin", "Do not output minify files.", parseBoolean).option("-nc, --noClean", "Do not clean the output directory before building.", parseBoolean).option(
|
403
398
|
"-om, --onlyMin",
|
404
399
|
"Only output minify files, but dts files will still be output, it only replaces the js files.",
|
405
400
|
parseBoolean
|
@@ -407,6 +402,7 @@ commander.program.command("build").description(description).option("-o, --outdir
|
|
407
402
|
outdir,
|
408
403
|
silent,
|
409
404
|
entries,
|
405
|
+
external,
|
410
406
|
verbose,
|
411
407
|
noJs: withoutJs,
|
412
408
|
noDts: withoutDts,
|
@@ -427,7 +423,6 @@ commander.program.command("build").description(description).option("-o, --outdir
|
|
427
423
|
},
|
428
424
|
[]
|
429
425
|
);
|
430
|
-
actionRestore();
|
431
426
|
const { build } = loadConfig();
|
432
427
|
silent = silent ?? build?.silent ?? false;
|
433
428
|
if (withoutMin && onlyMin) {
|
@@ -441,6 +436,7 @@ commander.program.command("build").description(description).option("-o, --outdir
|
|
441
436
|
JIEK_OUT_DIR: outdir,
|
442
437
|
JIEK_CLEAN: String(!noClean),
|
443
438
|
JIEK_ENTRIES: entries,
|
439
|
+
JIEK_EXTERNAL: external,
|
444
440
|
JIEK_WITHOUT_JS: String(withoutJs),
|
445
441
|
JIEK_WITHOUT_DTS: String(withoutDts),
|
446
442
|
JIEK_WITHOUT_MINIFY: String(withoutMin),
|
@@ -493,6 +489,8 @@ commander.program.command("build").description(description).option("-o, --outdir
|
|
493
489
|
}
|
494
490
|
});
|
495
491
|
const bars = {};
|
492
|
+
const times = {};
|
493
|
+
const locks = {};
|
496
494
|
let inputMaxLen = 10;
|
497
495
|
child.on("message", (e) => {
|
498
496
|
if (e.type === "debug")
|
@@ -518,7 +516,7 @@ commander.program.command("build").description(description).option("-o, --outdir
|
|
518
516
|
return;
|
519
517
|
bars[key] = multiBars.create(50, 0, {
|
520
518
|
pkgName: manifest.name,
|
521
|
-
input: input.padEnd(inputMaxLen),
|
519
|
+
input: input.padEnd(inputMaxLen + 5),
|
522
520
|
status: "waiting".padEnd(10)
|
523
521
|
}, {
|
524
522
|
barsize: 20,
|
@@ -537,6 +535,7 @@ commander.program.command("build").description(description).option("-o, --outdir
|
|
537
535
|
const bar = bars[`${input}:${path2}`];
|
538
536
|
if (!bar)
|
539
537
|
return;
|
538
|
+
const time = times[`${input}:${path2}`];
|
540
539
|
bar.update(
|
541
540
|
{
|
542
541
|
start: 0,
|
@@ -544,12 +543,36 @@ commander.program.command("build").description(description).option("-o, --outdir
|
|
544
543
|
end: 50
|
545
544
|
}[event ?? "start"] ?? 0,
|
546
545
|
{
|
547
|
-
input: input.padEnd(inputMaxLen),
|
546
|
+
input: (time ? `${input}(x${time.toString().padStart(2, "0")})` : input).padEnd(inputMaxLen + 5),
|
548
547
|
status: event?.padEnd(10),
|
549
548
|
message: `${tags?.join(", ")}: ${message}`
|
550
549
|
}
|
551
550
|
);
|
552
551
|
}
|
552
|
+
if (e.type === "watchChange") {
|
553
|
+
const {
|
554
|
+
path: path2,
|
555
|
+
input
|
556
|
+
} = e.data;
|
557
|
+
const key = `${input}:${path2}`;
|
558
|
+
const bar = bars[key];
|
559
|
+
if (!bar)
|
560
|
+
return;
|
561
|
+
let time = times[key] ?? 1;
|
562
|
+
if (!locks[key]) {
|
563
|
+
time += 1;
|
564
|
+
times[key] = time;
|
565
|
+
setTimeout(() => {
|
566
|
+
locks[key] = false;
|
567
|
+
}, 100);
|
568
|
+
bar.update(0, {
|
569
|
+
input: `${input}(x${time.toString().padStart(2, "0")})`.padEnd(inputMaxLen + 5),
|
570
|
+
status: "watching".padEnd(10),
|
571
|
+
message: "watching..."
|
572
|
+
});
|
573
|
+
}
|
574
|
+
locks[key] = true;
|
575
|
+
}
|
553
576
|
});
|
554
577
|
await new Promise((resolve, reject) => {
|
555
578
|
let errorStr = "";
|
@@ -574,7 +597,6 @@ ${errorStr}`)));
|
|
574
597
|
} finally {
|
575
598
|
multiBars.stop();
|
576
599
|
}
|
577
|
-
actionDone();
|
578
600
|
});
|
579
601
|
|
580
602
|
var utils$1 = {};
|
@@ -4959,6 +4981,14 @@ commander.program.command("init [name]").option("-t, --template <template>", "th
|
|
4959
4981
|
fs__default.default.writeFileSync(readmeFilePath, readmeContent);
|
4960
4982
|
});
|
4961
4983
|
|
4984
|
+
let resolve;
|
4985
|
+
function actionDone() {
|
4986
|
+
resolve();
|
4987
|
+
}
|
4988
|
+
function actionRestore() {
|
4989
|
+
new Promise((r) => resolve = r);
|
4990
|
+
}
|
4991
|
+
|
4962
4992
|
const intersection = (a, b) => new Set([...a].filter((i) => b.has(i)));
|
4963
4993
|
const {
|
4964
4994
|
JIEK_OUT_DIR
|
package/dist/cli.d.cts
CHANGED
@@ -41,6 +41,10 @@ interface TemplateOptions {
|
|
41
41
|
js?: OutputControl;
|
42
42
|
dts?: OutputControl;
|
43
43
|
};
|
44
|
+
/**
|
45
|
+
* Set the external dependencies of the package.
|
46
|
+
*/
|
47
|
+
external?: (string | RegExp)[];
|
44
48
|
plugins?: InputPluginOption | ((type: 'js' | 'dts', context: ConfigGenerateContext) => InputPluginOption) | {
|
45
49
|
js: InputPluginOption;
|
46
50
|
dts?: InputPluginOption;
|
package/dist/cli.d.ts
CHANGED
@@ -41,6 +41,10 @@ interface TemplateOptions {
|
|
41
41
|
js?: OutputControl;
|
42
42
|
dts?: OutputControl;
|
43
43
|
};
|
44
|
+
/**
|
45
|
+
* Set the external dependencies of the package.
|
46
|
+
*/
|
47
|
+
external?: (string | RegExp)[];
|
44
48
|
plugins?: InputPluginOption | ((type: 'js' | 'dts', context: ConfigGenerateContext) => InputPluginOption) | {
|
45
49
|
js: InputPluginOption;
|
46
50
|
dts?: InputPluginOption;
|
package/dist/cli.js
CHANGED
@@ -118,7 +118,7 @@ async function getSelectedProjectsGraph(filter = program.getOptionValue("filter"
|
|
118
118
|
|
119
119
|
var name = "jiek";
|
120
120
|
var type = "module";
|
121
|
-
var version = "1.1.
|
121
|
+
var version = "1.1.13";
|
122
122
|
var description$1 = "YiJie's personal kits.";
|
123
123
|
var bin = {
|
124
124
|
jiek: "bin/jiek.js",
|
@@ -145,7 +145,7 @@ var imports = {
|
|
145
145
|
};
|
146
146
|
var dependencies = {
|
147
147
|
"@jiek/pkger": "workspace:^",
|
148
|
-
"@jiek/rollup-plugin-dts": "^6.1
|
148
|
+
"@jiek/rollup-plugin-dts": "^6.2.1",
|
149
149
|
"@jiek/utils": "workspace:^",
|
150
150
|
"@rollup/plugin-commonjs": "^28.0.0",
|
151
151
|
"@rollup/plugin-json": "^6.0.1",
|
@@ -234,14 +234,6 @@ var pkg = {
|
|
234
234
|
|
235
235
|
program.version(pkg.version).description(pkg.description).option("--root <root>", "root path").option("-c, --config-path <configPath>", "config path");
|
236
236
|
|
237
|
-
let resolve;
|
238
|
-
function actionDone() {
|
239
|
-
resolve();
|
240
|
-
}
|
241
|
-
function actionRestore() {
|
242
|
-
new Promise((r) => resolve = r);
|
243
|
-
}
|
244
|
-
|
245
237
|
const require$2 = createRequire(import.meta.url);
|
246
238
|
function packageIsExist(name) {
|
247
239
|
try {
|
@@ -368,7 +360,10 @@ function parseBoolean(v) {
|
|
368
360
|
return true;
|
369
361
|
return Boolean(v);
|
370
362
|
}
|
371
|
-
program.command("build").description(description).option("-o, --outdir <OUTDIR>", outdirDescription, String, "dist").option(
|
363
|
+
program.command("build").description(description).option("-o, --outdir <OUTDIR>", outdirDescription, String, "dist").option(
|
364
|
+
"-e, --entries <ENTRIES>",
|
365
|
+
"Specify the build entry-points of the package.json's 'exports' field.(support glob)"
|
366
|
+
).option("--external <EXTERNAL>", "Specify the external dependencies of the package.", String).option("-nj, --noJs", "Do not output js files.", parseBoolean).option("-nd, --noDts", "Do not output dts files.", parseBoolean).option("-nm, --noMin", "Do not output minify files.", parseBoolean).option("-nc, --noClean", "Do not clean the output directory before building.", parseBoolean).option(
|
372
367
|
"-om, --onlyMin",
|
373
368
|
"Only output minify files, but dts files will still be output, it only replaces the js files.",
|
374
369
|
parseBoolean
|
@@ -376,6 +371,7 @@ program.command("build").description(description).option("-o, --outdir <OUTDIR>"
|
|
376
371
|
outdir,
|
377
372
|
silent,
|
378
373
|
entries,
|
374
|
+
external,
|
379
375
|
verbose,
|
380
376
|
noJs: withoutJs,
|
381
377
|
noDts: withoutDts,
|
@@ -396,7 +392,6 @@ program.command("build").description(description).option("-o, --outdir <OUTDIR>"
|
|
396
392
|
},
|
397
393
|
[]
|
398
394
|
);
|
399
|
-
actionRestore();
|
400
395
|
const { build } = loadConfig();
|
401
396
|
silent = silent ?? build?.silent ?? false;
|
402
397
|
if (withoutMin && onlyMin) {
|
@@ -410,6 +405,7 @@ program.command("build").description(description).option("-o, --outdir <OUTDIR>"
|
|
410
405
|
JIEK_OUT_DIR: outdir,
|
411
406
|
JIEK_CLEAN: String(!noClean),
|
412
407
|
JIEK_ENTRIES: entries,
|
408
|
+
JIEK_EXTERNAL: external,
|
413
409
|
JIEK_WITHOUT_JS: String(withoutJs),
|
414
410
|
JIEK_WITHOUT_DTS: String(withoutDts),
|
415
411
|
JIEK_WITHOUT_MINIFY: String(withoutMin),
|
@@ -462,6 +458,8 @@ program.command("build").description(description).option("-o, --outdir <OUTDIR>"
|
|
462
458
|
}
|
463
459
|
});
|
464
460
|
const bars = {};
|
461
|
+
const times = {};
|
462
|
+
const locks = {};
|
465
463
|
let inputMaxLen = 10;
|
466
464
|
child.on("message", (e) => {
|
467
465
|
if (e.type === "debug")
|
@@ -487,7 +485,7 @@ program.command("build").description(description).option("-o, --outdir <OUTDIR>"
|
|
487
485
|
return;
|
488
486
|
bars[key] = multiBars.create(50, 0, {
|
489
487
|
pkgName: manifest.name,
|
490
|
-
input: input.padEnd(inputMaxLen),
|
488
|
+
input: input.padEnd(inputMaxLen + 5),
|
491
489
|
status: "waiting".padEnd(10)
|
492
490
|
}, {
|
493
491
|
barsize: 20,
|
@@ -506,6 +504,7 @@ program.command("build").description(description).option("-o, --outdir <OUTDIR>"
|
|
506
504
|
const bar = bars[`${input}:${path2}`];
|
507
505
|
if (!bar)
|
508
506
|
return;
|
507
|
+
const time = times[`${input}:${path2}`];
|
509
508
|
bar.update(
|
510
509
|
{
|
511
510
|
start: 0,
|
@@ -513,12 +512,36 @@ program.command("build").description(description).option("-o, --outdir <OUTDIR>"
|
|
513
512
|
end: 50
|
514
513
|
}[event ?? "start"] ?? 0,
|
515
514
|
{
|
516
|
-
input: input.padEnd(inputMaxLen),
|
515
|
+
input: (time ? `${input}(x${time.toString().padStart(2, "0")})` : input).padEnd(inputMaxLen + 5),
|
517
516
|
status: event?.padEnd(10),
|
518
517
|
message: `${tags?.join(", ")}: ${message}`
|
519
518
|
}
|
520
519
|
);
|
521
520
|
}
|
521
|
+
if (e.type === "watchChange") {
|
522
|
+
const {
|
523
|
+
path: path2,
|
524
|
+
input
|
525
|
+
} = e.data;
|
526
|
+
const key = `${input}:${path2}`;
|
527
|
+
const bar = bars[key];
|
528
|
+
if (!bar)
|
529
|
+
return;
|
530
|
+
let time = times[key] ?? 1;
|
531
|
+
if (!locks[key]) {
|
532
|
+
time += 1;
|
533
|
+
times[key] = time;
|
534
|
+
setTimeout(() => {
|
535
|
+
locks[key] = false;
|
536
|
+
}, 100);
|
537
|
+
bar.update(0, {
|
538
|
+
input: `${input}(x${time.toString().padStart(2, "0")})`.padEnd(inputMaxLen + 5),
|
539
|
+
status: "watching".padEnd(10),
|
540
|
+
message: "watching..."
|
541
|
+
});
|
542
|
+
}
|
543
|
+
locks[key] = true;
|
544
|
+
}
|
522
545
|
});
|
523
546
|
await new Promise((resolve, reject) => {
|
524
547
|
let errorStr = "";
|
@@ -543,7 +566,6 @@ ${errorStr}`)));
|
|
543
566
|
} finally {
|
544
567
|
multiBars.stop();
|
545
568
|
}
|
546
|
-
actionDone();
|
547
569
|
});
|
548
570
|
|
549
571
|
var utils$1 = {};
|
@@ -4928,6 +4950,14 @@ program.command("init [name]").option("-t, --template <template>", "the package.
|
|
4928
4950
|
fs.writeFileSync(readmeFilePath, readmeContent);
|
4929
4951
|
});
|
4930
4952
|
|
4953
|
+
let resolve;
|
4954
|
+
function actionDone() {
|
4955
|
+
resolve();
|
4956
|
+
}
|
4957
|
+
function actionRestore() {
|
4958
|
+
new Promise((r) => resolve = r);
|
4959
|
+
}
|
4960
|
+
|
4931
4961
|
const intersection = (a, b) => new Set([...a].filter((i) => b.has(i)));
|
4932
4962
|
const {
|
4933
4963
|
JIEK_OUT_DIR
|
package/dist/index.d.cts
CHANGED
@@ -41,6 +41,10 @@ interface TemplateOptions {
|
|
41
41
|
js?: OutputControl;
|
42
42
|
dts?: OutputControl;
|
43
43
|
};
|
44
|
+
/**
|
45
|
+
* Set the external dependencies of the package.
|
46
|
+
*/
|
47
|
+
external?: (string | RegExp)[];
|
44
48
|
plugins?: InputPluginOption | ((type: 'js' | 'dts', context: ConfigGenerateContext) => InputPluginOption) | {
|
45
49
|
js: InputPluginOption;
|
46
50
|
dts?: InputPluginOption;
|
package/dist/index.d.ts
CHANGED
@@ -41,6 +41,10 @@ interface TemplateOptions {
|
|
41
41
|
js?: OutputControl;
|
42
42
|
dts?: OutputControl;
|
43
43
|
};
|
44
|
+
/**
|
45
|
+
* Set the external dependencies of the package.
|
46
|
+
*/
|
47
|
+
external?: (string | RegExp)[];
|
44
48
|
plugins?: InputPluginOption | ((type: 'js' | 'dts', context: ConfigGenerateContext) => InputPluginOption) | {
|
45
49
|
js: InputPluginOption;
|
46
50
|
dts?: InputPluginOption;
|
package/dist/rollup/index.cjs
CHANGED
@@ -4504,12 +4504,15 @@ const {
|
|
4504
4504
|
JIEK_ROOT,
|
4505
4505
|
JIEK_NAME,
|
4506
4506
|
JIEK_ENTRIES,
|
4507
|
+
JIEK_EXTERNAL,
|
4507
4508
|
JIEK_WITHOUT_JS,
|
4508
4509
|
JIEK_WITHOUT_DTS,
|
4509
4510
|
JIEK_WITHOUT_MINIFY,
|
4510
4511
|
JIEK_NO_CLEAN,
|
4511
4512
|
JIEK_ONLY_MINIFY
|
4512
4513
|
} = process.env;
|
4514
|
+
const entries = JIEK_ENTRIES?.split(",").map((e) => e.trim()).map((e) => ({ "index": "." })[e] ?? e);
|
4515
|
+
const commandExternal = JIEK_EXTERNAL?.split(",").map((e) => e.trim()).map((e) => new RegExp(`^${e}$`)) ?? [];
|
4513
4516
|
const WORKSPACE_ROOT = JIEK_ROOT ?? getWorkspaceDir.getWorkspaceDir();
|
4514
4517
|
const COMMON_OPTIONS = {};
|
4515
4518
|
const COMMON_PLUGINS = [
|
@@ -4601,10 +4604,11 @@ const generateConfigs = (context, options = {}) => {
|
|
4601
4604
|
name,
|
4602
4605
|
input,
|
4603
4606
|
output,
|
4604
|
-
external,
|
4607
|
+
external: inputExternal,
|
4605
4608
|
pkgIsModule,
|
4606
4609
|
conditionals
|
4607
4610
|
} = context;
|
4611
|
+
const external = [...inputExternal, ...options.external ?? [], ...commandExternal];
|
4608
4612
|
const isModule = conditionals.includes("import");
|
4609
4613
|
const isCommonJS = conditionals.includes("require");
|
4610
4614
|
const isBrowser = conditionals.includes("browser");
|
@@ -4612,12 +4616,22 @@ const generateConfigs = (context, options = {}) => {
|
|
4612
4616
|
resolveWorkspacePath("tsconfig.json"),
|
4613
4617
|
resolveWorkspacePath("tsconfig.dts.json")
|
4614
4618
|
];
|
4619
|
+
const buildTSConfigPaths = [
|
4620
|
+
...dtsTSConfigPaths,
|
4621
|
+
resolveWorkspacePath("tsconfig.build.json")
|
4622
|
+
];
|
4615
4623
|
let dtsTSConfigPath;
|
4616
4624
|
dtsTSConfigPaths.forEach((p) => {
|
4617
4625
|
if (fs__default.default.existsSync(p) && fs__default.default.statSync(p).isFile()) {
|
4618
4626
|
dtsTSConfigPath = p;
|
4619
4627
|
}
|
4620
4628
|
});
|
4629
|
+
let buildTSConfigPath;
|
4630
|
+
buildTSConfigPaths.forEach((p) => {
|
4631
|
+
if (fs__default.default.existsSync(p) && fs__default.default.statSync(p).isFile()) {
|
4632
|
+
buildTSConfigPath = p;
|
4633
|
+
}
|
4634
|
+
});
|
4621
4635
|
let compilerOptions = {};
|
4622
4636
|
if (dtsTSConfigPath) {
|
4623
4637
|
const jsonCompilerOptions = getCompilerOptionsByFilePath(dtsTSConfigPath, path.resolve(input));
|
@@ -4652,7 +4666,9 @@ const generateConfigs = (context, options = {}) => {
|
|
4652
4666
|
const tsOutputSuffix = jsOutputSuffix.replace(/(\.[cm]?)js$/, ".d$1ts");
|
4653
4667
|
const { js: jsOutput, dts: dtsOutput } = resolveOutputControls(context, build.output);
|
4654
4668
|
const rollupOptions = [];
|
4669
|
+
const commonPlugins = [];
|
4655
4670
|
if (jsOutput && !WITHOUT_JS) {
|
4671
|
+
const sourcemap = typeof options?.output?.sourcemap === "object" ? options.output.sourcemap.js : options?.output?.sourcemap;
|
4656
4672
|
rollupOptions.push({
|
4657
4673
|
input: inputObj,
|
4658
4674
|
external,
|
@@ -4662,12 +4678,13 @@ const generateConfigs = (context, options = {}) => {
|
|
4662
4678
|
name,
|
4663
4679
|
interop: "auto",
|
4664
4680
|
entryFileNames: (chunkInfo) => Array.isArray(inputObj) ? chunkInfo.facadeModuleId.replace(`${process.cwd()}/`, "").replace(globCommonDir, pathCommonDir).replace(/(\.[cm]?)ts$/, jsOutputSuffix) : output.replace(`${jsOutdir}/`, ""),
|
4665
|
-
sourcemap
|
4681
|
+
sourcemap,
|
4666
4682
|
format: isModule ? "esm" : isCommonJS ? "cjs" : isBrowser ? "umd" : pkgIsModule ? "esm" : "cjs",
|
4667
4683
|
strict: typeof options?.output?.strict === "object" ? options.output.strict.js : options?.output?.strict
|
4668
4684
|
})
|
4669
4685
|
],
|
4670
4686
|
plugins: [
|
4687
|
+
...commonPlugins,
|
4671
4688
|
pluginNodeResolve.nodeResolve({ exportConditions }),
|
4672
4689
|
import('rollup-plugin-postcss').then(
|
4673
4690
|
({ default: postcss }) => postcss({
|
@@ -4676,7 +4693,8 @@ const generateConfigs = (context, options = {}) => {
|
|
4676
4693
|
})
|
4677
4694
|
).catch(() => void 0),
|
4678
4695
|
esbuild__default.default({
|
4679
|
-
|
4696
|
+
sourceMap: sourcemap === "hidden" ? false : !!sourcemap,
|
4697
|
+
tsconfig: buildTSConfigPath
|
4680
4698
|
}),
|
4681
4699
|
commonjs__default.default(),
|
4682
4700
|
progress({
|
@@ -4704,12 +4722,12 @@ const generateConfigs = (context, options = {}) => {
|
|
4704
4722
|
}
|
4705
4723
|
],
|
4706
4724
|
plugins: [
|
4725
|
+
...commonPlugins,
|
4707
4726
|
pluginNodeResolve.nodeResolve({ exportConditions }),
|
4708
4727
|
skip({ patterns: [STYLE_REGEXP] }),
|
4709
4728
|
rollupPluginDts.dts({
|
4710
4729
|
respectExternal: true,
|
4711
4730
|
compilerOptions: {
|
4712
|
-
...compilerOptions,
|
4713
4731
|
// temp directory, it not affect the output
|
4714
4732
|
// but if the user not set it and `declaration`, inputs can't generate any dts files when the input relative imports of `package.json`
|
4715
4733
|
outDir: "dist",
|
@@ -4719,7 +4737,8 @@ const generateConfigs = (context, options = {}) => {
|
|
4719
4737
|
// Expected '{', got 'type' (Note that you need plugins to import files that are not JavaScript)
|
4720
4738
|
// https://github.com/Swatinem/rollup-plugin-dts/issues/96
|
4721
4739
|
noEmit: false
|
4722
|
-
}
|
4740
|
+
},
|
4741
|
+
tsconfig: dtsTSConfigPath
|
4723
4742
|
}),
|
4724
4743
|
progress({
|
4725
4744
|
onEvent: (event, message) => execa.sendMessage(
|
@@ -4733,6 +4752,18 @@ const generateConfigs = (context, options = {}) => {
|
|
4733
4752
|
]
|
4734
4753
|
});
|
4735
4754
|
}
|
4755
|
+
rollupOptions[0].plugins = [
|
4756
|
+
{
|
4757
|
+
name: "jiek-plugin-watcher",
|
4758
|
+
watchChange: (id) => execa.sendMessage(
|
4759
|
+
{
|
4760
|
+
type: "watchChange",
|
4761
|
+
data: { id, name: JIEK_NAME, path: path$1, input }
|
4762
|
+
}
|
4763
|
+
)
|
4764
|
+
},
|
4765
|
+
...rollupOptions[0].plugins
|
4766
|
+
];
|
4736
4767
|
return rollupOptions;
|
4737
4768
|
};
|
4738
4769
|
function template(packageJSON) {
|
@@ -4742,9 +4773,6 @@ function template(packageJSON) {
|
|
4742
4773
|
throw new Error("package.json name is required");
|
4743
4774
|
if (!entrypoints$1)
|
4744
4775
|
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
4776
|
const packageName = pascalCase(name);
|
4749
4777
|
const external = externalResolver(packageJSON);
|
4750
4778
|
const [filteredResolvedEntrypoints, exports] = getExports({
|
package/dist/rollup/index.js
CHANGED
@@ -4489,12 +4489,15 @@ const {
|
|
4489
4489
|
JIEK_ROOT,
|
4490
4490
|
JIEK_NAME,
|
4491
4491
|
JIEK_ENTRIES,
|
4492
|
+
JIEK_EXTERNAL,
|
4492
4493
|
JIEK_WITHOUT_JS,
|
4493
4494
|
JIEK_WITHOUT_DTS,
|
4494
4495
|
JIEK_WITHOUT_MINIFY,
|
4495
4496
|
JIEK_NO_CLEAN,
|
4496
4497
|
JIEK_ONLY_MINIFY
|
4497
4498
|
} = process.env;
|
4499
|
+
const entries = JIEK_ENTRIES?.split(",").map((e) => e.trim()).map((e) => ({ "index": "." })[e] ?? e);
|
4500
|
+
const commandExternal = JIEK_EXTERNAL?.split(",").map((e) => e.trim()).map((e) => new RegExp(`^${e}$`)) ?? [];
|
4498
4501
|
const WORKSPACE_ROOT = JIEK_ROOT ?? getWorkspaceDir();
|
4499
4502
|
const COMMON_OPTIONS = {};
|
4500
4503
|
const COMMON_PLUGINS = [
|
@@ -4586,10 +4589,11 @@ const generateConfigs = (context, options = {}) => {
|
|
4586
4589
|
name,
|
4587
4590
|
input,
|
4588
4591
|
output,
|
4589
|
-
external,
|
4592
|
+
external: inputExternal,
|
4590
4593
|
pkgIsModule,
|
4591
4594
|
conditionals
|
4592
4595
|
} = context;
|
4596
|
+
const external = [...inputExternal, ...options.external ?? [], ...commandExternal];
|
4593
4597
|
const isModule = conditionals.includes("import");
|
4594
4598
|
const isCommonJS = conditionals.includes("require");
|
4595
4599
|
const isBrowser = conditionals.includes("browser");
|
@@ -4597,12 +4601,22 @@ const generateConfigs = (context, options = {}) => {
|
|
4597
4601
|
resolveWorkspacePath("tsconfig.json"),
|
4598
4602
|
resolveWorkspacePath("tsconfig.dts.json")
|
4599
4603
|
];
|
4604
|
+
const buildTSConfigPaths = [
|
4605
|
+
...dtsTSConfigPaths,
|
4606
|
+
resolveWorkspacePath("tsconfig.build.json")
|
4607
|
+
];
|
4600
4608
|
let dtsTSConfigPath;
|
4601
4609
|
dtsTSConfigPaths.forEach((p) => {
|
4602
4610
|
if (fs.existsSync(p) && fs.statSync(p).isFile()) {
|
4603
4611
|
dtsTSConfigPath = p;
|
4604
4612
|
}
|
4605
4613
|
});
|
4614
|
+
let buildTSConfigPath;
|
4615
|
+
buildTSConfigPaths.forEach((p) => {
|
4616
|
+
if (fs.existsSync(p) && fs.statSync(p).isFile()) {
|
4617
|
+
buildTSConfigPath = p;
|
4618
|
+
}
|
4619
|
+
});
|
4606
4620
|
let compilerOptions = {};
|
4607
4621
|
if (dtsTSConfigPath) {
|
4608
4622
|
const jsonCompilerOptions = getCompilerOptionsByFilePath(dtsTSConfigPath, resolve(input));
|
@@ -4637,7 +4651,9 @@ const generateConfigs = (context, options = {}) => {
|
|
4637
4651
|
const tsOutputSuffix = jsOutputSuffix.replace(/(\.[cm]?)js$/, ".d$1ts");
|
4638
4652
|
const { js: jsOutput, dts: dtsOutput } = resolveOutputControls(context, build.output);
|
4639
4653
|
const rollupOptions = [];
|
4654
|
+
const commonPlugins = [];
|
4640
4655
|
if (jsOutput && !WITHOUT_JS) {
|
4656
|
+
const sourcemap = typeof options?.output?.sourcemap === "object" ? options.output.sourcemap.js : options?.output?.sourcemap;
|
4641
4657
|
rollupOptions.push({
|
4642
4658
|
input: inputObj,
|
4643
4659
|
external,
|
@@ -4647,12 +4663,13 @@ const generateConfigs = (context, options = {}) => {
|
|
4647
4663
|
name,
|
4648
4664
|
interop: "auto",
|
4649
4665
|
entryFileNames: (chunkInfo) => Array.isArray(inputObj) ? chunkInfo.facadeModuleId.replace(`${process.cwd()}/`, "").replace(globCommonDir, pathCommonDir).replace(/(\.[cm]?)ts$/, jsOutputSuffix) : output.replace(`${jsOutdir}/`, ""),
|
4650
|
-
sourcemap
|
4666
|
+
sourcemap,
|
4651
4667
|
format: isModule ? "esm" : isCommonJS ? "cjs" : isBrowser ? "umd" : pkgIsModule ? "esm" : "cjs",
|
4652
4668
|
strict: typeof options?.output?.strict === "object" ? options.output.strict.js : options?.output?.strict
|
4653
4669
|
})
|
4654
4670
|
],
|
4655
4671
|
plugins: [
|
4672
|
+
...commonPlugins,
|
4656
4673
|
nodeResolve({ exportConditions }),
|
4657
4674
|
import('rollup-plugin-postcss').then(
|
4658
4675
|
({ default: postcss }) => postcss({
|
@@ -4661,7 +4678,8 @@ const generateConfigs = (context, options = {}) => {
|
|
4661
4678
|
})
|
4662
4679
|
).catch(() => void 0),
|
4663
4680
|
esbuild({
|
4664
|
-
|
4681
|
+
sourceMap: sourcemap === "hidden" ? false : !!sourcemap,
|
4682
|
+
tsconfig: buildTSConfigPath
|
4665
4683
|
}),
|
4666
4684
|
commonjs(),
|
4667
4685
|
progress({
|
@@ -4689,12 +4707,12 @@ const generateConfigs = (context, options = {}) => {
|
|
4689
4707
|
}
|
4690
4708
|
],
|
4691
4709
|
plugins: [
|
4710
|
+
...commonPlugins,
|
4692
4711
|
nodeResolve({ exportConditions }),
|
4693
4712
|
skip({ patterns: [STYLE_REGEXP] }),
|
4694
4713
|
dts({
|
4695
4714
|
respectExternal: true,
|
4696
4715
|
compilerOptions: {
|
4697
|
-
...compilerOptions,
|
4698
4716
|
// temp directory, it not affect the output
|
4699
4717
|
// but if the user not set it and `declaration`, inputs can't generate any dts files when the input relative imports of `package.json`
|
4700
4718
|
outDir: "dist",
|
@@ -4704,7 +4722,8 @@ const generateConfigs = (context, options = {}) => {
|
|
4704
4722
|
// Expected '{', got 'type' (Note that you need plugins to import files that are not JavaScript)
|
4705
4723
|
// https://github.com/Swatinem/rollup-plugin-dts/issues/96
|
4706
4724
|
noEmit: false
|
4707
|
-
}
|
4725
|
+
},
|
4726
|
+
tsconfig: dtsTSConfigPath
|
4708
4727
|
}),
|
4709
4728
|
progress({
|
4710
4729
|
onEvent: (event, message) => sendMessage(
|
@@ -4718,6 +4737,18 @@ const generateConfigs = (context, options = {}) => {
|
|
4718
4737
|
]
|
4719
4738
|
});
|
4720
4739
|
}
|
4740
|
+
rollupOptions[0].plugins = [
|
4741
|
+
{
|
4742
|
+
name: "jiek-plugin-watcher",
|
4743
|
+
watchChange: (id) => sendMessage(
|
4744
|
+
{
|
4745
|
+
type: "watchChange",
|
4746
|
+
data: { id, name: JIEK_NAME, path, input }
|
4747
|
+
}
|
4748
|
+
)
|
4749
|
+
},
|
4750
|
+
...rollupOptions[0].plugins
|
4751
|
+
];
|
4721
4752
|
return rollupOptions;
|
4722
4753
|
};
|
4723
4754
|
function template(packageJSON) {
|
@@ -4727,9 +4758,6 @@ function template(packageJSON) {
|
|
4727
4758
|
throw new Error("package.json name is required");
|
4728
4759
|
if (!entrypoints)
|
4729
4760
|
throw new Error("package.json exports is required");
|
4730
|
-
const entries = JIEK_ENTRIES?.split(",").map((e) => e.trim()).map((e) => ({
|
4731
|
-
"index": "."
|
4732
|
-
})[e] ?? e);
|
4733
4761
|
const packageName = pascalCase(name);
|
4734
4762
|
const external = externalResolver(packageJSON);
|
4735
4763
|
const [filteredResolvedEntrypoints, exports] = getExports({
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "jiek",
|
3
3
|
"type": "module",
|
4
|
-
"version": "1.1.
|
4
|
+
"version": "1.1.13",
|
5
5
|
"description": "YiJie's personal kits.",
|
6
6
|
"bin": {
|
7
7
|
"jiek": "bin/jiek.js",
|
@@ -36,7 +36,7 @@
|
|
36
36
|
"#~/*": "./src/*"
|
37
37
|
},
|
38
38
|
"dependencies": {
|
39
|
-
"@jiek/rollup-plugin-dts": "^6.1
|
39
|
+
"@jiek/rollup-plugin-dts": "^6.2.1",
|
40
40
|
"@rollup/plugin-commonjs": "^28.0.0",
|
41
41
|
"@rollup/plugin-json": "^6.0.1",
|
42
42
|
"@rollup/plugin-node-resolve": "^15.3.0",
|
package/src/commands/build.ts
CHANGED
@@ -6,7 +6,6 @@ import { MultiBar, Presets } from 'cli-progress'
|
|
6
6
|
import { program } from 'commander'
|
7
7
|
import { execaCommand } from 'execa'
|
8
8
|
|
9
|
-
import { actionDone, actionRestore } from '../inner'
|
10
9
|
import type { RollupProgressEvent, TemplateOptions } from '../rollup/base'
|
11
10
|
import type { ProjectsGraph } from '../utils/filterSupport'
|
12
11
|
import { filterPackagesGraph, getSelectedProjectsGraph } from '../utils/filterSupport'
|
@@ -49,7 +48,8 @@ interface BuildOptions extends Record<string, unknown> {
|
|
49
48
|
*/
|
50
49
|
outdir: string
|
51
50
|
silent: boolean
|
52
|
-
entries
|
51
|
+
entries?: string
|
52
|
+
external?: string
|
53
53
|
verbose: boolean
|
54
54
|
noJs: boolean
|
55
55
|
noDts: boolean
|
@@ -70,7 +70,11 @@ program
|
|
70
70
|
.command('build')
|
71
71
|
.description(description)
|
72
72
|
.option('-o, --outdir <OUTDIR>', outdirDescription, String, 'dist')
|
73
|
-
.option(
|
73
|
+
.option(
|
74
|
+
'-e, --entries <ENTRIES>',
|
75
|
+
"Specify the build entry-points of the package.json's 'exports' field.(support glob)"
|
76
|
+
)
|
77
|
+
.option('--external <EXTERNAL>', 'Specify the external dependencies of the package.', String)
|
74
78
|
.option('-nj, --noJs', 'Do not output js files.', parseBoolean)
|
75
79
|
.option('-nd, --noDts', 'Do not output dts files.', parseBoolean)
|
76
80
|
.option('-nm, --noMin', 'Do not output minify files.', parseBoolean)
|
@@ -86,6 +90,7 @@ program
|
|
86
90
|
outdir,
|
87
91
|
silent,
|
88
92
|
entries,
|
93
|
+
external,
|
89
94
|
verbose,
|
90
95
|
noJs: withoutJs,
|
91
96
|
noDts: withoutDts,
|
@@ -110,7 +115,6 @@ program
|
|
110
115
|
},
|
111
116
|
[] as string[]
|
112
117
|
)
|
113
|
-
actionRestore()
|
114
118
|
const { build } = loadConfig()
|
115
119
|
silent = silent ?? build?.silent ?? false
|
116
120
|
|
@@ -126,6 +130,7 @@ program
|
|
126
130
|
JIEK_OUT_DIR: outdir,
|
127
131
|
JIEK_CLEAN: String(!noClean),
|
128
132
|
JIEK_ENTRIES: entries,
|
133
|
+
JIEK_EXTERNAL: external,
|
129
134
|
JIEK_WITHOUT_JS: String(withoutJs),
|
130
135
|
JIEK_WITHOUT_DTS: String(withoutDts),
|
131
136
|
JIEK_WITHOUT_MINIFY: String(withoutMin),
|
@@ -184,6 +189,8 @@ program
|
|
184
189
|
}
|
185
190
|
})
|
186
191
|
const bars: Record<string, ReturnType<typeof multiBars.create>> = {}
|
192
|
+
const times: Record<string, number> = {}
|
193
|
+
const locks: Record<string, boolean> = {}
|
187
194
|
let inputMaxLen = 10
|
188
195
|
child.on('message', (e: RollupProgressEvent) => {
|
189
196
|
if (e.type === 'debug') console.log(...(Array.isArray(e.data) ? e.data : [e.data]))
|
@@ -209,7 +216,7 @@ program
|
|
209
216
|
if (bars[key]) return
|
210
217
|
bars[key] = multiBars.create(50, 0, {
|
211
218
|
pkgName: manifest.name,
|
212
|
-
input: input.padEnd(inputMaxLen),
|
219
|
+
input: input.padEnd(inputMaxLen + 5),
|
213
220
|
status: 'waiting'.padEnd(10)
|
214
221
|
}, {
|
215
222
|
barsize: 20,
|
@@ -227,6 +234,7 @@ program
|
|
227
234
|
} = e.data
|
228
235
|
const bar = bars[`${input}:${path}`]
|
229
236
|
if (!bar) return
|
237
|
+
const time = times[`${input}:${path}`]
|
230
238
|
bar.update(
|
231
239
|
{
|
232
240
|
start: 0,
|
@@ -234,12 +242,39 @@ program
|
|
234
242
|
end: 50
|
235
243
|
}[event ?? 'start'] ?? 0,
|
236
244
|
{
|
237
|
-
input:
|
245
|
+
input: (
|
246
|
+
time
|
247
|
+
? `${input}(x${time.toString().padStart(2, '0')})`
|
248
|
+
: input
|
249
|
+
).padEnd(inputMaxLen + 5),
|
238
250
|
status: event?.padEnd(10),
|
239
251
|
message: `${tags?.join(', ')}: ${message}`
|
240
252
|
}
|
241
253
|
)
|
242
254
|
}
|
255
|
+
if (e.type === 'watchChange') {
|
256
|
+
const {
|
257
|
+
path,
|
258
|
+
input
|
259
|
+
} = e.data
|
260
|
+
const key = `${input}:${path}`
|
261
|
+
const bar = bars[key]
|
262
|
+
if (!bar) return
|
263
|
+
let time = times[key] ?? 1
|
264
|
+
if (!locks[key]) {
|
265
|
+
time += 1
|
266
|
+
times[key] = time
|
267
|
+
setTimeout(() => {
|
268
|
+
locks[key] = false
|
269
|
+
}, 100)
|
270
|
+
bar.update(0, {
|
271
|
+
input: `${input}(x${time.toString().padStart(2, '0')})`.padEnd(inputMaxLen + 5),
|
272
|
+
status: 'watching'.padEnd(10),
|
273
|
+
message: 'watching...'
|
274
|
+
})
|
275
|
+
}
|
276
|
+
locks[key] = true
|
277
|
+
}
|
243
278
|
})
|
244
279
|
await new Promise<void>((resolve, reject) => {
|
245
280
|
let errorStr = ''
|
@@ -266,6 +301,4 @@ program
|
|
266
301
|
} finally {
|
267
302
|
multiBars.stop()
|
268
303
|
}
|
269
|
-
|
270
|
-
actionDone()
|
271
304
|
})
|
package/src/rollup/base.ts
CHANGED
@@ -44,6 +44,10 @@ export interface TemplateOptions {
|
|
44
44
|
js?: OutputControl
|
45
45
|
dts?: OutputControl
|
46
46
|
}
|
47
|
+
/**
|
48
|
+
* Set the external dependencies of the package.
|
49
|
+
*/
|
50
|
+
external?: (string | RegExp)[]
|
47
51
|
plugins?:
|
48
52
|
| InputPluginOption
|
49
53
|
| ((type: 'js' | 'dts', context: ConfigGenerateContext) => InputPluginOption)
|
@@ -65,6 +69,15 @@ export type RollupProgressEvent =
|
|
65
69
|
targetsLength: number
|
66
70
|
}
|
67
71
|
}
|
72
|
+
| {
|
73
|
+
type: 'watchChange'
|
74
|
+
data: {
|
75
|
+
id: string
|
76
|
+
name: string
|
77
|
+
path: string
|
78
|
+
input: string
|
79
|
+
}
|
80
|
+
}
|
68
81
|
| {
|
69
82
|
type: 'debug'
|
70
83
|
data: unknown
|
package/src/rollup/index.ts
CHANGED
@@ -11,7 +11,7 @@ import { nodeResolve } from '@rollup/plugin-node-resolve'
|
|
11
11
|
import terser from '@rollup/plugin-terser'
|
12
12
|
import { sendMessage } from 'execa'
|
13
13
|
import { isMatch } from 'micromatch'
|
14
|
-
import type { InputPluginOption, OutputOptions, OutputPlugin, RollupOptions } from 'rollup'
|
14
|
+
import type { InputPluginOption, OutputOptions, OutputPlugin, Plugin, RollupOptions } from 'rollup'
|
15
15
|
import esbuild from 'rollup-plugin-esbuild'
|
16
16
|
import ts from 'typescript'
|
17
17
|
|
@@ -35,12 +35,25 @@ const {
|
|
35
35
|
JIEK_ROOT,
|
36
36
|
JIEK_NAME,
|
37
37
|
JIEK_ENTRIES,
|
38
|
+
JIEK_EXTERNAL,
|
38
39
|
JIEK_WITHOUT_JS,
|
39
40
|
JIEK_WITHOUT_DTS,
|
40
41
|
JIEK_WITHOUT_MINIFY,
|
41
42
|
JIEK_NO_CLEAN,
|
42
43
|
JIEK_ONLY_MINIFY
|
43
44
|
} = process.env
|
45
|
+
|
46
|
+
const entries = JIEK_ENTRIES
|
47
|
+
?.split(',')
|
48
|
+
.map(e => e.trim())
|
49
|
+
.map(e => ({ 'index': '.' }[e] ?? e))
|
50
|
+
|
51
|
+
const commandExternal = JIEK_EXTERNAL
|
52
|
+
?.split(',')
|
53
|
+
.map(e => e.trim())
|
54
|
+
.map(e => new RegExp(`^${e}$`))
|
55
|
+
?? []
|
56
|
+
|
44
57
|
const WORKSPACE_ROOT = JIEK_ROOT ?? getWorkspaceDir()
|
45
58
|
const COMMON_OPTIONS = {} satisfies RollupOptions
|
46
59
|
const COMMON_PLUGINS = [
|
@@ -182,10 +195,11 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
182
195
|
name,
|
183
196
|
input,
|
184
197
|
output,
|
185
|
-
external,
|
198
|
+
external: inputExternal,
|
186
199
|
pkgIsModule,
|
187
200
|
conditionals
|
188
201
|
} = context
|
202
|
+
const external = [...inputExternal, ...(options.external ?? []), ...commandExternal]
|
189
203
|
const isModule = conditionals.includes('import')
|
190
204
|
const isCommonJS = conditionals.includes('require')
|
191
205
|
const isBrowser = conditionals.includes('browser')
|
@@ -193,12 +207,22 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
193
207
|
resolveWorkspacePath('tsconfig.json'),
|
194
208
|
resolveWorkspacePath('tsconfig.dts.json')
|
195
209
|
]
|
210
|
+
const buildTSConfigPaths = [
|
211
|
+
...dtsTSConfigPaths,
|
212
|
+
resolveWorkspacePath('tsconfig.build.json')
|
213
|
+
]
|
196
214
|
let dtsTSConfigPath: string | undefined
|
197
215
|
dtsTSConfigPaths.forEach(p => {
|
198
216
|
if (fs.existsSync(p) && fs.statSync(p).isFile()) {
|
199
217
|
dtsTSConfigPath = p
|
200
218
|
}
|
201
219
|
})
|
220
|
+
let buildTSConfigPath: string | undefined
|
221
|
+
buildTSConfigPaths.forEach(p => {
|
222
|
+
if (fs.existsSync(p) && fs.statSync(p).isFile()) {
|
223
|
+
buildTSConfigPath = p
|
224
|
+
}
|
225
|
+
})
|
202
226
|
let compilerOptions: ts.CompilerOptions = {}
|
203
227
|
if (dtsTSConfigPath) {
|
204
228
|
const jsonCompilerOptions = getCompilerOptionsByFilePath(dtsTSConfigPath, resolve(input))
|
@@ -245,7 +269,12 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
245
269
|
const tsOutputSuffix = jsOutputSuffix.replace(/(\.[cm]?)js$/, '.d$1ts')
|
246
270
|
const { js: jsOutput, dts: dtsOutput } = resolveOutputControls(context, build.output)
|
247
271
|
const rollupOptions: RollupOptions[] = []
|
272
|
+
|
273
|
+
const commonPlugins: Plugin[] = []
|
248
274
|
if (jsOutput && !WITHOUT_JS) {
|
275
|
+
const sourcemap = typeof options?.output?.sourcemap === 'object'
|
276
|
+
? options.output.sourcemap.js
|
277
|
+
: options?.output?.sourcemap
|
249
278
|
rollupOptions.push({
|
250
279
|
input: inputObj,
|
251
280
|
external,
|
@@ -261,9 +290,7 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
261
290
|
.replace(/(\.[cm]?)ts$/, jsOutputSuffix)
|
262
291
|
: output.replace(`${jsOutdir}/`, '')
|
263
292
|
),
|
264
|
-
sourcemap
|
265
|
-
? options.output.sourcemap.js
|
266
|
-
: options?.output?.sourcemap,
|
293
|
+
sourcemap,
|
267
294
|
format: isModule ? 'esm' : (
|
268
295
|
isCommonJS ? 'cjs' : (
|
269
296
|
isBrowser ? 'umd' : (
|
@@ -277,6 +304,7 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
277
304
|
})
|
278
305
|
],
|
279
306
|
plugins: [
|
307
|
+
...commonPlugins,
|
280
308
|
nodeResolve({ exportConditions }),
|
281
309
|
import('rollup-plugin-postcss')
|
282
310
|
.then(({ default: postcss }) =>
|
@@ -287,7 +315,8 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
287
315
|
)
|
288
316
|
.catch(() => void 0),
|
289
317
|
esbuild({
|
290
|
-
|
318
|
+
sourceMap: sourcemap === 'hidden' ? false : !!sourcemap,
|
319
|
+
tsconfig: buildTSConfigPath
|
291
320
|
}),
|
292
321
|
commonjs(),
|
293
322
|
progress({
|
@@ -303,6 +332,7 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
303
332
|
]
|
304
333
|
})
|
305
334
|
}
|
335
|
+
|
306
336
|
if (dtsOutput && !WITHOUT_DTS) {
|
307
337
|
rollupOptions.push({
|
308
338
|
input: inputObj,
|
@@ -328,12 +358,12 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
328
358
|
}
|
329
359
|
],
|
330
360
|
plugins: [
|
361
|
+
...commonPlugins,
|
331
362
|
nodeResolve({ exportConditions }),
|
332
363
|
skip({ patterns: [STYLE_REGEXP] }),
|
333
364
|
dts({
|
334
365
|
respectExternal: true,
|
335
366
|
compilerOptions: {
|
336
|
-
...compilerOptions,
|
337
367
|
// temp directory, it not affect the output
|
338
368
|
// but if the user not set it and `declaration`, inputs can't generate any dts files when the input relative imports of `package.json`
|
339
369
|
outDir: 'dist',
|
@@ -343,7 +373,8 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
343
373
|
// Expected '{', got 'type' (Note that you need plugins to import files that are not JavaScript)
|
344
374
|
// https://github.com/Swatinem/rollup-plugin-dts/issues/96
|
345
375
|
noEmit: false
|
346
|
-
}
|
376
|
+
},
|
377
|
+
tsconfig: dtsTSConfigPath
|
347
378
|
}),
|
348
379
|
progress({
|
349
380
|
onEvent: (event, message) =>
|
@@ -358,6 +389,20 @@ const generateConfigs = (context: ConfigGenerateContext, options: TemplateOption
|
|
358
389
|
]
|
359
390
|
})
|
360
391
|
}
|
392
|
+
// only push the first one a watcher plugin
|
393
|
+
rollupOptions[0].plugins = [
|
394
|
+
{
|
395
|
+
name: 'jiek-plugin-watcher',
|
396
|
+
watchChange: (id) =>
|
397
|
+
sendMessage(
|
398
|
+
{
|
399
|
+
type: 'watchChange',
|
400
|
+
data: { id, name: JIEK_NAME!, path, input }
|
401
|
+
} satisfies RollupProgressEvent
|
402
|
+
)
|
403
|
+
},
|
404
|
+
...(rollupOptions[0].plugins as any)
|
405
|
+
]
|
361
406
|
return rollupOptions
|
362
407
|
}
|
363
408
|
|
@@ -367,13 +412,6 @@ export function template(packageJSON: PackageJSON): RollupOptions[] {
|
|
367
412
|
if (!name) throw new Error('package.json name is required')
|
368
413
|
if (!entrypoints) throw new Error('package.json exports is required')
|
369
414
|
|
370
|
-
const entries = JIEK_ENTRIES
|
371
|
-
?.split(',')
|
372
|
-
.map(e => e.trim())
|
373
|
-
.map(e => ({
|
374
|
-
'index': '.'
|
375
|
-
}[e] ?? e))
|
376
|
-
|
377
415
|
const packageName = pascalCase(name)
|
378
416
|
|
379
417
|
const external = externalResolver(packageJSON as Record<string, unknown>)
|
@@ -1,34 +0,0 @@
|
|
1
|
-
import type { Plugin, PluginImpl } from 'rollup'
|
2
|
-
|
3
|
-
import globalResolver from '../utils/globalResolver'
|
4
|
-
|
5
|
-
interface GlobalsOptions {
|
6
|
-
external?: (string | RegExp)[]
|
7
|
-
}
|
8
|
-
|
9
|
-
export function createGlobalsLinkage() {
|
10
|
-
let globals = {}
|
11
|
-
const dependencies = new Set<string>([])
|
12
|
-
return [
|
13
|
-
(({ external } = {}) => {
|
14
|
-
return {
|
15
|
-
name: 'globals',
|
16
|
-
resolveId(id) {
|
17
|
-
if (external?.some(dep => dep instanceof RegExp ? dep.test(id) : dep === id)) {
|
18
|
-
dependencies.add(id)
|
19
|
-
return { id, external: true }
|
20
|
-
}
|
21
|
-
return null
|
22
|
-
},
|
23
|
-
outputOptions(options) {
|
24
|
-
globals = [...dependencies].reduce((acc, value) => ({
|
25
|
-
...acc,
|
26
|
-
[value]: globalResolver(value)
|
27
|
-
}), {})
|
28
|
-
return { ...options, globals }
|
29
|
-
}
|
30
|
-
}
|
31
|
-
}) as PluginImpl<GlobalsOptions>,
|
32
|
-
{ outputOptions: options => ({ ...options, globals }) } as Plugin
|
33
|
-
] as const
|
34
|
-
}
|