@fastkit/plugboy 0.2.6 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,352 @@
1
+
2
+ # @fastkit/plugboy
3
+
4
+ 🌐 English | [日本語](https://github.com/dadajam4/fastkit/blob/main/packages/plugboy/README-ja.md)
5
+
6
+ A monorepo-compatible module bundler and project management tool. Provides a high-speed build system based on esbuild, tsup, and other tools.
7
+
8
+ ## Features
9
+
10
+ - **High-Speed Build**: Ultra-fast bundling based on esbuild and tsup
11
+ - **Monorepo Support**: Integrated management of multi-package projects
12
+ - **Full TypeScript Support**: Automatic type definition generation and optimization
13
+ - **Plugin System**: Extensible architecture
14
+ - **CSS Integration**: Sass, Vanilla Extract, and CSS optimization support
15
+ - **Development Efficiency**: Fast development cycle with stub functionality
16
+ - **Automation**: Automatic generation of package.json and exports
17
+
18
+ ## Installation
19
+
20
+ ```bash
21
+ npm install @fastkit/plugboy
22
+ # or
23
+ pnpm add @fastkit/plugboy
24
+ ```
25
+
26
+ ## Basic Usage
27
+
28
+ ### CLI Commands
29
+
30
+ ```bash
31
+ # Build entire project
32
+ plugboy build
33
+
34
+ # Generate development stub (fast development)
35
+ plugboy stub
36
+
37
+ # Sync package.json settings
38
+ plugboy json
39
+
40
+ # Delete distribution
41
+ plugboy clean
42
+
43
+ # Generate new workspace
44
+ plugboy generate [workspaceName]
45
+ # or
46
+ plugboy gen [workspaceName]
47
+ ```
48
+
49
+ ### Workspace Configuration
50
+
51
+ **`plugboy.workspace.ts`**:
52
+ ```typescript
53
+ import { defineWorkspaceConfig } from '@fastkit/plugboy';
54
+
55
+ export default defineWorkspaceConfig({
56
+ entries: {
57
+ '.': './src/index.ts',
58
+ './utils': './src/utils.ts'
59
+ },
60
+ plugins: [
61
+ // Plugin configuration
62
+ ],
63
+ dts: {
64
+ // TypeScript type definition configuration
65
+ },
66
+ optimizeCSS: true
67
+ });
68
+ ```
69
+
70
+ ### Project Configuration
71
+
72
+ **`plugboy.project.ts`**:
73
+ ```typescript
74
+ import { defineProjectConfig } from '@fastkit/plugboy';
75
+
76
+ export default defineProjectConfig({
77
+ workspacesDir: 'packages',
78
+ peerDependencies: {
79
+ 'vue': '^3.4.0'
80
+ },
81
+ scripts: [
82
+ {
83
+ name: 'TypeScript',
84
+ scripts: {
85
+ build: 'plugboy build',
86
+ stub: 'plugboy stub',
87
+ typecheck: 'tsc --noEmit'
88
+ }
89
+ }
90
+ ]
91
+ });
92
+ ```
93
+
94
+ ## API
95
+
96
+ ### defineWorkspaceConfig
97
+
98
+ #### Entry Point Configuration
99
+
100
+ ```typescript
101
+ export default defineWorkspaceConfig({
102
+ entries: {
103
+ '.': './src/index.ts', // Main entry
104
+ './components': './src/components.ts', // Sub entry
105
+ './styles': { // Entry with CSS
106
+ src: './src/styles.ts',
107
+ css: true
108
+ }
109
+ }
110
+ });
111
+ ```
112
+
113
+ #### Plugin Configuration
114
+
115
+ ```typescript
116
+ import { createSassPlugin } from '@fastkit/plugboy-sass-plugin';
117
+ import { createVueJSXPlugin } from '@fastkit/plugboy-vue-jsx-plugin';
118
+
119
+ export default defineWorkspaceConfig({
120
+ plugins: [
121
+ createSassPlugin(),
122
+ createVueJSXPlugin()
123
+ ]
124
+ });
125
+ ```
126
+
127
+ #### TypeScript Type Definition Configuration
128
+
129
+ ```typescript
130
+ export default defineWorkspaceConfig({
131
+ dts: {
132
+ preserveType: [
133
+ // Custom type preservation configuration
134
+ ],
135
+ normalizers: [
136
+ // Type definition normalization functions
137
+ (dts) => dts.replace(/unwanted-pattern/g, '')
138
+ ]
139
+ }
140
+ });
141
+ ```
142
+
143
+ ### defineProjectConfig
144
+
145
+ #### Workspace Management
146
+
147
+ ```typescript
148
+ export default defineProjectConfig({
149
+ workspacesDir: 'packages',
150
+ peerDependencies: {
151
+ 'react': '^18.0.0',
152
+ 'vue': '^3.4.0'
153
+ }
154
+ });
155
+ ```
156
+
157
+ #### Script Templates
158
+
159
+ ```typescript
160
+ export default defineProjectConfig({
161
+ scripts: [
162
+ {
163
+ name: 'TypeScript',
164
+ scripts: {
165
+ build: 'plugboy build',
166
+ clean: 'rm -rf dist',
167
+ typecheck: 'tsc --noEmit'
168
+ }
169
+ },
170
+ {
171
+ name: 'TypeScript with CSS',
172
+ scripts: {
173
+ build: 'plugboy build',
174
+ lint: 'eslint . && stylelint "**/*.css"'
175
+ }
176
+ }
177
+ ]
178
+ });
179
+ ```
180
+
181
+ ## Plugin System
182
+
183
+ ### Built-in Plugins
184
+
185
+ - **@fastkit/plugboy-sass-plugin**: Sass/SCSS support
186
+ - **@fastkit/plugboy-vanilla-extract-plugin**: Vanilla Extract support
187
+ - **@fastkit/plugboy-vue-jsx-plugin**: Vue JSX support
188
+
189
+ ### Custom Plugins
190
+
191
+ ```typescript
192
+ import type { Plugin } from '@fastkit/plugboy';
193
+
194
+ const customPlugin = (): Plugin => ({
195
+ name: 'custom-plugin',
196
+ setup(workspace) {
197
+ // Plugin initialization
198
+ workspace.hooks.buildStart?.tap('custom-plugin', () => {
199
+ console.log('Build started');
200
+ });
201
+ }
202
+ });
203
+
204
+ export default defineWorkspaceConfig({
205
+ plugins: [customPlugin()]
206
+ });
207
+ ```
208
+
209
+ ## Development Workflow
210
+
211
+ ### Fast Development Cycle
212
+
213
+ ```bash
214
+ # 1. Initial build
215
+ pnpm build
216
+
217
+ # 2. Development mode (fast)
218
+ pnpm stub
219
+
220
+ # 3. Start development server
221
+ pnpm dev
222
+ ```
223
+
224
+ ### Monorepo Management
225
+
226
+ ```bash
227
+ # Create new package
228
+ plugboy gen my-new-package
229
+
230
+ # Build entire project
231
+ plugboy build
232
+
233
+ # Specific package only
234
+ cd packages/my-package
235
+ plugboy build
236
+ ```
237
+
238
+ ## Configuration Examples
239
+
240
+ ### CSS Integration Project
241
+
242
+ ```typescript
243
+ // plugboy.workspace.ts
244
+ import { defineWorkspaceConfig } from '@fastkit/plugboy';
245
+ import { createSassPlugin } from '@fastkit/plugboy-sass-plugin';
246
+
247
+ export default defineWorkspaceConfig({
248
+ entries: {
249
+ '.': {
250
+ src: './src/index.ts',
251
+ css: true
252
+ }
253
+ },
254
+ plugins: [
255
+ createSassPlugin()
256
+ ],
257
+ optimizeCSS: {
258
+ combineRules: {
259
+ rules: [':root']
260
+ }
261
+ }
262
+ });
263
+ ```
264
+
265
+ ### Vue.js Project
266
+
267
+ ```typescript
268
+ // plugboy.workspace.ts
269
+ import { defineWorkspaceConfig } from '@fastkit/plugboy';
270
+ import { createVueJSXPlugin } from '@fastkit/plugboy-vue-jsx-plugin';
271
+ import { createSassPlugin } from '@fastkit/plugboy-sass-plugin';
272
+
273
+ export default defineWorkspaceConfig({
274
+ entries: {
275
+ '.': './src/index.ts'
276
+ },
277
+ plugins: [
278
+ createVueJSXPlugin(),
279
+ createSassPlugin()
280
+ ],
281
+ external: ['vue']
282
+ });
283
+ ```
284
+
285
+ ## Hook System
286
+
287
+ ### Build Hooks
288
+
289
+ ```typescript
290
+ export default defineWorkspaceConfig({
291
+ hooks: {
292
+ buildStart: () => {
293
+ console.log('Build starting...');
294
+ },
295
+ buildEnd: (result) => {
296
+ console.log('Build completed:', result);
297
+ },
298
+ buildError: (error) => {
299
+ console.error('Build failed:', error);
300
+ }
301
+ }
302
+ });
303
+ ```
304
+
305
+ ## Type Definition Management
306
+
307
+ ### Automatic Type Definition Generation
308
+
309
+ ```typescript
310
+ export default defineWorkspaceConfig({
311
+ dts: {
312
+ preserveType: [
313
+ // Preserve external package types
314
+ 'external-package-types'
315
+ ],
316
+ normalizers: [
317
+ // Normalization and optimization of type definitions
318
+ (dts) => dts
319
+ .replace(/unnecessary-types/g, '')
320
+ .replace(/import\("complex-path"\)/g, 'SimpleType')
321
+ ]
322
+ }
323
+ });
324
+ ```
325
+
326
+ ## Performance Optimization
327
+
328
+ ### Build Optimization
329
+
330
+ - **Parallel Processing**: Simultaneous building of multiple entries
331
+ - **Incremental**: Rebuild only changed parts
332
+ - **Cache**: Utilize cached build results
333
+ - **Tree Shaking**: Remove unused code
334
+
335
+ ### Development Optimization
336
+
337
+ - **Stub Mode**: Symbolic links to actual files
338
+ - **Hot Reload**: Immediate reflection of file changes
339
+ - **TypeScript**: Fast type checking
340
+
341
+ ## Dependencies
342
+
343
+ ### Main Dependencies
344
+ - `esbuild`: High-speed JavaScript builder
345
+ - `tsup`: TypeScript build tool
346
+ - `cac`: CLI creation library
347
+ - `glob`: File matching
348
+ - `cssnano`: CSS optimization
349
+
350
+ ## License
351
+
352
+ MIT
@@ -106,9 +106,9 @@ async function resolveListable(raw) {
106
106
  }
107
107
 
108
108
  // src/utils/file.ts
109
- import fs from "node:fs";
110
- import path from "node:path";
111
- import { fileURLToPath } from "node:url";
109
+ import fs from "fs";
110
+ import path from "path";
111
+ import { fileURLToPath } from "url";
112
112
  function getFilename(importMetaURL) {
113
113
  return fileURLToPath(importMetaURL);
114
114
  }
@@ -254,7 +254,7 @@ function copyDirSync(srcDir, destDir) {
254
254
  }
255
255
 
256
256
  // src/utils/expose.ts
257
- import path2 from "node:path";
257
+ import path2 from "path";
258
258
  import { glob } from "glob";
259
259
  function resolveRawExposeEntriesSettings(rawSettings) {
260
260
  return typeof rawSettings === "string" ? { dir: rawSettings } : rawSettings;
@@ -430,8 +430,8 @@ function buildHooks(resolvedHooks) {
430
430
  }
431
431
 
432
432
  // src/path.ts
433
- import path3 from "node:path";
434
- import fs2 from "node:fs";
433
+ import path3 from "path";
434
+ import fs2 from "fs";
435
435
  var Path = class _Path {
436
436
  _value;
437
437
  _stats;
@@ -524,8 +524,8 @@ var Path = class _Path {
524
524
  };
525
525
 
526
526
  // src/package.ts
527
- import fs3 from "node:fs/promises";
528
- import path4 from "node:path";
527
+ import fs3 from "fs/promises";
528
+ import path4 from "path";
529
529
  async function getProjectPackageJson(searchDir, allowMissing) {
530
530
  const hit = await findConfig(
531
531
  {
@@ -579,13 +579,13 @@ async function findWorkspacePackages(dir) {
579
579
 
580
580
  // src/workspace/builder.ts
581
581
  import { build } from "tsup";
582
- import fs4 from "node:fs/promises";
583
- import path6 from "node:path";
582
+ import fs4 from "fs/promises";
583
+ import path6 from "path";
584
584
  import { glob as glob2 } from "glob";
585
585
 
586
586
  // src/workspace/dts.ts
587
587
  import { execa } from "execa";
588
- import path5 from "node:path";
588
+ import path5 from "path";
589
589
  async function emitDTS(opts = {}) {
590
590
  const { cwd = process.cwd(), outDir = path5.join(cwd, "dist/dts") } = opts;
591
591
  await execa(
@@ -995,8 +995,8 @@ ${dts}`;
995
995
  };
996
996
 
997
997
  // src/project/project.ts
998
- import fs5 from "node:fs/promises";
999
- import path7 from "node:path";
998
+ import fs5 from "fs/promises";
999
+ import path7 from "path";
1000
1000
  import { glob as glob3 } from "glob";
1001
1001
  var PlugboyProject = class {
1002
1002
  /** Path instance of the project directory */
@@ -1055,6 +1055,9 @@ async function getProject(searchDir, allowMissing, skipLoadConfig) {
1055
1055
  const { dir, json } = hit;
1056
1056
  const resolvedWorkspaces = [];
1057
1057
  const { workspaces = [] } = json;
1058
+ if (!Array.isArray(workspaces)) {
1059
+ throw new Error("workspaces only supports arrays.");
1060
+ }
1058
1061
  const workspacesPattern = workspaces.map(
1059
1062
  (workspace) => dir.join(workspace, PACKAGE_JSON_FILENAME).value
1060
1063
  );
@@ -1083,8 +1086,8 @@ async function getProject(searchDir, allowMissing, skipLoadConfig) {
1083
1086
 
1084
1087
  // src/workspace/workspace.ts
1085
1088
  import sortPackageJson from "sort-package-json";
1086
- import fs6 from "node:fs/promises";
1087
- import path8 from "node:path";
1089
+ import fs6 from "fs/promises";
1090
+ import path8 from "path";
1088
1091
  function extractWorkspaceObjectExport(at) {
1089
1092
  if (typeof at === "string") return at;
1090
1093
  const { types, import: _import } = at;
@@ -1263,7 +1266,7 @@ var PlugboyWorkspace = class {
1263
1266
  const version = deps[dep];
1264
1267
  if (version.startsWith(WORKSPACE_SPEC_PREFIX)) {
1265
1268
  deps[dep] = `${WORKSPACE_SPEC_PREFIX}^`;
1266
- } else if (projectPeerDependencies && projectPeerDependencies[dep]) {
1269
+ } else if (projectPeerDependencies && projectPeerDependencies[dep] && !deps[dep]) {
1267
1270
  deps[dep] = projectPeerDependencies[dep];
1268
1271
  }
1269
1272
  });
@@ -1409,34 +1412,28 @@ async function getWorkspace(searchDir, allowMissing) {
1409
1412
  }
1410
1413
 
1411
1414
  // src/workspace/generate.ts
1412
- import path9 from "node:path";
1413
- import fs7 from "node:fs/promises";
1415
+ import path9 from "path";
1416
+ import fs7 from "fs/promises";
1414
1417
  import sortPackageJson2 from "sort-package-json";
1415
- import inquirer from "inquirer";
1418
+ import * as prompts from "@inquirer/prompts";
1416
1419
  async function generateWorkspace(workspaceName, cwd = process.cwd()) {
1417
1420
  const project = await getProject(cwd);
1418
1421
  const { config } = project;
1419
1422
  while (!workspaceName) {
1420
- const { value } = await inquirer.prompt({
1421
- type: "input",
1422
- name: "value",
1423
+ const value = await prompts.input({
1423
1424
  message: "Enter a workspace name"
1424
1425
  });
1425
1426
  if (value) {
1426
1427
  workspaceName = value;
1427
1428
  }
1428
1429
  }
1429
- const { description } = await inquirer.prompt({
1430
- type: "input",
1431
- name: "description",
1430
+ const description = await prompts.input({
1432
1431
  default: workspaceName,
1433
1432
  message: "Please enter a description of your package"
1434
1433
  });
1435
1434
  let version;
1436
1435
  while (!version) {
1437
- const { value } = await inquirer.prompt({
1438
- type: "input",
1439
- name: "value",
1436
+ const value = await prompts.input({
1440
1437
  default: "0.0.0",
1441
1438
  message: "Please enter the initial version"
1442
1439
  });
@@ -1444,19 +1441,15 @@ async function generateWorkspace(workspaceName, cwd = process.cwd()) {
1444
1441
  version = value;
1445
1442
  }
1446
1443
  }
1447
- const { rawKeywords } = await inquirer.prompt({
1448
- type: "input",
1449
- name: "rawKeywords",
1444
+ const rawKeywords = await prompts.input({
1450
1445
  message: "Enter as many keywords, if any, as needed, separated by commas"
1451
1446
  });
1452
1447
  const keywords = rawKeywords.split(",").map((word) => word.trim()).filter((word) => word.length);
1453
1448
  const scriptsTemplates = config.scripts;
1454
1449
  let scriptsTemplate;
1455
1450
  if (scriptsTemplates && scriptsTemplates.length) {
1456
- const { value } = await inquirer.prompt({
1457
- type: "rawlist",
1451
+ const value = await prompts.rawlist({
1458
1452
  message: "Select a scripts template",
1459
- name: "value",
1460
1453
  choices: [
1461
1454
  { name: "None", value: "" },
1462
1455
  ...scriptsTemplates.map((tpl) => ({
@@ -1469,10 +1462,8 @@ async function generateWorkspace(workspaceName, cwd = process.cwd()) {
1469
1462
  }
1470
1463
  const scripts = scriptsTemplate?.scripts || {};
1471
1464
  const peerDependencies = await (async () => {
1472
- const { deps } = await inquirer.prompt({
1473
- type: "checkbox",
1465
+ const deps = await prompts.checkbox({
1474
1466
  message: "Select the dependent packages, if any, to be used in the package",
1475
- name: "deps",
1476
1467
  choices: Object.keys(config.peerDependencies).map((dep) => ({
1477
1468
  name: dep,
1478
1469
  value: dep
@@ -1484,10 +1475,8 @@ async function generateWorkspace(workspaceName, cwd = process.cwd()) {
1484
1475
  );
1485
1476
  })();
1486
1477
  const dependencies = await (async () => {
1487
- const { deps } = await inquirer.prompt({
1488
- type: "checkbox",
1478
+ const deps = await prompts.checkbox({
1489
1479
  message: "Select the internal package to be used, if any.",
1490
- name: "deps",
1491
1480
  choices: project.resolvedWorkspaces.map((workspace) => {
1492
1481
  const name = path9.basename(workspace);
1493
1482
  return {
@@ -1504,9 +1493,7 @@ async function generateWorkspace(workspaceName, cwd = process.cwd()) {
1504
1493
  ])
1505
1494
  );
1506
1495
  })();
1507
- const { withGenSource } = await inquirer.prompt({
1508
- type: "confirm",
1509
- name: "withGenSource",
1496
+ const withGenSource = await prompts.confirm({
1510
1497
  message: "Generate source files?",
1511
1498
  default: true
1512
1499
  });
@@ -1529,9 +1516,7 @@ async function generateWorkspace(workspaceName, cwd = process.cwd()) {
1529
1516
  console.log(`Generate source: ${withGenSource ? "Yes" : "No"}`);
1530
1517
  console.log(json);
1531
1518
  console.log("========================================");
1532
- const { confirmation } = await inquirer.prompt({
1533
- type: "confirm",
1534
- name: "confirmation",
1519
+ const confirmation = await prompts.confirm({
1535
1520
  message: "Is this OK?",
1536
1521
  default: true
1537
1522
  });
@@ -1631,4 +1616,4 @@ export {
1631
1616
  getWorkspace,
1632
1617
  generateWorkspace
1633
1618
  };
1634
- //# sourceMappingURL=chunk-R2Q7ZXTD.mjs.map
1619
+ //# sourceMappingURL=chunk-IDJLTVUE.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 if (!Array.isArray(workspaces)) {\n throw new Error('workspaces only supports arrays.');\n }\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 as any;\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 (\n projectPeerDependencies &&\n projectPeerDependencies[dep] &&\n !deps[dep]\n ) {\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 * as prompts from '@inquirer/prompts';\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 prompts.input({\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 prompts.input({\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 prompts.input({\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 prompts.input({\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 prompts.rawlist({\n message: 'Select a scripts template',\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 prompts.checkbox({\n message:\n 'Select the dependent packages, if any, to be used in the package',\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 prompts.checkbox({\n message: 'Select the internal package to be used, if any.',\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 prompts.confirm({\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 prompts.confirm({\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-R2Q7ZXTD.mjs";
4
+ } from "./chunk-IDJLTVUE.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.6",
12
+ version: "0.3.0",
13
13
  description: "",
14
14
  keywords: [],
15
15
  repository: {
@@ -80,19 +80,17 @@ var package_default = {
80
80
  test: "vitest run"
81
81
  },
82
82
  dependencies: {
83
- "bundle-require": "^5.0.0",
83
+ "@inquirer/prompts": "^7.8.6",
84
+ "@swc/core": "^1.13.5",
85
+ "bundle-require": "^5.1.0",
84
86
  cac: "^6.7.14",
85
- cssnano: "^7.0.3",
86
- esbuild: "^0.21.5",
87
- execa: "^9.3.0",
88
- glob: "^10.4.2",
89
- inquirer: "^9.2.23",
90
- "pkg-types": "^1.1.1",
91
- "sort-package-json": "^2.10.0",
92
- tsup: "^8.1.0"
93
- },
94
- devDependencies: {
95
- "@types/inquirer": "^9.0.7"
87
+ cssnano: "^7.1.1",
88
+ esbuild: "^0.25.10",
89
+ execa: "^9.6.0",
90
+ glob: "^11.0.3",
91
+ "pkg-types": "^2.3.0",
92
+ "sort-package-json": "^3.4.0",
93
+ tsup: "^8.5.0"
96
94
  }
97
95
  };
98
96
 
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.6\",\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.3\",\n \"esbuild\": \"^0.21.5\",\n \"execa\": \"^9.3.0\",\n \"glob\": \"^10.4.2\",\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":[]}
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.3.0\",\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 \"@inquirer/prompts\": \"^7.8.6\",\n \"@swc/core\": \"^1.13.5\",\n \"bundle-require\": \"^5.1.0\",\n \"cac\": \"^6.7.14\",\n \"cssnano\": \"^7.1.1\",\n \"esbuild\": \"^0.25.10\",\n \"execa\": \"^9.6.0\",\n \"glob\": \"^11.0.3\",\n \"pkg-types\": \"^2.3.0\",\n \"sort-package-json\": \"^3.4.0\",\n \"tsup\": \"^8.5.0\"\n }\n}\n"],"mappings":"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","names":[]}
@@ -2,5 +2,6 @@ export * from 'bundle-require';
2
2
  import 'cac';
3
3
  import 'esbuild';
4
4
  import 'glob';
5
+ import '@inquirer/prompts';
5
6
  import 'pkg-types';
6
7
  import 'tsup';
@@ -1,3 +1 @@
1
- import inquirer__default from 'inquirer';
2
- export * from 'inquirer';
3
- export { default } from 'inquirer';
1
+ export * from '@inquirer/prompts';
@@ -1,8 +1,3 @@
1
1
  // src/dependencies/inquirer.ts
2
- import inquirer from "inquirer";
3
- export * from "inquirer";
4
- var inquirer_default = inquirer;
5
- export {
6
- inquirer_default as default
7
- };
2
+ export * from "@inquirer/prompts";
8
3
  //# sourceMappingURL=inquirer.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/dependencies/inquirer.ts"],"sourcesContent":["import inquirer from 'inquirer';\n\nexport * from 'inquirer';\n\nexport default inquirer;\n"],"mappings":";AAAA,OAAO,cAAc;AAErB,cAAc;AAEd,IAAO,mBAAQ;","names":[]}
1
+ {"version":3,"sources":["../../src/dependencies/inquirer.ts"],"sourcesContent":["export * from '@inquirer/prompts';\n"],"mappings":";AAAA,cAAc;","names":[]}
package/dist/plugboy.mjs CHANGED
@@ -48,7 +48,7 @@ import {
48
48
  resolveUserWorkspaceConfig,
49
49
  rmrf,
50
50
  syncWorkspacePackageFields
51
- } from "./chunk-R2Q7ZXTD.mjs";
51
+ } from "./chunk-IDJLTVUE.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.6",
3
+ "version": "0.3.0",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "repository": {
@@ -61,19 +61,17 @@
61
61
  "dist"
62
62
  ],
63
63
  "dependencies": {
64
- "bundle-require": "^5.0.0",
64
+ "@inquirer/prompts": "^7.8.6",
65
+ "@swc/core": "^1.13.5",
66
+ "bundle-require": "^5.1.0",
65
67
  "cac": "^6.7.14",
66
- "cssnano": "^7.0.3",
67
- "esbuild": "^0.21.5",
68
- "execa": "^9.3.0",
69
- "glob": "^10.4.2",
70
- "inquirer": "^9.2.23",
71
- "pkg-types": "^1.1.1",
72
- "sort-package-json": "^2.10.0",
73
- "tsup": "^8.1.0"
74
- },
75
- "devDependencies": {
76
- "@types/inquirer": "^9.0.7"
68
+ "cssnano": "^7.1.1",
69
+ "esbuild": "^0.25.10",
70
+ "execa": "^9.6.0",
71
+ "glob": "^11.0.3",
72
+ "pkg-types": "^2.3.0",
73
+ "sort-package-json": "^3.4.0",
74
+ "tsup": "^8.5.0"
77
75
  },
78
76
  "scripts": {
79
77
  "build": "tsup",