@fastkit/plugboy 0.0.1 → 0.0.2
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/{chunk-QSOC5WYP.mjs → chunk-PKFVUHH2.mjs} +79 -53
- package/dist/chunk-PKFVUHH2.mjs.map +1 -0
- package/dist/cli.mjs +20 -19
- package/dist/cli.mjs.map +1 -1
- package/dist/plugboy.d.ts +15 -4
- package/dist/plugboy.mjs +5 -1
- package/package.json +1 -1
- package/dist/chunk-QSOC5WYP.mjs.map +0 -1
|
@@ -203,8 +203,8 @@ async function findConfig(fileNameOrSettings, dir = process.cwd(), currentDepth
|
|
|
203
203
|
}
|
|
204
204
|
return result;
|
|
205
205
|
}
|
|
206
|
-
function _rmrf(
|
|
207
|
-
return fs.promises.rm(
|
|
206
|
+
function _rmrf(path10) {
|
|
207
|
+
return fs.promises.rm(path10, {
|
|
208
208
|
recursive: true,
|
|
209
209
|
force: true
|
|
210
210
|
}).catch((err) => {
|
|
@@ -214,7 +214,7 @@ function _rmrf(path9) {
|
|
|
214
214
|
});
|
|
215
215
|
}
|
|
216
216
|
async function rmrf(...paths) {
|
|
217
|
-
await Promise.all(paths.map((
|
|
217
|
+
await Promise.all(paths.map((path10) => _rmrf(path10)));
|
|
218
218
|
}
|
|
219
219
|
function copyDirSync(srcDir, destDir) {
|
|
220
220
|
if (!fs.existsSync(srcDir))
|
|
@@ -235,6 +235,30 @@ function copyDirSync(srcDir, destDir) {
|
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
+
// src/utils/expose.ts
|
|
239
|
+
import path2 from "node:path";
|
|
240
|
+
import { glob } from "glob";
|
|
241
|
+
function resolveRawExposeEntriesSettings(rawSettings) {
|
|
242
|
+
return typeof rawSettings === "string" ? { dir: rawSettings } : rawSettings;
|
|
243
|
+
}
|
|
244
|
+
var TRIM_PATH_RE = /(^\.?\/|\/$)/g;
|
|
245
|
+
var TRIM_EXT_RE = /\.ts$/;
|
|
246
|
+
async function exposeEntries(rawSettings) {
|
|
247
|
+
const { dir: _dir, prefix: _prefix } = resolveRawExposeEntriesSettings(rawSettings);
|
|
248
|
+
const dir = path2.resolve(_dir);
|
|
249
|
+
const prefix = _prefix ? _prefix.replace(TRIM_PATH_RE, "") : "";
|
|
250
|
+
const pattern = path2.join(dir, "**/*.ts");
|
|
251
|
+
const files = await glob(pattern);
|
|
252
|
+
const entries = {};
|
|
253
|
+
for (const file of files) {
|
|
254
|
+
const id = (prefix + file.replace(dir, "")).replace(TRIM_EXT_RE, "").replace(TRIM_PATH_RE, "");
|
|
255
|
+
entries[id] = {
|
|
256
|
+
src: file
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
return entries;
|
|
260
|
+
}
|
|
261
|
+
|
|
238
262
|
// src/utils/project.ts
|
|
239
263
|
import { bundleRequire } from "bundle-require";
|
|
240
264
|
|
|
@@ -384,7 +408,7 @@ function buildHooks(resolvedHooks) {
|
|
|
384
408
|
}
|
|
385
409
|
|
|
386
410
|
// src/path.ts
|
|
387
|
-
import
|
|
411
|
+
import path3 from "node:path";
|
|
388
412
|
import fs2 from "node:fs";
|
|
389
413
|
var Path = class {
|
|
390
414
|
_value;
|
|
@@ -393,20 +417,20 @@ var Path = class {
|
|
|
393
417
|
return this._value;
|
|
394
418
|
}
|
|
395
419
|
set value(value) {
|
|
396
|
-
const _value =
|
|
420
|
+
const _value = path3.resolve(value);
|
|
397
421
|
if (_value === this._value)
|
|
398
422
|
return;
|
|
399
|
-
this._value =
|
|
423
|
+
this._value = path3.resolve(value);
|
|
400
424
|
delete this._stats;
|
|
401
425
|
}
|
|
402
426
|
get dirname() {
|
|
403
|
-
return
|
|
427
|
+
return path3.dirname(this.value);
|
|
404
428
|
}
|
|
405
429
|
get basename() {
|
|
406
|
-
return
|
|
430
|
+
return path3.basename(this.value);
|
|
407
431
|
}
|
|
408
432
|
get extname() {
|
|
409
|
-
return
|
|
433
|
+
return path3.extname(this.value);
|
|
410
434
|
}
|
|
411
435
|
get stats() {
|
|
412
436
|
let { _stats } = this;
|
|
@@ -423,7 +447,7 @@ var Path = class {
|
|
|
423
447
|
return this.stats.isFile;
|
|
424
448
|
}
|
|
425
449
|
constructor(value) {
|
|
426
|
-
this._value =
|
|
450
|
+
this._value = path3.resolve(value);
|
|
427
451
|
}
|
|
428
452
|
toString() {
|
|
429
453
|
return this.value;
|
|
@@ -435,23 +459,23 @@ var Path = class {
|
|
|
435
459
|
return this.value;
|
|
436
460
|
}
|
|
437
461
|
relative(to) {
|
|
438
|
-
return new Path(
|
|
462
|
+
return new Path(path3.relative(this.value, to));
|
|
439
463
|
}
|
|
440
464
|
join(...paths) {
|
|
441
|
-
return new Path(
|
|
465
|
+
return new Path(path3.join(this.value, ...paths));
|
|
442
466
|
}
|
|
443
467
|
resolve(...paths) {
|
|
444
|
-
return new Path(
|
|
468
|
+
return new Path(path3.resolve(this.value, ...paths));
|
|
445
469
|
}
|
|
446
470
|
_join(...paths) {
|
|
447
|
-
const _paths = paths.filter((
|
|
448
|
-
return _paths.length ?
|
|
471
|
+
const _paths = paths.filter((path10) => !!path10);
|
|
472
|
+
return _paths.length ? path3.join(this.value, ..._paths) : this.value;
|
|
449
473
|
}
|
|
450
474
|
async readdir(...paths) {
|
|
451
475
|
const dir = this._join(...paths);
|
|
452
476
|
const files = await fs2.promises.readdir(dir);
|
|
453
477
|
return files.map((file) => {
|
|
454
|
-
return new Path(
|
|
478
|
+
return new Path(path3.join(dir, file));
|
|
455
479
|
});
|
|
456
480
|
}
|
|
457
481
|
readFile(pathAppend, defaults) {
|
|
@@ -482,7 +506,7 @@ var Path = class {
|
|
|
482
506
|
|
|
483
507
|
// src/package.ts
|
|
484
508
|
import fs3 from "node:fs/promises";
|
|
485
|
-
import
|
|
509
|
+
import path4 from "node:path";
|
|
486
510
|
async function getProjectPackageJson(searchDir, allowMissing) {
|
|
487
511
|
const hit = await findConfig(
|
|
488
512
|
{
|
|
@@ -523,11 +547,11 @@ async function getWorkspacePackageJson(searchDir, allowMissing) {
|
|
|
523
547
|
}
|
|
524
548
|
async function findWorkspacePackages(dir) {
|
|
525
549
|
const results = [];
|
|
526
|
-
const searchDir =
|
|
550
|
+
const searchDir = path4.resolve(dir);
|
|
527
551
|
const dirs = await fs3.readdir(searchDir);
|
|
528
552
|
const pkgs = await Promise.all(
|
|
529
553
|
dirs.map(
|
|
530
|
-
(dirName) => getWorkspacePackageJson(
|
|
554
|
+
(dirName) => getWorkspacePackageJson(path4.join(searchDir, dirName), true)
|
|
531
555
|
)
|
|
532
556
|
);
|
|
533
557
|
pkgs.forEach((pkg) => {
|
|
@@ -539,13 +563,13 @@ async function findWorkspacePackages(dir) {
|
|
|
539
563
|
// src/workspace/builder.ts
|
|
540
564
|
import { build } from "tsup";
|
|
541
565
|
import fs4 from "node:fs/promises";
|
|
542
|
-
import
|
|
566
|
+
import path6 from "node:path";
|
|
543
567
|
|
|
544
568
|
// src/workspace/dts.ts
|
|
545
569
|
import { execa } from "execa";
|
|
546
|
-
import
|
|
570
|
+
import path5 from "node:path";
|
|
547
571
|
async function emitDTS(opts = {}) {
|
|
548
|
-
const { cwd = process.cwd(), outDir =
|
|
572
|
+
const { cwd = process.cwd(), outDir = path5.join(cwd, "dist/dts") } = opts;
|
|
549
573
|
await execa(
|
|
550
574
|
"tsc",
|
|
551
575
|
[
|
|
@@ -560,7 +584,7 @@ async function emitDTS(opts = {}) {
|
|
|
560
584
|
}
|
|
561
585
|
|
|
562
586
|
// src/workspace/builder.ts
|
|
563
|
-
import { glob } from "glob";
|
|
587
|
+
import { glob as glob2 } from "glob";
|
|
564
588
|
var SHEBANG_MATCH_RE = /^(#!.+?)\n/;
|
|
565
589
|
var Builder = class {
|
|
566
590
|
workspace;
|
|
@@ -655,11 +679,11 @@ ${ENV_FN_INJECTS}`;
|
|
|
655
679
|
return _tsupOptions;
|
|
656
680
|
}
|
|
657
681
|
async _stubLinkJS(from, to) {
|
|
658
|
-
const fromParsed =
|
|
682
|
+
const fromParsed = path6.parse(from);
|
|
659
683
|
const fromDir = fromParsed.dir;
|
|
660
|
-
const toParsed =
|
|
661
|
-
const toRelativeDir =
|
|
662
|
-
const location =
|
|
684
|
+
const toParsed = path6.parse(to);
|
|
685
|
+
const toRelativeDir = path6.relative(fromDir, toParsed.dir);
|
|
686
|
+
const location = path6.join(toRelativeDir, toParsed.base);
|
|
663
687
|
const source = await fs4.readFile(to, "utf-8");
|
|
664
688
|
const shebang = source.match(SHEBANG_MATCH_RE)?.[1];
|
|
665
689
|
const STUB_FN_ERROR = `() => { throw new Error('Path resolution methods cannot be executed in stub mode.') }`;
|
|
@@ -677,7 +701,7 @@ ${ENV_FN_INJECTS}`;
|
|
|
677
701
|
const disableChecks = "/* eslint-disable */\n// @ts-nocheck\n";
|
|
678
702
|
const code = `${disableChecks}${ENV_INJECTS}
|
|
679
703
|
export * from '${location}';`;
|
|
680
|
-
const dtsPath =
|
|
704
|
+
const dtsPath = path6.join(fromDir, `${fromParsed.name}.d.ts`);
|
|
681
705
|
const dtsCode = `${disableChecks}export * from '${location.replace(
|
|
682
706
|
/\.ts$/,
|
|
683
707
|
""
|
|
@@ -799,7 +823,7 @@ ${dts}`;
|
|
|
799
823
|
const { dir, dirs, exports } = this.workspace;
|
|
800
824
|
const cwd = dir.value;
|
|
801
825
|
const outDir = dirs.dist.join(".dts-generate").value;
|
|
802
|
-
const dtsSrcDir =
|
|
826
|
+
const dtsSrcDir = path6.join(outDir, "src");
|
|
803
827
|
const dtsDest = dirs.dist.join(".dts").value;
|
|
804
828
|
await emitDTS({
|
|
805
829
|
cwd,
|
|
@@ -813,18 +837,18 @@ ${dts}`;
|
|
|
813
837
|
});
|
|
814
838
|
await Promise.all(
|
|
815
839
|
objectExports.map(async (at) => {
|
|
816
|
-
const typesDir =
|
|
817
|
-
const dtsDestDir =
|
|
818
|
-
const relativeDir =
|
|
819
|
-
const relativePath =
|
|
840
|
+
const typesDir = path6.dirname(at.types);
|
|
841
|
+
const dtsDestDir = path6.dirname(at.dtsDest);
|
|
842
|
+
const relativeDir = path6.relative(typesDir, dtsDestDir);
|
|
843
|
+
const relativePath = path6.join(
|
|
820
844
|
relativeDir,
|
|
821
|
-
|
|
845
|
+
path6.basename(at.dtsDest).replace(/\.d\.ts$/, "")
|
|
822
846
|
);
|
|
823
847
|
const code = `export * from './${relativePath}';`;
|
|
824
848
|
await fs4.writeFile(at.types, code, "utf-8");
|
|
825
849
|
})
|
|
826
850
|
);
|
|
827
|
-
const dtsFiles = await
|
|
851
|
+
const dtsFiles = await glob2(path6.join(dtsDest, "**/*.d.ts"));
|
|
828
852
|
await this.normalizeDTSFiles(dtsFiles);
|
|
829
853
|
}
|
|
830
854
|
async build() {
|
|
@@ -871,8 +895,8 @@ ${dts}`;
|
|
|
871
895
|
|
|
872
896
|
// src/project/project.ts
|
|
873
897
|
import fs5 from "node:fs/promises";
|
|
874
|
-
import
|
|
875
|
-
import
|
|
898
|
+
import path7 from "node:path";
|
|
899
|
+
import glob3 from "glob";
|
|
876
900
|
var PlugboyProject = class {
|
|
877
901
|
/** Path instance of the project directory */
|
|
878
902
|
dir;
|
|
@@ -933,13 +957,13 @@ async function getProject(searchDir, allowMissing, skipLoadConfig) {
|
|
|
933
957
|
const workspacesPattern = workspaces.map(
|
|
934
958
|
(workspace) => dir.join(workspace, PACKAGE_JSON_FILENAME).value
|
|
935
959
|
);
|
|
936
|
-
const workspaceHits = await
|
|
960
|
+
const workspaceHits = await glob3(workspacesPattern);
|
|
937
961
|
for (const hit2 of workspaceHits) {
|
|
938
962
|
const json2 = JSON.parse(await fs5.readFile(hit2, "utf-8"));
|
|
939
963
|
if (!isWorkspacePackageJson(json2)) {
|
|
940
964
|
continue;
|
|
941
965
|
}
|
|
942
|
-
resolvedWorkspaces.push(
|
|
966
|
+
resolvedWorkspaces.push(path7.dirname(hit2));
|
|
943
967
|
}
|
|
944
968
|
resolvedWorkspaces.sort((a, b) => {
|
|
945
969
|
if (a < b)
|
|
@@ -961,7 +985,7 @@ async function getProject(searchDir, allowMissing, skipLoadConfig) {
|
|
|
961
985
|
// src/workspace/workspace.ts
|
|
962
986
|
import sortPackageJson from "sort-package-json";
|
|
963
987
|
import fs6 from "node:fs/promises";
|
|
964
|
-
import
|
|
988
|
+
import path8 from "node:path";
|
|
965
989
|
function extractWorkspaceObjectExport(at) {
|
|
966
990
|
if (typeof at === "string")
|
|
967
991
|
return at;
|
|
@@ -1187,8 +1211,8 @@ var PlugboyWorkspace = class {
|
|
|
1187
1211
|
if (!isJS.test(filePath) || !text.includes(RELATIVE_PATH_FOR_WORKSPACE)) {
|
|
1188
1212
|
continue;
|
|
1189
1213
|
}
|
|
1190
|
-
const relativePath =
|
|
1191
|
-
|
|
1214
|
+
const relativePath = path8.relative(
|
|
1215
|
+
path8.dirname(filePath),
|
|
1192
1216
|
this.dir.value
|
|
1193
1217
|
);
|
|
1194
1218
|
const content = text.replace(
|
|
@@ -1271,7 +1295,7 @@ async function getWorkspace(searchDir, allowMissing) {
|
|
|
1271
1295
|
}
|
|
1272
1296
|
|
|
1273
1297
|
// src/workspace/generate.ts
|
|
1274
|
-
import
|
|
1298
|
+
import path9 from "node:path";
|
|
1275
1299
|
import fs7 from "node:fs/promises";
|
|
1276
1300
|
import sortPackageJson2 from "sort-package-json";
|
|
1277
1301
|
import inquirer from "inquirer";
|
|
@@ -1354,7 +1378,7 @@ async function generateWorkspace(workspaceName, cwd = process.cwd()) {
|
|
|
1354
1378
|
message: "Select the internal package to be used, if any.",
|
|
1355
1379
|
name: "deps",
|
|
1356
1380
|
choices: project.resolvedWorkspaces.map((workspace) => {
|
|
1357
|
-
const name =
|
|
1381
|
+
const name = path9.basename(workspace);
|
|
1358
1382
|
return {
|
|
1359
1383
|
name,
|
|
1360
1384
|
value: name
|
|
@@ -1385,7 +1409,7 @@ async function generateWorkspace(workspaceName, cwd = process.cwd()) {
|
|
|
1385
1409
|
};
|
|
1386
1410
|
syncWorkspacePackageFields(project.json, _json);
|
|
1387
1411
|
const json = sortPackageJson2(_json);
|
|
1388
|
-
const workspaceDir =
|
|
1412
|
+
const workspaceDir = path9.join(config.workspacesDir, workspaceName);
|
|
1389
1413
|
console.log("");
|
|
1390
1414
|
console.log("========================================");
|
|
1391
1415
|
console.log(`Directory: ${workspaceDir}`);
|
|
@@ -1404,23 +1428,23 @@ async function generateWorkspace(workspaceName, cwd = process.cwd()) {
|
|
|
1404
1428
|
}
|
|
1405
1429
|
await fs7.mkdir(workspaceDir);
|
|
1406
1430
|
await fs7.writeFile(
|
|
1407
|
-
|
|
1431
|
+
path9.join(workspaceDir, "package.json"),
|
|
1408
1432
|
JSON.stringify(json, null, 2)
|
|
1409
1433
|
);
|
|
1410
|
-
await fs7.writeFile(
|
|
1434
|
+
await fs7.writeFile(path9.join(workspaceDir, "README.md"), config.readme(json));
|
|
1411
1435
|
if (withGenSource) {
|
|
1412
|
-
const srcDir =
|
|
1436
|
+
const srcDir = path9.join(workspaceDir, "src");
|
|
1413
1437
|
await fs7.mkdir(srcDir);
|
|
1414
1438
|
const indexCode = `export * from './${workspaceName}';
|
|
1415
1439
|
`;
|
|
1416
1440
|
const modCode = `export const PACKAGE_NAME = './${workspaceName}';
|
|
1417
1441
|
`;
|
|
1418
|
-
await fs7.writeFile(
|
|
1419
|
-
await fs7.writeFile(
|
|
1442
|
+
await fs7.writeFile(path9.join(srcDir, "index.ts"), indexCode);
|
|
1443
|
+
await fs7.writeFile(path9.join(srcDir, `${workspaceName}.ts`), modCode);
|
|
1420
1444
|
const { tsconfig } = config;
|
|
1421
1445
|
if (tsconfig) {
|
|
1422
1446
|
await fs7.writeFile(
|
|
1423
|
-
|
|
1447
|
+
path9.join(workspaceDir, "tsconfig.json"),
|
|
1424
1448
|
JSON.stringify(tsconfig, null, 2)
|
|
1425
1449
|
);
|
|
1426
1450
|
}
|
|
@@ -1434,7 +1458,7 @@ export default defineWorkspaceConfig({
|
|
|
1434
1458
|
});
|
|
1435
1459
|
`.trim() + "\n";
|
|
1436
1460
|
await fs7.writeFile(
|
|
1437
|
-
|
|
1461
|
+
path9.join(workspaceDir, `${WORKSPACE_CONFIG_BASENAME}.ts`),
|
|
1438
1462
|
configFileCode
|
|
1439
1463
|
);
|
|
1440
1464
|
const workspace = await getWorkspace(workspaceDir);
|
|
@@ -1461,6 +1485,8 @@ export {
|
|
|
1461
1485
|
findConfig,
|
|
1462
1486
|
rmrf,
|
|
1463
1487
|
copyDirSync,
|
|
1488
|
+
resolveRawExposeEntriesSettings,
|
|
1489
|
+
exposeEntries,
|
|
1464
1490
|
isProjectPackageJson,
|
|
1465
1491
|
resolveUserProjectConfig,
|
|
1466
1492
|
defineProjectConfig,
|
|
@@ -1490,4 +1516,4 @@ export {
|
|
|
1490
1516
|
getWorkspace,
|
|
1491
1517
|
generateWorkspace
|
|
1492
1518
|
};
|
|
1493
|
-
//# sourceMappingURL=chunk-
|
|
1519
|
+
//# sourceMappingURL=chunk-PKFVUHH2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types/hook.ts","../src/types/dts.ts","../src/types/workspace.ts","../src/types/project.ts","../src/utils/general.ts","../src/utils/file.ts","../src/utils/expose.ts","../src/utils/project.ts","../src/constants.ts","../src/utils/plugin.ts","../src/utils/workspace.ts","../src/utils/hook.ts","../src/path.ts","../src/package.ts","../src/workspace/builder.ts","../src/workspace/dts.ts","../src/project/project.ts","../src/workspace/workspace.ts","../src/workspace/generate.ts"],"sourcesContent":["import type { Listable } from '../utils';\nimport { WorkspaceSetupContext, WorkspacePackageJson } from './workspace';\nimport type { PlugboyWorkspace } from '../workspace';\n\n/** plugboy hook definition */\nexport interface HookTypes {\n /**\n * Hooks during workspace setup\n * @remarks Called just before the workspace instance is created\n * @param ctx - {@link WorkspaceSetupContext Workspace setup context object}\n */\n setupWorkspace: (ctx: WorkspaceSetupContext) => any;\n /**\n * Hooks after workspace generation\n * @param workspace - {@link PlugboyWorkspace workspace instance}\n */\n createWorkspace: (workspace: PlugboyWorkspace) => any;\n /**\n * Hooks when correcting package.json\n * @param json - package.json just before it was modified and saved by the plugboy\n * @param workspace - {@link PlugboyWorkspace workspace instance}\n */\n preparePackageJSON: (\n json: WorkspacePackageJson,\n workspace: PlugboyWorkspace,\n ) => any;\n}\n\nexport function createHooksDefaults(): ResolvedHooks {\n return {\n setupWorkspace: [],\n createWorkspace: [],\n preparePackageJSON: [],\n };\n}\n\nexport type HookName = keyof HookTypes;\n\n/**\n * plugboy user hook definition\n * @see {@link HookTypes}\n */\nexport type UserHooks = {\n [Name in HookName]?: Listable<HookTypes[Name]>;\n};\n\n/**\n * Pre-setup hook definitions\n * @see {@link HookTypes}\n */\nexport type ResolvedHooks = {\n [Name in HookName]: HookTypes[Name][];\n};\n\nexport type HookArgs<Name extends HookName> = Parameters<HookTypes[Name]>;\n\nexport type UnPromisify<T> = T extends Promise<infer U> ? U : T;\n\nexport type HookReturnType<Name extends HookName> = UnPromisify<\n ReturnType<HookTypes[Name]>\n>;\n\n/**\n * Map of hook methods that can be initialized and called\n * @see {@link HookTypes}\n */\nexport type BuildedHooks = {\n [Name in HookName]: (\n ...args: HookArgs<Name>\n ) => Promise<HookReturnType<Name>>;\n};\n","/**\n * Type preservation target in d.ts file\n */\nexport interface DTSPreserveTypeTarget {\n /** Type name */\n typeName: string;\n /**\n * String to be restored or regular expression to match\n */\n from: string | RegExp;\n}\n\n/**\n * Type preservation target in d.ts file (normalized)\n *\n * @see {@link DTSPreserveTypeTarget}\n */\nexport interface NormalizedDTSPreserveTypeTarget\n extends Omit<DTSPreserveTypeTarget, 'from'> {\n /** Regular expression to match the string to be restored */\n from: RegExp;\n}\n\nexport function normalizeDTSPreserveTypeTarget(\n target: DTSPreserveTypeTarget,\n): NormalizedDTSPreserveTypeTarget {\n const { from, typeName } = target;\n return {\n from: typeof from === 'string' ? new RegExp(`${from}`, 'g') : from,\n typeName,\n };\n}\n\n/**\n * Type preservation setting for d.ts files\n *\n * @remarks This setting is for restoring type information inlined by the TypeScript compiler to the original type name by string substitution.\n */\nexport interface DTSPreserveTypeSettings {\n /** Name of the package to which the type to be restored belongs */\n pkg?: string;\n /** List of preservation targets */\n targets: DTSPreserveTypeTarget[];\n}\n\n/**\n * Type preservation setting for d.ts files (normalized)\n *\n * @see {@link DTSPreserveTypeSettings}\n */\nexport interface NormalizedDTSPreserveTypeSettings\n extends Omit<DTSPreserveTypeSettings, 'targets'> {\n /** List of normalized type preservation targets */\n targets: NormalizedDTSPreserveTypeTarget[];\n}\n\nexport function normalizeDTSPreserveTypeSettings(\n settings: DTSPreserveTypeSettings,\n): NormalizedDTSPreserveTypeSettings {\n return {\n ...settings,\n targets: settings.targets.map(normalizeDTSPreserveTypeTarget),\n };\n}\n\n/**\n * d.ts output setting\n */\nexport interface DTSSettings {\n /**\n * Inline output without bundling d.ts\n *\n * @default false\n */\n inline?: boolean;\n\n /**\n * list of type preservation settings\n *\n * @remarks This setting is for restoring type information inlined by the TypeScript compiler to the original type name by string substitution.\n *\n * @see {@link DTSPreserveTypeSettings}\n */\n preserveType?: DTSPreserveTypeSettings[];\n}\n\n/**\n * d.ts output setting (normalized)\n *\n * @see {@link DTSSettings}\n */\nexport interface NormalizedDTSSettings {\n /**\n * Inline output without bundling d.ts\n */\n inline: boolean;\n\n /**\n * list of type preservation settings\n */\n preserveType: NormalizedDTSPreserveTypeSettings[];\n}\n\nexport function normalizeDTSSettings(\n settings: DTSSettings,\n): NormalizedDTSSettings {\n const { inline = false, preserveType = [] } = settings || {};\n return {\n inline,\n preserveType: preserveType.map(normalizeDTSPreserveTypeSettings),\n };\n}\n\nexport function mergeDTSSettingsList(\n ...settingsList: (DTSSettings | undefined)[]\n): NormalizedDTSSettings {\n const merged: DTSSettings = {};\n settingsList.forEach((settings) => {\n if (!settings) return;\n const { inline, preserveType } = settings;\n if (inline !== undefined) merged.inline = inline;\n if (preserveType) {\n merged.preserveType = merged.preserveType || [];\n merged.preserveType.push(...preserveType);\n }\n });\n return normalizeDTSSettings(merged);\n}\n","import type { Path } from '../path';\nimport { RequiredPackageJSON, MarkRequired } from './_utils';\nimport type { PlugboyProject } from '../project';\nimport type { UserPluginOption, Plugin } from './plugin';\nimport type { UserHooks, BuildedHooks } from './hook';\nimport { Options as TSUpOptions } from 'tsup';\nimport { DTSSettings, NormalizedDTSSettings } from './dts';\n\nexport const WORKSPACE_REQUIRED_FIELDS = ['name', 'version'] as const;\n\ntype WorkspaceRequiredField = (typeof WORKSPACE_REQUIRED_FIELDS)[number];\n\n/**\n * Entry setting object\n */\nexport interface RawWorkspaceEntryObject {\n /**\n * Entry file path\n * @remarks It must be relative to the root directory of the workspace.\n */\n src: string;\n /**\n * Set to true if the entry outputs css at the same time\n * @remarks By doing this, the exports field in package.json will be set automatically.\n */\n css?: boolean;\n}\n\n/**\n * Entry setting object\n */\nexport type WorkspaceEntry = MarkRequired<\n RawWorkspaceEntryObject,\n 'src' | 'css'\n>;\n\nexport type RawWorkspaceEntry = string | RawWorkspaceEntryObject;\n\n/**\n * Configuration of all entries in the workspace (normalized)\n *\n * @see {@link RawWorkspaceEntries}\n */\nexport type WorkspaceEntries = Record<string, WorkspaceEntry>;\n\n/**\n * Configuration of all entries in the workspace\n *\n * @remarks The configuration must be `{ [id]: [Entry setting: }`. `\".\" ` is treated as a special ID and is the target of the main export.\n */\nexport type RawWorkspaceEntries = Record<string, RawWorkspaceEntry>;\n\nexport const TSUP_SYNC_OPTIONS = [\n 'define',\n 'noExternal',\n 'external',\n 'replaceNodeEnv',\n 'skipNodeModulesBundle',\n] as const;\n\ntype TSUpSyncOption = (typeof TSUP_SYNC_OPTIONS)[number];\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface TSUpSyncOptions extends Pick<TSUpOptions, TSUpSyncOption> {}\n\n/**\n * Workspace User Configuration\n */\nexport interface UserWorkspaceConfig extends TSUpSyncOptions {\n /**\n * Ignore project settings\n *\n * @remarks Normally, when processing a workspace, plugboy looks for and merges the settings of the entire project at the same time, but this action can be canceled.\n */\n ignoreProjectConfig?: boolean;\n /**\n * Configuration of all entries in the workspace\n *\n * @see {@link RawWorkspaceEntries}\n */\n entries?: RawWorkspaceEntries;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link UserPluginOption}\n */\n plugins?: UserPluginOption[];\n /**\n * d.ts output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n}\n\n/**\n * Workspace Configuration\n */\nexport interface ResolvedWorkspaceConfig\n extends Required<\n Omit<\n UserWorkspaceConfig,\n 'entries' | 'hooks' | 'plugins' | 'dts' | TSUpSyncOption\n >\n >,\n TSUpSyncOptions {\n /**\n * Configuration of all entries in the workspace\n *\n * @see {@link WorkspaceEntries}\n */\n entries: WorkspaceEntries;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link UserPluginOption}\n */\n plugins: Plugin[];\n /**\n * d.ts output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n}\n\nexport type WorkspacePackageJson = RequiredPackageJSON<WorkspaceRequiredField>;\n\n/**\n * Workspace Directory Settings\n */\nexport interface WorkspaceDirs {\n /** Path instance of the source directory */\n src: Path;\n /** Path instance of the distribution directory */\n dist: Path;\n}\n\n/**\n * Workspace Meta Information\n *\n * @remarks This will be set to a value uniquely extended by the plugin\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface WorkspaceMeta {}\n\n/**\n * Workspace setup context object\n * @remarks Objects that are configured when the workspace is set up. Customization can be done before the workspace instance is created by a plug-in or other process.\n */\nexport interface WorkspaceSetupContext {\n /** Workspace directory path instance */\n dir: Path;\n /** package.json */\n json: WorkspacePackageJson;\n /**\n * Workspace Configuration\n * @see {@link ResolvedWorkspaceConfig}\n */\n config: ResolvedWorkspaceConfig;\n /** Plugboy Project */\n project: PlugboyProject | null;\n /** Workspace Directory Settings */\n dirs: WorkspaceDirs;\n /**\n * All package names on which the workspace depends\n */\n dependencies: string[];\n /**\n * Names of all in-project packages on which the workspace depends\n */\n projectDependencies: string[];\n /**\n * Workspace Meta Information\n * @see {@link WorkspaceMeta}\n */\n meta: WorkspaceMeta;\n /**\n * プラグインリスト\n * @see {@link Plugin}\n */\n plugins: Plugin[];\n /**\n * Map of hook methods that can be initialized and called\n * @see {@link BuildedHooks}\n */\n hooks: BuildedHooks;\n /**\n * d.ts output setting\n * @see {@link NormalizedDTSSettings}\n */\n dts: NormalizedDTSSettings;\n}\n","import { RequiredPackageJSON } from './_utils';\nimport type { CompilerOptions } from 'typescript';\nimport { WorkspacePackageJson } from './workspace';\nimport { UserPluginOption, Plugin } from './plugin';\nimport type { Path } from '../path';\nimport { UserHooks } from './hook';\nimport { DTSSettings } from './dts';\n\nexport const PROJECT_REQUIRED_FIELDS = ['name'] as const;\n\ntype ProjectRequiredField = (typeof PROJECT_REQUIRED_FIELDS)[number];\n\nexport type TSConfigJSON = {\n compilerOptions?: CompilerOptions;\n} & Record<string, any>;\n\n/**\n * Template for package.json script in workspace\n */\nexport interface ProjectScriptsTemplate {\n /** Template Name */\n name: string;\n /** Script Map */\n scripts: Record<string, string>;\n}\n\n/**\n * Project User Configuration\n */\nexport interface UserProjectConfig {\n /**\n * Directory where the workspace is located\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n * @default packages\n */\n workspacesDir?: string;\n /**\n * Workspace script templates, or a list of them\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n scripts?: Record<string, string> | ProjectScriptsTemplate[];\n /**\n * Workspace tsconfig template\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n tsconfig?: TSConfigJSON;\n /**\n * Workspace README template\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n readme?: (json: WorkspacePackageJson) => string;\n /**\n * Fixes the version of all peer dependencies in the project\n */\n peerDependencies?: Record<string, string>;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link UserPluginOption}\n */\n plugins?: UserPluginOption[];\n /**\n * d.ts output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n}\n\n/**\n * Project Configuration\n */\n\nexport interface ResolvedProjectConfig\n extends Required<\n Omit<\n UserProjectConfig,\n 'scripts' | 'tsconfig' | 'hooks' | 'plugins' | 'dts'\n >\n > {\n /**\n * Workspace script templates list\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n scripts: ProjectScriptsTemplate[];\n /**\n * Workspace tsconfig template\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n tsconfig?: TSConfigJSON;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link UserPluginOption}\n */\n plugins: Plugin[];\n /**\n * d.ts output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n}\n\nexport type ProjectPackageJson = RequiredPackageJSON<ProjectRequiredField>;\n\n/**\n * Project setup context object\n * @remarks Objects that are configured when the project is set up.\n */\nexport interface ProjectSetupContext {\n /** Project directory path instance */\n dir: Path;\n /** package.json */\n json: ProjectPackageJson;\n /** Project Configuration */\n config: ResolvedProjectConfig;\n /**\n * List of directory names of workspaces located in the project\n * @remarks Note that it is the directory name, not the package name.\n */\n resolvedWorkspaces: string[];\n}\n","export function isPromise<T = any>(obj: any): obj is Promise<T> {\n return (\n !!obj &&\n (typeof obj === 'object' || typeof obj === 'function') &&\n typeof obj.then === 'function'\n );\n}\n\nexport type Listable<T> =\n | T\n | false\n | null\n | undefined\n | Listable<T>[]\n | Promise<T | false | null | undefined | Listable<T>[]>;\n\nexport async function resolveListable<T>(raw: Listable<T>): Promise<T[]> {\n const result: T[] = [];\n const list = Array.isArray(raw) ? raw : [raw];\n for (let row of list) {\n if (isPromise(row)) {\n row = await row;\n }\n if (!row) continue;\n if (Array.isArray(row)) {\n result.push(...(await resolveListable(row)));\n continue;\n }\n result.push(row);\n }\n return result;\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getFilename(importMetaURL: string) {\n return fileURLToPath(importMetaURL);\n}\n\nexport function getDirname(importMetaURL: string) {\n return path.dirname(getFilename(importMetaURL));\n}\n\nconst FILE_NOT_FOUND_EXCEPTION_CODES = ['ENOTDIR', 'ENOENT'] as const;\n\nexport function isFileNotFoundException(\n source: unknown,\n): source is NodeJS.ErrnoException {\n return (\n !!source &&\n typeof source === 'object' &&\n FILE_NOT_FOUND_EXCEPTION_CODES.includes(\n (source as NodeJS.ErrnoException).code as any,\n )\n );\n}\n\nexport async function pathExists(\n target: string,\n type?: 'file' | 'dir',\n): Promise<boolean> {\n try {\n const stats = await fs.promises.stat(target);\n if (!type) return true;\n return type === 'file' ? stats.isFile() : stats.isDirectory();\n } catch (err) {\n if (isFileNotFoundException(err)) return false;\n throw err;\n }\n}\n\ntype FileMatcherFn = (\n file: fs.Dirent,\n dir: string,\n) => boolean | Promise<boolean>;\n\ntype FileMatcher = string | RegExp | FileMatcherFn;\n\nfunction normalizeFileMatcher(matcher: FileMatcher): FileMatcherFn {\n if (typeof matcher === 'function') {\n return matcher;\n }\n if (typeof matcher === 'string') {\n return (file) => file.name.includes(matcher);\n }\n return (file) => matcher.test(file.name);\n}\n\nexport async function findFile(\n dir: string,\n matcher: FileMatcher,\n recursive = true,\n): Promise<string | undefined> {\n const files = await fs.promises.readdir(dir, { withFileTypes: true });\n const _matcher = normalizeFileMatcher(matcher);\n\n const dirs: fs.Dirent[] | undefined = recursive ? [] : undefined;\n\n for (const file of files) {\n if (dirs && file.isDirectory()) {\n dirs.push(file);\n continue;\n }\n if (await _matcher(file, dir)) {\n return path.join(dir, file.name);\n }\n }\n\n if (dirs) {\n for (const subDir of dirs) {\n const hit = await findFile(\n path.join(dir, subDir.name),\n _matcher,\n recursive,\n );\n if (hit) return hit;\n }\n }\n}\n\nexport interface FindConfigResult {\n dir: string;\n fileName: string;\n path: string;\n code: string;\n}\n\ninterface FindConfigSettings<AllowMissing extends boolean | undefined> {\n fileName: string | string[];\n allowMissing?: AllowMissing;\n test?: (result: FindConfigResult) => boolean;\n /**\n * Trace up to how many directories above\n * @default 10\n */\n depth?: number;\n}\n\nconst FIND_CONFIG_OR_RE = /\\(.+?\\)/g;\n\nfunction parseFindConfigFileName(source: string): string[] {\n const matches = source.match(FIND_CONFIG_OR_RE);\n if (!matches) return [source];\n return matches\n .map((matched) => {\n const parts = matched.slice(1, matched.length - 1).split('|');\n return parts\n .map((part) => {\n const chunk = source.replace(matched, part);\n return parseFindConfigFileName(chunk);\n })\n .flat();\n })\n .flat();\n}\n\nfunction parseRawFindConfigFileName(source: string | string[]): string[] {\n return Array.isArray(source)\n ? source.map(parseFindConfigFileName).flat()\n : parseFindConfigFileName(source);\n}\n\nexport async function findConfig<\n AllowMissing extends boolean | undefined = false,\n>(\n fileNameOrSettings: string | string[] | FindConfigSettings<AllowMissing>,\n dir = process.cwd(),\n currentDepth = 0,\n): Promise<\n AllowMissing extends true ? FindConfigResult | null : FindConfigResult\n> {\n const settings: FindConfigSettings<AllowMissing> =\n typeof fileNameOrSettings === 'object' && !Array.isArray(fileNameOrSettings)\n ? fileNameOrSettings\n : { fileName: fileNameOrSettings };\n\n const { fileName, test, depth = 10, allowMissing } = settings;\n const fileNames = parseRawFindConfigFileName(fileName);\n if (depth && currentDepth === depth) {\n if (allowMissing) return null as any;\n throw new Error(\n `Failed to retrieve the \"${fileName}\" file because the maximum depth was reached.`,\n );\n }\n\n const next = (err?: unknown) => {\n const nextDir = path.dirname(dir);\n if (nextDir !== dir) {\n return findConfig(fileName, nextDir, currentDepth + 1);\n }\n if (allowMissing) return null as any;\n throw err || new Error(`missing config \"${fileName}\"`);\n };\n\n const result = await (async () => {\n for (const fileName of fileNames) {\n try {\n const _path = path.join(dir, fileName);\n const code = await fs.promises.readFile(_path, 'utf-8');\n const result: FindConfigResult = {\n fileName,\n dir,\n path: _path,\n code,\n };\n if (!test || test(result)) {\n return result;\n }\n } catch (err) {\n if (!isFileNotFoundException(err)) {\n throw err;\n }\n }\n }\n })();\n\n if (!result) {\n return next();\n }\n\n return result;\n}\n\nfunction _rmrf(path: string): Promise<void> {\n return fs.promises\n .rm(path, {\n recursive: true,\n force: true,\n })\n .catch((err) => {\n if (isFileNotFoundException(err)) return;\n throw err;\n });\n}\n\nexport async function rmrf(...paths: string[]): Promise<void> {\n await Promise.all(paths.map((path) => _rmrf(path)));\n}\n\nexport function copyDirSync(srcDir: string, destDir: string): void {\n if (!fs.existsSync(srcDir)) return;\n\n fs.mkdirSync(destDir, { recursive: true });\n for (const file of fs.readdirSync(srcDir)) {\n const srcFile = path.resolve(srcDir, file);\n if (srcFile === destDir) {\n continue;\n }\n const destFile = path.resolve(destDir, file);\n const stat = fs.statSync(srcFile);\n if (stat.isDirectory()) {\n copyDirSync(srcFile, destFile);\n } else {\n fs.copyFileSync(srcFile, destFile);\n }\n }\n}\n","import path from 'node:path';\nimport { glob } from 'glob';\nimport { RawWorkspaceEntryObject } from '../types';\n\nexport interface ExposeEntriesSettings {\n dir: string;\n /**\n * Path prefix at distribution\n */\n prefix?: string;\n}\n\nexport type RawExposeEntriesSettings = string | ExposeEntriesSettings;\n\nexport function resolveRawExposeEntriesSettings(\n rawSettings: RawExposeEntriesSettings,\n): ExposeEntriesSettings {\n return typeof rawSettings === 'string' ? { dir: rawSettings } : rawSettings;\n}\n\nconst TRIM_PATH_RE = /(^\\.?\\/|\\/$)/g;\nconst TRIM_EXT_RE = /\\.ts$/;\n\nexport async function exposeEntries(rawSettings: RawExposeEntriesSettings) {\n const { dir: _dir, prefix: _prefix } =\n resolveRawExposeEntriesSettings(rawSettings);\n const dir = path.resolve(_dir);\n const prefix = _prefix ? _prefix.replace(TRIM_PATH_RE, '') : '';\n const pattern = path.join(dir, '**/*.ts');\n const files = await glob(pattern);\n const entries: Record<string, RawWorkspaceEntryObject> = {};\n for (const file of files) {\n const id = (prefix + file.replace(dir, ''))\n .replace(TRIM_EXT_RE, '')\n .replace(TRIM_PATH_RE, '');\n entries[id] = {\n src: file,\n };\n }\n return entries;\n}\n","import { PackageJson } from 'pkg-types';\nimport { bundleRequire } from 'bundle-require';\nimport {\n ProjectPackageJson,\n PROJECT_REQUIRED_FIELDS,\n UserProjectConfig,\n ResolvedProjectConfig,\n} from '../types';\nimport {\n PROJECT_CONFIG_BASENAME,\n SEARCH_BUNDLE_EXTENSIONS_MATCH,\n} from '../constants';\nimport { findConfig } from './file';\nimport { resolveUserPluginOptions } from './plugin';\n\nexport function isProjectPackageJson(\n json: PackageJson,\n): json is ProjectPackageJson {\n return (\n !!json.private && PROJECT_REQUIRED_FIELDS.every((filed) => !!json[filed])\n );\n}\n\nexport async function resolveUserProjectConfig(\n userConfig: UserProjectConfig,\n): Promise<ResolvedProjectConfig> {\n const {\n workspacesDir = 'packages',\n scripts = [],\n peerDependencies = {},\n tsconfig,\n readme = (json) => `# ${json.name}\\n`,\n plugins,\n } = userConfig;\n return {\n workspacesDir,\n scripts: Array.isArray(scripts) ? scripts : [{ name: '', scripts }],\n peerDependencies,\n tsconfig,\n readme,\n plugins: await resolveUserPluginOptions(plugins),\n };\n}\n\nexport function defineProjectConfig<Config extends UserProjectConfig>(\n config: Config,\n): Promise<ResolvedProjectConfig> {\n return resolveUserProjectConfig(config);\n}\n\nexport async function loadProjectConfig(\n searchDir?: string,\n depth?: number,\n): Promise<ResolvedProjectConfig> {\n const hit = await findConfig(\n {\n fileName: `${PROJECT_CONFIG_BASENAME}.${SEARCH_BUNDLE_EXTENSIONS_MATCH}`,\n depth,\n allowMissing: true,\n },\n searchDir,\n );\n\n const userConfig = hit\n ? (\n await bundleRequire<{\n default: UserProjectConfig | Promise<UserProjectConfig>;\n }>({\n filepath: hit.path,\n })\n ).mod.default\n : ({} as UserProjectConfig);\n\n return resolveUserProjectConfig(await userConfig);\n}\n","export const PROJECT_CONFIG_BASENAME = 'plugboy.project';\n\nexport const WORKSPACE_CONFIG_BASENAME = 'plugboy.workspace';\n\nexport const PACKAGE_JSON_FILENAME = 'package.json';\n\nexport const WORKSPACE_SPEC_PREFIX = 'workspace:';\n\nexport const SEARCH_BUNDLE_EXTENSIONS_MATCH = '(ts|mjs|js|json)';\n","import { UserPluginOption, Plugin } from '../types';\nimport { resolveListable } from './general';\nimport { loadProjectConfig } from './project';\n\nexport async function resolveUserPluginOptions(\n pluginOptions: UserPluginOption[] | undefined,\n): Promise<Plugin[]> {\n if (!pluginOptions) return [];\n return resolveListable(pluginOptions);\n}\n\nexport function definePlugin<T extends Plugin>(options: T): T {\n return options;\n}\n\nexport async function extractProjectPlugins(\n searchDir?: string,\n): Promise<Plugin[]> {\n const config = await loadProjectConfig(searchDir);\n return config ? config.plugins : [];\n}\n\nexport async function findProjectPlugin<T extends Plugin = Plugin>(\n pluginName: string,\n searchDir?: string,\n): Promise<T | undefined> {\n const plugins = await extractProjectPlugins(searchDir);\n return plugins.find((plugin) => plugin.name === pluginName) as T | undefined;\n}\n","import { PackageJson } from 'pkg-types';\nimport { bundleRequire } from 'bundle-require';\nimport {\n WorkspacePackageJson,\n WORKSPACE_REQUIRED_FIELDS,\n UserWorkspaceConfig,\n ResolvedWorkspaceConfig,\n RawWorkspaceEntryObject,\n RawWorkspaceEntry,\n WorkspaceEntry,\n RawWorkspaceEntries,\n WorkspaceEntries,\n} from '../types';\nimport { findConfig } from './file';\nimport {\n WORKSPACE_CONFIG_BASENAME,\n SEARCH_BUNDLE_EXTENSIONS_MATCH,\n} from '../constants';\nimport { resolveUserPluginOptions } from './plugin';\n\nexport function isWorkspacePackageJson(\n json: PackageJson,\n): json is WorkspacePackageJson {\n return (\n !json.private && WORKSPACE_REQUIRED_FIELDS.every((filed) => !!json[filed])\n );\n}\n\nexport function resolveRawWorkspaceEntry(\n entry: RawWorkspaceEntry,\n): WorkspaceEntry {\n const { src, css }: RawWorkspaceEntryObject =\n typeof entry === 'string' ? { src: entry } : entry;\n return {\n src,\n css: css || src.endsWith('.css') || src.endsWith('.scss'),\n };\n}\n\nexport function resolveRawWorkspaceEntries(\n entries: RawWorkspaceEntries | undefined,\n): WorkspaceEntries {\n if (!entries) return {};\n return Object.fromEntries(\n Object.entries(entries).map(([name, raw]) => [\n name,\n resolveRawWorkspaceEntry(raw),\n ]),\n );\n}\n\nexport async function resolveUserWorkspaceConfig(\n userConfig: UserWorkspaceConfig,\n): Promise<ResolvedWorkspaceConfig> {\n const { ignoreProjectConfig = false, entries, plugins } = userConfig;\n return {\n ...userConfig,\n ignoreProjectConfig,\n entries: resolveRawWorkspaceEntries(entries),\n plugins: await resolveUserPluginOptions(plugins),\n };\n}\n\nexport function defineWorkspaceConfig<Config extends UserWorkspaceConfig>(\n config: Config,\n): Promise<ResolvedWorkspaceConfig> {\n return resolveUserWorkspaceConfig(config);\n}\n\nexport async function loadWorkspaceConfig(\n searchDir?: string,\n depth?: number,\n): Promise<ResolvedWorkspaceConfig> {\n const hit = await findConfig(\n {\n fileName: `${WORKSPACE_CONFIG_BASENAME}.${SEARCH_BUNDLE_EXTENSIONS_MATCH}`,\n depth,\n allowMissing: true,\n },\n searchDir,\n );\n\n const userConfig = hit\n ? (\n await bundleRequire<{\n default: UserWorkspaceConfig | Promise<UserWorkspaceConfig>;\n }>({\n filepath: hit.path,\n })\n ).mod.default\n : ({} as UserWorkspaceConfig);\n\n return resolveUserWorkspaceConfig(await userConfig);\n}\n","import {\n UserHooks,\n ResolvedHooks,\n BuildedHooks,\n createHooksDefaults,\n} from '../types';\nimport { resolveListable } from './general';\n\nexport async function resolveUserHooks(\n ...userHooks: (UserHooks | undefined | null | false)[]\n): Promise<ResolvedHooks> {\n const hooks = createHooksDefaults();\n if (!userHooks) return hooks;\n for (const userHook of userHooks) {\n if (!userHook) continue;\n for (const [hookName, _hooks] of Object.entries(userHook)) {\n if (hooks) {\n (hooks as any)[hookName].push(...(await resolveListable(_hooks)));\n }\n }\n }\n return hooks;\n}\n\nexport function buildHooks(resolvedHooks: ResolvedHooks): BuildedHooks {\n const hooks: any = {};\n Object.entries(resolvedHooks).forEach(([hookName, fns]) => {\n hooks[hookName] = async (...args: any[]): Promise<any> => {\n const results: any[] = [];\n for (const fn of fns) {\n results.push(await (fn as any)(...args));\n }\n return results;\n };\n });\n return hooks;\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport { isFileNotFoundException } from './utils';\n\nexport class Path {\n private _value: string;\n private _stats?: fs.Stats;\n\n get value() {\n return this._value;\n }\n\n set value(value) {\n const _value = path.resolve(value);\n if (_value === this._value) return;\n this._value = path.resolve(value);\n delete this._stats;\n }\n\n get dirname() {\n return path.dirname(this.value);\n }\n\n get basename() {\n return path.basename(this.value);\n }\n\n get extname() {\n return path.extname(this.value);\n }\n\n get stats() {\n let { _stats } = this;\n if (!_stats) {\n _stats = fs.statSync(this.value);\n this._stats = _stats;\n }\n return _stats;\n }\n\n get isDirectory() {\n return this.stats.isDirectory;\n }\n\n get isFile() {\n return this.stats.isFile;\n }\n\n constructor(value: string) {\n this._value = path.resolve(value);\n }\n\n toString() {\n return this.value;\n }\n\n valueOf() {\n return this.value;\n }\n\n toJSON() {\n return this.value;\n }\n\n relative(to: string) {\n return new Path(path.relative(this.value, to));\n }\n\n join(...paths: string[]) {\n return new Path(path.join(this.value, ...paths));\n }\n\n resolve(...paths: string[]) {\n return new Path(path.resolve(this.value, ...paths));\n }\n\n private _join(...paths: (string | undefined)[]) {\n const _paths = paths.filter((path): path is string => !!path);\n return _paths.length ? path.join(this.value, ..._paths) : this.value;\n }\n\n async readdir(...paths: string[]): Promise<Path[]> {\n const dir = this._join(...paths);\n const files = await fs.promises.readdir(dir);\n return files.map((file) => {\n return new Path(path.join(dir, file));\n });\n }\n\n readFile<D = undefined>(\n pathAppend?: string,\n defaults?: D,\n ): Promise<D extends undefined ? string : string | D> {\n return new Promise<any>((resolve, reject) => {\n fs.readFile(this._join(pathAppend), 'utf-8', (err, data) => {\n if (err) {\n if (defaults !== undefined && isFileNotFoundException(err)) {\n return resolve(defaults);\n }\n return reject(err);\n }\n resolve(data);\n });\n });\n }\n\n async readJSON<T = any, D = undefined>(\n pathAppend?: string,\n defaults?: D,\n ): Promise<D extends undefined ? T : T | D> {\n try {\n const file = await this.readFile(pathAppend);\n return JSON.parse(file);\n } catch (err) {\n if (defaults === undefined) {\n throw err;\n }\n return defaults as any;\n }\n }\n}\n","import { ProjectPackageJson, WorkspacePackageJson } from './types';\nimport {\n findConfig,\n isProjectPackageJson,\n isWorkspacePackageJson,\n} from './utils';\nimport { PACKAGE_JSON_FILENAME } from './constants';\nimport { Path } from './path';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport interface GetProjectPackageJsonResult {\n dir: Path;\n json: ProjectPackageJson;\n}\n\nexport async function getProjectPackageJson<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n): Promise<\n AllowMissing extends true\n ? GetProjectPackageJsonResult | null\n : GetProjectPackageJsonResult\n> {\n const hit = await findConfig(\n {\n fileName: PACKAGE_JSON_FILENAME,\n allowMissing,\n test: (result) => isProjectPackageJson(JSON.parse(result.code)),\n },\n searchDir,\n );\n if (!hit) {\n if (allowMissing) return null as any;\n throw new Error('missing project package.');\n }\n return {\n dir: new Path(hit.dir),\n json: JSON.parse(hit.code),\n } as any;\n}\n\nexport interface GetWorkspacePackageJsonResult {\n dir: Path;\n json: WorkspacePackageJson;\n}\n\nexport async function getWorkspacePackageJson<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n): Promise<\n AllowMissing extends true\n ? GetWorkspacePackageJsonResult | null\n : GetWorkspacePackageJsonResult\n> {\n const hit = await findConfig(\n {\n fileName: PACKAGE_JSON_FILENAME,\n allowMissing,\n test: (result) => isWorkspacePackageJson(JSON.parse(result.code)),\n },\n searchDir,\n );\n if (!hit) {\n if (allowMissing) return null as any;\n throw new Error('missing workspace package.');\n }\n return {\n dir: new Path(hit.dir),\n json: JSON.parse(hit.code),\n } as any;\n}\n\nexport async function findWorkspacePackages(\n dir: string,\n): Promise<GetWorkspacePackageJsonResult[]> {\n const results: GetWorkspacePackageJsonResult[] = [];\n const searchDir = path.resolve(dir);\n const dirs = await fs.readdir(searchDir);\n const pkgs = await Promise.all(\n dirs.map((dirName) =>\n getWorkspacePackageJson(path.join(searchDir, dirName), true),\n ),\n );\n pkgs.forEach((pkg) => {\n pkg && results.push(pkg);\n });\n return results;\n}\n","import { Options, build } from 'tsup';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { PlugboyWorkspace, WorkspaceObjectExport } from './workspace';\nimport { TSUP_SYNC_OPTIONS, NormalizedDTSPreserveTypeSettings } from '../types';\nimport type { OutputFile, Plugin } from 'esbuild';\nimport { copyDirSync, rmrf } from '../utils';\nimport { emitDTS } from './dts';\nimport { glob } from 'glob';\n\nconst SHEBANG_MATCH_RE = /^(#!.+?)\\n/;\ntype EnvVarName = '__PLUGBOY_DEV__' | '__PLUGBOY_STUB__';\ntype EnvFnName =\n | '__plugboyWorkspaceDir'\n | '__plugboySrcDir'\n | '__plugboyPublicDir';\n\ninterface ResolvedOptions extends Options {\n esbuildPlugins: Plugin[];\n}\n\nexport class Builder {\n readonly workspace: PlugboyWorkspace;\n private _tsupOptions?: ResolvedOptions;\n\n get entry() {\n return this.workspace.entry;\n }\n\n get dts() {\n return this.workspace.dts;\n }\n\n constructor(workspace: PlugboyWorkspace) {\n this.workspace = workspace;\n }\n\n async tsupOptions(overrides?: { watch?: boolean }): Promise<ResolvedOptions> {\n let { _tsupOptions } = this;\n if (_tsupOptions) return _tsupOptions;\n\n const { entry, dts } = this;\n\n const esbuildPlugins = await this.workspace.getESBuildPlugins();\n\n _tsupOptions = {\n publicDir: true,\n format: ['esm'],\n dts: dts.inline\n ? false\n : {\n resolve: ['@fastkit/plugboy'],\n },\n treeshake: true,\n esbuildPlugins,\n entry,\n splitting: true,\n outExtension: ({ format }) => ({\n js: `.mjs`,\n }),\n sourcemap: true,\n clean: true,\n ...overrides,\n };\n\n for (const opt of TSUP_SYNC_OPTIONS) {\n _tsupOptions[opt] = this.workspace.config[opt] as any;\n }\n\n const PLUGBOY_VAR_ENVS: Record<EnvVarName, string> = {\n __PLUGBOY_DEV__: 'false',\n __PLUGBOY_STUB__: 'false',\n };\n\n const DEFINE_VAR_INJECTS = Object.fromEntries(\n Object.keys(PLUGBOY_VAR_ENVS).map((envName) => [envName, `$$${envName}`]),\n );\n\n _tsupOptions.define = {\n ..._tsupOptions.define,\n ...DEFINE_VAR_INJECTS,\n };\n\n const PLUGBOY_VAR_ENVS_BANNER = [\n ...Object.entries(PLUGBOY_VAR_ENVS).map(\n ([envName, variable]) =>\n `const $$${envName} = /* @PLUGBOY:${envName}:start */${variable}/* @PLUGBOY:${envName}:end */;`,\n ),\n `const $$__PLUGBOY_RELATIVE_PATH_FOR_WORKSPACE__ = '@@__PLUGBOY_RELATIVE_PATH_FOR_WORKSPACE__';`,\n ].join('\\n');\n\n const ENV_FN_INJECTS = `\nimport __plugboy_path from 'node:path';\nimport { fileURLToPath as __plugboy_fileURLToPath } from 'node:url';\n\nfunction __plugboyFilename() {\n return __plugboy_fileURLToPath(import.meta.url);\n}\n\nfunction __plugboyDirname() {\n return __plugboy_path.dirname(__plugboyFilename());\n}\n\nfunction __plugboyWorkspaceDir(...paths) {\n return __plugboy_path.join(__plugboy_path.resolve(__plugboyDirname(), $$__PLUGBOY_RELATIVE_PATH_FOR_WORKSPACE__), ...paths);\n}\n\nfunction __plugboySrcDir(...paths) {\n return __plugboy_path.join(__plugboyWorkspaceDir(), 'src', ...paths);\n}\n\nfunction __plugboyPublicDir(...paths) {\n return __plugboy_path.join(__plugboyWorkspaceDir(), 'dist', ...paths);\n}\n `.trim();\n\n const banner: NonNullable<Options['banner']> = { ..._tsupOptions.banner };\n banner.js = `${\n banner.js ? banner.js + '\\n\\n' : ''\n }${PLUGBOY_VAR_ENVS_BANNER}\\n\\n${ENV_FN_INJECTS}`;\n\n _tsupOptions.banner = banner;\n\n _tsupOptions.external = _tsupOptions.external || [];\n _tsupOptions.external.push(\n /^(@fastkit\\/)?plugboy/,\n ...this.workspace.dependencies,\n );\n\n this._tsupOptions = _tsupOptions;\n\n return _tsupOptions;\n }\n\n private async _stubLinkJS(from: string, to: string) {\n const fromParsed = path.parse(from);\n const fromDir = fromParsed.dir;\n const toParsed = path.parse(to);\n const toRelativeDir = path.relative(fromDir, toParsed.dir);\n const location = path.join(toRelativeDir, toParsed.base);\n const source = await fs.readFile(to, 'utf-8');\n const shebang = source.match(SHEBANG_MATCH_RE)?.[1];\n const STUB_FN_ERROR = `() => { throw new Error('Path resolution methods cannot be executed in stub mode.') }`;\n const PLUGBOY_ENVS: Record<EnvVarName | EnvFnName, string> = {\n __PLUGBOY_DEV__: 'true',\n __PLUGBOY_STUB__: 'true',\n __plugboyWorkspaceDir: STUB_FN_ERROR,\n __plugboySrcDir: STUB_FN_ERROR,\n __plugboyPublicDir: STUB_FN_ERROR,\n // __plugboyWorkspaceDir: `(...paths) => path.join('${this.workspace.dir.value}', ...paths)`,\n // __plugboySrcDir: `(...paths) => path.join(__plugboySrcDir(), 'src', ...paths)`,\n // __plugboyPublicDir: `(...paths) => path.join(__plugboySrcDir(), 'dist', ...paths)`,\n };\n const ENV_INJECTS = Object.entries(PLUGBOY_ENVS)\n .map(([envName, variable]) => `globalThis.${envName} = ${variable};`)\n .join('\\n');\n const disableChecks = '/* eslint-disable */\\n// @ts-nocheck\\n';\n const code = `${disableChecks}${ENV_INJECTS}\\nexport * from '${location}';`;\n const dtsPath = path.join(fromDir, `${fromParsed.name}.d.ts`);\n const dtsCode = `${disableChecks}export * from '${location.replace(\n /\\.ts$/,\n '',\n )}';`;\n await Promise.all([\n fs.writeFile(from, `${shebang ? shebang + '\\n' : ''}${code}`),\n fs.writeFile(dtsPath, dtsCode),\n ]);\n }\n\n private async _stubLinkCSS(from: string) {\n const code = `/* noop */`;\n await fs.writeFile(from, code);\n }\n\n async copyPublicDir() {\n const publicDir = this.workspace.dir.join('public').value;\n await copyDirSync(publicDir, this.workspace.dirs.dist.value);\n }\n\n async stub() {\n const links = this.workspace.getStubLinks();\n await this.copyPublicDir();\n await Promise.all(\n links.map((link) => {\n if (link.type === 'js') {\n return this._stubLinkJS(link.from, link.to);\n } else if (link.type === 'css') {\n return this._stubLinkCSS(link.from);\n }\n }),\n );\n }\n\n normalizeDTSBySettings(\n dts: string,\n settings: NormalizedDTSPreserveTypeSettings,\n ): string | undefined {\n const { targets, pkg } = settings;\n const myPackageName = this.workspace.json.name;\n const packageIsOwn = myPackageName === pkg;\n const pkgImports = (() => {\n if (!pkg || packageIsOwn) return;\n\n const importRe = new RegExp(`import {([^\\\\{\\\\}]+)} from '${pkg}'`);\n const importMatched = dts.match(importRe);\n const imports = importMatched && importMatched[1];\n if (!imports) return;\n\n return {\n pkg,\n importRe,\n imports,\n };\n })();\n\n const hitTypeNames: string[] = [];\n targets.forEach(({ from, typeName }) => {\n const matched = dts.match(from);\n if (matched) {\n hitTypeNames.push(typeName);\n dts = dts.replace(from, typeName);\n }\n });\n\n if (!hitTypeNames.length) return;\n\n if (pkgImports) {\n const { pkg, imports, importRe } = pkgImports;\n const mods = imports\n .trim()\n .split(',')\n .map((row) => {\n row = row.split(' as ')[0].trim();\n return row;\n });\n const appends: string[] = [];\n hitTypeNames.forEach((typeName) => {\n const re = new RegExp(`(^|\\n)import { ${typeName} } from '${pkg}'`);\n if (!re.test(dts) && !mods.includes(typeName)) {\n appends.push(typeName);\n }\n });\n if (appends.length) {\n dts = dts.replace(\n importRe,\n `import { $1, ${appends.join(', ')} } from '${pkg}'`,\n );\n }\n } else if (pkg && !packageIsOwn) {\n const mods: string[] = [];\n hitTypeNames.forEach((typeName) => {\n if (!dts.includes(`export declare type ${typeName} = `)) {\n mods.push(typeName);\n }\n });\n if (mods.length) {\n dts = `import { ${mods.join(', ')} } from '${pkg}';\\n${dts}`;\n }\n }\n return dts;\n }\n\n async normalizeDTSFile(filePath: string) {\n const dts = await fs.readFile(filePath, 'utf-8');\n const { preserveType } = this.dts;\n let normalized = dts;\n let processed = false;\n for (const settings of preserveType) {\n const _normalized = this.normalizeDTSBySettings(normalized, settings);\n if (_normalized) {\n processed = true;\n normalized = _normalized;\n }\n }\n if (!processed) {\n return;\n }\n await fs.writeFile(filePath, normalized, 'utf-8');\n }\n\n async normalizeDTSFiles(dtsFiles: string[] = this.workspace.dtsFiles) {\n const { preserveType } = this.dts;\n if (!preserveType.length || !dtsFiles.length) return;\n\n await Promise.all(\n dtsFiles.map((filePath) => this.normalizeDTSFile(filePath)),\n );\n }\n\n async emitInlineDTS() {\n const { dir, dirs, exports } = this.workspace;\n const cwd = dir.value;\n const outDir = dirs.dist.join('.dts-generate').value;\n const dtsSrcDir = path.join(outDir, 'src');\n const dtsDest = dirs.dist.join('.dts').value;\n\n await emitDTS({\n cwd,\n outDir,\n });\n\n await fs.rename(dtsSrcDir, dtsDest);\n await rmrf(outDir);\n\n const objectExports: WorkspaceObjectExport[] = [];\n\n exports.forEach(({ at }) => {\n typeof at === 'object' && objectExports.push(at);\n });\n\n await Promise.all(\n objectExports.map(async (at) => {\n const typesDir = path.dirname(at.types);\n const dtsDestDir = path.dirname(at.dtsDest);\n const relativeDir = path.relative(typesDir, dtsDestDir);\n const relativePath = path.join(\n relativeDir,\n path.basename(at.dtsDest).replace(/\\.d\\.ts$/, ''),\n );\n const code = `export * from './${relativePath}';`;\n await fs.writeFile(at.types, code, 'utf-8');\n }),\n );\n\n const dtsFiles = await glob(path.join(dtsDest, '**/*.d.ts'));\n await this.normalizeDTSFiles(dtsFiles);\n }\n\n async build() {\n const _outputFiles: OutputFile[] = [];\n const options = await this.tsupOptions();\n await build({\n ...options,\n esbuildPlugins: [\n ...options.esbuildPlugins,\n {\n name: 'output-collection',\n setup(build) {\n build.onEnd((result) => {\n const { outputFiles } = result;\n if (!outputFiles) return;\n _outputFiles.push(...outputFiles);\n });\n },\n },\n ],\n onSuccess: async () => {\n const emptyNativeNodeModuleRe = /(^|\\n)import 'node:.+?';?/g;\n await Promise.all(\n _outputFiles.map(async ({ path: filePath }) => {\n if (!filePath.endsWith('.mjs')) return;\n const code = await fs.readFile(filePath, 'utf-8');\n const replaced = code.replace(emptyNativeNodeModuleRe, '');\n if (code === replaced) return;\n\n await fs.writeFile(filePath, replaced.trimStart(), 'utf-8');\n }),\n );\n },\n });\n\n if (this.dts.inline) {\n await this.emitInlineDTS();\n } else {\n await this.normalizeDTSFiles();\n }\n }\n}\n","import { execa } from 'execa';\nimport path from 'node:path';\n\nexport interface EmitDTSOptions {\n cwd?: string;\n outDir?: string;\n}\n\nexport async function emitDTS(opts: EmitDTSOptions = {}) {\n const { cwd = process.cwd(), outDir = path.join(cwd, 'dist/dts') } = opts;\n await execa(\n 'tsc',\n [\n '--declaration true',\n '--skipLibCheck',\n '--noEmit false',\n '--emitDeclarationOnly',\n `--outDir ${outDir}`,\n ],\n { cwd, shell: true, stdio: 'inherit' },\n );\n}\n","import {\n ProjectSetupContext,\n ProjectPackageJson,\n ResolvedProjectConfig,\n UserHooks,\n} from '../types';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { Path } from '../path';\nimport glob from 'glob';\nimport { getProjectPackageJson } from '../package';\nimport {\n isWorkspacePackageJson,\n loadProjectConfig,\n resolveUserProjectConfig,\n} from '../utils';\nimport { PACKAGE_JSON_FILENAME } from '../constants';\n\n/**\n * Plugboy Project\n *\n * @remarks This instance is only created if the project consists of a mono-repo.\n */\nexport class PlugboyProject {\n /** Path instance of the project directory */\n readonly dir: Path;\n /** package.json */\n readonly json: ProjectPackageJson;\n /**\n * Project Configuration\n * @see {@link ResolvedProjectConfig}\n */\n readonly config: ResolvedProjectConfig;\n /** Names of all packages on which the project depends */\n readonly dependencies: string[];\n /** Directory names of all workspaces owned by the project */\n readonly resolvedWorkspaces: string[];\n\n /**\n * Name of the project's package.json\n */\n get name() {\n return this.json.name;\n }\n\n /**\n * Plug-in List\n * @see {@link ResolvedProjectConfig.plugins}\n */\n get plugins() {\n return this.config.plugins;\n }\n\n /**\n * List of all user hook settings\n * @see {@link UserHooks}\n */\n get hooks(): UserHooks[] {\n const { hooks: _hooks, plugins } = this.config;\n const pluginHooks = plugins.map((plugin) => plugin.hooks);\n return [_hooks, ...pluginHooks].filter((hook): hook is UserHooks => !!hook);\n }\n\n constructor(ctx: ProjectSetupContext) {\n const { dir, json, config, resolvedWorkspaces } = ctx;\n\n this.dir = dir;\n this.json = json;\n this.config = config;\n\n const allDeps = {\n ...json.dependencies,\n ...json.devDependencies,\n };\n\n this.dependencies = Object.keys(allDeps);\n this.resolvedWorkspaces = resolvedWorkspaces;\n }\n}\n\nexport async function getProject<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n skipLoadConfig?: boolean,\n): Promise<AllowMissing extends true ? PlugboyProject | null : PlugboyProject> {\n const hit = await getProjectPackageJson(searchDir, allowMissing);\n if (!hit) {\n return null as any;\n }\n const { dir, json } = hit;\n const resolvedWorkspaces: string[] = [];\n const { workspaces = [] } = json;\n const workspacesPattern = workspaces.map(\n (workspace) => dir.join(workspace, PACKAGE_JSON_FILENAME).value,\n );\n const workspaceHits = await glob(workspacesPattern);\n for (const hit of workspaceHits) {\n const json = JSON.parse(await fs.readFile(hit, 'utf-8'));\n if (!isWorkspacePackageJson(json)) {\n continue;\n }\n resolvedWorkspaces.push(path.dirname(hit));\n }\n resolvedWorkspaces.sort((a, b) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n });\n\n const config = skipLoadConfig\n ? await resolveUserProjectConfig({})\n : await loadProjectConfig(dir.value, 0);\n\n const ctx: ProjectSetupContext = {\n dir,\n json,\n config,\n resolvedWorkspaces,\n };\n\n return new PlugboyProject(ctx);\n}\n","import {\n rmrf,\n loadWorkspaceConfig,\n resolveUserHooks,\n buildHooks,\n} from '../utils';\nimport {\n ProjectPackageJson,\n WorkspacePackageJson,\n ResolvedWorkspaceConfig,\n WorkspaceDirs,\n WorkspaceSetupContext,\n WorkspaceMeta,\n Plugin,\n UserHooks,\n BuildedHooks,\n ESBuildPlugin,\n mergeDTSSettingsList,\n NormalizedDTSSettings,\n} from '../types';\nimport { Path } from '../path';\nimport { WORKSPACE_SPEC_PREFIX } from '../constants';\nimport { PlugboyProject, getProject } from '../project';\nimport sortPackageJson from 'sort-package-json';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { Builder } from './builder';\nimport { getWorkspacePackageJson } from '../package';\nimport { PACKAGE_JSON_FILENAME } from '../constants';\n\nexport type WorkspaceStubLink =\n | {\n type: 'js';\n from: string;\n to: string;\n }\n | {\n type: 'css';\n from: string;\n };\n\nexport type WorkspaceStubLinkType = WorkspaceStubLink['type'];\n\nexport interface WorkspaceObjectExport {\n src: string;\n types: string;\n dtsDest: string;\n import: {\n default: string;\n };\n}\n\nfunction extractWorkspaceObjectExport(at: string | WorkspaceObjectExport) {\n if (typeof at === 'string') return at;\n const { types, import: _import } = at;\n return {\n types,\n import: _import,\n };\n}\n\nexport interface WorkspaceExport {\n id: string;\n at: string | WorkspaceObjectExport;\n stubLink?: WorkspaceStubLink;\n}\n\nexport const WORKSPACE_PACKAGE_SYNC_FIELDS = [\n 'repository',\n 'author',\n 'publishConfig',\n 'license',\n] as const;\n\nexport function syncWorkspacePackageFields(\n projectJSON: ProjectPackageJson,\n workspaceJSON: WorkspacePackageJson,\n) {\n for (const field of WORKSPACE_PACKAGE_SYNC_FIELDS) {\n const value = projectJSON[field];\n if (value && !workspaceJSON[field]) {\n workspaceJSON[field] = value;\n }\n }\n}\n\nconst BUILD_TARGET_SRC_MATCH_RE = /\\.(tsx?|s?css)$/;\n\nexport class PlugboyWorkspace {\n readonly name: string;\n readonly dir: Path;\n readonly config: ResolvedWorkspaceConfig;\n readonly project: PlugboyProject | null;\n readonly dirs: WorkspaceDirs;\n readonly dependencies: string[];\n readonly projectDependencies: string[];\n readonly meta: WorkspaceMeta;\n readonly entry: Record<string, string>;\n readonly exports: WorkspaceExport[];\n readonly builder: Builder;\n readonly plugins: Plugin[];\n readonly hooks: BuildedHooks;\n readonly dtsFiles: string[] = [];\n readonly dts: NormalizedDTSSettings;\n private _json: WorkspacePackageJson;\n\n get json() {\n return this._json;\n }\n\n constructor(ctx: WorkspaceSetupContext) {\n const {\n dir,\n json,\n config,\n project,\n dirs,\n dependencies,\n projectDependencies,\n meta,\n plugins,\n hooks,\n dts,\n } = ctx;\n\n this.name = dir.basename;\n this.dir = dir;\n this._json = json;\n this.project = project;\n this.dirs = dirs;\n this.dependencies = dependencies;\n this.projectDependencies = projectDependencies;\n this.meta = meta;\n this.config = config;\n this.plugins = plugins;\n this.hooks = hooks;\n this.dts = dts;\n\n const entry: Record<string, string> = {};\n const exports: WorkspaceExport[] = [\n {\n id: `./${PACKAGE_JSON_FILENAME}`,\n at: `./${PACKAGE_JSON_FILENAME}`,\n },\n ];\n\n Object.entries(config.entries).forEach(([id, { src, css }]) => {\n if (!BUILD_TARGET_SRC_MATCH_RE.test(src)) return;\n\n const isMainEntry = id === '.';\n const normalizedId = isMainEntry ? this.name : id;\n const exportId = id.startsWith('.') ? id : `./${id}`;\n const srcIsCSS = src.endsWith('.css') || src.endsWith('.scss');\n const ext = srcIsCSS ? 'css' : 'mjs';\n const dest = `./dist/${normalizedId}.${ext}`;\n const destFullPath = dir.join(dest).value;\n\n entry[normalizedId] = src;\n\n if (css) {\n const cssDest = `./dist/${normalizedId}.css`;\n exports.push({\n id: `./${normalizedId}.css`,\n at: cssDest,\n stubLink: {\n type: 'css',\n from: cssDest,\n },\n });\n\n if (srcIsCSS) return;\n }\n\n const types = `./dist/${normalizedId}.d.ts`;\n const dtsDest = `./dist/${src\n .replace(/^\\.\\/src/, '.dts')\n .replace(/\\.ts$/, '.d.ts')}`;\n\n this.dtsFiles.push(dir.join(types).value);\n exports.push({\n id: exportId,\n at: {\n src,\n types,\n dtsDest,\n import: {\n default: dest,\n },\n },\n stubLink: {\n from: destFullPath,\n to: dir.join(src).value,\n type: 'js',\n },\n });\n });\n\n this.entry = entry;\n this.exports = exports;\n this.builder = new Builder(this);\n }\n\n clean(withDepsAndCache?: boolean) {\n const { dir, dirs } = this;\n const paths: string[] = [dirs.dist.value];\n if (withDepsAndCache) {\n paths.push(dir.join('node_modules').value, dir.join('.turbo').value);\n }\n return rmrf(...paths);\n }\n\n async preparePackageJSON() {\n const { exports, json, project } = this;\n const _exports: Record<string, any> = {};\n const typesVersions: Record<string, any> = {};\n let main: string | undefined;\n let mainTypes: string | undefined;\n\n exports.forEach(({ id, at }) => {\n const _at = extractWorkspaceObjectExport(at);\n _exports[id] = _at;\n if (typeof _at !== 'object') return;\n const isMainExport = id === '.';\n const trimedId = isMainExport ? id : id.replace(/^\\.\\//, '');\n typesVersions[trimedId] = [_at.types];\n\n if (isMainExport) {\n main = _at.import.default;\n mainTypes = _at.types;\n }\n });\n\n _exports['./*'] = './dist/*';\n\n const cloned: typeof json = JSON.parse(JSON.stringify(json));\n cloned.exports = _exports;\n cloned.typesVersions = {\n '*': typesVersions,\n };\n if (main) cloned.main = main;\n if (mainTypes) cloned.types = mainTypes;\n\n const projectPeerDependencies = project?.config.peerDependencies;\n (['dependencies', 'devDependencies', 'peerDependencies'] as const).forEach(\n (prop) => {\n const deps = cloned[prop];\n if (!deps) return;\n Object.keys(deps).forEach((dep) => {\n const version = deps[dep];\n if (version.startsWith('workspace:')) {\n deps[dep] = 'workspace:*';\n } else if (projectPeerDependencies && projectPeerDependencies[dep]) {\n deps[dep] = projectPeerDependencies[dep];\n }\n });\n },\n );\n\n cloned.files = cloned.files || [];\n if (!cloned.files.some((file) => /(\\.\\/)?dist\\/?/.test(file))) {\n cloned.files.unshift('dist');\n }\n\n if (project) {\n syncWorkspacePackageFields(project.json, cloned);\n }\n\n cloned.type = cloned.type || 'module';\n\n await this.hooks.preparePackageJSON(json, this);\n\n const sorted = sortPackageJson(cloned);\n const fromStr = JSON.stringify(cloned, null, 2);\n const toStr = JSON.stringify(sorted, null, 2);\n if (fromStr !== toStr || process) {\n await fs.writeFile(this.dir.join(PACKAGE_JSON_FILENAME).value, toStr);\n this._json = sorted;\n }\n return sorted;\n }\n\n getStubLinks(): WorkspaceStubLink[] {\n const links: WorkspaceStubLink[] = [];\n this.exports.forEach(({ stubLink }) => {\n stubLink && links.push(stubLink);\n });\n return links;\n }\n\n async stub() {\n await this.clean();\n await fs.mkdir(this.dirs.dist.value);\n return this.builder.stub();\n }\n\n async getESBuildPlugins(): Promise<ESBuildPlugin[]> {\n const results: ESBuildPlugin[] = [];\n results.push({\n name: 'plugboy-workspace-env',\n setup: (build) => {\n const isJS = /\\.m?js$/;\n const RELATIVE_PATH_FOR_WORKSPACE =\n '@@__PLUGBOY_RELATIVE_PATH_FOR_WORKSPACE__';\n const encoder = new TextEncoder();\n\n build.onEnd(({ outputFiles, errors, warnings }) => {\n const result = { errors, warnings };\n if (!outputFiles || !outputFiles.length || errors.length)\n return result;\n\n for (const file of outputFiles) {\n const { path: filePath, text } = file;\n if (\n !isJS.test(filePath) ||\n !text.includes(RELATIVE_PATH_FOR_WORKSPACE)\n ) {\n continue;\n }\n const relativePath = path.relative(\n path.dirname(filePath),\n this.dir.value,\n );\n const content = text.replace(\n RELATIVE_PATH_FOR_WORKSPACE,\n relativePath,\n );\n file.contents = encoder.encode(content);\n }\n\n return result;\n });\n },\n });\n const { plugins } = this;\n for (const plugin of plugins) {\n const { esbuildPlugins } = plugin;\n if (!esbuildPlugins) continue;\n for (const chunk of esbuildPlugins) {\n const esbuildPlugin =\n typeof chunk === 'function' ? await chunk(this) : await chunk;\n if (esbuildPlugin) {\n results.push(esbuildPlugin);\n }\n }\n }\n return results;\n }\n\n async build() {\n await this.clean();\n return this.builder.build();\n }\n}\n\nexport async function getWorkspace<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n): Promise<\n AllowMissing extends true ? PlugboyWorkspace | null : PlugboyWorkspace\n> {\n const hit = await getWorkspacePackageJson(searchDir, allowMissing);\n if (!hit) {\n return null as any;\n }\n const { dir, json } = hit;\n const config = await loadWorkspaceConfig(dir.value, 0);\n\n const project = await getProject(dir.value, true, config.ignoreProjectConfig);\n\n const dirs: WorkspaceDirs = {\n src: dir.join('src'),\n dist: dir.join('dist'),\n };\n\n const { dependencies, peerDependencies, optionalDependencies } = json;\n const allDeps = {\n ...dependencies,\n ...peerDependencies,\n ...optionalDependencies,\n };\n\n const _dependencies = Object.keys(allDeps);\n\n const projectDependencies = Object.entries(allDeps)\n .filter(([dep, spec]) => spec.startsWith(WORKSPACE_SPEC_PREFIX))\n .map(([dep]) => dep);\n\n const meta: WorkspaceMeta = {};\n\n const packagePlugins = project?.plugins || [];\n const packageHooks = project?.hooks || [];\n const plugins: Plugin[] = [...packagePlugins, ...config.plugins];\n const _hooks: UserHooks[] = [...packageHooks];\n if (config.hooks) {\n _hooks.push(config.hooks);\n }\n const resolvedHooks = await resolveUserHooks(..._hooks);\n const hooks = buildHooks(resolvedHooks);\n\n const dts = mergeDTSSettingsList(project?.config.dts, config.dts);\n\n const ctx: WorkspaceSetupContext = {\n dir,\n json,\n config,\n project,\n dirs,\n dependencies: _dependencies,\n projectDependencies,\n meta,\n plugins,\n hooks,\n dts,\n };\n\n await hooks.setupWorkspace(ctx);\n\n const workspace = new PlugboyWorkspace(ctx);\n\n await hooks.createWorkspace(workspace);\n\n return workspace;\n}\n","import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { getProject } from '../project';\nimport { getWorkspace, syncWorkspacePackageFields } from '../workspace';\nimport { WorkspacePackageJson, ProjectScriptsTemplate } from '../types';\nimport sortPackageJson from 'sort-package-json';\nimport { WORKSPACE_CONFIG_BASENAME } from '../constants';\n\nimport inquirer from 'inquirer';\n\nexport async function generateWorkspace(\n workspaceName?: string,\n cwd = process.cwd(),\n) {\n const project = await getProject(cwd);\n const { config } = project;\n\n // ====================\n // workspace name\n // ====================\n while (!workspaceName) {\n const { value } = await inquirer.prompt({\n type: 'input',\n name: 'value',\n message: 'Enter a workspace name',\n });\n\n if (value) {\n workspaceName = value;\n }\n }\n\n // ====================\n // description\n // ====================\n const { description } = await inquirer.prompt({\n type: 'input',\n name: 'description',\n default: workspaceName,\n message: 'Please enter a description of your package',\n });\n\n // ====================\n // version\n // ====================\n let version: string | undefined;\n while (!version) {\n const { value } = await inquirer.prompt({\n type: 'input',\n name: 'value',\n default: '0.0.0',\n message: 'Please enter the initial version',\n });\n\n if (value) {\n version = value;\n }\n }\n\n // ====================\n // keywords\n // ====================\n const { rawKeywords } = await inquirer.prompt({\n type: 'input',\n name: 'rawKeywords',\n message: 'Enter as many keywords, if any, as needed, separated by commas',\n });\n\n const keywords = (rawKeywords as string)\n .split(',')\n .map((word) => word.trim())\n .filter((word) => word.length);\n\n // ====================\n // scripts\n // ====================\n const scriptsTemplates = config.scripts;\n let scriptsTemplate: ProjectScriptsTemplate | undefined;\n if (scriptsTemplates && scriptsTemplates.length) {\n const { value } = await inquirer.prompt({\n type: 'rawlist',\n message: 'Select a scripts template',\n name: 'value',\n choices: [\n { name: 'None', value: '' },\n ...scriptsTemplates.map((tpl) => ({\n name: tpl.name,\n value: tpl.name,\n })),\n ],\n });\n scriptsTemplate = scriptsTemplates.find((tpl) => tpl.name === value);\n }\n const scripts = scriptsTemplate?.scripts || {};\n\n // ====================\n // peerDependencies\n // ====================\n const peerDependencies = await (async () => {\n const { deps } = await inquirer.prompt<{ deps: string[] }>({\n type: 'checkbox',\n message:\n 'Select the dependent packages, if any, to be used in the package',\n name: 'deps',\n choices: Object.keys(config.peerDependencies).map((dep) => {\n return {\n name: dep,\n value: dep,\n };\n }),\n });\n if (!deps.length) return;\n return Object.fromEntries(\n deps.map((dep) => [dep, config.peerDependencies[dep]]),\n );\n })();\n\n // ====================\n // dependencies\n // ====================\n const dependencies = await (async () => {\n const { deps } = await inquirer.prompt<{ deps: string[] }>({\n type: 'checkbox',\n message: 'Select the internal package to be used, if any.',\n name: 'deps',\n choices: project.resolvedWorkspaces.map((workspace) => {\n const name = path.basename(workspace);\n return {\n name,\n value: name,\n };\n }),\n });\n if (!deps.length) return;\n return Object.fromEntries(\n deps.map((dep) => [`@${project.name}/${dep}`, 'workspace:*']),\n );\n })();\n\n // ====================\n // Generate source files?\n // ====================\n const { withGenSource } = await inquirer.prompt<{ withGenSource: boolean }>({\n type: 'confirm',\n name: 'withGenSource',\n message: 'Generate source files?',\n default: true,\n });\n\n // ====================\n // final confirmation\n // ====================\n const _json: WorkspacePackageJson = {\n name: `@${project.name}/${workspaceName}`,\n type: 'module',\n description,\n version,\n keywords,\n scripts,\n peerDependencies,\n dependencies,\n };\n\n syncWorkspacePackageFields(project.json, _json);\n\n const json = sortPackageJson(_json);\n\n const workspaceDir = path.join(config.workspacesDir, workspaceName);\n\n console.log('');\n console.log('========================================');\n console.log(`Directory: ${workspaceDir}`);\n console.log(`Generate source: ${withGenSource ? 'Yes' : 'No'}`);\n console.log(json);\n console.log('========================================');\n\n const { confirmation } = await inquirer.prompt<{ confirmation: boolean }>({\n type: 'confirm',\n name: 'confirmation',\n message: 'Is this OK?',\n default: true,\n });\n\n if (!confirmation) {\n console.log('Skiped.');\n process.exit(1);\n }\n\n // 1. Create directory\n await fs.mkdir(workspaceDir);\n\n // 2. Write package.json\n await fs.writeFile(\n path.join(workspaceDir, 'package.json'),\n JSON.stringify(json, null, 2),\n );\n\n // 3. Write README.md\n await fs.writeFile(path.join(workspaceDir, 'README.md'), config.readme(json));\n\n // 3. Generate source\n if (withGenSource) {\n const srcDir = path.join(workspaceDir, 'src');\n await fs.mkdir(srcDir);\n\n const indexCode = `export * from './${workspaceName}';\\n`;\n const modCode = `export const PACKAGE_NAME = './${workspaceName}';\\n`;\n\n await fs.writeFile(path.join(srcDir, 'index.ts'), indexCode);\n await fs.writeFile(path.join(srcDir, `${workspaceName}.ts`), modCode);\n\n const { tsconfig } = config;\n if (tsconfig) {\n await fs.writeFile(\n path.join(workspaceDir, 'tsconfig.json'),\n JSON.stringify(tsconfig, null, 2),\n );\n }\n\n const configFileCode =\n `\nimport { defineWorkspaceConfig } from '@fastkit/plugboy';\n\nexport default defineWorkspaceConfig({\n entries: {\n '.': './src/index.ts',\n },\n});\n `.trim() + '\\n';\n await fs.writeFile(\n path.join(workspaceDir, `${WORKSPACE_CONFIG_BASENAME}.ts`),\n configFileCode,\n );\n\n const workspace = await getWorkspace(workspaceDir);\n await workspace.preparePackageJSON();\n }\n}\n"],"mappings":"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","names":["fileName","result","path","path","bundleRequire","bundleRequire","path","fs","path","fs","fs","path","fs","path","path","glob","path","fs","pkg","build","fs","path","glob","glob","hit","json","fs","path","fs","path","fs","build","path","path","fs","sortPackageJson","path","sortPackageJson","fs"]}
|
package/dist/cli.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
generateWorkspace,
|
|
3
3
|
getWorkspace
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-PKFVUHH2.mjs";
|
|
5
5
|
|
|
6
6
|
// src/cli.ts
|
|
7
7
|
import { cac } from "cac";
|
|
@@ -9,15 +9,16 @@ import { cac } from "cac";
|
|
|
9
9
|
// package.json
|
|
10
10
|
var package_default = {
|
|
11
11
|
name: "@fastkit/plugboy",
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
version: "0.0.1",
|
|
13
|
+
description: "",
|
|
14
|
+
keywords: [],
|
|
15
|
+
repository: {
|
|
16
|
+
type: "git",
|
|
17
|
+
url: "git+https://github.com/dadajam4/fastkit.git"
|
|
15
18
|
},
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"dist"
|
|
20
|
-
],
|
|
19
|
+
license: "MIT",
|
|
20
|
+
author: "dadajam4",
|
|
21
|
+
type: "module",
|
|
21
22
|
exports: {
|
|
22
23
|
"./package.json": "./package.json",
|
|
23
24
|
"./dependencies/bundle-require": {
|
|
@@ -51,7 +52,8 @@ var package_default = {
|
|
|
51
52
|
import: "./dist/plugboy.mjs"
|
|
52
53
|
}
|
|
53
54
|
},
|
|
54
|
-
|
|
55
|
+
main: "./dist/plugboy.mjs",
|
|
56
|
+
types: "./dist/plugboy.d.ts",
|
|
55
57
|
typesVersions: {
|
|
56
58
|
"*": {
|
|
57
59
|
".": [
|
|
@@ -65,8 +67,14 @@ var package_default = {
|
|
|
65
67
|
]
|
|
66
68
|
}
|
|
67
69
|
},
|
|
68
|
-
|
|
69
|
-
|
|
70
|
+
bin: {
|
|
71
|
+
plugboy: "./cli.mjs"
|
|
72
|
+
},
|
|
73
|
+
files: [
|
|
74
|
+
"env.d.ts",
|
|
75
|
+
"cli.mjs",
|
|
76
|
+
"dist"
|
|
77
|
+
],
|
|
70
78
|
scripts: {
|
|
71
79
|
build: "tsup",
|
|
72
80
|
clean: "rm -rf .turbo && rm -rf node_modules && rm -rf dist",
|
|
@@ -77,13 +85,6 @@ var package_default = {
|
|
|
77
85
|
typecheck: "tsc --noEmit --skipLibCheck",
|
|
78
86
|
test: "vitest run"
|
|
79
87
|
},
|
|
80
|
-
keywords: [],
|
|
81
|
-
author: "dadajam4",
|
|
82
|
-
license: "MIT",
|
|
83
|
-
repository: {
|
|
84
|
-
type: "git",
|
|
85
|
-
url: "git+https://github.com/dadajam4/fastkit.git"
|
|
86
|
-
},
|
|
87
88
|
dependencies: {
|
|
88
89
|
"bundle-require": "^4.0.1",
|
|
89
90
|
cac: "^6.7.14",
|
package/dist/cli.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../package.json"],"sourcesContent":["import { cac } from 'cac';\nimport { getWorkspace, generateWorkspace } from './workspace';\nimport pkg from '../package.json';\n\nexport async function main() {\n const cli = cac('plugboy');\n cli.version(pkg.version);\n\n cli\n .command('json', 'Apply workspace settings in package.json.')\n .action(async (files, options) => {\n const workspace = await getWorkspace();\n await workspace.preparePackageJSON();\n });\n\n cli\n .command('stub', 'Link workspace distributions and source directories.')\n .action(async (files, options) => {\n const workspace = await getWorkspace();\n await workspace.preparePackageJSON();\n await workspace.stub();\n });\n\n cli\n .command(\n 'build',\n 'Guess all entries in the workspace and bundle the source code.',\n )\n .action(async (files, options) => {\n const workspace = await getWorkspace();\n await workspace.preparePackageJSON();\n await workspace.build();\n });\n\n cli\n .command('clean', 'Deletes the distribution directory of the workspace.')\n .action(async (files, options) => {\n const workspace = await getWorkspace();\n await workspace.preparePackageJSON();\n await workspace.clean();\n });\n\n cli\n .command(\n 'generate [workspaceName]',\n 'Generate a workspace for your project.',\n )\n .alias('gen')\n .action(async (workspaceName: string | undefined, options) => {\n await generateWorkspace(workspaceName);\n });\n\n cli.help();\n cli.parse();\n}\n\nmain();\n","{\n \"name\": \"@fastkit/plugboy\",\n \"
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../package.json"],"sourcesContent":["import { cac } from 'cac';\nimport { getWorkspace, generateWorkspace } from './workspace';\nimport pkg from '../package.json';\n\nexport async function main() {\n const cli = cac('plugboy');\n cli.version(pkg.version);\n\n cli\n .command('json', 'Apply workspace settings in package.json.')\n .action(async (files, options) => {\n const workspace = await getWorkspace();\n await workspace.preparePackageJSON();\n });\n\n cli\n .command('stub', 'Link workspace distributions and source directories.')\n .action(async (files, options) => {\n const workspace = await getWorkspace();\n await workspace.preparePackageJSON();\n await workspace.stub();\n });\n\n cli\n .command(\n 'build',\n 'Guess all entries in the workspace and bundle the source code.',\n )\n .action(async (files, options) => {\n const workspace = await getWorkspace();\n await workspace.preparePackageJSON();\n await workspace.build();\n });\n\n cli\n .command('clean', 'Deletes the distribution directory of the workspace.')\n .action(async (files, options) => {\n const workspace = await getWorkspace();\n await workspace.preparePackageJSON();\n await workspace.clean();\n });\n\n cli\n .command(\n 'generate [workspaceName]',\n 'Generate a workspace for your project.',\n )\n .alias('gen')\n .action(async (workspaceName: string | undefined, options) => {\n await generateWorkspace(workspaceName);\n });\n\n cli.help();\n cli.parse();\n}\n\nmain();\n","{\n \"name\": \"@fastkit/plugboy\",\n \"version\": \"0.0.1\",\n \"description\": \"\",\n \"keywords\": [],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/dadajam4/fastkit.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"dadajam4\",\n \"type\": \"module\",\n \"exports\": {\n \"./package.json\": \"./package.json\",\n \"./dependencies/bundle-require\": {\n \"import\": \"./dist/dependencies/bundle-require.mjs\"\n },\n \"./dependencies/cac\": {\n \"import\": \"./dist/dependencies/cac\"\n },\n \"./dependencies/esbuild\": {\n \"import\": \"./dist/dependencies/esbuild\"\n },\n \"./dependencies/glob\": {\n \"import\": \"./dist/dependencies/glob\"\n },\n \"./dependencies/inquirer\": {\n \"import\": \"./dist/dependencies/inquirer\"\n },\n \"./dependencies/pkg-types\": {\n \"import\": \"./dist/dependencies/pkg-types\"\n },\n \"./dependencies/sort-package-json\": {\n \"import\": \"./dist/dependencies/sort-package-json\"\n },\n \"./dependencies/tsup\": {\n \"import\": \"./dist/dependencies/tsup\"\n },\n \"./cli\": {\n \"import\": \"./dist/cli.mjs\"\n },\n \".\": {\n \"import\": \"./dist/plugboy.mjs\"\n }\n },\n \"main\": \"./dist/plugboy.mjs\",\n \"types\": \"./dist/plugboy.d.ts\",\n \"typesVersions\": {\n \"*\": {\n \".\": [\n \"./dist/plugboy.d.ts\"\n ],\n \"cli\": [\n \"./dist/cli.d.ts\"\n ],\n \"dependencies/*\": [\n \"./dist/dependencies/*.d.ts\"\n ]\n }\n },\n \"bin\": {\n \"plugboy\": \"./cli.mjs\"\n },\n \"files\": [\n \"env.d.ts\",\n \"cli.mjs\",\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"clean\": \"rm -rf .turbo && rm -rf node_modules && rm -rf dist\",\n \"eslint\": \"eslint . --ext ts,tsx,js,vue,html,yaml\",\n \"eslint:fix\": \"eslint . --ext ts,tsx,js,vue,html,yaml --fix\",\n \"lint\": \"pnpm run eslint\",\n \"format\": \"pnpm run eslint:fix\",\n \"typecheck\": \"tsc --noEmit --skipLibCheck\",\n \"test\": \"vitest run\"\n },\n \"dependencies\": {\n \"bundle-require\": \"^4.0.1\",\n \"cac\": \"^6.7.14\",\n \"esbuild\": \"^0.17.15\",\n \"execa\": \"^7.1.1\",\n \"glob\": \"^9.3.4\",\n \"inquirer\": \"^9.1.5\",\n \"pkg-types\": \"^1.0.2\",\n \"sort-package-json\": \"^2.4.1\",\n \"tsup\": \"^6.7.0\"\n },\n \"devDependencies\": {\n \"@types/inquirer\": \"^9.0.3\"\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/plugboy.d.ts
CHANGED
|
@@ -39,6 +39,17 @@ declare function findConfig<AllowMissing extends boolean | undefined = false>(fi
|
|
|
39
39
|
declare function rmrf(...paths: string[]): Promise<void>;
|
|
40
40
|
declare function copyDirSync(srcDir: string, destDir: string): void;
|
|
41
41
|
|
|
42
|
+
interface ExposeEntriesSettings {
|
|
43
|
+
dir: string;
|
|
44
|
+
/**
|
|
45
|
+
* Path prefix at distribution
|
|
46
|
+
*/
|
|
47
|
+
prefix?: string;
|
|
48
|
+
}
|
|
49
|
+
type RawExposeEntriesSettings = string | ExposeEntriesSettings;
|
|
50
|
+
declare function resolveRawExposeEntriesSettings(rawSettings: RawExposeEntriesSettings): ExposeEntriesSettings;
|
|
51
|
+
declare function exposeEntries(rawSettings: RawExposeEntriesSettings): Promise<Record<string, RawWorkspaceEntryObject>>;
|
|
52
|
+
|
|
42
53
|
declare function isWorkspacePackageJson(json: PackageJson): json is WorkspacePackageJson;
|
|
43
54
|
declare function resolveRawWorkspaceEntry(entry: RawWorkspaceEntry): WorkspaceEntry;
|
|
44
55
|
declare function resolveRawWorkspaceEntries(entries: RawWorkspaceEntries | undefined): WorkspaceEntries;
|
|
@@ -83,6 +94,8 @@ declare class Path {
|
|
|
83
94
|
readJSON<T = any, D = undefined>(pathAppend?: string, defaults?: D): Promise<D extends undefined ? T : T | D>;
|
|
84
95
|
}
|
|
85
96
|
|
|
97
|
+
type ObjectLike = Record<string, any>;
|
|
98
|
+
type MarkRequired<T extends ObjectLike, RequiredField extends keyof T> = Required<Pick<T, RequiredField>> & Omit<T, RequiredField>;
|
|
86
99
|
type RequiredPackageJSON<Field extends string> = PackageJson & Required<Pick<PackageJson, Field>>;
|
|
87
100
|
|
|
88
101
|
/**
|
|
@@ -294,13 +307,11 @@ type WorkspaceRequiredField = (typeof WORKSPACE_REQUIRED_FIELDS)[number];
|
|
|
294
307
|
interface RawWorkspaceEntryObject {
|
|
295
308
|
/**
|
|
296
309
|
* Entry file path
|
|
297
|
-
*
|
|
298
310
|
* @remarks It must be relative to the root directory of the workspace.
|
|
299
311
|
*/
|
|
300
312
|
src: string;
|
|
301
313
|
/**
|
|
302
314
|
* Set to true if the entry outputs css at the same time
|
|
303
|
-
*
|
|
304
315
|
* @remarks By doing this, the exports field in package.json will be set automatically.
|
|
305
316
|
*/
|
|
306
317
|
css?: boolean;
|
|
@@ -308,7 +319,7 @@ interface RawWorkspaceEntryObject {
|
|
|
308
319
|
/**
|
|
309
320
|
* Entry setting object
|
|
310
321
|
*/
|
|
311
|
-
type WorkspaceEntry =
|
|
322
|
+
type WorkspaceEntry = MarkRequired<RawWorkspaceEntryObject, 'src' | 'css'>;
|
|
312
323
|
type RawWorkspaceEntry = string | RawWorkspaceEntryObject;
|
|
313
324
|
/**
|
|
314
325
|
* Configuration of all entries in the workspace (normalized)
|
|
@@ -616,4 +627,4 @@ interface GetWorkspacePackageJsonResult {
|
|
|
616
627
|
declare function getWorkspacePackageJson<AllowMissing extends boolean | undefined = false>(searchDir?: string, allowMissing?: AllowMissing): Promise<AllowMissing extends true ? GetWorkspacePackageJsonResult | null : GetWorkspacePackageJsonResult>;
|
|
617
628
|
declare function findWorkspacePackages(dir: string): Promise<GetWorkspacePackageJsonResult[]>;
|
|
618
629
|
|
|
619
|
-
export { BuildedHooks, Builder, DTSPreserveTypeSettings, DTSPreserveTypeTarget, DTSSettings, ESBuildPlugin, ESBuildPluginOption, FindConfigResult, GetProjectPackageJsonResult, GetWorkspacePackageJsonResult, HookArgs, HookName, HookReturnType, HookTypes, Listable, NormalizedDTSPreserveTypeSettings, NormalizedDTSPreserveTypeTarget, NormalizedDTSSettings, PROJECT_REQUIRED_FIELDS, Path, PlugboyProject, PlugboyWorkspace, Plugin, ProjectPackageJson, ProjectScriptsTemplate, ProjectSetupContext, RawWorkspaceEntries, RawWorkspaceEntry, RawWorkspaceEntryObject, ResolvedHooks, ResolvedProjectConfig, ResolvedWorkspaceConfig, TSConfigJSON, TSUP_SYNC_OPTIONS, UnPromisify, UserHooks, UserPluginOption, UserProjectConfig, UserWorkspaceConfig, WORKSPACE_PACKAGE_SYNC_FIELDS, WORKSPACE_REQUIRED_FIELDS, WorkspaceDirs, WorkspaceEntries, WorkspaceEntry, WorkspaceExport, WorkspaceMeta, WorkspaceObjectExport, WorkspacePackageJson, WorkspaceSetupContext, WorkspaceStubLink, WorkspaceStubLinkType, buildHooks, copyDirSync, createHooksDefaults, definePlugin, defineProjectConfig, defineWorkspaceConfig, extractProjectPlugins, findConfig, findFile, findProjectPlugin, findWorkspacePackages, generateWorkspace, getDirname, getFilename, getProject, getProjectPackageJson, getWorkspace, getWorkspacePackageJson, isFileNotFoundException, isProjectPackageJson, isPromise, isWorkspacePackageJson, loadProjectConfig, loadWorkspaceConfig, mergeDTSSettingsList, normalizeDTSPreserveTypeSettings, normalizeDTSPreserveTypeTarget, normalizeDTSSettings, pathExists, resolveListable, resolveRawWorkspaceEntries, resolveRawWorkspaceEntry, resolveUserHooks, resolveUserPluginOptions, resolveUserProjectConfig, resolveUserWorkspaceConfig, rmrf, syncWorkspacePackageFields };
|
|
630
|
+
export { BuildedHooks, Builder, DTSPreserveTypeSettings, DTSPreserveTypeTarget, DTSSettings, ESBuildPlugin, ESBuildPluginOption, ExposeEntriesSettings, FindConfigResult, GetProjectPackageJsonResult, GetWorkspacePackageJsonResult, HookArgs, HookName, HookReturnType, HookTypes, Listable, NormalizedDTSPreserveTypeSettings, NormalizedDTSPreserveTypeTarget, NormalizedDTSSettings, PROJECT_REQUIRED_FIELDS, Path, PlugboyProject, PlugboyWorkspace, Plugin, ProjectPackageJson, ProjectScriptsTemplate, ProjectSetupContext, RawExposeEntriesSettings, RawWorkspaceEntries, RawWorkspaceEntry, RawWorkspaceEntryObject, ResolvedHooks, ResolvedProjectConfig, ResolvedWorkspaceConfig, TSConfigJSON, TSUP_SYNC_OPTIONS, UnPromisify, UserHooks, UserPluginOption, UserProjectConfig, UserWorkspaceConfig, WORKSPACE_PACKAGE_SYNC_FIELDS, WORKSPACE_REQUIRED_FIELDS, WorkspaceDirs, WorkspaceEntries, WorkspaceEntry, WorkspaceExport, WorkspaceMeta, WorkspaceObjectExport, WorkspacePackageJson, WorkspaceSetupContext, WorkspaceStubLink, WorkspaceStubLinkType, buildHooks, copyDirSync, createHooksDefaults, definePlugin, defineProjectConfig, defineWorkspaceConfig, exposeEntries, extractProjectPlugins, findConfig, findFile, findProjectPlugin, findWorkspacePackages, generateWorkspace, getDirname, getFilename, getProject, getProjectPackageJson, getWorkspace, getWorkspacePackageJson, isFileNotFoundException, isProjectPackageJson, isPromise, isWorkspacePackageJson, loadProjectConfig, loadWorkspaceConfig, mergeDTSSettingsList, normalizeDTSPreserveTypeSettings, normalizeDTSPreserveTypeTarget, normalizeDTSSettings, pathExists, resolveListable, resolveRawExposeEntriesSettings, resolveRawWorkspaceEntries, resolveRawWorkspaceEntry, resolveUserHooks, resolveUserPluginOptions, resolveUserProjectConfig, resolveUserWorkspaceConfig, rmrf, syncWorkspacePackageFields };
|
package/dist/plugboy.mjs
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
definePlugin,
|
|
14
14
|
defineProjectConfig,
|
|
15
15
|
defineWorkspaceConfig,
|
|
16
|
+
exposeEntries,
|
|
16
17
|
extractProjectPlugins,
|
|
17
18
|
findConfig,
|
|
18
19
|
findFile,
|
|
@@ -37,6 +38,7 @@ import {
|
|
|
37
38
|
normalizeDTSSettings,
|
|
38
39
|
pathExists,
|
|
39
40
|
resolveListable,
|
|
41
|
+
resolveRawExposeEntriesSettings,
|
|
40
42
|
resolveRawWorkspaceEntries,
|
|
41
43
|
resolveRawWorkspaceEntry,
|
|
42
44
|
resolveUserHooks,
|
|
@@ -45,7 +47,7 @@ import {
|
|
|
45
47
|
resolveUserWorkspaceConfig,
|
|
46
48
|
rmrf,
|
|
47
49
|
syncWorkspacePackageFields
|
|
48
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-PKFVUHH2.mjs";
|
|
49
51
|
export {
|
|
50
52
|
Builder,
|
|
51
53
|
PROJECT_REQUIRED_FIELDS,
|
|
@@ -61,6 +63,7 @@ export {
|
|
|
61
63
|
definePlugin,
|
|
62
64
|
defineProjectConfig,
|
|
63
65
|
defineWorkspaceConfig,
|
|
66
|
+
exposeEntries,
|
|
64
67
|
extractProjectPlugins,
|
|
65
68
|
findConfig,
|
|
66
69
|
findFile,
|
|
@@ -85,6 +88,7 @@ export {
|
|
|
85
88
|
normalizeDTSSettings,
|
|
86
89
|
pathExists,
|
|
87
90
|
resolveListable,
|
|
91
|
+
resolveRawExposeEntriesSettings,
|
|
88
92
|
resolveRawWorkspaceEntries,
|
|
89
93
|
resolveRawWorkspaceEntry,
|
|
90
94
|
resolveUserHooks,
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/hook.ts","../src/types/dts.ts","../src/types/workspace.ts","../src/types/project.ts","../src/utils/general.ts","../src/utils/file.ts","../src/utils/project.ts","../src/constants.ts","../src/utils/plugin.ts","../src/utils/workspace.ts","../src/utils/hook.ts","../src/path.ts","../src/package.ts","../src/workspace/builder.ts","../src/workspace/dts.ts","../src/project/project.ts","../src/workspace/workspace.ts","../src/workspace/generate.ts"],"sourcesContent":["import type { Listable } from '../utils';\nimport { WorkspaceSetupContext, WorkspacePackageJson } from './workspace';\nimport type { PlugboyWorkspace } from '../workspace';\n\n/** plugboy hook definition */\nexport interface HookTypes {\n /**\n * Hooks during workspace setup\n * @remarks Called just before the workspace instance is created\n * @param ctx - {@link WorkspaceSetupContext Workspace setup context object}\n */\n setupWorkspace: (ctx: WorkspaceSetupContext) => any;\n /**\n * Hooks after workspace generation\n * @param workspace - {@link PlugboyWorkspace workspace instance}\n */\n createWorkspace: (workspace: PlugboyWorkspace) => any;\n /**\n * Hooks when correcting package.json\n * @param json - package.json just before it was modified and saved by the plugboy\n * @param workspace - {@link PlugboyWorkspace workspace instance}\n */\n preparePackageJSON: (\n json: WorkspacePackageJson,\n workspace: PlugboyWorkspace,\n ) => any;\n}\n\nexport function createHooksDefaults(): ResolvedHooks {\n return {\n setupWorkspace: [],\n createWorkspace: [],\n preparePackageJSON: [],\n };\n}\n\nexport type HookName = keyof HookTypes;\n\n/**\n * plugboy user hook definition\n * @see {@link HookTypes}\n */\nexport type UserHooks = {\n [Name in HookName]?: Listable<HookTypes[Name]>;\n};\n\n/**\n * Pre-setup hook definitions\n * @see {@link HookTypes}\n */\nexport type ResolvedHooks = {\n [Name in HookName]: HookTypes[Name][];\n};\n\nexport type HookArgs<Name extends HookName> = Parameters<HookTypes[Name]>;\n\nexport type UnPromisify<T> = T extends Promise<infer U> ? U : T;\n\nexport type HookReturnType<Name extends HookName> = UnPromisify<\n ReturnType<HookTypes[Name]>\n>;\n\n/**\n * Map of hook methods that can be initialized and called\n * @see {@link HookTypes}\n */\nexport type BuildedHooks = {\n [Name in HookName]: (\n ...args: HookArgs<Name>\n ) => Promise<HookReturnType<Name>>;\n};\n","/**\n * Type preservation target in d.ts file\n */\nexport interface DTSPreserveTypeTarget {\n /** Type name */\n typeName: string;\n /**\n * String to be restored or regular expression to match\n */\n from: string | RegExp;\n}\n\n/**\n * Type preservation target in d.ts file (normalized)\n *\n * @see {@link DTSPreserveTypeTarget}\n */\nexport interface NormalizedDTSPreserveTypeTarget\n extends Omit<DTSPreserveTypeTarget, 'from'> {\n /** Regular expression to match the string to be restored */\n from: RegExp;\n}\n\nexport function normalizeDTSPreserveTypeTarget(\n target: DTSPreserveTypeTarget,\n): NormalizedDTSPreserveTypeTarget {\n const { from, typeName } = target;\n return {\n from: typeof from === 'string' ? new RegExp(`${from}`, 'g') : from,\n typeName,\n };\n}\n\n/**\n * Type preservation setting for d.ts files\n *\n * @remarks This setting is for restoring type information inlined by the TypeScript compiler to the original type name by string substitution.\n */\nexport interface DTSPreserveTypeSettings {\n /** Name of the package to which the type to be restored belongs */\n pkg?: string;\n /** List of preservation targets */\n targets: DTSPreserveTypeTarget[];\n}\n\n/**\n * Type preservation setting for d.ts files (normalized)\n *\n * @see {@link DTSPreserveTypeSettings}\n */\nexport interface NormalizedDTSPreserveTypeSettings\n extends Omit<DTSPreserveTypeSettings, 'targets'> {\n /** List of normalized type preservation targets */\n targets: NormalizedDTSPreserveTypeTarget[];\n}\n\nexport function normalizeDTSPreserveTypeSettings(\n settings: DTSPreserveTypeSettings,\n): NormalizedDTSPreserveTypeSettings {\n return {\n ...settings,\n targets: settings.targets.map(normalizeDTSPreserveTypeTarget),\n };\n}\n\n/**\n * d.ts output setting\n */\nexport interface DTSSettings {\n /**\n * Inline output without bundling d.ts\n *\n * @default false\n */\n inline?: boolean;\n\n /**\n * list of type preservation settings\n *\n * @remarks This setting is for restoring type information inlined by the TypeScript compiler to the original type name by string substitution.\n *\n * @see {@link DTSPreserveTypeSettings}\n */\n preserveType?: DTSPreserveTypeSettings[];\n}\n\n/**\n * d.ts output setting (normalized)\n *\n * @see {@link DTSSettings}\n */\nexport interface NormalizedDTSSettings {\n /**\n * Inline output without bundling d.ts\n */\n inline: boolean;\n\n /**\n * list of type preservation settings\n */\n preserveType: NormalizedDTSPreserveTypeSettings[];\n}\n\nexport function normalizeDTSSettings(\n settings: DTSSettings,\n): NormalizedDTSSettings {\n const { inline = false, preserveType = [] } = settings || {};\n return {\n inline,\n preserveType: preserveType.map(normalizeDTSPreserveTypeSettings),\n };\n}\n\nexport function mergeDTSSettingsList(\n ...settingsList: (DTSSettings | undefined)[]\n): NormalizedDTSSettings {\n const merged: DTSSettings = {};\n settingsList.forEach((settings) => {\n if (!settings) return;\n const { inline, preserveType } = settings;\n if (inline !== undefined) merged.inline = inline;\n if (preserveType) {\n merged.preserveType = merged.preserveType || [];\n merged.preserveType.push(...preserveType);\n }\n });\n return normalizeDTSSettings(merged);\n}\n","import type { Path } from '../path';\nimport { RequiredPackageJSON } from './_utils';\nimport type { PlugboyProject } from '../project';\nimport type { UserPluginOption, Plugin } from './plugin';\nimport type { UserHooks, BuildedHooks } from './hook';\nimport { Options as TSUpOptions } from 'tsup';\nimport { DTSSettings, NormalizedDTSSettings } from './dts';\n\nexport const WORKSPACE_REQUIRED_FIELDS = ['name', 'version'] as const;\n\ntype WorkspaceRequiredField = (typeof WORKSPACE_REQUIRED_FIELDS)[number];\n\n/**\n * Entry setting object\n */\nexport interface RawWorkspaceEntryObject {\n /**\n * Entry file path\n *\n * @remarks It must be relative to the root directory of the workspace.\n */\n src: string;\n /**\n * Set to true if the entry outputs css at the same time\n *\n * @remarks By doing this, the exports field in package.json will be set automatically.\n */\n css?: boolean;\n}\n\n/**\n * Entry setting object\n */\nexport type WorkspaceEntry = Required<RawWorkspaceEntryObject>;\n\nexport type RawWorkspaceEntry = string | RawWorkspaceEntryObject;\n\n/**\n * Configuration of all entries in the workspace (normalized)\n *\n * @see {@link RawWorkspaceEntries}\n */\nexport type WorkspaceEntries = Record<string, WorkspaceEntry>;\n\n/**\n * Configuration of all entries in the workspace\n *\n * @remarks The configuration must be `{ [id]: [Entry setting: }`. `\".\" ` is treated as a special ID and is the target of the main export.\n */\nexport type RawWorkspaceEntries = Record<string, RawWorkspaceEntry>;\n\nexport const TSUP_SYNC_OPTIONS = [\n 'define',\n 'noExternal',\n 'external',\n 'replaceNodeEnv',\n 'skipNodeModulesBundle',\n] as const;\n\ntype TSUpSyncOption = (typeof TSUP_SYNC_OPTIONS)[number];\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface TSUpSyncOptions extends Pick<TSUpOptions, TSUpSyncOption> {}\n\n/**\n * Workspace User Configuration\n */\nexport interface UserWorkspaceConfig extends TSUpSyncOptions {\n /**\n * Ignore project settings\n *\n * @remarks Normally, when processing a workspace, plugboy looks for and merges the settings of the entire project at the same time, but this action can be canceled.\n */\n ignoreProjectConfig?: boolean;\n /**\n * Configuration of all entries in the workspace\n *\n * @see {@link RawWorkspaceEntries}\n */\n entries?: RawWorkspaceEntries;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link UserPluginOption}\n */\n plugins?: UserPluginOption[];\n /**\n * d.ts output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n}\n\n/**\n * Workspace Configuration\n */\nexport interface ResolvedWorkspaceConfig\n extends Required<\n Omit<\n UserWorkspaceConfig,\n 'entries' | 'hooks' | 'plugins' | 'dts' | TSUpSyncOption\n >\n >,\n TSUpSyncOptions {\n /**\n * Configuration of all entries in the workspace\n *\n * @see {@link WorkspaceEntries}\n */\n entries: WorkspaceEntries;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link UserPluginOption}\n */\n plugins: Plugin[];\n /**\n * d.ts output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n}\n\nexport type WorkspacePackageJson = RequiredPackageJSON<WorkspaceRequiredField>;\n\n/**\n * Workspace Directory Settings\n */\nexport interface WorkspaceDirs {\n /** Path instance of the source directory */\n src: Path;\n /** Path instance of the distribution directory */\n dist: Path;\n}\n\n/**\n * Workspace Meta Information\n *\n * @remarks This will be set to a value uniquely extended by the plugin\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface WorkspaceMeta {}\n\n/**\n * Workspace setup context object\n * @remarks Objects that are configured when the workspace is set up. Customization can be done before the workspace instance is created by a plug-in or other process.\n */\nexport interface WorkspaceSetupContext {\n /** Workspace directory path instance */\n dir: Path;\n /** package.json */\n json: WorkspacePackageJson;\n /**\n * Workspace Configuration\n * @see {@link ResolvedWorkspaceConfig}\n */\n config: ResolvedWorkspaceConfig;\n /** Plugboy Project */\n project: PlugboyProject | null;\n /** Workspace Directory Settings */\n dirs: WorkspaceDirs;\n /**\n * All package names on which the workspace depends\n */\n dependencies: string[];\n /**\n * Names of all in-project packages on which the workspace depends\n */\n projectDependencies: string[];\n /**\n * Workspace Meta Information\n * @see {@link WorkspaceMeta}\n */\n meta: WorkspaceMeta;\n /**\n * プラグインリスト\n * @see {@link Plugin}\n */\n plugins: Plugin[];\n /**\n * Map of hook methods that can be initialized and called\n * @see {@link BuildedHooks}\n */\n hooks: BuildedHooks;\n /**\n * d.ts output setting\n * @see {@link NormalizedDTSSettings}\n */\n dts: NormalizedDTSSettings;\n}\n","import { RequiredPackageJSON } from './_utils';\nimport type { CompilerOptions } from 'typescript';\nimport { WorkspacePackageJson } from './workspace';\nimport { UserPluginOption, Plugin } from './plugin';\nimport type { Path } from '../path';\nimport { UserHooks } from './hook';\nimport { DTSSettings } from './dts';\n\nexport const PROJECT_REQUIRED_FIELDS = ['name'] as const;\n\ntype ProjectRequiredField = (typeof PROJECT_REQUIRED_FIELDS)[number];\n\nexport type TSConfigJSON = {\n compilerOptions?: CompilerOptions;\n} & Record<string, any>;\n\n/**\n * Template for package.json script in workspace\n */\nexport interface ProjectScriptsTemplate {\n /** Template Name */\n name: string;\n /** Script Map */\n scripts: Record<string, string>;\n}\n\n/**\n * Project User Configuration\n */\nexport interface UserProjectConfig {\n /**\n * Directory where the workspace is located\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n * @default packages\n */\n workspacesDir?: string;\n /**\n * Workspace script templates, or a list of them\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n scripts?: Record<string, string> | ProjectScriptsTemplate[];\n /**\n * Workspace tsconfig template\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n tsconfig?: TSConfigJSON;\n /**\n * Workspace README template\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n readme?: (json: WorkspacePackageJson) => string;\n /**\n * Fixes the version of all peer dependencies in the project\n */\n peerDependencies?: Record<string, string>;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link UserPluginOption}\n */\n plugins?: UserPluginOption[];\n /**\n * d.ts output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n}\n\n/**\n * Project Configuration\n */\n\nexport interface ResolvedProjectConfig\n extends Required<\n Omit<\n UserProjectConfig,\n 'scripts' | 'tsconfig' | 'hooks' | 'plugins' | 'dts'\n >\n > {\n /**\n * Workspace script templates list\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n scripts: ProjectScriptsTemplate[];\n /**\n * Workspace tsconfig template\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n tsconfig?: TSConfigJSON;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link UserPluginOption}\n */\n plugins: Plugin[];\n /**\n * d.ts output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n}\n\nexport type ProjectPackageJson = RequiredPackageJSON<ProjectRequiredField>;\n\n/**\n * Project setup context object\n * @remarks Objects that are configured when the project is set up.\n */\nexport interface ProjectSetupContext {\n /** Project directory path instance */\n dir: Path;\n /** package.json */\n json: ProjectPackageJson;\n /** Project Configuration */\n config: ResolvedProjectConfig;\n /**\n * List of directory names of workspaces located in the project\n * @remarks Note that it is the directory name, not the package name.\n */\n resolvedWorkspaces: string[];\n}\n","export function isPromise<T = any>(obj: any): obj is Promise<T> {\n return (\n !!obj &&\n (typeof obj === 'object' || typeof obj === 'function') &&\n typeof obj.then === 'function'\n );\n}\n\nexport type Listable<T> =\n | T\n | false\n | null\n | undefined\n | Listable<T>[]\n | Promise<T | false | null | undefined | Listable<T>[]>;\n\nexport async function resolveListable<T>(raw: Listable<T>): Promise<T[]> {\n const result: T[] = [];\n const list = Array.isArray(raw) ? raw : [raw];\n for (let row of list) {\n if (isPromise(row)) {\n row = await row;\n }\n if (!row) continue;\n if (Array.isArray(row)) {\n result.push(...(await resolveListable(row)));\n continue;\n }\n result.push(row);\n }\n return result;\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getFilename(importMetaURL: string) {\n return fileURLToPath(importMetaURL);\n}\n\nexport function getDirname(importMetaURL: string) {\n return path.dirname(getFilename(importMetaURL));\n}\n\nconst FILE_NOT_FOUND_EXCEPTION_CODES = ['ENOTDIR', 'ENOENT'] as const;\n\nexport function isFileNotFoundException(\n source: unknown,\n): source is NodeJS.ErrnoException {\n return (\n !!source &&\n typeof source === 'object' &&\n FILE_NOT_FOUND_EXCEPTION_CODES.includes(\n (source as NodeJS.ErrnoException).code as any,\n )\n );\n}\n\nexport async function pathExists(\n target: string,\n type?: 'file' | 'dir',\n): Promise<boolean> {\n try {\n const stats = await fs.promises.stat(target);\n if (!type) return true;\n return type === 'file' ? stats.isFile() : stats.isDirectory();\n } catch (err) {\n if (isFileNotFoundException(err)) return false;\n throw err;\n }\n}\n\ntype FileMatcherFn = (\n file: fs.Dirent,\n dir: string,\n) => boolean | Promise<boolean>;\n\ntype FileMatcher = string | RegExp | FileMatcherFn;\n\nfunction normalizeFileMatcher(matcher: FileMatcher): FileMatcherFn {\n if (typeof matcher === 'function') {\n return matcher;\n }\n if (typeof matcher === 'string') {\n return (file) => file.name.includes(matcher);\n }\n return (file) => matcher.test(file.name);\n}\n\nexport async function findFile(\n dir: string,\n matcher: FileMatcher,\n recursive = true,\n): Promise<string | undefined> {\n const files = await fs.promises.readdir(dir, { withFileTypes: true });\n const _matcher = normalizeFileMatcher(matcher);\n\n const dirs: fs.Dirent[] | undefined = recursive ? [] : undefined;\n\n for (const file of files) {\n if (dirs && file.isDirectory()) {\n dirs.push(file);\n continue;\n }\n if (await _matcher(file, dir)) {\n return path.join(dir, file.name);\n }\n }\n\n if (dirs) {\n for (const subDir of dirs) {\n const hit = await findFile(\n path.join(dir, subDir.name),\n _matcher,\n recursive,\n );\n if (hit) return hit;\n }\n }\n}\n\nexport interface FindConfigResult {\n dir: string;\n fileName: string;\n path: string;\n code: string;\n}\n\ninterface FindConfigSettings<AllowMissing extends boolean | undefined> {\n fileName: string | string[];\n allowMissing?: AllowMissing;\n test?: (result: FindConfigResult) => boolean;\n /**\n * Trace up to how many directories above\n * @default 10\n */\n depth?: number;\n}\n\nconst FIND_CONFIG_OR_RE = /\\(.+?\\)/g;\n\nfunction parseFindConfigFileName(source: string): string[] {\n const matches = source.match(FIND_CONFIG_OR_RE);\n if (!matches) return [source];\n return matches\n .map((matched) => {\n const parts = matched.slice(1, matched.length - 1).split('|');\n return parts\n .map((part) => {\n const chunk = source.replace(matched, part);\n return parseFindConfigFileName(chunk);\n })\n .flat();\n })\n .flat();\n}\n\nfunction parseRawFindConfigFileName(source: string | string[]): string[] {\n return Array.isArray(source)\n ? source.map(parseFindConfigFileName).flat()\n : parseFindConfigFileName(source);\n}\n\nexport async function findConfig<\n AllowMissing extends boolean | undefined = false,\n>(\n fileNameOrSettings: string | string[] | FindConfigSettings<AllowMissing>,\n dir = process.cwd(),\n currentDepth = 0,\n): Promise<\n AllowMissing extends true ? FindConfigResult | null : FindConfigResult\n> {\n const settings: FindConfigSettings<AllowMissing> =\n typeof fileNameOrSettings === 'object' && !Array.isArray(fileNameOrSettings)\n ? fileNameOrSettings\n : { fileName: fileNameOrSettings };\n\n const { fileName, test, depth = 10, allowMissing } = settings;\n const fileNames = parseRawFindConfigFileName(fileName);\n if (depth && currentDepth === depth) {\n if (allowMissing) return null as any;\n throw new Error(\n `Failed to retrieve the \"${fileName}\" file because the maximum depth was reached.`,\n );\n }\n\n const next = (err?: unknown) => {\n const nextDir = path.dirname(dir);\n if (nextDir !== dir) {\n return findConfig(fileName, nextDir, currentDepth + 1);\n }\n if (allowMissing) return null as any;\n throw err || new Error(`missing config \"${fileName}\"`);\n };\n\n const result = await (async () => {\n for (const fileName of fileNames) {\n try {\n const _path = path.join(dir, fileName);\n const code = await fs.promises.readFile(_path, 'utf-8');\n const result: FindConfigResult = {\n fileName,\n dir,\n path: _path,\n code,\n };\n if (!test || test(result)) {\n return result;\n }\n } catch (err) {\n if (!isFileNotFoundException(err)) {\n throw err;\n }\n }\n }\n })();\n\n if (!result) {\n return next();\n }\n\n return result;\n}\n\nfunction _rmrf(path: string): Promise<void> {\n return fs.promises\n .rm(path, {\n recursive: true,\n force: true,\n })\n .catch((err) => {\n if (isFileNotFoundException(err)) return;\n throw err;\n });\n}\n\nexport async function rmrf(...paths: string[]): Promise<void> {\n await Promise.all(paths.map((path) => _rmrf(path)));\n}\n\nexport function copyDirSync(srcDir: string, destDir: string): void {\n if (!fs.existsSync(srcDir)) return;\n\n fs.mkdirSync(destDir, { recursive: true });\n for (const file of fs.readdirSync(srcDir)) {\n const srcFile = path.resolve(srcDir, file);\n if (srcFile === destDir) {\n continue;\n }\n const destFile = path.resolve(destDir, file);\n const stat = fs.statSync(srcFile);\n if (stat.isDirectory()) {\n copyDirSync(srcFile, destFile);\n } else {\n fs.copyFileSync(srcFile, destFile);\n }\n }\n}\n","import { PackageJson } from 'pkg-types';\nimport { bundleRequire } from 'bundle-require';\nimport {\n ProjectPackageJson,\n PROJECT_REQUIRED_FIELDS,\n UserProjectConfig,\n ResolvedProjectConfig,\n} from '../types';\nimport {\n PROJECT_CONFIG_BASENAME,\n SEARCH_BUNDLE_EXTENSIONS_MATCH,\n} from '../constants';\nimport { findConfig } from './file';\nimport { resolveUserPluginOptions } from './plugin';\n\nexport function isProjectPackageJson(\n json: PackageJson,\n): json is ProjectPackageJson {\n return (\n !!json.private && PROJECT_REQUIRED_FIELDS.every((filed) => !!json[filed])\n );\n}\n\nexport async function resolveUserProjectConfig(\n userConfig: UserProjectConfig,\n): Promise<ResolvedProjectConfig> {\n const {\n workspacesDir = 'packages',\n scripts = [],\n peerDependencies = {},\n tsconfig,\n readme = (json) => `# ${json.name}\\n`,\n plugins,\n } = userConfig;\n return {\n workspacesDir,\n scripts: Array.isArray(scripts) ? scripts : [{ name: '', scripts }],\n peerDependencies,\n tsconfig,\n readme,\n plugins: await resolveUserPluginOptions(plugins),\n };\n}\n\nexport function defineProjectConfig<Config extends UserProjectConfig>(\n config: Config,\n): Promise<ResolvedProjectConfig> {\n return resolveUserProjectConfig(config);\n}\n\nexport async function loadProjectConfig(\n searchDir?: string,\n depth?: number,\n): Promise<ResolvedProjectConfig> {\n const hit = await findConfig(\n {\n fileName: `${PROJECT_CONFIG_BASENAME}.${SEARCH_BUNDLE_EXTENSIONS_MATCH}`,\n depth,\n allowMissing: true,\n },\n searchDir,\n );\n\n const userConfig = hit\n ? (\n await bundleRequire<{\n default: UserProjectConfig | Promise<UserProjectConfig>;\n }>({\n filepath: hit.path,\n })\n ).mod.default\n : ({} as UserProjectConfig);\n\n return resolveUserProjectConfig(await userConfig);\n}\n","export const PROJECT_CONFIG_BASENAME = 'plugboy.project';\n\nexport const WORKSPACE_CONFIG_BASENAME = 'plugboy.workspace';\n\nexport const PACKAGE_JSON_FILENAME = 'package.json';\n\nexport const WORKSPACE_SPEC_PREFIX = 'workspace:';\n\nexport const SEARCH_BUNDLE_EXTENSIONS_MATCH = '(ts|mjs|js|json)';\n","import { UserPluginOption, Plugin } from '../types';\nimport { resolveListable } from './general';\nimport { loadProjectConfig } from './project';\n\nexport async function resolveUserPluginOptions(\n pluginOptions: UserPluginOption[] | undefined,\n): Promise<Plugin[]> {\n if (!pluginOptions) return [];\n return resolveListable(pluginOptions);\n}\n\nexport function definePlugin<T extends Plugin>(options: T): T {\n return options;\n}\n\nexport async function extractProjectPlugins(\n searchDir?: string,\n): Promise<Plugin[]> {\n const config = await loadProjectConfig(searchDir);\n return config ? config.plugins : [];\n}\n\nexport async function findProjectPlugin<T extends Plugin = Plugin>(\n pluginName: string,\n searchDir?: string,\n): Promise<T | undefined> {\n const plugins = await extractProjectPlugins(searchDir);\n return plugins.find((plugin) => plugin.name === pluginName) as T | undefined;\n}\n","import { PackageJson } from 'pkg-types';\nimport { bundleRequire } from 'bundle-require';\nimport {\n WorkspacePackageJson,\n WORKSPACE_REQUIRED_FIELDS,\n UserWorkspaceConfig,\n ResolvedWorkspaceConfig,\n RawWorkspaceEntryObject,\n RawWorkspaceEntry,\n WorkspaceEntry,\n RawWorkspaceEntries,\n WorkspaceEntries,\n} from '../types';\nimport { findConfig } from './file';\nimport {\n WORKSPACE_CONFIG_BASENAME,\n SEARCH_BUNDLE_EXTENSIONS_MATCH,\n} from '../constants';\nimport { resolveUserPluginOptions } from './plugin';\n\nexport function isWorkspacePackageJson(\n json: PackageJson,\n): json is WorkspacePackageJson {\n return (\n !json.private && WORKSPACE_REQUIRED_FIELDS.every((filed) => !!json[filed])\n );\n}\n\nexport function resolveRawWorkspaceEntry(\n entry: RawWorkspaceEntry,\n): WorkspaceEntry {\n const { src, css }: RawWorkspaceEntryObject =\n typeof entry === 'string' ? { src: entry } : entry;\n return {\n src,\n css: css || src.endsWith('.css') || src.endsWith('.scss'),\n };\n}\n\nexport function resolveRawWorkspaceEntries(\n entries: RawWorkspaceEntries | undefined,\n): WorkspaceEntries {\n if (!entries) return {};\n return Object.fromEntries(\n Object.entries(entries).map(([name, raw]) => [\n name,\n resolveRawWorkspaceEntry(raw),\n ]),\n );\n}\n\nexport async function resolveUserWorkspaceConfig(\n userConfig: UserWorkspaceConfig,\n): Promise<ResolvedWorkspaceConfig> {\n const { ignoreProjectConfig = false, entries, plugins } = userConfig;\n return {\n ...userConfig,\n ignoreProjectConfig,\n entries: resolveRawWorkspaceEntries(entries),\n plugins: await resolveUserPluginOptions(plugins),\n };\n}\n\nexport function defineWorkspaceConfig<Config extends UserWorkspaceConfig>(\n config: Config,\n): Promise<ResolvedWorkspaceConfig> {\n return resolveUserWorkspaceConfig(config);\n}\n\nexport async function loadWorkspaceConfig(\n searchDir?: string,\n depth?: number,\n): Promise<ResolvedWorkspaceConfig> {\n const hit = await findConfig(\n {\n fileName: `${WORKSPACE_CONFIG_BASENAME}.${SEARCH_BUNDLE_EXTENSIONS_MATCH}`,\n depth,\n allowMissing: true,\n },\n searchDir,\n );\n\n const userConfig = hit\n ? (\n await bundleRequire<{\n default: UserWorkspaceConfig | Promise<UserWorkspaceConfig>;\n }>({\n filepath: hit.path,\n })\n ).mod.default\n : ({} as UserWorkspaceConfig);\n\n return resolveUserWorkspaceConfig(await userConfig);\n}\n","import {\n UserHooks,\n ResolvedHooks,\n BuildedHooks,\n createHooksDefaults,\n} from '../types';\nimport { resolveListable } from './general';\n\nexport async function resolveUserHooks(\n ...userHooks: (UserHooks | undefined | null | false)[]\n): Promise<ResolvedHooks> {\n const hooks = createHooksDefaults();\n if (!userHooks) return hooks;\n for (const userHook of userHooks) {\n if (!userHook) continue;\n for (const [hookName, _hooks] of Object.entries(userHook)) {\n if (hooks) {\n (hooks as any)[hookName].push(...(await resolveListable(_hooks)));\n }\n }\n }\n return hooks;\n}\n\nexport function buildHooks(resolvedHooks: ResolvedHooks): BuildedHooks {\n const hooks: any = {};\n Object.entries(resolvedHooks).forEach(([hookName, fns]) => {\n hooks[hookName] = async (...args: any[]): Promise<any> => {\n const results: any[] = [];\n for (const fn of fns) {\n results.push(await (fn as any)(...args));\n }\n return results;\n };\n });\n return hooks;\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport { isFileNotFoundException } from './utils';\n\nexport class Path {\n private _value: string;\n private _stats?: fs.Stats;\n\n get value() {\n return this._value;\n }\n\n set value(value) {\n const _value = path.resolve(value);\n if (_value === this._value) return;\n this._value = path.resolve(value);\n delete this._stats;\n }\n\n get dirname() {\n return path.dirname(this.value);\n }\n\n get basename() {\n return path.basename(this.value);\n }\n\n get extname() {\n return path.extname(this.value);\n }\n\n get stats() {\n let { _stats } = this;\n if (!_stats) {\n _stats = fs.statSync(this.value);\n this._stats = _stats;\n }\n return _stats;\n }\n\n get isDirectory() {\n return this.stats.isDirectory;\n }\n\n get isFile() {\n return this.stats.isFile;\n }\n\n constructor(value: string) {\n this._value = path.resolve(value);\n }\n\n toString() {\n return this.value;\n }\n\n valueOf() {\n return this.value;\n }\n\n toJSON() {\n return this.value;\n }\n\n relative(to: string) {\n return new Path(path.relative(this.value, to));\n }\n\n join(...paths: string[]) {\n return new Path(path.join(this.value, ...paths));\n }\n\n resolve(...paths: string[]) {\n return new Path(path.resolve(this.value, ...paths));\n }\n\n private _join(...paths: (string | undefined)[]) {\n const _paths = paths.filter((path): path is string => !!path);\n return _paths.length ? path.join(this.value, ..._paths) : this.value;\n }\n\n async readdir(...paths: string[]): Promise<Path[]> {\n const dir = this._join(...paths);\n const files = await fs.promises.readdir(dir);\n return files.map((file) => {\n return new Path(path.join(dir, file));\n });\n }\n\n readFile<D = undefined>(\n pathAppend?: string,\n defaults?: D,\n ): Promise<D extends undefined ? string : string | D> {\n return new Promise<any>((resolve, reject) => {\n fs.readFile(this._join(pathAppend), 'utf-8', (err, data) => {\n if (err) {\n if (defaults !== undefined && isFileNotFoundException(err)) {\n return resolve(defaults);\n }\n return reject(err);\n }\n resolve(data);\n });\n });\n }\n\n async readJSON<T = any, D = undefined>(\n pathAppend?: string,\n defaults?: D,\n ): Promise<D extends undefined ? T : T | D> {\n try {\n const file = await this.readFile(pathAppend);\n return JSON.parse(file);\n } catch (err) {\n if (defaults === undefined) {\n throw err;\n }\n return defaults as any;\n }\n }\n}\n","import { ProjectPackageJson, WorkspacePackageJson } from './types';\nimport {\n findConfig,\n isProjectPackageJson,\n isWorkspacePackageJson,\n} from './utils';\nimport { PACKAGE_JSON_FILENAME } from './constants';\nimport { Path } from './path';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport interface GetProjectPackageJsonResult {\n dir: Path;\n json: ProjectPackageJson;\n}\n\nexport async function getProjectPackageJson<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n): Promise<\n AllowMissing extends true\n ? GetProjectPackageJsonResult | null\n : GetProjectPackageJsonResult\n> {\n const hit = await findConfig(\n {\n fileName: PACKAGE_JSON_FILENAME,\n allowMissing,\n test: (result) => isProjectPackageJson(JSON.parse(result.code)),\n },\n searchDir,\n );\n if (!hit) {\n if (allowMissing) return null as any;\n throw new Error('missing project package.');\n }\n return {\n dir: new Path(hit.dir),\n json: JSON.parse(hit.code),\n } as any;\n}\n\nexport interface GetWorkspacePackageJsonResult {\n dir: Path;\n json: WorkspacePackageJson;\n}\n\nexport async function getWorkspacePackageJson<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n): Promise<\n AllowMissing extends true\n ? GetWorkspacePackageJsonResult | null\n : GetWorkspacePackageJsonResult\n> {\n const hit = await findConfig(\n {\n fileName: PACKAGE_JSON_FILENAME,\n allowMissing,\n test: (result) => isWorkspacePackageJson(JSON.parse(result.code)),\n },\n searchDir,\n );\n if (!hit) {\n if (allowMissing) return null as any;\n throw new Error('missing workspace package.');\n }\n return {\n dir: new Path(hit.dir),\n json: JSON.parse(hit.code),\n } as any;\n}\n\nexport async function findWorkspacePackages(\n dir: string,\n): Promise<GetWorkspacePackageJsonResult[]> {\n const results: GetWorkspacePackageJsonResult[] = [];\n const searchDir = path.resolve(dir);\n const dirs = await fs.readdir(searchDir);\n const pkgs = await Promise.all(\n dirs.map((dirName) =>\n getWorkspacePackageJson(path.join(searchDir, dirName), true),\n ),\n );\n pkgs.forEach((pkg) => {\n pkg && results.push(pkg);\n });\n return results;\n}\n","import { Options, build } from 'tsup';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { PlugboyWorkspace, WorkspaceObjectExport } from './workspace';\nimport { TSUP_SYNC_OPTIONS, NormalizedDTSPreserveTypeSettings } from '../types';\nimport type { OutputFile, Plugin } from 'esbuild';\nimport { copyDirSync, rmrf } from '../utils';\nimport { emitDTS } from './dts';\nimport { glob } from 'glob';\n\nconst SHEBANG_MATCH_RE = /^(#!.+?)\\n/;\ntype EnvVarName = '__PLUGBOY_DEV__' | '__PLUGBOY_STUB__';\ntype EnvFnName =\n | '__plugboyWorkspaceDir'\n | '__plugboySrcDir'\n | '__plugboyPublicDir';\n\ninterface ResolvedOptions extends Options {\n esbuildPlugins: Plugin[];\n}\n\nexport class Builder {\n readonly workspace: PlugboyWorkspace;\n private _tsupOptions?: ResolvedOptions;\n\n get entry() {\n return this.workspace.entry;\n }\n\n get dts() {\n return this.workspace.dts;\n }\n\n constructor(workspace: PlugboyWorkspace) {\n this.workspace = workspace;\n }\n\n async tsupOptions(overrides?: { watch?: boolean }): Promise<ResolvedOptions> {\n let { _tsupOptions } = this;\n if (_tsupOptions) return _tsupOptions;\n\n const { entry, dts } = this;\n\n const esbuildPlugins = await this.workspace.getESBuildPlugins();\n\n _tsupOptions = {\n publicDir: true,\n format: ['esm'],\n dts: dts.inline\n ? false\n : {\n resolve: ['@fastkit/plugboy'],\n },\n treeshake: true,\n esbuildPlugins,\n entry,\n splitting: true,\n outExtension: ({ format }) => ({\n js: `.mjs`,\n }),\n sourcemap: true,\n clean: true,\n ...overrides,\n };\n\n for (const opt of TSUP_SYNC_OPTIONS) {\n _tsupOptions[opt] = this.workspace.config[opt] as any;\n }\n\n const PLUGBOY_VAR_ENVS: Record<EnvVarName, string> = {\n __PLUGBOY_DEV__: 'false',\n __PLUGBOY_STUB__: 'false',\n };\n\n const DEFINE_VAR_INJECTS = Object.fromEntries(\n Object.keys(PLUGBOY_VAR_ENVS).map((envName) => [envName, `$$${envName}`]),\n );\n\n _tsupOptions.define = {\n ..._tsupOptions.define,\n ...DEFINE_VAR_INJECTS,\n };\n\n const PLUGBOY_VAR_ENVS_BANNER = [\n ...Object.entries(PLUGBOY_VAR_ENVS).map(\n ([envName, variable]) =>\n `const $$${envName} = /* @PLUGBOY:${envName}:start */${variable}/* @PLUGBOY:${envName}:end */;`,\n ),\n `const $$__PLUGBOY_RELATIVE_PATH_FOR_WORKSPACE__ = '@@__PLUGBOY_RELATIVE_PATH_FOR_WORKSPACE__';`,\n ].join('\\n');\n\n const ENV_FN_INJECTS = `\nimport __plugboy_path from 'node:path';\nimport { fileURLToPath as __plugboy_fileURLToPath } from 'node:url';\n\nfunction __plugboyFilename() {\n return __plugboy_fileURLToPath(import.meta.url);\n}\n\nfunction __plugboyDirname() {\n return __plugboy_path.dirname(__plugboyFilename());\n}\n\nfunction __plugboyWorkspaceDir(...paths) {\n return __plugboy_path.join(__plugboy_path.resolve(__plugboyDirname(), $$__PLUGBOY_RELATIVE_PATH_FOR_WORKSPACE__), ...paths);\n}\n\nfunction __plugboySrcDir(...paths) {\n return __plugboy_path.join(__plugboyWorkspaceDir(), 'src', ...paths);\n}\n\nfunction __plugboyPublicDir(...paths) {\n return __plugboy_path.join(__plugboyWorkspaceDir(), 'dist', ...paths);\n}\n `.trim();\n\n const banner: NonNullable<Options['banner']> = { ..._tsupOptions.banner };\n banner.js = `${\n banner.js ? banner.js + '\\n\\n' : ''\n }${PLUGBOY_VAR_ENVS_BANNER}\\n\\n${ENV_FN_INJECTS}`;\n\n _tsupOptions.banner = banner;\n\n _tsupOptions.external = _tsupOptions.external || [];\n _tsupOptions.external.push(\n /^(@fastkit\\/)?plugboy/,\n ...this.workspace.dependencies,\n );\n\n this._tsupOptions = _tsupOptions;\n\n return _tsupOptions;\n }\n\n private async _stubLinkJS(from: string, to: string) {\n const fromParsed = path.parse(from);\n const fromDir = fromParsed.dir;\n const toParsed = path.parse(to);\n const toRelativeDir = path.relative(fromDir, toParsed.dir);\n const location = path.join(toRelativeDir, toParsed.base);\n const source = await fs.readFile(to, 'utf-8');\n const shebang = source.match(SHEBANG_MATCH_RE)?.[1];\n const STUB_FN_ERROR = `() => { throw new Error('Path resolution methods cannot be executed in stub mode.') }`;\n const PLUGBOY_ENVS: Record<EnvVarName | EnvFnName, string> = {\n __PLUGBOY_DEV__: 'true',\n __PLUGBOY_STUB__: 'true',\n __plugboyWorkspaceDir: STUB_FN_ERROR,\n __plugboySrcDir: STUB_FN_ERROR,\n __plugboyPublicDir: STUB_FN_ERROR,\n // __plugboyWorkspaceDir: `(...paths) => path.join('${this.workspace.dir.value}', ...paths)`,\n // __plugboySrcDir: `(...paths) => path.join(__plugboySrcDir(), 'src', ...paths)`,\n // __plugboyPublicDir: `(...paths) => path.join(__plugboySrcDir(), 'dist', ...paths)`,\n };\n const ENV_INJECTS = Object.entries(PLUGBOY_ENVS)\n .map(([envName, variable]) => `globalThis.${envName} = ${variable};`)\n .join('\\n');\n const disableChecks = '/* eslint-disable */\\n// @ts-nocheck\\n';\n const code = `${disableChecks}${ENV_INJECTS}\\nexport * from '${location}';`;\n const dtsPath = path.join(fromDir, `${fromParsed.name}.d.ts`);\n const dtsCode = `${disableChecks}export * from '${location.replace(\n /\\.ts$/,\n '',\n )}';`;\n await Promise.all([\n fs.writeFile(from, `${shebang ? shebang + '\\n' : ''}${code}`),\n fs.writeFile(dtsPath, dtsCode),\n ]);\n }\n\n private async _stubLinkCSS(from: string) {\n const code = `/* noop */`;\n await fs.writeFile(from, code);\n }\n\n async copyPublicDir() {\n const publicDir = this.workspace.dir.join('public').value;\n await copyDirSync(publicDir, this.workspace.dirs.dist.value);\n }\n\n async stub() {\n const links = this.workspace.getStubLinks();\n await this.copyPublicDir();\n await Promise.all(\n links.map((link) => {\n if (link.type === 'js') {\n return this._stubLinkJS(link.from, link.to);\n } else if (link.type === 'css') {\n return this._stubLinkCSS(link.from);\n }\n }),\n );\n }\n\n normalizeDTSBySettings(\n dts: string,\n settings: NormalizedDTSPreserveTypeSettings,\n ): string | undefined {\n const { targets, pkg } = settings;\n const myPackageName = this.workspace.json.name;\n const packageIsOwn = myPackageName === pkg;\n const pkgImports = (() => {\n if (!pkg || packageIsOwn) return;\n\n const importRe = new RegExp(`import {([^\\\\{\\\\}]+)} from '${pkg}'`);\n const importMatched = dts.match(importRe);\n const imports = importMatched && importMatched[1];\n if (!imports) return;\n\n return {\n pkg,\n importRe,\n imports,\n };\n })();\n\n const hitTypeNames: string[] = [];\n targets.forEach(({ from, typeName }) => {\n const matched = dts.match(from);\n if (matched) {\n hitTypeNames.push(typeName);\n dts = dts.replace(from, typeName);\n }\n });\n\n if (!hitTypeNames.length) return;\n\n if (pkgImports) {\n const { pkg, imports, importRe } = pkgImports;\n const mods = imports\n .trim()\n .split(',')\n .map((row) => {\n row = row.split(' as ')[0].trim();\n return row;\n });\n const appends: string[] = [];\n hitTypeNames.forEach((typeName) => {\n const re = new RegExp(`(^|\\n)import { ${typeName} } from '${pkg}'`);\n if (!re.test(dts) && !mods.includes(typeName)) {\n appends.push(typeName);\n }\n });\n if (appends.length) {\n dts = dts.replace(\n importRe,\n `import { $1, ${appends.join(', ')} } from '${pkg}'`,\n );\n }\n } else if (pkg && !packageIsOwn) {\n const mods: string[] = [];\n hitTypeNames.forEach((typeName) => {\n if (!dts.includes(`export declare type ${typeName} = `)) {\n mods.push(typeName);\n }\n });\n if (mods.length) {\n dts = `import { ${mods.join(', ')} } from '${pkg}';\\n${dts}`;\n }\n }\n return dts;\n }\n\n async normalizeDTSFile(filePath: string) {\n const dts = await fs.readFile(filePath, 'utf-8');\n const { preserveType } = this.dts;\n let normalized = dts;\n let processed = false;\n for (const settings of preserveType) {\n const _normalized = this.normalizeDTSBySettings(normalized, settings);\n if (_normalized) {\n processed = true;\n normalized = _normalized;\n }\n }\n if (!processed) {\n return;\n }\n await fs.writeFile(filePath, normalized, 'utf-8');\n }\n\n async normalizeDTSFiles(dtsFiles: string[] = this.workspace.dtsFiles) {\n const { preserveType } = this.dts;\n if (!preserveType.length || !dtsFiles.length) return;\n\n await Promise.all(\n dtsFiles.map((filePath) => this.normalizeDTSFile(filePath)),\n );\n }\n\n async emitInlineDTS() {\n const { dir, dirs, exports } = this.workspace;\n const cwd = dir.value;\n const outDir = dirs.dist.join('.dts-generate').value;\n const dtsSrcDir = path.join(outDir, 'src');\n const dtsDest = dirs.dist.join('.dts').value;\n\n await emitDTS({\n cwd,\n outDir,\n });\n\n await fs.rename(dtsSrcDir, dtsDest);\n await rmrf(outDir);\n\n const objectExports: WorkspaceObjectExport[] = [];\n\n exports.forEach(({ at }) => {\n typeof at === 'object' && objectExports.push(at);\n });\n\n await Promise.all(\n objectExports.map(async (at) => {\n const typesDir = path.dirname(at.types);\n const dtsDestDir = path.dirname(at.dtsDest);\n const relativeDir = path.relative(typesDir, dtsDestDir);\n const relativePath = path.join(\n relativeDir,\n path.basename(at.dtsDest).replace(/\\.d\\.ts$/, ''),\n );\n const code = `export * from './${relativePath}';`;\n await fs.writeFile(at.types, code, 'utf-8');\n }),\n );\n\n const dtsFiles = await glob(path.join(dtsDest, '**/*.d.ts'));\n await this.normalizeDTSFiles(dtsFiles);\n }\n\n async build() {\n const _outputFiles: OutputFile[] = [];\n const options = await this.tsupOptions();\n await build({\n ...options,\n esbuildPlugins: [\n ...options.esbuildPlugins,\n {\n name: 'output-collection',\n setup(build) {\n build.onEnd((result) => {\n const { outputFiles } = result;\n if (!outputFiles) return;\n _outputFiles.push(...outputFiles);\n });\n },\n },\n ],\n onSuccess: async () => {\n const emptyNativeNodeModuleRe = /(^|\\n)import 'node:.+?';?/g;\n await Promise.all(\n _outputFiles.map(async ({ path: filePath }) => {\n if (!filePath.endsWith('.mjs')) return;\n const code = await fs.readFile(filePath, 'utf-8');\n const replaced = code.replace(emptyNativeNodeModuleRe, '');\n if (code === replaced) return;\n\n await fs.writeFile(filePath, replaced.trimStart(), 'utf-8');\n }),\n );\n },\n });\n\n if (this.dts.inline) {\n await this.emitInlineDTS();\n } else {\n await this.normalizeDTSFiles();\n }\n }\n}\n","import { execa } from 'execa';\nimport path from 'node:path';\n\nexport interface EmitDTSOptions {\n cwd?: string;\n outDir?: string;\n}\n\nexport async function emitDTS(opts: EmitDTSOptions = {}) {\n const { cwd = process.cwd(), outDir = path.join(cwd, 'dist/dts') } = opts;\n await execa(\n 'tsc',\n [\n '--declaration true',\n '--skipLibCheck',\n '--noEmit false',\n '--emitDeclarationOnly',\n `--outDir ${outDir}`,\n ],\n { cwd, shell: true, stdio: 'inherit' },\n );\n}\n","import {\n ProjectSetupContext,\n ProjectPackageJson,\n ResolvedProjectConfig,\n UserHooks,\n} from '../types';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { Path } from '../path';\nimport glob from 'glob';\nimport { getProjectPackageJson } from '../package';\nimport {\n isWorkspacePackageJson,\n loadProjectConfig,\n resolveUserProjectConfig,\n} from '../utils';\nimport { PACKAGE_JSON_FILENAME } from '../constants';\n\n/**\n * Plugboy Project\n *\n * @remarks This instance is only created if the project consists of a mono-repo.\n */\nexport class PlugboyProject {\n /** Path instance of the project directory */\n readonly dir: Path;\n /** package.json */\n readonly json: ProjectPackageJson;\n /**\n * Project Configuration\n * @see {@link ResolvedProjectConfig}\n */\n readonly config: ResolvedProjectConfig;\n /** Names of all packages on which the project depends */\n readonly dependencies: string[];\n /** Directory names of all workspaces owned by the project */\n readonly resolvedWorkspaces: string[];\n\n /**\n * Name of the project's package.json\n */\n get name() {\n return this.json.name;\n }\n\n /**\n * Plug-in List\n * @see {@link ResolvedProjectConfig.plugins}\n */\n get plugins() {\n return this.config.plugins;\n }\n\n /**\n * List of all user hook settings\n * @see {@link UserHooks}\n */\n get hooks(): UserHooks[] {\n const { hooks: _hooks, plugins } = this.config;\n const pluginHooks = plugins.map((plugin) => plugin.hooks);\n return [_hooks, ...pluginHooks].filter((hook): hook is UserHooks => !!hook);\n }\n\n constructor(ctx: ProjectSetupContext) {\n const { dir, json, config, resolvedWorkspaces } = ctx;\n\n this.dir = dir;\n this.json = json;\n this.config = config;\n\n const allDeps = {\n ...json.dependencies,\n ...json.devDependencies,\n };\n\n this.dependencies = Object.keys(allDeps);\n this.resolvedWorkspaces = resolvedWorkspaces;\n }\n}\n\nexport async function getProject<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n skipLoadConfig?: boolean,\n): Promise<AllowMissing extends true ? PlugboyProject | null : PlugboyProject> {\n const hit = await getProjectPackageJson(searchDir, allowMissing);\n if (!hit) {\n return null as any;\n }\n const { dir, json } = hit;\n const resolvedWorkspaces: string[] = [];\n const { workspaces = [] } = json;\n const workspacesPattern = workspaces.map(\n (workspace) => dir.join(workspace, PACKAGE_JSON_FILENAME).value,\n );\n const workspaceHits = await glob(workspacesPattern);\n for (const hit of workspaceHits) {\n const json = JSON.parse(await fs.readFile(hit, 'utf-8'));\n if (!isWorkspacePackageJson(json)) {\n continue;\n }\n resolvedWorkspaces.push(path.dirname(hit));\n }\n resolvedWorkspaces.sort((a, b) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n });\n\n const config = skipLoadConfig\n ? await resolveUserProjectConfig({})\n : await loadProjectConfig(dir.value, 0);\n\n const ctx: ProjectSetupContext = {\n dir,\n json,\n config,\n resolvedWorkspaces,\n };\n\n return new PlugboyProject(ctx);\n}\n","import {\n rmrf,\n loadWorkspaceConfig,\n resolveUserHooks,\n buildHooks,\n} from '../utils';\nimport {\n ProjectPackageJson,\n WorkspacePackageJson,\n ResolvedWorkspaceConfig,\n WorkspaceDirs,\n WorkspaceSetupContext,\n WorkspaceMeta,\n Plugin,\n UserHooks,\n BuildedHooks,\n ESBuildPlugin,\n mergeDTSSettingsList,\n NormalizedDTSSettings,\n} from '../types';\nimport { Path } from '../path';\nimport { WORKSPACE_SPEC_PREFIX } from '../constants';\nimport { PlugboyProject, getProject } from '../project';\nimport sortPackageJson from 'sort-package-json';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { Builder } from './builder';\nimport { getWorkspacePackageJson } from '../package';\nimport { PACKAGE_JSON_FILENAME } from '../constants';\n\nexport type WorkspaceStubLink =\n | {\n type: 'js';\n from: string;\n to: string;\n }\n | {\n type: 'css';\n from: string;\n };\n\nexport type WorkspaceStubLinkType = WorkspaceStubLink['type'];\n\nexport interface WorkspaceObjectExport {\n src: string;\n types: string;\n dtsDest: string;\n import: {\n default: string;\n };\n}\n\nfunction extractWorkspaceObjectExport(at: string | WorkspaceObjectExport) {\n if (typeof at === 'string') return at;\n const { types, import: _import } = at;\n return {\n types,\n import: _import,\n };\n}\n\nexport interface WorkspaceExport {\n id: string;\n at: string | WorkspaceObjectExport;\n stubLink?: WorkspaceStubLink;\n}\n\nexport const WORKSPACE_PACKAGE_SYNC_FIELDS = [\n 'repository',\n 'author',\n 'publishConfig',\n 'license',\n] as const;\n\nexport function syncWorkspacePackageFields(\n projectJSON: ProjectPackageJson,\n workspaceJSON: WorkspacePackageJson,\n) {\n for (const field of WORKSPACE_PACKAGE_SYNC_FIELDS) {\n const value = projectJSON[field];\n if (value && !workspaceJSON[field]) {\n workspaceJSON[field] = value;\n }\n }\n}\n\nconst BUILD_TARGET_SRC_MATCH_RE = /\\.(tsx?|s?css)$/;\n\nexport class PlugboyWorkspace {\n readonly name: string;\n readonly dir: Path;\n readonly config: ResolvedWorkspaceConfig;\n readonly project: PlugboyProject | null;\n readonly dirs: WorkspaceDirs;\n readonly dependencies: string[];\n readonly projectDependencies: string[];\n readonly meta: WorkspaceMeta;\n readonly entry: Record<string, string>;\n readonly exports: WorkspaceExport[];\n readonly builder: Builder;\n readonly plugins: Plugin[];\n readonly hooks: BuildedHooks;\n readonly dtsFiles: string[] = [];\n readonly dts: NormalizedDTSSettings;\n private _json: WorkspacePackageJson;\n\n get json() {\n return this._json;\n }\n\n constructor(ctx: WorkspaceSetupContext) {\n const {\n dir,\n json,\n config,\n project,\n dirs,\n dependencies,\n projectDependencies,\n meta,\n plugins,\n hooks,\n dts,\n } = ctx;\n\n this.name = dir.basename;\n this.dir = dir;\n this._json = json;\n this.project = project;\n this.dirs = dirs;\n this.dependencies = dependencies;\n this.projectDependencies = projectDependencies;\n this.meta = meta;\n this.config = config;\n this.plugins = plugins;\n this.hooks = hooks;\n this.dts = dts;\n\n const entry: Record<string, string> = {};\n const exports: WorkspaceExport[] = [\n {\n id: `./${PACKAGE_JSON_FILENAME}`,\n at: `./${PACKAGE_JSON_FILENAME}`,\n },\n ];\n\n Object.entries(config.entries).forEach(([id, { src, css }]) => {\n if (!BUILD_TARGET_SRC_MATCH_RE.test(src)) return;\n\n const isMainEntry = id === '.';\n const normalizedId = isMainEntry ? this.name : id;\n const exportId = id.startsWith('.') ? id : `./${id}`;\n const srcIsCSS = src.endsWith('.css') || src.endsWith('.scss');\n const ext = srcIsCSS ? 'css' : 'mjs';\n const dest = `./dist/${normalizedId}.${ext}`;\n const destFullPath = dir.join(dest).value;\n\n entry[normalizedId] = src;\n\n if (css) {\n const cssDest = `./dist/${normalizedId}.css`;\n exports.push({\n id: `./${normalizedId}.css`,\n at: cssDest,\n stubLink: {\n type: 'css',\n from: cssDest,\n },\n });\n\n if (srcIsCSS) return;\n }\n\n const types = `./dist/${normalizedId}.d.ts`;\n const dtsDest = `./dist/${src\n .replace(/^\\.\\/src/, '.dts')\n .replace(/\\.ts$/, '.d.ts')}`;\n\n this.dtsFiles.push(dir.join(types).value);\n exports.push({\n id: exportId,\n at: {\n src,\n types,\n dtsDest,\n import: {\n default: dest,\n },\n },\n stubLink: {\n from: destFullPath,\n to: dir.join(src).value,\n type: 'js',\n },\n });\n });\n\n this.entry = entry;\n this.exports = exports;\n this.builder = new Builder(this);\n }\n\n clean(withDepsAndCache?: boolean) {\n const { dir, dirs } = this;\n const paths: string[] = [dirs.dist.value];\n if (withDepsAndCache) {\n paths.push(dir.join('node_modules').value, dir.join('.turbo').value);\n }\n return rmrf(...paths);\n }\n\n async preparePackageJSON() {\n const { exports, json, project } = this;\n const _exports: Record<string, any> = {};\n const typesVersions: Record<string, any> = {};\n let main: string | undefined;\n let mainTypes: string | undefined;\n\n exports.forEach(({ id, at }) => {\n const _at = extractWorkspaceObjectExport(at);\n _exports[id] = _at;\n if (typeof _at !== 'object') return;\n const isMainExport = id === '.';\n const trimedId = isMainExport ? id : id.replace(/^\\.\\//, '');\n typesVersions[trimedId] = [_at.types];\n\n if (isMainExport) {\n main = _at.import.default;\n mainTypes = _at.types;\n }\n });\n\n _exports['./*'] = './dist/*';\n\n const cloned: typeof json = JSON.parse(JSON.stringify(json));\n cloned.exports = _exports;\n cloned.typesVersions = {\n '*': typesVersions,\n };\n if (main) cloned.main = main;\n if (mainTypes) cloned.types = mainTypes;\n\n const projectPeerDependencies = project?.config.peerDependencies;\n (['dependencies', 'devDependencies', 'peerDependencies'] as const).forEach(\n (prop) => {\n const deps = cloned[prop];\n if (!deps) return;\n Object.keys(deps).forEach((dep) => {\n const version = deps[dep];\n if (version.startsWith('workspace:')) {\n deps[dep] = 'workspace:*';\n } else if (projectPeerDependencies && projectPeerDependencies[dep]) {\n deps[dep] = projectPeerDependencies[dep];\n }\n });\n },\n );\n\n cloned.files = cloned.files || [];\n if (!cloned.files.some((file) => /(\\.\\/)?dist\\/?/.test(file))) {\n cloned.files.unshift('dist');\n }\n\n if (project) {\n syncWorkspacePackageFields(project.json, cloned);\n }\n\n cloned.type = cloned.type || 'module';\n\n await this.hooks.preparePackageJSON(json, this);\n\n const sorted = sortPackageJson(cloned);\n const fromStr = JSON.stringify(cloned, null, 2);\n const toStr = JSON.stringify(sorted, null, 2);\n if (fromStr !== toStr || process) {\n await fs.writeFile(this.dir.join(PACKAGE_JSON_FILENAME).value, toStr);\n this._json = sorted;\n }\n return sorted;\n }\n\n getStubLinks(): WorkspaceStubLink[] {\n const links: WorkspaceStubLink[] = [];\n this.exports.forEach(({ stubLink }) => {\n stubLink && links.push(stubLink);\n });\n return links;\n }\n\n async stub() {\n await this.clean();\n await fs.mkdir(this.dirs.dist.value);\n return this.builder.stub();\n }\n\n async getESBuildPlugins(): Promise<ESBuildPlugin[]> {\n const results: ESBuildPlugin[] = [];\n results.push({\n name: 'plugboy-workspace-env',\n setup: (build) => {\n const isJS = /\\.m?js$/;\n const RELATIVE_PATH_FOR_WORKSPACE =\n '@@__PLUGBOY_RELATIVE_PATH_FOR_WORKSPACE__';\n const encoder = new TextEncoder();\n\n build.onEnd(({ outputFiles, errors, warnings }) => {\n const result = { errors, warnings };\n if (!outputFiles || !outputFiles.length || errors.length)\n return result;\n\n for (const file of outputFiles) {\n const { path: filePath, text } = file;\n if (\n !isJS.test(filePath) ||\n !text.includes(RELATIVE_PATH_FOR_WORKSPACE)\n ) {\n continue;\n }\n const relativePath = path.relative(\n path.dirname(filePath),\n this.dir.value,\n );\n const content = text.replace(\n RELATIVE_PATH_FOR_WORKSPACE,\n relativePath,\n );\n file.contents = encoder.encode(content);\n }\n\n return result;\n });\n },\n });\n const { plugins } = this;\n for (const plugin of plugins) {\n const { esbuildPlugins } = plugin;\n if (!esbuildPlugins) continue;\n for (const chunk of esbuildPlugins) {\n const esbuildPlugin =\n typeof chunk === 'function' ? await chunk(this) : await chunk;\n if (esbuildPlugin) {\n results.push(esbuildPlugin);\n }\n }\n }\n return results;\n }\n\n async build() {\n await this.clean();\n return this.builder.build();\n }\n}\n\nexport async function getWorkspace<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n): Promise<\n AllowMissing extends true ? PlugboyWorkspace | null : PlugboyWorkspace\n> {\n const hit = await getWorkspacePackageJson(searchDir, allowMissing);\n if (!hit) {\n return null as any;\n }\n const { dir, json } = hit;\n const config = await loadWorkspaceConfig(dir.value, 0);\n\n const project = await getProject(dir.value, true, config.ignoreProjectConfig);\n\n const dirs: WorkspaceDirs = {\n src: dir.join('src'),\n dist: dir.join('dist'),\n };\n\n const { dependencies, peerDependencies, optionalDependencies } = json;\n const allDeps = {\n ...dependencies,\n ...peerDependencies,\n ...optionalDependencies,\n };\n\n const _dependencies = Object.keys(allDeps);\n\n const projectDependencies = Object.entries(allDeps)\n .filter(([dep, spec]) => spec.startsWith(WORKSPACE_SPEC_PREFIX))\n .map(([dep]) => dep);\n\n const meta: WorkspaceMeta = {};\n\n const packagePlugins = project?.plugins || [];\n const packageHooks = project?.hooks || [];\n const plugins: Plugin[] = [...packagePlugins, ...config.plugins];\n const _hooks: UserHooks[] = [...packageHooks];\n if (config.hooks) {\n _hooks.push(config.hooks);\n }\n const resolvedHooks = await resolveUserHooks(..._hooks);\n const hooks = buildHooks(resolvedHooks);\n\n const dts = mergeDTSSettingsList(project?.config.dts, config.dts);\n\n const ctx: WorkspaceSetupContext = {\n dir,\n json,\n config,\n project,\n dirs,\n dependencies: _dependencies,\n projectDependencies,\n meta,\n plugins,\n hooks,\n dts,\n };\n\n await hooks.setupWorkspace(ctx);\n\n const workspace = new PlugboyWorkspace(ctx);\n\n await hooks.createWorkspace(workspace);\n\n return workspace;\n}\n","import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { getProject } from '../project';\nimport { getWorkspace, syncWorkspacePackageFields } from '../workspace';\nimport { WorkspacePackageJson, ProjectScriptsTemplate } from '../types';\nimport sortPackageJson from 'sort-package-json';\nimport { WORKSPACE_CONFIG_BASENAME } from '../constants';\n\nimport inquirer from 'inquirer';\n\nexport async function generateWorkspace(\n workspaceName?: string,\n cwd = process.cwd(),\n) {\n const project = await getProject(cwd);\n const { config } = project;\n\n // ====================\n // workspace name\n // ====================\n while (!workspaceName) {\n const { value } = await inquirer.prompt({\n type: 'input',\n name: 'value',\n message: 'Enter a workspace name',\n });\n\n if (value) {\n workspaceName = value;\n }\n }\n\n // ====================\n // description\n // ====================\n const { description } = await inquirer.prompt({\n type: 'input',\n name: 'description',\n default: workspaceName,\n message: 'Please enter a description of your package',\n });\n\n // ====================\n // version\n // ====================\n let version: string | undefined;\n while (!version) {\n const { value } = await inquirer.prompt({\n type: 'input',\n name: 'value',\n default: '0.0.0',\n message: 'Please enter the initial version',\n });\n\n if (value) {\n version = value;\n }\n }\n\n // ====================\n // keywords\n // ====================\n const { rawKeywords } = await inquirer.prompt({\n type: 'input',\n name: 'rawKeywords',\n message: 'Enter as many keywords, if any, as needed, separated by commas',\n });\n\n const keywords = (rawKeywords as string)\n .split(',')\n .map((word) => word.trim())\n .filter((word) => word.length);\n\n // ====================\n // scripts\n // ====================\n const scriptsTemplates = config.scripts;\n let scriptsTemplate: ProjectScriptsTemplate | undefined;\n if (scriptsTemplates && scriptsTemplates.length) {\n const { value } = await inquirer.prompt({\n type: 'rawlist',\n message: 'Select a scripts template',\n name: 'value',\n choices: [\n { name: 'None', value: '' },\n ...scriptsTemplates.map((tpl) => ({\n name: tpl.name,\n value: tpl.name,\n })),\n ],\n });\n scriptsTemplate = scriptsTemplates.find((tpl) => tpl.name === value);\n }\n const scripts = scriptsTemplate?.scripts || {};\n\n // ====================\n // peerDependencies\n // ====================\n const peerDependencies = await (async () => {\n const { deps } = await inquirer.prompt<{ deps: string[] }>({\n type: 'checkbox',\n message:\n 'Select the dependent packages, if any, to be used in the package',\n name: 'deps',\n choices: Object.keys(config.peerDependencies).map((dep) => {\n return {\n name: dep,\n value: dep,\n };\n }),\n });\n if (!deps.length) return;\n return Object.fromEntries(\n deps.map((dep) => [dep, config.peerDependencies[dep]]),\n );\n })();\n\n // ====================\n // dependencies\n // ====================\n const dependencies = await (async () => {\n const { deps } = await inquirer.prompt<{ deps: string[] }>({\n type: 'checkbox',\n message: 'Select the internal package to be used, if any.',\n name: 'deps',\n choices: project.resolvedWorkspaces.map((workspace) => {\n const name = path.basename(workspace);\n return {\n name,\n value: name,\n };\n }),\n });\n if (!deps.length) return;\n return Object.fromEntries(\n deps.map((dep) => [`@${project.name}/${dep}`, 'workspace:*']),\n );\n })();\n\n // ====================\n // Generate source files?\n // ====================\n const { withGenSource } = await inquirer.prompt<{ withGenSource: boolean }>({\n type: 'confirm',\n name: 'withGenSource',\n message: 'Generate source files?',\n default: true,\n });\n\n // ====================\n // final confirmation\n // ====================\n const _json: WorkspacePackageJson = {\n name: `@${project.name}/${workspaceName}`,\n type: 'module',\n description,\n version,\n keywords,\n scripts,\n peerDependencies,\n dependencies,\n };\n\n syncWorkspacePackageFields(project.json, _json);\n\n const json = sortPackageJson(_json);\n\n const workspaceDir = path.join(config.workspacesDir, workspaceName);\n\n console.log('');\n console.log('========================================');\n console.log(`Directory: ${workspaceDir}`);\n console.log(`Generate source: ${withGenSource ? 'Yes' : 'No'}`);\n console.log(json);\n console.log('========================================');\n\n const { confirmation } = await inquirer.prompt<{ confirmation: boolean }>({\n type: 'confirm',\n name: 'confirmation',\n message: 'Is this OK?',\n default: true,\n });\n\n if (!confirmation) {\n console.log('Skiped.');\n process.exit(1);\n }\n\n // 1. Create directory\n await fs.mkdir(workspaceDir);\n\n // 2. Write package.json\n await fs.writeFile(\n path.join(workspaceDir, 'package.json'),\n JSON.stringify(json, null, 2),\n );\n\n // 3. Write README.md\n await fs.writeFile(path.join(workspaceDir, 'README.md'), config.readme(json));\n\n // 3. Generate source\n if (withGenSource) {\n const srcDir = path.join(workspaceDir, 'src');\n await fs.mkdir(srcDir);\n\n const indexCode = `export * from './${workspaceName}';\\n`;\n const modCode = `export const PACKAGE_NAME = './${workspaceName}';\\n`;\n\n await fs.writeFile(path.join(srcDir, 'index.ts'), indexCode);\n await fs.writeFile(path.join(srcDir, `${workspaceName}.ts`), modCode);\n\n const { tsconfig } = config;\n if (tsconfig) {\n await fs.writeFile(\n path.join(workspaceDir, 'tsconfig.json'),\n JSON.stringify(tsconfig, null, 2),\n );\n }\n\n const configFileCode =\n `\nimport { defineWorkspaceConfig } from '@fastkit/plugboy';\n\nexport default defineWorkspaceConfig({\n entries: {\n '.': './src/index.ts',\n },\n});\n `.trim() + '\\n';\n await fs.writeFile(\n path.join(workspaceDir, `${WORKSPACE_CONFIG_BASENAME}.ts`),\n configFileCode,\n );\n\n const workspace = await getWorkspace(workspaceDir);\n await workspace.preparePackageJSON();\n }\n}\n"],"mappings":"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","names":["fileName","result","path","bundleRequire","bundleRequire","path","fs","path","fs","fs","path","fs","path","path","path","fs","pkg","build","fs","path","glob","glob","hit","json","fs","path","fs","path","fs","build","path","path","fs","sortPackageJson","path","sortPackageJson","fs"]}
|