@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.
@@ -203,8 +203,8 @@ async function findConfig(fileNameOrSettings, dir = process.cwd(), currentDepth
203
203
  }
204
204
  return result;
205
205
  }
206
- function _rmrf(path9) {
207
- return fs.promises.rm(path9, {
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((path9) => _rmrf(path9)));
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 path2 from "node:path";
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 = path2.resolve(value);
420
+ const _value = path3.resolve(value);
397
421
  if (_value === this._value)
398
422
  return;
399
- this._value = path2.resolve(value);
423
+ this._value = path3.resolve(value);
400
424
  delete this._stats;
401
425
  }
402
426
  get dirname() {
403
- return path2.dirname(this.value);
427
+ return path3.dirname(this.value);
404
428
  }
405
429
  get basename() {
406
- return path2.basename(this.value);
430
+ return path3.basename(this.value);
407
431
  }
408
432
  get extname() {
409
- return path2.extname(this.value);
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 = path2.resolve(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(path2.relative(this.value, to));
462
+ return new Path(path3.relative(this.value, to));
439
463
  }
440
464
  join(...paths) {
441
- return new Path(path2.join(this.value, ...paths));
465
+ return new Path(path3.join(this.value, ...paths));
442
466
  }
443
467
  resolve(...paths) {
444
- return new Path(path2.resolve(this.value, ...paths));
468
+ return new Path(path3.resolve(this.value, ...paths));
445
469
  }
446
470
  _join(...paths) {
447
- const _paths = paths.filter((path9) => !!path9);
448
- return _paths.length ? path2.join(this.value, ..._paths) : this.value;
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(path2.join(dir, file));
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 path3 from "node:path";
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 = path3.resolve(dir);
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(path3.join(searchDir, dirName), true)
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 path5 from "node:path";
566
+ import path6 from "node:path";
543
567
 
544
568
  // src/workspace/dts.ts
545
569
  import { execa } from "execa";
546
- import path4 from "node:path";
570
+ import path5 from "node:path";
547
571
  async function emitDTS(opts = {}) {
548
- const { cwd = process.cwd(), outDir = path4.join(cwd, "dist/dts") } = opts;
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 = path5.parse(from);
682
+ const fromParsed = path6.parse(from);
659
683
  const fromDir = fromParsed.dir;
660
- const toParsed = path5.parse(to);
661
- const toRelativeDir = path5.relative(fromDir, toParsed.dir);
662
- const location = path5.join(toRelativeDir, toParsed.base);
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 = path5.join(fromDir, `${fromParsed.name}.d.ts`);
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 = path5.join(outDir, "src");
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 = path5.dirname(at.types);
817
- const dtsDestDir = path5.dirname(at.dtsDest);
818
- const relativeDir = path5.relative(typesDir, dtsDestDir);
819
- const relativePath = path5.join(
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
- path5.basename(at.dtsDest).replace(/\.d\.ts$/, "")
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 glob(path5.join(dtsDest, "**/*.d.ts"));
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 path6 from "node:path";
875
- import glob2 from "glob";
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 glob2(workspacesPattern);
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(path6.dirname(hit2));
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 path7 from "node:path";
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 = path7.relative(
1191
- path7.dirname(filePath),
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 path8 from "node:path";
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 = path8.basename(workspace);
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 = path8.join(config.workspacesDir, workspaceName);
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
- path8.join(workspaceDir, "package.json"),
1431
+ path9.join(workspaceDir, "package.json"),
1408
1432
  JSON.stringify(json, null, 2)
1409
1433
  );
1410
- await fs7.writeFile(path8.join(workspaceDir, "README.md"), config.readme(json));
1434
+ await fs7.writeFile(path9.join(workspaceDir, "README.md"), config.readme(json));
1411
1435
  if (withGenSource) {
1412
- const srcDir = path8.join(workspaceDir, "src");
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(path8.join(srcDir, "index.ts"), indexCode);
1419
- await fs7.writeFile(path8.join(srcDir, `${workspaceName}.ts`), modCode);
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
- path8.join(workspaceDir, "tsconfig.json"),
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
- path8.join(workspaceDir, `${WORKSPACE_CONFIG_BASENAME}.ts`),
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-QSOC5WYP.mjs.map
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-QSOC5WYP.mjs";
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
- type: "module",
13
- bin: {
14
- plugboy: "./cli.mjs"
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
- files: [
17
- "env.d.ts",
18
- "cli.mjs",
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
- types: "dist/plugboy.d.ts",
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
- version: "1.1.0",
69
- description: "",
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 \"type\": \"module\",\n \"bin\": {\n \"plugboy\": \"./cli.mjs\"\n },\n \"files\": [\n \"env.d.ts\",\n \"cli.mjs\",\n \"dist\"\n ],\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 \"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 \"version\": \"1.1.0\",\n \"description\": \"\",\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 \"keywords\": [],\n \"author\": \"dadajam4\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/dadajam4/fastkit.git\"\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":[]}
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 = Required<RawWorkspaceEntryObject>;
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-QSOC5WYP.mjs";
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@fastkit/plugboy",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "repository": {
@@ -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"]}