@fastkit/plugboy 1.0.0-next.6 → 1.0.0-next.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { i as getWorkspace, t as generateWorkspace } from "./workspace-
|
|
1
|
+
import { i as getWorkspace, t as generateWorkspace } from "./workspace-yGCJgfi1.mjs";
|
|
2
2
|
import { cac } from "cac";
|
|
3
3
|
//#region package.json
|
|
4
|
-
var version = "1.0.0-next.
|
|
4
|
+
var version = "1.0.0-next.8";
|
|
5
5
|
//#endregion
|
|
6
6
|
//#region src/cli.ts
|
|
7
7
|
async function main() {
|
package/dist/plugboy.d.mts
CHANGED
|
@@ -72,7 +72,7 @@ declare function isWorkspacePackageJson(json: PackageJson): json is WorkspacePac
|
|
|
72
72
|
declare function resolveRawWorkspaceEntry(entry: RawWorkspaceEntry): WorkspaceEntry;
|
|
73
73
|
declare function resolveRawWorkspaceEntries(entries: RawWorkspaceEntries | undefined): WorkspaceEntries;
|
|
74
74
|
declare function resolveUserWorkspaceConfig(userConfig: UserWorkspaceConfig): Promise<ResolvedWorkspaceConfig>;
|
|
75
|
-
declare function defineWorkspaceConfig
|
|
75
|
+
declare function defineWorkspaceConfig(config: UserWorkspaceConfig): Promise<ResolvedWorkspaceConfig>;
|
|
76
76
|
declare function loadWorkspaceConfig(searchDir?: string, depth?: number): Promise<ResolvedWorkspaceConfig>;
|
|
77
77
|
//#endregion
|
|
78
78
|
//#region src/utils/hook.d.ts
|
|
@@ -88,7 +88,7 @@ declare function findProjectPlugin<T extends Plugin = Plugin>(pluginName: string
|
|
|
88
88
|
//#region src/utils/project.d.ts
|
|
89
89
|
declare function isProjectPackageJson(json: PackageJson): json is ProjectPackageJson;
|
|
90
90
|
declare function resolveUserProjectConfig(userConfig: UserProjectConfig): Promise<ResolvedProjectConfig>;
|
|
91
|
-
declare function defineProjectConfig
|
|
91
|
+
declare function defineProjectConfig(config: UserProjectConfig): Promise<ResolvedProjectConfig>;
|
|
92
92
|
declare function loadProjectConfig(searchDir?: string, depth?: number): Promise<ResolvedProjectConfig>;
|
|
93
93
|
//#endregion
|
|
94
94
|
//#region src/path.d.ts
|
|
@@ -236,7 +236,16 @@ declare class Builder {
|
|
|
236
236
|
}): Promise<ResolvedOptions>;
|
|
237
237
|
private _stubLinkJS;
|
|
238
238
|
private _stubLinkCSS;
|
|
239
|
-
|
|
239
|
+
/**
|
|
240
|
+
* Copy the workspace's `publicDir` contents into the output directory.
|
|
241
|
+
*
|
|
242
|
+
* Owned by plugboy (not tsdown's `copy`) so the result is identical in `build`
|
|
243
|
+
* and `stub`: both call this with plugboy's own recursive copy. `copyDirSync`
|
|
244
|
+
* no-ops when the directory is absent, so packages without a public directory
|
|
245
|
+
* are unaffected. tsdown's `copy` option is left to tsdown and only applies
|
|
246
|
+
* during a real `build`.
|
|
247
|
+
*/
|
|
248
|
+
copyPublicDir(): void;
|
|
240
249
|
stub(): Promise<void>;
|
|
241
250
|
normalizeDTSBySettings(dts: string, settings: NormalizedDTSPreserveTypeSettings): string | undefined;
|
|
242
251
|
normalizeDTSFile(filePath: string): Promise<void>;
|
|
@@ -521,7 +530,30 @@ interface UserWorkspaceConfig extends TSDownSyncOptions {
|
|
|
521
530
|
* @see {@link DTSSettings}
|
|
522
531
|
*/
|
|
523
532
|
dts?: DTSSettings;
|
|
524
|
-
|
|
533
|
+
/**
|
|
534
|
+
* Directory whose contents are copied into the output directory (`dist`).
|
|
535
|
+
*
|
|
536
|
+
* Owned by plugboy (not tsdown's `copy`) so the copy is performed identically
|
|
537
|
+
* in both `build` and `stub`. Use tsdown's `copy` for advanced cases that
|
|
538
|
+
* only need to run during a real build.
|
|
539
|
+
*
|
|
540
|
+
* - `true` (default): copy `./public`
|
|
541
|
+
* - `false`: disable
|
|
542
|
+
* - string: copy the given directory
|
|
543
|
+
*
|
|
544
|
+
* @default true
|
|
545
|
+
*/
|
|
546
|
+
publicDir?: string | boolean;
|
|
547
|
+
/**
|
|
548
|
+
* tsdown's `copy` option — copy files into the output directory.
|
|
549
|
+
*
|
|
550
|
+
* @remarks
|
|
551
|
+
* Runs during `build` only. `stub` does NOT execute this (it does not run
|
|
552
|
+
* tsdown). For assets that must also be present in the stub output, use
|
|
553
|
+
* {@link publicDir}, which plugboy copies identically in both `build` and
|
|
554
|
+
* `stub`.
|
|
555
|
+
*/
|
|
556
|
+
copy?: UserConfig['copy'];
|
|
525
557
|
/**
|
|
526
558
|
* CSS optimization options
|
|
527
559
|
*
|
|
@@ -536,7 +568,7 @@ interface UserWorkspaceConfig extends TSDownSyncOptions {
|
|
|
536
568
|
/**
|
|
537
569
|
* Workspace Configuration
|
|
538
570
|
*/
|
|
539
|
-
interface ResolvedWorkspaceConfig extends Required<Omit<UserWorkspaceConfig, 'entries' | 'hooks' | 'plugins' | 'dts' | '
|
|
571
|
+
interface ResolvedWorkspaceConfig extends Required<Omit<UserWorkspaceConfig, 'entries' | 'hooks' | 'plugins' | 'dts' | 'publicDir' | 'optimizeCSS' | TSDownSyncOption>>, TSDownSyncOptions {
|
|
540
572
|
/**
|
|
541
573
|
* Configuration of all entries in the workspace
|
|
542
574
|
*
|
|
@@ -558,7 +590,12 @@ interface ResolvedWorkspaceConfig extends Required<Omit<UserWorkspaceConfig, 'en
|
|
|
558
590
|
* @see {@link DTSSettings}
|
|
559
591
|
*/
|
|
560
592
|
dts?: DTSSettings;
|
|
561
|
-
|
|
593
|
+
/**
|
|
594
|
+
* Directory whose contents are copied into the output directory (`dist`),
|
|
595
|
+
* or `false` to disable. Resolved from {@link UserWorkspaceConfig.publicDir}
|
|
596
|
+
* (`true` → `'public'`).
|
|
597
|
+
*/
|
|
598
|
+
publicDir: string | false;
|
|
562
599
|
/**
|
|
563
600
|
* CSS optimization options
|
|
564
601
|
*
|
package/dist/plugboy.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as normalizeDTSSettings, A as resolveRawExposeEntriesSettings, B as exitHook, C as findProjectPlugin, D as loadProjectConfig, E as isProjectPackageJson, F as getFilename, G as resolveListable, H as mergeExternals, I as isFileNotFoundException, J as WORKSPACE_REQUIRED_FIELDS, K as PROJECT_REQUIRED_FIELDS, L as pathExists, M as findConfig, N as findFile, O as resolveUserProjectConfig, P as getDirname, Q as normalizeDTSPreserveTypeTarget, R as rmrf, S as extractProjectPlugins, T as defineProjectConfig, U as mergeNoExternals, V as mergeChunkAddons, W as isPromise, X as mergeDTSSettingsList, Y as resolveOptimizeCSSOptions, Z as normalizeDTSPreserveTypeSettings, _ as loadWorkspaceConfig, a as syncWorkspacePackageFields, b as resolveUserWorkspaceConfig, c as Builder, d as getWorkspacePackageJson, et as createHooksDefaults, f as Path, g as isWorkspacePackageJson, h as defineWorkspaceConfig, i as getWorkspace, j as copyDirSync, k as exposeEntries, l as findWorkspacePackages, m as resolveUserHooks, n as PlugboyWorkspace, o as PlugboyProject, p as buildHooks, q as TSDOWN_SYNC_OPTIONS, r as WORKSPACE_PACKAGE_SYNC_FIELDS, s as getProject, t as generateWorkspace, u as getProjectPackageJson, v as resolveRawWorkspaceEntries, w as resolveUserPluginOption, x as definePlugin, y as resolveRawWorkspaceEntry, z as writeFileAtomic } from "./workspace-
|
|
1
|
+
import { $ as normalizeDTSSettings, A as resolveRawExposeEntriesSettings, B as exitHook, C as findProjectPlugin, D as loadProjectConfig, E as isProjectPackageJson, F as getFilename, G as resolveListable, H as mergeExternals, I as isFileNotFoundException, J as WORKSPACE_REQUIRED_FIELDS, K as PROJECT_REQUIRED_FIELDS, L as pathExists, M as findConfig, N as findFile, O as resolveUserProjectConfig, P as getDirname, Q as normalizeDTSPreserveTypeTarget, R as rmrf, S as extractProjectPlugins, T as defineProjectConfig, U as mergeNoExternals, V as mergeChunkAddons, W as isPromise, X as mergeDTSSettingsList, Y as resolveOptimizeCSSOptions, Z as normalizeDTSPreserveTypeSettings, _ as loadWorkspaceConfig, a as syncWorkspacePackageFields, b as resolveUserWorkspaceConfig, c as Builder, d as getWorkspacePackageJson, et as createHooksDefaults, f as Path, g as isWorkspacePackageJson, h as defineWorkspaceConfig, i as getWorkspace, j as copyDirSync, k as exposeEntries, l as findWorkspacePackages, m as resolveUserHooks, n as PlugboyWorkspace, o as PlugboyProject, p as buildHooks, q as TSDOWN_SYNC_OPTIONS, r as WORKSPACE_PACKAGE_SYNC_FIELDS, s as getProject, t as generateWorkspace, u as getProjectPackageJson, v as resolveRawWorkspaceEntries, w as resolveUserPluginOption, x as definePlugin, y as resolveRawWorkspaceEntry, z as writeFileAtomic } from "./workspace-yGCJgfi1.mjs";
|
|
2
2
|
export { Builder, PROJECT_REQUIRED_FIELDS, Path, PlugboyProject, PlugboyWorkspace, TSDOWN_SYNC_OPTIONS, WORKSPACE_PACKAGE_SYNC_FIELDS, WORKSPACE_REQUIRED_FIELDS, buildHooks, copyDirSync, createHooksDefaults, definePlugin, defineProjectConfig, defineWorkspaceConfig, exitHook, exposeEntries, extractProjectPlugins, findConfig, findFile, findProjectPlugin, findWorkspacePackages, generateWorkspace, getDirname, getFilename, getProject, getProjectPackageJson, getWorkspace, getWorkspacePackageJson, isFileNotFoundException, isProjectPackageJson, isPromise, isWorkspacePackageJson, loadProjectConfig, loadWorkspaceConfig, mergeChunkAddons, mergeDTSSettingsList, mergeExternals, mergeNoExternals, normalizeDTSPreserveTypeSettings, normalizeDTSPreserveTypeTarget, normalizeDTSSettings, pathExists, resolveListable, resolveOptimizeCSSOptions, resolveRawExposeEntriesSettings, resolveRawWorkspaceEntries, resolveRawWorkspaceEntry, resolveUserHooks, resolveUserPluginOption, resolveUserProjectConfig, resolveUserWorkspaceConfig, rmrf, syncWorkspacePackageFields, writeFileAtomic };
|
|
@@ -422,13 +422,14 @@ function resolveRawWorkspaceEntries(entries) {
|
|
|
422
422
|
return Object.fromEntries(Object.entries(entries).map(([name, raw]) => [name, resolveRawWorkspaceEntry(raw)]));
|
|
423
423
|
}
|
|
424
424
|
async function resolveUserWorkspaceConfig(userConfig) {
|
|
425
|
-
const { ignoreProjectConfig = false, entries, plugins, optimizeCSS = true, hooks } = userConfig;
|
|
425
|
+
const { ignoreProjectConfig = false, entries, plugins, optimizeCSS = true, publicDir = true, hooks } = userConfig;
|
|
426
426
|
return {
|
|
427
427
|
...userConfig,
|
|
428
428
|
ignoreProjectConfig,
|
|
429
429
|
entries: resolveRawWorkspaceEntries(entries),
|
|
430
430
|
plugins: await resolveUserPluginOption(plugins),
|
|
431
431
|
optimizeCSS: optimizeCSS === true ? {} : optimizeCSS,
|
|
432
|
+
publicDir: publicDir === true ? "public" : publicDir,
|
|
432
433
|
hooks
|
|
433
434
|
};
|
|
434
435
|
}
|
|
@@ -743,13 +744,23 @@ var Builder = class {
|
|
|
743
744
|
async _stubLinkCSS(from) {
|
|
744
745
|
await fs$1.writeFile(from, `/* noop */`);
|
|
745
746
|
}
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
747
|
+
/**
|
|
748
|
+
* Copy the workspace's `publicDir` contents into the output directory.
|
|
749
|
+
*
|
|
750
|
+
* Owned by plugboy (not tsdown's `copy`) so the result is identical in `build`
|
|
751
|
+
* and `stub`: both call this with plugboy's own recursive copy. `copyDirSync`
|
|
752
|
+
* no-ops when the directory is absent, so packages without a public directory
|
|
753
|
+
* are unaffected. tsdown's `copy` option is left to tsdown and only applies
|
|
754
|
+
* during a real `build`.
|
|
755
|
+
*/
|
|
756
|
+
copyPublicDir() {
|
|
757
|
+
const { publicDir } = this.workspace.config;
|
|
758
|
+
if (!publicDir) return;
|
|
759
|
+
copyDirSync(this.workspace.dir.join(publicDir).value, this.workspace.dirs.dist.value);
|
|
749
760
|
}
|
|
750
761
|
async stub() {
|
|
751
762
|
const links = this.workspace.getStubLinks();
|
|
752
|
-
|
|
763
|
+
this.copyPublicDir();
|
|
753
764
|
await Promise.all(links.map((link) => {
|
|
754
765
|
if (link.type === "js") return this._stubLinkJS(link.from, link.to);
|
|
755
766
|
if (link.type === "css") return this._stubLinkCSS(link.from);
|
|
@@ -858,6 +869,7 @@ var Builder = class {
|
|
|
858
869
|
}
|
|
859
870
|
async build() {
|
|
860
871
|
await build(await this.tsdownOptions());
|
|
872
|
+
this.copyPublicDir();
|
|
861
873
|
if (this.dts.inline || typeof this.dts.compiler === "function") await this.emitDTSManually();
|
|
862
874
|
else await this.normalizeDTSFiles();
|
|
863
875
|
}
|
|
@@ -1347,7 +1359,6 @@ async function getWorkspace(searchDir, allowMissing) {
|
|
|
1347
1359
|
plugins,
|
|
1348
1360
|
hooks,
|
|
1349
1361
|
dts,
|
|
1350
|
-
css: config.css,
|
|
1351
1362
|
optimizeCSS,
|
|
1352
1363
|
mergeExternals: (override) => {
|
|
1353
1364
|
config.deps ??= {};
|
|
@@ -1486,4 +1497,4 @@ export default defineWorkspaceConfig({
|
|
|
1486
1497
|
//#endregion
|
|
1487
1498
|
export { normalizeDTSSettings as $, resolveRawExposeEntriesSettings as A, exitHook as B, findProjectPlugin as C, loadProjectConfig as D, isProjectPackageJson as E, getFilename as F, resolveListable as G, mergeExternals as H, isFileNotFoundException as I, WORKSPACE_REQUIRED_FIELDS as J, PROJECT_REQUIRED_FIELDS as K, pathExists as L, findConfig as M, findFile as N, resolveUserProjectConfig as O, getDirname as P, normalizeDTSPreserveTypeTarget as Q, rmrf as R, extractProjectPlugins as S, defineProjectConfig as T, mergeNoExternals as U, mergeChunkAddons as V, isPromise as W, mergeDTSSettingsList as X, resolveOptimizeCSSOptions as Y, normalizeDTSPreserveTypeSettings as Z, loadWorkspaceConfig as _, syncWorkspacePackageFields as a, resolveUserWorkspaceConfig as b, Builder as c, getWorkspacePackageJson as d, createHooksDefaults as et, Path as f, isWorkspacePackageJson as g, defineWorkspaceConfig as h, getWorkspace as i, copyDirSync as j, exposeEntries as k, findWorkspacePackages as l, resolveUserHooks as m, PlugboyWorkspace as n, PlugboyProject as o, buildHooks as p, TSDOWN_SYNC_OPTIONS as q, WORKSPACE_PACKAGE_SYNC_FIELDS as r, getProject as s, generateWorkspace as t, getProjectPackageJson as u, resolveRawWorkspaceEntries as v, resolveUserPluginOption as w, definePlugin as x, resolveRawWorkspaceEntry as y, writeFileAtomic as z };
|
|
1488
1499
|
|
|
1489
|
-
//# sourceMappingURL=workspace-
|
|
1500
|
+
//# sourceMappingURL=workspace-yGCJgfi1.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-yGCJgfi1.mjs","names":["fs","fs","fs","fs","fs","fs","fs"],"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/tsdown.ts","../src/utils/exit-hook.ts","../src/utils/file.ts","../src/utils/expose.ts","../src/constants.ts","../src/utils/project.ts","../src/utils/plugin.ts","../src/utils/workspace.ts","../src/utils/hook.ts","../src/path.ts","../src/package.ts","../src/workspace/dts.ts","../src/env/constants.ts","../src/env/utils.ts","../src/env/plugin.ts","../src/workspace/builder.ts","../src/project/project.ts","../src/postcss/plugin.ts","../src/workspace/plugins/raw-loader.ts","../src/workspace/plugins/preserve-css-imports.ts","../src/workspace/workspace.ts","../src/workspace/generate.ts"],"sourcesContent":["import type { Listable } from '../utils';\nimport { WorkspaceSetupContext, WorkspacePackageJson } from './workspace';\nimport type { PlugboyWorkspace } from '../workspace';\n\nexport type TryGetWorkspace = () => PlugboyWorkspace | undefined;\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: (\n ctx: WorkspaceSetupContext,\n getWorkspace: TryGetWorkspace,\n ) => any;\n /**\n * Hooks after workspace generation\n * @param workspace - {@link PlugboyWorkspace workspace instance}\n */\n createWorkspace: (workspace: PlugboyWorkspace) => any;\n /**\n * Hooks when correcting package.json\n * @param json - package.json just before it was modified and saved by the plugboy\n * @param workspace - {@link PlugboyWorkspace workspace instance}\n */\n preparePackageJSON: (\n json: WorkspacePackageJson,\n workspace: PlugboyWorkspace,\n ) => any;\n}\n\nexport function createHooksDefaults(): ResolvedHooks {\n return {\n setupWorkspace: [],\n createWorkspace: [],\n preparePackageJSON: [],\n };\n}\n\nexport type HookName = keyof HookTypes;\n\n/**\n * plugboy user hook definition\n * @see {@link HookTypes}\n */\nexport type UserHooks = {\n [Name in HookName]?: Listable<HookTypes[Name]>;\n};\n\n/**\n * Pre-setup hook definitions\n * @see {@link HookTypes}\n */\nexport type ResolvedHooks = {\n [Name in HookName]: HookTypes[Name][];\n};\n\nexport type HookArgs<Name extends HookName> = Parameters<HookTypes[Name]>;\n\nexport type UnPromisify<T> = T extends Promise<infer U> ? U : T;\n\nexport type HookReturnType<Name extends HookName> = UnPromisify<\n ReturnType<HookTypes[Name]>\n>;\n\n/**\n * Map of hook methods that can be initialized and called\n * @see {@link HookTypes}\n */\nexport type BuildedHooks = {\n [Name in HookName]: (\n ...args: HookArgs<Name>\n ) => Promise<HookReturnType<Name>>;\n};\n","import type { Builder } from '../workspace';\nimport type { PlugboyWorkspace } from '../workspace';\n\nexport interface EmitDTSOptions {\n cwd?: string;\n outDir?: string;\n}\n\n/**\n * Custom DTS compiler function\n */\nexport type DTSCompilerFunction = (\n opts: EmitDTSOptions & { workspace: PlugboyWorkspace },\n) => Promise<void>;\n\n/**\n * DTS compiler specification\n * - 'tsc': TypeScript compiler (default)\n * - 'vue-tsc': Vue SFC compatible compiler\n * - function: Custom compiler function\n */\nexport type DTSCompilerOption = 'tsc' | 'vue-tsc' | DTSCompilerFunction;\n\n/**\n * Type preservation target in declaration 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 declaration file (normalized)\n *\n * @see {@link DTSPreserveTypeTarget}\n */\nexport interface NormalizedDTSPreserveTypeTarget extends Omit<\n DTSPreserveTypeTarget,\n 'from'\n> {\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 declaration 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 declaration files (normalized)\n *\n * @see {@link DTSPreserveTypeSettings}\n */\nexport interface NormalizedDTSPreserveTypeSettings extends Omit<\n DTSPreserveTypeSettings,\n 'targets'\n> {\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 declaration strings\n * @param dts - Bundled declaration 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 * declaration output setting\n */\nexport interface DTSSettings {\n /**\n * Inline output without bundling declaration\n *\n * @default false\n */\n inline?: boolean;\n\n /**\n * DTS compiler specification\n * @default 'tsc'\n */\n compiler?: DTSCompilerOption;\n\n /**\n * Whether to ignore compiler errors and continue\n * @default false\n */\n ignoreCompilerErrors?: 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 declaration strings\n */\n normalizers?: DTSNormalizer[];\n}\n\n/**\n * declaration output setting (normalized)\n *\n * @see {@link DTSSettings}\n */\nexport interface NormalizedDTSSettings {\n /**\n * Inline output without bundling declaration\n */\n inline: boolean;\n\n /**\n * DTS compiler specification\n */\n compiler: DTSCompilerOption;\n\n /**\n * Whether to ignore compiler errors and continue\n */\n ignoreCompilerErrors: boolean;\n\n /**\n * list of type preservation settings\n */\n preserveType: NormalizedDTSPreserveTypeSettings[];\n\n /**\n * list of function to normalize declaration strings\n */\n normalizers: DTSNormalizer[];\n}\n\nexport function normalizeDTSSettings(\n settings: DTSSettings,\n): NormalizedDTSSettings {\n const {\n inline = false,\n compiler = 'tsc',\n ignoreCompilerErrors = false,\n preserveType = [],\n normalizers = [],\n } = settings || {};\n return {\n inline,\n compiler,\n ignoreCompilerErrors,\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 { UserConfig as TSDownConfig } from 'tsdown';\nimport type { Path } from '../path';\nimport { RequiredPackageJSON, MarkRequired } from './_utils';\nimport type { PlugboyProject } from '../project';\nimport type { UserPluginOption, Plugin } from './plugin';\nimport type { BuildedHooks, UserHooks } from './hook';\nimport { DTSSettings, NormalizedDTSSettings } from './dts';\nimport { OptimizeCSSOptions } from './css';\nimport type { ExternalOption } from '../types';\nimport { type NoExternalOption } from './tsdown';\nimport { type CssOptions } from '@tsdown/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 TSDOWN_SYNC_OPTIONS = [\n 'define',\n 'skipNodeModulesBundle',\n 'onSuccess',\n 'copy',\n 'deps',\n] as const satisfies (keyof TSDownConfig)[];\n\ntype TSDownSyncOption = (typeof TSDOWN_SYNC_OPTIONS)[number];\n\ninterface TSDownSyncOptions extends Pick<TSDownConfig, TSDownSyncOption> {}\n\n/**\n * Workspace User Configuration\n */\nexport interface UserWorkspaceConfig extends TSDownSyncOptions {\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 * declaration output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n /**\n * Directory whose contents are copied into the output directory (`dist`).\n *\n * Owned by plugboy (not tsdown's `copy`) so the copy is performed identically\n * in both `build` and `stub`. Use tsdown's `copy` for advanced cases that\n * only need to run during a real build.\n *\n * - `true` (default): copy `./public`\n * - `false`: disable\n * - string: copy the given directory\n *\n * @default true\n */\n publicDir?: string | boolean;\n /**\n * tsdown's `copy` option — copy files into the output directory.\n *\n * @remarks\n * Runs during `build` only. `stub` does NOT execute this (it does not run\n * tsdown). For assets that must also be present in the stub output, use\n * {@link publicDir}, which plugboy copies identically in both `build` and\n * `stub`.\n */\n copy?: TSDownConfig['copy'];\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\n Required<\n Omit<\n UserWorkspaceConfig,\n | 'entries'\n | 'hooks'\n | 'plugins'\n | 'dts'\n | 'publicDir'\n | 'optimizeCSS'\n | TSDownSyncOption\n >\n >,\n TSDownSyncOptions {\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 * declaration output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n /**\n * Directory whose contents are copied into the output directory (`dist`),\n * or `false` to disable. Resolved from {@link UserWorkspaceConfig.publicDir}\n * (`true` → `'public'`).\n */\n publicDir: string | false;\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\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 * Plugin list\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 * declaration output setting\n * @see {@link NormalizedDTSSettings}\n */\n dts: NormalizedDTSSettings;\n css?: CssOptions;\n /**\n * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS: OptimizeCSSOptions | false;\n // @TODO JSDoc\n mergeExternals(override: ExternalOption): void;\n // @TODO JSDoc\n mergeNoExternals(override: NoExternalOption): void;\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 * declaration 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 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 Plugin}\n */\n plugins: Plugin[];\n /**\n * declaration 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","export function isPromise<T = any>(obj: any): obj is Promise<T> {\n return (\n !!obj &&\n (typeof obj === 'object' || typeof obj === 'function') &&\n typeof obj.then === 'function'\n );\n}\n\nexport type Listable<T> =\n | T\n | false\n | null\n | undefined\n | Listable<T>[]\n | Promise<T | false | null | undefined | Listable<T>[]>;\n\nexport async function resolveListable<T>(raw: Listable<T>): Promise<T[]> {\n const result: T[] = [];\n const list = Array.isArray(raw) ? raw : [raw];\n for (let row of list) {\n if (isPromise(row)) {\n row = await row;\n }\n if (!row) continue;\n if (Array.isArray(row)) {\n result.push(...(await resolveListable(row)));\n continue;\n }\n result.push(row);\n }\n return result;\n}\n","import {\n type ChunkAddon,\n type ChunkAddonObject,\n type ChunkAddonFunction,\n} from 'tsdown';\nimport type { NoExternalOption, ExternalOption } from '../types';\n\ntype ChunkAddonFunctionARGS = Parameters<ChunkAddonFunction>;\n\ntype MergeChunkAddonPosition = 'before' | 'after';\n\nconst _stringChunkToObject = (\n source: string | ChunkAddonObject,\n): ChunkAddonObject => {\n if (typeof source === 'object') return source;\n\n return {\n js: source,\n dts: source,\n css: source,\n } satisfies Required<ChunkAddonObject>;\n};\n\nconst _resolveChunkAddonToObject = (\n source: ChunkAddon,\n ...args: ChunkAddonFunctionARGS\n): ChunkAddonObject => {\n const tmp = typeof source === 'function' ? source(...args) || {} : source;\n return _stringChunkToObject(tmp);\n};\n\nconst _mergeChunkAddonObjects = (\n base: string | ChunkAddonObject,\n override: string | ChunkAddonObject,\n position: MergeChunkAddonPosition = 'after',\n): ChunkAddonObject => {\n const result = { ..._stringChunkToObject(base) };\n for (const [_key, value] of Object.entries(_stringChunkToObject(override))) {\n if (!value) continue;\n const key = _key as keyof ChunkAddonObject;\n const baseValue = result[key];\n const chunks = [value];\n if (baseValue) {\n if (position === 'before') {\n chunks.push(baseValue);\n } else {\n chunks.unshift(baseValue);\n }\n }\n result[key] = chunks.join('\\n\\n');\n }\n return result;\n};\n\nexport function mergeChunkAddons(\n base: ChunkAddon | undefined,\n override: ChunkAddon | undefined,\n position?: MergeChunkAddonPosition,\n): ChunkAddon | undefined {\n if (!override) return base;\n if (!base) return override;\n\n if (typeof base === 'function' || typeof override === 'function') {\n return (...args) => {\n const _base = _resolveChunkAddonToObject(base, ...args);\n const _override = _resolveChunkAddonToObject(override, ...args);\n return _mergeChunkAddonObjects(_base, _override, position);\n };\n }\n\n return _mergeChunkAddonObjects(base, override);\n}\n\ntype NullValue<T = void> = T | undefined | null | void;\n\nfunction isExternal(\n externalOption: ExternalOption,\n id: string,\n parentId: string | undefined,\n isResolved: boolean,\n): NullValue<boolean> {\n if (Array.isArray(externalOption)) {\n return externalOption.some((e) => isExternal(e, id, parentId, isResolved));\n }\n if (typeof externalOption === 'string') return id === externalOption;\n if (externalOption instanceof RegExp) return externalOption.test(id);\n if (typeof externalOption === 'function')\n return externalOption(id, parentId, isResolved);\n return false;\n}\n\nexport function mergeExternals(\n base: ExternalOption | undefined,\n override: ExternalOption | undefined,\n): ExternalOption | undefined {\n if (!override) return base;\n if (!base) return override;\n\n const externals = [base, override];\n\n return (id, parentId, isResolved) => {\n return externals.some((external) => {\n return isExternal(external, id, parentId, isResolved);\n });\n };\n}\n\nfunction isNoExternal(\n noExternalOption: NoExternalOption,\n id: string,\n importer: string | undefined,\n): NullValue<boolean> {\n if (Array.isArray(noExternalOption)) {\n return noExternalOption.some((e) => isNoExternal(e, id, importer));\n }\n if (typeof noExternalOption === 'string') return id === noExternalOption;\n if (noExternalOption instanceof RegExp) return noExternalOption.test(id);\n if (typeof noExternalOption === 'function')\n return noExternalOption(id, importer);\n return false;\n}\n\nexport function mergeNoExternals(\n base: NoExternalOption | undefined,\n override: NoExternalOption | undefined,\n): NoExternalOption | undefined {\n if (!override) return base;\n if (!base) return override;\n\n if (typeof base !== 'function' && typeof override !== 'function') {\n const _base = Array.isArray(base) ? base.slice() : [base];\n const _override = Array.isArray(override) ? override.slice() : [override];\n return [..._base, ..._override];\n }\n\n const noExternals = [base, override] as const;\n\n return (id, importer) => {\n return noExternals.some((spec) => {\n return isNoExternal(spec, id, importer);\n });\n };\n}\n","const EXIT_SIGNALS = ['SIGINT', 'SIGTERM', 'SIGHUP'] as const;\n\ntype ExitHandler = () => void;\n\nconst _callbacks: ExitHandler[] = [];\n\nexport function exitHook(cb: ExitHandler): () => void {\n _callbacks.push(cb);\n const off = () => {\n const index = _callbacks.indexOf(cb);\n if (index !== -1) {\n _callbacks.splice(index, 1);\n }\n };\n return off;\n}\n\nfor (const signal of EXIT_SIGNALS) {\n process.on(signal, async () => {\n const callbacks = _callbacks.slice();\n _callbacks.length = 0;\n try {\n await Promise.all(callbacks.map((cb) => cb()));\n process.exit(0);\n } catch (_err) {\n // eslint-disable-next-line no-console\n console.error(_err);\n process.exit(1);\n }\n });\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { exitHook } from './exit-hook';\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 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\nexport async function writeFileAtomic(filePath: string, content: string) {\n const tempFile = `${filePath}.${process.pid}.tmp`;\n const cleanup = () => {\n return fs.promises.unlink(tempFile).catch(() => {});\n };\n const off = exitHook(cleanup);\n try {\n await fs.promises.writeFile(tempFile, content);\n await fs.promises.rename(tempFile, filePath);\n off();\n } catch (error) {\n off();\n await cleanup();\n throw error;\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","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 { 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 { resolveUserPluginOption } 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 hooks,\n } = userConfig;\n return {\n workspacesDir,\n scripts: Array.isArray(scripts) ? scripts : [{ name: '', scripts }],\n peerDependencies,\n tsconfig,\n readme,\n plugins: await resolveUserPluginOption(plugins),\n optimizeCSS: optimizeCSS === true ? {} : optimizeCSS,\n hooks,\n };\n}\n\nexport function defineProjectConfig(\n config: UserProjectConfig,\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","import { UserPluginOption, Plugin } from '../types';\nimport { loadProjectConfig } from './project';\n\nexport async function resolveUserPluginOption(\n pluginOption: UserPluginOption | undefined,\n): Promise<Plugin[]> {\n if (!pluginOption) return [];\n\n const awaited = await pluginOption;\n if (!awaited) return [];\n\n if (Array.isArray(pluginOption)) {\n return (\n await Promise.all(\n pluginOption.map((o) => resolveUserPluginOption(o)).flat(),\n )\n ).flat();\n }\n return [awaited as Plugin];\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 { resolveUserPluginOption } 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 publicDir = true,\n hooks,\n } = userConfig;\n return {\n ...userConfig,\n ignoreProjectConfig,\n entries: resolveRawWorkspaceEntries(entries),\n plugins: await resolveUserPluginOption(plugins),\n optimizeCSS: optimizeCSS === true ? {} : optimizeCSS,\n publicDir: publicDir === true ? 'public' : publicDir,\n hooks,\n };\n}\n\nexport function defineWorkspaceConfig(\n config: UserWorkspaceConfig,\n): Promise<ResolvedWorkspaceConfig> {\n return resolveUserWorkspaceConfig(config);\n}\n\nexport async function loadWorkspaceConfig(\n searchDir?: string,\n depth?: number,\n): Promise<ResolvedWorkspaceConfig> {\n const hit = await findConfig(\n {\n fileName: `${WORKSPACE_CONFIG_BASENAME}.${SEARCH_BUNDLE_EXTENSIONS_MATCH}`,\n depth,\n allowMissing: true,\n },\n searchDir,\n );\n\n const userConfig = hit\n ? (\n await bundleRequire<{\n default: UserWorkspaceConfig | Promise<UserWorkspaceConfig>;\n }>({\n filepath: hit.path,\n })\n ).mod.default\n : ({} as UserWorkspaceConfig);\n\n return resolveUserWorkspaceConfig(await userConfig);\n}\n","import {\n UserHooks,\n ResolvedHooks,\n BuildedHooks,\n createHooksDefaults,\n} from '../types';\nimport { resolveListable } from './general';\n\nexport async function resolveUserHooks(\n ...userHooks: (UserHooks | undefined | null | false)[]\n): Promise<ResolvedHooks> {\n const hooks = createHooksDefaults();\n if (!userHooks) return hooks;\n for (const userHook of userHooks) {\n if (!userHook) continue;\n for (const [hookName, _hooks] of Object.entries(userHook)) {\n if (hooks) {\n (hooks as any)[hookName].push(...(await resolveListable(_hooks)));\n }\n }\n }\n return hooks;\n}\n\nexport function buildHooks(resolvedHooks: ResolvedHooks): BuildedHooks {\n const hooks: any = {};\n Object.entries(resolvedHooks).forEach(([hookName, fns]) => {\n hooks[hookName] = async (...args: any[]): Promise<any> => {\n const results: any[] = [];\n for (const fn of fns) {\n results.push(await (fn as any)(...args));\n }\n return results;\n };\n });\n return hooks;\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport { isFileNotFoundException } from './utils';\n\nexport class Path {\n private _value: string;\n\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","import { execa } from 'execa';\nimport path from 'node:path';\nimport type { DTSCompilerOption, EmitDTSOptions } from '../types/dts';\nimport type { PlugboyWorkspace } from './workspace';\n\nexport interface EmitDTSFullOptions extends EmitDTSOptions {\n workspace: PlugboyWorkspace;\n compiler?: DTSCompilerOption;\n ignoreCompilerErrors?: boolean;\n}\n// export interface EmitDTSOptions {\n// cwd?: string;\n// outDir?: string;\n// }\n\nexport async function runTsc(\n compiler: 'tsc' | 'vue-tsc',\n opts: EmitDTSOptions = {},\n ignoreErrors?: boolean,\n) {\n const { cwd = process.cwd(), outDir = path.join(cwd, 'dist/dts') } = opts;\n\n try {\n await execa(\n compiler,\n [\n '--declaration true',\n '--skipLibCheck',\n '--noEmit false',\n '--emitDeclarationOnly',\n `--outDir ${outDir}`,\n ],\n { cwd, shell: true, stdio: 'inherit' },\n );\n } catch (e) {\n if (!ignoreErrors) throw e;\n // eslint-disable-next-line no-console\n console.log(\n `Note: ${compiler} reported errors, but continuing with generated files...`,\n );\n }\n}\n\n/**\n * Emit DTS (declaration files)\n */\nexport async function emitDTS(opts: EmitDTSFullOptions) {\n const {\n compiler = 'tsc',\n ignoreCompilerErrors = false,\n workspace,\n ...baseOpts\n } = opts;\n\n if (typeof compiler === 'function') {\n // Custom compiler function\n await compiler({ ...baseOpts, workspace });\n } else {\n await runTsc(compiler, { ...baseOpts }, ignoreCompilerErrors);\n }\n}\n","import type { PlugboyEnvVarName } from './types';\n\n// Values starting with \"#\" have the \"#\" stripped and are transformed so that\n// references like import.meta.env are not removed by rolldown during bundling.\nexport const PLUGBOY_VAR_ENVS_FOR_BUNDLE: Record<PlugboyEnvVarName, string> = {\n __PLUGBOY_STUB__: 'false',\n __PLUGBOY_DEV__: `#(typeof process !== 'undefined' && process.env?.NODE_ENV === 'development') || (typeof import.meta !== 'undefined' && import.meta.env?.DEV === true)`,\n};\n\nexport const PLUGBOY_VAR_ENVS_FOR_STUB: Record<PlugboyEnvVarName, string> = {\n __PLUGBOY_STUB__: 'true',\n __PLUGBOY_DEV__: 'true',\n};\n","import { type InlineConfig } from 'tsdown';\nimport {\n PLUGBOY_VAR_ENVS_FOR_BUNDLE,\n PLUGBOY_VAR_ENVS_FOR_STUB,\n} from './constants';\n\nexport function applyPlugboyEnvs(\n config: Pick<InlineConfig, 'define' | 'banner'>,\n) {\n const DEFINE_VAR_INJECTS = Object.fromEntries(\n Object.entries(PLUGBOY_VAR_ENVS_FOR_BUNDLE).map(([envName, value]) => {\n const _value = value.startsWith('#') ? `$$${envName}` : value;\n return [envName, _value];\n }),\n );\n\n config.define = {\n ...config.define,\n ...DEFINE_VAR_INJECTS,\n };\n}\n\nexport function getPlugboyEnvCodeForStub() {\n return Object.entries(PLUGBOY_VAR_ENVS_FOR_STUB)\n .map(([envName, variable]) => `globalThis.${envName} = ${variable};`)\n .join('\\n');\n}\n","import type { PlugboyWorkspace } from '../workspace';\nimport type { Plugin } from '../types';\nimport { parse } from 'acorn';\nimport { PLUGBOY_VAR_ENVS_FOR_BUNDLE } from './constants';\n\nfunction findAfterImports(code: string): number {\n const ast = parse(code, {\n sourceType: 'module',\n ecmaVersion: 'latest',\n }) as any;\n\n let end = 0;\n\n for (const node of ast.body) {\n if (\n node.type === 'ImportDeclaration' ||\n node.type === 'ExportNamedDeclaration' ||\n node.type === 'ExportAllDeclaration' ||\n node.type === 'ExportDefaultDeclaration'\n ) {\n end = Math.max(end, node.end);\n continue;\n }\n break;\n }\n\n return end;\n}\n\nconst _replacements: [envName: string, value: string][] = [];\n\nObject.entries(PLUGBOY_VAR_ENVS_FOR_BUNDLE).forEach(([envName, value]) => {\n if (value.startsWith('#')) {\n _replacements.push([`$$${envName}`, value.substring(1)]);\n }\n});\n\nexport function WorkspaceEnvPlugin(_workspace: PlugboyWorkspace): Plugin {\n return {\n name: 'plugboy-workspace-env',\n async renderChunk(code, _chunk) {\n const injects = _replacements.filter(([envName]) =>\n code.includes(envName),\n );\n\n if (injects.length) {\n const MagicString = (await import('magic-string')).default;\n const ms = new MagicString(code);\n\n const insertPos = findAfterImports(code);\n const injectCode = injects\n .map(([eventName, value]) => `const ${eventName} = ${value};`)\n .join('\\n');\n ms.appendLeft(insertPos, `\\n${injectCode}`);\n\n return {\n code: ms.toString(),\n map: ms.generateMap({ hires: true }),\n };\n }\n },\n };\n}\n","import { type InlineConfig, build } from 'tsdown';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { glob } from 'glob';\nimport type { PlugboyWorkspace, WorkspaceObjectExport } from './workspace';\nimport {\n TSDOWN_SYNC_OPTIONS,\n NormalizedDTSPreserveTypeSettings,\n} from '../types';\nimport { copyDirSync, rmrf, mergeExternals } from '../utils';\nimport { emitDTS } from './dts';\nimport { applyPlugboyEnvs, getPlugboyEnvCodeForStub } from '../env';\n\nconst SHEBANG_MATCH_RE = /^(#!.+?)\\n/;\n\ninterface ResolvedOptions extends InlineConfig {}\n\nexport class Builder {\n readonly workspace: PlugboyWorkspace;\n\n private _tsdownOptions?: ResolvedOptions;\n\n get entry() {\n return this.workspace.entry;\n }\n\n get dts() {\n return this.workspace.dts;\n }\n\n constructor(workspace: PlugboyWorkspace) {\n this.workspace = workspace;\n }\n\n async tsdownOptions(overrides?: {\n watch?: boolean;\n }): Promise<ResolvedOptions> {\n const { _tsdownOptions } = this;\n if (_tsdownOptions) return _tsdownOptions;\n\n const { entry, dts } = this;\n\n const resolvedOptions: ResolvedOptions = {\n dts:\n dts.inline || typeof dts.compiler === 'function'\n ? false\n : dts.compiler === 'vue-tsc'\n ? { vue: true }\n : true,\n treeshake: true,\n css: this.workspace.cssOptions,\n plugins: this.workspace.plugins,\n entry,\n sourcemap: true,\n clean: true,\n ...overrides,\n };\n\n for (const opt of TSDOWN_SYNC_OPTIONS) {\n resolvedOptions[opt] = this.workspace.config[opt] as any;\n }\n\n applyPlugboyEnvs(resolvedOptions);\n\n resolvedOptions.deps ??= {};\n resolvedOptions.deps.neverBundle = mergeExternals(\n resolvedOptions.deps.neverBundle,\n [\n /^(@fastkit\\/)?plugboy(?!\\/runtime-utils)/,\n ...this.workspace.dependencies,\n ],\n );\n\n this._tsdownOptions = resolvedOptions;\n\n return resolvedOptions;\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 disableChecks = '/* eslint-disable */\\n// @ts-nocheck\\n';\n const code = `${disableChecks}${getPlugboyEnvCodeForStub()}\\nexport * from '${location}';`;\n const dtsPath = path.join(fromDir, `${fromParsed.name}.d.mts`);\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 /**\n * Copy the workspace's `publicDir` contents into the output directory.\n *\n * Owned by plugboy (not tsdown's `copy`) so the result is identical in `build`\n * and `stub`: both call this with plugboy's own recursive copy. `copyDirSync`\n * no-ops when the directory is absent, so packages without a public directory\n * are unaffected. tsdown's `copy` option is left to tsdown and only applies\n * during a real `build`.\n */\n copyPublicDir() {\n const { publicDir } = this.workspace.config;\n if (!publicDir) return;\n copyDirSync(\n this.workspace.dir.join(publicDir).value,\n this.workspace.dirs.dist.value,\n );\n }\n\n async stub() {\n const links = this.workspace.getStubLinks();\n 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 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 emitDTSManually() {\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 workspace: this.workspace,\n compiler: this.workspace.dts.compiler,\n ignoreCompilerErrors: this.workspace.dts.ignoreCompilerErrors,\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\\.m?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,d.mts}'));\n await this.normalizeDTSFiles(dtsFiles);\n }\n\n async build() {\n const options = await this.tsdownOptions();\n await build(options);\n\n // After tsdown (its `clean` wipes `dist` first), so the copy survives.\n // Identical to the `stub()` path — plugboy owns the public-dir copy.\n this.copyPublicDir();\n\n if (this.dts.inline || typeof this.dts.compiler === 'function') {\n await this.emitDTSManually();\n } else {\n await this.normalizeDTSFiles();\n }\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);\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 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 type { PlugboyWorkspace } from '../workspace';\nimport type { Plugin, ResolvedOptimizeCSSOptions } from '../types';\nimport type { Processor, AcceptedPlugin as PostcssPlugin } from 'postcss';\nimport type { RolldownChunk } from 'tsdown';\n\n/**\n * The rolldown `OutputAsset` type.\n *\n * tsdown no longer re-exports rolldown's `OutputAsset` directly, and rolldown\n * itself is not a direct dependency. We therefore derive it from the only\n * rolldown-output type tsdown still exposes (`RolldownChunk`), which is\n * `(OutputChunk | OutputAsset) & { outDir: string }`.\n *\n * - `Extract<..., { type: 'asset' }>` picks the asset variant via its discriminant.\n * - `Omit<..., 'outDir'>` drops the tsdown-specific augmentation so the type\n * matches the plain assets handed to rolldown's `generateBundle` hook.\n */\ntype OutputAsset = Omit<Extract<RolldownChunk, { type: 'asset' }>, 'outDir'>;\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\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 optimizeCSS(\n asset: OutputAsset,\n options: ResolvedOptimizeCSSOptions,\n) {\n const postcss = await getPostcss(options);\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 layerDefs + css.replace(allLayerDefRe, '');\n }\n\n const css = prepare(asset.source.toString());\n\n const result = await postcss.process(css, {\n from: asset.fileName,\n to: asset.fileName,\n map: { inline: false },\n });\n\n asset.source = result.css.replace(SOURCE_MAPPING_URL_COMMENT_RE, '');\n}\n\nexport function OptimizeCSSPlugin(workspace: PlugboyWorkspace): Plugin {\n return {\n name: 'plugboy-optimize-css',\n async generateBundle(_options, bundle) {\n const { optimizeCSSOptions } = workspace;\n if (!optimizeCSSOptions) return;\n\n for (const chunk of Object.values(bundle)) {\n if (chunk.type !== 'asset' || !chunk.fileName.endsWith('.css')) {\n continue;\n }\n await optimizeCSS(chunk, optimizeCSSOptions);\n }\n },\n };\n}\n","import { Plugin } from '../../types';\nimport fs from 'node:fs/promises';\n\nexport const rawLoaderPlugin: Plugin = {\n name: 'raw-loader',\n async resolveId(id, importer, options) {\n if (!id.endsWith('?raw')) return null;\n\n const rawPath = id.slice(0, -4); // remove '?raw'\n\n // Resolve a relative path to an absolute path\n const resolved = await this.resolve(rawPath, importer, {\n ...options,\n skipSelf: true,\n });\n\n if (!resolved) return null;\n\n // Return the resolved absolute path with a marker\n return `\\0raw:${resolved.id}`;\n },\n\n async load(id) {\n if (!id.startsWith('\\0raw:')) return null;\n\n const realPath = id.slice(5); // remove '\\0raw:'\n const content = await fs.readFile(realPath, 'utf-8');\n return `export default ${JSON.stringify(content)};`;\n },\n};\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { definePlugin } from '../../utils';\n\n/**\n * Plugin to preserve external CSS `@import` statements.\n *\n * rolldown / tsdown's CSS pipeline (lightningcss) resolves and inlines every\n * `@import` it can. For bare package specifiers (e.g.\n * `@import url('material-symbols/rounded.css') layer(...)`) that is wrong for a\n * library build: it bloats the output and rebases the imported package's own\n * relative asset URLs (fonts) against our `dist`, breaking them. Such imports\n * should stay external so the consumer's bundler resolves them.\n *\n * We can't intercept this in a `transform` hook — by then tsdown has already\n * inlined the imports. Instead we strip them in `load` (which runs before the\n * CSS transform), remember them, and re-emit them in `writeBundle`, after every\n * other CSS producer (including vanilla-extract's merge) has written the final\n * file to disk.\n */\n\n/**\n * Matches a single `@import` statement, capturing the quote (group 1) and the\n * imported specifier (group 2). Handles `url(...)`, quoted, and bare forms, and\n * tolerates trailing conditions (e.g. `layer(...)`, media queries).\n */\nconst IMPORT_RE = /@import\\s+(?:url\\(\\s*)?([\"']?)([^\"')\\s]+)\\1\\s*\\)?[^;]*;/g;\n\n/**\n * A specifier is \"internal\" (safe to bundle/inline) when it is relative,\n * absolute, a URL, a data URI, or a fragment. Anything else is treated as a\n * bare package specifier whose `@import` is preserved.\n */\nfunction isInternalImportSpecifier(spec: string): boolean {\n return /^(?:\\.{1,2}\\/|\\/|[a-z][a-z\\d+.-]*:|data:|#)/i.test(spec);\n}\n\n/** Matches a top-level `@layer <names>;` statement (declaration, not a block). */\nconst LAYER_STATEMENT_RE = /@layer\\s+([^{};]+);[ \\t]*\\n?/g;\n\nexport function createPreserveCssImportsPlugin() {\n // External `@import` statements, kept verbatim and in first-seen order.\n const externalImports: string[] = [];\n // Absolute paths already rewritten, to stay idempotent across output passes.\n const processed = new Set<string>();\n\n return definePlugin({\n name: 'preserve-css-imports',\n buildStart() {\n externalImports.length = 0;\n processed.clear();\n },\n // `load` runs before the CSS `transform` that would otherwise inline the\n // imports, so this is where they have to be stripped.\n async load(id: string) {\n const file = id.split('?')[0];\n if (!file.endsWith('.css')) return null;\n\n let code: string;\n try {\n code = await fs.readFile(file, 'utf8');\n } catch {\n return null;\n }\n if (!code.includes('@import')) return null;\n\n let changed = false;\n const stripped = code.replace(IMPORT_RE, (statement, _quote, spec) => {\n if (isInternalImportSpecifier(spec)) return statement;\n changed = true;\n const normalized = statement.trim();\n if (!externalImports.includes(normalized)) {\n externalImports.push(normalized);\n }\n return '';\n });\n if (!changed) return null;\n return { code: stripped, map: null };\n },\n // Re-emit the preserved imports into the final CSS files on disk. Running in\n // `writeBundle` (rather than `generateBundle`) lets other CSS producers —\n // e.g. the vanilla-extract plugin, which assembles its single stylesheet in\n // its own `writeBundle` — finish first.\n async writeBundle(options, bundle) {\n if (!externalImports.length) return;\n const { dir } = options;\n if (!dir) return;\n\n const importBlock = `${externalImports.join('\\n')}\\n`;\n\n await Promise.all(\n Object.values(bundle).map(async (chunk) => {\n if (chunk.type !== 'asset' || !chunk.fileName.endsWith('.css')) {\n return;\n }\n const filePath = path.join(dir, chunk.fileName);\n if (processed.has(filePath)) return;\n\n let css: string;\n try {\n css = await fs.readFile(filePath, 'utf8');\n } catch {\n // The asset may have been removed by another plugin (e.g. a\n // vanilla-extract temporary file merged elsewhere).\n return;\n }\n processed.add(filePath);\n\n // Hoist all `@layer <names>;` declarations to the top so the cascade\n // order is fixed before any layered `@import` adds to a layer, then\n // place the imports right after (they must precede every style rule).\n const layerNames: string[] = [];\n for (const [, names] of css.matchAll(LAYER_STATEMENT_RE)) {\n for (const name of names.split(',')) {\n const trimmed = name.trim();\n if (trimmed && !layerNames.includes(trimmed)) {\n layerNames.push(trimmed);\n }\n }\n }\n const body = css.replace(LAYER_STATEMENT_RE, '');\n const layerStatement = layerNames.length\n ? `@layer ${layerNames.join(', ')};\\n`\n : '';\n await fs.writeFile(\n filePath,\n `${layerStatement}${importBlock}${body}`,\n );\n }),\n );\n },\n });\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 mergeExternals,\n mergeNoExternals,\n writeFileAtomic,\n} from '../utils';\nimport {\n type ProjectPackageJson,\n type WorkspacePackageJson,\n type ResolvedWorkspaceConfig,\n type WorkspaceDirs,\n type WorkspaceSetupContext,\n type WorkspaceMeta,\n type Plugin,\n type UserHooks,\n type BuildedHooks,\n mergeDTSSettingsList,\n type NormalizedDTSSettings,\n type 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';\nimport { WorkspaceEnvPlugin } from '../env';\nimport { OptimizeCSSPlugin } from '../postcss/plugin';\nimport { rawLoaderPlugin, createPreserveCssImportsPlugin } from './plugins';\nimport { type CssOptions } from '@tsdown/css';\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 cssOptions: CssOptions | undefined;\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 css,\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 = [\n ...plugins,\n OptimizeCSSPlugin(this),\n WorkspaceEnvPlugin(this),\n rawLoaderPlugin,\n createPreserveCssImportsPlugin(),\n ];\n this.hooks = hooks;\n this.dts = dts;\n this.cssOptions = css;\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.mts`;\n const dtsDest = `./dist/${src\n .replace(/^\\.\\/src/, '.dts')\n .replace(/\\.ts$/, '.d.mts')}`;\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 writeFileAtomic(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 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 projectPlugins = project?.plugins || [];\n const projectHooks = project?.hooks || [];\n const plugins: Plugin[] = [...projectPlugins, ...config.plugins];\n const _hooks: UserHooks[] = [...projectHooks];\n if (config.hooks) {\n _hooks.push(config.hooks);\n }\n for (const plugin of config.plugins) {\n if (plugin.hooks) {\n _hooks.push(plugin.hooks);\n }\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 // `css` is an internal channel set by CSS plugins (e.g. vanilla-extract) via\n // `ctx.css`; it is not a user-facing workspace option. Starts undefined.\n optimizeCSS,\n mergeExternals: (override) => {\n config.deps ??= {};\n config.deps.neverBundle = mergeExternals(\n config.deps.neverBundle,\n override,\n );\n },\n mergeNoExternals: (override) => {\n config.deps ??= {};\n config.deps.alwaysBundle = mergeNoExternals(\n config.deps.alwaysBundle,\n override,\n );\n },\n };\n\n await hooks.setupWorkspace(ctx, () => {\n return typeof workspace === 'undefined' ? undefined : workspace;\n });\n\n const workspace = new PlugboyWorkspace(ctx);\n\n await hooks.createWorkspace(workspace);\n\n return workspace;\n}\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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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-XEn7b5JU.mjs","names":["fs","fs","fs","fs","fs","fs","fs"],"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/tsdown.ts","../src/utils/exit-hook.ts","../src/utils/file.ts","../src/utils/expose.ts","../src/constants.ts","../src/utils/project.ts","../src/utils/plugin.ts","../src/utils/workspace.ts","../src/utils/hook.ts","../src/path.ts","../src/package.ts","../src/workspace/dts.ts","../src/env/constants.ts","../src/env/utils.ts","../src/env/plugin.ts","../src/workspace/builder.ts","../src/project/project.ts","../src/postcss/plugin.ts","../src/workspace/plugins/raw-loader.ts","../src/workspace/plugins/preserve-css-imports.ts","../src/workspace/workspace.ts","../src/workspace/generate.ts"],"sourcesContent":["import type { Listable } from '../utils';\nimport { WorkspaceSetupContext, WorkspacePackageJson } from './workspace';\nimport type { PlugboyWorkspace } from '../workspace';\n\nexport type TryGetWorkspace = () => PlugboyWorkspace | undefined;\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: (\n ctx: WorkspaceSetupContext,\n getWorkspace: TryGetWorkspace,\n ) => any;\n /**\n * Hooks after workspace generation\n * @param workspace - {@link PlugboyWorkspace workspace instance}\n */\n createWorkspace: (workspace: PlugboyWorkspace) => any;\n /**\n * Hooks when correcting package.json\n * @param json - package.json just before it was modified and saved by the plugboy\n * @param workspace - {@link PlugboyWorkspace workspace instance}\n */\n preparePackageJSON: (\n json: WorkspacePackageJson,\n workspace: PlugboyWorkspace,\n ) => any;\n}\n\nexport function createHooksDefaults(): ResolvedHooks {\n return {\n setupWorkspace: [],\n createWorkspace: [],\n preparePackageJSON: [],\n };\n}\n\nexport type HookName = keyof HookTypes;\n\n/**\n * plugboy user hook definition\n * @see {@link HookTypes}\n */\nexport type UserHooks = {\n [Name in HookName]?: Listable<HookTypes[Name]>;\n};\n\n/**\n * Pre-setup hook definitions\n * @see {@link HookTypes}\n */\nexport type ResolvedHooks = {\n [Name in HookName]: HookTypes[Name][];\n};\n\nexport type HookArgs<Name extends HookName> = Parameters<HookTypes[Name]>;\n\nexport type UnPromisify<T> = T extends Promise<infer U> ? U : T;\n\nexport type HookReturnType<Name extends HookName> = UnPromisify<\n ReturnType<HookTypes[Name]>\n>;\n\n/**\n * Map of hook methods that can be initialized and called\n * @see {@link HookTypes}\n */\nexport type BuildedHooks = {\n [Name in HookName]: (\n ...args: HookArgs<Name>\n ) => Promise<HookReturnType<Name>>;\n};\n","import type { Builder } from '../workspace';\nimport type { PlugboyWorkspace } from '../workspace';\n\nexport interface EmitDTSOptions {\n cwd?: string;\n outDir?: string;\n}\n\n/**\n * Custom DTS compiler function\n */\nexport type DTSCompilerFunction = (\n opts: EmitDTSOptions & { workspace: PlugboyWorkspace },\n) => Promise<void>;\n\n/**\n * DTS compiler specification\n * - 'tsc': TypeScript compiler (default)\n * - 'vue-tsc': Vue SFC compatible compiler\n * - function: Custom compiler function\n */\nexport type DTSCompilerOption = 'tsc' | 'vue-tsc' | DTSCompilerFunction;\n\n/**\n * Type preservation target in declaration 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 declaration file (normalized)\n *\n * @see {@link DTSPreserveTypeTarget}\n */\nexport interface NormalizedDTSPreserveTypeTarget extends Omit<\n DTSPreserveTypeTarget,\n 'from'\n> {\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 declaration 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 declaration files (normalized)\n *\n * @see {@link DTSPreserveTypeSettings}\n */\nexport interface NormalizedDTSPreserveTypeSettings extends Omit<\n DTSPreserveTypeSettings,\n 'targets'\n> {\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 declaration strings\n * @param dts - Bundled declaration 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 * declaration output setting\n */\nexport interface DTSSettings {\n /**\n * Inline output without bundling declaration\n *\n * @default false\n */\n inline?: boolean;\n\n /**\n * DTS compiler specification\n * @default 'tsc'\n */\n compiler?: DTSCompilerOption;\n\n /**\n * Whether to ignore compiler errors and continue\n * @default false\n */\n ignoreCompilerErrors?: 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 declaration strings\n */\n normalizers?: DTSNormalizer[];\n}\n\n/**\n * declaration output setting (normalized)\n *\n * @see {@link DTSSettings}\n */\nexport interface NormalizedDTSSettings {\n /**\n * Inline output without bundling declaration\n */\n inline: boolean;\n\n /**\n * DTS compiler specification\n */\n compiler: DTSCompilerOption;\n\n /**\n * Whether to ignore compiler errors and continue\n */\n ignoreCompilerErrors: boolean;\n\n /**\n * list of type preservation settings\n */\n preserveType: NormalizedDTSPreserveTypeSettings[];\n\n /**\n * list of function to normalize declaration strings\n */\n normalizers: DTSNormalizer[];\n}\n\nexport function normalizeDTSSettings(\n settings: DTSSettings,\n): NormalizedDTSSettings {\n const {\n inline = false,\n compiler = 'tsc',\n ignoreCompilerErrors = false,\n preserveType = [],\n normalizers = [],\n } = settings || {};\n return {\n inline,\n compiler,\n ignoreCompilerErrors,\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 { UserConfig as TSDownConfig } from 'tsdown';\nimport type { Path } from '../path';\nimport { RequiredPackageJSON, MarkRequired } from './_utils';\nimport type { PlugboyProject } from '../project';\nimport type { UserPluginOption, Plugin } from './plugin';\nimport type { BuildedHooks, UserHooks } from './hook';\nimport { DTSSettings, NormalizedDTSSettings } from './dts';\nimport { OptimizeCSSOptions } from './css';\nimport type { ExternalOption } from '../types';\nimport { type NoExternalOption } from './tsdown';\nimport { type CssOptions } from '@tsdown/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 TSDOWN_SYNC_OPTIONS = [\n 'define',\n 'skipNodeModulesBundle',\n 'onSuccess',\n 'copy',\n 'deps',\n] as const satisfies (keyof TSDownConfig)[];\n\ntype TSDownSyncOption = (typeof TSDOWN_SYNC_OPTIONS)[number];\n\ninterface TSDownSyncOptions extends Pick<TSDownConfig, TSDownSyncOption> {}\n\n/**\n * Workspace User Configuration\n */\nexport interface UserWorkspaceConfig extends TSDownSyncOptions {\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 * declaration output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n css?: CssOptions;\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\n Required<\n Omit<\n UserWorkspaceConfig,\n | 'entries'\n | 'hooks'\n | 'plugins'\n | 'dts'\n | 'css'\n | 'optimizeCSS'\n | TSDownSyncOption\n >\n >,\n TSDownSyncOptions {\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 * declaration output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n css?: CssOptions;\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\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 * Plugin list\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 * declaration output setting\n * @see {@link NormalizedDTSSettings}\n */\n dts: NormalizedDTSSettings;\n css?: CssOptions;\n /**\n * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS: OptimizeCSSOptions | false;\n // @TODO JSDoc\n mergeExternals(override: ExternalOption): void;\n // @TODO JSDoc\n mergeNoExternals(override: NoExternalOption): void;\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 * declaration 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 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 Plugin}\n */\n plugins: Plugin[];\n /**\n * declaration 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","export function isPromise<T = any>(obj: any): obj is Promise<T> {\n return (\n !!obj &&\n (typeof obj === 'object' || typeof obj === 'function') &&\n typeof obj.then === 'function'\n );\n}\n\nexport type Listable<T> =\n | T\n | false\n | null\n | undefined\n | Listable<T>[]\n | Promise<T | false | null | undefined | Listable<T>[]>;\n\nexport async function resolveListable<T>(raw: Listable<T>): Promise<T[]> {\n const result: T[] = [];\n const list = Array.isArray(raw) ? raw : [raw];\n for (let row of list) {\n if (isPromise(row)) {\n row = await row;\n }\n if (!row) continue;\n if (Array.isArray(row)) {\n result.push(...(await resolveListable(row)));\n continue;\n }\n result.push(row);\n }\n return result;\n}\n","import {\n type ChunkAddon,\n type ChunkAddonObject,\n type ChunkAddonFunction,\n} from 'tsdown';\nimport type { NoExternalOption, ExternalOption } from '../types';\n\ntype ChunkAddonFunctionARGS = Parameters<ChunkAddonFunction>;\n\ntype MergeChunkAddonPosition = 'before' | 'after';\n\nconst _stringChunkToObject = (\n source: string | ChunkAddonObject,\n): ChunkAddonObject => {\n if (typeof source === 'object') return source;\n\n return {\n js: source,\n dts: source,\n css: source,\n } satisfies Required<ChunkAddonObject>;\n};\n\nconst _resolveChunkAddonToObject = (\n source: ChunkAddon,\n ...args: ChunkAddonFunctionARGS\n): ChunkAddonObject => {\n const tmp = typeof source === 'function' ? source(...args) || {} : source;\n return _stringChunkToObject(tmp);\n};\n\nconst _mergeChunkAddonObjects = (\n base: string | ChunkAddonObject,\n override: string | ChunkAddonObject,\n position: MergeChunkAddonPosition = 'after',\n): ChunkAddonObject => {\n const result = { ..._stringChunkToObject(base) };\n for (const [_key, value] of Object.entries(_stringChunkToObject(override))) {\n if (!value) continue;\n const key = _key as keyof ChunkAddonObject;\n const baseValue = result[key];\n const chunks = [value];\n if (baseValue) {\n if (position === 'before') {\n chunks.push(baseValue);\n } else {\n chunks.unshift(baseValue);\n }\n }\n result[key] = chunks.join('\\n\\n');\n }\n return result;\n};\n\nexport function mergeChunkAddons(\n base: ChunkAddon | undefined,\n override: ChunkAddon | undefined,\n position?: MergeChunkAddonPosition,\n): ChunkAddon | undefined {\n if (!override) return base;\n if (!base) return override;\n\n if (typeof base === 'function' || typeof override === 'function') {\n return (...args) => {\n const _base = _resolveChunkAddonToObject(base, ...args);\n const _override = _resolveChunkAddonToObject(override, ...args);\n return _mergeChunkAddonObjects(_base, _override, position);\n };\n }\n\n return _mergeChunkAddonObjects(base, override);\n}\n\ntype NullValue<T = void> = T | undefined | null | void;\n\nfunction isExternal(\n externalOption: ExternalOption,\n id: string,\n parentId: string | undefined,\n isResolved: boolean,\n): NullValue<boolean> {\n if (Array.isArray(externalOption)) {\n return externalOption.some((e) => isExternal(e, id, parentId, isResolved));\n }\n if (typeof externalOption === 'string') return id === externalOption;\n if (externalOption instanceof RegExp) return externalOption.test(id);\n if (typeof externalOption === 'function')\n return externalOption(id, parentId, isResolved);\n return false;\n}\n\nexport function mergeExternals(\n base: ExternalOption | undefined,\n override: ExternalOption | undefined,\n): ExternalOption | undefined {\n if (!override) return base;\n if (!base) return override;\n\n const externals = [base, override];\n\n return (id, parentId, isResolved) => {\n return externals.some((external) => {\n return isExternal(external, id, parentId, isResolved);\n });\n };\n}\n\nfunction isNoExternal(\n noExternalOption: NoExternalOption,\n id: string,\n importer: string | undefined,\n): NullValue<boolean> {\n if (Array.isArray(noExternalOption)) {\n return noExternalOption.some((e) => isNoExternal(e, id, importer));\n }\n if (typeof noExternalOption === 'string') return id === noExternalOption;\n if (noExternalOption instanceof RegExp) return noExternalOption.test(id);\n if (typeof noExternalOption === 'function')\n return noExternalOption(id, importer);\n return false;\n}\n\nexport function mergeNoExternals(\n base: NoExternalOption | undefined,\n override: NoExternalOption | undefined,\n): NoExternalOption | undefined {\n if (!override) return base;\n if (!base) return override;\n\n if (typeof base !== 'function' && typeof override !== 'function') {\n const _base = Array.isArray(base) ? base.slice() : [base];\n const _override = Array.isArray(override) ? override.slice() : [override];\n return [..._base, ..._override];\n }\n\n const noExternals = [base, override] as const;\n\n return (id, importer) => {\n return noExternals.some((spec) => {\n return isNoExternal(spec, id, importer);\n });\n };\n}\n","const EXIT_SIGNALS = ['SIGINT', 'SIGTERM', 'SIGHUP'] as const;\n\ntype ExitHandler = () => void;\n\nconst _callbacks: ExitHandler[] = [];\n\nexport function exitHook(cb: ExitHandler): () => void {\n _callbacks.push(cb);\n const off = () => {\n const index = _callbacks.indexOf(cb);\n if (index !== -1) {\n _callbacks.splice(index, 1);\n }\n };\n return off;\n}\n\nfor (const signal of EXIT_SIGNALS) {\n process.on(signal, async () => {\n const callbacks = _callbacks.slice();\n _callbacks.length = 0;\n try {\n await Promise.all(callbacks.map((cb) => cb()));\n process.exit(0);\n } catch (_err) {\n // eslint-disable-next-line no-console\n console.error(_err);\n process.exit(1);\n }\n });\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { exitHook } from './exit-hook';\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 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\nexport async function writeFileAtomic(filePath: string, content: string) {\n const tempFile = `${filePath}.${process.pid}.tmp`;\n const cleanup = () => {\n return fs.promises.unlink(tempFile).catch(() => {});\n };\n const off = exitHook(cleanup);\n try {\n await fs.promises.writeFile(tempFile, content);\n await fs.promises.rename(tempFile, filePath);\n off();\n } catch (error) {\n off();\n await cleanup();\n throw error;\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","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 { 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 { resolveUserPluginOption } 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 hooks,\n } = userConfig;\n return {\n workspacesDir,\n scripts: Array.isArray(scripts) ? scripts : [{ name: '', scripts }],\n peerDependencies,\n tsconfig,\n readme,\n plugins: await resolveUserPluginOption(plugins),\n optimizeCSS: optimizeCSS === true ? {} : optimizeCSS,\n hooks,\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","import { UserPluginOption, Plugin } from '../types';\nimport { loadProjectConfig } from './project';\n\nexport async function resolveUserPluginOption(\n pluginOption: UserPluginOption | undefined,\n): Promise<Plugin[]> {\n if (!pluginOption) return [];\n\n const awaited = await pluginOption;\n if (!awaited) return [];\n\n if (Array.isArray(pluginOption)) {\n return (\n await Promise.all(\n pluginOption.map((o) => resolveUserPluginOption(o)).flat(),\n )\n ).flat();\n }\n return [awaited as Plugin];\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 { resolveUserPluginOption } 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 hooks,\n } = userConfig;\n return {\n ...userConfig,\n ignoreProjectConfig,\n entries: resolveRawWorkspaceEntries(entries),\n plugins: await resolveUserPluginOption(plugins),\n optimizeCSS: optimizeCSS === true ? {} : optimizeCSS,\n hooks,\n };\n}\n\nexport function defineWorkspaceConfig<Config extends UserWorkspaceConfig>(\n config: Config,\n): Promise<ResolvedWorkspaceConfig> {\n return resolveUserWorkspaceConfig(config);\n}\n\nexport async function loadWorkspaceConfig(\n searchDir?: string,\n depth?: number,\n): Promise<ResolvedWorkspaceConfig> {\n const hit = await findConfig(\n {\n fileName: `${WORKSPACE_CONFIG_BASENAME}.${SEARCH_BUNDLE_EXTENSIONS_MATCH}`,\n depth,\n allowMissing: true,\n },\n searchDir,\n );\n\n const userConfig = hit\n ? (\n await bundleRequire<{\n default: UserWorkspaceConfig | Promise<UserWorkspaceConfig>;\n }>({\n filepath: hit.path,\n })\n ).mod.default\n : ({} as UserWorkspaceConfig);\n\n return resolveUserWorkspaceConfig(await userConfig);\n}\n","import {\n UserHooks,\n ResolvedHooks,\n BuildedHooks,\n createHooksDefaults,\n} from '../types';\nimport { resolveListable } from './general';\n\nexport async function resolveUserHooks(\n ...userHooks: (UserHooks | undefined | null | false)[]\n): Promise<ResolvedHooks> {\n const hooks = createHooksDefaults();\n if (!userHooks) return hooks;\n for (const userHook of userHooks) {\n if (!userHook) continue;\n for (const [hookName, _hooks] of Object.entries(userHook)) {\n if (hooks) {\n (hooks as any)[hookName].push(...(await resolveListable(_hooks)));\n }\n }\n }\n return hooks;\n}\n\nexport function buildHooks(resolvedHooks: ResolvedHooks): BuildedHooks {\n const hooks: any = {};\n Object.entries(resolvedHooks).forEach(([hookName, fns]) => {\n hooks[hookName] = async (...args: any[]): Promise<any> => {\n const results: any[] = [];\n for (const fn of fns) {\n results.push(await (fn as any)(...args));\n }\n return results;\n };\n });\n return hooks;\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport { isFileNotFoundException } from './utils';\n\nexport class Path {\n private _value: string;\n\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","import { execa } from 'execa';\nimport path from 'node:path';\nimport type { DTSCompilerOption, EmitDTSOptions } from '../types/dts';\nimport type { PlugboyWorkspace } from './workspace';\n\nexport interface EmitDTSFullOptions extends EmitDTSOptions {\n workspace: PlugboyWorkspace;\n compiler?: DTSCompilerOption;\n ignoreCompilerErrors?: boolean;\n}\n// export interface EmitDTSOptions {\n// cwd?: string;\n// outDir?: string;\n// }\n\nexport async function runTsc(\n compiler: 'tsc' | 'vue-tsc',\n opts: EmitDTSOptions = {},\n ignoreErrors?: boolean,\n) {\n const { cwd = process.cwd(), outDir = path.join(cwd, 'dist/dts') } = opts;\n\n try {\n await execa(\n compiler,\n [\n '--declaration true',\n '--skipLibCheck',\n '--noEmit false',\n '--emitDeclarationOnly',\n `--outDir ${outDir}`,\n ],\n { cwd, shell: true, stdio: 'inherit' },\n );\n } catch (e) {\n if (!ignoreErrors) throw e;\n // eslint-disable-next-line no-console\n console.log(\n `Note: ${compiler} reported errors, but continuing with generated files...`,\n );\n }\n}\n\n/**\n * Emit DTS (declaration files)\n */\nexport async function emitDTS(opts: EmitDTSFullOptions) {\n const {\n compiler = 'tsc',\n ignoreCompilerErrors = false,\n workspace,\n ...baseOpts\n } = opts;\n\n if (typeof compiler === 'function') {\n // Custom compiler function\n await compiler({ ...baseOpts, workspace });\n } else {\n await runTsc(compiler, { ...baseOpts }, ignoreCompilerErrors);\n }\n}\n","import type { PlugboyEnvVarName } from './types';\n\n// Values starting with \"#\" have the \"#\" stripped and are transformed so that\n// references like import.meta.env are not removed by rolldown during bundling.\nexport const PLUGBOY_VAR_ENVS_FOR_BUNDLE: Record<PlugboyEnvVarName, string> = {\n __PLUGBOY_STUB__: 'false',\n __PLUGBOY_DEV__: `#(typeof process !== 'undefined' && process.env?.NODE_ENV === 'development') || (typeof import.meta !== 'undefined' && import.meta.env?.DEV === true)`,\n};\n\nexport const PLUGBOY_VAR_ENVS_FOR_STUB: Record<PlugboyEnvVarName, string> = {\n __PLUGBOY_STUB__: 'true',\n __PLUGBOY_DEV__: 'true',\n};\n","import { type InlineConfig } from 'tsdown';\nimport {\n PLUGBOY_VAR_ENVS_FOR_BUNDLE,\n PLUGBOY_VAR_ENVS_FOR_STUB,\n} from './constants';\n\nexport function applyPlugboyEnvs(\n config: Pick<InlineConfig, 'define' | 'banner'>,\n) {\n const DEFINE_VAR_INJECTS = Object.fromEntries(\n Object.entries(PLUGBOY_VAR_ENVS_FOR_BUNDLE).map(([envName, value]) => {\n const _value = value.startsWith('#') ? `$$${envName}` : value;\n return [envName, _value];\n }),\n );\n\n config.define = {\n ...config.define,\n ...DEFINE_VAR_INJECTS,\n };\n}\n\nexport function getPlugboyEnvCodeForStub() {\n return Object.entries(PLUGBOY_VAR_ENVS_FOR_STUB)\n .map(([envName, variable]) => `globalThis.${envName} = ${variable};`)\n .join('\\n');\n}\n","import type { PlugboyWorkspace } from '../workspace';\nimport type { Plugin } from '../types';\nimport { parse } from 'acorn';\nimport { PLUGBOY_VAR_ENVS_FOR_BUNDLE } from './constants';\n\nfunction findAfterImports(code: string): number {\n const ast = parse(code, {\n sourceType: 'module',\n ecmaVersion: 'latest',\n }) as any;\n\n let end = 0;\n\n for (const node of ast.body) {\n if (\n node.type === 'ImportDeclaration' ||\n node.type === 'ExportNamedDeclaration' ||\n node.type === 'ExportAllDeclaration' ||\n node.type === 'ExportDefaultDeclaration'\n ) {\n end = Math.max(end, node.end);\n continue;\n }\n break;\n }\n\n return end;\n}\n\nconst _replacements: [envName: string, value: string][] = [];\n\nObject.entries(PLUGBOY_VAR_ENVS_FOR_BUNDLE).forEach(([envName, value]) => {\n if (value.startsWith('#')) {\n _replacements.push([`$$${envName}`, value.substring(1)]);\n }\n});\n\nexport function WorkspaceEnvPlugin(_workspace: PlugboyWorkspace): Plugin {\n return {\n name: 'plugboy-workspace-env',\n async renderChunk(code, _chunk) {\n const injects = _replacements.filter(([envName]) =>\n code.includes(envName),\n );\n\n if (injects.length) {\n const MagicString = (await import('magic-string')).default;\n const ms = new MagicString(code);\n\n const insertPos = findAfterImports(code);\n const injectCode = injects\n .map(([eventName, value]) => `const ${eventName} = ${value};`)\n .join('\\n');\n ms.appendLeft(insertPos, `\\n${injectCode}`);\n\n return {\n code: ms.toString(),\n map: ms.generateMap({ hires: true }),\n };\n }\n },\n };\n}\n","import { type InlineConfig, build } from 'tsdown';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { glob } from 'glob';\nimport type { PlugboyWorkspace, WorkspaceObjectExport } from './workspace';\nimport {\n TSDOWN_SYNC_OPTIONS,\n NormalizedDTSPreserveTypeSettings,\n} from '../types';\nimport { copyDirSync, rmrf, mergeExternals } from '../utils';\nimport { emitDTS } from './dts';\nimport { applyPlugboyEnvs, getPlugboyEnvCodeForStub } from '../env';\n\nconst SHEBANG_MATCH_RE = /^(#!.+?)\\n/;\n\ninterface ResolvedOptions extends InlineConfig {}\n\nexport class Builder {\n readonly workspace: PlugboyWorkspace;\n\n private _tsdownOptions?: ResolvedOptions;\n\n get entry() {\n return this.workspace.entry;\n }\n\n get dts() {\n return this.workspace.dts;\n }\n\n constructor(workspace: PlugboyWorkspace) {\n this.workspace = workspace;\n }\n\n async tsdownOptions(overrides?: {\n watch?: boolean;\n }): Promise<ResolvedOptions> {\n const { _tsdownOptions } = this;\n if (_tsdownOptions) return _tsdownOptions;\n\n const { entry, dts } = this;\n\n const resolvedOptions: ResolvedOptions = {\n dts:\n dts.inline || typeof dts.compiler === 'function'\n ? false\n : dts.compiler === 'vue-tsc'\n ? { vue: true }\n : true,\n treeshake: true,\n css: this.workspace.cssOptions,\n plugins: this.workspace.plugins,\n entry,\n sourcemap: true,\n clean: true,\n ...overrides,\n };\n\n for (const opt of TSDOWN_SYNC_OPTIONS) {\n resolvedOptions[opt] = this.workspace.config[opt] as any;\n }\n\n applyPlugboyEnvs(resolvedOptions);\n\n resolvedOptions.deps ??= {};\n resolvedOptions.deps.neverBundle = mergeExternals(\n resolvedOptions.deps.neverBundle,\n [\n /^(@fastkit\\/)?plugboy(?!\\/runtime-utils)/,\n ...this.workspace.dependencies,\n ],\n );\n\n this._tsdownOptions = resolvedOptions;\n\n return resolvedOptions;\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 disableChecks = '/* eslint-disable */\\n// @ts-nocheck\\n';\n const code = `${disableChecks}${getPlugboyEnvCodeForStub()}\\nexport * from '${location}';`;\n const dtsPath = path.join(fromDir, `${fromParsed.name}.d.mts`);\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 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 emitDTSManually() {\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 workspace: this.workspace,\n compiler: this.workspace.dts.compiler,\n ignoreCompilerErrors: this.workspace.dts.ignoreCompilerErrors,\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\\.m?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,d.mts}'));\n await this.normalizeDTSFiles(dtsFiles);\n }\n\n async build() {\n const options = await this.tsdownOptions();\n await build(options);\n\n if (this.dts.inline || typeof this.dts.compiler === 'function') {\n await this.emitDTSManually();\n } else {\n await this.normalizeDTSFiles();\n }\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);\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 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 type { PlugboyWorkspace } from '../workspace';\nimport type { Plugin, ResolvedOptimizeCSSOptions } from '../types';\nimport type { Processor, AcceptedPlugin as PostcssPlugin } from 'postcss';\nimport type { RolldownChunk } from 'tsdown';\n\n/**\n * The rolldown `OutputAsset` type.\n *\n * tsdown no longer re-exports rolldown's `OutputAsset` directly, and rolldown\n * itself is not a direct dependency. We therefore derive it from the only\n * rolldown-output type tsdown still exposes (`RolldownChunk`), which is\n * `(OutputChunk | OutputAsset) & { outDir: string }`.\n *\n * - `Extract<..., { type: 'asset' }>` picks the asset variant via its discriminant.\n * - `Omit<..., 'outDir'>` drops the tsdown-specific augmentation so the type\n * matches the plain assets handed to rolldown's `generateBundle` hook.\n */\ntype OutputAsset = Omit<Extract<RolldownChunk, { type: 'asset' }>, 'outDir'>;\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\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 optimizeCSS(\n asset: OutputAsset,\n options: ResolvedOptimizeCSSOptions,\n) {\n const postcss = await getPostcss(options);\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 layerDefs + css.replace(allLayerDefRe, '');\n }\n\n const css = prepare(asset.source.toString());\n\n const result = await postcss.process(css, {\n from: asset.fileName,\n to: asset.fileName,\n map: { inline: false },\n });\n\n asset.source = result.css.replace(SOURCE_MAPPING_URL_COMMENT_RE, '');\n}\n\nexport function OptimizeCSSPlugin(workspace: PlugboyWorkspace): Plugin {\n return {\n name: 'plugboy-optimize-css',\n async generateBundle(_options, bundle) {\n const { optimizeCSSOptions } = workspace;\n if (!optimizeCSSOptions) return;\n\n for (const chunk of Object.values(bundle)) {\n if (chunk.type !== 'asset' || !chunk.fileName.endsWith('.css')) {\n continue;\n }\n await optimizeCSS(chunk, optimizeCSSOptions);\n }\n },\n };\n}\n","import { Plugin } from '../../types';\nimport fs from 'node:fs/promises';\n\nexport const rawLoaderPlugin: Plugin = {\n name: 'raw-loader',\n async resolveId(id, importer, options) {\n if (!id.endsWith('?raw')) return null;\n\n const rawPath = id.slice(0, -4); // remove '?raw'\n\n // Resolve a relative path to an absolute path\n const resolved = await this.resolve(rawPath, importer, {\n ...options,\n skipSelf: true,\n });\n\n if (!resolved) return null;\n\n // Return the resolved absolute path with a marker\n return `\\0raw:${resolved.id}`;\n },\n\n async load(id) {\n if (!id.startsWith('\\0raw:')) return null;\n\n const realPath = id.slice(5); // remove '\\0raw:'\n const content = await fs.readFile(realPath, 'utf-8');\n return `export default ${JSON.stringify(content)};`;\n },\n};\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { definePlugin } from '../../utils';\n\n/**\n * Plugin to preserve external CSS `@import` statements.\n *\n * rolldown / tsdown's CSS pipeline (lightningcss) resolves and inlines every\n * `@import` it can. For bare package specifiers (e.g.\n * `@import url('material-symbols/rounded.css') layer(...)`) that is wrong for a\n * library build: it bloats the output and rebases the imported package's own\n * relative asset URLs (fonts) against our `dist`, breaking them. Such imports\n * should stay external so the consumer's bundler resolves them.\n *\n * We can't intercept this in a `transform` hook — by then tsdown has already\n * inlined the imports. Instead we strip them in `load` (which runs before the\n * CSS transform), remember them, and re-emit them in `writeBundle`, after every\n * other CSS producer (including vanilla-extract's merge) has written the final\n * file to disk.\n */\n\n/**\n * Matches a single `@import` statement, capturing the quote (group 1) and the\n * imported specifier (group 2). Handles `url(...)`, quoted, and bare forms, and\n * tolerates trailing conditions (e.g. `layer(...)`, media queries).\n */\nconst IMPORT_RE = /@import\\s+(?:url\\(\\s*)?([\"']?)([^\"')\\s]+)\\1\\s*\\)?[^;]*;/g;\n\n/**\n * A specifier is \"internal\" (safe to bundle/inline) when it is relative,\n * absolute, a URL, a data URI, or a fragment. Anything else is treated as a\n * bare package specifier whose `@import` is preserved.\n */\nfunction isInternalImportSpecifier(spec: string): boolean {\n return /^(?:\\.{1,2}\\/|\\/|[a-z][a-z\\d+.-]*:|data:|#)/i.test(spec);\n}\n\n/** Matches a top-level `@layer <names>;` statement (declaration, not a block). */\nconst LAYER_STATEMENT_RE = /@layer\\s+([^{};]+);[ \\t]*\\n?/g;\n\nexport function createPreserveCssImportsPlugin() {\n // External `@import` statements, kept verbatim and in first-seen order.\n const externalImports: string[] = [];\n // Absolute paths already rewritten, to stay idempotent across output passes.\n const processed = new Set<string>();\n\n return definePlugin({\n name: 'preserve-css-imports',\n buildStart() {\n externalImports.length = 0;\n processed.clear();\n },\n // `load` runs before the CSS `transform` that would otherwise inline the\n // imports, so this is where they have to be stripped.\n async load(id: string) {\n const file = id.split('?')[0];\n if (!file.endsWith('.css')) return null;\n\n let code: string;\n try {\n code = await fs.readFile(file, 'utf8');\n } catch {\n return null;\n }\n if (!code.includes('@import')) return null;\n\n let changed = false;\n const stripped = code.replace(IMPORT_RE, (statement, _quote, spec) => {\n if (isInternalImportSpecifier(spec)) return statement;\n changed = true;\n const normalized = statement.trim();\n if (!externalImports.includes(normalized)) {\n externalImports.push(normalized);\n }\n return '';\n });\n if (!changed) return null;\n return { code: stripped, map: null };\n },\n // Re-emit the preserved imports into the final CSS files on disk. Running in\n // `writeBundle` (rather than `generateBundle`) lets other CSS producers —\n // e.g. the vanilla-extract plugin, which assembles its single stylesheet in\n // its own `writeBundle` — finish first.\n async writeBundle(options, bundle) {\n if (!externalImports.length) return;\n const { dir } = options;\n if (!dir) return;\n\n const importBlock = `${externalImports.join('\\n')}\\n`;\n\n await Promise.all(\n Object.values(bundle).map(async (chunk) => {\n if (chunk.type !== 'asset' || !chunk.fileName.endsWith('.css')) {\n return;\n }\n const filePath = path.join(dir, chunk.fileName);\n if (processed.has(filePath)) return;\n\n let css: string;\n try {\n css = await fs.readFile(filePath, 'utf8');\n } catch {\n // The asset may have been removed by another plugin (e.g. a\n // vanilla-extract temporary file merged elsewhere).\n return;\n }\n processed.add(filePath);\n\n // Hoist all `@layer <names>;` declarations to the top so the cascade\n // order is fixed before any layered `@import` adds to a layer, then\n // place the imports right after (they must precede every style rule).\n const layerNames: string[] = [];\n for (const [, names] of css.matchAll(LAYER_STATEMENT_RE)) {\n for (const name of names.split(',')) {\n const trimmed = name.trim();\n if (trimmed && !layerNames.includes(trimmed)) {\n layerNames.push(trimmed);\n }\n }\n }\n const body = css.replace(LAYER_STATEMENT_RE, '');\n const layerStatement = layerNames.length\n ? `@layer ${layerNames.join(', ')};\\n`\n : '';\n await fs.writeFile(\n filePath,\n `${layerStatement}${importBlock}${body}`,\n );\n }),\n );\n },\n });\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 mergeExternals,\n mergeNoExternals,\n writeFileAtomic,\n} from '../utils';\nimport {\n type ProjectPackageJson,\n type WorkspacePackageJson,\n type ResolvedWorkspaceConfig,\n type WorkspaceDirs,\n type WorkspaceSetupContext,\n type WorkspaceMeta,\n type Plugin,\n type UserHooks,\n type BuildedHooks,\n mergeDTSSettingsList,\n type NormalizedDTSSettings,\n type 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';\nimport { WorkspaceEnvPlugin } from '../env';\nimport { OptimizeCSSPlugin } from '../postcss/plugin';\nimport { rawLoaderPlugin, createPreserveCssImportsPlugin } from './plugins';\nimport { type CssOptions } from '@tsdown/css';\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 cssOptions: CssOptions | undefined;\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 css,\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 = [\n ...plugins,\n OptimizeCSSPlugin(this),\n WorkspaceEnvPlugin(this),\n rawLoaderPlugin,\n createPreserveCssImportsPlugin(),\n ];\n this.hooks = hooks;\n this.dts = dts;\n this.cssOptions = css;\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.mts`;\n const dtsDest = `./dist/${src\n .replace(/^\\.\\/src/, '.dts')\n .replace(/\\.ts$/, '.d.mts')}`;\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 writeFileAtomic(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 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 projectPlugins = project?.plugins || [];\n const projectHooks = project?.hooks || [];\n const plugins: Plugin[] = [...projectPlugins, ...config.plugins];\n const _hooks: UserHooks[] = [...projectHooks];\n if (config.hooks) {\n _hooks.push(config.hooks);\n }\n for (const plugin of config.plugins) {\n if (plugin.hooks) {\n _hooks.push(plugin.hooks);\n }\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 css: config.css,\n optimizeCSS,\n mergeExternals: (override) => {\n config.deps ??= {};\n config.deps.neverBundle = mergeExternals(\n config.deps.neverBundle,\n override,\n );\n },\n mergeNoExternals: (override) => {\n config.deps ??= {};\n config.deps.alwaysBundle = mergeNoExternals(\n config.deps.alwaysBundle,\n override,\n );\n },\n };\n\n await hooks.setupWorkspace(ctx, () => {\n return typeof workspace === 'undefined' ? undefined : workspace;\n });\n\n const workspace = new PlugboyWorkspace(ctx);\n\n await hooks.createWorkspace(workspace);\n\n return workspace;\n}\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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"}
|