@fastkit/plugboy 1.4.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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-Dngfi1p6.mjs";
|
|
2
2
|
import { cac } from "cac";
|
|
3
3
|
//#region package.json
|
|
4
|
-
var version = "1.
|
|
4
|
+
var version = "1.5.0";
|
|
5
5
|
//#endregion
|
|
6
6
|
//#region src/cli.ts
|
|
7
7
|
async function main() {
|
package/dist/plugboy.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as resolveOptimizeCSSOptions, A as resolveRawExposeEntriesSettings, B as resolveBundledConfigOutputFile, C as findProjectPlugin, D as loadProjectConfig, E as isProjectPackageJson, F as getFilename, G as mergeChunkAddons, H as stripDanglingDTSSourceMaps, I as isFileNotFoundException, J as isPromise, K as mergeExternals, L as pathExists, M as findConfig, N as findFile, O as resolveUserProjectConfig, P as getDirname, Q as WORKSPACE_REQUIRED_FIELDS, R as rmrf, S as extractProjectPlugins, T as defineProjectConfig, U as exitHook, V as DANGLING_DTS_SOURCE_MAP_RE, W as collectExternalStringPrefixes, X as PROJECT_REQUIRED_FIELDS, Y as resolveListable, Z as TSDOWN_SYNC_OPTIONS, _ as loadWorkspaceConfig, a as syncWorkspacePackageFields, b as resolveUserWorkspaceConfig, c as Builder, d as getWorkspacePackageJson, et as mergeDTSSettingsList, f as Path, g as isWorkspacePackageJson, h as defineWorkspaceConfig, i as getWorkspace, it as createHooksDefaults, j as copyDirSync, k as exposeEntries, l as findWorkspacePackages, m as resolveUserHooks, n as PlugboyWorkspace, nt as normalizeDTSPreserveTypeTarget, o as PlugboyProject, p as buildHooks, q as mergeNoExternals, r as WORKSPACE_PACKAGE_SYNC_FIELDS, rt as normalizeDTSSettings, s as getProject, t as generateWorkspace, tt as normalizeDTSPreserveTypeSettings, u as getProjectPackageJson, v as resolveRawWorkspaceEntries, w as resolveUserPluginOption, x as definePlugin, y as resolveRawWorkspaceEntry, z as writeFileAtomic } from "./workspace-
|
|
1
|
+
import { $ as resolveOptimizeCSSOptions, A as resolveRawExposeEntriesSettings, B as resolveBundledConfigOutputFile, C as findProjectPlugin, D as loadProjectConfig, E as isProjectPackageJson, F as getFilename, G as mergeChunkAddons, H as stripDanglingDTSSourceMaps, I as isFileNotFoundException, J as isPromise, K as mergeExternals, L as pathExists, M as findConfig, N as findFile, O as resolveUserProjectConfig, P as getDirname, Q as WORKSPACE_REQUIRED_FIELDS, R as rmrf, S as extractProjectPlugins, T as defineProjectConfig, U as exitHook, V as DANGLING_DTS_SOURCE_MAP_RE, W as collectExternalStringPrefixes, X as PROJECT_REQUIRED_FIELDS, Y as resolveListable, Z as TSDOWN_SYNC_OPTIONS, _ as loadWorkspaceConfig, a as syncWorkspacePackageFields, b as resolveUserWorkspaceConfig, c as Builder, d as getWorkspacePackageJson, et as mergeDTSSettingsList, f as Path, g as isWorkspacePackageJson, h as defineWorkspaceConfig, i as getWorkspace, it as createHooksDefaults, j as copyDirSync, k as exposeEntries, l as findWorkspacePackages, m as resolveUserHooks, n as PlugboyWorkspace, nt as normalizeDTSPreserveTypeTarget, o as PlugboyProject, p as buildHooks, q as mergeNoExternals, r as WORKSPACE_PACKAGE_SYNC_FIELDS, rt as normalizeDTSSettings, s as getProject, t as generateWorkspace, tt as normalizeDTSPreserveTypeSettings, u as getProjectPackageJson, v as resolveRawWorkspaceEntries, w as resolveUserPluginOption, x as definePlugin, y as resolveRawWorkspaceEntry, z as writeFileAtomic } from "./workspace-Dngfi1p6.mjs";
|
|
2
2
|
export { Builder, DANGLING_DTS_SOURCE_MAP_RE, PROJECT_REQUIRED_FIELDS, Path, PlugboyProject, PlugboyWorkspace, TSDOWN_SYNC_OPTIONS, WORKSPACE_PACKAGE_SYNC_FIELDS, WORKSPACE_REQUIRED_FIELDS, buildHooks, collectExternalStringPrefixes, 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, resolveBundledConfigOutputFile, resolveListable, resolveOptimizeCSSOptions, resolveRawExposeEntriesSettings, resolveRawWorkspaceEntries, resolveRawWorkspaceEntry, resolveUserHooks, resolveUserPluginOption, resolveUserProjectConfig, resolveUserWorkspaceConfig, rmrf, stripDanglingDTSSourceMaps, syncWorkspacePackageFields, writeFileAtomic };
|
|
@@ -794,6 +794,37 @@ function WorkspaceEnvPlugin(_workspace) {
|
|
|
794
794
|
//#endregion
|
|
795
795
|
//#region src/workspace/builder.ts
|
|
796
796
|
const SHEBANG_MATCH_RE = /^(#!.+?)\n/;
|
|
797
|
+
/**
|
|
798
|
+
* Escape a string for use inside a `RegExp`.
|
|
799
|
+
*
|
|
800
|
+
* Kept local: plugboy builds every other package, so it cannot depend on one.
|
|
801
|
+
*/
|
|
802
|
+
function escapeRegExp(source) {
|
|
803
|
+
return source.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
804
|
+
}
|
|
805
|
+
/**
|
|
806
|
+
* Every name the declaration file already binds -- imported from any module, or
|
|
807
|
+
* declared in the file itself.
|
|
808
|
+
*
|
|
809
|
+
* `X as Y` binds `Y`, so the local name is what matters rather than the
|
|
810
|
+
* exported one.
|
|
811
|
+
*/
|
|
812
|
+
function collectBoundNames(dts) {
|
|
813
|
+
const names = /* @__PURE__ */ new Set();
|
|
814
|
+
for (const [, clause] of dts.matchAll(/^import\s+([^;]+?)\s+from\s+['"][^'"]+['"];?$/gm)) {
|
|
815
|
+
const braced = clause.match(/\{([^{}]*)\}/);
|
|
816
|
+
if (braced) for (const specifier of braced[1].split(",")) {
|
|
817
|
+
const local = specifier.split(" as ").pop()?.trim();
|
|
818
|
+
if (local) names.add(local);
|
|
819
|
+
}
|
|
820
|
+
const head = clause.replace(/\{[^{}]*\}/, "").replace(/,/g, " ").trim();
|
|
821
|
+
const namespaced = head.match(/\*\s+as\s+([\w$]+)/);
|
|
822
|
+
if (namespaced) names.add(namespaced[1]);
|
|
823
|
+
else if (/^[\w$]+$/.test(head)) names.add(head);
|
|
824
|
+
}
|
|
825
|
+
for (const [, name] of dts.matchAll(/^(?:export\s+)?(?:declare\s+)?(?:type|interface|class|const|function)\s+([\w$]+)/gm)) names.add(name);
|
|
826
|
+
return names;
|
|
827
|
+
}
|
|
797
828
|
var Builder = class {
|
|
798
829
|
workspace;
|
|
799
830
|
_tsdownOptions;
|
|
@@ -873,16 +904,16 @@ var Builder = class {
|
|
|
873
904
|
normalizeDTSBySettings(dts, settings) {
|
|
874
905
|
const { targets, pkg } = settings;
|
|
875
906
|
const packageIsOwn = this.workspace.json.name === pkg;
|
|
876
|
-
const
|
|
907
|
+
const target = (() => {
|
|
877
908
|
if (!pkg || packageIsOwn) return;
|
|
878
|
-
const
|
|
879
|
-
const
|
|
880
|
-
|
|
881
|
-
|
|
909
|
+
const re = new RegExp(`import {([^{}]+)} from (['"])${escapeRegExp(pkg)}\\2`);
|
|
910
|
+
const matched = dts.match(re);
|
|
911
|
+
if (!matched) return;
|
|
912
|
+
const [statement, specifiers, quote] = matched;
|
|
882
913
|
return {
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
914
|
+
statement,
|
|
915
|
+
specifiers,
|
|
916
|
+
quote
|
|
886
917
|
};
|
|
887
918
|
})();
|
|
888
919
|
const hitTypeNames = [];
|
|
@@ -893,24 +924,14 @@ var Builder = class {
|
|
|
893
924
|
}
|
|
894
925
|
});
|
|
895
926
|
if (!hitTypeNames.length) return;
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
})
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
if (!new RegExp(`(^|\n)import { ${typeName} } from '${pkg}'`).test(dts) && !mods.includes(typeName)) appends.push(typeName);
|
|
905
|
-
});
|
|
906
|
-
if (appends.length) dts = dts.replace(importRe, `import { $1, ${appends.join(", ")} } from '${pkg}'`);
|
|
907
|
-
} else if (pkg && !packageIsOwn) {
|
|
908
|
-
const mods = [];
|
|
909
|
-
hitTypeNames.forEach((typeName) => {
|
|
910
|
-
if (!dts.includes(`export declare type ${typeName} = `)) mods.push(typeName);
|
|
911
|
-
});
|
|
912
|
-
if (mods.length) dts = `import { ${mods.join(", ")} } from '${pkg}';\n${dts}`;
|
|
913
|
-
}
|
|
927
|
+
const bound = collectBoundNames(dts);
|
|
928
|
+
const appends = [...new Set(hitTypeNames)].filter((typeName) => !bound.has(typeName));
|
|
929
|
+
if (!appends.length) return dts;
|
|
930
|
+
if (target) {
|
|
931
|
+
const { statement, specifiers, quote } = target;
|
|
932
|
+
const merged = `import { ${specifiers.trim()}, ${appends.join(", ")} } from ${quote}${pkg}${quote}`;
|
|
933
|
+
dts = dts.replace(statement, () => merged);
|
|
934
|
+
} else if (pkg && !packageIsOwn) dts = `import { ${appends.join(", ")} } from '${pkg}';\n${dts}`;
|
|
914
935
|
return dts;
|
|
915
936
|
}
|
|
916
937
|
async normalizeDTSFile(filePath) {
|
|
@@ -1966,4 +1987,4 @@ export default defineWorkspaceConfig({
|
|
|
1966
1987
|
//#endregion
|
|
1967
1988
|
export { resolveOptimizeCSSOptions as $, resolveRawExposeEntriesSettings as A, resolveBundledConfigOutputFile as B, findProjectPlugin as C, loadProjectConfig as D, isProjectPackageJson as E, getFilename as F, mergeChunkAddons as G, stripDanglingDTSSourceMaps as H, isFileNotFoundException as I, isPromise as J, mergeExternals as K, pathExists as L, findConfig as M, findFile as N, resolveUserProjectConfig as O, getDirname as P, WORKSPACE_REQUIRED_FIELDS as Q, rmrf as R, extractProjectPlugins as S, defineProjectConfig as T, exitHook as U, DANGLING_DTS_SOURCE_MAP_RE as V, collectExternalStringPrefixes as W, PROJECT_REQUIRED_FIELDS as X, resolveListable as Y, TSDOWN_SYNC_OPTIONS as Z, loadWorkspaceConfig as _, syncWorkspacePackageFields as a, resolveUserWorkspaceConfig as b, Builder as c, getWorkspacePackageJson as d, mergeDTSSettingsList as et, Path as f, isWorkspacePackageJson as g, defineWorkspaceConfig as h, getWorkspace as i, createHooksDefaults as it, copyDirSync as j, exposeEntries as k, findWorkspacePackages as l, resolveUserHooks as m, PlugboyWorkspace as n, normalizeDTSPreserveTypeTarget as nt, PlugboyProject as o, buildHooks as p, mergeNoExternals as q, WORKSPACE_PACKAGE_SYNC_FIELDS as r, normalizeDTSSettings as rt, getProject as s, generateWorkspace as t, normalizeDTSPreserveTypeSettings as tt, getProjectPackageJson as u, resolveRawWorkspaceEntries as v, resolveUserPluginOption as w, definePlugin as x, resolveRawWorkspaceEntry as y, writeFileAtomic as z };
|
|
1968
1989
|
|
|
1969
|
-
//# sourceMappingURL=workspace-
|
|
1990
|
+
//# sourceMappingURL=workspace-Dngfi1p6.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-Dngfi1p6.mjs","names":["fs","fs","fs","fs","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/dts-source-map.ts","../src/utils/bundled-config.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/workspace/stylesheets.ts","../src/postcss/plugin.ts","../src/workspace/plugins/assemble-entry-css.ts","../src/workspace/plugins/raw-loader.ts","../src/workspace/plugins/preserve-css-imports.ts","../src/workspace/plugins/external-imports.ts","../src/workspace/plugins/suppress-dts-sourcemap-warning.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 'target',\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 * tsdown's `target` option — the environment(s) the output syntax is\n * downleveled for.\n *\n * @remarks\n * Inherited from the project configuration when omitted. A value set here\n * replaces the project default outright (a target list describes one\n * environment set, so merging the two would be meaningless).\n *\n * Note that this only lowers *syntax*; runtime APIs are never polyfilled.\n * Unset at both layers, tsdown falls back to `engines.node` of the package,\n * and applies no transformation at all when that field is absent.\n *\n * @example `['node20.19', 'chrome111']`\n */\n target?: TSDownConfig['target'];\n /**\n * tsdown's `css` option — how stylesheets are processed and emitted.\n *\n * @remarks\n * Shallow-merged over the project configuration, so a workspace only needs to\n * restate the keys it changes.\n *\n * Plugins may seed defaults here during workspace setup (e.g. the\n * vanilla-extract plugin sets `splitting` / `fileName`, which it needs to own\n * to keep its CSS pipeline intact). A value declared in the configuration\n * always wins over such a default — consult the plugin's documentation before\n * overriding a key it manages.\n *\n * `css.target` defaults to {@link UserWorkspaceConfig.target}.\n *\n * @see {@link CssOptions}\n */\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 | 'publicDir'\n | 'optimizeCSS'\n | 'css'\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 * tsdown's `css` option — how stylesheets are processed and emitted.\n *\n * @see {@link CssOptions}\n */\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 * Package-name prefixes collected from string `deps.neverBundle` entries.\n *\n * Used by the external-imports plugin to externalize a declared package's\n * subpath imports (`pkg/foo.svg`) without emitting an `UNRESOLVED_IMPORT`\n * warning. `RegExp` / function externals are opaque and are not collected.\n */\n neverBundlePrefixes: 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 /**\n * tsdown's `css` option, seeded from the project and workspace\n * configurations.\n *\n * @remarks\n * Plugins may extend this during workspace setup, but must merge rather than\n * assign, and must let the configured value win — a plugin default belongs\n * *under* `...ctx.css`, never over it.\n *\n * @see {@link CssOptions}\n */\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 type { UserConfig as TSDownConfig } from 'tsdown';\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';\nimport { type CssOptions } from '@tsdown/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 * tsdown's `target` option — the environment(s) the output syntax is\n * downleveled for.\n *\n * @remarks\n * Applies to every workspace in the project. A workspace that declares its\n * own `target` replaces this value outright (a target list describes one\n * environment set, so merging the two would be meaningless).\n *\n * @example `['node20.19', 'chrome111']`\n */\n target?: TSDownConfig['target'];\n /**\n * tsdown's `css` option — how stylesheets are processed and emitted.\n *\n * @remarks\n * Applies to every workspace in the project. A workspace's own `css` is\n * shallow-merged over this value, so it only needs to restate the keys it\n * changes.\n *\n * @see {@link CssOptions}\n */\n css?: CssOptions;\n}\n\n/**\n * Project Configuration\n */\n\nexport interface ResolvedProjectConfig extends Required<\n Omit<\n UserProjectConfig,\n | 'scripts'\n | 'tsconfig'\n | 'hooks'\n | 'plugins'\n | 'dts'\n | 'optimizeCSS'\n | 'target'\n | 'css'\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 * tsdown's `target` option applied to every workspace in the project, unless\n * the workspace declares its own.\n */\n target?: TSDownConfig['target'];\n /**\n * tsdown's `css` option applied to every workspace in the project, with the\n * workspace's own `css` shallow-merged over it.\n */\n css?: CssOptions;\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\n/**\n * Collect the plain string entries from an {@link ExternalOption}, flattening\n * nested arrays.\n *\n * Only string entries can be turned into package-name prefixes for subpath\n * matching (`RegExp` / function entries are opaque and are skipped). Used to\n * feed the external-imports plugin so that a `deps.neverBundle` package name\n * also externalizes its subpath imports (e.g. `pkg/foo.svg`).\n */\nexport function collectExternalStringPrefixes(\n option: ExternalOption | undefined,\n): string[] {\n const prefixes: string[] = [];\n const walk = (o: ExternalOption | undefined): void => {\n if (!o) return;\n if (typeof o === 'string') {\n prefixes.push(o);\n } else if (Array.isArray(o)) {\n o.forEach(walk);\n }\n };\n walk(option);\n return prefixes;\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/promises';\nimport path from 'node:path';\nimport { glob } from 'glob';\n\n/**\n * Matches a trailing `//# sourceMappingURL=<file>.d.(m)ts.map` comment at the\n * end of a declaration file. Capture group 1 is the referenced map file name.\n *\n * @see {@link stripDanglingDTSSourceMaps}\n */\nexport const DANGLING_DTS_SOURCE_MAP_RE =\n /\\r?\\n\\/\\/# sourceMappingURL=([^\\r\\n]*\\.d\\.m?ts\\.map)[ \\t]*\\r?\\n?$/;\n\n/**\n * Remove dangling declaration-map references from the emitted `.d.(m)ts` files\n * under `distDir`.\n *\n * tsdown (rolldown) appends a `//# sourceMappingURL=<file>.d.mts.map` comment to\n * every declaration file it emits, but does NOT emit the referenced\n * `.d.mts.map` itself. Consumers' editors/build tools then try to load a\n * declaration map that does not exist and report a resolution failure. Until\n * this is fixed upstream, strip the comment so shipped declarations don't point\n * at a missing map.\n *\n * As a safeguard it only strips the comment when the referenced map is genuinely\n * absent, so it becomes a no-op automatically if a future tsdown starts emitting\n * real declaration maps.\n *\n * Kept intentionally self-contained so this workaround can be removed in one\n * step: delete this file, its re-export from `../utils`, and the two call sites\n * (`Builder.build` and plugboy's own `tsdown.config.ts`, which self-builds via\n * bootstrap tsdown rather than through `Builder`).\n */\nexport async function stripDanglingDTSSourceMaps(\n distDir: string,\n): Promise<void> {\n const dtsFiles = await glob(path.join(distDir, '**/*.{d.ts,d.mts}'));\n await Promise.all(\n dtsFiles.map(async (filePath) => {\n const dts = await fs.readFile(filePath, 'utf-8');\n const matched = dts.match(DANGLING_DTS_SOURCE_MAP_RE);\n if (!matched) return;\n\n const mapPath = path.join(path.dirname(filePath), matched[1]);\n const mapExists = await fs.access(mapPath).then(\n () => true,\n () => false,\n );\n if (mapExists) return;\n\n await fs.writeFile(\n filePath,\n dts.replace(DANGLING_DTS_SOURCE_MAP_RE, '\\n'),\n 'utf-8',\n );\n }),\n );\n}\n","import crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n/**\n * Compute the temporary output path for a `bundle-require`-bundled plugboy\n * config file (`plugboy.project.*` / `plugboy.workspace.*`).\n *\n * `bundle-require` bundles the config to a throwaway `.mjs` next to the source\n * before importing it. Its default places that file in the config's own\n * directory — e.g. `plugboy.project.bundled_<id>.mjs` at the repo root — which\n * is noisy and can be left behind if the build is force-killed.\n *\n * Redirect it under the config's own `node_modules/.plugboy/` instead:\n * - It lives inside `node_modules`, so it is already gitignored and out of the\n * consumer's sight (and any straggler after a hard kill stays hidden there).\n * - Module resolution is unchanged: the bundled file keeps bare imports for\n * externalized dependencies, and Node resolves them by walking up to the same\n * `<configDir>/node_modules` it would have used at the original location.\n *\n * The random suffix from the default naming is preserved because turbo runs\n * many `plugboy build` processes in parallel, each loading the root\n * `plugboy.project.*`; a fixed name would collide across concurrent builds.\n */\nexport function resolveBundledConfigOutputFile(\n filepath: string,\n format: 'esm' | 'cjs',\n): string {\n const ext = format === 'esm' ? 'mjs' : 'cjs';\n const base = path.parse(filepath).name;\n const id = crypto.randomBytes(6).toString('hex');\n const outDir = path.join(path.dirname(filepath), 'node_modules', '.plugboy');\n // `bundle-require` writes the bundled file directly and does not create its\n // parent directory, so ensure `.plugboy/` exists first.\n fs.mkdirSync(outDir, { recursive: true });\n return path.join(outDir, `${base}.bundled_${id}.${ext}`);\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 // `glob` makes no ordering guarantee, and the insertion order here becomes the\n // key order of the generated `exports` / `typesVersions`, so an unsorted result\n // rewrites the workspace's package.json on an arbitrary subset of builds.\n const files = (await glob(pattern)).sort();\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 { resolveBundledConfigOutputFile } from './bundled-config';\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 target,\n css,\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 target,\n css,\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 getOutputFile: resolveBundledConfigOutputFile,\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 { resolveBundledConfigOutputFile } from './bundled-config';\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 getOutputFile: resolveBundledConfigOutputFile,\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 {\n copyDirSync,\n rmrf,\n mergeExternals,\n stripDanglingDTSSourceMaps,\n} from '../utils';\nimport { emitDTS } from './dts';\nimport { applyPlugboyEnvs, getPlugboyEnvCodeForStub } from '../env';\n\nconst SHEBANG_MATCH_RE = /^(#!.+?)\\n/;\n\n/**\n * Escape a string for use inside a `RegExp`.\n *\n * Kept local: plugboy builds every other package, so it cannot depend on one.\n */\nfunction escapeRegExp(source: string): string {\n return source.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Every name the declaration file already binds -- imported from any module, or\n * declared in the file itself.\n *\n * `X as Y` binds `Y`, so the local name is what matters rather than the\n * exported one.\n */\nfunction collectBoundNames(dts: string): Set<string> {\n const names = new Set<string>();\n\n for (const [, clause] of dts.matchAll(\n /^import\\s+([^;]+?)\\s+from\\s+['\"][^'\"]+['\"];?$/gm,\n )) {\n const braced = clause.match(/\\{([^{}]*)\\}/);\n if (braced) {\n for (const specifier of braced[1].split(',')) {\n const local = specifier.split(' as ').pop()?.trim();\n if (local) names.add(local);\n }\n }\n const head = clause\n .replace(/\\{[^{}]*\\}/, '')\n .replace(/,/g, ' ')\n .trim();\n const namespaced = head.match(/\\*\\s+as\\s+([\\w$]+)/);\n if (namespaced) {\n names.add(namespaced[1]);\n } else if (/^[\\w$]+$/.test(head)) {\n names.add(head);\n }\n }\n\n for (const [, name] of dts.matchAll(\n /^(?:export\\s+)?(?:declare\\s+)?(?:type|interface|class|const|function)\\s+([\\w$]+)/gm,\n )) {\n names.add(name);\n }\n\n return names;\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 // The statement this normalizer merges into, if the file already imports\n // from the package. The declaration bundler quotes its specifiers with `\"`\n // while this normalizer wrote `'`, and matching only the latter made every\n // bundled import invisible here -- the names were then prepended as a\n // second import of the same module and each one ended up bound twice\n // (issue #234).\n const target = (() => {\n if (!pkg || packageIsOwn) return;\n const re = new RegExp(\n `import {([^{}]+)} from (['\"])${escapeRegExp(pkg)}\\\\2`,\n );\n const matched = dts.match(re);\n if (!matched) return;\n const [statement, specifiers, quote] = matched;\n return { statement, specifiers, quote };\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 // Whether the file can already refer to a name, from any module -- these\n // types are re-exported (`ScopeName` reaches `@fastkit/vui` through both\n // `@fastkit/color-scheme` and `@fastkit/vue-color-scheme`), so importing\n // one a second time binds it twice even though the modules differ.\n const bound = collectBoundNames(dts);\n const appends = [...new Set(hitTypeNames)].filter(\n (typeName) => !bound.has(typeName),\n );\n\n if (!appends.length) return dts;\n\n if (target) {\n const { statement, specifiers, quote } = target;\n const merged = `import { ${specifiers.trim()}, ${appends.join(\n ', ',\n )} } from ${quote}${pkg}${quote}`;\n // A replacer function, because emitted names carry `$` suffixes\n // (`ColorVariant$1`) that `String.replace` reads as group references.\n dts = dts.replace(statement, () => merged);\n } else if (pkg && !packageIsOwn) {\n dts = `import { ${appends.join(', ')} } from '${pkg}';\\n${dts}`;\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 await stripDanglingDTSSourceMaps(this.workspace.dirs.dist.value);\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 fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { PlugboyWorkspace } from './workspace';\n\n/** `foo.mjs` -> `foo.css`, mirroring how `@tsdown/css` names a chunk's CSS. */\nexport function toCssFileName(jsFileName: string): string {\n return jsFileName.replace(/(?:\\.module)?(\\.[cm]?js)$/, '.css');\n}\n\n/** The stylesheets a package declares: `./<entry>.css` per `css: true` entry. */\nexport function declaredStylesheets(workspace: PlugboyWorkspace): Set<string> {\n return new Set(\n workspace.exports\n .filter((exp) => exp.id.endsWith('.css'))\n .map((exp) => path.posix.basename(exp.id)),\n );\n}\n\n/**\n * Every stylesheet the build has written to `dir`, as file names.\n *\n * The bundle is not the whole story: `plugboy-assemble-entry-css` writes an\n * entry's stylesheet directly to disk when the build produced none for it, so a\n * `writeBundle` stage that only walked the bundle assets would skip exactly the\n * file that needed the most work. The declared exports fill that in — they are the\n * stylesheets the package publishes, so anything present under one of those names\n * belongs in the set.\n */\nexport async function listEmittedStylesheets(\n workspace: PlugboyWorkspace,\n dir: string,\n bundle: Record<string, { type: string; fileName: string }>,\n): Promise<string[]> {\n const names = new Set<string>();\n for (const chunk of Object.values(bundle)) {\n if (chunk.type === 'asset' && chunk.fileName.endsWith('.css')) {\n names.add(chunk.fileName);\n }\n }\n\n await Promise.all(\n [...declaredStylesheets(workspace)].map(async (name) => {\n if (names.has(name)) return;\n try {\n await fs.access(path.join(dir, name));\n names.add(name);\n } catch {\n // Not emitted — the entry produced no CSS at all.\n }\n }),\n );\n\n return [...names];\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { PlugboyWorkspace } from '../workspace';\nimport type { Plugin, ResolvedOptimizeCSSOptions } from '../types';\nimport type { Processor, AcceptedPlugin as PostcssPlugin } from 'postcss';\nimport { listEmittedStylesheets } from '../workspace/stylesheets';\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 css: string,\n fileName: string,\n options: ResolvedOptimizeCSSOptions,\n): Promise<string> {\n const postcss = await getPostcss(options);\n\n function prepare(source: string): string {\n const layerDefs = (() => {\n const matched = source.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 + source.replace(allLayerDefRe, '');\n }\n\n const result = await postcss.process(prepare(css), {\n from: fileName,\n to: fileName,\n map: { inline: false },\n });\n\n return result.css.replace(SOURCE_MAPPING_URL_COMMENT_RE, '');\n}\n\n/**\n * Applies {@link PlugboyWorkspace.optimizeCSSOptions} to every stylesheet the\n * build writes.\n *\n * This runs in `writeBundle`, on the files on disk, rather than on the bundle\n * assets in `generateBundle` — because not every stylesheet exists as a bundle\n * asset by then. tsdown's own CSS pipeline emits from a *post* plugin, which\n * runs after every user plugin's `generateBundle`, so CSS that tsdown produces\n * (a plain `.css` / `.scss` import, or — since the vanilla-extract plugin routes\n * its `.css.ts` through tsdown — extracted CSS) used to skip these\n * optimizations entirely, while CSS a plugin emitted itself received them. By\n * `writeBundle` every producer has finished and the whole set is on disk.\n *\n * `preserve-css-imports` re-injects external `@import`s in its own\n * `writeBundle`; it is registered after this plugin, so it always sees the\n * optimized file.\n */\nexport function OptimizeCSSPlugin(workspace: PlugboyWorkspace): Plugin {\n // Files already optimized, so repeated output passes are idempotent.\n const processed = new Set<string>();\n\n return {\n name: 'plugboy-optimize-css',\n buildStart() {\n processed.clear();\n },\n async writeBundle(options, bundle) {\n const { optimizeCSSOptions } = workspace;\n if (!optimizeCSSOptions) return;\n\n const { dir } = options;\n if (!dir) return;\n\n const stylesheets = await listEmittedStylesheets(workspace, dir, bundle);\n\n await Promise.all(\n stylesheets.map(async (fileName) => {\n const filePath = path.join(dir, 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.\n return;\n }\n processed.add(filePath);\n\n const optimized = await optimizeCSS(\n css,\n fileName,\n optimizeCSSOptions,\n );\n if (optimized !== css) {\n await fs.writeFile(filePath, optimized);\n }\n }),\n );\n },\n };\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { definePlugin } from '../../utils';\nimport type { PlugboyWorkspace } from '../workspace';\nimport { declaredStylesheets, toCssFileName } from '../stylesheets';\n\n/**\n * Plugin that guarantees the stylesheet of every `css: true` entry exists, and is\n * self-contained.\n *\n * plugboy declares a `./<entry>.css` export for each such entry. With more than\n * one of them the build has to emit one stylesheet per entry, which is what\n * tsdown's `css.splitting` does — but it splits by *output chunk*, not by entry:\n *\n * - CSS reached from several entries is moved into a shared chunk and emitted\n * under that chunk's hashed name, which no export points at. Importing\n * `./<entry>.css` then yields an incomplete stylesheet.\n * - An entry whose CSS comes *only* from such a shared chunk gets no stylesheet of\n * its own at all, so its declared export resolves to a missing file.\n *\n * This rebuilds each entry's stylesheet from its own CSS plus the CSS of every\n * chunk it imports, dependencies first — the order the stylesheets would have been\n * loaded in. CSS shared between entries is therefore duplicated into each, which\n * is what makes a single `./<entry>.css` import complete. The per-chunk\n * stylesheets that were folded in are deleted, since nothing exports them.\n *\n * The chunk graph has to be captured in `generateBundle`, because it is gone by\n * the time the stylesheets exist: a chunk holding nothing but CSS is dropped once\n * tsdown's CSS pipeline (a *post* plugin, so it runs after this hook) has emitted\n * its stylesheet, and its importers' `imports` are emptied along with it. By\n * `writeBundle` the shared chunk is neither in the bundle nor on disk — only its\n * orphaned stylesheet is.\n *\n * A build that emits one stylesheet for the whole package (`css.splitting: false`,\n * the default for a single CSS entry) is left untouched: the entry chunk's\n * stylesheet is already the one and only output.\n */\n\ninterface ChunkNode {\n name: string;\n isEntry: boolean;\n imports: string[];\n}\n\nexport function createAssembleEntryCssPlugin(workspace: PlugboyWorkspace) {\n /** Chunk file name -> its identity and static imports, as of `generateBundle`. */\n const graph = new Map<string, ChunkNode>();\n\n return definePlugin({\n name: 'plugboy-assemble-entry-css',\n buildStart() {\n graph.clear();\n },\n generateBundle(_options, bundle) {\n for (const chunk of Object.values(bundle)) {\n if (chunk.type !== 'chunk') continue;\n graph.set(chunk.fileName, {\n name: chunk.name,\n isEntry: chunk.isEntry,\n // Static imports only: a dynamically imported chunk brings its own\n // stylesheet along at runtime.\n imports: [...chunk.imports],\n });\n }\n },\n async writeBundle(options, bundle) {\n const { dir } = options;\n if (!dir) return;\n\n // `css.inject` makes the JS import its stylesheet by name, so the per-chunk\n // files are referenced and must not be removed.\n if (workspace.cssOptions?.inject) return;\n\n const targets = declaredStylesheets(workspace);\n if (!targets.size) return;\n\n const emitted = new Set(\n Object.values(bundle)\n .filter(\n (chunk) =>\n chunk.type === 'asset' && chunk.fileName.endsWith('.css'),\n )\n .map((chunk) => chunk.fileName),\n );\n if (!emitted.size) return;\n\n /** The stylesheet a chunk owns, if the build emitted one. */\n const cssOf = (fileName: string): string | undefined => {\n const css = toCssFileName(fileName);\n return css !== fileName && emitted.has(css) ? css : undefined;\n };\n\n /** Stylesheets an entry needs, dependencies first, each listed once. */\n const collect = (entryFileName: string): string[] => {\n const visited = new Set<string>();\n const ordered: string[] = [];\n const walk = (fileName: string) => {\n if (visited.has(fileName)) return;\n visited.add(fileName);\n const node = graph.get(fileName);\n if (!node) return;\n for (const imported of node.imports) walk(imported);\n const css = cssOf(fileName);\n if (css && !ordered.includes(css)) ordered.push(css);\n };\n walk(entryFileName);\n return ordered;\n };\n\n const folded = new Set<string>();\n\n await Promise.all(\n [...graph].map(async ([fileName, node]) => {\n if (!node.isEntry) return;\n const target = `${node.name}.css`;\n if (!targets.has(target)) return;\n\n const sources = collect(fileName);\n // Nothing attributable to this entry — a single combined stylesheet, or\n // one a plugin emitted itself. Either way it is already correct.\n if (!sources.length) return;\n sources.forEach((source) => folded.add(source));\n if (sources.length === 1 && sources[0] === target) return;\n\n const parts = await Promise.all(\n sources.map((source) =>\n fs.readFile(path.join(dir, source), 'utf8').catch(() => ''),\n ),\n );\n const css = parts.filter(Boolean).join('\\n');\n if (!css) return;\n await fs.writeFile(path.join(dir, target), css);\n folded.add(target);\n }),\n );\n\n // Drop the per-chunk stylesheets that were folded into an entry's: they are\n // named after a chunk, so no export can point at them.\n await Promise.all(\n [...folded]\n .filter((css) => !targets.has(css))\n .map((css) => fs.rm(path.join(dir, css), { force: true })),\n );\n },\n });\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { Plugin } from '../../types';\nimport type { PlugboyWorkspace } from '../workspace';\n\n/**\n * Plugin that inlines the contents of a `?raw` import.\n *\n * The virtual module id is kept **relative to the workspace** and turned back\n * into a path only inside `load`. rolldown normalizes an ordinary module id\n * against the project when it prints the `//#region <id>` comment that precedes\n * each module in the output, but a virtual id — anything starting with `\\0` — is\n * printed verbatim. Building the id from the resolved absolute path therefore\n * published the build machine's directory layout:\n *\n * ```js\n * //#region \\0raw:/home/runner/work/acme-ui/acme-ui/packages/core/src/logo.svg\n * ```\n *\n * A workspace-relative id makes the output independent of where the build ran,\n * which also keeps two machines' `dist` diffable.\n */\nconst PREFIX = '\\0raw:';\nconst SUFFIX = '?raw';\n\nexport function createRawLoaderPlugin(workspace: PlugboyWorkspace): Plugin {\n const root = workspace.dir.value;\n\n return {\n name: 'raw-loader',\n async resolveId(id, importer, options) {\n if (!id.endsWith(SUFFIX)) return null;\n\n const rawPath = id.slice(0, -SUFFIX.length);\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 // Posix separators keep the id — and with it the emitted comment —\n // identical on Windows.\n return `${PREFIX}${path\n .relative(root, resolved.id)\n .split(path.sep)\n .join(path.posix.sep)}`;\n },\n\n async load(id) {\n if (!id.startsWith(PREFIX)) return null;\n\n const content = await fs.readFile(\n path.resolve(root, id.slice(PREFIX.length)),\n 'utf-8',\n );\n return `export default ${JSON.stringify(content)};`;\n },\n };\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { definePlugin } from '../../utils';\nimport type { PlugboyWorkspace } from '../workspace';\nimport { listEmittedStylesheets } from '../stylesheets';\n\n/**\n * Plugin to preserve what tsdown's CSS pipeline would rewrite away at the top of\n * a stylesheet: external `@import` statements and the authored `@layer` order.\n *\n * **External `@import`s.** rolldown / tsdown's CSS pipeline (lightningcss)\n * resolves and inlines every `@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 * **Layer order.** lightningcss drops a name from an `@layer a, b, c;` statement\n * when a block for it follows in the same stylesheet, since the block establishes\n * the same order. That holds for a standalone document, but not for a library\n * stylesheet whose statement also orders layers belonging to *other* packages:\n * once the name is gone, its position is decided by wherever its block happens to\n * land relative to those, and the authored order is lost. `@fastkit/vui` declares\n * `@layer vui-normalize, vui-color-scheme, …, vui;`, and losing `vui-normalize`\n * from it promoted the reset layer above the packages it is supposed to lose to.\n *\n * Both are captured from a `transform` hook declared `order: 'pre'`, which runs\n * ahead of tsdown's CSS handling even though that is registered as a *pre plugin*\n * — hook order wins over plugin order. It is the only point that sees the CSS of\n * **every** stylesheet in the graph, including a virtual one another plugin\n * supplies from `load`: vanilla-extract generates its `@layer` statements into\n * such a module, so a `load`-based capture would miss exactly the case where the\n * generated statement is the only record of the intended order. The captured\n * values are re-emitted in `writeBundle`, after every CSS producer has written\n * its final 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\n/** Stylesheet ids, with any query (`?source=…`, `?inline`) still attached. */\nconst STYLE_ID_RE = /\\.(?:css|scss|sass|less|styl|stylus)(?:$|\\?)/;\n\n/** The layer names a stylesheet declares, in the order it declares them. */\nfunction collectLayerNames(css: string): string[] {\n const names: string[] = [];\n for (const [, group] of css.matchAll(LAYER_STATEMENT_RE)) {\n for (const name of group.split(',')) {\n const trimmed = name.trim();\n if (trimmed && !names.includes(trimmed)) names.push(trimmed);\n }\n }\n return names;\n}\n\n/**\n * Merge several declaration orders into one that contradicts none of them.\n *\n * Concatenating them and dropping repeats does not work, because a name's first\n * appearance is rarely where its order is decided: vanilla-extract re-declares a\n * layer at the top of *every* stylesheet that puts a rule in it, so a single\n * `@layer that-one;` from some component is seen before the module that declares\n * how all the layers relate — and once the component's name is in the list, the\n * declaring module's order is silently dropped for it.\n *\n * Each sequence is therefore read as a set of \"must come before\" constraints and\n * the result is a topological sort of them, preferring the earliest-seen name when\n * several are free. Earlier sequences win: a constraint that would contradict one\n * already recorded is skipped, so a stylesheet's own surviving statement — whose\n * order tsdown may have rewritten — can add names without reordering anything.\n */\nfunction mergeLayerOrder(sequences: string[][]): string[] {\n const nodes: string[] = [];\n const next = new Map<string, Set<string>>();\n\n const add = (name: string) => {\n if (next.has(name)) return;\n nodes.push(name);\n next.set(name, new Set());\n };\n /** Whether `to` already has to come after `from`. */\n const precedes = (from: string, to: string): boolean => {\n const seen = new Set<string>();\n const stack = [from];\n while (stack.length) {\n const current = stack.pop()!;\n if (current === to) return true;\n if (seen.has(current)) continue;\n seen.add(current);\n stack.push(...(next.get(current) ?? []));\n }\n return false;\n };\n\n for (const sequence of sequences) {\n sequence.forEach(add);\n for (let i = 0; i + 1 < sequence.length; i++) {\n const from = sequence[i];\n const to = sequence[i + 1];\n if (from === to || precedes(to, from)) continue;\n next.get(from)!.add(to);\n }\n }\n\n const incoming = new Map(nodes.map((name) => [name, 0]));\n for (const [, targets] of next) {\n for (const target of targets) {\n incoming.set(target, (incoming.get(target) ?? 0) + 1);\n }\n }\n\n const remaining = new Set(nodes);\n const merged: string[] = [];\n while (remaining.size) {\n // A cycle can only come from contradicting sequences, which `precedes`\n // already rejects; the fallback keeps this terminating regardless.\n const name =\n nodes.find((it) => remaining.has(it) && incoming.get(it) === 0) ??\n nodes.find((it) => remaining.has(it))!;\n remaining.delete(name);\n merged.push(name);\n for (const target of next.get(name) ?? []) {\n incoming.set(target, (incoming.get(target) ?? 1) - 1);\n }\n }\n return merged;\n}\n\nexport function createPreserveCssImportsPlugin(workspace: PlugboyWorkspace) {\n // External `@import` statements, kept verbatim and in first-seen order.\n const externalImports: string[] = [];\n // Layer names per stylesheet module, captured before lightningcss can prune the\n // statements they came from. Keyed by module id, because the order modules are\n // transformed in is not the order their CSS ends up in.\n const layersByModule = new Map<string, string[]>();\n // The merged declaration order, filled in `generateBundle`.\n const declaredLayers: 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 layersByModule.clear();\n declaredLayers.length = 0;\n processed.clear();\n },\n // Runs ahead of tsdown's CSS transform, which inlines the imports and prunes\n // the layer statements, so this is where both have to be captured.\n transform: {\n order: 'pre' as const,\n filter: { id: STYLE_ID_RE },\n handler(code: string, id: string) {\n const file = id.split('?')[0];\n if (!STYLE_ID_RE.test(file)) return null;\n\n const names = collectLayerNames(code);\n if (names.length) layersByModule.set(id, names);\n\n // Only plain CSS is rewritten here. A preprocessor's `@import` is its own\n // module system, resolved before any CSS ever reaches tsdown.\n if (!file.endsWith('.css') || !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 },\n // Merge the per-module declarations into one order (see `mergeLayerOrder`).\n //\n // The sequences are visited in module execution order — a module's position in\n // `chunk.moduleIds`, which is also the order tsdown concatenates the modules'\n // CSS in. That decides which sequence wins a contradiction, and how free names\n // are ordered; the order the `transform` hook happened to visit modules in is\n // not usable for either.\n generateBundle(_options, bundle) {\n if (!layersByModule.size) return;\n const sequences: string[][] = [];\n for (const chunk of Object.values(bundle)) {\n if (chunk.type !== 'chunk') continue;\n for (const id of chunk.moduleIds) {\n const names = layersByModule.get(id);\n if (names) sequences.push(names);\n }\n }\n declaredLayers.length = 0;\n declaredLayers.push(...mergeLayerOrder(sequences));\n },\n // Re-emit the preserved imports and layer order into the final CSS files on\n // disk. Running in `writeBundle` (rather than `generateBundle`) lets every\n // other CSS producer — tsdown's own pipeline emits from a *post* plugin —\n // finish first.\n async writeBundle(options, bundle) {\n if (!externalImports.length && !declaredLayers.length) return;\n const { dir } = options;\n if (!dir) return;\n\n const importBlock = externalImports.length\n ? `${externalImports.join('\\n')}\\n`\n : '';\n\n const stylesheets = await listEmittedStylesheets(workspace, dir, bundle);\n\n await Promise.all(\n stylesheets.map(async (fileName) => {\n const filePath = path.join(dir, 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.\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 //\n // The captured order decides; a name only this stylesheet declares is\n // merged in without reordering the rest.\n const layerNames = mergeLayerOrder([\n declaredLayers,\n collectLayerNames(css),\n ]);\n\n const body = css.replace(LAYER_STATEMENT_RE, '');\n const layerStatement = layerNames.length\n ? `@layer ${layerNames.join(', ')};\\n`\n : '';\n const next = `${layerStatement}${importBlock}${body}`;\n if (next !== css) await fs.writeFile(filePath, next);\n }),\n );\n },\n });\n}\n","import { Plugin } from '../../types';\nimport type { PlugboyWorkspace } from '../workspace';\n\n/**\n * A specifier is \"bare\" (a package specifier) when it is not relative, absolute,\n * a protocol-qualified id (`node:`, `data:`, `http:`, …) or a fragment. Only\n * bare specifiers are candidates for external resolution here.\n */\nfunction isBareSpecifier(id: string): boolean {\n return !/^(?:\\.{1,2}\\/|\\/|[a-z][a-z\\d+.-]*:|#)/i.test(id);\n}\n\n/** Whether `id` equals `name` or is a subpath of it (`name/...`). */\nfunction matchesPackage(id: string, name: string): boolean {\n return id === name || id.startsWith(`${name}/`);\n}\n\n/**\n * Resolve self-references and `deps.neverBundle` package imports as explicit\n * externals.\n *\n * rolldown only externalizes a specifier without warning when it matches the\n * `external` option *before* it tries to resolve it on disk. A `deps.neverBundle`\n * entry is a plain string, so it matches the package name exactly but not its\n * subpaths (`pkg/foo.svg`); and a package's own name is never in its\n * dependencies at all. Both therefore fall through to rolldown's\n * \"resolve failed → implicit external\" path, which emits a noisy\n * `UNRESOLVED_IMPORT` warning for every such import even though the resulting\n * external output is correct.\n *\n * This plugin intercepts those imports in `resolveId` and marks them external\n * up front, so the diagnostic never fires:\n *\n * - **Self-reference:** a package importing its own name (or a subpath of it).\n * The subpath is served at runtime from the consumer's `exports` map\n * (`\"./*\": \"./dist/*\"`); it cannot — and must not — be bundled into the build\n * that produces that very `dist`, so external is always the right answer.\n * - **`deps.neverBundle`:** the declared package names and any of their\n * subpaths.\n *\n * Specifiers that match neither are returned untouched, so genuine unresolved\n * imports (typos in a non-external package) still surface their warning.\n */\nexport function createExternalImportsPlugin(\n workspace: PlugboyWorkspace,\n): Plugin {\n const selfName = workspace.json.name;\n const { neverBundlePrefixes } = workspace;\n\n return {\n name: 'plugboy:external-imports',\n resolveId(id) {\n if (!isBareSpecifier(id)) return null;\n\n if (selfName && matchesPackage(id, selfName)) {\n return { id, external: true };\n }\n\n for (const prefix of neverBundlePrefixes) {\n if (matchesPackage(id, prefix)) {\n return { id, external: true };\n }\n }\n\n return null;\n },\n };\n}\n","import { Plugin } from '../../types';\n\n/**\n * The rolldown-plugin-dts sub-plugin that drives declaration bundling through a\n * \"fake JS\" module. Its `renderChunk` returns a bare `\"export { };\"` string\n * (with no sourcemap) whenever a `.d.ts` chunk reduces to an empty body — e.g.\n * an entry composed solely of external re-exports. With sourcemaps enabled\n * (plugboy sets `sourcemap: true` for the JS output, which the dts pipeline\n * inherits), rolldown then emits a spurious `[SOURCEMAP_BROKEN]` warning for a\n * declaration file that is perfectly correct.\n */\nconst DTS_FAKE_JS_PLUGIN_NAME = 'rolldown-plugin-dts:fake-js';\n\n/**\n * Suppress the harmless `[SOURCEMAP_BROKEN]` warning that rolldown-plugin-dts's\n * fake-js pass emits for empty declaration chunks.\n *\n * The filter is intentionally narrow — it only drops a `warn`-level\n * `SOURCEMAP_BROKEN` log **attributed to `rolldown-plugin-dts:fake-js`**. Real\n * sourcemap breakage on JS output (emitted by other plugins, or with no plugin\n * attribution) has a different `plugin` field and passes through untouched, so\n * genuine problems are still reported.\n *\n * The suppression is re-emitted at `debug` level so it can be traced by running\n * a build with a debug log level.\n *\n * TODO(upstream): remove this workaround once rolldown-plugin-dts returns a\n * valid (empty) sourcemap for empty chunks instead of a bare string. Track at\n * https://github.com/sxzz/rolldown-plugin-dts and, once fixed, bump the tsdown\n * (rolldown-plugin-dts) dependency range and delete this file, its re-export\n * from `./index`, and its registration in `workspace.ts`.\n */\nexport function createSuppressDtsSourcemapWarningPlugin(): Plugin {\n return {\n name: 'plugboy:suppress-dts-sourcemap-warning',\n onLog(level, log) {\n if (\n level === 'warn' &&\n log.code === 'SOURCEMAP_BROKEN' &&\n log.plugin === DTS_FAKE_JS_PLUGIN_NAME\n ) {\n this.debug(() => ({\n code: 'PLUGBOY_SUPPRESSED_DTS_SOURCEMAP_BROKEN',\n message: `Suppressed a spurious [SOURCEMAP_BROKEN] warning from ${DTS_FAKE_JS_PLUGIN_NAME} for an empty declaration chunk. Original message: ${log.message}`,\n }));\n return false;\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 collectExternalStringPrefixes,\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 {\n createRawLoaderPlugin,\n createAssembleEntryCssPlugin,\n createPreserveCssImportsPlugin,\n createExternalImportsPlugin,\n createSuppressDtsSourcemapWarningPlugin,\n} 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 neverBundlePrefixes: 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 neverBundlePrefixes,\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.neverBundlePrefixes = neverBundlePrefixes;\n this.meta = meta;\n this.config = config;\n this.plugins = [\n // Runs first so self-reference / `neverBundle` imports are marked external\n // before any resolver (built-in or user) can attempt — and fail — to\n // resolve them on disk.\n createExternalImportsPlugin(this),\n // Filters the spurious dts SOURCEMAP_BROKEN warning; harmless if the dts\n // pipeline is absent, so it can live alongside the other plugins.\n createSuppressDtsSourcemapWarningPlugin(),\n ...plugins,\n // Must precede the stages that post-process the written stylesheets.\n createAssembleEntryCssPlugin(this),\n OptimizeCSSPlugin(this),\n WorkspaceEnvPlugin(this),\n createRawLoaderPlugin(this),\n createPreserveCssImportsPlugin(this),\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 // Prefixes for the external-imports plugin. Seeded from the user's initial\n // `deps.neverBundle` and extended by any `ctx.mergeExternals` calls made\n // during workspace setup (see below).\n const neverBundlePrefixes = collectExternalStringPrefixes(\n config.deps?.neverBundle,\n );\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 // Unlike `target`, the keys of `css` are independent, so the workspace value\n // is shallow-merged over the project one (mirroring `optimizeCSS`). Stays\n // `undefined` when neither layer sets it, leaving tsdown's own defaults alone.\n const css =\n config.css || project?.config.css\n ? { ...project?.config.css, ...config.css }\n : undefined;\n\n // Inherit the project's `target` unless the workspace declares its own. A\n // target list describes one environment set, so the workspace value replaces\n // the project default rather than merging with it. `??` (not `||`) keeps an\n // explicit `false` — tsdown's \"apply no transformation\" — intact.\n config.target ??= project?.config.target;\n\n const ctx: WorkspaceSetupContext = {\n dir,\n json,\n config,\n project,\n dirs,\n dependencies: _dependencies,\n projectDependencies,\n neverBundlePrefixes,\n meta,\n plugins,\n hooks,\n dts,\n css,\n optimizeCSS,\n mergeExternals: (override) => {\n config.deps ??= {};\n config.deps.neverBundle = mergeExternals(\n config.deps.neverBundle,\n override,\n );\n neverBundlePrefixes.push(...collectExternalStringPrefixes(override));\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/env.d.ts
CHANGED
|
@@ -4,25 +4,14 @@
|
|
|
4
4
|
// modules — they would silently fail to apply on the consumer side. Keeping the
|
|
5
5
|
// file a script (plain top-level `declare const` / `declare module`) is what
|
|
6
6
|
// makes both the constants and the module declarations below globally visible.
|
|
7
|
+
//
|
|
8
|
+
// A triple-slash reference keeps that script status, so the globals live in one
|
|
9
|
+
// place while `@fastkit/plugboy/env` still provides everything on its own.
|
|
7
10
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
* - `stub`: always `true`.
|
|
13
|
-
* - published `build`: replaced with a runtime check of the consumer's
|
|
14
|
-
* environment (`process.env.NODE_ENV === 'development'` or
|
|
15
|
-
* `import.meta.env.DEV === true`), so the branch is evaluated at the
|
|
16
|
-
* consumer's runtime rather than eliminated.
|
|
17
|
-
*/
|
|
18
|
-
declare const __PLUGBOY_DEV__: boolean;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* The bundle is in stub mode.
|
|
22
|
-
*
|
|
23
|
-
* @remarks In stub mode, source code is executed in the source directory. This flag is available because of the different way of loading files in relative paths.
|
|
24
|
-
*/
|
|
25
|
-
declare const __PLUGBOY_STUB__: boolean;
|
|
11
|
+
// `import` style is not an option here: it would make this file a module and
|
|
12
|
+
// silently stop every declaration below from applying.
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/triple-slash-reference
|
|
14
|
+
/// <reference path="./globals.d.ts" />
|
|
26
15
|
|
|
27
16
|
// The declarations below mirror the subset of Vite's `vite/client` module
|
|
28
17
|
// declarations that Plugboy is compatible with, so that source that already
|
package/globals.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Plugboy's own globals, and nothing else.
|
|
2
|
+
//
|
|
3
|
+
// Separate from `env.d.ts` because that file also mirrors a subset of Vite's
|
|
4
|
+
// `vite/client` module declarations, and every one of those is declared by
|
|
5
|
+
// `vite/client` too. A project that loads both gets a duplicate identifier for
|
|
6
|
+
// each (issue #246), so a project that needs `vite/client` -- for
|
|
7
|
+
// `import.meta.env`, `?url`, `?worker` and the rest that Plugboy has no loader
|
|
8
|
+
// for -- references this file instead and takes the asset types from Vite.
|
|
9
|
+
//
|
|
10
|
+
// This file must remain a SCRIPT (no top-level `import`/`export`). A trailing
|
|
11
|
+
// `export {}` would make it a module, and a `declare const` in a module file is
|
|
12
|
+
// not a global.
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Whether the code is running in a development context.
|
|
16
|
+
*
|
|
17
|
+
* @remarks
|
|
18
|
+
* - `stub`: always `true`.
|
|
19
|
+
* - published `build`: replaced with a runtime check of the consumer's
|
|
20
|
+
* environment (`process.env.NODE_ENV === 'development'` or
|
|
21
|
+
* `import.meta.env.DEV === true`), so the branch is evaluated at the
|
|
22
|
+
* consumer's runtime rather than eliminated.
|
|
23
|
+
*/
|
|
24
|
+
declare const __PLUGBOY_DEV__: boolean;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The bundle is in stub mode.
|
|
28
|
+
*
|
|
29
|
+
* @remarks In stub mode, source code is executed in the source directory. This flag is available because of the different way of loading files in relative paths.
|
|
30
|
+
*/
|
|
31
|
+
declare const __PLUGBOY_STUB__: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fastkit/plugboy",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"repository": {
|
|
@@ -51,6 +51,9 @@
|
|
|
51
51
|
"./env": {
|
|
52
52
|
"types": "./env.d.ts"
|
|
53
53
|
},
|
|
54
|
+
"./globals": {
|
|
55
|
+
"types": "./globals.d.ts"
|
|
56
|
+
},
|
|
54
57
|
".": {
|
|
55
58
|
"import": "./dist/plugboy.mjs",
|
|
56
59
|
"types": "./dist/plugboy.d.ts"
|
|
@@ -61,6 +64,7 @@
|
|
|
61
64
|
},
|
|
62
65
|
"files": [
|
|
63
66
|
"env.d.ts",
|
|
67
|
+
"globals.d.ts",
|
|
64
68
|
"cli.mjs",
|
|
65
69
|
"dist"
|
|
66
70
|
],
|
|
@@ -83,8 +87,12 @@
|
|
|
83
87
|
"typescript": "^6.0.3"
|
|
84
88
|
},
|
|
85
89
|
"peerDependencies": {
|
|
90
|
+
"@types/node": ">=20",
|
|
86
91
|
"typescript": "^6.0.0 || ^7.0.0"
|
|
87
92
|
},
|
|
93
|
+
"engines": {
|
|
94
|
+
"node": ">=22.18.0"
|
|
95
|
+
},
|
|
88
96
|
"scripts": {
|
|
89
97
|
"build": "tsdown",
|
|
90
98
|
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-CniX_JDc.mjs","names":["fs","fs","fs","fs","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/dts-source-map.ts","../src/utils/bundled-config.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/workspace/stylesheets.ts","../src/postcss/plugin.ts","../src/workspace/plugins/assemble-entry-css.ts","../src/workspace/plugins/raw-loader.ts","../src/workspace/plugins/preserve-css-imports.ts","../src/workspace/plugins/external-imports.ts","../src/workspace/plugins/suppress-dts-sourcemap-warning.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 'target',\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 * tsdown's `target` option — the environment(s) the output syntax is\n * downleveled for.\n *\n * @remarks\n * Inherited from the project configuration when omitted. A value set here\n * replaces the project default outright (a target list describes one\n * environment set, so merging the two would be meaningless).\n *\n * Note that this only lowers *syntax*; runtime APIs are never polyfilled.\n * Unset at both layers, tsdown falls back to `engines.node` of the package,\n * and applies no transformation at all when that field is absent.\n *\n * @example `['node20.19', 'chrome111']`\n */\n target?: TSDownConfig['target'];\n /**\n * tsdown's `css` option — how stylesheets are processed and emitted.\n *\n * @remarks\n * Shallow-merged over the project configuration, so a workspace only needs to\n * restate the keys it changes.\n *\n * Plugins may seed defaults here during workspace setup (e.g. the\n * vanilla-extract plugin sets `splitting` / `fileName`, which it needs to own\n * to keep its CSS pipeline intact). A value declared in the configuration\n * always wins over such a default — consult the plugin's documentation before\n * overriding a key it manages.\n *\n * `css.target` defaults to {@link UserWorkspaceConfig.target}.\n *\n * @see {@link CssOptions}\n */\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 | 'publicDir'\n | 'optimizeCSS'\n | 'css'\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 * tsdown's `css` option — how stylesheets are processed and emitted.\n *\n * @see {@link CssOptions}\n */\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 * Package-name prefixes collected from string `deps.neverBundle` entries.\n *\n * Used by the external-imports plugin to externalize a declared package's\n * subpath imports (`pkg/foo.svg`) without emitting an `UNRESOLVED_IMPORT`\n * warning. `RegExp` / function externals are opaque and are not collected.\n */\n neverBundlePrefixes: 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 /**\n * tsdown's `css` option, seeded from the project and workspace\n * configurations.\n *\n * @remarks\n * Plugins may extend this during workspace setup, but must merge rather than\n * assign, and must let the configured value win — a plugin default belongs\n * *under* `...ctx.css`, never over it.\n *\n * @see {@link CssOptions}\n */\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 type { UserConfig as TSDownConfig } from 'tsdown';\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';\nimport { type CssOptions } from '@tsdown/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 * tsdown's `target` option — the environment(s) the output syntax is\n * downleveled for.\n *\n * @remarks\n * Applies to every workspace in the project. A workspace that declares its\n * own `target` replaces this value outright (a target list describes one\n * environment set, so merging the two would be meaningless).\n *\n * @example `['node20.19', 'chrome111']`\n */\n target?: TSDownConfig['target'];\n /**\n * tsdown's `css` option — how stylesheets are processed and emitted.\n *\n * @remarks\n * Applies to every workspace in the project. A workspace's own `css` is\n * shallow-merged over this value, so it only needs to restate the keys it\n * changes.\n *\n * @see {@link CssOptions}\n */\n css?: CssOptions;\n}\n\n/**\n * Project Configuration\n */\n\nexport interface ResolvedProjectConfig extends Required<\n Omit<\n UserProjectConfig,\n | 'scripts'\n | 'tsconfig'\n | 'hooks'\n | 'plugins'\n | 'dts'\n | 'optimizeCSS'\n | 'target'\n | 'css'\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 * tsdown's `target` option applied to every workspace in the project, unless\n * the workspace declares its own.\n */\n target?: TSDownConfig['target'];\n /**\n * tsdown's `css` option applied to every workspace in the project, with the\n * workspace's own `css` shallow-merged over it.\n */\n css?: CssOptions;\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\n/**\n * Collect the plain string entries from an {@link ExternalOption}, flattening\n * nested arrays.\n *\n * Only string entries can be turned into package-name prefixes for subpath\n * matching (`RegExp` / function entries are opaque and are skipped). Used to\n * feed the external-imports plugin so that a `deps.neverBundle` package name\n * also externalizes its subpath imports (e.g. `pkg/foo.svg`).\n */\nexport function collectExternalStringPrefixes(\n option: ExternalOption | undefined,\n): string[] {\n const prefixes: string[] = [];\n const walk = (o: ExternalOption | undefined): void => {\n if (!o) return;\n if (typeof o === 'string') {\n prefixes.push(o);\n } else if (Array.isArray(o)) {\n o.forEach(walk);\n }\n };\n walk(option);\n return prefixes;\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/promises';\nimport path from 'node:path';\nimport { glob } from 'glob';\n\n/**\n * Matches a trailing `//# sourceMappingURL=<file>.d.(m)ts.map` comment at the\n * end of a declaration file. Capture group 1 is the referenced map file name.\n *\n * @see {@link stripDanglingDTSSourceMaps}\n */\nexport const DANGLING_DTS_SOURCE_MAP_RE =\n /\\r?\\n\\/\\/# sourceMappingURL=([^\\r\\n]*\\.d\\.m?ts\\.map)[ \\t]*\\r?\\n?$/;\n\n/**\n * Remove dangling declaration-map references from the emitted `.d.(m)ts` files\n * under `distDir`.\n *\n * tsdown (rolldown) appends a `//# sourceMappingURL=<file>.d.mts.map` comment to\n * every declaration file it emits, but does NOT emit the referenced\n * `.d.mts.map` itself. Consumers' editors/build tools then try to load a\n * declaration map that does not exist and report a resolution failure. Until\n * this is fixed upstream, strip the comment so shipped declarations don't point\n * at a missing map.\n *\n * As a safeguard it only strips the comment when the referenced map is genuinely\n * absent, so it becomes a no-op automatically if a future tsdown starts emitting\n * real declaration maps.\n *\n * Kept intentionally self-contained so this workaround can be removed in one\n * step: delete this file, its re-export from `../utils`, and the two call sites\n * (`Builder.build` and plugboy's own `tsdown.config.ts`, which self-builds via\n * bootstrap tsdown rather than through `Builder`).\n */\nexport async function stripDanglingDTSSourceMaps(\n distDir: string,\n): Promise<void> {\n const dtsFiles = await glob(path.join(distDir, '**/*.{d.ts,d.mts}'));\n await Promise.all(\n dtsFiles.map(async (filePath) => {\n const dts = await fs.readFile(filePath, 'utf-8');\n const matched = dts.match(DANGLING_DTS_SOURCE_MAP_RE);\n if (!matched) return;\n\n const mapPath = path.join(path.dirname(filePath), matched[1]);\n const mapExists = await fs.access(mapPath).then(\n () => true,\n () => false,\n );\n if (mapExists) return;\n\n await fs.writeFile(\n filePath,\n dts.replace(DANGLING_DTS_SOURCE_MAP_RE, '\\n'),\n 'utf-8',\n );\n }),\n );\n}\n","import crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n/**\n * Compute the temporary output path for a `bundle-require`-bundled plugboy\n * config file (`plugboy.project.*` / `plugboy.workspace.*`).\n *\n * `bundle-require` bundles the config to a throwaway `.mjs` next to the source\n * before importing it. Its default places that file in the config's own\n * directory — e.g. `plugboy.project.bundled_<id>.mjs` at the repo root — which\n * is noisy and can be left behind if the build is force-killed.\n *\n * Redirect it under the config's own `node_modules/.plugboy/` instead:\n * - It lives inside `node_modules`, so it is already gitignored and out of the\n * consumer's sight (and any straggler after a hard kill stays hidden there).\n * - Module resolution is unchanged: the bundled file keeps bare imports for\n * externalized dependencies, and Node resolves them by walking up to the same\n * `<configDir>/node_modules` it would have used at the original location.\n *\n * The random suffix from the default naming is preserved because turbo runs\n * many `plugboy build` processes in parallel, each loading the root\n * `plugboy.project.*`; a fixed name would collide across concurrent builds.\n */\nexport function resolveBundledConfigOutputFile(\n filepath: string,\n format: 'esm' | 'cjs',\n): string {\n const ext = format === 'esm' ? 'mjs' : 'cjs';\n const base = path.parse(filepath).name;\n const id = crypto.randomBytes(6).toString('hex');\n const outDir = path.join(path.dirname(filepath), 'node_modules', '.plugboy');\n // `bundle-require` writes the bundled file directly and does not create its\n // parent directory, so ensure `.plugboy/` exists first.\n fs.mkdirSync(outDir, { recursive: true });\n return path.join(outDir, `${base}.bundled_${id}.${ext}`);\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 // `glob` makes no ordering guarantee, and the insertion order here becomes the\n // key order of the generated `exports` / `typesVersions`, so an unsorted result\n // rewrites the workspace's package.json on an arbitrary subset of builds.\n const files = (await glob(pattern)).sort();\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 { resolveBundledConfigOutputFile } from './bundled-config';\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 target,\n css,\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 target,\n css,\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 getOutputFile: resolveBundledConfigOutputFile,\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 { resolveBundledConfigOutputFile } from './bundled-config';\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 getOutputFile: resolveBundledConfigOutputFile,\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 {\n copyDirSync,\n rmrf,\n mergeExternals,\n stripDanglingDTSSourceMaps,\n} 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 await stripDanglingDTSSourceMaps(this.workspace.dirs.dist.value);\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 fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { PlugboyWorkspace } from './workspace';\n\n/** `foo.mjs` -> `foo.css`, mirroring how `@tsdown/css` names a chunk's CSS. */\nexport function toCssFileName(jsFileName: string): string {\n return jsFileName.replace(/(?:\\.module)?(\\.[cm]?js)$/, '.css');\n}\n\n/** The stylesheets a package declares: `./<entry>.css` per `css: true` entry. */\nexport function declaredStylesheets(workspace: PlugboyWorkspace): Set<string> {\n return new Set(\n workspace.exports\n .filter((exp) => exp.id.endsWith('.css'))\n .map((exp) => path.posix.basename(exp.id)),\n );\n}\n\n/**\n * Every stylesheet the build has written to `dir`, as file names.\n *\n * The bundle is not the whole story: `plugboy-assemble-entry-css` writes an\n * entry's stylesheet directly to disk when the build produced none for it, so a\n * `writeBundle` stage that only walked the bundle assets would skip exactly the\n * file that needed the most work. The declared exports fill that in — they are the\n * stylesheets the package publishes, so anything present under one of those names\n * belongs in the set.\n */\nexport async function listEmittedStylesheets(\n workspace: PlugboyWorkspace,\n dir: string,\n bundle: Record<string, { type: string; fileName: string }>,\n): Promise<string[]> {\n const names = new Set<string>();\n for (const chunk of Object.values(bundle)) {\n if (chunk.type === 'asset' && chunk.fileName.endsWith('.css')) {\n names.add(chunk.fileName);\n }\n }\n\n await Promise.all(\n [...declaredStylesheets(workspace)].map(async (name) => {\n if (names.has(name)) return;\n try {\n await fs.access(path.join(dir, name));\n names.add(name);\n } catch {\n // Not emitted — the entry produced no CSS at all.\n }\n }),\n );\n\n return [...names];\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport type { PlugboyWorkspace } from '../workspace';\nimport type { Plugin, ResolvedOptimizeCSSOptions } from '../types';\nimport type { Processor, AcceptedPlugin as PostcssPlugin } from 'postcss';\nimport { listEmittedStylesheets } from '../workspace/stylesheets';\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 css: string,\n fileName: string,\n options: ResolvedOptimizeCSSOptions,\n): Promise<string> {\n const postcss = await getPostcss(options);\n\n function prepare(source: string): string {\n const layerDefs = (() => {\n const matched = source.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 + source.replace(allLayerDefRe, '');\n }\n\n const result = await postcss.process(prepare(css), {\n from: fileName,\n to: fileName,\n map: { inline: false },\n });\n\n return result.css.replace(SOURCE_MAPPING_URL_COMMENT_RE, '');\n}\n\n/**\n * Applies {@link PlugboyWorkspace.optimizeCSSOptions} to every stylesheet the\n * build writes.\n *\n * This runs in `writeBundle`, on the files on disk, rather than on the bundle\n * assets in `generateBundle` — because not every stylesheet exists as a bundle\n * asset by then. tsdown's own CSS pipeline emits from a *post* plugin, which\n * runs after every user plugin's `generateBundle`, so CSS that tsdown produces\n * (a plain `.css` / `.scss` import, or — since the vanilla-extract plugin routes\n * its `.css.ts` through tsdown — extracted CSS) used to skip these\n * optimizations entirely, while CSS a plugin emitted itself received them. By\n * `writeBundle` every producer has finished and the whole set is on disk.\n *\n * `preserve-css-imports` re-injects external `@import`s in its own\n * `writeBundle`; it is registered after this plugin, so it always sees the\n * optimized file.\n */\nexport function OptimizeCSSPlugin(workspace: PlugboyWorkspace): Plugin {\n // Files already optimized, so repeated output passes are idempotent.\n const processed = new Set<string>();\n\n return {\n name: 'plugboy-optimize-css',\n buildStart() {\n processed.clear();\n },\n async writeBundle(options, bundle) {\n const { optimizeCSSOptions } = workspace;\n if (!optimizeCSSOptions) return;\n\n const { dir } = options;\n if (!dir) return;\n\n const stylesheets = await listEmittedStylesheets(workspace, dir, bundle);\n\n await Promise.all(\n stylesheets.map(async (fileName) => {\n const filePath = path.join(dir, 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.\n return;\n }\n processed.add(filePath);\n\n const optimized = await optimizeCSS(\n css,\n fileName,\n optimizeCSSOptions,\n );\n if (optimized !== css) {\n await fs.writeFile(filePath, optimized);\n }\n }),\n );\n },\n };\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { definePlugin } from '../../utils';\nimport type { PlugboyWorkspace } from '../workspace';\nimport { declaredStylesheets, toCssFileName } from '../stylesheets';\n\n/**\n * Plugin that guarantees the stylesheet of every `css: true` entry exists, and is\n * self-contained.\n *\n * plugboy declares a `./<entry>.css` export for each such entry. With more than\n * one of them the build has to emit one stylesheet per entry, which is what\n * tsdown's `css.splitting` does — but it splits by *output chunk*, not by entry:\n *\n * - CSS reached from several entries is moved into a shared chunk and emitted\n * under that chunk's hashed name, which no export points at. Importing\n * `./<entry>.css` then yields an incomplete stylesheet.\n * - An entry whose CSS comes *only* from such a shared chunk gets no stylesheet of\n * its own at all, so its declared export resolves to a missing file.\n *\n * This rebuilds each entry's stylesheet from its own CSS plus the CSS of every\n * chunk it imports, dependencies first — the order the stylesheets would have been\n * loaded in. CSS shared between entries is therefore duplicated into each, which\n * is what makes a single `./<entry>.css` import complete. The per-chunk\n * stylesheets that were folded in are deleted, since nothing exports them.\n *\n * The chunk graph has to be captured in `generateBundle`, because it is gone by\n * the time the stylesheets exist: a chunk holding nothing but CSS is dropped once\n * tsdown's CSS pipeline (a *post* plugin, so it runs after this hook) has emitted\n * its stylesheet, and its importers' `imports` are emptied along with it. By\n * `writeBundle` the shared chunk is neither in the bundle nor on disk — only its\n * orphaned stylesheet is.\n *\n * A build that emits one stylesheet for the whole package (`css.splitting: false`,\n * the default for a single CSS entry) is left untouched: the entry chunk's\n * stylesheet is already the one and only output.\n */\n\ninterface ChunkNode {\n name: string;\n isEntry: boolean;\n imports: string[];\n}\n\nexport function createAssembleEntryCssPlugin(workspace: PlugboyWorkspace) {\n /** Chunk file name -> its identity and static imports, as of `generateBundle`. */\n const graph = new Map<string, ChunkNode>();\n\n return definePlugin({\n name: 'plugboy-assemble-entry-css',\n buildStart() {\n graph.clear();\n },\n generateBundle(_options, bundle) {\n for (const chunk of Object.values(bundle)) {\n if (chunk.type !== 'chunk') continue;\n graph.set(chunk.fileName, {\n name: chunk.name,\n isEntry: chunk.isEntry,\n // Static imports only: a dynamically imported chunk brings its own\n // stylesheet along at runtime.\n imports: [...chunk.imports],\n });\n }\n },\n async writeBundle(options, bundle) {\n const { dir } = options;\n if (!dir) return;\n\n // `css.inject` makes the JS import its stylesheet by name, so the per-chunk\n // files are referenced and must not be removed.\n if (workspace.cssOptions?.inject) return;\n\n const targets = declaredStylesheets(workspace);\n if (!targets.size) return;\n\n const emitted = new Set(\n Object.values(bundle)\n .filter(\n (chunk) =>\n chunk.type === 'asset' && chunk.fileName.endsWith('.css'),\n )\n .map((chunk) => chunk.fileName),\n );\n if (!emitted.size) return;\n\n /** The stylesheet a chunk owns, if the build emitted one. */\n const cssOf = (fileName: string): string | undefined => {\n const css = toCssFileName(fileName);\n return css !== fileName && emitted.has(css) ? css : undefined;\n };\n\n /** Stylesheets an entry needs, dependencies first, each listed once. */\n const collect = (entryFileName: string): string[] => {\n const visited = new Set<string>();\n const ordered: string[] = [];\n const walk = (fileName: string) => {\n if (visited.has(fileName)) return;\n visited.add(fileName);\n const node = graph.get(fileName);\n if (!node) return;\n for (const imported of node.imports) walk(imported);\n const css = cssOf(fileName);\n if (css && !ordered.includes(css)) ordered.push(css);\n };\n walk(entryFileName);\n return ordered;\n };\n\n const folded = new Set<string>();\n\n await Promise.all(\n [...graph].map(async ([fileName, node]) => {\n if (!node.isEntry) return;\n const target = `${node.name}.css`;\n if (!targets.has(target)) return;\n\n const sources = collect(fileName);\n // Nothing attributable to this entry — a single combined stylesheet, or\n // one a plugin emitted itself. Either way it is already correct.\n if (!sources.length) return;\n sources.forEach((source) => folded.add(source));\n if (sources.length === 1 && sources[0] === target) return;\n\n const parts = await Promise.all(\n sources.map((source) =>\n fs.readFile(path.join(dir, source), 'utf8').catch(() => ''),\n ),\n );\n const css = parts.filter(Boolean).join('\\n');\n if (!css) return;\n await fs.writeFile(path.join(dir, target), css);\n folded.add(target);\n }),\n );\n\n // Drop the per-chunk stylesheets that were folded into an entry's: they are\n // named after a chunk, so no export can point at them.\n await Promise.all(\n [...folded]\n .filter((css) => !targets.has(css))\n .map((css) => fs.rm(path.join(dir, css), { force: true })),\n );\n },\n });\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { Plugin } from '../../types';\nimport type { PlugboyWorkspace } from '../workspace';\n\n/**\n * Plugin that inlines the contents of a `?raw` import.\n *\n * The virtual module id is kept **relative to the workspace** and turned back\n * into a path only inside `load`. rolldown normalizes an ordinary module id\n * against the project when it prints the `//#region <id>` comment that precedes\n * each module in the output, but a virtual id — anything starting with `\\0` — is\n * printed verbatim. Building the id from the resolved absolute path therefore\n * published the build machine's directory layout:\n *\n * ```js\n * //#region \\0raw:/home/runner/work/acme-ui/acme-ui/packages/core/src/logo.svg\n * ```\n *\n * A workspace-relative id makes the output independent of where the build ran,\n * which also keeps two machines' `dist` diffable.\n */\nconst PREFIX = '\\0raw:';\nconst SUFFIX = '?raw';\n\nexport function createRawLoaderPlugin(workspace: PlugboyWorkspace): Plugin {\n const root = workspace.dir.value;\n\n return {\n name: 'raw-loader',\n async resolveId(id, importer, options) {\n if (!id.endsWith(SUFFIX)) return null;\n\n const rawPath = id.slice(0, -SUFFIX.length);\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 // Posix separators keep the id — and with it the emitted comment —\n // identical on Windows.\n return `${PREFIX}${path\n .relative(root, resolved.id)\n .split(path.sep)\n .join(path.posix.sep)}`;\n },\n\n async load(id) {\n if (!id.startsWith(PREFIX)) return null;\n\n const content = await fs.readFile(\n path.resolve(root, id.slice(PREFIX.length)),\n 'utf-8',\n );\n return `export default ${JSON.stringify(content)};`;\n },\n };\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { definePlugin } from '../../utils';\nimport type { PlugboyWorkspace } from '../workspace';\nimport { listEmittedStylesheets } from '../stylesheets';\n\n/**\n * Plugin to preserve what tsdown's CSS pipeline would rewrite away at the top of\n * a stylesheet: external `@import` statements and the authored `@layer` order.\n *\n * **External `@import`s.** rolldown / tsdown's CSS pipeline (lightningcss)\n * resolves and inlines every `@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 * **Layer order.** lightningcss drops a name from an `@layer a, b, c;` statement\n * when a block for it follows in the same stylesheet, since the block establishes\n * the same order. That holds for a standalone document, but not for a library\n * stylesheet whose statement also orders layers belonging to *other* packages:\n * once the name is gone, its position is decided by wherever its block happens to\n * land relative to those, and the authored order is lost. `@fastkit/vui` declares\n * `@layer vui-normalize, vui-color-scheme, …, vui;`, and losing `vui-normalize`\n * from it promoted the reset layer above the packages it is supposed to lose to.\n *\n * Both are captured from a `transform` hook declared `order: 'pre'`, which runs\n * ahead of tsdown's CSS handling even though that is registered as a *pre plugin*\n * — hook order wins over plugin order. It is the only point that sees the CSS of\n * **every** stylesheet in the graph, including a virtual one another plugin\n * supplies from `load`: vanilla-extract generates its `@layer` statements into\n * such a module, so a `load`-based capture would miss exactly the case where the\n * generated statement is the only record of the intended order. The captured\n * values are re-emitted in `writeBundle`, after every CSS producer has written\n * its final 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\n/** Stylesheet ids, with any query (`?source=…`, `?inline`) still attached. */\nconst STYLE_ID_RE = /\\.(?:css|scss|sass|less|styl|stylus)(?:$|\\?)/;\n\n/** The layer names a stylesheet declares, in the order it declares them. */\nfunction collectLayerNames(css: string): string[] {\n const names: string[] = [];\n for (const [, group] of css.matchAll(LAYER_STATEMENT_RE)) {\n for (const name of group.split(',')) {\n const trimmed = name.trim();\n if (trimmed && !names.includes(trimmed)) names.push(trimmed);\n }\n }\n return names;\n}\n\n/**\n * Merge several declaration orders into one that contradicts none of them.\n *\n * Concatenating them and dropping repeats does not work, because a name's first\n * appearance is rarely where its order is decided: vanilla-extract re-declares a\n * layer at the top of *every* stylesheet that puts a rule in it, so a single\n * `@layer that-one;` from some component is seen before the module that declares\n * how all the layers relate — and once the component's name is in the list, the\n * declaring module's order is silently dropped for it.\n *\n * Each sequence is therefore read as a set of \"must come before\" constraints and\n * the result is a topological sort of them, preferring the earliest-seen name when\n * several are free. Earlier sequences win: a constraint that would contradict one\n * already recorded is skipped, so a stylesheet's own surviving statement — whose\n * order tsdown may have rewritten — can add names without reordering anything.\n */\nfunction mergeLayerOrder(sequences: string[][]): string[] {\n const nodes: string[] = [];\n const next = new Map<string, Set<string>>();\n\n const add = (name: string) => {\n if (next.has(name)) return;\n nodes.push(name);\n next.set(name, new Set());\n };\n /** Whether `to` already has to come after `from`. */\n const precedes = (from: string, to: string): boolean => {\n const seen = new Set<string>();\n const stack = [from];\n while (stack.length) {\n const current = stack.pop()!;\n if (current === to) return true;\n if (seen.has(current)) continue;\n seen.add(current);\n stack.push(...(next.get(current) ?? []));\n }\n return false;\n };\n\n for (const sequence of sequences) {\n sequence.forEach(add);\n for (let i = 0; i + 1 < sequence.length; i++) {\n const from = sequence[i];\n const to = sequence[i + 1];\n if (from === to || precedes(to, from)) continue;\n next.get(from)!.add(to);\n }\n }\n\n const incoming = new Map(nodes.map((name) => [name, 0]));\n for (const [, targets] of next) {\n for (const target of targets) {\n incoming.set(target, (incoming.get(target) ?? 0) + 1);\n }\n }\n\n const remaining = new Set(nodes);\n const merged: string[] = [];\n while (remaining.size) {\n // A cycle can only come from contradicting sequences, which `precedes`\n // already rejects; the fallback keeps this terminating regardless.\n const name =\n nodes.find((it) => remaining.has(it) && incoming.get(it) === 0) ??\n nodes.find((it) => remaining.has(it))!;\n remaining.delete(name);\n merged.push(name);\n for (const target of next.get(name) ?? []) {\n incoming.set(target, (incoming.get(target) ?? 1) - 1);\n }\n }\n return merged;\n}\n\nexport function createPreserveCssImportsPlugin(workspace: PlugboyWorkspace) {\n // External `@import` statements, kept verbatim and in first-seen order.\n const externalImports: string[] = [];\n // Layer names per stylesheet module, captured before lightningcss can prune the\n // statements they came from. Keyed by module id, because the order modules are\n // transformed in is not the order their CSS ends up in.\n const layersByModule = new Map<string, string[]>();\n // The merged declaration order, filled in `generateBundle`.\n const declaredLayers: 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 layersByModule.clear();\n declaredLayers.length = 0;\n processed.clear();\n },\n // Runs ahead of tsdown's CSS transform, which inlines the imports and prunes\n // the layer statements, so this is where both have to be captured.\n transform: {\n order: 'pre' as const,\n filter: { id: STYLE_ID_RE },\n handler(code: string, id: string) {\n const file = id.split('?')[0];\n if (!STYLE_ID_RE.test(file)) return null;\n\n const names = collectLayerNames(code);\n if (names.length) layersByModule.set(id, names);\n\n // Only plain CSS is rewritten here. A preprocessor's `@import` is its own\n // module system, resolved before any CSS ever reaches tsdown.\n if (!file.endsWith('.css') || !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 },\n // Merge the per-module declarations into one order (see `mergeLayerOrder`).\n //\n // The sequences are visited in module execution order — a module's position in\n // `chunk.moduleIds`, which is also the order tsdown concatenates the modules'\n // CSS in. That decides which sequence wins a contradiction, and how free names\n // are ordered; the order the `transform` hook happened to visit modules in is\n // not usable for either.\n generateBundle(_options, bundle) {\n if (!layersByModule.size) return;\n const sequences: string[][] = [];\n for (const chunk of Object.values(bundle)) {\n if (chunk.type !== 'chunk') continue;\n for (const id of chunk.moduleIds) {\n const names = layersByModule.get(id);\n if (names) sequences.push(names);\n }\n }\n declaredLayers.length = 0;\n declaredLayers.push(...mergeLayerOrder(sequences));\n },\n // Re-emit the preserved imports and layer order into the final CSS files on\n // disk. Running in `writeBundle` (rather than `generateBundle`) lets every\n // other CSS producer — tsdown's own pipeline emits from a *post* plugin —\n // finish first.\n async writeBundle(options, bundle) {\n if (!externalImports.length && !declaredLayers.length) return;\n const { dir } = options;\n if (!dir) return;\n\n const importBlock = externalImports.length\n ? `${externalImports.join('\\n')}\\n`\n : '';\n\n const stylesheets = await listEmittedStylesheets(workspace, dir, bundle);\n\n await Promise.all(\n stylesheets.map(async (fileName) => {\n const filePath = path.join(dir, 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.\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 //\n // The captured order decides; a name only this stylesheet declares is\n // merged in without reordering the rest.\n const layerNames = mergeLayerOrder([\n declaredLayers,\n collectLayerNames(css),\n ]);\n\n const body = css.replace(LAYER_STATEMENT_RE, '');\n const layerStatement = layerNames.length\n ? `@layer ${layerNames.join(', ')};\\n`\n : '';\n const next = `${layerStatement}${importBlock}${body}`;\n if (next !== css) await fs.writeFile(filePath, next);\n }),\n );\n },\n });\n}\n","import { Plugin } from '../../types';\nimport type { PlugboyWorkspace } from '../workspace';\n\n/**\n * A specifier is \"bare\" (a package specifier) when it is not relative, absolute,\n * a protocol-qualified id (`node:`, `data:`, `http:`, …) or a fragment. Only\n * bare specifiers are candidates for external resolution here.\n */\nfunction isBareSpecifier(id: string): boolean {\n return !/^(?:\\.{1,2}\\/|\\/|[a-z][a-z\\d+.-]*:|#)/i.test(id);\n}\n\n/** Whether `id` equals `name` or is a subpath of it (`name/...`). */\nfunction matchesPackage(id: string, name: string): boolean {\n return id === name || id.startsWith(`${name}/`);\n}\n\n/**\n * Resolve self-references and `deps.neverBundle` package imports as explicit\n * externals.\n *\n * rolldown only externalizes a specifier without warning when it matches the\n * `external` option *before* it tries to resolve it on disk. A `deps.neverBundle`\n * entry is a plain string, so it matches the package name exactly but not its\n * subpaths (`pkg/foo.svg`); and a package's own name is never in its\n * dependencies at all. Both therefore fall through to rolldown's\n * \"resolve failed → implicit external\" path, which emits a noisy\n * `UNRESOLVED_IMPORT` warning for every such import even though the resulting\n * external output is correct.\n *\n * This plugin intercepts those imports in `resolveId` and marks them external\n * up front, so the diagnostic never fires:\n *\n * - **Self-reference:** a package importing its own name (or a subpath of it).\n * The subpath is served at runtime from the consumer's `exports` map\n * (`\"./*\": \"./dist/*\"`); it cannot — and must not — be bundled into the build\n * that produces that very `dist`, so external is always the right answer.\n * - **`deps.neverBundle`:** the declared package names and any of their\n * subpaths.\n *\n * Specifiers that match neither are returned untouched, so genuine unresolved\n * imports (typos in a non-external package) still surface their warning.\n */\nexport function createExternalImportsPlugin(\n workspace: PlugboyWorkspace,\n): Plugin {\n const selfName = workspace.json.name;\n const { neverBundlePrefixes } = workspace;\n\n return {\n name: 'plugboy:external-imports',\n resolveId(id) {\n if (!isBareSpecifier(id)) return null;\n\n if (selfName && matchesPackage(id, selfName)) {\n return { id, external: true };\n }\n\n for (const prefix of neverBundlePrefixes) {\n if (matchesPackage(id, prefix)) {\n return { id, external: true };\n }\n }\n\n return null;\n },\n };\n}\n","import { Plugin } from '../../types';\n\n/**\n * The rolldown-plugin-dts sub-plugin that drives declaration bundling through a\n * \"fake JS\" module. Its `renderChunk` returns a bare `\"export { };\"` string\n * (with no sourcemap) whenever a `.d.ts` chunk reduces to an empty body — e.g.\n * an entry composed solely of external re-exports. With sourcemaps enabled\n * (plugboy sets `sourcemap: true` for the JS output, which the dts pipeline\n * inherits), rolldown then emits a spurious `[SOURCEMAP_BROKEN]` warning for a\n * declaration file that is perfectly correct.\n */\nconst DTS_FAKE_JS_PLUGIN_NAME = 'rolldown-plugin-dts:fake-js';\n\n/**\n * Suppress the harmless `[SOURCEMAP_BROKEN]` warning that rolldown-plugin-dts's\n * fake-js pass emits for empty declaration chunks.\n *\n * The filter is intentionally narrow — it only drops a `warn`-level\n * `SOURCEMAP_BROKEN` log **attributed to `rolldown-plugin-dts:fake-js`**. Real\n * sourcemap breakage on JS output (emitted by other plugins, or with no plugin\n * attribution) has a different `plugin` field and passes through untouched, so\n * genuine problems are still reported.\n *\n * The suppression is re-emitted at `debug` level so it can be traced by running\n * a build with a debug log level.\n *\n * TODO(upstream): remove this workaround once rolldown-plugin-dts returns a\n * valid (empty) sourcemap for empty chunks instead of a bare string. Track at\n * https://github.com/sxzz/rolldown-plugin-dts and, once fixed, bump the tsdown\n * (rolldown-plugin-dts) dependency range and delete this file, its re-export\n * from `./index`, and its registration in `workspace.ts`.\n */\nexport function createSuppressDtsSourcemapWarningPlugin(): Plugin {\n return {\n name: 'plugboy:suppress-dts-sourcemap-warning',\n onLog(level, log) {\n if (\n level === 'warn' &&\n log.code === 'SOURCEMAP_BROKEN' &&\n log.plugin === DTS_FAKE_JS_PLUGIN_NAME\n ) {\n this.debug(() => ({\n code: 'PLUGBOY_SUPPRESSED_DTS_SOURCEMAP_BROKEN',\n message: `Suppressed a spurious [SOURCEMAP_BROKEN] warning from ${DTS_FAKE_JS_PLUGIN_NAME} for an empty declaration chunk. Original message: ${log.message}`,\n }));\n return false;\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 collectExternalStringPrefixes,\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 {\n createRawLoaderPlugin,\n createAssembleEntryCssPlugin,\n createPreserveCssImportsPlugin,\n createExternalImportsPlugin,\n createSuppressDtsSourcemapWarningPlugin,\n} 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 neverBundlePrefixes: 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 neverBundlePrefixes,\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.neverBundlePrefixes = neverBundlePrefixes;\n this.meta = meta;\n this.config = config;\n this.plugins = [\n // Runs first so self-reference / `neverBundle` imports are marked external\n // before any resolver (built-in or user) can attempt — and fail — to\n // resolve them on disk.\n createExternalImportsPlugin(this),\n // Filters the spurious dts SOURCEMAP_BROKEN warning; harmless if the dts\n // pipeline is absent, so it can live alongside the other plugins.\n createSuppressDtsSourcemapWarningPlugin(),\n ...plugins,\n // Must precede the stages that post-process the written stylesheets.\n createAssembleEntryCssPlugin(this),\n OptimizeCSSPlugin(this),\n WorkspaceEnvPlugin(this),\n createRawLoaderPlugin(this),\n createPreserveCssImportsPlugin(this),\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 // Prefixes for the external-imports plugin. Seeded from the user's initial\n // `deps.neverBundle` and extended by any `ctx.mergeExternals` calls made\n // during workspace setup (see below).\n const neverBundlePrefixes = collectExternalStringPrefixes(\n config.deps?.neverBundle,\n );\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 // Unlike `target`, the keys of `css` are independent, so the workspace value\n // is shallow-merged over the project one (mirroring `optimizeCSS`). Stays\n // `undefined` when neither layer sets it, leaving tsdown's own defaults alone.\n const css =\n config.css || project?.config.css\n ? { ...project?.config.css, ...config.css }\n : undefined;\n\n // Inherit the project's `target` unless the workspace declares its own. A\n // target list describes one environment set, so the workspace value replaces\n // the project default rather than merging with it. `??` (not `||`) keeps an\n // explicit `false` — tsdown's \"apply no transformation\" — intact.\n config.target ??= project?.config.target;\n\n const ctx: WorkspaceSetupContext = {\n dir,\n json,\n config,\n project,\n dirs,\n dependencies: _dependencies,\n projectDependencies,\n neverBundlePrefixes,\n meta,\n plugins,\n hooks,\n dts,\n css,\n optimizeCSS,\n mergeExternals: (override) => {\n config.deps ??= {};\n config.deps.neverBundle = mergeExternals(\n config.deps.neverBundle,\n override,\n );\n neverBundlePrefixes.push(...collectExternalStringPrefixes(override));\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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"}
|