@fastkit/plugboy 0.2.4 → 0.2.5

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.
@@ -37,11 +37,9 @@ function normalizeDTSSettings(settings) {
37
37
  function mergeDTSSettingsList(...settingsList) {
38
38
  const merged = {};
39
39
  settingsList.forEach((settings) => {
40
- if (!settings)
41
- return;
40
+ if (!settings) return;
42
41
  const { inline, preserveType, normalizers } = settings;
43
- if (inline !== void 0)
44
- merged.inline = inline;
42
+ if (inline !== void 0) merged.inline = inline;
45
43
  if (preserveType) {
46
44
  merged.preserveType = merged.preserveType || [];
47
45
  merged.preserveType.push(...preserveType);
@@ -97,8 +95,7 @@ async function resolveListable(raw) {
97
95
  if (isPromise(row)) {
98
96
  row = await row;
99
97
  }
100
- if (!row)
101
- continue;
98
+ if (!row) continue;
102
99
  if (Array.isArray(row)) {
103
100
  result.push(...await resolveListable(row));
104
101
  continue;
@@ -127,12 +124,10 @@ function isFileNotFoundException(source) {
127
124
  async function pathExists(target, type) {
128
125
  try {
129
126
  const stats = await fs.promises.stat(target);
130
- if (!type)
131
- return true;
127
+ if (!type) return true;
132
128
  return type === "file" ? stats.isFile() : stats.isDirectory();
133
129
  } catch (err) {
134
- if (isFileNotFoundException(err))
135
- return false;
130
+ if (isFileNotFoundException(err)) return false;
136
131
  throw err;
137
132
  }
138
133
  }
@@ -165,16 +160,14 @@ async function findFile(dir, matcher, recursive = true) {
165
160
  _matcher,
166
161
  recursive
167
162
  );
168
- if (hit)
169
- return hit;
163
+ if (hit) return hit;
170
164
  }
171
165
  }
172
166
  }
173
167
  var FIND_CONFIG_OR_RE = /\(.+?\)/g;
174
168
  function parseFindConfigFileName(source) {
175
169
  const matches = source.match(FIND_CONFIG_OR_RE);
176
- if (!matches)
177
- return [source];
170
+ if (!matches) return [source];
178
171
  return matches.map((matched) => {
179
172
  const parts = matched.slice(1, matched.length - 1).split("|");
180
173
  return parts.map((part) => {
@@ -191,8 +184,7 @@ async function findConfig(fileNameOrSettings, dir = process.cwd(), currentDepth
191
184
  const { fileName, test, depth = 10, allowMissing } = settings;
192
185
  const fileNames = parseRawFindConfigFileName(fileName);
193
186
  if (depth && currentDepth === depth) {
194
- if (allowMissing)
195
- return null;
187
+ if (allowMissing) return null;
196
188
  throw new Error(
197
189
  `Failed to retrieve the "${fileName}" file because the maximum depth was reached.`
198
190
  );
@@ -202,8 +194,7 @@ async function findConfig(fileNameOrSettings, dir = process.cwd(), currentDepth
202
194
  if (nextDir !== dir) {
203
195
  return findConfig(settings, nextDir, currentDepth + 1);
204
196
  }
205
- if (allowMissing)
206
- return null;
197
+ if (allowMissing) return null;
207
198
  throw err || new Error(`missing config "${fileName}"`);
208
199
  };
209
200
  const result = await (async () => {
@@ -237,8 +228,7 @@ function _rmrf(_path) {
237
228
  recursive: true,
238
229
  force: true
239
230
  }).catch((err) => {
240
- if (isFileNotFoundException(err))
241
- return;
231
+ if (isFileNotFoundException(err)) return;
242
232
  throw err;
243
233
  });
244
234
  }
@@ -246,8 +236,7 @@ async function rmrf(...paths) {
246
236
  await Promise.all(paths.map((_path) => _rmrf(_path)));
247
237
  }
248
238
  function copyDirSync(srcDir, destDir) {
249
- if (!fs.existsSync(srcDir))
250
- return;
239
+ if (!fs.existsSync(srcDir)) return;
251
240
  fs.mkdirSync(destDir, { recursive: true });
252
241
  for (const file of fs.readdirSync(srcDir)) {
253
242
  const srcFile = path.resolve(srcDir, file);
@@ -300,8 +289,7 @@ var SEARCH_BUNDLE_EXTENSIONS_MATCH = "(ts|mjs|js|json)";
300
289
 
301
290
  // src/utils/plugin.ts
302
291
  async function resolveUserPluginOptions(pluginOptions) {
303
- if (!pluginOptions)
304
- return [];
292
+ if (!pluginOptions) return [];
305
293
  return resolveListable(pluginOptions);
306
294
  }
307
295
  function definePlugin(options) {
@@ -372,8 +360,7 @@ function resolveRawWorkspaceEntry(entry) {
372
360
  };
373
361
  }
374
362
  function resolveRawWorkspaceEntries(entries) {
375
- if (!entries)
376
- return {};
363
+ if (!entries) return {};
377
364
  return Object.fromEntries(
378
365
  Object.entries(entries).map(([name, raw]) => [
379
366
  name,
@@ -417,11 +404,9 @@ async function loadWorkspaceConfig(searchDir, depth) {
417
404
  // src/utils/hook.ts
418
405
  async function resolveUserHooks(...userHooks) {
419
406
  const hooks = createHooksDefaults();
420
- if (!userHooks)
421
- return hooks;
407
+ if (!userHooks) return hooks;
422
408
  for (const userHook of userHooks) {
423
- if (!userHook)
424
- continue;
409
+ if (!userHook) continue;
425
410
  for (const [hookName, _hooks] of Object.entries(userHook)) {
426
411
  if (hooks) {
427
412
  hooks[hookName].push(...await resolveListable(_hooks));
@@ -455,8 +440,7 @@ var Path = class _Path {
455
440
  }
456
441
  set value(value) {
457
442
  const _value = path3.resolve(value);
458
- if (_value === this._value)
459
- return;
443
+ if (_value === this._value) return;
460
444
  this._value = path3.resolve(value);
461
445
  delete this._stats;
462
446
  }
@@ -552,8 +536,7 @@ async function getProjectPackageJson(searchDir, allowMissing) {
552
536
  searchDir
553
537
  );
554
538
  if (!hit) {
555
- if (allowMissing)
556
- return null;
539
+ if (allowMissing) return null;
557
540
  throw new Error("missing project package.");
558
541
  }
559
542
  return {
@@ -571,8 +554,7 @@ async function getWorkspacePackageJson(searchDir, allowMissing) {
571
554
  searchDir
572
555
  );
573
556
  if (!hit) {
574
- if (allowMissing)
575
- return null;
557
+ if (allowMissing) return null;
576
558
  throw new Error("missing workspace package.");
577
559
  }
578
560
  return {
@@ -632,13 +614,13 @@ async function getPostcss(options) {
632
614
  const { layer, media, combineRules, cssnano } = options;
633
615
  const [postcss, _layer, _media, _combineRules, _cssnano] = await Promise.all([
634
616
  import("postcss").then((mod) => mod.default),
635
- layer && import("./optimize-layer-YJERAHYO.mjs").then(
617
+ layer && import("./optimize-layer-Q35C25P4.mjs").then(
636
618
  (mod) => mod.OptimizeLayer(layer)
637
619
  ),
638
- media && import("./optimize-media-7PF3XJSZ.mjs").then(
620
+ media && import("./optimize-media-ZZWDHLLV.mjs").then(
639
621
  (mod) => mod.OptimizeMedia(media)
640
622
  ),
641
- combineRules && import("./combine-rules-2FWRSWQP.mjs").then(
623
+ combineRules && import("./combine-rules-2CRG6D4B.mjs").then(
642
624
  (mod) => mod.CombineRules(combineRules)
643
625
  ),
644
626
  cssnano && import("cssnano").then((mod) => mod.default(cssnano))
@@ -665,8 +647,7 @@ var Builder = class {
665
647
  }
666
648
  async tsupOptions(overrides) {
667
649
  let { _tsupOptions } = this;
668
- if (_tsupOptions)
669
- return _tsupOptions;
650
+ if (_tsupOptions) return _tsupOptions;
670
651
  const { entry, dts } = this;
671
652
  const esbuildPlugins = await this.workspace.getESBuildPlugins();
672
653
  _tsupOptions = {
@@ -817,13 +798,11 @@ export * from '${location}';`;
817
798
  const myPackageName = this.workspace.json.name;
818
799
  const packageIsOwn = myPackageName === pkg;
819
800
  const pkgImports = (() => {
820
- if (!pkg || packageIsOwn)
821
- return;
801
+ if (!pkg || packageIsOwn) return;
822
802
  const importRe = new RegExp(`import {([^\\{\\}]+)} from '${pkg}'`);
823
803
  const importMatched = dts.match(importRe);
824
804
  const imports = importMatched && importMatched[1];
825
- if (!imports)
826
- return;
805
+ if (!imports) return;
827
806
  return {
828
807
  pkg,
829
808
  importRe,
@@ -838,8 +817,7 @@ export * from '${location}';`;
838
817
  dts = dts.replace(from, typeName);
839
818
  }
840
819
  });
841
- if (!hitTypeNames.length)
842
- return;
820
+ if (!hitTypeNames.length) return;
843
821
  if (pkgImports) {
844
822
  const { pkg: pkg2, imports, importRe } = pkgImports;
845
823
  const mods = imports.trim().split(",").map((row) => {
@@ -900,8 +878,7 @@ ${dts}`;
900
878
  }
901
879
  async normalizeDTSFiles(dtsFiles = this.workspace.dtsFiles) {
902
880
  const { preserveType } = this.dts;
903
- if (!preserveType.length || !dtsFiles.length)
904
- return;
881
+ if (!preserveType.length || !dtsFiles.length) return;
905
882
  await Promise.all(
906
883
  dtsFiles.map((filePath) => this.normalizeDTSFile(filePath))
907
884
  );
@@ -950,8 +927,7 @@ ${dts}`;
950
927
  setup(_build) {
951
928
  _build.onEnd((result) => {
952
929
  const { outputFiles } = result;
953
- if (!outputFiles)
954
- return;
930
+ if (!outputFiles) return;
955
931
  _outputFiles.push(...outputFiles);
956
932
  });
957
933
  }
@@ -965,12 +941,10 @@ ${dts}`;
965
941
  await this._handleCSSOutput(filePath);
966
942
  return;
967
943
  }
968
- if (!filePath.endsWith(".mjs"))
969
- return;
944
+ if (!filePath.endsWith(".mjs")) return;
970
945
  const code = await fs4.readFile(filePath, "utf-8");
971
946
  const replaced = code.replace(emptyNativeNodeModuleRe, "");
972
- if (code === replaced)
973
- return;
947
+ if (code === replaced) return;
974
948
  await fs4.writeFile(filePath, replaced.trimStart(), "utf-8");
975
949
  })
976
950
  );
@@ -985,8 +959,7 @@ ${dts}`;
985
959
  }
986
960
  async optimizeCSS(cssFilePath) {
987
961
  const options = this.workspace.optimizeCSSOptions;
988
- if (!options)
989
- return Promise.resolve();
962
+ if (!options) return Promise.resolve();
990
963
  let postcss = this._postcssCache;
991
964
  if (!postcss) {
992
965
  postcss = await getPostcss(options);
@@ -995,8 +968,7 @@ ${dts}`;
995
968
  function prepare(css2) {
996
969
  const layerDefs = (() => {
997
970
  const matched = css2.match(allLayerDefRe);
998
- if (!matched)
999
- return "";
971
+ if (!matched) return "";
1000
972
  const layerNames = [];
1001
973
  matched.forEach((row) => {
1002
974
  const trimmed = row.replace(layerDefTrimRe, "");
@@ -1095,10 +1067,8 @@ async function getProject(searchDir, allowMissing, skipLoadConfig) {
1095
1067
  resolvedWorkspaces.push(path7.dirname(_hit));
1096
1068
  }
1097
1069
  resolvedWorkspaces.sort((a, b) => {
1098
- if (a < b)
1099
- return -1;
1100
- if (a > b)
1101
- return 1;
1070
+ if (a < b) return -1;
1071
+ if (a > b) return 1;
1102
1072
  return 0;
1103
1073
  });
1104
1074
  const config = skipLoadConfig ? await resolveUserProjectConfig({}) : await loadProjectConfig(dir.value, 0);
@@ -1116,8 +1086,7 @@ import sortPackageJson from "sort-package-json";
1116
1086
  import fs6 from "node:fs/promises";
1117
1087
  import path8 from "node:path";
1118
1088
  function extractWorkspaceObjectExport(at) {
1119
- if (typeof at === "string")
1120
- return at;
1089
+ if (typeof at === "string") return at;
1121
1090
  const { types, import: _import } = at;
1122
1091
  return {
1123
1092
  types,
@@ -1196,8 +1165,7 @@ var PlugboyWorkspace = class {
1196
1165
  }
1197
1166
  ];
1198
1167
  Object.entries(config.entries).forEach(([id, { src, css }]) => {
1199
- if (!BUILD_TARGET_SRC_MATCH_RE.test(src))
1200
- return;
1168
+ if (!BUILD_TARGET_SRC_MATCH_RE.test(src)) return;
1201
1169
  const isMainEntry = id === ".";
1202
1170
  const normalizedId = isMainEntry ? this.name : id;
1203
1171
  const exportId = id.startsWith(".") ? id : `./${id}`;
@@ -1216,8 +1184,7 @@ var PlugboyWorkspace = class {
1216
1184
  from: cssDest
1217
1185
  }
1218
1186
  });
1219
- if (srcIsCSS)
1220
- return;
1187
+ if (srcIsCSS) return;
1221
1188
  }
1222
1189
  const types = `./dist/${normalizedId}.d.ts`;
1223
1190
  const dtsDest = `./dist/${src.replace(/^\.\/src/, ".dts").replace(/\.ts$/, ".d.ts")}`;
@@ -1260,8 +1227,7 @@ var PlugboyWorkspace = class {
1260
1227
  exports.forEach(({ id, at }) => {
1261
1228
  const _at = extractWorkspaceObjectExport(at);
1262
1229
  _exports[id] = _at;
1263
- if (typeof _at !== "object")
1264
- return;
1230
+ if (typeof _at !== "object") return;
1265
1231
  const isMainExport = id === ".";
1266
1232
  const trimmedId = isMainExport ? id : id.replace(/^\.\//, "");
1267
1233
  typesVersions[trimmedId] = [_at.types];
@@ -1286,16 +1252,13 @@ var PlugboyWorkspace = class {
1286
1252
  cloned.typesVersions = {
1287
1253
  "*": typesVersions
1288
1254
  };
1289
- if (main)
1290
- cloned.main = main;
1291
- if (mainTypes)
1292
- cloned.types = mainTypes;
1255
+ if (main) cloned.main = main;
1256
+ if (mainTypes) cloned.types = mainTypes;
1293
1257
  const projectPeerDependencies = project?.config.peerDependencies;
1294
1258
  ["dependencies", "devDependencies", "peerDependencies"].forEach(
1295
1259
  (prop) => {
1296
1260
  const deps = cloned[prop];
1297
- if (!deps)
1298
- return;
1261
+ if (!deps) return;
1299
1262
  Object.keys(deps).forEach((dep) => {
1300
1263
  const version = deps[dep];
1301
1264
  if (version.startsWith(WORKSPACE_SPEC_PREFIX)) {
@@ -1369,8 +1332,7 @@ var PlugboyWorkspace = class {
1369
1332
  const { plugins } = this;
1370
1333
  for (const plugin of plugins) {
1371
1334
  const { esbuildPlugins } = plugin;
1372
- if (!esbuildPlugins)
1373
- continue;
1335
+ if (!esbuildPlugins) continue;
1374
1336
  for (const chunk of esbuildPlugins) {
1375
1337
  const esbuildPlugin = (
1376
1338
  // eslint-disable-next-line no-await-in-loop
@@ -1516,8 +1478,7 @@ async function generateWorkspace(workspaceName, cwd = process.cwd()) {
1516
1478
  value: dep
1517
1479
  }))
1518
1480
  });
1519
- if (!deps.length)
1520
- return;
1481
+ if (!deps.length) return;
1521
1482
  return Object.fromEntries(
1522
1483
  deps.map((dep) => [dep, config.peerDependencies[dep]])
1523
1484
  );
@@ -1535,8 +1496,7 @@ async function generateWorkspace(workspaceName, cwd = process.cwd()) {
1535
1496
  };
1536
1497
  })
1537
1498
  });
1538
- if (!deps.length)
1539
- return;
1499
+ if (!deps.length) return;
1540
1500
  return Object.fromEntries(
1541
1501
  deps.map((dep) => [
1542
1502
  `@${project.name}/${dep}`,
@@ -1671,4 +1631,4 @@ export {
1671
1631
  getWorkspace,
1672
1632
  generateWorkspace
1673
1633
  };
1674
- //# sourceMappingURL=chunk-LK4DOUQU.mjs.map
1634
+ //# sourceMappingURL=chunk-R2Q7ZXTD.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/hook.ts","../src/types/dts.ts","../src/types/css.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 { OutputFile } from 'esbuild';\nimport type { Listable } from '../utils';\nimport { WorkspaceSetupContext, WorkspacePackageJson } from './workspace';\nimport type { PlugboyWorkspace, Builder } 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 * Hooks when successful build\n * @param builder - Builder\n * @param outputFiles - List of output files\n *\n * @note\n * The text information contained in outputFiles may have already been rewritten by plugboy and output as files.\n * If you wish to perform text replacement, etc., be sure to do so on the read file.\n *\n * @see {@link OutputFile}\n */\n onSuccess: (builder: Builder, outputFiles: OutputFile[]) => any;\n}\n\nexport function createHooksDefaults(): ResolvedHooks {\n return {\n setupWorkspace: [],\n createWorkspace: [],\n preparePackageJSON: [],\n onSuccess: [],\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","import type { Builder } from '../workspace';\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 * Function to normalize d.ts strings\n * @param dts - Bundled d.ts strings\n * @param builder - Builder\n */\nexport type DTSNormalizer = (\n dts: string,\n builder: Builder,\n) => string | undefined | void | Promise<string | undefined | void>;\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 * list of function to normalize d.ts strings\n */\n normalizers?: DTSNormalizer[];\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 /**\n * list of function to normalize d.ts strings\n */\n normalizers: DTSNormalizer[];\n}\n\nexport function normalizeDTSSettings(\n settings: DTSSettings,\n): NormalizedDTSSettings {\n const {\n inline = false,\n preserveType = [],\n normalizers = [],\n } = settings || {};\n return {\n inline,\n preserveType: preserveType.map(normalizeDTSPreserveTypeSettings),\n normalizers,\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, normalizers } = settings;\n if (inline !== undefined) merged.inline = inline;\n if (preserveType) {\n merged.preserveType = merged.preserveType || [];\n merged.preserveType.push(...preserveType);\n }\n if (normalizers) {\n merged.normalizers = merged.normalizers || [];\n merged.normalizers.push(...normalizers);\n }\n });\n return normalizeDTSSettings(merged);\n}\n","import type { Options } from 'cssnano';\nimport {\n OptimizeLayerOptions,\n OptimizeMediaOptions,\n CombineRulesOptions,\n} from '../postcss';\n\n/**\n * CSS optimization options\n */\nexport interface OptimizeCSSOptions {\n /**\n * Layer optimization options\n *\n * Disable the operation with `false`.\n *\n * @default true\n */\n layer?: OptimizeLayerOptions | boolean;\n /**\n * Media Query Optimization Options\n *\n * Disable the operation with `false`.\n *\n * @default true\n */\n media?: OptimizeMediaOptions | boolean;\n /**\n * Combine rules Options\n *\n * If unset, no optimization is performed\n */\n combineRules?: CombineRulesOptions;\n /**\n * Options for [cssnano](https://cssnano.co/)\n *\n * Disable the operation with `false`.\n *\n * @default { preset: ['default', { normalizeWhitespace: false }] }\n */\n cssnano?: Options | boolean;\n}\n\nexport interface ResolvedOptimizeCSSOptions {\n layer?: OptimizeLayerOptions;\n media?: OptimizeMediaOptions;\n combineRules?: CombineRulesOptions;\n cssnano?: Options;\n}\n\nexport function resolveOptimizeCSSOptions(options: OptimizeCSSOptions) {\n const resolved: ResolvedOptimizeCSSOptions = {};\n const { layer = true, media = true, combineRules, cssnano = true } = options;\n if (layer !== false) {\n resolved.layer = layer === true ? {} : layer;\n }\n if (media !== false) {\n resolved.media = media === true ? {} : media;\n }\n if (combineRules) {\n resolved.combineRules = combineRules;\n }\n if (cssnano !== false) {\n resolved.cssnano =\n cssnano === true\n ? { preset: ['default', { normalizeWhitespace: false }] }\n : cssnano;\n }\n return resolved;\n}\n","import type { Options as TSUpOptions } from 'tsup';\nimport 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 { DTSSettings, NormalizedDTSSettings } from './dts';\nimport { OptimizeCSSOptions } from './css';\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 * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @default true\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS?: OptimizeCSSOptions | boolean;\n}\n\n/**\n * Workspace Configuration\n */\nexport interface ResolvedWorkspaceConfig\n extends Required<\n Omit<\n UserWorkspaceConfig,\n 'entries' | 'hooks' | 'plugins' | 'dts' | 'optimizeCSS' | 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 * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS: OptimizeCSSOptions | false;\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 * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS: OptimizeCSSOptions | false;\n}\n","import type { CompilerOptions } from 'typescript';\nimport { RequiredPackageJSON } from './_utils';\nimport { WorkspacePackageJson } from './workspace';\nimport { UserPluginOption, Plugin } from './plugin';\nimport type { Path } from '../path';\nimport { UserHooks } from './hook';\nimport { DTSSettings } from './dts';\nimport { OptimizeCSSOptions } from './css';\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 * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @default true\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS?: OptimizeCSSOptions | boolean;\n}\n\n/**\n * Project Configuration\n */\n\nexport interface ResolvedProjectConfig\n extends Required<\n Omit<\n UserProjectConfig,\n 'scripts' | 'tsconfig' | 'hooks' | 'plugins' | 'dts' | 'optimizeCSS'\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 * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS: OptimizeCSSOptions | false;\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","/* eslint-disable no-await-in-loop */\nexport 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","/* eslint-disable no-await-in-loop */\nimport 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(settings, 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 // eslint-disable-next-line no-shadow\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 optimizeCSS = true,\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 optimizeCSS: optimizeCSS === true ? {} : optimizeCSS,\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 {\n ignoreProjectConfig = false,\n entries,\n plugins,\n optimizeCSS = true,\n } = userConfig;\n return {\n ...userConfig,\n ignoreProjectConfig,\n entries: resolveRawWorkspaceEntries(entries),\n plugins: await resolveUserPluginOptions(plugins),\n optimizeCSS: optimizeCSS === true ? {} : optimizeCSS,\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","/* eslint-disable no-await-in-loop */\nimport {\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\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) => new Path(path.join(dir, file)));\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 fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { ProjectPackageJson, WorkspacePackageJson } from './types';\nimport {\n findConfig,\n isProjectPackageJson,\n isWorkspacePackageJson,\n} from './utils';\nimport { PACKAGE_JSON_FILENAME } from './constants';\nimport { Path } from './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","/* eslint-disable no-await-in-loop */\nimport { Options, build } from 'tsup';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { OutputFile, Plugin } from 'esbuild';\nimport { glob } from 'glob';\nimport type { Processor, AcceptedPlugin as PostcssPlugin } from 'postcss';\nimport type { PlugboyWorkspace, WorkspaceObjectExport } from './workspace';\nimport {\n TSUP_SYNC_OPTIONS,\n NormalizedDTSPreserveTypeSettings,\n ResolvedOptimizeCSSOptions,\n} from '../types';\nimport { copyDirSync, rmrf } from '../utils';\nimport { emitDTS } from './dts';\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\nfunction safeRemoveCSSMap(cssFilePath: string) {\n const mapFilePath = `${cssFilePath}.map`;\n return fs.rm(mapFilePath, { force: true });\n}\n\nconst SOURCE_MAPPING_URL_COMMENT_RE = /\\/\\*# sourceMappingURL=.+? \\*\\//g;\nconst allLayerDefRe = /(^|\\n)@layer\\s+([a-zA-Z\\d\\-_$. ,]+);/g;\nconst layerDefTrimRe = /((^|\\n)@layer\\s+|;)/g;\n\nasync function getPostcss(\n options: ResolvedOptimizeCSSOptions,\n): Promise<Processor> {\n const { layer, media, combineRules, cssnano } = options;\n const [postcss, _layer, _media, _combineRules, _cssnano] = await Promise.all([\n import('postcss').then((mod) => mod.default),\n layer &&\n import('../postcss/plugins/optimize-layer').then((mod) =>\n mod.OptimizeLayer(layer),\n ),\n media &&\n import('../postcss/plugins/optimize-media').then((mod) =>\n mod.OptimizeMedia(media),\n ),\n combineRules &&\n import('../postcss/plugins/combine-rules').then((mod) =>\n mod.CombineRules(combineRules),\n ),\n cssnano && import('cssnano').then((mod) => mod.default(cssnano)),\n ]);\n const plugins: PostcssPlugin[] = [];\n _layer && plugins.push(_layer);\n _media && plugins.push(_media);\n _combineRules && plugins.push(_combineRules);\n _cssnano && plugins.push(_cssnano);\n\n return postcss(plugins);\n}\n\nexport class Builder {\n readonly workspace: PlugboyWorkspace;\n\n private _tsupOptions?: ResolvedOptions;\n\n private _postcssCache?: Processor;\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 const srcFromDir = path.dirname(from);\n const dtsDir = path.dirname(dtsPath);\n await Promise.all(\n [srcFromDir, dtsDir].map((dir) => fs.mkdir(dir, { recursive: true })),\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 }\n if (link.type === 'css') {\n return this._stubLinkCSS(link.from);\n }\n throw new Error(`non supported type`);\n }),\n );\n await fs.writeFile(\n this.workspace.dirs.dist.join('.stub').value,\n '',\n 'utf-8',\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 // eslint-disable-next-line no-shadow\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, normalizers } = 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 for (const normalizer of normalizers) {\n const _normalized = await normalizer(normalized, this);\n if (_normalized && normalized !== _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('.css')) {\n await this._handleCSSOutput(filePath);\n return;\n }\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 await this.workspace.hooks.onSuccess(this, _outputFiles);\n },\n });\n\n if (this.dts.inline) {\n await this.emitInlineDTS();\n } else {\n await this.normalizeDTSFiles();\n }\n }\n\n async optimizeCSS(cssFilePath: string) {\n const options = this.workspace.optimizeCSSOptions;\n if (!options) return Promise.resolve();\n\n let postcss = this._postcssCache;\n if (!postcss) {\n postcss = await getPostcss(options);\n this._postcssCache = postcss;\n }\n\n function prepare(css: string): string {\n const layerDefs = (() => {\n const matched = css.match(allLayerDefRe);\n if (!matched) return '';\n const layerNames: string[] = [];\n matched.forEach((row) => {\n const trimmed = row.replace(layerDefTrimRe, '');\n const chunks = trimmed.split(',');\n chunks.forEach((chunk) => layerNames.push(chunk.trim()));\n });\n const uniqued = Array.from(new Set(layerNames));\n const def = `@layer ${uniqued.join(', ')};\\n`;\n return def;\n })();\n return (\n layerDefs +\n css\n .replace(allLayerDefRe, '')\n .replace(SOURCE_MAPPING_URL_COMMENT_RE, '')\n );\n }\n\n const css = prepare(await fs.readFile(cssFilePath, 'utf-8'));\n\n const result = await postcss.process(css, { from: cssFilePath });\n await fs.writeFile(cssFilePath, result.css);\n }\n\n private async _handleCSSOutput(cssFilePath: string) {\n await Promise.all([\n this.optimizeCSS(cssFilePath),\n safeRemoveCSSMap(cssFilePath),\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 fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { glob } from 'glob';\nimport { Path } from '../path';\nimport {\n ProjectSetupContext,\n ProjectPackageJson,\n ResolvedProjectConfig,\n UserHooks,\n} from '../types';\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\n /** package.json */\n readonly json: ProjectPackageJson;\n\n /**\n * Project Configuration\n * @see {@link ResolvedProjectConfig}\n */\n readonly config: ResolvedProjectConfig;\n\n /** Names of all packages on which the project depends */\n readonly dependencies: string[];\n\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 // eslint-disable-next-line no-await-in-loop\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 sortPackageJson from 'sort-package-json';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport {\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 ResolvedOptimizeCSSOptions,\n resolveOptimizeCSSOptions,\n} from '../types';\nimport { Path } from '../path';\nimport { WORKSPACE_SPEC_PREFIX, PACKAGE_JSON_FILENAME } from '../constants';\nimport { PlugboyProject, getProject } from '../project';\nimport { Builder } from './builder';\nimport { getWorkspacePackageJson } from '../package';\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\n readonly dir: Path;\n\n readonly config: ResolvedWorkspaceConfig;\n\n readonly project: PlugboyProject | null;\n\n readonly dirs: WorkspaceDirs;\n\n readonly dependencies: string[];\n\n readonly projectDependencies: string[];\n\n readonly meta: WorkspaceMeta;\n\n readonly entry: Record<string, string>;\n\n readonly exports: WorkspaceExport[];\n\n readonly builder: Builder;\n\n readonly plugins: Plugin[];\n\n readonly hooks: BuildedHooks;\n\n readonly dtsFiles: string[] = [];\n\n readonly dts: NormalizedDTSSettings;\n\n readonly optimizeCSSOptions: ResolvedOptimizeCSSOptions | false;\n\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 optimizeCSS,\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 this.optimizeCSSOptions = optimizeCSS\n ? resolveOptimizeCSSOptions(optimizeCSS)\n : false;\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: path.isAbsolute(src) ? src : 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 trimmedId = isMainExport ? id : id.replace(/^\\.\\//, '');\n typesVersions[trimmedId] = [_at.types];\n\n if (isMainExport) {\n main = _at.import.default;\n mainTypes = _at.types;\n }\n });\n\n if (json.exports) {\n const entries = Object.entries(json.exports);\n entries.forEach(([id, at]) => {\n const types = Object.keys(at);\n if (types.length === 1 && types[0] === 'types') {\n _exports[id] = at;\n }\n });\n }\n\n _exports['./*'] = './dist/*';\n\n const originalJSONString = JSON.stringify(json);\n const cloned: typeof json = JSON.parse(originalJSONString);\n cloned.exports = _exports;\n cloned.typesVersions = {\n '*': typesVersions,\n };\n if (main) cloned.main = main;\n if (mainTypes) cloned.types = mainTypes;\n\n // delete cloned.main;\n // delete cloned.types;\n // delete cloned.typesVersions;\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_SPEC_PREFIX)) {\n deps[dep] = `${WORKSPACE_SPEC_PREFIX}^`;\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 toStr = JSON.stringify(sorted, null, 2);\n if (originalJSONString !== toStr) {\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 // eslint-disable-next-line no-await-in-loop\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 let { optimizeCSS } = config;\n if (optimizeCSS !== false && project && project.config.optimizeCSS) {\n optimizeCSS = {\n ...project.config.optimizeCSS,\n ...optimizeCSS,\n };\n }\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 optimizeCSS,\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","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-console */\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport sortPackageJson from 'sort-package-json';\nimport inquirer from 'inquirer';\nimport { getProject } from '../project';\nimport { getWorkspace, syncWorkspacePackageFields } from '../workspace';\nimport { WorkspacePackageJson, ProjectScriptsTemplate } from '../types';\nimport { WORKSPACE_CONFIG_BASENAME, WORKSPACE_SPEC_PREFIX } from '../constants';\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 name: dep,\n value: dep,\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) => [\n `@${project.name}/${dep}`,\n `${WORKSPACE_SPEC_PREFIX}^`,\n ]),\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('Skipped.');\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 = `${`\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","path","bundleRequire","bundleRequire","path","fs","path","fs","fs","path","path","fs","fs","path","glob","path","fs","path","pkg","glob","css","fs","path","glob","glob","fs","path","fs","path","path","fs","build","path","fs","sortPackageJson","path","sortPackageJson","fs"]}
1
+ {"version":3,"sources":["../src/types/hook.ts","../src/types/dts.ts","../src/types/css.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 { OutputFile } from 'esbuild';\nimport type { Listable } from '../utils';\nimport { WorkspaceSetupContext, WorkspacePackageJson } from './workspace';\nimport type { PlugboyWorkspace, Builder } 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 * Hooks when successful build\n * @param builder - Builder\n * @param outputFiles - List of output files\n *\n * @note\n * The text information contained in outputFiles may have already been rewritten by plugboy and output as files.\n * If you wish to perform text replacement, etc., be sure to do so on the read file.\n *\n * @see {@link OutputFile}\n */\n onSuccess: (builder: Builder, outputFiles: OutputFile[]) => any;\n}\n\nexport function createHooksDefaults(): ResolvedHooks {\n return {\n setupWorkspace: [],\n createWorkspace: [],\n preparePackageJSON: [],\n onSuccess: [],\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","import type { Builder } from '../workspace';\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 * Function to normalize d.ts strings\n * @param dts - Bundled d.ts strings\n * @param builder - Builder\n */\nexport type DTSNormalizer = (\n dts: string,\n builder: Builder,\n) => string | undefined | void | Promise<string | undefined | void>;\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 * list of function to normalize d.ts strings\n */\n normalizers?: DTSNormalizer[];\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 /**\n * list of function to normalize d.ts strings\n */\n normalizers: DTSNormalizer[];\n}\n\nexport function normalizeDTSSettings(\n settings: DTSSettings,\n): NormalizedDTSSettings {\n const {\n inline = false,\n preserveType = [],\n normalizers = [],\n } = settings || {};\n return {\n inline,\n preserveType: preserveType.map(normalizeDTSPreserveTypeSettings),\n normalizers,\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, normalizers } = settings;\n if (inline !== undefined) merged.inline = inline;\n if (preserveType) {\n merged.preserveType = merged.preserveType || [];\n merged.preserveType.push(...preserveType);\n }\n if (normalizers) {\n merged.normalizers = merged.normalizers || [];\n merged.normalizers.push(...normalizers);\n }\n });\n return normalizeDTSSettings(merged);\n}\n","import type { Options } from 'cssnano';\nimport {\n OptimizeLayerOptions,\n OptimizeMediaOptions,\n CombineRulesOptions,\n} from '../postcss';\n\n/**\n * CSS optimization options\n */\nexport interface OptimizeCSSOptions {\n /**\n * Layer optimization options\n *\n * Disable the operation with `false`.\n *\n * @default true\n */\n layer?: OptimizeLayerOptions | boolean;\n /**\n * Media Query Optimization Options\n *\n * Disable the operation with `false`.\n *\n * @default true\n */\n media?: OptimizeMediaOptions | boolean;\n /**\n * Combine rules Options\n *\n * If unset, no optimization is performed\n */\n combineRules?: CombineRulesOptions;\n /**\n * Options for [cssnano](https://cssnano.co/)\n *\n * Disable the operation with `false`.\n *\n * @default { preset: ['default', { normalizeWhitespace: false }] }\n */\n cssnano?: Options | boolean;\n}\n\nexport interface ResolvedOptimizeCSSOptions {\n layer?: OptimizeLayerOptions;\n media?: OptimizeMediaOptions;\n combineRules?: CombineRulesOptions;\n cssnano?: Options;\n}\n\nexport function resolveOptimizeCSSOptions(options: OptimizeCSSOptions) {\n const resolved: ResolvedOptimizeCSSOptions = {};\n const { layer = true, media = true, combineRules, cssnano = true } = options;\n if (layer !== false) {\n resolved.layer = layer === true ? {} : layer;\n }\n if (media !== false) {\n resolved.media = media === true ? {} : media;\n }\n if (combineRules) {\n resolved.combineRules = combineRules;\n }\n if (cssnano !== false) {\n resolved.cssnano =\n cssnano === true\n ? { preset: ['default', { normalizeWhitespace: false }] }\n : cssnano;\n }\n return resolved;\n}\n","import type { Options as TSUpOptions } from 'tsup';\nimport 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 { DTSSettings, NormalizedDTSSettings } from './dts';\nimport { OptimizeCSSOptions } from './css';\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 * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @default true\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS?: OptimizeCSSOptions | boolean;\n}\n\n/**\n * Workspace Configuration\n */\nexport interface ResolvedWorkspaceConfig\n extends Required<\n Omit<\n UserWorkspaceConfig,\n 'entries' | 'hooks' | 'plugins' | 'dts' | 'optimizeCSS' | 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 * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS: OptimizeCSSOptions | false;\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 * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS: OptimizeCSSOptions | false;\n}\n","import type { CompilerOptions } from 'typescript';\nimport { RequiredPackageJSON } from './_utils';\nimport { WorkspacePackageJson } from './workspace';\nimport { UserPluginOption, Plugin } from './plugin';\nimport type { Path } from '../path';\nimport { UserHooks } from './hook';\nimport { DTSSettings } from './dts';\nimport { OptimizeCSSOptions } from './css';\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 * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @default true\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS?: OptimizeCSSOptions | boolean;\n}\n\n/**\n * Project Configuration\n */\n\nexport interface ResolvedProjectConfig\n extends Required<\n Omit<\n UserProjectConfig,\n 'scripts' | 'tsconfig' | 'hooks' | 'plugins' | 'dts' | 'optimizeCSS'\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 * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS: OptimizeCSSOptions | false;\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","/* eslint-disable no-await-in-loop */\nexport 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","/* eslint-disable no-await-in-loop */\nimport 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(settings, 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 // eslint-disable-next-line no-shadow\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 optimizeCSS = true,\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 optimizeCSS: optimizeCSS === true ? {} : optimizeCSS,\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 {\n ignoreProjectConfig = false,\n entries,\n plugins,\n optimizeCSS = true,\n } = userConfig;\n return {\n ...userConfig,\n ignoreProjectConfig,\n entries: resolveRawWorkspaceEntries(entries),\n plugins: await resolveUserPluginOptions(plugins),\n optimizeCSS: optimizeCSS === true ? {} : optimizeCSS,\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","/* eslint-disable no-await-in-loop */\nimport {\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\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) => new Path(path.join(dir, file)));\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 fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { ProjectPackageJson, WorkspacePackageJson } from './types';\nimport {\n findConfig,\n isProjectPackageJson,\n isWorkspacePackageJson,\n} from './utils';\nimport { PACKAGE_JSON_FILENAME } from './constants';\nimport { Path } from './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","/* eslint-disable no-await-in-loop */\nimport { Options, build } from 'tsup';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { OutputFile, Plugin } from 'esbuild';\nimport { glob } from 'glob';\nimport type { Processor, AcceptedPlugin as PostcssPlugin } from 'postcss';\nimport type { PlugboyWorkspace, WorkspaceObjectExport } from './workspace';\nimport {\n TSUP_SYNC_OPTIONS,\n NormalizedDTSPreserveTypeSettings,\n ResolvedOptimizeCSSOptions,\n} from '../types';\nimport { copyDirSync, rmrf } from '../utils';\nimport { emitDTS } from './dts';\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\nfunction safeRemoveCSSMap(cssFilePath: string) {\n const mapFilePath = `${cssFilePath}.map`;\n return fs.rm(mapFilePath, { force: true });\n}\n\nconst SOURCE_MAPPING_URL_COMMENT_RE = /\\/\\*# sourceMappingURL=.+? \\*\\//g;\nconst allLayerDefRe = /(^|\\n)@layer\\s+([a-zA-Z\\d\\-_$. ,]+);/g;\nconst layerDefTrimRe = /((^|\\n)@layer\\s+|;)/g;\n\nasync function getPostcss(\n options: ResolvedOptimizeCSSOptions,\n): Promise<Processor> {\n const { layer, media, combineRules, cssnano } = options;\n const [postcss, _layer, _media, _combineRules, _cssnano] = await Promise.all([\n import('postcss').then((mod) => mod.default),\n layer &&\n import('../postcss/plugins/optimize-layer').then((mod) =>\n mod.OptimizeLayer(layer),\n ),\n media &&\n import('../postcss/plugins/optimize-media').then((mod) =>\n mod.OptimizeMedia(media),\n ),\n combineRules &&\n import('../postcss/plugins/combine-rules').then((mod) =>\n mod.CombineRules(combineRules),\n ),\n cssnano && import('cssnano').then((mod) => mod.default(cssnano)),\n ]);\n const plugins: PostcssPlugin[] = [];\n _layer && plugins.push(_layer);\n _media && plugins.push(_media);\n _combineRules && plugins.push(_combineRules);\n _cssnano && plugins.push(_cssnano);\n\n return postcss(plugins);\n}\n\nexport class Builder {\n readonly workspace: PlugboyWorkspace;\n\n private _tsupOptions?: ResolvedOptions;\n\n private _postcssCache?: Processor;\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 const srcFromDir = path.dirname(from);\n const dtsDir = path.dirname(dtsPath);\n await Promise.all(\n [srcFromDir, dtsDir].map((dir) => fs.mkdir(dir, { recursive: true })),\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 }\n if (link.type === 'css') {\n return this._stubLinkCSS(link.from);\n }\n throw new Error(`non supported type`);\n }),\n );\n await fs.writeFile(\n this.workspace.dirs.dist.join('.stub').value,\n '',\n 'utf-8',\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 // eslint-disable-next-line no-shadow\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, normalizers } = 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 for (const normalizer of normalizers) {\n const _normalized = await normalizer(normalized, this);\n if (_normalized && normalized !== _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('.css')) {\n await this._handleCSSOutput(filePath);\n return;\n }\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 await this.workspace.hooks.onSuccess(this, _outputFiles);\n },\n });\n\n if (this.dts.inline) {\n await this.emitInlineDTS();\n } else {\n await this.normalizeDTSFiles();\n }\n }\n\n async optimizeCSS(cssFilePath: string) {\n const options = this.workspace.optimizeCSSOptions;\n if (!options) return Promise.resolve();\n\n let postcss = this._postcssCache;\n if (!postcss) {\n postcss = await getPostcss(options);\n this._postcssCache = postcss;\n }\n\n function prepare(css: string): string {\n const layerDefs = (() => {\n const matched = css.match(allLayerDefRe);\n if (!matched) return '';\n const layerNames: string[] = [];\n matched.forEach((row) => {\n const trimmed = row.replace(layerDefTrimRe, '');\n const chunks = trimmed.split(',');\n chunks.forEach((chunk) => layerNames.push(chunk.trim()));\n });\n const uniqued = Array.from(new Set(layerNames));\n const def = `@layer ${uniqued.join(', ')};\\n`;\n return def;\n })();\n return (\n layerDefs +\n css\n .replace(allLayerDefRe, '')\n .replace(SOURCE_MAPPING_URL_COMMENT_RE, '')\n );\n }\n\n const css = prepare(await fs.readFile(cssFilePath, 'utf-8'));\n\n const result = await postcss.process(css, { from: cssFilePath });\n await fs.writeFile(cssFilePath, result.css);\n }\n\n private async _handleCSSOutput(cssFilePath: string) {\n await Promise.all([\n this.optimizeCSS(cssFilePath),\n safeRemoveCSSMap(cssFilePath),\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 fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { glob } from 'glob';\nimport { Path } from '../path';\nimport {\n ProjectSetupContext,\n ProjectPackageJson,\n ResolvedProjectConfig,\n UserHooks,\n} from '../types';\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\n /** package.json */\n readonly json: ProjectPackageJson;\n\n /**\n * Project Configuration\n * @see {@link ResolvedProjectConfig}\n */\n readonly config: ResolvedProjectConfig;\n\n /** Names of all packages on which the project depends */\n readonly dependencies: string[];\n\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 // eslint-disable-next-line no-await-in-loop\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 sortPackageJson from 'sort-package-json';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport {\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 ResolvedOptimizeCSSOptions,\n resolveOptimizeCSSOptions,\n} from '../types';\nimport { Path } from '../path';\nimport { WORKSPACE_SPEC_PREFIX, PACKAGE_JSON_FILENAME } from '../constants';\nimport { PlugboyProject, getProject } from '../project';\nimport { Builder } from './builder';\nimport { getWorkspacePackageJson } from '../package';\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\n readonly dir: Path;\n\n readonly config: ResolvedWorkspaceConfig;\n\n readonly project: PlugboyProject | null;\n\n readonly dirs: WorkspaceDirs;\n\n readonly dependencies: string[];\n\n readonly projectDependencies: string[];\n\n readonly meta: WorkspaceMeta;\n\n readonly entry: Record<string, string>;\n\n readonly exports: WorkspaceExport[];\n\n readonly builder: Builder;\n\n readonly plugins: Plugin[];\n\n readonly hooks: BuildedHooks;\n\n readonly dtsFiles: string[] = [];\n\n readonly dts: NormalizedDTSSettings;\n\n readonly optimizeCSSOptions: ResolvedOptimizeCSSOptions | false;\n\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 optimizeCSS,\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 this.optimizeCSSOptions = optimizeCSS\n ? resolveOptimizeCSSOptions(optimizeCSS)\n : false;\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: path.isAbsolute(src) ? src : 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 trimmedId = isMainExport ? id : id.replace(/^\\.\\//, '');\n typesVersions[trimmedId] = [_at.types];\n\n if (isMainExport) {\n main = _at.import.default;\n mainTypes = _at.types;\n }\n });\n\n if (json.exports) {\n const entries = Object.entries(json.exports);\n entries.forEach(([id, at]) => {\n const types = Object.keys(at);\n if (types.length === 1 && types[0] === 'types') {\n _exports[id] = at;\n }\n });\n }\n\n _exports['./*'] = './dist/*';\n\n const originalJSONString = JSON.stringify(json);\n const cloned: typeof json = JSON.parse(originalJSONString);\n cloned.exports = _exports;\n cloned.typesVersions = {\n '*': typesVersions,\n };\n if (main) cloned.main = main;\n if (mainTypes) cloned.types = mainTypes;\n\n // delete cloned.main;\n // delete cloned.types;\n // delete cloned.typesVersions;\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_SPEC_PREFIX)) {\n deps[dep] = `${WORKSPACE_SPEC_PREFIX}^`;\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 toStr = JSON.stringify(sorted, null, 2);\n if (originalJSONString !== toStr) {\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 // eslint-disable-next-line no-await-in-loop\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 let { optimizeCSS } = config;\n if (optimizeCSS !== false && project && project.config.optimizeCSS) {\n optimizeCSS = {\n ...project.config.optimizeCSS,\n ...optimizeCSS,\n };\n }\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 optimizeCSS,\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","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-console */\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport sortPackageJson from 'sort-package-json';\nimport inquirer from 'inquirer';\nimport { getProject } from '../project';\nimport { getWorkspace, syncWorkspacePackageFields } from '../workspace';\nimport { WorkspacePackageJson, ProjectScriptsTemplate } from '../types';\nimport { WORKSPACE_CONFIG_BASENAME, WORKSPACE_SPEC_PREFIX } from '../constants';\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 name: dep,\n value: dep,\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) => [\n `@${project.name}/${dep}`,\n `${WORKSPACE_SPEC_PREFIX}^`,\n ]),\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('Skipped.');\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 = `${`\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","path","bundleRequire","bundleRequire","path","fs","path","fs","fs","path","path","fs","fs","path","glob","path","fs","path","pkg","glob","css","fs","path","glob","glob","fs","path","fs","path","path","fs","build","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-LK4DOUQU.mjs";
4
+ } from "./chunk-R2Q7ZXTD.mjs";
5
5
 
6
6
  // src/cli.ts
7
7
  import { cac } from "cac";
@@ -9,7 +9,7 @@ import { cac } from "cac";
9
9
  // package.json
10
10
  var package_default = {
11
11
  name: "@fastkit/plugboy",
12
- version: "0.2.3",
12
+ version: "0.2.5",
13
13
  description: "",
14
14
  keywords: [],
15
15
  repository: {
@@ -80,16 +80,16 @@ var package_default = {
80
80
  test: "vitest run"
81
81
  },
82
82
  dependencies: {
83
- "bundle-require": "^4.1.0",
83
+ "bundle-require": "^5.0.0",
84
84
  cac: "^6.7.14",
85
- cssnano: "^6.1.2",
86
- esbuild: "^0.19.12",
87
- execa: "^8.0.1",
85
+ cssnano: "^7.0.2",
86
+ esbuild: "^0.21.5",
87
+ execa: "^9.2.0",
88
88
  glob: "^10.4.1",
89
89
  inquirer: "^9.2.23",
90
90
  "pkg-types": "^1.1.1",
91
91
  "sort-package-json": "^2.10.0",
92
- tsup: "^8.0.2"
92
+ tsup: "^8.1.0"
93
93
  },
94
94
  devDependencies: {
95
95
  "@types/inquirer": "^9.0.7"
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 \"version\": \"0.2.3\",\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 \"types\": \"./dist/dependencies/bundle-require.d.ts\"\n },\n \"./dependencies/cac\": {\n \"import\": \"./dist/dependencies/cac.mjs\",\n \"types\": \"./dist/dependencies/cac.d.ts\"\n },\n \"./dependencies/esbuild\": {\n \"import\": \"./dist/dependencies/esbuild.mjs\",\n \"types\": \"./dist/dependencies/esbuild.d.ts\"\n },\n \"./dependencies/glob\": {\n \"import\": \"./dist/dependencies/glob.mjs\",\n \"types\": \"./dist/dependencies/glob.d.ts\"\n },\n \"./dependencies/inquirer\": {\n \"import\": \"./dist/dependencies/inquirer.mjs\",\n \"types\": \"./dist/dependencies/inquirer.d.ts\"\n },\n \"./dependencies/pkg-types\": {\n \"import\": \"./dist/dependencies/pkg-types.mjs\",\n \"types\": \"./dist/dependencies/pkg-types.d.ts\"\n },\n \"./dependencies/sort-package-json\": {\n \"import\": \"./dist/dependencies/sort-package-json.mjs\",\n \"types\": \"./dist/dependencies/sort-package-json.d.ts\"\n },\n \"./dependencies/tsup\": {\n \"import\": \"./dist/dependencies/tsup.mjs\",\n \"types\": \"./dist/dependencies/tsup.d.ts\"\n },\n \"./env\": {\n \"types\": \"./env.d.ts\"\n },\n \".\": {\n \"import\": \"./dist/plugboy.mjs\",\n \"types\": \"./dist/plugboy.d.ts\"\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.1.0\",\n \"cac\": \"^6.7.14\",\n \"cssnano\": \"^6.1.2\",\n \"esbuild\": \"^0.19.12\",\n \"execa\": \"^8.0.1\",\n \"glob\": \"^10.4.1\",\n \"inquirer\": \"^9.2.23\",\n \"pkg-types\": \"^1.1.1\",\n \"sort-package-json\": \"^2.10.0\",\n \"tsup\": \"^8.0.2\"\n },\n \"devDependencies\": {\n \"@types/inquirer\": \"^9.0.7\"\n }\n}\n"],"mappings":";;;;;;AAAA,SAAS,WAAW;;;ACApB;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,UAAY,CAAC;AAAA,EACb,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,SAAW;AAAA,EACX,QAAU;AAAA,EACV,MAAQ;AAAA,EACR,SAAW;AAAA,IACT,kBAAkB;AAAA,IAClB,iCAAiC;AAAA,MAC/B,QAAU;AAAA,MACV,OAAS;AAAA,IACX;AAAA,IACA,sBAAsB;AAAA,MACpB,QAAU;AAAA,MACV,OAAS;AAAA,IACX;AAAA,IACA,0BAA0B;AAAA,MACxB,QAAU;AAAA,MACV,OAAS;AAAA,IACX;AAAA,IACA,uBAAuB;AAAA,MACrB,QAAU;AAAA,MACV,OAAS;AAAA,IACX;AAAA,IACA,2BAA2B;AAAA,MACzB,QAAU;AAAA,MACV,OAAS;AAAA,IACX;AAAA,IACA,4BAA4B;AAAA,MAC1B,QAAU;AAAA,MACV,OAAS;AAAA,IACX;AAAA,IACA,oCAAoC;AAAA,MAClC,QAAU;AAAA,MACV,OAAS;AAAA,IACX;AAAA,IACA,uBAAuB;AAAA,MACrB,QAAU;AAAA,MACV,OAAS;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACP,OAAS;AAAA,IACX;AAAA,IACA,KAAK;AAAA,MACH,QAAU;AAAA,MACV,OAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,KAAO;AAAA,IACL,SAAW;AAAA,EACb;AAAA,EACA,OAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,IACT,OAAS;AAAA,IACT,QAAU;AAAA,IACV,cAAc;AAAA,IACd,MAAQ;AAAA,IACR,QAAU;AAAA,IACV,WAAa;AAAA,IACb,MAAQ;AAAA,EACV;AAAA,EACA,cAAgB;AAAA,IACd,kBAAkB;AAAA,IAClB,KAAO;AAAA,IACP,SAAW;AAAA,IACX,SAAW;AAAA,IACX,OAAS;AAAA,IACT,MAAQ;AAAA,IACR,UAAY;AAAA,IACZ,aAAa;AAAA,IACb,qBAAqB;AAAA,IACrB,MAAQ;AAAA,EACV;AAAA,EACA,iBAAmB;AAAA,IACjB,mBAAmB;AAAA,EACrB;AACF;;;ADnFA,eAAsB,OAAO;AAC3B,QAAM,MAAM,IAAI,SAAS;AACzB,MAAI,QAAQ,gBAAI,OAAO;AAEvB,MACG,QAAQ,QAAQ,2CAA2C,EAC3D,OAAO,OAAO,OAAO,YAAY;AAChC,UAAM,YAAY,MAAM,aAAa;AACrC,UAAM,UAAU,mBAAmB;AAAA,EACrC,CAAC;AAEH,MACG,QAAQ,QAAQ,sDAAsD,EACtE,OAAO,OAAO,OAAO,YAAY;AAChC,UAAM,YAAY,MAAM,aAAa;AACrC,UAAM,UAAU,mBAAmB;AACnC,UAAM,UAAU,KAAK;AAAA,EACvB,CAAC;AAEH,MACG;AAAA,IACC;AAAA,IACA;AAAA,EACF,EACC,OAAO,OAAO,OAAO,YAAY;AAChC,UAAM,YAAY,MAAM,aAAa;AACrC,UAAM,UAAU,mBAAmB;AACnC,UAAM,UAAU,MAAM;AAAA,EACxB,CAAC;AAEH,MACG,QAAQ,SAAS,sDAAsD,EACvE,OAAO,OAAO,OAAO,YAAY;AAChC,UAAM,YAAY,MAAM,aAAa;AACrC,UAAM,UAAU,mBAAmB;AACnC,UAAM,UAAU,MAAM;AAAA,EACxB,CAAC;AAEH,MACG;AAAA,IACC;AAAA,IACA;AAAA,EACF,EACC,MAAM,KAAK,EACX,OAAO,OAAO,eAAmC,YAAY;AAC5D,UAAM,kBAAkB,aAAa;AAAA,EACvC,CAAC;AAEH,MAAI,KAAK;AACT,MAAI,MAAM;AACZ;AAEA,KAAK;","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.2.5\",\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 \"types\": \"./dist/dependencies/bundle-require.d.ts\"\n },\n \"./dependencies/cac\": {\n \"import\": \"./dist/dependencies/cac.mjs\",\n \"types\": \"./dist/dependencies/cac.d.ts\"\n },\n \"./dependencies/esbuild\": {\n \"import\": \"./dist/dependencies/esbuild.mjs\",\n \"types\": \"./dist/dependencies/esbuild.d.ts\"\n },\n \"./dependencies/glob\": {\n \"import\": \"./dist/dependencies/glob.mjs\",\n \"types\": \"./dist/dependencies/glob.d.ts\"\n },\n \"./dependencies/inquirer\": {\n \"import\": \"./dist/dependencies/inquirer.mjs\",\n \"types\": \"./dist/dependencies/inquirer.d.ts\"\n },\n \"./dependencies/pkg-types\": {\n \"import\": \"./dist/dependencies/pkg-types.mjs\",\n \"types\": \"./dist/dependencies/pkg-types.d.ts\"\n },\n \"./dependencies/sort-package-json\": {\n \"import\": \"./dist/dependencies/sort-package-json.mjs\",\n \"types\": \"./dist/dependencies/sort-package-json.d.ts\"\n },\n \"./dependencies/tsup\": {\n \"import\": \"./dist/dependencies/tsup.mjs\",\n \"types\": \"./dist/dependencies/tsup.d.ts\"\n },\n \"./env\": {\n \"types\": \"./env.d.ts\"\n },\n \".\": {\n \"import\": \"./dist/plugboy.mjs\",\n \"types\": \"./dist/plugboy.d.ts\"\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\": \"^5.0.0\",\n \"cac\": \"^6.7.14\",\n \"cssnano\": \"^7.0.2\",\n \"esbuild\": \"^0.21.5\",\n \"execa\": \"^9.2.0\",\n \"glob\": \"^10.4.1\",\n \"inquirer\": \"^9.2.23\",\n \"pkg-types\": \"^1.1.1\",\n \"sort-package-json\": \"^2.10.0\",\n \"tsup\": \"^8.1.0\"\n },\n \"devDependencies\": {\n \"@types/inquirer\": \"^9.0.7\"\n }\n}\n"],"mappings":"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","names":[]}
@@ -2,20 +2,17 @@
2
2
  import postcss, { Root } from "postcss";
3
3
  function buildFilterFn(spec) {
4
4
  return (rule) => {
5
- if (typeof spec === "function")
6
- return spec(rule);
5
+ if (typeof spec === "function") return spec(rule);
7
6
  const { selector } = rule;
8
7
  return spec.some((target) => {
9
- if (typeof target === "string")
10
- return selector === target;
8
+ if (typeof target === "string") return selector === target;
11
9
  return target.test(selector);
12
10
  });
13
11
  };
14
12
  }
15
13
  function combineContainerRules(container, filter) {
16
14
  const { nodes } = container;
17
- if (!nodes)
18
- return;
15
+ if (!nodes) return;
19
16
  const rules = nodes.filter(filter);
20
17
  const combinedRules = [];
21
18
  rules.forEach((rule) => {
@@ -33,11 +30,9 @@ function combineContainerRules(container, filter) {
33
30
  });
34
31
  combinedRules.forEach((combinedRule) => {
35
32
  combinedRule.rules.forEach((rule, index) => {
36
- if (index === 0)
37
- return;
33
+ if (index === 0) return;
38
34
  const { nodes: nodes2 } = rule;
39
- if (!nodes2)
40
- return;
35
+ if (!nodes2) return;
41
36
  nodes2.forEach((node) => {
42
37
  combinedRule.container.append(node.clone());
43
38
  });
@@ -71,4 +66,4 @@ export {
71
66
  combineRules,
72
67
  combine_rules_default as default
73
68
  };
74
- //# sourceMappingURL=combine-rules-2FWRSWQP.mjs.map
69
+ //# sourceMappingURL=combine-rules-2CRG6D4B.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/postcss/plugins/combine-rules.ts"],"sourcesContent":["import postcss, { Plugin, Root, Container, Rule } from 'postcss';\n\nexport type RuleFilter = string | RegExp;\n\nexport type RuleSpecFn = (rule: Rule) => boolean;\n\nexport type RuleSpec = RuleFilter[] | RuleSpecFn;\n\nexport interface CombineRulesOptions {\n rules: RuleSpec;\n}\n\nfunction buildFilterFn(spec: RuleSpec): RuleSpecFn {\n return (rule) => {\n if (typeof spec === 'function') return spec(rule);\n const { selector } = rule;\n return spec.some((target) => {\n if (typeof target === 'string') return selector === target;\n return target.test(selector);\n });\n };\n}\n\nexport function combineContainerRules(\n container: Container,\n filter: RuleSpecFn,\n) {\n const { nodes } = container;\n if (!nodes) return;\n\n const rules: Rule[] = (nodes as Rule[]).filter(filter);\n const combinedRules: { selector: string; rules: Rule[]; container: Rule }[] =\n [];\n rules.forEach((rule) => {\n const { selector } = rule;\n let combinedRule = combinedRules.find((c) => c.selector === selector);\n if (!combinedRule) {\n combinedRule = {\n selector,\n rules: [],\n container: rule,\n };\n combinedRules.push(combinedRule);\n }\n combinedRule.rules.push(rule);\n });\n\n combinedRules.forEach((combinedRule) => {\n combinedRule.rules.forEach((rule, index) => {\n if (index === 0) return;\n // eslint-disable-next-line no-shadow\n const { nodes } = rule;\n if (!nodes) return;\n nodes.forEach((node) => {\n combinedRule.container.append(node.clone());\n });\n rule.remove();\n });\n });\n}\n\nexport function combineRules(\n css: string | { toString(): string } | Root,\n opts: CombineRulesOptions,\n): Root {\n const root = css instanceof Root ? css : postcss.parse(css);\n const filter = buildFilterFn(opts.rules);\n combineContainerRules(root, filter);\n root.walkAtRules((atRule) => {\n combineContainerRules(atRule, filter);\n });\n return root;\n}\n\nconst PLUGIN_NAME = 'combine-rules';\n\nexport function CombineRules(opts: CombineRulesOptions): Plugin {\n return {\n postcssPlugin: PLUGIN_NAME,\n Once(root) {\n combineRules(root, opts);\n },\n };\n}\n\nCombineRules.postcss = true;\n\nexport default CombineRules;\n"],"mappings":";AAAA,OAAO,WAAmB,YAA6B;AAYvD,SAAS,cAAc,MAA4B;AACjD,SAAO,CAAC,SAAS;AACf,QAAI,OAAO,SAAS;AAAY,aAAO,KAAK,IAAI;AAChD,UAAM,EAAE,SAAS,IAAI;AACrB,WAAO,KAAK,KAAK,CAAC,WAAW;AAC3B,UAAI,OAAO,WAAW;AAAU,eAAO,aAAa;AACpD,aAAO,OAAO,KAAK,QAAQ;AAAA,IAC7B,CAAC;AAAA,EACH;AACF;AAEO,SAAS,sBACd,WACA,QACA;AACA,QAAM,EAAE,MAAM,IAAI;AAClB,MAAI,CAAC;AAAO;AAEZ,QAAM,QAAiB,MAAiB,OAAO,MAAM;AACrD,QAAM,gBACJ,CAAC;AACH,QAAM,QAAQ,CAAC,SAAS;AACtB,UAAM,EAAE,SAAS,IAAI;AACrB,QAAI,eAAe,cAAc,KAAK,CAAC,MAAM,EAAE,aAAa,QAAQ;AACpE,QAAI,CAAC,cAAc;AACjB,qBAAe;AAAA,QACb;AAAA,QACA,OAAO,CAAC;AAAA,QACR,WAAW;AAAA,MACb;AACA,oBAAc,KAAK,YAAY;AAAA,IACjC;AACA,iBAAa,MAAM,KAAK,IAAI;AAAA,EAC9B,CAAC;AAED,gBAAc,QAAQ,CAAC,iBAAiB;AACtC,iBAAa,MAAM,QAAQ,CAAC,MAAM,UAAU;AAC1C,UAAI,UAAU;AAAG;AAEjB,YAAM,EAAE,OAAAA,OAAM,IAAI;AAClB,UAAI,CAACA;AAAO;AACZ,MAAAA,OAAM,QAAQ,CAAC,SAAS;AACtB,qBAAa,UAAU,OAAO,KAAK,MAAM,CAAC;AAAA,MAC5C,CAAC;AACD,WAAK,OAAO;AAAA,IACd,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,aACd,KACA,MACM;AACN,QAAM,OAAO,eAAe,OAAO,MAAM,QAAQ,MAAM,GAAG;AAC1D,QAAM,SAAS,cAAc,KAAK,KAAK;AACvC,wBAAsB,MAAM,MAAM;AAClC,OAAK,YAAY,CAAC,WAAW;AAC3B,0BAAsB,QAAQ,MAAM;AAAA,EACtC,CAAC;AACD,SAAO;AACT;AAEA,IAAM,cAAc;AAEb,SAAS,aAAa,MAAmC;AAC9D,SAAO;AAAA,IACL,eAAe;AAAA,IACf,KAAK,MAAM;AACT,mBAAa,MAAM,IAAI;AAAA,IACzB;AAAA,EACF;AACF;AAEA,aAAa,UAAU;AAEvB,IAAO,wBAAQ;","names":["nodes"]}
1
+ {"version":3,"sources":["../src/postcss/plugins/combine-rules.ts"],"sourcesContent":["import postcss, { Plugin, Root, Container, Rule } from 'postcss';\n\nexport type RuleFilter = string | RegExp;\n\nexport type RuleSpecFn = (rule: Rule) => boolean;\n\nexport type RuleSpec = RuleFilter[] | RuleSpecFn;\n\nexport interface CombineRulesOptions {\n rules: RuleSpec;\n}\n\nfunction buildFilterFn(spec: RuleSpec): RuleSpecFn {\n return (rule) => {\n if (typeof spec === 'function') return spec(rule);\n const { selector } = rule;\n return spec.some((target) => {\n if (typeof target === 'string') return selector === target;\n return target.test(selector);\n });\n };\n}\n\nexport function combineContainerRules(\n container: Container,\n filter: RuleSpecFn,\n) {\n const { nodes } = container;\n if (!nodes) return;\n\n const rules: Rule[] = (nodes as Rule[]).filter(filter);\n const combinedRules: { selector: string; rules: Rule[]; container: Rule }[] =\n [];\n rules.forEach((rule) => {\n const { selector } = rule;\n let combinedRule = combinedRules.find((c) => c.selector === selector);\n if (!combinedRule) {\n combinedRule = {\n selector,\n rules: [],\n container: rule,\n };\n combinedRules.push(combinedRule);\n }\n combinedRule.rules.push(rule);\n });\n\n combinedRules.forEach((combinedRule) => {\n combinedRule.rules.forEach((rule, index) => {\n if (index === 0) return;\n // eslint-disable-next-line no-shadow\n const { nodes } = rule;\n if (!nodes) return;\n nodes.forEach((node) => {\n combinedRule.container.append(node.clone());\n });\n rule.remove();\n });\n });\n}\n\nexport function combineRules(\n css: string | { toString(): string } | Root,\n opts: CombineRulesOptions,\n): Root {\n const root = css instanceof Root ? css : postcss.parse(css);\n const filter = buildFilterFn(opts.rules);\n combineContainerRules(root, filter);\n root.walkAtRules((atRule) => {\n combineContainerRules(atRule, filter);\n });\n return root;\n}\n\nconst PLUGIN_NAME = 'combine-rules';\n\nexport function CombineRules(opts: CombineRulesOptions): Plugin {\n return {\n postcssPlugin: PLUGIN_NAME,\n Once(root) {\n combineRules(root, opts);\n },\n };\n}\n\nCombineRules.postcss = true;\n\nexport default CombineRules;\n"],"mappings":";AAAA,OAAO,WAAmB,YAA6B;AAYvD,SAAS,cAAc,MAA4B;AACjD,SAAO,CAAC,SAAS;AACf,QAAI,OAAO,SAAS,WAAY,QAAO,KAAK,IAAI;AAChD,UAAM,EAAE,SAAS,IAAI;AACrB,WAAO,KAAK,KAAK,CAAC,WAAW;AAC3B,UAAI,OAAO,WAAW,SAAU,QAAO,aAAa;AACpD,aAAO,OAAO,KAAK,QAAQ;AAAA,IAC7B,CAAC;AAAA,EACH;AACF;AAEO,SAAS,sBACd,WACA,QACA;AACA,QAAM,EAAE,MAAM,IAAI;AAClB,MAAI,CAAC,MAAO;AAEZ,QAAM,QAAiB,MAAiB,OAAO,MAAM;AACrD,QAAM,gBACJ,CAAC;AACH,QAAM,QAAQ,CAAC,SAAS;AACtB,UAAM,EAAE,SAAS,IAAI;AACrB,QAAI,eAAe,cAAc,KAAK,CAAC,MAAM,EAAE,aAAa,QAAQ;AACpE,QAAI,CAAC,cAAc;AACjB,qBAAe;AAAA,QACb;AAAA,QACA,OAAO,CAAC;AAAA,QACR,WAAW;AAAA,MACb;AACA,oBAAc,KAAK,YAAY;AAAA,IACjC;AACA,iBAAa,MAAM,KAAK,IAAI;AAAA,EAC9B,CAAC;AAED,gBAAc,QAAQ,CAAC,iBAAiB;AACtC,iBAAa,MAAM,QAAQ,CAAC,MAAM,UAAU;AAC1C,UAAI,UAAU,EAAG;AAEjB,YAAM,EAAE,OAAAA,OAAM,IAAI;AAClB,UAAI,CAACA,OAAO;AACZ,MAAAA,OAAM,QAAQ,CAAC,SAAS;AACtB,qBAAa,UAAU,OAAO,KAAK,MAAM,CAAC;AAAA,MAC5C,CAAC;AACD,WAAK,OAAO;AAAA,IACd,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,aACd,KACA,MACM;AACN,QAAM,OAAO,eAAe,OAAO,MAAM,QAAQ,MAAM,GAAG;AAC1D,QAAM,SAAS,cAAc,KAAK,KAAK;AACvC,wBAAsB,MAAM,MAAM;AAClC,OAAK,YAAY,CAAC,WAAW;AAC3B,0BAAsB,QAAQ,MAAM;AAAA,EACtC,CAAC;AACD,SAAO;AACT;AAEA,IAAM,cAAc;AAEb,SAAS,aAAa,MAAmC;AAC9D,SAAO;AAAA,IACL,eAAe;AAAA,IACf,KAAK,MAAM;AACT,mBAAa,MAAM,IAAI;AAAA,IACzB;AAAA,EACF;AACF;AAEA,aAAa,UAAU;AAEvB,IAAO,wBAAQ;","names":["nodes"]}
@@ -1,10 +1,8 @@
1
1
  // src/postcss/plugins/optimize-layer.ts
2
2
  import postcss, { Root } from "postcss";
3
3
  function resolveFilter(spec, defaults) {
4
- if (!spec)
5
- return () => defaults;
6
- if (typeof spec === "function")
7
- return spec;
4
+ if (!spec) return () => defaults;
5
+ if (typeof spec === "function") return spec;
8
6
  const conditions = Array.isArray(spec) ? spec : [spec];
9
7
  return (layerName) => conditions.some(
10
8
  (condition) => typeof condition === "string" ? layerName.includes(condition) : condition.test(layerName)
@@ -31,14 +29,12 @@ function optimizeLayer(css, opts = {}) {
31
29
  };
32
30
  };
33
31
  root.walkAtRules("layer", (layerRule) => {
34
- if (layerRule.parent?.type !== "root")
35
- return;
32
+ if (layerRule.parent?.type !== "root") return;
36
33
  const { params, nodes } = layerRule;
37
34
  if (!nodes || !include(params, layerRule) || exclude(params, layerRule))
38
35
  return;
39
36
  const { layer, atFirst } = getLayer(layerRule);
40
- if (atFirst)
41
- return;
37
+ if (atFirst) return;
42
38
  layerRule.nodes?.forEach((node) => {
43
39
  layer.rule.append(node.clone());
44
40
  });
@@ -62,4 +58,4 @@ export {
62
58
  optimize_layer_default as default,
63
59
  optimizeLayer
64
60
  };
65
- //# sourceMappingURL=optimize-layer-YJERAHYO.mjs.map
61
+ //# sourceMappingURL=optimize-layer-Q35C25P4.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/postcss/plugins/optimize-layer.ts"],"sourcesContent":["import postcss, { AtRule, Plugin, Root } from 'postcss';\n\ntype Filter = (layerName: string, rule: AtRule) => boolean;\n\ntype FilterSpec = string | RegExp | (string | RegExp)[] | Filter;\n\nexport interface OptimizeLayerOptions {\n include?: FilterSpec;\n exclude?: FilterSpec;\n}\n\nfunction resolveFilter(\n spec: FilterSpec | undefined,\n defaults: boolean,\n): Filter {\n if (!spec) return () => defaults;\n if (typeof spec === 'function') return spec;\n const conditions = Array.isArray(spec) ? spec : [spec];\n return (layerName) =>\n conditions.some((condition) =>\n typeof condition === 'string'\n ? layerName.includes(condition)\n : condition.test(layerName),\n );\n}\n\ninterface Layer {\n name: string;\n rule: AtRule;\n}\n\nexport function optimizeLayer(\n css: string | { toString(): string } | Root,\n opts: OptimizeLayerOptions = {},\n): Root {\n const root = css instanceof Root ? css : postcss.parse(css);\n const layers: Layer[] = [];\n const include = resolveFilter(opts.include, true);\n const exclude = resolveFilter(opts.exclude, false);\n\n const getLayer = (\n layerRule: AtRule,\n ): {\n layer: Layer;\n atFirst: boolean;\n } => {\n const name = layerRule.params;\n const layer = layers.find((_layer) => _layer.name === name);\n if (layer)\n return {\n layer,\n atFirst: false,\n };\n\n const created: Layer = { name, rule: layerRule };\n layers.push(created);\n return {\n layer: created,\n atFirst: true,\n };\n };\n\n root.walkAtRules('layer', (layerRule) => {\n if (layerRule.parent?.type !== 'root') return;\n const { params, nodes } = layerRule;\n if (!nodes || !include(params, layerRule) || exclude(params, layerRule))\n return;\n\n const { layer, atFirst } = getLayer(layerRule);\n\n if (atFirst) return;\n\n layerRule.nodes?.forEach((node) => {\n layer.rule.append(node.clone());\n });\n\n layerRule.remove();\n });\n\n return root;\n}\n\nconst PLUGIN_NAME = 'optimize-layer';\n\nexport function OptimizeLayer(opts?: OptimizeLayerOptions): Plugin {\n return {\n postcssPlugin: PLUGIN_NAME,\n Once(root) {\n optimizeLayer(root, opts);\n },\n };\n}\n\nOptimizeLayer.postcss = true;\n\nexport default OptimizeLayer;\n"],"mappings":";AAAA,OAAO,WAA2B,YAAY;AAW9C,SAAS,cACP,MACA,UACQ;AACR,MAAI,CAAC;AAAM,WAAO,MAAM;AACxB,MAAI,OAAO,SAAS;AAAY,WAAO;AACvC,QAAM,aAAa,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACrD,SAAO,CAAC,cACN,WAAW;AAAA,IAAK,CAAC,cACf,OAAO,cAAc,WACjB,UAAU,SAAS,SAAS,IAC5B,UAAU,KAAK,SAAS;AAAA,EAC9B;AACJ;AAOO,SAAS,cACd,KACA,OAA6B,CAAC,GACxB;AACN,QAAM,OAAO,eAAe,OAAO,MAAM,QAAQ,MAAM,GAAG;AAC1D,QAAM,SAAkB,CAAC;AACzB,QAAM,UAAU,cAAc,KAAK,SAAS,IAAI;AAChD,QAAM,UAAU,cAAc,KAAK,SAAS,KAAK;AAEjD,QAAM,WAAW,CACf,cAIG;AACH,UAAM,OAAO,UAAU;AACvB,UAAM,QAAQ,OAAO,KAAK,CAAC,WAAW,OAAO,SAAS,IAAI;AAC1D,QAAI;AACF,aAAO;AAAA,QACL;AAAA,QACA,SAAS;AAAA,MACX;AAEF,UAAM,UAAiB,EAAE,MAAM,MAAM,UAAU;AAC/C,WAAO,KAAK,OAAO;AACnB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;AAEA,OAAK,YAAY,SAAS,CAAC,cAAc;AACvC,QAAI,UAAU,QAAQ,SAAS;AAAQ;AACvC,UAAM,EAAE,QAAQ,MAAM,IAAI;AAC1B,QAAI,CAAC,SAAS,CAAC,QAAQ,QAAQ,SAAS,KAAK,QAAQ,QAAQ,SAAS;AACpE;AAEF,UAAM,EAAE,OAAO,QAAQ,IAAI,SAAS,SAAS;AAE7C,QAAI;AAAS;AAEb,cAAU,OAAO,QAAQ,CAAC,SAAS;AACjC,YAAM,KAAK,OAAO,KAAK,MAAM,CAAC;AAAA,IAChC,CAAC;AAED,cAAU,OAAO;AAAA,EACnB,CAAC;AAED,SAAO;AACT;AAEA,IAAM,cAAc;AAEb,SAAS,cAAc,MAAqC;AACjE,SAAO;AAAA,IACL,eAAe;AAAA,IACf,KAAK,MAAM;AACT,oBAAc,MAAM,IAAI;AAAA,IAC1B;AAAA,EACF;AACF;AAEA,cAAc,UAAU;AAExB,IAAO,yBAAQ;","names":[]}
1
+ {"version":3,"sources":["../src/postcss/plugins/optimize-layer.ts"],"sourcesContent":["import postcss, { AtRule, Plugin, Root } from 'postcss';\n\ntype Filter = (layerName: string, rule: AtRule) => boolean;\n\ntype FilterSpec = string | RegExp | (string | RegExp)[] | Filter;\n\nexport interface OptimizeLayerOptions {\n include?: FilterSpec;\n exclude?: FilterSpec;\n}\n\nfunction resolveFilter(\n spec: FilterSpec | undefined,\n defaults: boolean,\n): Filter {\n if (!spec) return () => defaults;\n if (typeof spec === 'function') return spec;\n const conditions = Array.isArray(spec) ? spec : [spec];\n return (layerName) =>\n conditions.some((condition) =>\n typeof condition === 'string'\n ? layerName.includes(condition)\n : condition.test(layerName),\n );\n}\n\ninterface Layer {\n name: string;\n rule: AtRule;\n}\n\nexport function optimizeLayer(\n css: string | { toString(): string } | Root,\n opts: OptimizeLayerOptions = {},\n): Root {\n const root = css instanceof Root ? css : postcss.parse(css);\n const layers: Layer[] = [];\n const include = resolveFilter(opts.include, true);\n const exclude = resolveFilter(opts.exclude, false);\n\n const getLayer = (\n layerRule: AtRule,\n ): {\n layer: Layer;\n atFirst: boolean;\n } => {\n const name = layerRule.params;\n const layer = layers.find((_layer) => _layer.name === name);\n if (layer)\n return {\n layer,\n atFirst: false,\n };\n\n const created: Layer = { name, rule: layerRule };\n layers.push(created);\n return {\n layer: created,\n atFirst: true,\n };\n };\n\n root.walkAtRules('layer', (layerRule) => {\n if (layerRule.parent?.type !== 'root') return;\n const { params, nodes } = layerRule;\n if (!nodes || !include(params, layerRule) || exclude(params, layerRule))\n return;\n\n const { layer, atFirst } = getLayer(layerRule);\n\n if (atFirst) return;\n\n layerRule.nodes?.forEach((node) => {\n layer.rule.append(node.clone());\n });\n\n layerRule.remove();\n });\n\n return root;\n}\n\nconst PLUGIN_NAME = 'optimize-layer';\n\nexport function OptimizeLayer(opts?: OptimizeLayerOptions): Plugin {\n return {\n postcssPlugin: PLUGIN_NAME,\n Once(root) {\n optimizeLayer(root, opts);\n },\n };\n}\n\nOptimizeLayer.postcss = true;\n\nexport default OptimizeLayer;\n"],"mappings":";AAAA,OAAO,WAA2B,YAAY;AAW9C,SAAS,cACP,MACA,UACQ;AACR,MAAI,CAAC,KAAM,QAAO,MAAM;AACxB,MAAI,OAAO,SAAS,WAAY,QAAO;AACvC,QAAM,aAAa,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACrD,SAAO,CAAC,cACN,WAAW;AAAA,IAAK,CAAC,cACf,OAAO,cAAc,WACjB,UAAU,SAAS,SAAS,IAC5B,UAAU,KAAK,SAAS;AAAA,EAC9B;AACJ;AAOO,SAAS,cACd,KACA,OAA6B,CAAC,GACxB;AACN,QAAM,OAAO,eAAe,OAAO,MAAM,QAAQ,MAAM,GAAG;AAC1D,QAAM,SAAkB,CAAC;AACzB,QAAM,UAAU,cAAc,KAAK,SAAS,IAAI;AAChD,QAAM,UAAU,cAAc,KAAK,SAAS,KAAK;AAEjD,QAAM,WAAW,CACf,cAIG;AACH,UAAM,OAAO,UAAU;AACvB,UAAM,QAAQ,OAAO,KAAK,CAAC,WAAW,OAAO,SAAS,IAAI;AAC1D,QAAI;AACF,aAAO;AAAA,QACL;AAAA,QACA,SAAS;AAAA,MACX;AAEF,UAAM,UAAiB,EAAE,MAAM,MAAM,UAAU;AAC/C,WAAO,KAAK,OAAO;AACnB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;AAEA,OAAK,YAAY,SAAS,CAAC,cAAc;AACvC,QAAI,UAAU,QAAQ,SAAS,OAAQ;AACvC,UAAM,EAAE,QAAQ,MAAM,IAAI;AAC1B,QAAI,CAAC,SAAS,CAAC,QAAQ,QAAQ,SAAS,KAAK,QAAQ,QAAQ,SAAS;AACpE;AAEF,UAAM,EAAE,OAAO,QAAQ,IAAI,SAAS,SAAS;AAE7C,QAAI,QAAS;AAEb,cAAU,OAAO,QAAQ,CAAC,SAAS;AACjC,YAAM,KAAK,OAAO,KAAK,MAAM,CAAC;AAAA,IAChC,CAAC;AAED,cAAU,OAAO;AAAA,EACnB,CAAC;AAED,SAAO;AACT;AAEA,IAAM,cAAc;AAEb,SAAS,cAAc,MAAqC;AACjE,SAAO;AAAA,IACL,eAAe;AAAA,IACf,KAAK,MAAM;AACT,oBAAc,MAAM,IAAI;AAAA,IAC1B;AAAA,EACF;AACF;AAEA,cAAc,UAAU;AAExB,IAAO,yBAAQ;","names":[]}
@@ -4,10 +4,8 @@ import postcss, {
4
4
  Root
5
5
  } from "postcss";
6
6
  function resolveFilter(spec, defaults) {
7
- if (!spec)
8
- return () => defaults;
9
- if (typeof spec === "function")
10
- return spec;
7
+ if (!spec) return () => defaults;
8
+ if (typeof spec === "function") return spec;
11
9
  const conditions = Array.isArray(spec) ? spec : [spec];
12
10
  return (layerName) => conditions.some(
13
11
  (condition) => typeof condition === "string" ? layerName.includes(condition) : condition.test(layerName)
@@ -25,10 +23,8 @@ function parseMedia(mediaRule) {
25
23
  };
26
24
  }
27
25
  function isSourceMapAnnotation(node) {
28
- if (!node)
29
- return false;
30
- if (node.type !== "comment")
31
- return false;
26
+ if (!node) return false;
27
+ if (node.type !== "comment") return false;
32
28
  return node.text.toLowerCase().startsWith("# sourcemappingurl=");
33
29
  }
34
30
  function getSourceMapAnnotation(container) {
@@ -100,4 +96,4 @@ export {
100
96
  optimize_media_default as default,
101
97
  optimizeMedia
102
98
  };
103
- //# sourceMappingURL=optimize-media-7PF3XJSZ.mjs.map
99
+ //# sourceMappingURL=optimize-media-ZZWDHLLV.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/postcss/plugins/optimize-media.ts"],"sourcesContent":["import postcss, {\n AtRule,\n Plugin,\n Root,\n Container,\n ChildNode,\n Comment,\n} from 'postcss';\n\ninterface Media {\n query: string;\n rule: AtRule;\n container: Container;\n}\n\ntype Filter = (query: string, media: Media) => boolean;\n\ntype FilterSpec = string | RegExp | (string | RegExp)[] | Filter;\n\nfunction resolveFilter(\n spec: FilterSpec | undefined,\n defaults: boolean,\n): Filter {\n if (!spec) return () => defaults;\n if (typeof spec === 'function') return spec;\n const conditions = Array.isArray(spec) ? spec : [spec];\n return (layerName) =>\n conditions.some((condition) =>\n typeof condition === 'string'\n ? layerName.includes(condition)\n : condition.test(layerName),\n );\n}\n\ntype SortMedia = (a: Media, b: Media) => number;\n\nexport interface OptimizeMediaOptions {\n include?: FilterSpec;\n exclude?: FilterSpec;\n sort?: SortMedia;\n}\n\nfunction parseMedia(mediaRule: AtRule): Media {\n const { params, parent } = mediaRule;\n if (!parent) {\n throw mediaRule.error('@media rules require a parent container.');\n }\n return {\n query: params,\n rule: mediaRule,\n container: parent,\n };\n}\n\nfunction isSourceMapAnnotation(node: ChildNode | undefined): node is Comment {\n if (!node) return false;\n if (node.type !== 'comment') return false;\n return node.text.toLowerCase().startsWith('# sourcemappingurl=');\n}\n\nfunction getSourceMapAnnotation(container: Container): ChildNode | undefined {\n const maybeAnnotation = container.last;\n if (isSourceMapAnnotation(maybeAnnotation)) {\n return maybeAnnotation;\n }\n}\n\nexport function optimizeMedia(\n css: string | { toString(): string } | Root,\n opts: OptimizeMediaOptions = {},\n): Root {\n const root = css instanceof Root ? css : postcss.parse(css);\n const include = resolveFilter(opts.include, true);\n const exclude = resolveFilter(opts.exclude, false);\n\n const sourceMap = getSourceMapAnnotation(root);\n\n const containerMap = new Map<Container, Media[]>();\n\n root.walkAtRules('media', (mediaRule) => {\n const media = parseMedia(mediaRule);\n if (\n !mediaRule.nodes ||\n !include(media.query, media) ||\n exclude(media.query, media)\n )\n return;\n\n let bucket = containerMap.get(media.container);\n if (!bucket) {\n bucket = [];\n containerMap.set(media.container, bucket);\n }\n bucket.push(media);\n });\n\n containerMap.forEach((bucket, container) => {\n if (opts.sort) {\n bucket.sort(opts.sort);\n }\n\n const combinedRules: {\n query: string;\n medias: Media[];\n }[] = [];\n\n bucket.forEach((media) => {\n let rule = combinedRules.find((r) => r.query === media.query);\n if (!rule) {\n rule = { query: media.query, medias: [] };\n combinedRules.push(rule);\n }\n rule.medias.push(media);\n });\n\n combinedRules.forEach((rule) => {\n const nodes = rule.medias\n .map((media) => (media.rule.nodes || []).map((node) => node.clone()))\n .flat();\n const newAtRule = new AtRule({\n name: 'media',\n params: rule.query,\n nodes,\n });\n rule.medias.forEach((media) => media.rule.remove());\n container.append(newAtRule);\n });\n });\n\n containerMap.clear();\n\n if (sourceMap) {\n root.append(sourceMap);\n }\n\n return root;\n}\n\nconst PLUGIN_NAME = 'optimize-media';\n\nexport function OptimizeMedia(opts?: OptimizeMediaOptions): Plugin {\n return {\n postcssPlugin: PLUGIN_NAME,\n Once(root) {\n optimizeMedia(root, opts);\n },\n };\n}\n\nOptimizeMedia.postcss = true;\n\nexport default OptimizeMedia;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/postcss/plugins/optimize-media.ts"],"sourcesContent":["import postcss, {\n AtRule,\n Plugin,\n Root,\n Container,\n ChildNode,\n Comment,\n} from 'postcss';\n\ninterface Media {\n query: string;\n rule: AtRule;\n container: Container;\n}\n\ntype Filter = (query: string, media: Media) => boolean;\n\ntype FilterSpec = string | RegExp | (string | RegExp)[] | Filter;\n\nfunction resolveFilter(\n spec: FilterSpec | undefined,\n defaults: boolean,\n): Filter {\n if (!spec) return () => defaults;\n if (typeof spec === 'function') return spec;\n const conditions = Array.isArray(spec) ? spec : [spec];\n return (layerName) =>\n conditions.some((condition) =>\n typeof condition === 'string'\n ? layerName.includes(condition)\n : condition.test(layerName),\n );\n}\n\ntype SortMedia = (a: Media, b: Media) => number;\n\nexport interface OptimizeMediaOptions {\n include?: FilterSpec;\n exclude?: FilterSpec;\n sort?: SortMedia;\n}\n\nfunction parseMedia(mediaRule: AtRule): Media {\n const { params, parent } = mediaRule;\n if (!parent) {\n throw mediaRule.error('@media rules require a parent container.');\n }\n return {\n query: params,\n rule: mediaRule,\n container: parent,\n };\n}\n\nfunction isSourceMapAnnotation(node: ChildNode | undefined): node is Comment {\n if (!node) return false;\n if (node.type !== 'comment') return false;\n return node.text.toLowerCase().startsWith('# sourcemappingurl=');\n}\n\nfunction getSourceMapAnnotation(container: Container): ChildNode | undefined {\n const maybeAnnotation = container.last;\n if (isSourceMapAnnotation(maybeAnnotation)) {\n return maybeAnnotation;\n }\n}\n\nexport function optimizeMedia(\n css: string | { toString(): string } | Root,\n opts: OptimizeMediaOptions = {},\n): Root {\n const root = css instanceof Root ? css : postcss.parse(css);\n const include = resolveFilter(opts.include, true);\n const exclude = resolveFilter(opts.exclude, false);\n\n const sourceMap = getSourceMapAnnotation(root);\n\n const containerMap = new Map<Container, Media[]>();\n\n root.walkAtRules('media', (mediaRule) => {\n const media = parseMedia(mediaRule);\n if (\n !mediaRule.nodes ||\n !include(media.query, media) ||\n exclude(media.query, media)\n )\n return;\n\n let bucket = containerMap.get(media.container);\n if (!bucket) {\n bucket = [];\n containerMap.set(media.container, bucket);\n }\n bucket.push(media);\n });\n\n containerMap.forEach((bucket, container) => {\n if (opts.sort) {\n bucket.sort(opts.sort);\n }\n\n const combinedRules: {\n query: string;\n medias: Media[];\n }[] = [];\n\n bucket.forEach((media) => {\n let rule = combinedRules.find((r) => r.query === media.query);\n if (!rule) {\n rule = { query: media.query, medias: [] };\n combinedRules.push(rule);\n }\n rule.medias.push(media);\n });\n\n combinedRules.forEach((rule) => {\n const nodes = rule.medias\n .map((media) => (media.rule.nodes || []).map((node) => node.clone()))\n .flat();\n const newAtRule = new AtRule({\n name: 'media',\n params: rule.query,\n nodes,\n });\n rule.medias.forEach((media) => media.rule.remove());\n container.append(newAtRule);\n });\n });\n\n containerMap.clear();\n\n if (sourceMap) {\n root.append(sourceMap);\n }\n\n return root;\n}\n\nconst PLUGIN_NAME = 'optimize-media';\n\nexport function OptimizeMedia(opts?: OptimizeMediaOptions): Plugin {\n return {\n postcssPlugin: PLUGIN_NAME,\n Once(root) {\n optimizeMedia(root, opts);\n },\n };\n}\n\nOptimizeMedia.postcss = true;\n\nexport default OptimizeMedia;\n"],"mappings":"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","names":[]}
package/dist/plugboy.mjs CHANGED
@@ -48,7 +48,7 @@ import {
48
48
  resolveUserWorkspaceConfig,
49
49
  rmrf,
50
50
  syncWorkspacePackageFields
51
- } from "./chunk-LK4DOUQU.mjs";
51
+ } from "./chunk-R2Q7ZXTD.mjs";
52
52
  export {
53
53
  Builder,
54
54
  PROJECT_REQUIRED_FIELDS,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fastkit/plugboy",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "repository": {
@@ -61,16 +61,16 @@
61
61
  "dist"
62
62
  ],
63
63
  "dependencies": {
64
- "bundle-require": "^4.1.0",
64
+ "bundle-require": "^5.0.0",
65
65
  "cac": "^6.7.14",
66
- "cssnano": "^6.1.2",
67
- "esbuild": "^0.19.12",
68
- "execa": "^8.0.1",
66
+ "cssnano": "^7.0.2",
67
+ "esbuild": "^0.21.5",
68
+ "execa": "^9.2.0",
69
69
  "glob": "^10.4.1",
70
70
  "inquirer": "^9.2.23",
71
71
  "pkg-types": "^1.1.1",
72
72
  "sort-package-json": "^2.10.0",
73
- "tsup": "^8.0.2"
73
+ "tsup": "^8.1.0"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@types/inquirer": "^9.0.7"