jiek 0.4.7-alpha.14 → 0.4.7-alpha.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. package/bin/jiek.js +4 -7
  2. package/dist/{cli.d.cts → cli.d.mts} +0 -15
  3. package/dist/cli.d.mts.map +1 -0
  4. package/dist/cli.d.ts +0 -15
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +222 -4408
  7. package/dist/cli.js.map +1 -0
  8. package/dist/cli.min.js +1 -19
  9. package/dist/cli.min.js.map +1 -0
  10. package/dist/cli.min.mjs +1 -0
  11. package/dist/cli.min.mjs.map +1 -0
  12. package/dist/cli.mjs +803 -0
  13. package/dist/cli.mjs.map +1 -0
  14. package/dist/{index.d.cts → index.d.mts} +0 -15
  15. package/dist/index.d.mts.map +1 -0
  16. package/dist/index.d.ts +0 -15
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +3 -1
  19. package/dist/index.js.map +1 -0
  20. package/dist/index.min.js +1 -1
  21. package/dist/index.min.js.map +1 -0
  22. package/dist/index.min.mjs +1 -0
  23. package/dist/index.min.mjs.map +1 -0
  24. package/dist/index.mjs +3 -0
  25. package/dist/index.mjs.map +1 -0
  26. package/dist/rollup/index.d.mts.map +1 -0
  27. package/dist/rollup/index.d.ts.map +1 -0
  28. package/dist/rollup/index.js +69 -4189
  29. package/dist/rollup/index.js.map +1 -0
  30. package/dist/rollup/index.min.js +1 -19
  31. package/dist/rollup/index.min.js.map +1 -0
  32. package/dist/rollup/index.min.mjs +1 -0
  33. package/dist/rollup/index.min.mjs.map +1 -0
  34. package/dist/rollup/index.mjs +551 -0
  35. package/dist/rollup/index.mjs.map +1 -0
  36. package/package.json +19 -11
  37. package/src/commands/base.ts +2 -1
  38. package/src/commands/build.ts +2 -4
  39. package/src/commands/publish.ts +2 -16
  40. package/src/pkg.ts +1 -0
  41. package/src/rollup/index.ts +3 -5
  42. package/src/utils/filterSupport.ts +0 -2
  43. package/src/utils/getExports.ts +7 -11
  44. package/src/utils/tsRegister.ts +0 -4
  45. package/dist/cli.cjs +0 -5041
  46. package/dist/cli.min.cjs +0 -19
  47. package/dist/index.cjs +0 -5
  48. package/dist/index.min.cjs +0 -1
  49. package/dist/rollup/index.cjs +0 -4688
  50. package/dist/rollup/index.min.cjs +0 -19
  51. /package/dist/rollup/{index.d.cts → index.d.mts} +0 -0
@@ -0,0 +1,551 @@
1
+ import fs from 'node:fs';
2
+ import path, { resolve, relative, dirname } from 'node:path';
3
+ import { resolveEntrypoints, filterLeafs, DEFAULT_SKIP_VALUES, entrypoints2Exports, getAllLeafs } from '@jiek/pkger/entrypoints';
4
+ import { dts } from '@jiek/rollup-plugin-dts';
5
+ import { isWorkspaceDir, getWorkspaceDir } from '@jiek/utils/getWorkspaceDir';
6
+ import json from '@rollup/plugin-json';
7
+ import { nodeResolve } from '@rollup/plugin-node-resolve';
8
+ import terser from '@rollup/plugin-terser';
9
+ import { sendMessage } from 'execa';
10
+ import { parse } from 'jsonc-parser';
11
+ import { isMatch } from 'micromatch';
12
+ import esbuild from 'rollup-plugin-esbuild';
13
+ import ts from 'typescript';
14
+ import { program } from 'commander';
15
+ import { load } from 'js-yaml';
16
+ import '@pnpm/filter-workspace-packages';
17
+
18
+ const intersection = (a, b) => new Set([...a].filter((i) => b.has(i)));
19
+ function getExports({
20
+ entrypoints,
21
+ pkgIsModule,
22
+ entries,
23
+ config,
24
+ dir,
25
+ noFilter
26
+ }) {
27
+ const dirResolve = (...paths) => resolve(dir ?? process.cwd(), ...paths);
28
+ const dirRelative = (path) => relative(dir ?? process.cwd(), path);
29
+ const { build = {} } = config ?? {};
30
+ const {
31
+ crossModuleConvertor = true
32
+ } = build;
33
+ const jsOutdir = `./${dirRelative(dirResolve(
34
+ (typeof build?.output?.dir === "object" ? build.output.dir.js : build?.output?.dir) ?? "dist"
35
+ ))}`;
36
+ const [, resolvedEntrypoints] = resolveEntrypoints(entrypoints);
37
+ if (entries) {
38
+ Object.entries(resolvedEntrypoints).forEach(([key]) => {
39
+ if (!entries.some((e) => isMatch(key, e, { matchBase: true }))) {
40
+ delete resolvedEntrypoints[key];
41
+ }
42
+ });
43
+ }
44
+ const filteredResolvedEntrypoints = noFilter ? resolvedEntrypoints : filterLeafs(
45
+ resolvedEntrypoints,
46
+ {
47
+ skipValue: [
48
+ // ignore values that filename starts with `.jk-noentry`
49
+ /(^|\/)\.jk-noentry/,
50
+ ...DEFAULT_SKIP_VALUES
51
+ ]
52
+ }
53
+ );
54
+ const crossModuleWithConditional = crossModuleConvertor ? {
55
+ import: (opts) => !pkgIsModule && intersection(
56
+ new Set(opts.conditionals),
57
+ /* @__PURE__ */ new Set(["import", "module"])
58
+ ).size === 0 ? opts.dist.replace(/\.js$/, ".mjs") : false,
59
+ require: (opts) => pkgIsModule && intersection(
60
+ new Set(opts.conditionals),
61
+ /* @__PURE__ */ new Set(["require", "node"])
62
+ ).size === 0 ? opts.dist.replace(/\.js$/, ".cjs") : false
63
+ } : {};
64
+ return [
65
+ filteredResolvedEntrypoints,
66
+ entrypoints2Exports(filteredResolvedEntrypoints, {
67
+ outdir: jsOutdir,
68
+ withConditional: {
69
+ ...crossModuleWithConditional
70
+ }
71
+ })
72
+ ];
73
+ }
74
+
75
+ let root;
76
+ function getRoot() {
77
+ if (root)
78
+ return root;
79
+ const rootOption = program.getOptionValue("root");
80
+ root = rootOption ? path.isAbsolute(rootOption) ? rootOption : path.resolve(process.cwd(), rootOption) : void 0;
81
+ return root;
82
+ }
83
+
84
+ let type = "";
85
+ try {
86
+ require.resolve("@pnpm/filter-workspace-packages");
87
+ type = "pnpm";
88
+ } catch {
89
+ }
90
+ if (type !== "") {
91
+ program.option("-f, --filter <filter>", "filter packages");
92
+ }
93
+
94
+ let wd;
95
+ let notWorkspace = false;
96
+ function getWD() {
97
+ if (wd)
98
+ return { wd, notWorkspace };
99
+ const root = getRoot();
100
+ if (root !== void 0) {
101
+ const isWorkspace = isWorkspaceDir(root, type);
102
+ notWorkspace = !isWorkspace;
103
+ wd = root;
104
+ return { wd, notWorkspace };
105
+ }
106
+ try {
107
+ wd = getWorkspaceDir(type);
108
+ } catch (e) {
109
+ if ("message" in e && e.message === "workspace root not found") {
110
+ wd = root;
111
+ notWorkspace = true;
112
+ } else {
113
+ throw e;
114
+ }
115
+ }
116
+ return { wd, notWorkspace };
117
+ }
118
+
119
+ function packageIsExist(name) {
120
+ try {
121
+ require.resolve(name);
122
+ return true;
123
+ } catch (e) {
124
+ return false;
125
+ }
126
+ }
127
+ let tsRegisterName;
128
+ const registers = [
129
+ process.env.JIEK_TS_REGISTER,
130
+ "esbuild-register",
131
+ "@swc-node/register",
132
+ "ts-node/register"
133
+ ].filter(Boolean);
134
+ for (const register of registers) {
135
+ if (packageIsExist(register)) {
136
+ tsRegisterName = register;
137
+ break;
138
+ }
139
+ }
140
+
141
+ let configName = "jiek.config";
142
+ function getConfigPath(root, dir) {
143
+ const isSupportTsLoader = !!tsRegisterName;
144
+ function configWithExtIsExist(ext) {
145
+ const filenames = [
146
+ path.resolve(process.cwd(), `${configName}.${ext}`),
147
+ path.resolve(process.cwd(), `.${configName}.${ext}`),
148
+ path.resolve(root, `${configName}.${ext}`),
149
+ path.resolve(root, `.${configName}.${ext}`)
150
+ ];
151
+ if (dir) {
152
+ filenames.unshift(...[
153
+ path.resolve(dir, `${configName}.${ext}`),
154
+ path.resolve(dir, `.${configName}.${ext}`)
155
+ ]);
156
+ }
157
+ for (const filename of filenames) {
158
+ if (fs.existsSync(filename) && fs.lstatSync(filename).isFile()) {
159
+ return filename;
160
+ }
161
+ }
162
+ return;
163
+ }
164
+ configName = configWithExtIsExist("js") ?? configName;
165
+ configName = configWithExtIsExist("json") ?? configName;
166
+ configName = configWithExtIsExist("yaml") ?? configName;
167
+ if (isSupportTsLoader) {
168
+ configName = configWithExtIsExist("ts") ?? configName;
169
+ }
170
+ return path.resolve(root, configName);
171
+ }
172
+ function loadConfig(dir) {
173
+ const { wd: root } = getWD();
174
+ let configPath = program.getOptionValue("configPath");
175
+ if (!configPath) {
176
+ configPath = getConfigPath(root, dir);
177
+ } else {
178
+ if (!fs.existsSync(configPath)) {
179
+ throw new Error(`config file not found: ${configPath}`);
180
+ }
181
+ if (!path.isAbsolute(configPath)) {
182
+ configPath = path.resolve(root, configPath);
183
+ }
184
+ }
185
+ const ext = path.extname(configPath);
186
+ let module;
187
+ switch (ext) {
188
+ case ".js":
189
+ module = require(configPath);
190
+ break;
191
+ case ".json":
192
+ return require(configPath);
193
+ case ".yaml":
194
+ return load(fs.readFileSync(configPath, "utf-8"));
195
+ case ".ts":
196
+ if (tsRegisterName) {
197
+ require(tsRegisterName);
198
+ module = require(configPath);
199
+ break;
200
+ }
201
+ throw new Error(
202
+ "ts config file is not supported without ts register, please install esbuild-register or set JIEK_TS_REGISTER env for custom ts register"
203
+ );
204
+ case ".config":
205
+ module = {};
206
+ break;
207
+ default:
208
+ throw new Error(`unsupported config file type: ${ext}`);
209
+ }
210
+ if (!module)
211
+ throw new Error("config file is empty");
212
+ return module.default ?? module;
213
+ }
214
+
215
+ var progress = (options = {}) => {
216
+ const { onEvent } = options;
217
+ return {
218
+ name: "progress",
219
+ buildStart: () => onEvent?.("start", "Start building..."),
220
+ buildEnd: () => onEvent?.("end", "Build completed!"),
221
+ resolveId: {
222
+ order: "post",
223
+ handler: (source) => onEvent?.("resolve", `Resolving ${source}...`)
224
+ },
225
+ load: {
226
+ order: "post",
227
+ handler: (id) => onEvent?.("load", `Loading ${id}...`)
228
+ },
229
+ transform: {
230
+ order: "post",
231
+ handler: (_, id) => onEvent?.("transform", `Transforming ${id}...`)
232
+ }
233
+ };
234
+ };
235
+
236
+ var skip = (options = {}) => {
237
+ return {
238
+ name: "skip",
239
+ // skip the specified files by `options.patterns`
240
+ load(id) {
241
+ if (options.patterns?.some(
242
+ (pattern) => typeof pattern === "string" ? id.includes(pattern) : pattern.test(id)
243
+ )) {
244
+ return "";
245
+ }
246
+ }
247
+ };
248
+ };
249
+
250
+ function externalResolver(jsonOrPath = process.cwd()) {
251
+ const pkg = typeof jsonOrPath === "string" ? fs.existsSync(`${jsonOrPath}/package.json`) ? JSON.parse(fs.readFileSync(`${jsonOrPath}/package.json`, "utf-8")) : {} : jsonOrPath;
252
+ const { dependencies = {}, peerDependencies = {}, optionalDependencies = {} } = pkg;
253
+ const external = Object.keys(dependencies).concat(Object.keys(peerDependencies)).concat(Object.keys(optionalDependencies));
254
+ return external.map((dep) => new RegExp(`^${dep}(/.*)?$`)).concat([
255
+ /^node:/
256
+ ]);
257
+ }
258
+
259
+ const {
260
+ JIEK_ROOT,
261
+ JIEK_ENTRIES
262
+ } = process.env;
263
+ const WORKSPACE_ROOT = JIEK_ROOT ?? getWorkspaceDir();
264
+ const COMMON_OPTIONS = {};
265
+ const COMMON_PLUGINS = [
266
+ json()
267
+ ];
268
+ const config = loadConfig() ?? {};
269
+ const { build = {} } = config;
270
+ const jsOutdir = `./${relative(
271
+ process.cwd(),
272
+ resolve(
273
+ (typeof build?.output?.dir === "object" ? build.output.dir.js : build?.output?.dir) ?? "dist"
274
+ )
275
+ )}`;
276
+ const STYLE_REGEXP = /\.(css|s[ac]ss|less|styl)$/;
277
+ const resolveWorkspacePath = (p) => resolve(WORKSPACE_ROOT, p);
278
+ const pascalCase = (str) => str.replace(/[@|/-](\w)/g, (_, $1) => $1.toUpperCase()).replace(/(?:^|-)(\w)/g, (_, $1) => $1.toUpperCase());
279
+ const reveal = (obj, keys) => keys.reduce((acc, key) => {
280
+ if (typeof acc === "string")
281
+ throw new Error("key not found in exports");
282
+ if (!(key in acc))
283
+ throw new Error(`key ${key} not found in exports`);
284
+ return acc[key];
285
+ }, obj);
286
+ const withMinify = (output, minify = build?.output?.minify) => minify === false ? [output] : minify === "only-minify" ? [{
287
+ ...output,
288
+ // TODO replace suffix when pubish to npm and the `build.output.minify` is 'only-minify'
289
+ // TODO resolve dts output file name
290
+ file: output.file?.replace(/(\.[cm]?js)$/, ".min$1"),
291
+ plugins: [
292
+ ...output.plugins ?? [],
293
+ terser()
294
+ ]
295
+ }] : [
296
+ output,
297
+ {
298
+ ...output,
299
+ file: output.file?.replace(/(\.[cm]?js)$/, ".min$1"),
300
+ plugins: [
301
+ ...output.plugins ?? [],
302
+ terser()
303
+ ]
304
+ }
305
+ ];
306
+ const getTSConfig = (p) => !fs.existsSync(p) || !fs.statSync(p).isFile() ? {} : parse(fs.readFileSync(p, "utf-8"), [], { allowTrailingComma: true, allowEmptyContent: true });
307
+ const getExtendTSConfig = (tsconfigPath) => {
308
+ tsconfigPath = resolve(tsconfigPath);
309
+ const tsconfigPathDirname = dirname(tsconfigPath);
310
+ const { extends: exts, ...tsconfig } = getTSConfig(tsconfigPath);
311
+ const resolvePaths = (paths) => paths?.map((p) => resolve(tsconfigPathDirname, p)) ?? [];
312
+ const extendsPaths = resolvePaths(
313
+ exts ? Array.isArray(exts) ? exts : [exts] : []
314
+ );
315
+ if (extendsPaths.length === 0)
316
+ return tsconfig;
317
+ return extendsPaths.map(getExtendTSConfig).reduce((acc, { compilerOptions = {}, references: _, ...curr }) => ({
318
+ ...acc,
319
+ ...curr,
320
+ compilerOptions: {
321
+ ...acc.compilerOptions,
322
+ ...compilerOptions
323
+ }
324
+ }), tsconfig);
325
+ };
326
+ const getCompilerOptionsByFilePath = (tsconfigPath, filePath) => {
327
+ tsconfigPath = resolve(tsconfigPath);
328
+ filePath = resolve(filePath);
329
+ const tsconfigPathDirname = dirname(tsconfigPath);
330
+ const tsconfig = getExtendTSConfig(tsconfigPath);
331
+ const resolvePaths = (paths) => paths?.map((p) => resolve(tsconfigPathDirname, p)) ?? [];
332
+ const [
333
+ references,
334
+ files,
335
+ include,
336
+ exclude
337
+ ] = [
338
+ tsconfig.references?.map(({ path }) => path),
339
+ tsconfig.files,
340
+ tsconfig.include,
341
+ tsconfig.exclude
342
+ ].map(resolvePaths);
343
+ if (exclude.length > 0 && exclude.some((i) => isMatch(filePath, i)))
344
+ return;
345
+ if (tsconfig.files?.length === 0 && tsconfig.include?.length === 0)
346
+ return;
347
+ let isInclude = false;
348
+ isInclude || (isInclude = files.length > 0 && files.includes(filePath));
349
+ isInclude || (isInclude = include.length > 0 && include.some((i) => isMatch(filePath, i)));
350
+ if (isInclude) {
351
+ return tsconfig.compilerOptions ?? {};
352
+ } else {
353
+ if (tsconfig.files && tsconfig.files.length > 0 || tsconfig.include && tsconfig.include.length > 0)
354
+ return;
355
+ }
356
+ references.reverse();
357
+ for (const ref of references) {
358
+ const compilerOptions = getCompilerOptionsByFilePath(ref, filePath);
359
+ if (compilerOptions)
360
+ return compilerOptions;
361
+ }
362
+ return tsconfig.compilerOptions;
363
+ };
364
+ const generateConfigs = ({
365
+ path,
366
+ name,
367
+ input,
368
+ output,
369
+ external,
370
+ pkgIsModule,
371
+ conditionals
372
+ }, options = {}) => {
373
+ const isModule = conditionals.includes("import");
374
+ const isCommonJS = conditionals.includes("require");
375
+ const isBrowser = conditionals.includes("browser");
376
+ const dtsTSConfigPaths = [
377
+ resolveWorkspacePath("tsconfig.json"),
378
+ resolveWorkspacePath("tsconfig.dts.json")
379
+ ];
380
+ let dtsTSConfigPath;
381
+ dtsTSConfigPaths.forEach((p) => {
382
+ if (fs.existsSync(p) && fs.statSync(p).isFile()) {
383
+ dtsTSConfigPath = p;
384
+ }
385
+ });
386
+ let compilerOptions = {};
387
+ if (dtsTSConfigPath) {
388
+ const jsonCompilerOptions = getCompilerOptionsByFilePath(dtsTSConfigPath, resolve(input));
389
+ const { options: options2, errors } = ts.convertCompilerOptionsFromJson(
390
+ jsonCompilerOptions,
391
+ dirname(dtsTSConfigPath)
392
+ );
393
+ if (errors.length > 0) {
394
+ throw new Error(errors.map((e) => e.messageText).join("\n"));
395
+ }
396
+ compilerOptions = options2;
397
+ }
398
+ const exportConditions = [...conditionals, ...compilerOptions.customConditions ?? []];
399
+ const throughEventProps = {
400
+ type: "progress",
401
+ data: { name, path, exportConditions, input }
402
+ };
403
+ const outdir = options?.output?.dir;
404
+ return [
405
+ {
406
+ input,
407
+ external,
408
+ output: [
409
+ ...withMinify({
410
+ file: output,
411
+ name,
412
+ sourcemap: typeof options?.output?.sourcemap === "object" ? options.output.sourcemap.js : options?.output?.sourcemap,
413
+ format: isModule ? "esm" : isCommonJS ? "cjs" : isBrowser ? "umd" : pkgIsModule ? "esm" : "cjs",
414
+ strict: typeof options?.output?.strict === "object" ? options.output.strict.js : options?.output?.strict
415
+ })
416
+ ],
417
+ plugins: [
418
+ nodeResolve({ exportConditions }),
419
+ import('rollup-plugin-postcss').then(
420
+ ({ default: postcss }) => postcss({
421
+ extract: resolve(output.replace(/\.[cm]?js$/, ".css")),
422
+ minimize: true
423
+ })
424
+ ).catch(() => void 0),
425
+ esbuild(),
426
+ progress({
427
+ onEvent: (event, message) => sendMessage(
428
+ {
429
+ ...throughEventProps,
430
+ data: { ...throughEventProps.data, event, message, tags: ["js"] }
431
+ }
432
+ )
433
+ })
434
+ ]
435
+ },
436
+ {
437
+ input,
438
+ external,
439
+ output: [
440
+ {
441
+ dir: resolve((typeof outdir === "object" ? outdir.dts : outdir) ?? "dist"),
442
+ sourcemap: typeof options?.output?.sourcemap === "object" ? options.output.sourcemap.dts : options?.output?.sourcemap,
443
+ entryFileNames: () => output.replace(`${jsOutdir}/`, "").replace(/(\.[cm]?)js$/, ".d$1ts"),
444
+ strict: typeof options?.output?.strict === "object" ? options.output.strict.dts : options?.output?.strict
445
+ }
446
+ ],
447
+ plugins: [
448
+ nodeResolve({ exportConditions }),
449
+ skip({ patterns: [STYLE_REGEXP] }),
450
+ dts({
451
+ respectExternal: true,
452
+ compilerOptions
453
+ }),
454
+ progress({
455
+ onEvent: (event, message) => sendMessage(
456
+ {
457
+ ...throughEventProps,
458
+ data: { ...throughEventProps.data, event, message, tags: ["dts"] }
459
+ }
460
+ )
461
+ })
462
+ ]
463
+ }
464
+ ];
465
+ };
466
+ function template(packageJSON) {
467
+ const { name, type, exports: entrypoints } = packageJSON;
468
+ const pkgIsModule = type === "module";
469
+ if (!name)
470
+ throw new Error("package.json name is required");
471
+ if (!entrypoints)
472
+ throw new Error("package.json exports is required");
473
+ const entries = JIEK_ENTRIES?.split(",").map((e) => e.trim()).map((e) => ({
474
+ "index": "."
475
+ })[e] ?? e);
476
+ const packageName = pascalCase(name);
477
+ const external = externalResolver(packageJSON);
478
+ const [filteredResolvedEntrypoints, exports] = getExports({
479
+ entrypoints,
480
+ pkgIsModule,
481
+ entries,
482
+ config
483
+ });
484
+ const leafMap = /* @__PURE__ */ new Map();
485
+ getAllLeafs(filteredResolvedEntrypoints, ({ keys, value }) => {
486
+ if (typeof value === "string") {
487
+ const keysArr = leafMap.get(value) ?? [];
488
+ leafMap.set(value, keysArr);
489
+ keysArr.push(keys);
490
+ }
491
+ return false;
492
+ });
493
+ const configs = [];
494
+ leafMap.forEach(
495
+ (keysArr, input) => keysArr.forEach((keys) => {
496
+ const [path, ...conditionals] = keys;
497
+ const name2 = packageName + (path === "." ? "" : pascalCase(path));
498
+ const keyExports = reveal(exports, keys);
499
+ const commonOptions = {
500
+ path,
501
+ name: name2,
502
+ input,
503
+ external,
504
+ pkgIsModule
505
+ };
506
+ switch (typeof keyExports) {
507
+ case "string": {
508
+ configs.push(...generateConfigs({
509
+ ...commonOptions,
510
+ output: keyExports,
511
+ conditionals
512
+ }, build));
513
+ break;
514
+ }
515
+ case "object": {
516
+ getAllLeafs(keyExports, ({ keys: nextKeys, value }) => {
517
+ const allConditionals = [.../* @__PURE__ */ new Set([...conditionals, ...nextKeys])];
518
+ if (typeof value === "string") {
519
+ configs.push(...generateConfigs({
520
+ ...commonOptions,
521
+ output: value,
522
+ conditionals: allConditionals
523
+ }, build));
524
+ }
525
+ return false;
526
+ });
527
+ break;
528
+ }
529
+ }
530
+ })
531
+ );
532
+ sendMessage(
533
+ {
534
+ type: "init",
535
+ data: {
536
+ leafMap,
537
+ targetsLength: configs.length
538
+ }
539
+ }
540
+ );
541
+ return configs.map((c) => ({
542
+ ...COMMON_OPTIONS,
543
+ ...c,
544
+ plugins: [
545
+ ...COMMON_PLUGINS,
546
+ c.plugins
547
+ ]
548
+ }));
549
+ }
550
+
551
+ export { template };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../src/utils/getRoot.ts","../../src/utils/filterSupport.ts","../../src/utils/getWD.ts","../../src/utils/tsRegister.ts","../../src/utils/loadConfig.ts","../../src/rollup/plugins/progress.ts","../../src/rollup/plugins/skip.ts","../../src/rollup/utils/externalResolver.ts","../../src/rollup/index.ts"],"sourcesContent":["import path from 'node:path'\n\nimport { program } from 'commander'\n\nlet root: string\nexport function getRoot() {\n if (root) return root\n\n const rootOption = program.getOptionValue('root')\n root = rootOption\n ? path.isAbsolute(rootOption)\n ? rootOption\n : path.resolve(process.cwd(), rootOption)\n : undefined\n return root\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nimport { filterPackagesFromDir } from '@pnpm/filter-workspace-packages'\nimport { program } from 'commander'\nimport { load } from 'js-yaml'\n\nimport { getRoot } from './getRoot'\nimport { getWD } from './getWD'\n\nexport let type = ''\n\ntry {\n require.resolve('@pnpm/filter-workspace-packages')\n type = 'pnpm'\n} catch { /* empty */ }\nif (type !== '') {\n program\n .option('-f, --filter <filter>', 'filter packages')\n}\n\ninterface ProjectsGraph {\n wd: string\n root: string\n value?: Record<string, {\n name?: string\n }>\n}\n\nexport async function getSelectedProjectsGraph(): Promise<ProjectsGraph> {\n let filter = program.getOptionValue('filter')\n const root = getRoot()\n const { wd, notWorkspace } = getWD()\n if (!notWorkspace && type === 'pnpm') {\n const pnpmWorkspaceFilePath = path.resolve(wd, 'pnpm-workspace.yaml')\n const pnpmWorkspaceFileContent = fs.readFileSync(pnpmWorkspaceFilePath, 'utf-8')\n const pnpmWorkspace = load(pnpmWorkspaceFileContent) as {\n packages: string[]\n }\n if (root === wd && !filter) {\n throw new Error('root path is workspace root, please provide a filter')\n // TODO inquirer prompt support user select packages\n }\n if (root !== wd && !filter) {\n const packageJSONIsExist = fs.existsSync(path.resolve(root, 'package.json'))\n if (!packageJSONIsExist) {\n throw new Error('root path is not workspace root, please provide a filter')\n }\n const packageJSON = JSON.parse(fs.readFileSync(path.resolve(root, 'package.json'), 'utf-8'))\n if (!packageJSON.name) {\n throw new Error('root path is not workspace root, please provide a filter')\n }\n filter = packageJSON.name\n }\n const { selectedProjectsGraph } = await filterPackagesFromDir(wd, [{\n filter: filter ?? '',\n followProdDepsOnly: true\n }], {\n prefix: root,\n workspaceDir: wd,\n patterns: pnpmWorkspace.packages\n })\n return {\n wd,\n root,\n value: Object.entries(selectedProjectsGraph)\n .reduce((acc, [key, value]) => {\n acc[key] = value.package.manifest\n return acc\n }, {} as NonNullable<ProjectsGraph['value']>)\n }\n }\n return {\n wd,\n root,\n value: {\n [wd]: JSON.parse(fs.readFileSync(path.resolve(wd, 'package.json'), 'utf-8'))\n }\n }\n}\n","import { getWorkspaceDir, isWorkspaceDir } from '@jiek/utils/getWorkspaceDir'\n\nimport { type } from './filterSupport'\nimport { getRoot } from './getRoot'\n\nlet wd: string\nlet notWorkspace = false\n\nexport function getWD() {\n if (wd) return { wd, notWorkspace }\n\n const root = getRoot()\n if (root !== undefined) {\n const isWorkspace = isWorkspaceDir(root, type)\n notWorkspace = !isWorkspace\n wd = root\n return { wd, notWorkspace }\n }\n try {\n wd = getWorkspaceDir(type)\n } catch (e) {\n // @ts-ignore\n if ('message' in e && e.message === 'workspace root not found') {\n wd = root\n notWorkspace = true\n } else {\n throw e\n }\n }\n return { wd, notWorkspace }\n}\n","function packageIsExist(name: string) {\n try {\n require.resolve(name)\n return true\n } catch (e) {\n return false\n }\n}\n\nexport let tsRegisterName: string | undefined\nconst registers = [\n process.env.JIEK_TS_REGISTER,\n 'esbuild-register',\n '@swc-node/register',\n 'ts-node/register'\n].filter(Boolean) as string[]\nfor (const register of registers) {\n if (packageIsExist(register)) {\n tsRegisterName = register\n break\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nimport { program } from 'commander'\nimport type { Config } from 'jiek'\nimport { load } from 'js-yaml'\n\nimport { getWD } from './getWD'\nimport { tsRegisterName } from './tsRegister'\n\nlet configName = 'jiek.config'\n\nfunction getConfigPath(root: string) {\n const isSupportTsLoader = !!tsRegisterName\n function configWithExtIsExist(ext: string) {\n const filenames = [\n path.resolve(process.cwd(), `${configName}.${ext}`),\n path.resolve(process.cwd(), `.${configName}.${ext}`),\n path.resolve(root, `${configName}.${ext}`),\n path.resolve(root, `.${configName}.${ext}`)\n ]\n for (const filename of filenames) {\n if (\n fs.existsSync(filename)\n && fs.lstatSync(filename)\n .isFile()\n ) {\n return filename\n }\n }\n return\n }\n configName = configWithExtIsExist('js') ?? configName\n configName = configWithExtIsExist('json') ?? configName\n configName = configWithExtIsExist('yaml') ?? configName\n if (isSupportTsLoader) {\n configName = configWithExtIsExist('ts') ?? configName\n }\n return path.resolve(root, configName)\n}\n\nexport function loadConfig(): Config {\n const { wd: root, notWorkspace } = getWD()\n if (notWorkspace) {\n throw new Error('not in workspace')\n }\n\n let configPath = program.getOptionValue('configPath')\n\n if (!configPath) {\n configPath = getConfigPath(root)\n } else {\n if (!fs.existsSync(configPath)) {\n throw new Error(`config file not found: ${configPath}`)\n }\n if (!path.isAbsolute(configPath)) {\n configPath = path.resolve(root, configPath)\n }\n }\n const ext = path.extname(configPath)\n\n let module: any\n switch (ext) {\n case '.js':\n module = require(configPath)\n break\n case '.json':\n return require(configPath)\n case '.yaml':\n return load(fs.readFileSync(configPath, 'utf-8')) as Config\n case '.ts':\n if (tsRegisterName) {\n require(tsRegisterName)\n module = require(configPath)\n break\n }\n throw new Error(\n 'ts config file is not supported without ts register, '\n + 'please install esbuild-register or set JIEK_TS_REGISTER env for custom ts register'\n )\n case '.config':\n module = {}\n break\n default:\n throw new Error(`unsupported config file type: ${ext}`)\n }\n if (!module) throw new Error('config file is empty')\n\n return module.default ?? module\n}\n","import type { PluginImpl } from 'rollup'\n\ninterface Options {\n onEvent?: (event: string, message?: string) => void\n}\n\nexport default ((options = {}) => {\n const { onEvent } = options\n return {\n name: 'progress',\n buildStart: () => onEvent?.('start', 'Start building...'),\n buildEnd: () => onEvent?.('end', 'Build completed!'),\n resolveId: {\n order: 'post',\n handler: source => onEvent?.('resolve', `Resolving ${source}...`)\n },\n load: {\n order: 'post',\n handler: id => onEvent?.('load', `Loading ${id}...`)\n },\n transform: {\n order: 'post',\n handler: (_, id) => onEvent?.('transform', `Transforming ${id}...`)\n }\n }\n}) as PluginImpl<Options>\n","import type { PluginImpl } from 'rollup'\n\ninterface Options {\n patterns?: (string | RegExp)[]\n}\n\nexport default ((options = {}) => {\n return {\n name: 'skip',\n // skip the specified files by `options.patterns`\n load(id) {\n if (\n options.patterns?.some((pattern) =>\n typeof pattern === 'string'\n ? id.includes(pattern)\n : pattern.test(id)\n )\n ) {\n return ''\n }\n }\n }\n}) as PluginImpl<Options>\n","import fs from 'node:fs'\n\nexport default function(json: Record<string, unknown>): (string | RegExp)[]\nexport default function(path?: string): (string | RegExp)[]\nexport default function(jsonOrPath: string | Record<string, unknown> = process.cwd()): (string | RegExp)[] {\n const pkg = typeof jsonOrPath === 'string'\n ? fs.existsSync(`${jsonOrPath}/package.json`)\n ? JSON.parse(fs.readFileSync(`${jsonOrPath}/package.json`, 'utf-8'))\n : {}\n : jsonOrPath\n const { dependencies = {}, peerDependencies = {}, optionalDependencies = {} } = pkg\n const external = <(string | RegExp)[]> Object\n .keys(dependencies)\n .concat(Object.keys(peerDependencies))\n .concat(Object.keys(optionalDependencies))\n return external\n .map(dep => new RegExp(`^${dep}(/.*)?$`))\n .concat([\n /^node:/\n ])\n}\n","import '../rollup/base'\n\nimport fs from 'node:fs'\nimport { dirname, resolve } from 'node:path'\n\nimport type { Entrypoints2ExportsOptions, RecursiveRecord } from '@jiek/pkger/entrypoints'\nimport {\n DEFAULT_SKIP_VALUES,\n entrypoints2Exports,\n filterLeafs,\n getAllLeafs,\n resolveEntrypoints\n} from '@jiek/pkger/entrypoints'\nimport { dts } from '@jiek/rollup-plugin-dts'\nimport { getWorkspaceDir } from '@jiek/utils/getWorkspaceDir'\nimport json from '@rollup/plugin-json'\nimport { nodeResolve } from '@rollup/plugin-node-resolve'\nimport terser from '@rollup/plugin-terser'\nimport { sendMessage } from 'execa'\nimport { parse } from 'jsonc-parser'\nimport { isMatch } from 'micromatch'\nimport type { OutputOptions, OutputPlugin, RollupOptions } from 'rollup'\nimport esbuild from 'rollup-plugin-esbuild'\nimport ts from 'typescript'\n\nimport { loadConfig } from '../utils/loadConfig'\nimport type { RollupProgressEvent, TemplateOptions } from './base'\nimport progress from './plugins/progress'\nimport skip from './plugins/skip'\nimport externalResolver from './utils/externalResolver'\n\ninterface PackageJSON {\n name?: string\n type?: string\n exports?: Record<string, unknown> | string | string[]\n}\n\nconst {\n JIEK_ROOT,\n JIEK_ENTRIES\n} = process.env\nconst WORKSPACE_ROOT = JIEK_ROOT ?? getWorkspaceDir()\nconst COMMON_OPTIONS = {} satisfies RollupOptions\nconst COMMON_PLUGINS = [\n json()\n]\n\nconst { build } = loadConfig()\nconst jsOutdir = resolve(\n (\n typeof build?.output?.dir === 'object'\n // the outdir only effect js output in this function\n ? build.output.dir.js\n : build?.output?.dir\n ) ?? 'dist'\n)\n\nconst STYLE_REGEXP = /\\.(css|s[ac]ss|less|styl)$/\n\n// eslint-disable-next-line unused-imports/no-unused-vars\nconst debug = (...args: unknown[]) => sendMessage({ type: 'debug', data: args } satisfies RollupProgressEvent)\n\nconst resolveWorkspacePath = (p: string) => resolve(WORKSPACE_ROOT, p)\n\nconst intersection = <T>(a: Set<T>, b: Set<T>) => new Set([...a].filter(i => b.has(i)))\n\nconst pascalCase = (str: string) =>\n str\n .replace(/[@|/-](\\w)/g, (_, $1) => $1.toUpperCase())\n .replace(/(?:^|-)(\\w)/g, (_, $1) => $1.toUpperCase())\n\nconst reveal = (obj: string | Record<string, unknown>, keys: string[]) =>\n keys.reduce((acc, key) => {\n if (typeof acc === 'string') throw new Error('key not found in exports')\n if (!(key in acc)) throw new Error(`key ${key} not found in exports`)\n return acc[key] as string | Record<string, unknown>\n }, obj)\n\nconst withMinify = (\n output: OutputOptions & {\n plugins?: OutputPlugin[]\n },\n minify = build?.output?.minify\n) =>\n minify === false\n ? [output]\n : minify === 'only-minify'\n ? [{\n ...output,\n // TODO replace suffix when pubish to npm and the `build.output.minify` is 'only-minify'\n // TODO resolve dts output file name\n file: output.file?.replace(/(\\.[cm]?js)$/, '.min$1'),\n plugins: [\n ...(output.plugins ?? []),\n terser()\n ]\n }]\n : [\n output,\n {\n ...output,\n file: output.file?.replace(/(\\.[cm]?js)$/, '.min$1'),\n plugins: [\n ...(output.plugins ?? []),\n terser()\n ]\n }\n ]\n\ntype TSConfig = {\n extends?: string | string[]\n compilerOptions?: Record<string, unknown>\n references?: { path: string }[]\n files?: string[]\n include?: string[]\n exclude?: string[]\n}\n\nconst getTSConfig = (p: string): TSConfig =>\n !fs.existsSync(p) || !fs.statSync(p).isFile()\n ? {}\n : parse(fs.readFileSync(p, 'utf-8'), [], { allowTrailingComma: true, allowEmptyContent: true })\n\nconst getExtendTSConfig = (tsconfigPath: string): TSConfig => {\n tsconfigPath = resolve(tsconfigPath)\n const tsconfigPathDirname = dirname(tsconfigPath)\n const { extends: exts, ...tsconfig } = getTSConfig(tsconfigPath)\n const resolvePaths = (paths: string[] | undefined) => paths?.map(p => resolve(tsconfigPathDirname, p)) ?? []\n\n const extendsPaths = resolvePaths(\n exts ? Array.isArray(exts) ? exts : [exts] : []\n )\n if (extendsPaths.length === 0) return tsconfig\n return extendsPaths\n .map(getExtendTSConfig)\n // https://www.typescriptlang.org/tsconfig/#files:~:text=Currently%2C%20the%20only%20top%2Dlevel%20property%20that%20is%20excluded%20from%20inheritance%20is%20references.\n // Currently, the only top-level property that is excluded from inheritance is references.\n .reduce((acc, { compilerOptions = {}, references: _, ...curr }) => ({\n ...acc,\n ...curr,\n compilerOptions: {\n ...acc.compilerOptions,\n ...compilerOptions\n }\n }), tsconfig)\n}\n\nconst getCompilerOptionsByFilePath = (tsconfigPath: string, filePath: string): Record<string, unknown> | undefined => {\n tsconfigPath = resolve(tsconfigPath)\n filePath = resolve(filePath)\n const tsconfigPathDirname = dirname(tsconfigPath)\n // https://www.typescriptlang.org/tsconfig/#files:~:text=It%E2%80%99s%20worth%20noting%20that%20files%2C%20include%2C%20and%20exclude%20from%20the%20inheriting%20config%20file%20overwrite%20those%20from%20the%20base%20config%20file%2C%20and%20that%20circularity%20between%20configuration%20files%20is%20not%20allowed.\n // It’s worth noting that files, include, and exclude from the inheriting config file overwrite\n // those from the base config file, and that circularity between configuration files is not allowed.\n const tsconfig = getExtendTSConfig(tsconfigPath)\n\n const resolvePaths = (paths: string[] | undefined) => paths?.map(p => resolve(tsconfigPathDirname, p)) ?? []\n\n const [\n references,\n files,\n include,\n exclude\n ] = [\n tsconfig.references?.map(({ path }) => path),\n tsconfig.files,\n tsconfig.include,\n tsconfig.exclude\n ].map(resolvePaths)\n if (exclude.length > 0 && exclude.some(i => isMatch(filePath, i))) return\n\n // when files or include is not empty, the tsconfig should be ignored\n if (tsconfig.files?.length === 0 && tsconfig.include?.length === 0) return\n let isInclude = false\n isInclude ||= files.length > 0 && files.includes(filePath)\n isInclude ||= include.length > 0 && include.some(i => isMatch(filePath, i))\n if (isInclude) {\n return tsconfig.compilerOptions ?? {}\n } else {\n // when files or include is not empty, but the file is not matched, the tsconfig should be ignored\n if (\n (tsconfig.files && tsconfig.files.length > 0)\n || (tsconfig.include && tsconfig.include.length > 0)\n ) return\n }\n\n references.reverse()\n for (const ref of references) {\n const compilerOptions = getCompilerOptionsByFilePath(ref, filePath)\n if (compilerOptions) return compilerOptions\n }\n return tsconfig.compilerOptions\n}\n\nconst generateConfigs = ({\n path,\n name,\n input,\n output,\n external,\n pkgIsModule,\n conditionals\n}: {\n path: string\n name: string\n input: string\n output: string\n external: (string | RegExp)[]\n pkgIsModule: boolean\n conditionals: string[]\n}, options: TemplateOptions = {}): RollupOptions[] => {\n const isModule = conditionals.includes('import')\n const isCommonJS = conditionals.includes('require')\n const isBrowser = conditionals.includes('browser')\n const dtsTSConfigPaths = [\n resolveWorkspacePath('tsconfig.json'),\n resolveWorkspacePath('tsconfig.dts.json')\n ]\n let dtsTSConfigPath: string | undefined\n dtsTSConfigPaths.forEach(p => {\n if (fs.existsSync(p) && fs.statSync(p).isFile()) {\n dtsTSConfigPath = p\n }\n })\n let compilerOptions: ts.CompilerOptions = {}\n if (dtsTSConfigPath) {\n const jsonCompilerOptions = getCompilerOptionsByFilePath(dtsTSConfigPath, resolve(input))\n const { options, errors } = ts.convertCompilerOptionsFromJson(\n jsonCompilerOptions,\n dirname(dtsTSConfigPath)\n )\n if (errors.length > 0) {\n throw new Error(errors.map(e => e.messageText).join('\\n'))\n }\n compilerOptions = options\n }\n const exportConditions = [...conditionals, ...(compilerOptions.customConditions ?? [])]\n const throughEventProps: RollupProgressEvent & { type: 'progress' } = {\n type: 'progress',\n data: { name, path, exportConditions, input }\n }\n const outdir = options?.output?.dir\n return [\n {\n input,\n external,\n output: [\n ...withMinify({\n file: output,\n name,\n sourcemap: typeof options?.output?.sourcemap === 'object'\n ? options.output.sourcemap.js\n : options?.output?.sourcemap ?? true,\n format: isModule ? 'esm' : (\n isCommonJS ? 'cjs' : (\n isBrowser ? 'umd' : (\n pkgIsModule ? 'esm' : 'cjs'\n )\n )\n ),\n strict: typeof options?.output?.strict === 'object'\n ? options.output.strict.js\n : options?.output?.strict\n })\n ],\n plugins: [\n nodeResolve({ exportConditions }),\n import('rollup-plugin-postcss')\n .then(({ default: postcss }) =>\n postcss({\n extract: resolve(output.replace(/\\.[cm]?js$/, '.css')),\n minimize: true\n })\n )\n .catch(() => void 0),\n esbuild(),\n progress({\n onEvent: (event, message) =>\n sendMessage(\n {\n ...throughEventProps,\n data: { ...throughEventProps.data, event, message, tags: ['js'] }\n } satisfies RollupProgressEvent\n )\n })\n ]\n },\n {\n input,\n external,\n output: [\n {\n dir: resolve((typeof outdir === 'object' ? outdir.dts : outdir) ?? 'dist'),\n sourcemap: typeof options?.output?.sourcemap === 'object'\n ? options.output.sourcemap.dts\n : options?.output?.sourcemap ?? true,\n entryFileNames: () =>\n output\n .replace(`${jsOutdir}/`, '')\n .replace(/(\\.[cm]?)js$/, '.d$1ts'),\n strict: typeof options?.output?.strict === 'object'\n ? options.output.strict.dts\n : options?.output?.strict\n }\n ],\n plugins: [\n nodeResolve({ exportConditions }),\n skip({ patterns: [STYLE_REGEXP] }),\n dts({\n respectExternal: true,\n compilerOptions\n }),\n progress({\n onEvent: (event, message) =>\n sendMessage(\n {\n ...throughEventProps,\n data: { ...throughEventProps.data, event, message, tags: ['dts'] }\n } satisfies RollupProgressEvent\n )\n })\n ]\n }\n ]\n}\n\nexport function template(packageJSON: PackageJSON): RollupOptions[] {\n const { name, type, exports: entrypoints } = packageJSON\n const pkgIsModule = type === 'module'\n if (!name) throw new Error('package.json name is required')\n if (!entrypoints) throw new Error('package.json exports is required')\n\n const entries = JIEK_ENTRIES\n ?.split(',')\n .map(e => e.trim())\n .map(e => ({\n 'index': '.'\n }[e] ?? e))\n\n const {\n crossModuleConvertor = true\n } = build ?? {}\n\n const packageName = pascalCase(name)\n\n const external = externalResolver(packageJSON as Record<string, unknown>)\n\n const [, resolvedEntrypoints] = resolveEntrypoints(entrypoints)\n if (entries) {\n Object\n .entries(resolvedEntrypoints)\n .forEach(([key]) => {\n if (!entries.some(e => isMatch(key, e, { matchBase: true }))) {\n delete resolvedEntrypoints[key]\n }\n })\n }\n const filteredResolvedEntrypoints = filterLeafs(\n resolvedEntrypoints as RecursiveRecord<string>,\n {\n skipValue: [\n // ignore values that filename starts with `.jk-noentry`\n /(^|\\/)\\.jk-noentry/,\n ...DEFAULT_SKIP_VALUES\n ]\n }\n )\n const crossModuleWithConditional: Entrypoints2ExportsOptions['withConditional'] = crossModuleConvertor\n ? {\n import: opts =>\n !pkgIsModule && intersection(\n new Set(opts.conditionals),\n new Set(['import', 'module'])\n ).size === 0\n ? opts.dist.replace(/\\.js$/, '.mjs')\n : false,\n require: opts => {\n return pkgIsModule && intersection(\n new Set(opts.conditionals),\n new Set(['require', 'node'])\n ).size === 0\n ? opts.dist.replace(/\\.js$/, '.cjs')\n : false\n }\n }\n : {}\n const exports = entrypoints2Exports(filteredResolvedEntrypoints, {\n outdir: jsOutdir,\n withConditional: {\n ...crossModuleWithConditional\n }\n })\n\n const leafMap = new Map<string, string[][]>()\n getAllLeafs(filteredResolvedEntrypoints as RecursiveRecord<string>, ({ keys, value }) => {\n if (typeof value === 'string') {\n const keysArr = leafMap.get(value) ?? []\n leafMap.set(value, keysArr)\n keysArr.push(keys)\n }\n return false\n })\n\n const configs: RollupOptions[] = []\n leafMap.forEach((keysArr, input) =>\n keysArr.forEach((keys) => {\n const [path, ...conditionals] = keys\n\n const name = packageName + (path === '.' ? '' : pascalCase(path))\n const keyExports = reveal(exports, keys)\n const commonOptions = {\n path,\n name,\n input,\n external,\n pkgIsModule\n }\n\n switch (typeof keyExports) {\n case 'string': {\n configs.push(...generateConfigs({\n ...commonOptions,\n output: keyExports,\n conditionals\n }, build))\n break\n }\n case 'object': {\n getAllLeafs(keyExports as RecursiveRecord<string>, ({ keys: nextKeys, value }) => {\n const allConditionals = [...new Set([...conditionals, ...nextKeys])]\n if (typeof value === 'string') {\n configs.push(...generateConfigs({\n ...commonOptions,\n output: value,\n conditionals: allConditionals\n }, build))\n }\n return false\n })\n break\n }\n }\n })\n )\n sendMessage(\n {\n type: 'init',\n data: {\n leafMap,\n targetsLength: configs.length\n }\n } satisfies RollupProgressEvent\n )\n return configs.map(c => ({\n ...COMMON_OPTIONS,\n ...c,\n plugins: [\n ...COMMON_PLUGINS,\n c.plugins\n ]\n }))\n}\n"],"names":["options","name"],"mappings":"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"}