@fastkit/plugboy 1.0.0-next.5 → 1.0.0-next.6

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-VIdL5Yhp.mjs";
1
+ import { i as getWorkspace, t as generateWorkspace } from "./workspace-XEn7b5JU.mjs";
2
2
  import { cac } from "cac";
3
3
  //#region package.json
4
- var version = "1.0.0-next.5";
4
+ var version = "1.0.0-next.6";
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 normalizeDTSSettings, A as resolveRawExposeEntriesSettings, B as exitHook, C as findProjectPlugin, D as loadProjectConfig, E as isProjectPackageJson, F as getFilename, G as resolveListable, H as mergeExternals, I as isFileNotFoundException, J as WORKSPACE_REQUIRED_FIELDS, K as PROJECT_REQUIRED_FIELDS, L as pathExists, M as findConfig, N as findFile, O as resolveUserProjectConfig, P as getDirname, Q as normalizeDTSPreserveTypeTarget, R as rmrf, S as extractProjectPlugins, T as defineProjectConfig, U as mergeNoExternals, V as mergeChunkAddons, W as isPromise, X as mergeDTSSettingsList, Y as resolveOptimizeCSSOptions, Z as normalizeDTSPreserveTypeSettings, _ as loadWorkspaceConfig, a as syncWorkspacePackageFields, b as resolveUserWorkspaceConfig, c as Builder, d as getWorkspacePackageJson, et as createHooksDefaults, f as Path, g as isWorkspacePackageJson, h as defineWorkspaceConfig, i as getWorkspace, j as copyDirSync, k as exposeEntries, l as findWorkspacePackages, m as resolveUserHooks, n as PlugboyWorkspace, o as PlugboyProject, p as buildHooks, q as TSDOWN_SYNC_OPTIONS, r as WORKSPACE_PACKAGE_SYNC_FIELDS, s as getProject, t as generateWorkspace, u as getProjectPackageJson, v as resolveRawWorkspaceEntries, w as resolveUserPluginOption, x as definePlugin, y as resolveRawWorkspaceEntry, z as writeFileAtomic } from "./workspace-VIdL5Yhp.mjs";
1
+ import { $ as normalizeDTSSettings, A as resolveRawExposeEntriesSettings, B as exitHook, C as findProjectPlugin, D as loadProjectConfig, E as isProjectPackageJson, F as getFilename, G as resolveListable, H as mergeExternals, I as isFileNotFoundException, J as WORKSPACE_REQUIRED_FIELDS, K as PROJECT_REQUIRED_FIELDS, L as pathExists, M as findConfig, N as findFile, O as resolveUserProjectConfig, P as getDirname, Q as normalizeDTSPreserveTypeTarget, R as rmrf, S as extractProjectPlugins, T as defineProjectConfig, U as mergeNoExternals, V as mergeChunkAddons, W as isPromise, X as mergeDTSSettingsList, Y as resolveOptimizeCSSOptions, Z as normalizeDTSPreserveTypeSettings, _ as loadWorkspaceConfig, a as syncWorkspacePackageFields, b as resolveUserWorkspaceConfig, c as Builder, d as getWorkspacePackageJson, et as createHooksDefaults, f as Path, g as isWorkspacePackageJson, h as defineWorkspaceConfig, i as getWorkspace, j as copyDirSync, k as exposeEntries, l as findWorkspacePackages, m as resolveUserHooks, n as PlugboyWorkspace, o as PlugboyProject, p as buildHooks, q as TSDOWN_SYNC_OPTIONS, r as WORKSPACE_PACKAGE_SYNC_FIELDS, s as getProject, t as generateWorkspace, u as getProjectPackageJson, v as resolveRawWorkspaceEntries, w as resolveUserPluginOption, x as definePlugin, y as resolveRawWorkspaceEntry, z as writeFileAtomic } from "./workspace-XEn7b5JU.mjs";
2
2
  export { Builder, PROJECT_REQUIRED_FIELDS, Path, PlugboyProject, PlugboyWorkspace, TSDOWN_SYNC_OPTIONS, WORKSPACE_PACKAGE_SYNC_FIELDS, WORKSPACE_REQUIRED_FIELDS, buildHooks, copyDirSync, createHooksDefaults, definePlugin, defineProjectConfig, defineWorkspaceConfig, exitHook, exposeEntries, extractProjectPlugins, findConfig, findFile, findProjectPlugin, findWorkspacePackages, generateWorkspace, getDirname, getFilename, getProject, getProjectPackageJson, getWorkspace, getWorkspacePackageJson, isFileNotFoundException, isProjectPackageJson, isPromise, isWorkspacePackageJson, loadProjectConfig, loadWorkspaceConfig, mergeChunkAddons, mergeDTSSettingsList, mergeExternals, mergeNoExternals, normalizeDTSPreserveTypeSettings, normalizeDTSPreserveTypeTarget, normalizeDTSSettings, pathExists, resolveListable, resolveOptimizeCSSOptions, resolveRawExposeEntriesSettings, resolveRawWorkspaceEntries, resolveRawWorkspaceEntry, resolveUserHooks, resolveUserPluginOption, resolveUserProjectConfig, resolveUserWorkspaceConfig, rmrf, syncWorkspacePackageFields, writeFileAtomic };
@@ -1019,64 +1019,96 @@ const rawLoaderPlugin = {
1019
1019
  //#endregion
1020
1020
  //#region src/workspace/plugins/preserve-css-imports.ts
1021
1021
  /**
1022
- * Plugin to preserve CSS @import statements
1022
+ * Plugin to preserve external CSS `@import` statements.
1023
1023
  *
1024
- * rolldown tries to resolve and inline CSS @import statements,
1025
- * but external package CSS should be treated as external and output @import as-is.
1024
+ * rolldown / tsdown's CSS pipeline (lightningcss) resolves and inlines every
1025
+ * `@import` it can. For bare package specifiers (e.g.
1026
+ * `@import url('material-symbols/rounded.css') layer(...)`) that is wrong for a
1027
+ * library build: it bloats the output and rebases the imported package's own
1028
+ * relative asset URLs (fonts) against our `dist`, breaking them. Such imports
1029
+ * should stay external so the consumer's bundler resolves them.
1026
1030
  *
1027
- * Note: rolldown parses and optimizes CSS independently, so placeholder approach doesn't work.
1028
- * Instead, collect external import paths and prepend them to CSS in generateBundle.
1031
+ * We can't intercept this in a `transform` hook by then tsdown has already
1032
+ * inlined the imports. Instead we strip them in `load` (which runs before the
1033
+ * CSS transform), remember them, and re-emit them in `writeBundle`, after every
1034
+ * other CSS producer (including vanilla-extract's merge) has written the final
1035
+ * file to disk.
1029
1036
  */
1030
1037
  /**
1031
- * Regular expression for CSS @import (with optional layer() support)
1032
- *
1033
- * Supports the following patterns:
1034
- * - @import 'path';
1035
- * - @import "path";
1036
- * - @import url(path);
1037
- * - @import url('path');
1038
- * - @import url("path");
1039
- * - @import url('path') layer(name);
1040
- * - @import 'path' layer(name);
1041
- *
1042
- * Captures:
1043
- * 1: import path
1044
- * 2: layer specification (e.g. " layer(fabric.foundation)") or undefined
1038
+ * Matches a single `@import` statement, capturing the quote (group 1) and the
1039
+ * imported specifier (group 2). Handles `url(...)`, quoted, and bare forms, and
1040
+ * tolerates trailing conditions (e.g. `layer(...)`, media queries).
1041
+ */
1042
+ const IMPORT_RE = /@import\s+(?:url\(\s*)?(["']?)([^"')\s]+)\1\s*\)?[^;]*;/g;
1043
+ /**
1044
+ * A specifier is "internal" (safe to bundle/inline) when it is relative,
1045
+ * absolute, a URL, a data URI, or a fragment. Anything else is treated as a
1046
+ * bare package specifier whose `@import` is preserved.
1045
1047
  */
1046
- const EXTERNAL_IMPORT_REGEX = /@import\s+(?:url\(\s*['"]?|['"])([^'"\s);]+)(?:['"]?\s*\)|['"])(\s+layer\([^)]+\))?\s*;/g;
1047
- function externalImportKey(entry) {
1048
- return entry.layer ? `${entry.path}::${entry.layer}` : entry.path;
1048
+ function isInternalImportSpecifier(spec) {
1049
+ return /^(?:\.{1,2}\/|\/|[a-z][a-z\d+.-]*:|data:|#)/i.test(spec);
1049
1050
  }
1051
+ /** Matches a top-level `@layer <names>;` statement (declaration, not a block). */
1052
+ const LAYER_STATEMENT_RE = /@layer\s+([^{};]+);[ \t]*\n?/g;
1050
1053
  function createPreserveCssImportsPlugin() {
1051
- const externalCssImports = /* @__PURE__ */ new Map();
1054
+ const externalImports = [];
1055
+ const processed = /* @__PURE__ */ new Set();
1052
1056
  return definePlugin({
1053
1057
  name: "preserve-css-imports",
1054
- transform: { handler(code, id) {
1055
- if (!id.endsWith(".css")) return null;
1056
- let hasExternalImports = false;
1057
- const transformed = code.replace(EXTERNAL_IMPORT_REGEX, (match, importPath, layerSpec) => {
1058
- if (!importPath.startsWith(".") && !importPath.startsWith("/")) {
1059
- hasExternalImports = true;
1060
- const entry = {
1061
- path: importPath,
1062
- layer: layerSpec?.trim()
1063
- };
1064
- externalCssImports.set(externalImportKey(entry), entry);
1065
- return "";
1066
- }
1067
- return match;
1058
+ buildStart() {
1059
+ externalImports.length = 0;
1060
+ processed.clear();
1061
+ },
1062
+ async load(id) {
1063
+ const file = id.split("?")[0];
1064
+ if (!file.endsWith(".css")) return null;
1065
+ let code;
1066
+ try {
1067
+ code = await fs$1.readFile(file, "utf8");
1068
+ } catch {
1069
+ return null;
1070
+ }
1071
+ if (!code.includes("@import")) return null;
1072
+ let changed = false;
1073
+ const stripped = code.replace(IMPORT_RE, (statement, _quote, spec) => {
1074
+ if (isInternalImportSpecifier(spec)) return statement;
1075
+ changed = true;
1076
+ const normalized = statement.trim();
1077
+ if (!externalImports.includes(normalized)) externalImports.push(normalized);
1078
+ return "";
1068
1079
  });
1069
- if (hasExternalImports) return {
1070
- code: transformed,
1080
+ if (!changed) return null;
1081
+ return {
1082
+ code: stripped,
1071
1083
  map: null
1072
1084
  };
1073
- return null;
1074
- } },
1075
- generateBundle: { handler(_options, bundle) {
1076
- if (externalCssImports.size === 0) return;
1077
- const importStatements = Array.from(externalCssImports.values()).map(({ path, layer }) => layer ? `@import '${path}' ${layer};` : `@import '${path}';`).join("\n");
1078
- for (const chunk of Object.values(bundle)) if (chunk.type === "asset" && typeof chunk.source === "string" && chunk.fileName.endsWith(".css")) chunk.source = importStatements + "\n" + chunk.source;
1079
- } }
1085
+ },
1086
+ async writeBundle(options, bundle) {
1087
+ if (!externalImports.length) return;
1088
+ const { dir } = options;
1089
+ if (!dir) return;
1090
+ const importBlock = `${externalImports.join("\n")}\n`;
1091
+ await Promise.all(Object.values(bundle).map(async (chunk) => {
1092
+ if (chunk.type !== "asset" || !chunk.fileName.endsWith(".css")) return;
1093
+ const filePath = path.join(dir, chunk.fileName);
1094
+ if (processed.has(filePath)) return;
1095
+ let css;
1096
+ try {
1097
+ css = await fs$1.readFile(filePath, "utf8");
1098
+ } catch {
1099
+ return;
1100
+ }
1101
+ processed.add(filePath);
1102
+ const layerNames = [];
1103
+ for (const [, names] of css.matchAll(LAYER_STATEMENT_RE)) for (const name of names.split(",")) {
1104
+ const trimmed = name.trim();
1105
+ if (trimmed && !layerNames.includes(trimmed)) layerNames.push(trimmed);
1106
+ }
1107
+ const body = css.replace(LAYER_STATEMENT_RE, "");
1108
+ const layerStatement = layerNames.length ? `@layer ${layerNames.join(", ")};\n` : "";
1109
+ await fs$1.writeFile(filePath, `${layerStatement}${importBlock}${body}`);
1110
+ }));
1111
+ }
1080
1112
  });
1081
1113
  }
1082
1114
  //#endregion
@@ -1454,4 +1486,4 @@ export default defineWorkspaceConfig({
1454
1486
  //#endregion
1455
1487
  export { normalizeDTSSettings as $, resolveRawExposeEntriesSettings as A, exitHook as B, findProjectPlugin as C, loadProjectConfig as D, isProjectPackageJson as E, getFilename as F, resolveListable as G, mergeExternals as H, isFileNotFoundException as I, WORKSPACE_REQUIRED_FIELDS as J, PROJECT_REQUIRED_FIELDS as K, pathExists as L, findConfig as M, findFile as N, resolveUserProjectConfig as O, getDirname as P, normalizeDTSPreserveTypeTarget as Q, rmrf as R, extractProjectPlugins as S, defineProjectConfig as T, mergeNoExternals as U, mergeChunkAddons as V, isPromise as W, mergeDTSSettingsList as X, resolveOptimizeCSSOptions as Y, normalizeDTSPreserveTypeSettings as Z, loadWorkspaceConfig as _, syncWorkspacePackageFields as a, resolveUserWorkspaceConfig as b, Builder as c, getWorkspacePackageJson as d, createHooksDefaults as et, Path as f, isWorkspacePackageJson as g, defineWorkspaceConfig as h, getWorkspace as i, copyDirSync as j, exposeEntries as k, findWorkspacePackages as l, resolveUserHooks as m, PlugboyWorkspace as n, PlugboyProject as o, buildHooks as p, TSDOWN_SYNC_OPTIONS as q, WORKSPACE_PACKAGE_SYNC_FIELDS as r, getProject as s, generateWorkspace as t, getProjectPackageJson as u, resolveRawWorkspaceEntries as v, resolveUserPluginOption as w, definePlugin as x, resolveRawWorkspaceEntry as y, writeFileAtomic as z };
1456
1488
 
1457
- //# sourceMappingURL=workspace-VIdL5Yhp.mjs.map
1489
+ //# sourceMappingURL=workspace-XEn7b5JU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-XEn7b5JU.mjs","names":["fs","fs","fs","fs","fs","fs","fs"],"sources":["../src/types/hook.ts","../src/types/dts.ts","../src/types/css.ts","../src/types/workspace.ts","../src/types/project.ts","../src/utils/general.ts","../src/utils/tsdown.ts","../src/utils/exit-hook.ts","../src/utils/file.ts","../src/utils/expose.ts","../src/constants.ts","../src/utils/project.ts","../src/utils/plugin.ts","../src/utils/workspace.ts","../src/utils/hook.ts","../src/path.ts","../src/package.ts","../src/workspace/dts.ts","../src/env/constants.ts","../src/env/utils.ts","../src/env/plugin.ts","../src/workspace/builder.ts","../src/project/project.ts","../src/postcss/plugin.ts","../src/workspace/plugins/raw-loader.ts","../src/workspace/plugins/preserve-css-imports.ts","../src/workspace/workspace.ts","../src/workspace/generate.ts"],"sourcesContent":["import type { Listable } from '../utils';\nimport { WorkspaceSetupContext, WorkspacePackageJson } from './workspace';\nimport type { PlugboyWorkspace } from '../workspace';\n\nexport type TryGetWorkspace = () => PlugboyWorkspace | undefined;\n\n/** plugboy hook definition */\nexport interface HookTypes {\n /**\n * Hooks during workspace setup\n * @remarks Called just before the workspace instance is created\n * @param ctx - {@link WorkspaceSetupContext Workspace setup context object}\n */\n setupWorkspace: (\n ctx: WorkspaceSetupContext,\n getWorkspace: TryGetWorkspace,\n ) => any;\n /**\n * Hooks after workspace generation\n * @param workspace - {@link PlugboyWorkspace workspace instance}\n */\n createWorkspace: (workspace: PlugboyWorkspace) => any;\n /**\n * Hooks when correcting package.json\n * @param json - package.json just before it was modified and saved by the plugboy\n * @param workspace - {@link PlugboyWorkspace workspace instance}\n */\n preparePackageJSON: (\n json: WorkspacePackageJson,\n workspace: PlugboyWorkspace,\n ) => any;\n}\n\nexport function createHooksDefaults(): ResolvedHooks {\n return {\n setupWorkspace: [],\n createWorkspace: [],\n preparePackageJSON: [],\n };\n}\n\nexport type HookName = keyof HookTypes;\n\n/**\n * plugboy user hook definition\n * @see {@link HookTypes}\n */\nexport type UserHooks = {\n [Name in HookName]?: Listable<HookTypes[Name]>;\n};\n\n/**\n * Pre-setup hook definitions\n * @see {@link HookTypes}\n */\nexport type ResolvedHooks = {\n [Name in HookName]: HookTypes[Name][];\n};\n\nexport type HookArgs<Name extends HookName> = Parameters<HookTypes[Name]>;\n\nexport type UnPromisify<T> = T extends Promise<infer U> ? U : T;\n\nexport type HookReturnType<Name extends HookName> = UnPromisify<\n ReturnType<HookTypes[Name]>\n>;\n\n/**\n * Map of hook methods that can be initialized and called\n * @see {@link HookTypes}\n */\nexport type BuildedHooks = {\n [Name in HookName]: (\n ...args: HookArgs<Name>\n ) => Promise<HookReturnType<Name>>;\n};\n","import type { Builder } from '../workspace';\nimport type { PlugboyWorkspace } from '../workspace';\n\nexport interface EmitDTSOptions {\n cwd?: string;\n outDir?: string;\n}\n\n/**\n * Custom DTS compiler function\n */\nexport type DTSCompilerFunction = (\n opts: EmitDTSOptions & { workspace: PlugboyWorkspace },\n) => Promise<void>;\n\n/**\n * DTS compiler specification\n * - 'tsc': TypeScript compiler (default)\n * - 'vue-tsc': Vue SFC compatible compiler\n * - function: Custom compiler function\n */\nexport type DTSCompilerOption = 'tsc' | 'vue-tsc' | DTSCompilerFunction;\n\n/**\n * Type preservation target in declaration file\n */\nexport interface DTSPreserveTypeTarget {\n /** Type name */\n typeName: string;\n /**\n * String to be restored or regular expression to match\n */\n from: string | RegExp;\n}\n\n/**\n * Type preservation target in declaration file (normalized)\n *\n * @see {@link DTSPreserveTypeTarget}\n */\nexport interface NormalizedDTSPreserveTypeTarget extends Omit<\n DTSPreserveTypeTarget,\n 'from'\n> {\n /** Regular expression to match the string to be restored */\n from: RegExp;\n}\n\nexport function normalizeDTSPreserveTypeTarget(\n target: DTSPreserveTypeTarget,\n): NormalizedDTSPreserveTypeTarget {\n const { from, typeName } = target;\n return {\n from: typeof from === 'string' ? new RegExp(`${from}`, 'g') : from,\n typeName,\n };\n}\n\n/**\n * Type preservation setting for declaration files\n *\n * @remarks This setting is for restoring type information inlined by the TypeScript compiler to the original type name by string substitution.\n */\nexport interface DTSPreserveTypeSettings {\n /** Name of the package to which the type to be restored belongs */\n pkg?: string;\n /** List of preservation targets */\n targets: DTSPreserveTypeTarget[];\n}\n\n/**\n * Type preservation setting for declaration files (normalized)\n *\n * @see {@link DTSPreserveTypeSettings}\n */\nexport interface NormalizedDTSPreserveTypeSettings extends Omit<\n DTSPreserveTypeSettings,\n 'targets'\n> {\n /** List of normalized type preservation targets */\n targets: NormalizedDTSPreserveTypeTarget[];\n}\n\nexport function normalizeDTSPreserveTypeSettings(\n settings: DTSPreserveTypeSettings,\n): NormalizedDTSPreserveTypeSettings {\n return {\n ...settings,\n targets: settings.targets.map(normalizeDTSPreserveTypeTarget),\n };\n}\n\n/**\n * Function to normalize declaration strings\n * @param dts - Bundled declaration strings\n * @param builder - Builder\n */\nexport type DTSNormalizer = (\n dts: string,\n builder: Builder,\n) => string | undefined | void | Promise<string | undefined | void>;\n\n/**\n * declaration output setting\n */\nexport interface DTSSettings {\n /**\n * Inline output without bundling declaration\n *\n * @default false\n */\n inline?: boolean;\n\n /**\n * DTS compiler specification\n * @default 'tsc'\n */\n compiler?: DTSCompilerOption;\n\n /**\n * Whether to ignore compiler errors and continue\n * @default false\n */\n ignoreCompilerErrors?: boolean;\n\n /**\n * list of type preservation settings\n *\n * @remarks This setting is for restoring type information inlined by the TypeScript compiler to the original type name by string substitution.\n *\n * @see {@link DTSPreserveTypeSettings}\n */\n preserveType?: DTSPreserveTypeSettings[];\n\n /**\n * list of function to normalize declaration strings\n */\n normalizers?: DTSNormalizer[];\n}\n\n/**\n * declaration output setting (normalized)\n *\n * @see {@link DTSSettings}\n */\nexport interface NormalizedDTSSettings {\n /**\n * Inline output without bundling declaration\n */\n inline: boolean;\n\n /**\n * DTS compiler specification\n */\n compiler: DTSCompilerOption;\n\n /**\n * Whether to ignore compiler errors and continue\n */\n ignoreCompilerErrors: boolean;\n\n /**\n * list of type preservation settings\n */\n preserveType: NormalizedDTSPreserveTypeSettings[];\n\n /**\n * list of function to normalize declaration strings\n */\n normalizers: DTSNormalizer[];\n}\n\nexport function normalizeDTSSettings(\n settings: DTSSettings,\n): NormalizedDTSSettings {\n const {\n inline = false,\n compiler = 'tsc',\n ignoreCompilerErrors = false,\n preserveType = [],\n normalizers = [],\n } = settings || {};\n return {\n inline,\n compiler,\n ignoreCompilerErrors,\n preserveType: preserveType.map(normalizeDTSPreserveTypeSettings),\n normalizers,\n };\n}\n\nexport function mergeDTSSettingsList(\n ...settingsList: (DTSSettings | undefined)[]\n): NormalizedDTSSettings {\n const merged: DTSSettings = {};\n settingsList.forEach((settings) => {\n if (!settings) return;\n const { inline, preserveType, normalizers } = settings;\n if (inline !== undefined) merged.inline = inline;\n if (preserveType) {\n merged.preserveType = merged.preserveType || [];\n merged.preserveType.push(...preserveType);\n }\n if (normalizers) {\n merged.normalizers = merged.normalizers || [];\n merged.normalizers.push(...normalizers);\n }\n });\n return normalizeDTSSettings(merged);\n}\n","import type { Options } from 'cssnano';\nimport {\n OptimizeLayerOptions,\n OptimizeMediaOptions,\n CombineRulesOptions,\n} from '../postcss';\n\n/**\n * CSS optimization options\n */\nexport interface OptimizeCSSOptions {\n /**\n * Layer optimization options\n *\n * Disable the operation with `false`.\n *\n * @default true\n */\n layer?: OptimizeLayerOptions | boolean;\n /**\n * Media Query Optimization Options\n *\n * Disable the operation with `false`.\n *\n * @default true\n */\n media?: OptimizeMediaOptions | boolean;\n /**\n * Combine rules Options\n *\n * If unset, no optimization is performed\n */\n combineRules?: CombineRulesOptions;\n /**\n * Options for [cssnano](https://cssnano.co/)\n *\n * Disable the operation with `false`.\n *\n * @default { preset: ['default', { normalizeWhitespace: false }] }\n */\n cssnano?: Options | boolean;\n}\n\nexport interface ResolvedOptimizeCSSOptions {\n layer?: OptimizeLayerOptions;\n media?: OptimizeMediaOptions;\n combineRules?: CombineRulesOptions;\n cssnano?: Options;\n}\n\nexport function resolveOptimizeCSSOptions(options: OptimizeCSSOptions) {\n const resolved: ResolvedOptimizeCSSOptions = {};\n const { layer = true, media = true, combineRules, cssnano = true } = options;\n if (layer !== false) {\n resolved.layer = layer === true ? {} : layer;\n }\n if (media !== false) {\n resolved.media = media === true ? {} : media;\n }\n if (combineRules) {\n resolved.combineRules = combineRules;\n }\n if (cssnano !== false) {\n resolved.cssnano =\n cssnano === true\n ? { preset: ['default', { normalizeWhitespace: false }] }\n : cssnano;\n }\n return resolved;\n}\n","import type { UserConfig as TSDownConfig } from 'tsdown';\nimport type { Path } from '../path';\nimport { RequiredPackageJSON, MarkRequired } from './_utils';\nimport type { PlugboyProject } from '../project';\nimport type { UserPluginOption, Plugin } from './plugin';\nimport type { BuildedHooks, UserHooks } from './hook';\nimport { DTSSettings, NormalizedDTSSettings } from './dts';\nimport { OptimizeCSSOptions } from './css';\nimport type { ExternalOption } from '../types';\nimport { type NoExternalOption } from './tsdown';\nimport { type CssOptions } from '@tsdown/css';\n\nexport const WORKSPACE_REQUIRED_FIELDS = ['name', 'version'] as const;\n\ntype WorkspaceRequiredField = (typeof WORKSPACE_REQUIRED_FIELDS)[number];\n\n/**\n * Entry setting object\n */\nexport interface RawWorkspaceEntryObject {\n /**\n * Entry file path\n * @remarks It must be relative to the root directory of the workspace.\n */\n src: string;\n /**\n * Set to true if the entry outputs css at the same time\n * @remarks By doing this, the exports field in package.json will be set automatically.\n */\n css?: boolean;\n}\n\n/**\n * Entry setting object\n */\nexport type WorkspaceEntry = MarkRequired<\n RawWorkspaceEntryObject,\n 'src' | 'css'\n>;\n\nexport type RawWorkspaceEntry = string | RawWorkspaceEntryObject;\n\n/**\n * Configuration of all entries in the workspace (normalized)\n *\n * @see {@link RawWorkspaceEntries}\n */\nexport type WorkspaceEntries = Record<string, WorkspaceEntry>;\n\n/**\n * Configuration of all entries in the workspace\n *\n * @remarks The configuration must be `{ [id]: [Entry setting: }`. `\".\" ` is treated as a special ID and is the target of the main export.\n */\nexport type RawWorkspaceEntries = Record<string, RawWorkspaceEntry>;\n\nexport const TSDOWN_SYNC_OPTIONS = [\n 'define',\n 'skipNodeModulesBundle',\n 'onSuccess',\n 'copy',\n 'deps',\n] as const satisfies (keyof TSDownConfig)[];\n\ntype TSDownSyncOption = (typeof TSDOWN_SYNC_OPTIONS)[number];\n\ninterface TSDownSyncOptions extends Pick<TSDownConfig, TSDownSyncOption> {}\n\n/**\n * Workspace User Configuration\n */\nexport interface UserWorkspaceConfig extends TSDownSyncOptions {\n /**\n * Ignore project settings\n *\n * @remarks Normally, when processing a workspace, plugboy looks for and merges the settings of the entire project at the same time, but this action can be canceled.\n */\n ignoreProjectConfig?: boolean;\n /**\n * Configuration of all entries in the workspace\n *\n * @see {@link RawWorkspaceEntries}\n */\n entries?: RawWorkspaceEntries;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link UserPluginOption}\n */\n plugins?: UserPluginOption[];\n /**\n * declaration output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n css?: CssOptions;\n /**\n * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @default true\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS?: OptimizeCSSOptions | boolean;\n}\n\n/**\n * Workspace Configuration\n */\nexport interface ResolvedWorkspaceConfig\n extends\n Required<\n Omit<\n UserWorkspaceConfig,\n | 'entries'\n | 'hooks'\n | 'plugins'\n | 'dts'\n | 'css'\n | 'optimizeCSS'\n | TSDownSyncOption\n >\n >,\n TSDownSyncOptions {\n /**\n * Configuration of all entries in the workspace\n *\n * @see {@link WorkspaceEntries}\n */\n entries: WorkspaceEntries;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link UserPluginOption}\n */\n plugins: Plugin[];\n /**\n * declaration output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n css?: CssOptions;\n /**\n * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS: OptimizeCSSOptions | false;\n}\n\nexport type WorkspacePackageJson = RequiredPackageJSON<WorkspaceRequiredField>;\n\n/**\n * Workspace Directory Settings\n */\nexport interface WorkspaceDirs {\n /** Path instance of the source directory */\n src: Path;\n /** Path instance of the distribution directory */\n dist: Path;\n}\n\n/**\n * Workspace Meta Information\n *\n * @remarks This will be set to a value uniquely extended by the plugin\n */\n\nexport interface WorkspaceMeta {}\n\n/**\n * Workspace setup context object\n * @remarks Objects that are configured when the workspace is set up. Customization can be done before the workspace instance is created by a plug-in or other process.\n */\nexport interface WorkspaceSetupContext {\n /** Workspace directory path instance */\n dir: Path;\n /** package.json */\n json: WorkspacePackageJson;\n /**\n * Workspace Configuration\n * @see {@link ResolvedWorkspaceConfig}\n */\n config: ResolvedWorkspaceConfig;\n /** Plugboy Project */\n project: PlugboyProject | null;\n /** Workspace Directory Settings */\n dirs: WorkspaceDirs;\n /**\n * All package names on which the workspace depends\n */\n dependencies: string[];\n /**\n * Names of all in-project packages on which the workspace depends\n */\n projectDependencies: string[];\n /**\n * Workspace Meta Information\n * @see {@link WorkspaceMeta}\n */\n meta: WorkspaceMeta;\n /**\n * Plugin list\n * @see {@link Plugin}\n */\n plugins: Plugin[];\n /**\n * Map of hook methods that can be initialized and called\n * @see {@link BuildedHooks}\n */\n hooks: BuildedHooks;\n /**\n * declaration output setting\n * @see {@link NormalizedDTSSettings}\n */\n dts: NormalizedDTSSettings;\n css?: CssOptions;\n /**\n * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS: OptimizeCSSOptions | false;\n // @TODO JSDoc\n mergeExternals(override: ExternalOption): void;\n // @TODO JSDoc\n mergeNoExternals(override: NoExternalOption): void;\n}\n","import type { CompilerOptions } from 'typescript';\nimport { RequiredPackageJSON } from './_utils';\nimport { WorkspacePackageJson } from './workspace';\nimport { UserPluginOption, Plugin } from './plugin';\nimport type { Path } from '../path';\nimport { UserHooks } from './hook';\nimport { DTSSettings } from './dts';\nimport { OptimizeCSSOptions } from './css';\n\nexport const PROJECT_REQUIRED_FIELDS = ['name'] as const;\n\ntype ProjectRequiredField = (typeof PROJECT_REQUIRED_FIELDS)[number];\n\nexport type TSConfigJSON = {\n compilerOptions?: CompilerOptions;\n} & Record<string, any>;\n\n/**\n * Template for package.json script in workspace\n */\nexport interface ProjectScriptsTemplate {\n /** Template Name */\n name: string;\n /** Script Map */\n scripts: Record<string, string>;\n}\n\n/**\n * Project User Configuration\n */\nexport interface UserProjectConfig {\n /**\n * Directory where the workspace is located\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n * @default packages\n */\n workspacesDir?: string;\n /**\n * Workspace script templates, or a list of them\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n scripts?: Record<string, string> | ProjectScriptsTemplate[];\n /**\n * Workspace tsconfig template\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n tsconfig?: TSConfigJSON;\n /**\n * Workspace README template\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n readme?: (json: WorkspacePackageJson) => string;\n /**\n * Fixes the version of all peer dependencies in the project\n */\n peerDependencies?: Record<string, string>;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link UserPluginOption}\n */\n plugins?: UserPluginOption[];\n /**\n * declaration output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n /**\n * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @default true\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS?: OptimizeCSSOptions | boolean;\n}\n\n/**\n * Project Configuration\n */\n\nexport interface ResolvedProjectConfig extends Required<\n Omit<\n UserProjectConfig,\n 'scripts' | 'tsconfig' | 'hooks' | 'plugins' | 'dts' | 'optimizeCSS'\n >\n> {\n /**\n * Workspace script templates list\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n scripts: ProjectScriptsTemplate[];\n /**\n * Workspace tsconfig template\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n tsconfig?: TSConfigJSON;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link Plugin}\n */\n plugins: Plugin[];\n /**\n * declaration output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n /**\n * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS: OptimizeCSSOptions | false;\n}\n\nexport type ProjectPackageJson = RequiredPackageJSON<ProjectRequiredField>;\n\n/**\n * Project setup context object\n * @remarks Objects that are configured when the project is set up.\n */\nexport interface ProjectSetupContext {\n /** Project directory path instance */\n dir: Path;\n /** package.json */\n json: ProjectPackageJson;\n /** Project Configuration */\n config: ResolvedProjectConfig;\n /**\n * List of directory names of workspaces located in the project\n * @remarks Note that it is the directory name, not the package name.\n */\n resolvedWorkspaces: string[];\n}\n","export function isPromise<T = any>(obj: any): obj is Promise<T> {\n return (\n !!obj &&\n (typeof obj === 'object' || typeof obj === 'function') &&\n typeof obj.then === 'function'\n );\n}\n\nexport type Listable<T> =\n | T\n | false\n | null\n | undefined\n | Listable<T>[]\n | Promise<T | false | null | undefined | Listable<T>[]>;\n\nexport async function resolveListable<T>(raw: Listable<T>): Promise<T[]> {\n const result: T[] = [];\n const list = Array.isArray(raw) ? raw : [raw];\n for (let row of list) {\n if (isPromise(row)) {\n row = await row;\n }\n if (!row) continue;\n if (Array.isArray(row)) {\n result.push(...(await resolveListable(row)));\n continue;\n }\n result.push(row);\n }\n return result;\n}\n","import {\n type ChunkAddon,\n type ChunkAddonObject,\n type ChunkAddonFunction,\n} from 'tsdown';\nimport type { NoExternalOption, ExternalOption } from '../types';\n\ntype ChunkAddonFunctionARGS = Parameters<ChunkAddonFunction>;\n\ntype MergeChunkAddonPosition = 'before' | 'after';\n\nconst _stringChunkToObject = (\n source: string | ChunkAddonObject,\n): ChunkAddonObject => {\n if (typeof source === 'object') return source;\n\n return {\n js: source,\n dts: source,\n css: source,\n } satisfies Required<ChunkAddonObject>;\n};\n\nconst _resolveChunkAddonToObject = (\n source: ChunkAddon,\n ...args: ChunkAddonFunctionARGS\n): ChunkAddonObject => {\n const tmp = typeof source === 'function' ? source(...args) || {} : source;\n return _stringChunkToObject(tmp);\n};\n\nconst _mergeChunkAddonObjects = (\n base: string | ChunkAddonObject,\n override: string | ChunkAddonObject,\n position: MergeChunkAddonPosition = 'after',\n): ChunkAddonObject => {\n const result = { ..._stringChunkToObject(base) };\n for (const [_key, value] of Object.entries(_stringChunkToObject(override))) {\n if (!value) continue;\n const key = _key as keyof ChunkAddonObject;\n const baseValue = result[key];\n const chunks = [value];\n if (baseValue) {\n if (position === 'before') {\n chunks.push(baseValue);\n } else {\n chunks.unshift(baseValue);\n }\n }\n result[key] = chunks.join('\\n\\n');\n }\n return result;\n};\n\nexport function mergeChunkAddons(\n base: ChunkAddon | undefined,\n override: ChunkAddon | undefined,\n position?: MergeChunkAddonPosition,\n): ChunkAddon | undefined {\n if (!override) return base;\n if (!base) return override;\n\n if (typeof base === 'function' || typeof override === 'function') {\n return (...args) => {\n const _base = _resolveChunkAddonToObject(base, ...args);\n const _override = _resolveChunkAddonToObject(override, ...args);\n return _mergeChunkAddonObjects(_base, _override, position);\n };\n }\n\n return _mergeChunkAddonObjects(base, override);\n}\n\ntype NullValue<T = void> = T | undefined | null | void;\n\nfunction isExternal(\n externalOption: ExternalOption,\n id: string,\n parentId: string | undefined,\n isResolved: boolean,\n): NullValue<boolean> {\n if (Array.isArray(externalOption)) {\n return externalOption.some((e) => isExternal(e, id, parentId, isResolved));\n }\n if (typeof externalOption === 'string') return id === externalOption;\n if (externalOption instanceof RegExp) return externalOption.test(id);\n if (typeof externalOption === 'function')\n return externalOption(id, parentId, isResolved);\n return false;\n}\n\nexport function mergeExternals(\n base: ExternalOption | undefined,\n override: ExternalOption | undefined,\n): ExternalOption | undefined {\n if (!override) return base;\n if (!base) return override;\n\n const externals = [base, override];\n\n return (id, parentId, isResolved) => {\n return externals.some((external) => {\n return isExternal(external, id, parentId, isResolved);\n });\n };\n}\n\nfunction isNoExternal(\n noExternalOption: NoExternalOption,\n id: string,\n importer: string | undefined,\n): NullValue<boolean> {\n if (Array.isArray(noExternalOption)) {\n return noExternalOption.some((e) => isNoExternal(e, id, importer));\n }\n if (typeof noExternalOption === 'string') return id === noExternalOption;\n if (noExternalOption instanceof RegExp) return noExternalOption.test(id);\n if (typeof noExternalOption === 'function')\n return noExternalOption(id, importer);\n return false;\n}\n\nexport function mergeNoExternals(\n base: NoExternalOption | undefined,\n override: NoExternalOption | undefined,\n): NoExternalOption | undefined {\n if (!override) return base;\n if (!base) return override;\n\n if (typeof base !== 'function' && typeof override !== 'function') {\n const _base = Array.isArray(base) ? base.slice() : [base];\n const _override = Array.isArray(override) ? override.slice() : [override];\n return [..._base, ..._override];\n }\n\n const noExternals = [base, override] as const;\n\n return (id, importer) => {\n return noExternals.some((spec) => {\n return isNoExternal(spec, id, importer);\n });\n };\n}\n","const EXIT_SIGNALS = ['SIGINT', 'SIGTERM', 'SIGHUP'] as const;\n\ntype ExitHandler = () => void;\n\nconst _callbacks: ExitHandler[] = [];\n\nexport function exitHook(cb: ExitHandler): () => void {\n _callbacks.push(cb);\n const off = () => {\n const index = _callbacks.indexOf(cb);\n if (index !== -1) {\n _callbacks.splice(index, 1);\n }\n };\n return off;\n}\n\nfor (const signal of EXIT_SIGNALS) {\n process.on(signal, async () => {\n const callbacks = _callbacks.slice();\n _callbacks.length = 0;\n try {\n await Promise.all(callbacks.map((cb) => cb()));\n process.exit(0);\n } catch (_err) {\n // eslint-disable-next-line no-console\n console.error(_err);\n process.exit(1);\n }\n });\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { exitHook } from './exit-hook';\n\nexport function getFilename(importMetaURL: string) {\n return fileURLToPath(importMetaURL);\n}\n\nexport function getDirname(importMetaURL: string) {\n return path.dirname(getFilename(importMetaURL));\n}\n\nconst FILE_NOT_FOUND_EXCEPTION_CODES = ['ENOTDIR', 'ENOENT'] as const;\n\nexport function isFileNotFoundException(\n source: unknown,\n): source is NodeJS.ErrnoException {\n return (\n !!source &&\n typeof source === 'object' &&\n FILE_NOT_FOUND_EXCEPTION_CODES.includes(\n (source as NodeJS.ErrnoException).code as any,\n )\n );\n}\n\nexport async function pathExists(\n target: string,\n type?: 'file' | 'dir',\n): Promise<boolean> {\n try {\n const stats = await fs.promises.stat(target);\n if (!type) return true;\n return type === 'file' ? stats.isFile() : stats.isDirectory();\n } catch (err) {\n if (isFileNotFoundException(err)) return false;\n throw err;\n }\n}\n\ntype FileMatcherFn = (\n file: fs.Dirent,\n dir: string,\n) => boolean | Promise<boolean>;\n\ntype FileMatcher = string | RegExp | FileMatcherFn;\n\nfunction normalizeFileMatcher(matcher: FileMatcher): FileMatcherFn {\n if (typeof matcher === 'function') {\n return matcher;\n }\n if (typeof matcher === 'string') {\n return (file) => file.name.includes(matcher);\n }\n return (file) => matcher.test(file.name);\n}\n\nexport async function findFile(\n dir: string,\n matcher: FileMatcher,\n recursive = true,\n): Promise<string | undefined> {\n const files = await fs.promises.readdir(dir, { withFileTypes: true });\n const _matcher = normalizeFileMatcher(matcher);\n\n const dirs: fs.Dirent[] | undefined = recursive ? [] : undefined;\n\n for (const file of files) {\n if (dirs && file.isDirectory()) {\n dirs.push(file);\n continue;\n }\n if (await _matcher(file, dir)) {\n return path.join(dir, file.name);\n }\n }\n\n if (dirs) {\n for (const subDir of dirs) {\n const hit = await findFile(\n path.join(dir, subDir.name),\n _matcher,\n recursive,\n );\n if (hit) return hit;\n }\n }\n}\n\nexport interface FindConfigResult {\n dir: string;\n fileName: string;\n path: string;\n code: string;\n}\n\ninterface FindConfigSettings<AllowMissing extends boolean | undefined> {\n fileName: string | string[];\n allowMissing?: AllowMissing;\n test?: (result: FindConfigResult) => boolean;\n /**\n * Trace up to how many directories above\n * @default 10\n */\n depth?: number;\n}\n\nconst FIND_CONFIG_OR_RE = /\\(.+?\\)/g;\n\nfunction parseFindConfigFileName(source: string): string[] {\n const matches = source.match(FIND_CONFIG_OR_RE);\n if (!matches) return [source];\n return matches\n .map((matched) => {\n const parts = matched.slice(1, matched.length - 1).split('|');\n return parts\n .map((part) => {\n const chunk = source.replace(matched, part);\n return parseFindConfigFileName(chunk);\n })\n .flat();\n })\n .flat();\n}\n\nfunction parseRawFindConfigFileName(source: string | string[]): string[] {\n return Array.isArray(source)\n ? source.map(parseFindConfigFileName).flat()\n : parseFindConfigFileName(source);\n}\n\nexport async function findConfig<\n AllowMissing extends boolean | undefined = false,\n>(\n fileNameOrSettings: string | string[] | FindConfigSettings<AllowMissing>,\n dir = process.cwd(),\n currentDepth = 0,\n): Promise<\n AllowMissing extends true ? FindConfigResult | null : FindConfigResult\n> {\n const settings: FindConfigSettings<AllowMissing> =\n typeof fileNameOrSettings === 'object' && !Array.isArray(fileNameOrSettings)\n ? fileNameOrSettings\n : { fileName: fileNameOrSettings };\n\n const { fileName, test, depth = 10, allowMissing } = settings;\n const fileNames = parseRawFindConfigFileName(fileName);\n if (depth && currentDepth === depth) {\n if (allowMissing) return null as any;\n throw new Error(\n `Failed to retrieve the \"${fileName}\" file because the maximum depth was reached.`,\n );\n }\n\n const next = (err?: unknown) => {\n const nextDir = path.dirname(dir);\n if (nextDir !== dir) {\n return findConfig(settings, nextDir, currentDepth + 1);\n }\n if (allowMissing) return null as any;\n throw err || new Error(`missing config \"${fileName}\"`);\n };\n\n const result = await (async () => {\n for (const fileName of fileNames) {\n try {\n const _path = path.join(dir, fileName);\n const code = await fs.promises.readFile(_path, 'utf-8');\n const _result: FindConfigResult = {\n fileName,\n dir,\n path: _path,\n code,\n };\n if (!test || test(_result)) {\n return _result;\n }\n } catch (err) {\n if (!isFileNotFoundException(err)) {\n throw err;\n }\n }\n }\n })();\n\n if (!result) {\n return next();\n }\n\n return result;\n}\n\nfunction _rmrf(_path: string): Promise<void> {\n return fs.promises\n .rm(_path, {\n recursive: true,\n force: true,\n })\n .catch((err) => {\n if (isFileNotFoundException(err)) return;\n throw err;\n });\n}\n\nexport async function rmrf(...paths: string[]): Promise<void> {\n await Promise.all(paths.map((_path) => _rmrf(_path)));\n}\n\nexport function copyDirSync(srcDir: string, destDir: string): void {\n if (!fs.existsSync(srcDir)) return;\n\n fs.mkdirSync(destDir, { recursive: true });\n for (const file of fs.readdirSync(srcDir)) {\n const srcFile = path.resolve(srcDir, file);\n if (srcFile === destDir) {\n continue;\n }\n const destFile = path.resolve(destDir, file);\n const stat = fs.statSync(srcFile);\n if (stat.isDirectory()) {\n copyDirSync(srcFile, destFile);\n } else {\n fs.copyFileSync(srcFile, destFile);\n }\n }\n}\n\nexport async function writeFileAtomic(filePath: string, content: string) {\n const tempFile = `${filePath}.${process.pid}.tmp`;\n const cleanup = () => {\n return fs.promises.unlink(tempFile).catch(() => {});\n };\n const off = exitHook(cleanup);\n try {\n await fs.promises.writeFile(tempFile, content);\n await fs.promises.rename(tempFile, filePath);\n off();\n } catch (error) {\n off();\n await cleanup();\n throw error;\n }\n}\n","import path from 'node:path';\nimport { glob } from 'glob';\nimport { RawWorkspaceEntryObject } from '../types';\n\nexport interface ExposeEntriesSettings {\n dir: string;\n /**\n * Path prefix at distribution\n */\n prefix?: string;\n}\n\nexport type RawExposeEntriesSettings = string | ExposeEntriesSettings;\n\nexport function resolveRawExposeEntriesSettings(\n rawSettings: RawExposeEntriesSettings,\n): ExposeEntriesSettings {\n return typeof rawSettings === 'string' ? { dir: rawSettings } : rawSettings;\n}\n\nconst TRIM_PATH_RE = /(^\\.?\\/|\\/$)/g;\nconst TRIM_EXT_RE = /\\.ts$/;\n\nexport async function exposeEntries(rawSettings: RawExposeEntriesSettings) {\n const { dir: _dir, prefix: _prefix } =\n resolveRawExposeEntriesSettings(rawSettings);\n const dir = path.resolve(_dir);\n const prefix = _prefix ? _prefix.replace(TRIM_PATH_RE, '') : '';\n const pattern = path.join(dir, '**/*.ts');\n const files = await glob(pattern);\n const entries: Record<string, RawWorkspaceEntryObject> = {};\n for (const file of files) {\n const id = (prefix + file.replace(dir, ''))\n .replace(TRIM_EXT_RE, '')\n .replace(TRIM_PATH_RE, '');\n entries[id] = {\n src: file,\n };\n }\n return entries;\n}\n","export const PROJECT_CONFIG_BASENAME = 'plugboy.project';\n\nexport const WORKSPACE_CONFIG_BASENAME = 'plugboy.workspace';\n\nexport const PACKAGE_JSON_FILENAME = 'package.json';\n\nexport const WORKSPACE_SPEC_PREFIX = 'workspace:';\n\nexport const SEARCH_BUNDLE_EXTENSIONS_MATCH = '(ts|mjs|js|json)';\n","import { PackageJson } from 'pkg-types';\nimport { bundleRequire } from 'bundle-require';\nimport {\n ProjectPackageJson,\n PROJECT_REQUIRED_FIELDS,\n UserProjectConfig,\n ResolvedProjectConfig,\n} from '../types';\nimport {\n PROJECT_CONFIG_BASENAME,\n SEARCH_BUNDLE_EXTENSIONS_MATCH,\n} from '../constants';\nimport { findConfig } from './file';\nimport { resolveUserPluginOption } from './plugin';\n\nexport function isProjectPackageJson(\n json: PackageJson,\n): json is ProjectPackageJson {\n return (\n !!json.private && PROJECT_REQUIRED_FIELDS.every((filed) => !!json[filed])\n );\n}\n\nexport async function resolveUserProjectConfig(\n userConfig: UserProjectConfig,\n): Promise<ResolvedProjectConfig> {\n const {\n workspacesDir = 'packages',\n scripts = [],\n peerDependencies = {},\n tsconfig,\n readme = (json) => `# ${json.name}\\n`,\n plugins,\n optimizeCSS = true,\n hooks,\n } = userConfig;\n return {\n workspacesDir,\n scripts: Array.isArray(scripts) ? scripts : [{ name: '', scripts }],\n peerDependencies,\n tsconfig,\n readme,\n plugins: await resolveUserPluginOption(plugins),\n optimizeCSS: optimizeCSS === true ? {} : optimizeCSS,\n hooks,\n };\n}\n\nexport function defineProjectConfig<Config extends UserProjectConfig>(\n config: Config,\n): Promise<ResolvedProjectConfig> {\n return resolveUserProjectConfig(config);\n}\n\nexport async function loadProjectConfig(\n searchDir?: string,\n depth?: number,\n): Promise<ResolvedProjectConfig> {\n const hit = await findConfig(\n {\n fileName: `${PROJECT_CONFIG_BASENAME}.${SEARCH_BUNDLE_EXTENSIONS_MATCH}`,\n depth,\n allowMissing: true,\n },\n searchDir,\n );\n\n const userConfig = hit\n ? (\n await bundleRequire<{\n default: UserProjectConfig | Promise<UserProjectConfig>;\n }>({\n filepath: hit.path,\n })\n ).mod.default\n : ({} as UserProjectConfig);\n\n return resolveUserProjectConfig(await userConfig);\n}\n","import { UserPluginOption, Plugin } from '../types';\nimport { loadProjectConfig } from './project';\n\nexport async function resolveUserPluginOption(\n pluginOption: UserPluginOption | undefined,\n): Promise<Plugin[]> {\n if (!pluginOption) return [];\n\n const awaited = await pluginOption;\n if (!awaited) return [];\n\n if (Array.isArray(pluginOption)) {\n return (\n await Promise.all(\n pluginOption.map((o) => resolveUserPluginOption(o)).flat(),\n )\n ).flat();\n }\n return [awaited as Plugin];\n}\n\nexport function definePlugin<T extends Plugin>(options: T): T {\n return options;\n}\n\nexport async function extractProjectPlugins(\n searchDir?: string,\n): Promise<Plugin[]> {\n const config = await loadProjectConfig(searchDir);\n return config ? config.plugins : [];\n}\n\nexport async function findProjectPlugin<T extends Plugin = Plugin>(\n pluginName: string,\n searchDir?: string,\n): Promise<T | undefined> {\n const plugins = await extractProjectPlugins(searchDir);\n return plugins.find((plugin) => plugin.name === pluginName) as T | undefined;\n}\n","import { PackageJson } from 'pkg-types';\nimport { bundleRequire } from 'bundle-require';\nimport {\n WorkspacePackageJson,\n WORKSPACE_REQUIRED_FIELDS,\n UserWorkspaceConfig,\n ResolvedWorkspaceConfig,\n RawWorkspaceEntryObject,\n RawWorkspaceEntry,\n WorkspaceEntry,\n RawWorkspaceEntries,\n WorkspaceEntries,\n} from '../types';\nimport { findConfig } from './file';\nimport {\n WORKSPACE_CONFIG_BASENAME,\n SEARCH_BUNDLE_EXTENSIONS_MATCH,\n} from '../constants';\nimport { resolveUserPluginOption } from './plugin';\n\nexport function isWorkspacePackageJson(\n json: PackageJson,\n): json is WorkspacePackageJson {\n return (\n !json.private && WORKSPACE_REQUIRED_FIELDS.every((filed) => !!json[filed])\n );\n}\n\nexport function resolveRawWorkspaceEntry(\n entry: RawWorkspaceEntry,\n): WorkspaceEntry {\n const { src, css }: RawWorkspaceEntryObject =\n typeof entry === 'string' ? { src: entry } : entry;\n return {\n src,\n css: css || src.endsWith('.css') || src.endsWith('.scss'),\n };\n}\n\nexport function resolveRawWorkspaceEntries(\n entries: RawWorkspaceEntries | undefined,\n): WorkspaceEntries {\n if (!entries) return {};\n return Object.fromEntries(\n Object.entries(entries).map(([name, raw]) => [\n name,\n resolveRawWorkspaceEntry(raw),\n ]),\n );\n}\n\nexport async function resolveUserWorkspaceConfig(\n userConfig: UserWorkspaceConfig,\n): Promise<ResolvedWorkspaceConfig> {\n const {\n ignoreProjectConfig = false,\n entries,\n plugins,\n optimizeCSS = true,\n hooks,\n } = userConfig;\n return {\n ...userConfig,\n ignoreProjectConfig,\n entries: resolveRawWorkspaceEntries(entries),\n plugins: await resolveUserPluginOption(plugins),\n optimizeCSS: optimizeCSS === true ? {} : optimizeCSS,\n hooks,\n };\n}\n\nexport function defineWorkspaceConfig<Config extends UserWorkspaceConfig>(\n config: Config,\n): Promise<ResolvedWorkspaceConfig> {\n return resolveUserWorkspaceConfig(config);\n}\n\nexport async function loadWorkspaceConfig(\n searchDir?: string,\n depth?: number,\n): Promise<ResolvedWorkspaceConfig> {\n const hit = await findConfig(\n {\n fileName: `${WORKSPACE_CONFIG_BASENAME}.${SEARCH_BUNDLE_EXTENSIONS_MATCH}`,\n depth,\n allowMissing: true,\n },\n searchDir,\n );\n\n const userConfig = hit\n ? (\n await bundleRequire<{\n default: UserWorkspaceConfig | Promise<UserWorkspaceConfig>;\n }>({\n filepath: hit.path,\n })\n ).mod.default\n : ({} as UserWorkspaceConfig);\n\n return resolveUserWorkspaceConfig(await userConfig);\n}\n","import {\n UserHooks,\n ResolvedHooks,\n BuildedHooks,\n createHooksDefaults,\n} from '../types';\nimport { resolveListable } from './general';\n\nexport async function resolveUserHooks(\n ...userHooks: (UserHooks | undefined | null | false)[]\n): Promise<ResolvedHooks> {\n const hooks = createHooksDefaults();\n if (!userHooks) return hooks;\n for (const userHook of userHooks) {\n if (!userHook) continue;\n for (const [hookName, _hooks] of Object.entries(userHook)) {\n if (hooks) {\n (hooks as any)[hookName].push(...(await resolveListable(_hooks)));\n }\n }\n }\n return hooks;\n}\n\nexport function buildHooks(resolvedHooks: ResolvedHooks): BuildedHooks {\n const hooks: any = {};\n Object.entries(resolvedHooks).forEach(([hookName, fns]) => {\n hooks[hookName] = async (...args: any[]): Promise<any> => {\n const results: any[] = [];\n for (const fn of fns) {\n results.push(await (fn as any)(...args));\n }\n return results;\n };\n });\n return hooks;\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport { isFileNotFoundException } from './utils';\n\nexport class Path {\n private _value: string;\n\n private _stats?: fs.Stats;\n\n get value() {\n return this._value;\n }\n\n set value(value) {\n const _value = path.resolve(value);\n if (_value === this._value) return;\n this._value = path.resolve(value);\n delete this._stats;\n }\n\n get dirname() {\n return path.dirname(this.value);\n }\n\n get basename() {\n return path.basename(this.value);\n }\n\n get extname() {\n return path.extname(this.value);\n }\n\n get stats() {\n let { _stats } = this;\n if (!_stats) {\n _stats = fs.statSync(this.value);\n this._stats = _stats;\n }\n return _stats;\n }\n\n get isDirectory() {\n return this.stats.isDirectory;\n }\n\n get isFile() {\n return this.stats.isFile;\n }\n\n constructor(value: string) {\n this._value = path.resolve(value);\n }\n\n toString() {\n return this.value;\n }\n\n valueOf() {\n return this.value;\n }\n\n toJSON() {\n return this.value;\n }\n\n relative(to: string) {\n return new Path(path.relative(this.value, to));\n }\n\n join(...paths: string[]) {\n return new Path(path.join(this.value, ...paths));\n }\n\n resolve(...paths: string[]) {\n return new Path(path.resolve(this.value, ...paths));\n }\n\n private _join(...paths: (string | undefined)[]) {\n const _paths = paths.filter((_path): _path is string => !!_path);\n return _paths.length ? path.join(this.value, ..._paths) : this.value;\n }\n\n async readdir(...paths: string[]): Promise<Path[]> {\n const dir = this._join(...paths);\n const files = await fs.promises.readdir(dir);\n return files.map((file) => new Path(path.join(dir, file)));\n }\n\n readFile<D = undefined>(\n pathAppend?: string,\n defaults?: D,\n ): Promise<D extends undefined ? string : string | D> {\n return new Promise<any>((resolve, reject) => {\n fs.readFile(this._join(pathAppend), 'utf-8', (err, data) => {\n if (err) {\n if (defaults !== undefined && isFileNotFoundException(err)) {\n return resolve(defaults);\n }\n return reject(err);\n }\n resolve(data);\n });\n });\n }\n\n async readJSON<T = any, D = undefined>(\n pathAppend?: string,\n defaults?: D,\n ): Promise<D extends undefined ? T : T | D> {\n try {\n const file = await this.readFile(pathAppend);\n return JSON.parse(file);\n } catch (err) {\n if (defaults === undefined) {\n throw err;\n }\n return defaults as any;\n }\n }\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { ProjectPackageJson, WorkspacePackageJson } from './types';\nimport {\n findConfig,\n isProjectPackageJson,\n isWorkspacePackageJson,\n} from './utils';\nimport { PACKAGE_JSON_FILENAME } from './constants';\nimport { Path } from './path';\n\nexport interface GetProjectPackageJsonResult {\n dir: Path;\n json: ProjectPackageJson;\n}\n\nexport async function getProjectPackageJson<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n): Promise<\n AllowMissing extends true\n ? GetProjectPackageJsonResult | null\n : GetProjectPackageJsonResult\n> {\n const hit = await findConfig(\n {\n fileName: PACKAGE_JSON_FILENAME,\n allowMissing,\n test: (result) => isProjectPackageJson(JSON.parse(result.code)),\n },\n searchDir,\n );\n if (!hit) {\n if (allowMissing) return null as any;\n throw new Error('missing project package.');\n }\n return {\n dir: new Path(hit.dir),\n json: JSON.parse(hit.code),\n } as any;\n}\n\nexport interface GetWorkspacePackageJsonResult {\n dir: Path;\n json: WorkspacePackageJson;\n}\n\nexport async function getWorkspacePackageJson<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n): Promise<\n AllowMissing extends true\n ? GetWorkspacePackageJsonResult | null\n : GetWorkspacePackageJsonResult\n> {\n const hit = await findConfig(\n {\n fileName: PACKAGE_JSON_FILENAME,\n allowMissing,\n test: (result) => isWorkspacePackageJson(JSON.parse(result.code)),\n },\n searchDir,\n );\n if (!hit) {\n if (allowMissing) return null as any;\n throw new Error('missing workspace package.');\n }\n return {\n dir: new Path(hit.dir),\n json: JSON.parse(hit.code),\n } as any;\n}\n\nexport async function findWorkspacePackages(\n dir: string,\n): Promise<GetWorkspacePackageJsonResult[]> {\n const results: GetWorkspacePackageJsonResult[] = [];\n const searchDir = path.resolve(dir);\n const dirs = await fs.readdir(searchDir);\n const pkgs = await Promise.all(\n dirs.map((dirName) =>\n getWorkspacePackageJson(path.join(searchDir, dirName), true),\n ),\n );\n pkgs.forEach((pkg) => {\n pkg && results.push(pkg);\n });\n return results;\n}\n","import { execa } from 'execa';\nimport path from 'node:path';\nimport type { DTSCompilerOption, EmitDTSOptions } from '../types/dts';\nimport type { PlugboyWorkspace } from './workspace';\n\nexport interface EmitDTSFullOptions extends EmitDTSOptions {\n workspace: PlugboyWorkspace;\n compiler?: DTSCompilerOption;\n ignoreCompilerErrors?: boolean;\n}\n// export interface EmitDTSOptions {\n// cwd?: string;\n// outDir?: string;\n// }\n\nexport async function runTsc(\n compiler: 'tsc' | 'vue-tsc',\n opts: EmitDTSOptions = {},\n ignoreErrors?: boolean,\n) {\n const { cwd = process.cwd(), outDir = path.join(cwd, 'dist/dts') } = opts;\n\n try {\n await execa(\n compiler,\n [\n '--declaration true',\n '--skipLibCheck',\n '--noEmit false',\n '--emitDeclarationOnly',\n `--outDir ${outDir}`,\n ],\n { cwd, shell: true, stdio: 'inherit' },\n );\n } catch (e) {\n if (!ignoreErrors) throw e;\n // eslint-disable-next-line no-console\n console.log(\n `Note: ${compiler} reported errors, but continuing with generated files...`,\n );\n }\n}\n\n/**\n * Emit DTS (declaration files)\n */\nexport async function emitDTS(opts: EmitDTSFullOptions) {\n const {\n compiler = 'tsc',\n ignoreCompilerErrors = false,\n workspace,\n ...baseOpts\n } = opts;\n\n if (typeof compiler === 'function') {\n // Custom compiler function\n await compiler({ ...baseOpts, workspace });\n } else {\n await runTsc(compiler, { ...baseOpts }, ignoreCompilerErrors);\n }\n}\n","import type { PlugboyEnvVarName } from './types';\n\n// Values starting with \"#\" have the \"#\" stripped and are transformed so that\n// references like import.meta.env are not removed by rolldown during bundling.\nexport const PLUGBOY_VAR_ENVS_FOR_BUNDLE: Record<PlugboyEnvVarName, string> = {\n __PLUGBOY_STUB__: 'false',\n __PLUGBOY_DEV__: `#(typeof process !== 'undefined' && process.env?.NODE_ENV === 'development') || (typeof import.meta !== 'undefined' && import.meta.env?.DEV === true)`,\n};\n\nexport const PLUGBOY_VAR_ENVS_FOR_STUB: Record<PlugboyEnvVarName, string> = {\n __PLUGBOY_STUB__: 'true',\n __PLUGBOY_DEV__: 'true',\n};\n","import { type InlineConfig } from 'tsdown';\nimport {\n PLUGBOY_VAR_ENVS_FOR_BUNDLE,\n PLUGBOY_VAR_ENVS_FOR_STUB,\n} from './constants';\n\nexport function applyPlugboyEnvs(\n config: Pick<InlineConfig, 'define' | 'banner'>,\n) {\n const DEFINE_VAR_INJECTS = Object.fromEntries(\n Object.entries(PLUGBOY_VAR_ENVS_FOR_BUNDLE).map(([envName, value]) => {\n const _value = value.startsWith('#') ? `$$${envName}` : value;\n return [envName, _value];\n }),\n );\n\n config.define = {\n ...config.define,\n ...DEFINE_VAR_INJECTS,\n };\n}\n\nexport function getPlugboyEnvCodeForStub() {\n return Object.entries(PLUGBOY_VAR_ENVS_FOR_STUB)\n .map(([envName, variable]) => `globalThis.${envName} = ${variable};`)\n .join('\\n');\n}\n","import type { PlugboyWorkspace } from '../workspace';\nimport type { Plugin } from '../types';\nimport { parse } from 'acorn';\nimport { PLUGBOY_VAR_ENVS_FOR_BUNDLE } from './constants';\n\nfunction findAfterImports(code: string): number {\n const ast = parse(code, {\n sourceType: 'module',\n ecmaVersion: 'latest',\n }) as any;\n\n let end = 0;\n\n for (const node of ast.body) {\n if (\n node.type === 'ImportDeclaration' ||\n node.type === 'ExportNamedDeclaration' ||\n node.type === 'ExportAllDeclaration' ||\n node.type === 'ExportDefaultDeclaration'\n ) {\n end = Math.max(end, node.end);\n continue;\n }\n break;\n }\n\n return end;\n}\n\nconst _replacements: [envName: string, value: string][] = [];\n\nObject.entries(PLUGBOY_VAR_ENVS_FOR_BUNDLE).forEach(([envName, value]) => {\n if (value.startsWith('#')) {\n _replacements.push([`$$${envName}`, value.substring(1)]);\n }\n});\n\nexport function WorkspaceEnvPlugin(_workspace: PlugboyWorkspace): Plugin {\n return {\n name: 'plugboy-workspace-env',\n async renderChunk(code, _chunk) {\n const injects = _replacements.filter(([envName]) =>\n code.includes(envName),\n );\n\n if (injects.length) {\n const MagicString = (await import('magic-string')).default;\n const ms = new MagicString(code);\n\n const insertPos = findAfterImports(code);\n const injectCode = injects\n .map(([eventName, value]) => `const ${eventName} = ${value};`)\n .join('\\n');\n ms.appendLeft(insertPos, `\\n${injectCode}`);\n\n return {\n code: ms.toString(),\n map: ms.generateMap({ hires: true }),\n };\n }\n },\n };\n}\n","import { type InlineConfig, build } from 'tsdown';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { glob } from 'glob';\nimport type { PlugboyWorkspace, WorkspaceObjectExport } from './workspace';\nimport {\n TSDOWN_SYNC_OPTIONS,\n NormalizedDTSPreserveTypeSettings,\n} from '../types';\nimport { copyDirSync, rmrf, mergeExternals } from '../utils';\nimport { emitDTS } from './dts';\nimport { applyPlugboyEnvs, getPlugboyEnvCodeForStub } from '../env';\n\nconst SHEBANG_MATCH_RE = /^(#!.+?)\\n/;\n\ninterface ResolvedOptions extends InlineConfig {}\n\nexport class Builder {\n readonly workspace: PlugboyWorkspace;\n\n private _tsdownOptions?: ResolvedOptions;\n\n get entry() {\n return this.workspace.entry;\n }\n\n get dts() {\n return this.workspace.dts;\n }\n\n constructor(workspace: PlugboyWorkspace) {\n this.workspace = workspace;\n }\n\n async tsdownOptions(overrides?: {\n watch?: boolean;\n }): Promise<ResolvedOptions> {\n const { _tsdownOptions } = this;\n if (_tsdownOptions) return _tsdownOptions;\n\n const { entry, dts } = this;\n\n const resolvedOptions: ResolvedOptions = {\n dts:\n dts.inline || typeof dts.compiler === 'function'\n ? false\n : dts.compiler === 'vue-tsc'\n ? { vue: true }\n : true,\n treeshake: true,\n css: this.workspace.cssOptions,\n plugins: this.workspace.plugins,\n entry,\n sourcemap: true,\n clean: true,\n ...overrides,\n };\n\n for (const opt of TSDOWN_SYNC_OPTIONS) {\n resolvedOptions[opt] = this.workspace.config[opt] as any;\n }\n\n applyPlugboyEnvs(resolvedOptions);\n\n resolvedOptions.deps ??= {};\n resolvedOptions.deps.neverBundle = mergeExternals(\n resolvedOptions.deps.neverBundle,\n [\n /^(@fastkit\\/)?plugboy(?!\\/runtime-utils)/,\n ...this.workspace.dependencies,\n ],\n );\n\n this._tsdownOptions = resolvedOptions;\n\n return resolvedOptions;\n }\n\n private async _stubLinkJS(from: string, to: string) {\n const fromParsed = path.parse(from);\n const fromDir = fromParsed.dir;\n const toParsed = path.parse(to);\n const toRelativeDir = path.relative(fromDir, toParsed.dir);\n const location = path.join(toRelativeDir, toParsed.base);\n const source = await fs.readFile(to, 'utf-8');\n const shebang = source.match(SHEBANG_MATCH_RE)?.[1];\n const disableChecks = '/* eslint-disable */\\n// @ts-nocheck\\n';\n const code = `${disableChecks}${getPlugboyEnvCodeForStub()}\\nexport * from '${location}';`;\n const dtsPath = path.join(fromDir, `${fromParsed.name}.d.mts`);\n const dtsCode = `${disableChecks}export * from '${location.replace(\n /\\.ts$/,\n '',\n )}';`;\n const srcFromDir = path.dirname(from);\n const dtsDir = path.dirname(dtsPath);\n await Promise.all(\n [srcFromDir, dtsDir].map((dir) => fs.mkdir(dir, { recursive: true })),\n );\n await Promise.all([\n fs.writeFile(from, `${shebang ? `${shebang}\\n` : ''}${code}`),\n fs.writeFile(dtsPath, dtsCode),\n ]);\n }\n\n private async _stubLinkCSS(from: string) {\n const code = `/* noop */`;\n await fs.writeFile(from, code);\n }\n\n async copyPublicDir() {\n const publicDir = this.workspace.dir.join('public').value;\n await copyDirSync(publicDir, this.workspace.dirs.dist.value);\n }\n\n async stub() {\n const links = this.workspace.getStubLinks();\n await this.copyPublicDir();\n await Promise.all(\n links.map((link) => {\n if (link.type === 'js') {\n return this._stubLinkJS(link.from, link.to);\n }\n if (link.type === 'css') {\n return this._stubLinkCSS(link.from);\n }\n throw new Error(`non supported type`);\n }),\n );\n await fs.writeFile(\n this.workspace.dirs.dist.join('.stub').value,\n '',\n 'utf-8',\n );\n }\n\n normalizeDTSBySettings(\n dts: string,\n settings: NormalizedDTSPreserveTypeSettings,\n ): string | undefined {\n const { targets, pkg } = settings;\n const myPackageName = this.workspace.json.name;\n const packageIsOwn = myPackageName === pkg;\n const pkgImports = (() => {\n if (!pkg || packageIsOwn) return;\n\n const importRe = new RegExp(`import {([^\\\\{\\\\}]+)} from '${pkg}'`);\n const importMatched = dts.match(importRe);\n const imports = importMatched && importMatched[1];\n if (!imports) return;\n\n return {\n pkg,\n importRe,\n imports,\n };\n })();\n\n const hitTypeNames: string[] = [];\n targets.forEach(({ from, typeName }) => {\n const matched = dts.match(from);\n if (matched) {\n hitTypeNames.push(typeName);\n dts = dts.replace(from, typeName);\n }\n });\n\n if (!hitTypeNames.length) return;\n\n if (pkgImports) {\n const { pkg, imports, importRe } = pkgImports;\n const mods = imports\n .trim()\n .split(',')\n .map((row) => {\n row = row.split(' as ')[0].trim();\n return row;\n });\n const appends: string[] = [];\n hitTypeNames.forEach((typeName) => {\n const re = new RegExp(`(^|\\n)import { ${typeName} } from '${pkg}'`);\n if (!re.test(dts) && !mods.includes(typeName)) {\n appends.push(typeName);\n }\n });\n if (appends.length) {\n dts = dts.replace(\n importRe,\n `import { $1, ${appends.join(', ')} } from '${pkg}'`,\n );\n }\n } else if (pkg && !packageIsOwn) {\n const mods: string[] = [];\n hitTypeNames.forEach((typeName) => {\n if (!dts.includes(`export declare type ${typeName} = `)) {\n mods.push(typeName);\n }\n });\n if (mods.length) {\n dts = `import { ${mods.join(', ')} } from '${pkg}';\\n${dts}`;\n }\n }\n return dts;\n }\n\n async normalizeDTSFile(filePath: string) {\n const dts = await fs.readFile(filePath, 'utf-8');\n const { preserveType, normalizers } = this.dts;\n let normalized = dts;\n let processed = false;\n for (const settings of preserveType) {\n const _normalized = this.normalizeDTSBySettings(normalized, settings);\n if (_normalized) {\n processed = true;\n normalized = _normalized;\n }\n }\n for (const normalizer of normalizers) {\n const _normalized = await normalizer(normalized, this);\n if (_normalized && normalized !== _normalized) {\n processed = true;\n normalized = _normalized;\n }\n }\n if (!processed) {\n return;\n }\n await fs.writeFile(filePath, normalized, 'utf-8');\n }\n\n async normalizeDTSFiles(dtsFiles: string[] = this.workspace.dtsFiles) {\n const { preserveType } = this.dts;\n if (!preserveType.length || !dtsFiles.length) return;\n\n await Promise.all(\n dtsFiles.map((filePath) => this.normalizeDTSFile(filePath)),\n );\n }\n\n async emitDTSManually() {\n const { dir, dirs, exports } = this.workspace;\n const cwd = dir.value;\n const outDir = dirs.dist.join('.dts-generate').value;\n const dtsSrcDir = path.join(outDir, 'src');\n const dtsDest = dirs.dist.join('.dts').value;\n\n await emitDTS({\n cwd,\n outDir,\n workspace: this.workspace,\n compiler: this.workspace.dts.compiler,\n ignoreCompilerErrors: this.workspace.dts.ignoreCompilerErrors,\n });\n\n await fs.rename(dtsSrcDir, dtsDest);\n await rmrf(outDir);\n\n const objectExports: WorkspaceObjectExport[] = [];\n\n exports.forEach(({ at }) => {\n typeof at === 'object' && objectExports.push(at);\n });\n\n await Promise.all(\n objectExports.map(async (at) => {\n const typesDir = path.dirname(at.types);\n const dtsDestDir = path.dirname(at.dtsDest);\n const relativeDir = path.relative(typesDir, dtsDestDir);\n const relativePath = path.join(\n relativeDir,\n path.basename(at.dtsDest).replace(/\\.d\\.m?ts$/, ''),\n );\n const code = `export * from './${relativePath}';`;\n await fs.writeFile(at.types, code, 'utf-8');\n }),\n );\n\n const dtsFiles = await glob(path.join(dtsDest, '**/*.{d.ts,d.mts}'));\n await this.normalizeDTSFiles(dtsFiles);\n }\n\n async build() {\n const options = await this.tsdownOptions();\n await build(options);\n\n if (this.dts.inline || typeof this.dts.compiler === 'function') {\n await this.emitDTSManually();\n } else {\n await this.normalizeDTSFiles();\n }\n }\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { glob } from 'glob';\nimport { Path } from '../path';\nimport {\n ProjectSetupContext,\n ProjectPackageJson,\n ResolvedProjectConfig,\n UserHooks,\n} from '../types';\nimport { getProjectPackageJson } from '../package';\nimport {\n isWorkspacePackageJson,\n loadProjectConfig,\n resolveUserProjectConfig,\n} from '../utils';\nimport { PACKAGE_JSON_FILENAME } from '../constants';\n\n/**\n * Plugboy Project\n *\n * @remarks This instance is only created if the project consists of a mono-repo.\n */\nexport class PlugboyProject {\n /** Path instance of the project directory */\n readonly dir: Path;\n\n /** package.json */\n readonly json: ProjectPackageJson;\n\n /**\n * Project Configuration\n * @see {@link ResolvedProjectConfig}\n */\n readonly config: ResolvedProjectConfig;\n\n /** Names of all packages on which the project depends */\n readonly dependencies: string[];\n\n /** Directory names of all workspaces owned by the project */\n readonly resolvedWorkspaces: string[];\n\n /**\n * Name of the project's package.json\n */\n get name() {\n return this.json.name;\n }\n\n /**\n * Plug-in List\n * @see {@link ResolvedProjectConfig.plugins}\n */\n get plugins() {\n return this.config.plugins;\n }\n\n /**\n * List of all user hook settings\n * @see {@link UserHooks}\n */\n get hooks(): UserHooks[] {\n const { hooks: _hooks, plugins } = this.config;\n const pluginHooks = plugins.map((plugin) => plugin.hooks);\n return [_hooks, ...pluginHooks].filter((hook) => !!hook);\n }\n\n constructor(ctx: ProjectSetupContext) {\n const { dir, json, config, resolvedWorkspaces } = ctx;\n\n this.dir = dir;\n this.json = json;\n this.config = config;\n\n const allDeps = {\n ...json.dependencies,\n ...json.devDependencies,\n };\n\n this.dependencies = Object.keys(allDeps);\n this.resolvedWorkspaces = resolvedWorkspaces;\n }\n}\n\nexport async function getProject<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n skipLoadConfig?: boolean,\n): Promise<AllowMissing extends true ? PlugboyProject | null : PlugboyProject> {\n const hit = await getProjectPackageJson(searchDir, allowMissing);\n if (!hit) {\n return null as any;\n }\n const { dir, json } = hit;\n const resolvedWorkspaces: string[] = [];\n const { workspaces = [] } = json;\n if (!Array.isArray(workspaces)) {\n throw new Error('workspaces only supports arrays.');\n }\n const workspacesPattern = workspaces.map(\n (workspace) => dir.join(workspace, PACKAGE_JSON_FILENAME).value,\n );\n const workspaceHits = await glob(workspacesPattern);\n for (const _hit of workspaceHits) {\n const _json = JSON.parse(await fs.readFile(_hit, 'utf-8'));\n if (!isWorkspacePackageJson(_json)) {\n continue;\n }\n resolvedWorkspaces.push(path.dirname(_hit));\n }\n resolvedWorkspaces.sort((a, b) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n });\n\n const config = skipLoadConfig\n ? await resolveUserProjectConfig({})\n : await loadProjectConfig(dir.value, 0);\n\n const ctx: ProjectSetupContext = {\n dir,\n json,\n config,\n resolvedWorkspaces,\n };\n\n return new PlugboyProject(ctx);\n}\n","import type { PlugboyWorkspace } from '../workspace';\nimport type { Plugin, ResolvedOptimizeCSSOptions } from '../types';\nimport type { Processor, AcceptedPlugin as PostcssPlugin } from 'postcss';\nimport type { RolldownChunk } from 'tsdown';\n\n/**\n * The rolldown `OutputAsset` type.\n *\n * tsdown no longer re-exports rolldown's `OutputAsset` directly, and rolldown\n * itself is not a direct dependency. We therefore derive it from the only\n * rolldown-output type tsdown still exposes (`RolldownChunk`), which is\n * `(OutputChunk | OutputAsset) & { outDir: string }`.\n *\n * - `Extract<..., { type: 'asset' }>` picks the asset variant via its discriminant.\n * - `Omit<..., 'outDir'>` drops the tsdown-specific augmentation so the type\n * matches the plain assets handed to rolldown's `generateBundle` hook.\n */\ntype OutputAsset = Omit<Extract<RolldownChunk, { type: 'asset' }>, 'outDir'>;\n\nasync function getPostcss(\n options: ResolvedOptimizeCSSOptions,\n): Promise<Processor> {\n const { layer, media, combineRules, cssnano } = options;\n const [postcss, _layer, _media, _combineRules, _cssnano] = await Promise.all([\n import('postcss').then((mod) => mod.default),\n layer &&\n import('../postcss/plugins/optimize-layer').then((mod) =>\n mod.OptimizeLayer(layer),\n ),\n media &&\n import('../postcss/plugins/optimize-media').then((mod) =>\n mod.OptimizeMedia(media),\n ),\n combineRules &&\n import('../postcss/plugins/combine-rules').then((mod) =>\n mod.CombineRules(combineRules),\n ),\n cssnano && import('cssnano').then((mod) => mod.default(cssnano)),\n ]);\n const plugins: PostcssPlugin[] = [];\n _layer && plugins.push(_layer);\n _media && plugins.push(_media);\n _combineRules && plugins.push(_combineRules);\n _cssnano && plugins.push(_cssnano);\n\n return postcss(plugins);\n}\n\nconst SOURCE_MAPPING_URL_COMMENT_RE = /\\/\\*# sourceMappingURL=.+? \\*\\//g;\nconst allLayerDefRe = /(^|\\n)@layer\\s+([a-zA-Z\\d\\-_$. ,]+);/g;\nconst layerDefTrimRe = /((^|\\n)@layer\\s+|;)/g;\n\nasync function optimizeCSS(\n asset: OutputAsset,\n options: ResolvedOptimizeCSSOptions,\n) {\n const postcss = await getPostcss(options);\n // let postcss = this._postcssCache;\n // if (!postcss) {\n // postcss = await getPostcss(options);\n // this._postcssCache = postcss;\n // }\n\n function prepare(css: string): string {\n const layerDefs = (() => {\n const matched = css.match(allLayerDefRe);\n if (!matched) return '';\n const layerNames: string[] = [];\n matched.forEach((row) => {\n const trimmed = row.replace(layerDefTrimRe, '');\n const chunks = trimmed.split(',');\n chunks.forEach((chunk) => layerNames.push(chunk.trim()));\n });\n const uniqued = Array.from(new Set(layerNames));\n const def = `@layer ${uniqued.join(', ')};\\n`;\n return def;\n })();\n return layerDefs + css.replace(allLayerDefRe, '');\n }\n\n const css = prepare(asset.source.toString());\n\n const result = await postcss.process(css, {\n from: asset.fileName,\n to: asset.fileName,\n map: { inline: false },\n });\n\n asset.source = result.css.replace(SOURCE_MAPPING_URL_COMMENT_RE, '');\n}\n\nexport function OptimizeCSSPlugin(workspace: PlugboyWorkspace): Plugin {\n return {\n name: 'plugboy-optimize-css',\n async generateBundle(_options, bundle) {\n const { optimizeCSSOptions } = workspace;\n if (!optimizeCSSOptions) return;\n\n for (const chunk of Object.values(bundle)) {\n if (chunk.type !== 'asset' || !chunk.fileName.endsWith('.css')) {\n continue;\n }\n await optimizeCSS(chunk, optimizeCSSOptions);\n }\n },\n };\n}\n","import { Plugin } from '../../types';\nimport fs from 'node:fs/promises';\n\nexport const rawLoaderPlugin: Plugin = {\n name: 'raw-loader',\n async resolveId(id, importer, options) {\n if (!id.endsWith('?raw')) return null;\n\n const rawPath = id.slice(0, -4); // remove '?raw'\n\n // Resolve a relative path to an absolute path\n const resolved = await this.resolve(rawPath, importer, {\n ...options,\n skipSelf: true,\n });\n\n if (!resolved) return null;\n\n // Return the resolved absolute path with a marker\n return `\\0raw:${resolved.id}`;\n },\n\n async load(id) {\n if (!id.startsWith('\\0raw:')) return null;\n\n const realPath = id.slice(5); // remove '\\0raw:'\n const content = await fs.readFile(realPath, 'utf-8');\n return `export default ${JSON.stringify(content)};`;\n },\n};\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { definePlugin } from '../../utils';\n\n/**\n * Plugin to preserve external CSS `@import` statements.\n *\n * rolldown / tsdown's CSS pipeline (lightningcss) resolves and inlines every\n * `@import` it can. For bare package specifiers (e.g.\n * `@import url('material-symbols/rounded.css') layer(...)`) that is wrong for a\n * library build: it bloats the output and rebases the imported package's own\n * relative asset URLs (fonts) against our `dist`, breaking them. Such imports\n * should stay external so the consumer's bundler resolves them.\n *\n * We can't intercept this in a `transform` hook — by then tsdown has already\n * inlined the imports. Instead we strip them in `load` (which runs before the\n * CSS transform), remember them, and re-emit them in `writeBundle`, after every\n * other CSS producer (including vanilla-extract's merge) has written the final\n * file to disk.\n */\n\n/**\n * Matches a single `@import` statement, capturing the quote (group 1) and the\n * imported specifier (group 2). Handles `url(...)`, quoted, and bare forms, and\n * tolerates trailing conditions (e.g. `layer(...)`, media queries).\n */\nconst IMPORT_RE = /@import\\s+(?:url\\(\\s*)?([\"']?)([^\"')\\s]+)\\1\\s*\\)?[^;]*;/g;\n\n/**\n * A specifier is \"internal\" (safe to bundle/inline) when it is relative,\n * absolute, a URL, a data URI, or a fragment. Anything else is treated as a\n * bare package specifier whose `@import` is preserved.\n */\nfunction isInternalImportSpecifier(spec: string): boolean {\n return /^(?:\\.{1,2}\\/|\\/|[a-z][a-z\\d+.-]*:|data:|#)/i.test(spec);\n}\n\n/** Matches a top-level `@layer <names>;` statement (declaration, not a block). */\nconst LAYER_STATEMENT_RE = /@layer\\s+([^{};]+);[ \\t]*\\n?/g;\n\nexport function createPreserveCssImportsPlugin() {\n // External `@import` statements, kept verbatim and in first-seen order.\n const externalImports: string[] = [];\n // Absolute paths already rewritten, to stay idempotent across output passes.\n const processed = new Set<string>();\n\n return definePlugin({\n name: 'preserve-css-imports',\n buildStart() {\n externalImports.length = 0;\n processed.clear();\n },\n // `load` runs before the CSS `transform` that would otherwise inline the\n // imports, so this is where they have to be stripped.\n async load(id: string) {\n const file = id.split('?')[0];\n if (!file.endsWith('.css')) return null;\n\n let code: string;\n try {\n code = await fs.readFile(file, 'utf8');\n } catch {\n return null;\n }\n if (!code.includes('@import')) return null;\n\n let changed = false;\n const stripped = code.replace(IMPORT_RE, (statement, _quote, spec) => {\n if (isInternalImportSpecifier(spec)) return statement;\n changed = true;\n const normalized = statement.trim();\n if (!externalImports.includes(normalized)) {\n externalImports.push(normalized);\n }\n return '';\n });\n if (!changed) return null;\n return { code: stripped, map: null };\n },\n // Re-emit the preserved imports into the final CSS files on disk. Running in\n // `writeBundle` (rather than `generateBundle`) lets other CSS producers —\n // e.g. the vanilla-extract plugin, which assembles its single stylesheet in\n // its own `writeBundle` — finish first.\n async writeBundle(options, bundle) {\n if (!externalImports.length) return;\n const { dir } = options;\n if (!dir) return;\n\n const importBlock = `${externalImports.join('\\n')}\\n`;\n\n await Promise.all(\n Object.values(bundle).map(async (chunk) => {\n if (chunk.type !== 'asset' || !chunk.fileName.endsWith('.css')) {\n return;\n }\n const filePath = path.join(dir, chunk.fileName);\n if (processed.has(filePath)) return;\n\n let css: string;\n try {\n css = await fs.readFile(filePath, 'utf8');\n } catch {\n // The asset may have been removed by another plugin (e.g. a\n // vanilla-extract temporary file merged elsewhere).\n return;\n }\n processed.add(filePath);\n\n // Hoist all `@layer <names>;` declarations to the top so the cascade\n // order is fixed before any layered `@import` adds to a layer, then\n // place the imports right after (they must precede every style rule).\n const layerNames: string[] = [];\n for (const [, names] of css.matchAll(LAYER_STATEMENT_RE)) {\n for (const name of names.split(',')) {\n const trimmed = name.trim();\n if (trimmed && !layerNames.includes(trimmed)) {\n layerNames.push(trimmed);\n }\n }\n }\n const body = css.replace(LAYER_STATEMENT_RE, '');\n const layerStatement = layerNames.length\n ? `@layer ${layerNames.join(', ')};\\n`\n : '';\n await fs.writeFile(\n filePath,\n `${layerStatement}${importBlock}${body}`,\n );\n }),\n );\n },\n });\n}\n","import sortPackageJson from 'sort-package-json';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport {\n rmrf,\n loadWorkspaceConfig,\n resolveUserHooks,\n buildHooks,\n mergeExternals,\n mergeNoExternals,\n writeFileAtomic,\n} from '../utils';\nimport {\n type ProjectPackageJson,\n type WorkspacePackageJson,\n type ResolvedWorkspaceConfig,\n type WorkspaceDirs,\n type WorkspaceSetupContext,\n type WorkspaceMeta,\n type Plugin,\n type UserHooks,\n type BuildedHooks,\n mergeDTSSettingsList,\n type NormalizedDTSSettings,\n type ResolvedOptimizeCSSOptions,\n resolveOptimizeCSSOptions,\n} from '../types';\nimport { Path } from '../path';\nimport { WORKSPACE_SPEC_PREFIX, PACKAGE_JSON_FILENAME } from '../constants';\nimport { PlugboyProject, getProject } from '../project';\nimport { Builder } from './builder';\nimport { getWorkspacePackageJson } from '../package';\nimport { WorkspaceEnvPlugin } from '../env';\nimport { OptimizeCSSPlugin } from '../postcss/plugin';\nimport { rawLoaderPlugin, createPreserveCssImportsPlugin } from './plugins';\nimport { type CssOptions } from '@tsdown/css';\n\nexport type WorkspaceStubLink =\n | {\n type: 'js';\n from: string;\n to: string;\n }\n | {\n type: 'css';\n from: string;\n };\n\nexport type WorkspaceStubLinkType = WorkspaceStubLink['type'];\n\nexport interface WorkspaceObjectExport {\n src: string;\n types: string;\n dtsDest: string;\n import: {\n default: string;\n };\n}\n\nfunction extractWorkspaceObjectExport(at: string | WorkspaceObjectExport) {\n if (typeof at === 'string') return at;\n const { types, import: _import } = at;\n return {\n types,\n import: _import,\n };\n}\n\nexport interface WorkspaceExport {\n id: string;\n at: string | WorkspaceObjectExport;\n stubLink?: WorkspaceStubLink;\n}\n\nexport const WORKSPACE_PACKAGE_SYNC_FIELDS = [\n 'repository',\n 'author',\n 'publishConfig',\n 'license',\n] as const;\n\nexport function syncWorkspacePackageFields(\n projectJSON: ProjectPackageJson,\n workspaceJSON: WorkspacePackageJson,\n) {\n for (const field of WORKSPACE_PACKAGE_SYNC_FIELDS) {\n const value = projectJSON[field];\n if (value && !workspaceJSON[field]) {\n workspaceJSON[field] = value as any;\n }\n }\n}\n\nconst BUILD_TARGET_SRC_MATCH_RE = /\\.(tsx?|s?css)$/;\n\nexport class PlugboyWorkspace {\n readonly name: string;\n\n readonly dir: Path;\n\n readonly config: ResolvedWorkspaceConfig;\n\n readonly project: PlugboyProject | null;\n\n readonly dirs: WorkspaceDirs;\n\n readonly dependencies: string[];\n\n readonly projectDependencies: string[];\n\n readonly meta: WorkspaceMeta;\n\n readonly entry: Record<string, string>;\n\n readonly exports: WorkspaceExport[];\n\n readonly builder: Builder;\n\n readonly plugins: Plugin[];\n\n readonly hooks: BuildedHooks;\n\n readonly dtsFiles: string[] = [];\n\n readonly dts: NormalizedDTSSettings;\n\n cssOptions: CssOptions | undefined;\n\n readonly optimizeCSSOptions: ResolvedOptimizeCSSOptions | false;\n\n private _json: WorkspacePackageJson;\n\n get json() {\n return this._json;\n }\n\n constructor(ctx: WorkspaceSetupContext) {\n const {\n dir,\n json,\n config,\n project,\n dirs,\n dependencies,\n projectDependencies,\n meta,\n plugins,\n hooks,\n dts,\n css,\n optimizeCSS,\n } = ctx;\n\n this.name = dir.basename;\n this.dir = dir;\n this._json = json;\n this.project = project;\n this.dirs = dirs;\n this.dependencies = dependencies;\n this.projectDependencies = projectDependencies;\n this.meta = meta;\n this.config = config;\n this.plugins = [\n ...plugins,\n OptimizeCSSPlugin(this),\n WorkspaceEnvPlugin(this),\n rawLoaderPlugin,\n createPreserveCssImportsPlugin(),\n ];\n this.hooks = hooks;\n this.dts = dts;\n this.cssOptions = css;\n this.optimizeCSSOptions = optimizeCSS\n ? resolveOptimizeCSSOptions(optimizeCSS)\n : false;\n\n const entry: Record<string, string> = {};\n const exports: WorkspaceExport[] = [\n {\n id: `./${PACKAGE_JSON_FILENAME}`,\n at: `./${PACKAGE_JSON_FILENAME}`,\n },\n ];\n\n Object.entries(config.entries).forEach(([id, { src, css }]) => {\n if (!BUILD_TARGET_SRC_MATCH_RE.test(src)) return;\n\n const isMainEntry = id === '.';\n const normalizedId = isMainEntry ? this.name : id;\n const exportId = id.startsWith('.') ? id : `./${id}`;\n const srcIsCSS = src.endsWith('.css') || src.endsWith('.scss');\n const ext = srcIsCSS ? 'css' : 'mjs';\n const dest = `./dist/${normalizedId}.${ext}`;\n const destFullPath = dir.join(dest).value;\n\n entry[normalizedId] = src;\n\n if (css) {\n const cssDest = `./dist/${normalizedId}.css`;\n exports.push({\n id: `./${normalizedId}.css`,\n at: cssDest,\n stubLink: {\n type: 'css',\n from: cssDest,\n },\n });\n\n if (srcIsCSS) return;\n }\n\n const types = `./dist/${normalizedId}.d.mts`;\n const dtsDest = `./dist/${src\n .replace(/^\\.\\/src/, '.dts')\n .replace(/\\.ts$/, '.d.mts')}`;\n\n this.dtsFiles.push(dir.join(types).value);\n exports.push({\n id: exportId,\n at: {\n src,\n types,\n dtsDest,\n import: {\n default: dest,\n },\n },\n stubLink: {\n from: destFullPath,\n to: path.isAbsolute(src) ? src : dir.join(src).value,\n type: 'js',\n },\n });\n });\n\n this.entry = entry;\n this.exports = exports;\n this.builder = new Builder(this);\n }\n\n clean(withDepsAndCache?: boolean) {\n const { dir, dirs } = this;\n const paths: string[] = [dirs.dist.value];\n if (withDepsAndCache) {\n paths.push(dir.join('node_modules').value, dir.join('.turbo').value);\n }\n return rmrf(...paths);\n }\n\n async preparePackageJSON() {\n const { exports, json, project } = this;\n const _exports: Record<string, any> = {};\n const typesVersions: Record<string, any> = {};\n let main: string | undefined;\n let mainTypes: string | undefined;\n\n exports.forEach(({ id, at }) => {\n const _at = extractWorkspaceObjectExport(at);\n _exports[id] = _at;\n if (typeof _at !== 'object') return;\n const isMainExport = id === '.';\n const trimmedId = isMainExport ? id : id.replace(/^\\.\\//, '');\n typesVersions[trimmedId] = [_at.types];\n\n if (isMainExport) {\n main = _at.import.default;\n mainTypes = _at.types;\n }\n });\n\n if (json.exports) {\n const entries = Object.entries(json.exports);\n entries.forEach(([id, at]) => {\n const types = Object.keys(at!);\n if (types.length === 1 && types[0] === 'types') {\n _exports[id] = at;\n }\n });\n }\n\n _exports['./*'] = './dist/*';\n\n const originalJSONString = JSON.stringify(json);\n const cloned: typeof json = JSON.parse(originalJSONString);\n cloned.exports = _exports;\n cloned.typesVersions = {\n '*': typesVersions,\n };\n if (main) cloned.main = main;\n if (mainTypes) cloned.types = mainTypes;\n\n // delete cloned.main;\n // delete cloned.types;\n // delete cloned.typesVersions;\n\n const projectPeerDependencies = project?.config.peerDependencies;\n (['dependencies', 'devDependencies', 'peerDependencies'] as const).forEach(\n (prop) => {\n const deps = cloned[prop];\n if (!deps) return;\n Object.keys(deps).forEach((dep) => {\n const version = deps[dep];\n if (version.startsWith(WORKSPACE_SPEC_PREFIX)) {\n deps[dep] = `${WORKSPACE_SPEC_PREFIX}^`;\n } else if (\n projectPeerDependencies &&\n projectPeerDependencies[dep] &&\n !deps[dep]\n ) {\n deps[dep] = projectPeerDependencies[dep];\n }\n });\n },\n );\n\n cloned.files = cloned.files || [];\n if (!cloned.files.some((file) => /(\\.\\/)?dist\\/?/.test(file))) {\n cloned.files.unshift('dist');\n }\n\n if (project) {\n syncWorkspacePackageFields(project.json, cloned);\n }\n\n cloned.type = cloned.type || 'module';\n\n await this.hooks.preparePackageJSON(json, this);\n\n const sorted = sortPackageJson(cloned);\n const toStr = JSON.stringify(sorted, null, 2);\n if (originalJSONString !== toStr) {\n await writeFileAtomic(this.dir.join(PACKAGE_JSON_FILENAME).value, toStr);\n this._json = sorted;\n }\n return sorted;\n }\n\n getStubLinks(): WorkspaceStubLink[] {\n const links: WorkspaceStubLink[] = [];\n this.exports.forEach(({ stubLink }) => {\n stubLink && links.push(stubLink);\n });\n return links;\n }\n\n async stub() {\n await this.clean();\n await fs.mkdir(this.dirs.dist.value);\n return this.builder.stub();\n }\n\n async build() {\n await this.clean();\n return this.builder.build();\n }\n}\n\nexport async function getWorkspace<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n): Promise<\n AllowMissing extends true ? PlugboyWorkspace | null : PlugboyWorkspace\n> {\n const hit = await getWorkspacePackageJson(searchDir, allowMissing);\n if (!hit) {\n return null as any;\n }\n const { dir, json } = hit;\n const config = await loadWorkspaceConfig(dir.value, 0);\n\n const project = await getProject(dir.value, true, config.ignoreProjectConfig);\n\n const dirs: WorkspaceDirs = {\n src: dir.join('src'),\n dist: dir.join('dist'),\n };\n\n const { dependencies, peerDependencies, optionalDependencies } = json;\n const allDeps = {\n ...dependencies,\n ...peerDependencies,\n ...optionalDependencies,\n };\n\n const _dependencies = Object.keys(allDeps);\n\n const projectDependencies = Object.entries(allDeps)\n .filter(([dep, spec]) => spec.startsWith(WORKSPACE_SPEC_PREFIX))\n .map(([dep]) => dep);\n\n const meta: WorkspaceMeta = {};\n\n const projectPlugins = project?.plugins || [];\n const projectHooks = project?.hooks || [];\n const plugins: Plugin[] = [...projectPlugins, ...config.plugins];\n const _hooks: UserHooks[] = [...projectHooks];\n if (config.hooks) {\n _hooks.push(config.hooks);\n }\n for (const plugin of config.plugins) {\n if (plugin.hooks) {\n _hooks.push(plugin.hooks);\n }\n }\n const resolvedHooks = await resolveUserHooks(..._hooks);\n const hooks = buildHooks(resolvedHooks);\n\n const dts = mergeDTSSettingsList(project?.config.dts, config.dts);\n\n let { optimizeCSS } = config;\n if (optimizeCSS !== false && project && project.config.optimizeCSS) {\n optimizeCSS = {\n ...project.config.optimizeCSS,\n ...optimizeCSS,\n };\n }\n\n const ctx: WorkspaceSetupContext = {\n dir,\n json,\n config,\n project,\n dirs,\n dependencies: _dependencies,\n projectDependencies,\n meta,\n plugins,\n hooks,\n dts,\n css: config.css,\n optimizeCSS,\n mergeExternals: (override) => {\n config.deps ??= {};\n config.deps.neverBundle = mergeExternals(\n config.deps.neverBundle,\n override,\n );\n },\n mergeNoExternals: (override) => {\n config.deps ??= {};\n config.deps.alwaysBundle = mergeNoExternals(\n config.deps.alwaysBundle,\n override,\n );\n },\n };\n\n await hooks.setupWorkspace(ctx, () => {\n return typeof workspace === 'undefined' ? undefined : workspace;\n });\n\n const workspace = new PlugboyWorkspace(ctx);\n\n await hooks.createWorkspace(workspace);\n\n return workspace;\n}\n","/* eslint-disable no-console */\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport sortPackageJson from 'sort-package-json';\nimport * as prompts from '@inquirer/prompts';\nimport { getProject } from '../project';\nimport { getWorkspace, syncWorkspacePackageFields } from '../workspace';\nimport { WorkspacePackageJson, ProjectScriptsTemplate } from '../types';\nimport { WORKSPACE_CONFIG_BASENAME, WORKSPACE_SPEC_PREFIX } from '../constants';\n\nexport async function generateWorkspace(\n workspaceName?: string,\n cwd = process.cwd(),\n) {\n const project = await getProject(cwd);\n const { config } = project;\n\n // ====================\n // workspace name\n // ====================\n while (!workspaceName) {\n const value = await prompts.input({\n message: 'Enter a workspace name',\n });\n\n if (value) {\n workspaceName = value;\n }\n }\n\n // ====================\n // description\n // ====================\n const description = await prompts.input({\n default: workspaceName,\n message: 'Please enter a description of your package',\n });\n\n // ====================\n // version\n // ====================\n let version: string | undefined;\n while (!version) {\n const value = await prompts.input({\n default: '0.0.0',\n message: 'Please enter the initial version',\n });\n\n if (value) {\n version = value;\n }\n }\n\n // ====================\n // keywords\n // ====================\n const rawKeywords = await prompts.input({\n message: 'Enter as many keywords, if any, as needed, separated by commas',\n });\n\n const keywords = (rawKeywords as string)\n .split(',')\n .map((word) => word.trim())\n .filter((word) => word.length);\n\n // ====================\n // scripts\n // ====================\n const scriptsTemplates = config.scripts;\n let scriptsTemplate: ProjectScriptsTemplate | undefined;\n if (scriptsTemplates && scriptsTemplates.length) {\n const value = await prompts.rawlist({\n message: 'Select a scripts template',\n choices: [\n { name: 'None', value: '' },\n ...scriptsTemplates.map((tpl) => ({\n name: tpl.name,\n value: tpl.name,\n })),\n ],\n });\n scriptsTemplate = scriptsTemplates.find((tpl) => tpl.name === value);\n }\n const scripts = scriptsTemplate?.scripts || {};\n\n // ====================\n // peerDependencies\n // ====================\n const peerDependencies = await (async () => {\n const deps = await prompts.checkbox({\n message:\n 'Select the dependent packages, if any, to be used in the package',\n choices: Object.keys(config.peerDependencies).map((dep) => ({\n name: dep,\n value: dep,\n })),\n });\n if (!deps.length) return;\n return Object.fromEntries(\n deps.map((dep) => [dep, config.peerDependencies[dep]]),\n );\n })();\n\n // ====================\n // dependencies\n // ====================\n const dependencies = await (async () => {\n const deps = await prompts.checkbox({\n message: 'Select the internal package to be used, if any.',\n choices: project.resolvedWorkspaces.map((workspace) => {\n const name = path.basename(workspace);\n return {\n name,\n value: name,\n };\n }),\n });\n if (!deps.length) return;\n return Object.fromEntries(\n deps.map((dep) => [\n `@${project.name}/${dep}`,\n `${WORKSPACE_SPEC_PREFIX}^`,\n ]),\n );\n })();\n\n // ====================\n // Generate source files?\n // ====================\n const withGenSource = await prompts.confirm({\n message: 'Generate source files?',\n default: true,\n });\n\n // ====================\n // final confirmation\n // ====================\n const _json: WorkspacePackageJson = {\n name: `@${project.name}/${workspaceName}`,\n type: 'module',\n description,\n version,\n keywords,\n scripts,\n peerDependencies,\n dependencies,\n };\n\n syncWorkspacePackageFields(project.json, _json);\n\n const json = sortPackageJson(_json);\n\n const workspaceDir = path.join(config.workspacesDir, workspaceName);\n\n console.log('');\n console.log('========================================');\n console.log(`Directory: ${workspaceDir}`);\n console.log(`Generate source: ${withGenSource ? 'Yes' : 'No'}`);\n console.log(json);\n console.log('========================================');\n\n const confirmation = await prompts.confirm({\n message: 'Is this OK?',\n default: true,\n });\n\n if (!confirmation) {\n console.log('Skipped.');\n process.exit(1);\n }\n\n // 1. Create directory\n await fs.mkdir(workspaceDir);\n\n // 2. Write package.json\n await fs.writeFile(\n path.join(workspaceDir, 'package.json'),\n JSON.stringify(json, null, 2),\n );\n\n // 3. Write README.md\n await fs.writeFile(path.join(workspaceDir, 'README.md'), config.readme(json));\n\n // 3. Generate source\n if (withGenSource) {\n const srcDir = path.join(workspaceDir, 'src');\n await fs.mkdir(srcDir);\n\n const indexCode = `export * from './${workspaceName}';\\n`;\n const modCode = `export const PACKAGE_NAME = './${workspaceName}';\\n`;\n\n await fs.writeFile(path.join(srcDir, 'index.ts'), indexCode);\n await fs.writeFile(path.join(srcDir, `${workspaceName}.ts`), modCode);\n\n const { tsconfig } = config;\n if (tsconfig) {\n await fs.writeFile(\n path.join(workspaceDir, 'tsconfig.json'),\n JSON.stringify(tsconfig, null, 2),\n );\n }\n\n const configFileCode = `${`\nimport { defineWorkspaceConfig } from '@fastkit/plugboy';\n\nexport default defineWorkspaceConfig({\n entries: {\n '.': './src/index.ts',\n },\n});\n `.trim()}\\n`;\n await fs.writeFile(\n path.join(workspaceDir, `${WORKSPACE_CONFIG_BASENAME}.ts`),\n configFileCode,\n );\n\n const workspace = await getWorkspace(workspaceDir);\n await workspace.preparePackageJSON();\n }\n}\n"],"mappings":";;;;;;;;;;;;AAiCA,SAAgB,sBAAqC;CACnD,OAAO;EACL,gBAAgB,CAAC;EACjB,iBAAiB,CAAC;EAClB,oBAAoB,CAAC;CACvB;AACF;;;ACSA,SAAgB,+BACd,QACiC;CACjC,MAAM,EAAE,MAAM,aAAa;CAC3B,OAAO;EACL,MAAM,OAAO,SAAS,WAAW,IAAI,OAAO,GAAG,QAAQ,GAAG,IAAI;EAC9D;CACF;AACF;AA2BA,SAAgB,iCACd,UACmC;CACnC,OAAO;EACL,GAAG;EACH,SAAS,SAAS,QAAQ,IAAI,8BAA8B;CAC9D;AACF;AAkFA,SAAgB,qBACd,UACuB;CACvB,MAAM,EACJ,SAAS,OACT,WAAW,OACX,uBAAuB,OACvB,eAAe,CAAC,GAChB,cAAc,CAAC,MACb,YAAY,CAAC;CACjB,OAAO;EACL;EACA;EACA;EACA,cAAc,aAAa,IAAI,gCAAgC;EAC/D;CACF;AACF;AAEA,SAAgB,qBACd,GAAG,cACoB;CACvB,MAAM,SAAsB,CAAC;CAC7B,aAAa,SAAS,aAAa;EACjC,IAAI,CAAC,UAAU;EACf,MAAM,EAAE,QAAQ,cAAc,gBAAgB;EAC9C,IAAI,WAAW,KAAA,GAAW,OAAO,SAAS;EAC1C,IAAI,cAAc;GAChB,OAAO,eAAe,OAAO,gBAAgB,CAAC;GAC9C,OAAO,aAAa,KAAK,GAAG,YAAY;EAC1C;EACA,IAAI,aAAa;GACf,OAAO,cAAc,OAAO,eAAe,CAAC;GAC5C,OAAO,YAAY,KAAK,GAAG,WAAW;EACxC;CACF,CAAC;CACD,OAAO,qBAAqB,MAAM;AACpC;;;AC/JA,SAAgB,0BAA0B,SAA6B;CACrE,MAAM,WAAuC,CAAC;CAC9C,MAAM,EAAE,QAAQ,MAAM,QAAQ,MAAM,cAAc,UAAU,SAAS;CACrE,IAAI,UAAU,OACZ,SAAS,QAAQ,UAAU,OAAO,CAAC,IAAI;CAEzC,IAAI,UAAU,OACZ,SAAS,QAAQ,UAAU,OAAO,CAAC,IAAI;CAEzC,IAAI,cACF,SAAS,eAAe;CAE1B,IAAI,YAAY,OACd,SAAS,UACP,YAAY,OACR,EAAE,QAAQ,CAAC,WAAW,EAAE,qBAAqB,MAAM,CAAC,EAAE,IACtD;CAER,OAAO;AACT;;;ACzDA,MAAa,4BAA4B,CAAC,QAAQ,SAAS;AA4C3D,MAAa,sBAAsB;CACjC;CACA;CACA;CACA;CACA;AACF;;;ACrDA,MAAa,0BAA0B,CAAC,MAAM;;;ACT9C,SAAgB,UAAmB,KAA6B;CAC9D,OACE,CAAC,CAAC,QACD,OAAO,QAAQ,YAAY,OAAO,QAAQ,eAC3C,OAAO,IAAI,SAAS;AAExB;AAUA,eAAsB,gBAAmB,KAAgC;CACvE,MAAM,SAAc,CAAC;CACrB,MAAM,OAAO,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,GAAG;CAC5C,KAAK,IAAI,OAAO,MAAM;EACpB,IAAI,UAAU,GAAG,GACf,MAAM,MAAM;EAEd,IAAI,CAAC,KAAK;EACV,IAAI,MAAM,QAAQ,GAAG,GAAG;GACtB,OAAO,KAAK,GAAI,MAAM,gBAAgB,GAAG,CAAE;GAC3C;EACF;EACA,OAAO,KAAK,GAAG;CACjB;CACA,OAAO;AACT;;;ACpBA,MAAM,wBACJ,WACqB;CACrB,IAAI,OAAO,WAAW,UAAU,OAAO;CAEvC,OAAO;EACL,IAAI;EACJ,KAAK;EACL,KAAK;CACP;AACF;AAEA,MAAM,8BACJ,QACA,GAAG,SACkB;CAErB,OAAO,qBADK,OAAO,WAAW,aAAa,OAAO,GAAG,IAAI,KAAK,CAAC,IAAI,MACpC;AACjC;AAEA,MAAM,2BACJ,MACA,UACA,WAAoC,YACf;CACrB,MAAM,SAAS,EAAE,GAAG,qBAAqB,IAAI,EAAE;CAC/C,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,qBAAqB,QAAQ,CAAC,GAAG;EAC1E,IAAI,CAAC,OAAO;EACZ,MAAM,MAAM;EACZ,MAAM,YAAY,OAAO;EACzB,MAAM,SAAS,CAAC,KAAK;EACrB,IAAI,WACF,IAAI,aAAa,UACf,OAAO,KAAK,SAAS;OAErB,OAAO,QAAQ,SAAS;EAG5B,OAAO,OAAO,OAAO,KAAK,MAAM;CAClC;CACA,OAAO;AACT;AAEA,SAAgB,iBACd,MACA,UACA,UACwB;CACxB,IAAI,CAAC,UAAU,OAAO;CACtB,IAAI,CAAC,MAAM,OAAO;CAElB,IAAI,OAAO,SAAS,cAAc,OAAO,aAAa,YACpD,QAAQ,GAAG,SAAS;EAGlB,OAAO,wBAFO,2BAA2B,MAAM,GAAG,IAEf,GADjB,2BAA2B,UAAU,GAAG,IACZ,GAAG,QAAQ;CAC3D;CAGF,OAAO,wBAAwB,MAAM,QAAQ;AAC/C;AAIA,SAAS,WACP,gBACA,IACA,UACA,YACoB;CACpB,IAAI,MAAM,QAAQ,cAAc,GAC9B,OAAO,eAAe,MAAM,MAAM,WAAW,GAAG,IAAI,UAAU,UAAU,CAAC;CAE3E,IAAI,OAAO,mBAAmB,UAAU,OAAO,OAAO;CACtD,IAAI,0BAA0B,QAAQ,OAAO,eAAe,KAAK,EAAE;CACnE,IAAI,OAAO,mBAAmB,YAC5B,OAAO,eAAe,IAAI,UAAU,UAAU;CAChD,OAAO;AACT;AAEA,SAAgB,eACd,MACA,UAC4B;CAC5B,IAAI,CAAC,UAAU,OAAO;CACtB,IAAI,CAAC,MAAM,OAAO;CAElB,MAAM,YAAY,CAAC,MAAM,QAAQ;CAEjC,QAAQ,IAAI,UAAU,eAAe;EACnC,OAAO,UAAU,MAAM,aAAa;GAClC,OAAO,WAAW,UAAU,IAAI,UAAU,UAAU;EACtD,CAAC;CACH;AACF;AAEA,SAAS,aACP,kBACA,IACA,UACoB;CACpB,IAAI,MAAM,QAAQ,gBAAgB,GAChC,OAAO,iBAAiB,MAAM,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC;CAEnE,IAAI,OAAO,qBAAqB,UAAU,OAAO,OAAO;CACxD,IAAI,4BAA4B,QAAQ,OAAO,iBAAiB,KAAK,EAAE;CACvE,IAAI,OAAO,qBAAqB,YAC9B,OAAO,iBAAiB,IAAI,QAAQ;CACtC,OAAO;AACT;AAEA,SAAgB,iBACd,MACA,UAC8B;CAC9B,IAAI,CAAC,UAAU,OAAO;CACtB,IAAI,CAAC,MAAM,OAAO;CAElB,IAAI,OAAO,SAAS,cAAc,OAAO,aAAa,YAAY;EAChE,MAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,IAAI;EACxD,MAAM,YAAY,MAAM,QAAQ,QAAQ,IAAI,SAAS,MAAM,IAAI,CAAC,QAAQ;EACxE,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS;CAChC;CAEA,MAAM,cAAc,CAAC,MAAM,QAAQ;CAEnC,QAAQ,IAAI,aAAa;EACvB,OAAO,YAAY,MAAM,SAAS;GAChC,OAAO,aAAa,MAAM,IAAI,QAAQ;EACxC,CAAC;CACH;AACF;;;AC9IA,MAAM,eAAe;CAAC;CAAU;CAAW;AAAQ;AAInD,MAAM,aAA4B,CAAC;AAEnC,SAAgB,SAAS,IAA6B;CACpD,WAAW,KAAK,EAAE;CAClB,MAAM,YAAY;EAChB,MAAM,QAAQ,WAAW,QAAQ,EAAE;EACnC,IAAI,UAAU,IACZ,WAAW,OAAO,OAAO,CAAC;CAE9B;CACA,OAAO;AACT;AAEA,KAAK,MAAM,UAAU,cACnB,QAAQ,GAAG,QAAQ,YAAY;CAC7B,MAAM,YAAY,WAAW,MAAM;CACnC,WAAW,SAAS;CACpB,IAAI;EACF,MAAM,QAAQ,IAAI,UAAU,KAAK,OAAO,GAAG,CAAC,CAAC;EAC7C,QAAQ,KAAK,CAAC;CAChB,SAAS,MAAM;EAEb,QAAQ,MAAM,IAAI;EAClB,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC;;;ACxBH,SAAgB,YAAY,eAAuB;CACjD,OAAO,cAAc,aAAa;AACpC;AAEA,SAAgB,WAAW,eAAuB;CAChD,OAAO,KAAK,QAAQ,YAAY,aAAa,CAAC;AAChD;AAEA,MAAM,iCAAiC,CAAC,WAAW,QAAQ;AAE3D,SAAgB,wBACd,QACiC;CACjC,OACE,CAAC,CAAC,UACF,OAAO,WAAW,YAClB,+BAA+B,SAC5B,OAAiC,IACpC;AAEJ;AAEA,eAAsB,WACpB,QACA,MACkB;CAClB,IAAI;EACF,MAAM,QAAQ,MAAM,GAAG,SAAS,KAAK,MAAM;EAC3C,IAAI,CAAC,MAAM,OAAO;EAClB,OAAO,SAAS,SAAS,MAAM,OAAO,IAAI,MAAM,YAAY;CAC9D,SAAS,KAAK;EACZ,IAAI,wBAAwB,GAAG,GAAG,OAAO;EACzC,MAAM;CACR;AACF;AASA,SAAS,qBAAqB,SAAqC;CACjE,IAAI,OAAO,YAAY,YACrB,OAAO;CAET,IAAI,OAAO,YAAY,UACrB,QAAQ,SAAS,KAAK,KAAK,SAAS,OAAO;CAE7C,QAAQ,SAAS,QAAQ,KAAK,KAAK,IAAI;AACzC;AAEA,eAAsB,SACpB,KACA,SACA,YAAY,MACiB;CAC7B,MAAM,QAAQ,MAAM,GAAG,SAAS,QAAQ,KAAK,EAAE,eAAe,KAAK,CAAC;CACpE,MAAM,WAAW,qBAAqB,OAAO;CAE7C,MAAM,OAAgC,YAAY,CAAC,IAAI,KAAA;CAEvD,KAAK,MAAM,QAAQ,OAAO;EACxB,IAAI,QAAQ,KAAK,YAAY,GAAG;GAC9B,KAAK,KAAK,IAAI;GACd;EACF;EACA,IAAI,MAAM,SAAS,MAAM,GAAG,GAC1B,OAAO,KAAK,KAAK,KAAK,KAAK,IAAI;CAEnC;CAEA,IAAI,MACF,KAAK,MAAM,UAAU,MAAM;EACzB,MAAM,MAAM,MAAM,SAChB,KAAK,KAAK,KAAK,OAAO,IAAI,GAC1B,UACA,SACF;EACA,IAAI,KAAK,OAAO;CAClB;AAEJ;AAoBA,MAAM,oBAAoB;AAE1B,SAAS,wBAAwB,QAA0B;CACzD,MAAM,UAAU,OAAO,MAAM,iBAAiB;CAC9C,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM;CAC5B,OAAO,QACJ,KAAK,YAAY;EAEhB,OADc,QAAQ,MAAM,GAAG,QAAQ,SAAS,CAAC,CAAC,CAAC,MAAM,GAC9C,CAAC,CACT,KAAK,SAAS;GAEb,OAAO,wBADO,OAAO,QAAQ,SAAS,IACH,CAAC;EACtC,CAAC,CAAC,CACD,KAAK;CACV,CAAC,CAAC,CACD,KAAK;AACV;AAEA,SAAS,2BAA2B,QAAqC;CACvE,OAAO,MAAM,QAAQ,MAAM,IACvB,OAAO,IAAI,uBAAuB,CAAC,CAAC,KAAK,IACzC,wBAAwB,MAAM;AACpC;AAEA,eAAsB,WAGpB,oBACA,MAAM,QAAQ,IAAI,GAClB,eAAe,GAGf;CACA,MAAM,WACJ,OAAO,uBAAuB,YAAY,CAAC,MAAM,QAAQ,kBAAkB,IACvE,qBACA,EAAE,UAAU,mBAAmB;CAErC,MAAM,EAAE,UAAU,MAAM,QAAQ,IAAI,iBAAiB;CACrD,MAAM,YAAY,2BAA2B,QAAQ;CACrD,IAAI,SAAS,iBAAiB,OAAO;EACnC,IAAI,cAAc,OAAO;EACzB,MAAM,IAAI,MACR,2BAA2B,SAAS,8CACtC;CACF;CAEA,MAAM,QAAQ,QAAkB;EAC9B,MAAM,UAAU,KAAK,QAAQ,GAAG;EAChC,IAAI,YAAY,KACd,OAAO,WAAW,UAAU,SAAS,eAAe,CAAC;EAEvD,IAAI,cAAc,OAAO;EACzB,MAAM,uBAAO,IAAI,MAAM,mBAAmB,SAAS,EAAE;CACvD;CAEA,MAAM,SAAS,OAAO,YAAY;EAChC,KAAK,MAAM,YAAY,WACrB,IAAI;GACF,MAAM,QAAQ,KAAK,KAAK,KAAK,QAAQ;GAErC,MAAM,UAA4B;IAChC;IACA;IACA,MAAM;IACN,MAAA,MALiB,GAAG,SAAS,SAAS,OAAO,OAAO;GAMtD;GACA,IAAI,CAAC,QAAQ,KAAK,OAAO,GACvB,OAAO;EAEX,SAAS,KAAK;GACZ,IAAI,CAAC,wBAAwB,GAAG,GAC9B,MAAM;EAEV;CAEJ,EAAA,CAAG;CAEH,IAAI,CAAC,QACH,OAAO,KAAK;CAGd,OAAO;AACT;AAEA,SAAS,MAAM,OAA8B;CAC3C,OAAO,GAAG,SACP,GAAG,OAAO;EACT,WAAW;EACX,OAAO;CACT,CAAC,CAAC,CACD,OAAO,QAAQ;EACd,IAAI,wBAAwB,GAAG,GAAG;EAClC,MAAM;CACR,CAAC;AACL;AAEA,eAAsB,KAAK,GAAG,OAAgC;CAC5D,MAAM,QAAQ,IAAI,MAAM,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC;AACtD;AAEA,SAAgB,YAAY,QAAgB,SAAuB;CACjE,IAAI,CAAC,GAAG,WAAW,MAAM,GAAG;CAE5B,GAAG,UAAU,SAAS,EAAE,WAAW,KAAK,CAAC;CACzC,KAAK,MAAM,QAAQ,GAAG,YAAY,MAAM,GAAG;EACzC,MAAM,UAAU,KAAK,QAAQ,QAAQ,IAAI;EACzC,IAAI,YAAY,SACd;EAEF,MAAM,WAAW,KAAK,QAAQ,SAAS,IAAI;EAE3C,IADa,GAAG,SAAS,OAClB,CAAC,CAAC,YAAY,GACnB,YAAY,SAAS,QAAQ;OAE7B,GAAG,aAAa,SAAS,QAAQ;CAErC;AACF;AAEA,eAAsB,gBAAgB,UAAkB,SAAiB;CACvE,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,IAAI;CAC5C,MAAM,gBAAgB;EACpB,OAAO,GAAG,SAAS,OAAO,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC;CACpD;CACA,MAAM,MAAM,SAAS,OAAO;CAC5B,IAAI;EACF,MAAM,GAAG,SAAS,UAAU,UAAU,OAAO;EAC7C,MAAM,GAAG,SAAS,OAAO,UAAU,QAAQ;EAC3C,IAAI;CACN,SAAS,OAAO;EACd,IAAI;EACJ,MAAM,QAAQ;EACd,MAAM;CACR;AACF;;;ACrOA,SAAgB,gCACd,aACuB;CACvB,OAAO,OAAO,gBAAgB,WAAW,EAAE,KAAK,YAAY,IAAI;AAClE;AAEA,MAAM,eAAe;AACrB,MAAM,cAAc;AAEpB,eAAsB,cAAc,aAAuC;CACzE,MAAM,EAAE,KAAK,MAAM,QAAQ,YACzB,gCAAgC,WAAW;CAC7C,MAAM,MAAM,KAAK,QAAQ,IAAI;CAC7B,MAAM,SAAS,UAAU,QAAQ,QAAQ,cAAc,EAAE,IAAI;CAE7D,MAAM,QAAQ,MAAM,KADJ,KAAK,KAAK,KAAK,SACA,CAAC;CAChC,MAAM,UAAmD,CAAC;CAC1D,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,MAAM,SAAS,KAAK,QAAQ,KAAK,EAAE,EAAA,CACtC,QAAQ,aAAa,EAAE,CAAC,CACxB,QAAQ,cAAc,EAAE;EAC3B,QAAQ,MAAM,EACZ,KAAK,KACP;CACF;CACA,OAAO;AACT;;;ACxCA,MAAa,0BAA0B;AAEvC,MAAa,4BAA4B;AAEzC,MAAa,wBAAwB;AAErC,MAAa,wBAAwB;AAErC,MAAa,iCAAiC;;;ACO9C,SAAgB,qBACd,MAC4B;CAC5B,OACE,CAAC,CAAC,KAAK,WAAW,wBAAwB,OAAO,UAAU,CAAC,CAAC,KAAK,MAAM;AAE5E;AAEA,eAAsB,yBACpB,YACgC;CAChC,MAAM,EACJ,gBAAgB,YAChB,UAAU,CAAC,GACX,mBAAmB,CAAC,GACpB,UACA,UAAU,SAAS,KAAK,KAAK,KAAK,KAClC,SACA,cAAc,MACd,UACE;CACJ,OAAO;EACL;EACA,SAAS,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC;GAAE,MAAM;GAAI;EAAQ,CAAC;EAClE;EACA;EACA;EACA,SAAS,MAAM,wBAAwB,OAAO;EAC9C,aAAa,gBAAgB,OAAO,CAAC,IAAI;EACzC;CACF;AACF;AAEA,SAAgB,oBACd,QACgC;CAChC,OAAO,yBAAyB,MAAM;AACxC;AAEA,eAAsB,kBACpB,WACA,OACgC;CAChC,MAAM,MAAM,MAAM,WAChB;EACE,UAAU,GAAG,wBAAwB,GAAG;EACxC;EACA,cAAc;CAChB,GACA,SACF;CAYA,OAAO,yBAAyB,OAVb,OAEb,MAAM,cAEH,EACD,UAAU,IAAI,KAChB,CAAC,EAAA,CACD,IAAI,UACL,CAAC,EAE0C;AAClD;;;AC3EA,eAAsB,wBACpB,cACmB;CACnB,IAAI,CAAC,cAAc,OAAO,CAAC;CAE3B,MAAM,UAAU,MAAM;CACtB,IAAI,CAAC,SAAS,OAAO,CAAC;CAEtB,IAAI,MAAM,QAAQ,YAAY,GAC5B,QACE,MAAM,QAAQ,IACZ,aAAa,KAAK,MAAM,wBAAwB,CAAC,CAAC,CAAC,CAAC,KAAK,CAC3D,EAAA,CACA,KAAK;CAET,OAAO,CAAC,OAAiB;AAC3B;AAEA,SAAgB,aAA+B,SAAe;CAC5D,OAAO;AACT;AAEA,eAAsB,sBACpB,WACmB;CACnB,MAAM,SAAS,MAAM,kBAAkB,SAAS;CAChD,OAAO,SAAS,OAAO,UAAU,CAAC;AACpC;AAEA,eAAsB,kBACpB,YACA,WACwB;CAExB,QAAO,MADe,sBAAsB,SAAS,EAAA,CACtC,MAAM,WAAW,OAAO,SAAS,UAAU;AAC5D;;;AClBA,SAAgB,uBACd,MAC8B;CAC9B,OACE,CAAC,KAAK,WAAW,0BAA0B,OAAO,UAAU,CAAC,CAAC,KAAK,MAAM;AAE7E;AAEA,SAAgB,yBACd,OACgB;CAChB,MAAM,EAAE,KAAK,QACX,OAAO,UAAU,WAAW,EAAE,KAAK,MAAM,IAAI;CAC/C,OAAO;EACL;EACA,KAAK,OAAO,IAAI,SAAS,MAAM,KAAK,IAAI,SAAS,OAAO;CAC1D;AACF;AAEA,SAAgB,2BACd,SACkB;CAClB,IAAI,CAAC,SAAS,OAAO,CAAC;CACtB,OAAO,OAAO,YACZ,OAAO,QAAQ,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAC3C,MACA,yBAAyB,GAAG,CAC9B,CAAC,CACH;AACF;AAEA,eAAsB,2BACpB,YACkC;CAClC,MAAM,EACJ,sBAAsB,OACtB,SACA,SACA,cAAc,MACd,UACE;CACJ,OAAO;EACL,GAAG;EACH;EACA,SAAS,2BAA2B,OAAO;EAC3C,SAAS,MAAM,wBAAwB,OAAO;EAC9C,aAAa,gBAAgB,OAAO,CAAC,IAAI;EACzC;CACF;AACF;AAEA,SAAgB,sBACd,QACkC;CAClC,OAAO,2BAA2B,MAAM;AAC1C;AAEA,eAAsB,oBACpB,WACA,OACkC;CAClC,MAAM,MAAM,MAAM,WAChB;EACE,UAAU,GAAG,0BAA0B,GAAG;EAC1C;EACA,cAAc;CAChB,GACA,SACF;CAYA,OAAO,2BAA2B,OAVf,OAEb,MAAM,cAEH,EACD,UAAU,IAAI,KAChB,CAAC,EAAA,CACD,IAAI,UACL,CAAC,EAE4C;AACpD;;;AC7FA,eAAsB,iBACpB,GAAG,WACqB;CACxB,MAAM,QAAQ,oBAAoB;CAClC,IAAI,CAAC,WAAW,OAAO;CACvB,KAAK,MAAM,YAAY,WAAW;EAChC,IAAI,CAAC,UAAU;EACf,KAAK,MAAM,CAAC,UAAU,WAAW,OAAO,QAAQ,QAAQ,GACtD,IAAI,OACF,MAAe,SAAS,CAAC,KAAK,GAAI,MAAM,gBAAgB,MAAM,CAAE;CAGtE;CACA,OAAO;AACT;AAEA,SAAgB,WAAW,eAA4C;CACrE,MAAM,QAAa,CAAC;CACpB,OAAO,QAAQ,aAAa,CAAC,CAAC,SAAS,CAAC,UAAU,SAAS;EACzD,MAAM,YAAY,OAAO,GAAG,SAA8B;GACxD,MAAM,UAAiB,CAAC;GACxB,KAAK,MAAM,MAAM,KACf,QAAQ,KAAK,MAAO,GAAW,GAAG,IAAI,CAAC;GAEzC,OAAO;EACT;CACF,CAAC;CACD,OAAO;AACT;;;AChCA,IAAa,OAAb,MAAa,KAAK;CAChB;CAEA;CAEA,IAAI,QAAQ;EACV,OAAO,KAAK;CACd;CAEA,IAAI,MAAM,OAAO;EAEf,IADe,KAAK,QAAQ,KACnB,MAAM,KAAK,QAAQ;EAC5B,KAAK,SAAS,KAAK,QAAQ,KAAK;EAChC,OAAO,KAAK;CACd;CAEA,IAAI,UAAU;EACZ,OAAO,KAAK,QAAQ,KAAK,KAAK;CAChC;CAEA,IAAI,WAAW;EACb,OAAO,KAAK,SAAS,KAAK,KAAK;CACjC;CAEA,IAAI,UAAU;EACZ,OAAO,KAAK,QAAQ,KAAK,KAAK;CAChC;CAEA,IAAI,QAAQ;EACV,IAAI,EAAE,WAAW;EACjB,IAAI,CAAC,QAAQ;GACX,SAAS,GAAG,SAAS,KAAK,KAAK;GAC/B,KAAK,SAAS;EAChB;EACA,OAAO;CACT;CAEA,IAAI,cAAc;EAChB,OAAO,KAAK,MAAM;CACpB;CAEA,IAAI,SAAS;EACX,OAAO,KAAK,MAAM;CACpB;CAEA,YAAY,OAAe;EACzB,KAAK,SAAS,KAAK,QAAQ,KAAK;CAClC;CAEA,WAAW;EACT,OAAO,KAAK;CACd;CAEA,UAAU;EACR,OAAO,KAAK;CACd;CAEA,SAAS;EACP,OAAO,KAAK;CACd;CAEA,SAAS,IAAY;EACnB,OAAO,IAAI,KAAK,KAAK,SAAS,KAAK,OAAO,EAAE,CAAC;CAC/C;CAEA,KAAK,GAAG,OAAiB;EACvB,OAAO,IAAI,KAAK,KAAK,KAAK,KAAK,OAAO,GAAG,KAAK,CAAC;CACjD;CAEA,QAAQ,GAAG,OAAiB;EAC1B,OAAO,IAAI,KAAK,KAAK,QAAQ,KAAK,OAAO,GAAG,KAAK,CAAC;CACpD;CAEA,MAAc,GAAG,OAA+B;EAC9C,MAAM,SAAS,MAAM,QAAQ,UAA2B,CAAC,CAAC,KAAK;EAC/D,OAAO,OAAO,SAAS,KAAK,KAAK,KAAK,OAAO,GAAG,MAAM,IAAI,KAAK;CACjE;CAEA,MAAM,QAAQ,GAAG,OAAkC;EACjD,MAAM,MAAM,KAAK,MAAM,GAAG,KAAK;EAE/B,QAAO,MADa,GAAG,SAAS,QAAQ,GAAG,EAAA,CAC9B,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC;CAC3D;CAEA,SACE,YACA,UACoD;EACpD,OAAO,IAAI,SAAc,SAAS,WAAW;GAC3C,GAAG,SAAS,KAAK,MAAM,UAAU,GAAG,UAAU,KAAK,SAAS;IAC1D,IAAI,KAAK;KACP,IAAI,aAAa,KAAA,KAAa,wBAAwB,GAAG,GACvD,OAAO,QAAQ,QAAQ;KAEzB,OAAO,OAAO,GAAG;IACnB;IACA,QAAQ,IAAI;GACd,CAAC;EACH,CAAC;CACH;CAEA,MAAM,SACJ,YACA,UAC0C;EAC1C,IAAI;GACF,MAAM,OAAO,MAAM,KAAK,SAAS,UAAU;GAC3C,OAAO,KAAK,MAAM,IAAI;EACxB,SAAS,KAAK;GACZ,IAAI,aAAa,KAAA,GACf,MAAM;GAER,OAAO;EACT;CACF;AACF;;;ACvGA,eAAsB,sBAGpB,WACA,cAKA;CACA,MAAM,MAAM,MAAM,WAChB;EACE,UAAU;EACV;EACA,OAAO,WAAW,qBAAqB,KAAK,MAAM,OAAO,IAAI,CAAC;CAChE,GACA,SACF;CACA,IAAI,CAAC,KAAK;EACR,IAAI,cAAc,OAAO;EACzB,MAAM,IAAI,MAAM,0BAA0B;CAC5C;CACA,OAAO;EACL,KAAK,IAAI,KAAK,IAAI,GAAG;EACrB,MAAM,KAAK,MAAM,IAAI,IAAI;CAC3B;AACF;AAOA,eAAsB,wBAGpB,WACA,cAKA;CACA,MAAM,MAAM,MAAM,WAChB;EACE,UAAU;EACV;EACA,OAAO,WAAW,uBAAuB,KAAK,MAAM,OAAO,IAAI,CAAC;CAClE,GACA,SACF;CACA,IAAI,CAAC,KAAK;EACR,IAAI,cAAc,OAAO;EACzB,MAAM,IAAI,MAAM,4BAA4B;CAC9C;CACA,OAAO;EACL,KAAK,IAAI,KAAK,IAAI,GAAG;EACrB,MAAM,KAAK,MAAM,IAAI,IAAI;CAC3B;AACF;AAEA,eAAsB,sBACpB,KAC0C;CAC1C,MAAM,UAA2C,CAAC;CAClD,MAAM,YAAY,KAAK,QAAQ,GAAG;CAClC,MAAM,OAAO,MAAMA,KAAG,QAAQ,SAAS;CAMvC,CAAA,MALmB,QAAQ,IACzB,KAAK,KAAK,YACR,wBAAwB,KAAK,KAAK,WAAW,OAAO,GAAG,IAAI,CAC7D,CACF,EAAA,CACK,SAAS,QAAQ;EACpB,OAAO,QAAQ,KAAK,GAAG;CACzB,CAAC;CACD,OAAO;AACT;;;AC7EA,eAAsB,OACpB,UACA,OAAuB,CAAC,GACxB,cACA;CACA,MAAM,EAAE,MAAM,QAAQ,IAAI,GAAG,SAAS,KAAK,KAAK,KAAK,UAAU,MAAM;CAErE,IAAI;EACF,MAAM,MACJ,UACA;GACE;GACA;GACA;GACA;GACA,YAAY;EACd,GACA;GAAE;GAAK,OAAO;GAAM,OAAO;EAAU,CACvC;CACF,SAAS,GAAG;EACV,IAAI,CAAC,cAAc,MAAM;EAEzB,QAAQ,IACN,SAAS,SAAS,yDACpB;CACF;AACF;;;;AAKA,eAAsB,QAAQ,MAA0B;CACtD,MAAM,EACJ,WAAW,OACX,uBAAuB,OACvB,WACA,GAAG,aACD;CAEJ,IAAI,OAAO,aAAa,YAEtB,MAAM,SAAS;EAAE,GAAG;EAAU;CAAU,CAAC;MAEzC,MAAM,OAAO,UAAU,EAAE,GAAG,SAAS,GAAG,oBAAoB;AAEhE;;;ACxDA,MAAa,8BAAiE;CAC5E,kBAAkB;CAClB,iBAAiB;AACnB;AAEA,MAAa,4BAA+D;CAC1E,kBAAkB;CAClB,iBAAiB;AACnB;;;ACNA,SAAgB,iBACd,QACA;CACA,MAAM,qBAAqB,OAAO,YAChC,OAAO,QAAQ,2BAA2B,CAAC,CAAC,KAAK,CAAC,SAAS,WAAW;EAEpE,OAAO,CAAC,SADO,MAAM,WAAW,GAAG,IAAI,KAAK,YAAY,KACjC;CACzB,CAAC,CACH;CAEA,OAAO,SAAS;EACd,GAAG,OAAO;EACV,GAAG;CACL;AACF;AAEA,SAAgB,2BAA2B;CACzC,OAAO,OAAO,QAAQ,yBAAyB,CAAC,CAC7C,KAAK,CAAC,SAAS,cAAc,cAAc,QAAQ,KAAK,SAAS,EAAE,CAAC,CACpE,KAAK,IAAI;AACd;;;ACrBA,SAAS,iBAAiB,MAAsB;CAC9C,MAAM,MAAM,MAAM,MAAM;EACtB,YAAY;EACZ,aAAa;CACf,CAAC;CAED,IAAI,MAAM;CAEV,KAAK,MAAM,QAAQ,IAAI,MAAM;EAC3B,IACE,KAAK,SAAS,uBACd,KAAK,SAAS,4BACd,KAAK,SAAS,0BACd,KAAK,SAAS,4BACd;GACA,MAAM,KAAK,IAAI,KAAK,KAAK,GAAG;GAC5B;EACF;EACA;CACF;CAEA,OAAO;AACT;AAEA,MAAM,gBAAoD,CAAC;AAE3D,OAAO,QAAQ,2BAA2B,CAAC,CAAC,SAAS,CAAC,SAAS,WAAW;CACxE,IAAI,MAAM,WAAW,GAAG,GACtB,cAAc,KAAK,CAAC,KAAK,WAAW,MAAM,UAAU,CAAC,CAAC,CAAC;AAE3D,CAAC;AAED,SAAgB,mBAAmB,YAAsC;CACvE,OAAO;EACL,MAAM;EACN,MAAM,YAAY,MAAM,QAAQ;GAC9B,MAAM,UAAU,cAAc,QAAQ,CAAC,aACrC,KAAK,SAAS,OAAO,CACvB;GAEA,IAAI,QAAQ,QAAQ;IAClB,MAAM,eAAe,MAAM,OAAO,gBAAA,CAAiB;IACnD,MAAM,KAAK,IAAI,YAAY,IAAI;IAE/B,MAAM,YAAY,iBAAiB,IAAI;IACvC,MAAM,aAAa,QAChB,KAAK,CAAC,WAAW,WAAW,SAAS,UAAU,KAAK,MAAM,EAAE,CAAC,CAC7D,KAAK,IAAI;IACZ,GAAG,WAAW,WAAW,KAAK,YAAY;IAE1C,OAAO;KACL,MAAM,GAAG,SAAS;KAClB,KAAK,GAAG,YAAY,EAAE,OAAO,KAAK,CAAC;IACrC;GACF;EACF;CACF;AACF;;;ACjDA,MAAM,mBAAmB;AAIzB,IAAa,UAAb,MAAqB;CACnB;CAEA;CAEA,IAAI,QAAQ;EACV,OAAO,KAAK,UAAU;CACxB;CAEA,IAAI,MAAM;EACR,OAAO,KAAK,UAAU;CACxB;CAEA,YAAY,WAA6B;EACvC,KAAK,YAAY;CACnB;CAEA,MAAM,cAAc,WAES;EAC3B,MAAM,EAAE,mBAAmB;EAC3B,IAAI,gBAAgB,OAAO;EAE3B,MAAM,EAAE,OAAO,QAAQ;EAEvB,MAAM,kBAAmC;GACvC,KACE,IAAI,UAAU,OAAO,IAAI,aAAa,aAClC,QACA,IAAI,aAAa,YACf,EAAE,KAAK,KAAK,IACZ;GACR,WAAW;GACX,KAAK,KAAK,UAAU;GACpB,SAAS,KAAK,UAAU;GACxB;GACA,WAAW;GACX,OAAO;GACP,GAAG;EACL;EAEA,KAAK,MAAM,OAAO,qBAChB,gBAAgB,OAAO,KAAK,UAAU,OAAO;EAG/C,iBAAiB,eAAe;EAEhC,gBAAgB,SAAS,CAAC;EAC1B,gBAAgB,KAAK,cAAc,eACjC,gBAAgB,KAAK,aACrB,CACE,4CACA,GAAG,KAAK,UAAU,YACpB,CACF;EAEA,KAAK,iBAAiB;EAEtB,OAAO;CACT;CAEA,MAAc,YAAY,MAAc,IAAY;EAClD,MAAM,aAAa,KAAK,MAAM,IAAI;EAClC,MAAM,UAAU,WAAW;EAC3B,MAAM,WAAW,KAAK,MAAM,EAAE;EAC9B,MAAM,gBAAgB,KAAK,SAAS,SAAS,SAAS,GAAG;EACzD,MAAM,WAAW,KAAK,KAAK,eAAe,SAAS,IAAI;EAEvD,MAAM,WAAU,MADKC,KAAG,SAAS,IAAI,OAAO,EAAA,CACrB,MAAM,gBAAgB,CAAC,GAAG;EACjD,MAAM,gBAAgB;EACtB,MAAM,OAAO,GAAG,gBAAgB,yBAAyB,EAAE,mBAAmB,SAAS;EACvF,MAAM,UAAU,KAAK,KAAK,SAAS,GAAG,WAAW,KAAK,OAAO;EAC7D,MAAM,UAAU,GAAG,cAAc,iBAAiB,SAAS,QACzD,SACA,EACF,EAAE;EACF,MAAM,aAAa,KAAK,QAAQ,IAAI;EACpC,MAAM,SAAS,KAAK,QAAQ,OAAO;EACnC,MAAM,QAAQ,IACZ,CAAC,YAAY,MAAM,CAAC,CAAC,KAAK,QAAQA,KAAG,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC,CAAC,CACtE;EACA,MAAM,QAAQ,IAAI,CAChBA,KAAG,UAAU,MAAM,GAAG,UAAU,GAAG,QAAQ,MAAM,KAAK,MAAM,GAC5DA,KAAG,UAAU,SAAS,OAAO,CAC/B,CAAC;CACH;CAEA,MAAc,aAAa,MAAc;EAEvC,MAAMA,KAAG,UAAU,MAAM,YAAI;CAC/B;CAEA,MAAM,gBAAgB;EACpB,MAAM,YAAY,KAAK,UAAU,IAAI,KAAK,QAAQ,CAAC,CAAC;EACpD,MAAM,YAAY,WAAW,KAAK,UAAU,KAAK,KAAK,KAAK;CAC7D;CAEA,MAAM,OAAO;EACX,MAAM,QAAQ,KAAK,UAAU,aAAa;EAC1C,MAAM,KAAK,cAAc;EACzB,MAAM,QAAQ,IACZ,MAAM,KAAK,SAAS;GAClB,IAAI,KAAK,SAAS,MAChB,OAAO,KAAK,YAAY,KAAK,MAAM,KAAK,EAAE;GAE5C,IAAI,KAAK,SAAS,OAChB,OAAO,KAAK,aAAa,KAAK,IAAI;GAEpC,MAAM,IAAI,MAAM,oBAAoB;EACtC,CAAC,CACH;EACA,MAAMA,KAAG,UACP,KAAK,UAAU,KAAK,KAAK,KAAK,OAAO,CAAC,CAAC,OACvC,IACA,OACF;CACF;CAEA,uBACE,KACA,UACoB;EACpB,MAAM,EAAE,SAAS,QAAQ;EAEzB,MAAM,eADgB,KAAK,UAAU,KAAK,SACH;EACvC,MAAM,oBAAoB;GACxB,IAAI,CAAC,OAAO,cAAc;GAE1B,MAAM,WAAW,IAAI,OAAO,+BAA+B,IAAI,EAAE;GACjE,MAAM,gBAAgB,IAAI,MAAM,QAAQ;GACxC,MAAM,UAAU,iBAAiB,cAAc;GAC/C,IAAI,CAAC,SAAS;GAEd,OAAO;IACL;IACA;IACA;GACF;EACF,EAAA,CAAG;EAEH,MAAM,eAAyB,CAAC;EAChC,QAAQ,SAAS,EAAE,MAAM,eAAe;GAEtC,IADgB,IAAI,MAAM,IAChB,GAAG;IACX,aAAa,KAAK,QAAQ;IAC1B,MAAM,IAAI,QAAQ,MAAM,QAAQ;GAClC;EACF,CAAC;EAED,IAAI,CAAC,aAAa,QAAQ;EAE1B,IAAI,YAAY;GACd,MAAM,EAAE,KAAK,SAAS,aAAa;GACnC,MAAM,OAAO,QACV,KAAK,CAAC,CACN,MAAM,GAAG,CAAC,CACV,KAAK,QAAQ;IACZ,MAAM,IAAI,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK;IAChC,OAAO;GACT,CAAC;GACH,MAAM,UAAoB,CAAC;GAC3B,aAAa,SAAS,aAAa;IAEjC,IAAI,CAAC,IADU,OAAO,kBAAkB,SAAS,WAAW,IAAI,EAC1D,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,SAAS,QAAQ,GAC1C,QAAQ,KAAK,QAAQ;GAEzB,CAAC;GACD,IAAI,QAAQ,QACV,MAAM,IAAI,QACR,UACA,gBAAgB,QAAQ,KAAK,IAAI,EAAE,WAAW,IAAI,EACpD;EAEJ,OAAO,IAAI,OAAO,CAAC,cAAc;GAC/B,MAAM,OAAiB,CAAC;GACxB,aAAa,SAAS,aAAa;IACjC,IAAI,CAAC,IAAI,SAAS,uBAAuB,SAAS,IAAI,GACpD,KAAK,KAAK,QAAQ;GAEtB,CAAC;GACD,IAAI,KAAK,QACP,MAAM,YAAY,KAAK,KAAK,IAAI,EAAE,WAAW,IAAI,MAAM;EAE3D;EACA,OAAO;CACT;CAEA,MAAM,iBAAiB,UAAkB;EACvC,MAAM,MAAM,MAAMA,KAAG,SAAS,UAAU,OAAO;EAC/C,MAAM,EAAE,cAAc,gBAAgB,KAAK;EAC3C,IAAI,aAAa;EACjB,IAAI,YAAY;EAChB,KAAK,MAAM,YAAY,cAAc;GACnC,MAAM,cAAc,KAAK,uBAAuB,YAAY,QAAQ;GACpE,IAAI,aAAa;IACf,YAAY;IACZ,aAAa;GACf;EACF;EACA,KAAK,MAAM,cAAc,aAAa;GACpC,MAAM,cAAc,MAAM,WAAW,YAAY,IAAI;GACrD,IAAI,eAAe,eAAe,aAAa;IAC7C,YAAY;IACZ,aAAa;GACf;EACF;EACA,IAAI,CAAC,WACH;EAEF,MAAMA,KAAG,UAAU,UAAU,YAAY,OAAO;CAClD;CAEA,MAAM,kBAAkB,WAAqB,KAAK,UAAU,UAAU;EACpE,MAAM,EAAE,iBAAiB,KAAK;EAC9B,IAAI,CAAC,aAAa,UAAU,CAAC,SAAS,QAAQ;EAE9C,MAAM,QAAQ,IACZ,SAAS,KAAK,aAAa,KAAK,iBAAiB,QAAQ,CAAC,CAC5D;CACF;CAEA,MAAM,kBAAkB;EACtB,MAAM,EAAE,KAAK,MAAM,YAAY,KAAK;EACpC,MAAM,MAAM,IAAI;EAChB,MAAM,SAAS,KAAK,KAAK,KAAK,eAAe,CAAC,CAAC;EAC/C,MAAM,YAAY,KAAK,KAAK,QAAQ,KAAK;EACzC,MAAM,UAAU,KAAK,KAAK,KAAK,MAAM,CAAC,CAAC;EAEvC,MAAM,QAAQ;GACZ;GACA;GACA,WAAW,KAAK;GAChB,UAAU,KAAK,UAAU,IAAI;GAC7B,sBAAsB,KAAK,UAAU,IAAI;EAC3C,CAAC;EAED,MAAMA,KAAG,OAAO,WAAW,OAAO;EAClC,MAAM,KAAK,MAAM;EAEjB,MAAM,gBAAyC,CAAC;EAEhD,QAAQ,SAAS,EAAE,SAAS;GAC1B,OAAO,OAAO,YAAY,cAAc,KAAK,EAAE;EACjD,CAAC;EAED,MAAM,QAAQ,IACZ,cAAc,IAAI,OAAO,OAAO;GAC9B,MAAM,WAAW,KAAK,QAAQ,GAAG,KAAK;GACtC,MAAM,aAAa,KAAK,QAAQ,GAAG,OAAO;GAC1C,MAAM,cAAc,KAAK,SAAS,UAAU,UAAU;GAKtD,MAAM,OAAO,oBAJQ,KAAK,KACxB,aACA,KAAK,SAAS,GAAG,OAAO,CAAC,CAAC,QAAQ,cAAc,EAAE,CAER,EAAE;GAC9C,MAAMA,KAAG,UAAU,GAAG,OAAO,MAAM,OAAO;EAC5C,CAAC,CACH;EAEA,MAAM,WAAW,MAAM,KAAK,KAAK,KAAK,SAAS,mBAAmB,CAAC;EACnE,MAAM,KAAK,kBAAkB,QAAQ;CACvC;CAEA,MAAM,QAAQ;EAEZ,MAAM,MAAM,MADU,KAAK,cAAc,CACtB;EAEnB,IAAI,KAAK,IAAI,UAAU,OAAO,KAAK,IAAI,aAAa,YAClD,MAAM,KAAK,gBAAgB;OAE3B,MAAM,KAAK,kBAAkB;CAEjC;AACF;;;;;;;;AC3QA,IAAa,iBAAb,MAA4B;;CAE1B;;CAGA;;;;;CAMA;;CAGA;;CAGA;;;;CAKA,IAAI,OAAO;EACT,OAAO,KAAK,KAAK;CACnB;;;;;CAMA,IAAI,UAAU;EACZ,OAAO,KAAK,OAAO;CACrB;;;;;CAMA,IAAI,QAAqB;EACvB,MAAM,EAAE,OAAO,QAAQ,YAAY,KAAK;EAExC,OAAO,CAAC,QAAQ,GADI,QAAQ,KAAK,WAAW,OAAO,KACtB,CAAC,CAAC,CAAC,QAAQ,SAAS,CAAC,CAAC,IAAI;CACzD;CAEA,YAAY,KAA0B;EACpC,MAAM,EAAE,KAAK,MAAM,QAAQ,uBAAuB;EAElD,KAAK,MAAM;EACX,KAAK,OAAO;EACZ,KAAK,SAAS;EAEd,MAAM,UAAU;GACd,GAAG,KAAK;GACR,GAAG,KAAK;EACV;EAEA,KAAK,eAAe,OAAO,KAAK,OAAO;EACvC,KAAK,qBAAqB;CAC5B;AACF;AAEA,eAAsB,WAGpB,WACA,cACA,gBAC6E;CAC7E,MAAM,MAAM,MAAM,sBAAsB,WAAW,YAAY;CAC/D,IAAI,CAAC,KACH,OAAO;CAET,MAAM,EAAE,KAAK,SAAS;CACtB,MAAM,qBAA+B,CAAC;CACtC,MAAM,EAAE,aAAa,CAAC,MAAM;CAC5B,IAAI,CAAC,MAAM,QAAQ,UAAU,GAC3B,MAAM,IAAI,MAAM,kCAAkC;CAKpD,MAAM,gBAAgB,MAAM,KAHF,WAAW,KAClC,cAAc,IAAI,KAAK,WAAW,qBAAqB,CAAC,CAAC,KAEX,CAAC;CAClD,KAAK,MAAM,QAAQ,eAAe;EAEhC,IAAI,CAAC,uBADS,KAAK,MAAM,MAAMC,KAAG,SAAS,MAAM,OAAO,CACxB,CAAC,GAC/B;EAEF,mBAAmB,KAAK,KAAK,QAAQ,IAAI,CAAC;CAC5C;CACA,mBAAmB,MAAM,GAAG,MAAM;EAChC,IAAI,IAAI,GAAG,OAAO;EAClB,IAAI,IAAI,GAAG,OAAO;EAClB,OAAO;CACT,CAAC;CAaD,OAAO,IAAI,eAAe;EANxB;EACA;EACA,QAPa,iBACX,MAAM,yBAAyB,CAAC,CAAC,IACjC,MAAM,kBAAkB,IAAI,OAAO,CAAC;EAMtC;CAG0B,CAAC;AAC/B;;;AC/GA,eAAe,WACb,SACoB;CACpB,MAAM,EAAE,OAAO,OAAO,cAAc,YAAY;CAChD,MAAM,CAAC,SAAS,QAAQ,QAAQ,eAAe,YAAY,MAAM,QAAQ,IAAI;EAC3E,OAAO,UAAU,CAAC,MAAM,QAAQ,IAAI,OAAO;EAC3C,SACE,OAAO,gCAAoC,CAAC,MAAM,QAChD,IAAI,cAAc,KAAK,CACzB;EACF,SACE,OAAO,gCAAoC,CAAC,MAAM,QAChD,IAAI,cAAc,KAAK,CACzB;EACF,gBACE,OAAO,+BAAmC,CAAC,MAAM,QAC/C,IAAI,aAAa,YAAY,CAC/B;EACF,WAAW,OAAO,UAAU,CAAC,MAAM,QAAQ,IAAI,QAAQ,OAAO,CAAC;CACjE,CAAC;CACD,MAAM,UAA2B,CAAC;CAClC,UAAU,QAAQ,KAAK,MAAM;CAC7B,UAAU,QAAQ,KAAK,MAAM;CAC7B,iBAAiB,QAAQ,KAAK,aAAa;CAC3C,YAAY,QAAQ,KAAK,QAAQ;CAEjC,OAAO,QAAQ,OAAO;AACxB;AAEA,MAAM,gCAAgC;AACtC,MAAM,gBAAgB;AACtB,MAAM,iBAAiB;AAEvB,eAAe,YACb,OACA,SACA;CACA,MAAM,UAAU,MAAM,WAAW,OAAO;CAOxC,SAAS,QAAQ,KAAqB;EAcpC,cAbyB;GACvB,MAAM,UAAU,IAAI,MAAM,aAAa;GACvC,IAAI,CAAC,SAAS,OAAO;GACrB,MAAM,aAAuB,CAAC;GAC9B,QAAQ,SAAS,QAAQ;IAGvB,IAFoB,QAAQ,gBAAgB,EACvB,CAAC,CAAC,MAAM,GACxB,CAAC,CAAC,SAAS,UAAU,WAAW,KAAK,MAAM,KAAK,CAAC,CAAC;GACzD,CAAC;GAGD,OAAO,UAFS,MAAM,KAAK,IAAI,IAAI,UAAU,CACjB,CAAC,CAAC,KAAK,IAAI,EAAE;EAE3C,EAAA,CACe,IAAI,IAAI,QAAQ,eAAe,EAAE;CAClD;CAEA,MAAM,MAAM,QAAQ,MAAM,OAAO,SAAS,CAAC;CAQ3C,MAAM,UAAS,MANM,QAAQ,QAAQ,KAAK;EACxC,MAAM,MAAM;EACZ,IAAI,MAAM;EACV,KAAK,EAAE,QAAQ,MAAM;CACvB,CAAC,EAAA,CAEqB,IAAI,QAAQ,+BAA+B,EAAE;AACrE;AAEA,SAAgB,kBAAkB,WAAqC;CACrE,OAAO;EACL,MAAM;EACN,MAAM,eAAe,UAAU,QAAQ;GACrC,MAAM,EAAE,uBAAuB;GAC/B,IAAI,CAAC,oBAAoB;GAEzB,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GAAG;IACzC,IAAI,MAAM,SAAS,WAAW,CAAC,MAAM,SAAS,SAAS,MAAM,GAC3D;IAEF,MAAM,YAAY,OAAO,kBAAkB;GAC7C;EACF;CACF;AACF;;;ACvGA,MAAa,kBAA0B;CACrC,MAAM;CACN,MAAM,UAAU,IAAI,UAAU,SAAS;EACrC,IAAI,CAAC,GAAG,SAAS,MAAM,GAAG,OAAO;EAEjC,MAAM,UAAU,GAAG,MAAM,GAAG,EAAE;EAG9B,MAAM,WAAW,MAAM,KAAK,QAAQ,SAAS,UAAU;GACrD,GAAG;GACH,UAAU;EACZ,CAAC;EAED,IAAI,CAAC,UAAU,OAAO;EAGtB,OAAO,SAAS,SAAS;CAC3B;CAEA,MAAM,KAAK,IAAI;EACb,IAAI,CAAC,GAAG,WAAW,QAAQ,GAAG,OAAO;EAErC,MAAM,WAAW,GAAG,MAAM,CAAC;EAC3B,MAAM,UAAU,MAAMC,KAAG,SAAS,UAAU,OAAO;EACnD,OAAO,kBAAkB,KAAK,UAAU,OAAO,EAAE;CACnD;AACF;;;;;;;;;;;;;;;;;;;;;;;;ACHA,MAAM,YAAY;;;;;;AAOlB,SAAS,0BAA0B,MAAuB;CACxD,OAAO,+CAA+C,KAAK,IAAI;AACjE;;AAGA,MAAM,qBAAqB;AAE3B,SAAgB,iCAAiC;CAE/C,MAAM,kBAA4B,CAAC;CAEnC,MAAM,4BAAY,IAAI,IAAY;CAElC,OAAO,aAAa;EAClB,MAAM;EACN,aAAa;GACX,gBAAgB,SAAS;GACzB,UAAU,MAAM;EAClB;EAGA,MAAM,KAAK,IAAY;GACrB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC;GAC3B,IAAI,CAAC,KAAK,SAAS,MAAM,GAAG,OAAO;GAEnC,IAAI;GACJ,IAAI;IACF,OAAO,MAAMC,KAAG,SAAS,MAAM,MAAM;GACvC,QAAQ;IACN,OAAO;GACT;GACA,IAAI,CAAC,KAAK,SAAS,SAAS,GAAG,OAAO;GAEtC,IAAI,UAAU;GACd,MAAM,WAAW,KAAK,QAAQ,YAAY,WAAW,QAAQ,SAAS;IACpE,IAAI,0BAA0B,IAAI,GAAG,OAAO;IAC5C,UAAU;IACV,MAAM,aAAa,UAAU,KAAK;IAClC,IAAI,CAAC,gBAAgB,SAAS,UAAU,GACtC,gBAAgB,KAAK,UAAU;IAEjC,OAAO;GACT,CAAC;GACD,IAAI,CAAC,SAAS,OAAO;GACrB,OAAO;IAAE,MAAM;IAAU,KAAK;GAAK;EACrC;EAKA,MAAM,YAAY,SAAS,QAAQ;GACjC,IAAI,CAAC,gBAAgB,QAAQ;GAC7B,MAAM,EAAE,QAAQ;GAChB,IAAI,CAAC,KAAK;GAEV,MAAM,cAAc,GAAG,gBAAgB,KAAK,IAAI,EAAE;GAElD,MAAM,QAAQ,IACZ,OAAO,OAAO,MAAM,CAAC,CAAC,IAAI,OAAO,UAAU;IACzC,IAAI,MAAM,SAAS,WAAW,CAAC,MAAM,SAAS,SAAS,MAAM,GAC3D;IAEF,MAAM,WAAW,KAAK,KAAK,KAAK,MAAM,QAAQ;IAC9C,IAAI,UAAU,IAAI,QAAQ,GAAG;IAE7B,IAAI;IACJ,IAAI;KACF,MAAM,MAAMA,KAAG,SAAS,UAAU,MAAM;IAC1C,QAAQ;KAGN;IACF;IACA,UAAU,IAAI,QAAQ;IAKtB,MAAM,aAAuB,CAAC;IAC9B,KAAK,MAAM,GAAG,UAAU,IAAI,SAAS,kBAAkB,GACrD,KAAK,MAAM,QAAQ,MAAM,MAAM,GAAG,GAAG;KACnC,MAAM,UAAU,KAAK,KAAK;KAC1B,IAAI,WAAW,CAAC,WAAW,SAAS,OAAO,GACzC,WAAW,KAAK,OAAO;IAE3B;IAEF,MAAM,OAAO,IAAI,QAAQ,oBAAoB,EAAE;IAC/C,MAAM,iBAAiB,WAAW,SAC9B,UAAU,WAAW,KAAK,IAAI,EAAE,OAChC;IACJ,MAAMA,KAAG,UACP,UACA,GAAG,iBAAiB,cAAc,MACpC;GACF,CAAC,CACH;EACF;CACF,CAAC;AACH;;;ACzEA,SAAS,6BAA6B,IAAoC;CACxE,IAAI,OAAO,OAAO,UAAU,OAAO;CACnC,MAAM,EAAE,OAAO,QAAQ,YAAY;CACnC,OAAO;EACL;EACA,QAAQ;CACV;AACF;AAQA,MAAa,gCAAgC;CAC3C;CACA;CACA;CACA;AACF;AAEA,SAAgB,2BACd,aACA,eACA;CACA,KAAK,MAAM,SAAS,+BAA+B;EACjD,MAAM,QAAQ,YAAY;EAC1B,IAAI,SAAS,CAAC,cAAc,QAC1B,cAAc,SAAS;CAE3B;AACF;AAEA,MAAM,4BAA4B;AAElC,IAAa,mBAAb,MAA8B;CAC5B;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA,WAA8B,CAAC;CAE/B;CAEA;CAEA;CAEA;CAEA,IAAI,OAAO;EACT,OAAO,KAAK;CACd;CAEA,YAAY,KAA4B;EACtC,MAAM,EACJ,KACA,MACA,QACA,SACA,MACA,cACA,qBACA,MACA,SACA,OACA,KACA,KACA,gBACE;EAEJ,KAAK,OAAO,IAAI;EAChB,KAAK,MAAM;EACX,KAAK,QAAQ;EACb,KAAK,UAAU;EACf,KAAK,OAAO;EACZ,KAAK,eAAe;EACpB,KAAK,sBAAsB;EAC3B,KAAK,OAAO;EACZ,KAAK,SAAS;EACd,KAAK,UAAU;GACb,GAAG;GACH,kBAAkB,IAAI;GACtB,mBAAmB,IAAI;GACvB;GACA,+BAA+B;EACjC;EACA,KAAK,QAAQ;EACb,KAAK,MAAM;EACX,KAAK,aAAa;EAClB,KAAK,qBAAqB,cACtB,0BAA0B,WAAW,IACrC;EAEJ,MAAM,QAAgC,CAAC;EACvC,MAAM,UAA6B,CACjC;GACE,IAAI,KAAK;GACT,IAAI,KAAK;EACX,CACF;EAEA,OAAO,QAAQ,OAAO,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,WAAW;GAC7D,IAAI,CAAC,0BAA0B,KAAK,GAAG,GAAG;GAG1C,MAAM,eADc,OAAO,MACQ,KAAK,OAAO;GAC/C,MAAM,WAAW,GAAG,WAAW,GAAG,IAAI,KAAK,KAAK;GAChD,MAAM,WAAW,IAAI,SAAS,MAAM,KAAK,IAAI,SAAS,OAAO;GAE7D,MAAM,OAAO,UAAU,aAAa,GADxB,WAAW,QAAQ;GAE/B,MAAM,eAAe,IAAI,KAAK,IAAI,CAAC,CAAC;GAEpC,MAAM,gBAAgB;GAEtB,IAAI,KAAK;IACP,MAAM,UAAU,UAAU,aAAa;IACvC,QAAQ,KAAK;KACX,IAAI,KAAK,aAAa;KACtB,IAAI;KACJ,UAAU;MACR,MAAM;MACN,MAAM;KACR;IACF,CAAC;IAED,IAAI,UAAU;GAChB;GAEA,MAAM,QAAQ,UAAU,aAAa;GACrC,MAAM,UAAU,UAAU,IACvB,QAAQ,YAAY,MAAM,CAAC,CAC3B,QAAQ,SAAS,QAAQ;GAE5B,KAAK,SAAS,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,KAAK;GACxC,QAAQ,KAAK;IACX,IAAI;IACJ,IAAI;KACF;KACA;KACA;KACA,QAAQ,EACN,SAAS,KACX;IACF;IACA,UAAU;KACR,MAAM;KACN,IAAI,KAAK,WAAW,GAAG,IAAI,MAAM,IAAI,KAAK,GAAG,CAAC,CAAC;KAC/C,MAAM;IACR;GACF,CAAC;EACH,CAAC;EAED,KAAK,QAAQ;EACb,KAAK,UAAU;EACf,KAAK,UAAU,IAAI,QAAQ,IAAI;CACjC;CAEA,MAAM,kBAA4B;EAChC,MAAM,EAAE,KAAK,SAAS;EACtB,MAAM,QAAkB,CAAC,KAAK,KAAK,KAAK;EACxC,IAAI,kBACF,MAAM,KAAK,IAAI,KAAK,cAAc,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,KAAK;EAErE,OAAO,KAAK,GAAG,KAAK;CACtB;CAEA,MAAM,qBAAqB;EACzB,MAAM,EAAE,SAAS,MAAM,YAAY;EACnC,MAAM,WAAgC,CAAC;EACvC,MAAM,gBAAqC,CAAC;EAC5C,IAAI;EACJ,IAAI;EAEJ,QAAQ,SAAS,EAAE,IAAI,SAAS;GAC9B,MAAM,MAAM,6BAA6B,EAAE;GAC3C,SAAS,MAAM;GACf,IAAI,OAAO,QAAQ,UAAU;GAC7B,MAAM,eAAe,OAAO;GAC5B,MAAM,YAAY,eAAe,KAAK,GAAG,QAAQ,SAAS,EAAE;GAC5D,cAAc,aAAa,CAAC,IAAI,KAAK;GAErC,IAAI,cAAc;IAChB,OAAO,IAAI,OAAO;IAClB,YAAY,IAAI;GAClB;EACF,CAAC;EAED,IAAI,KAAK,SAEP,OADuB,QAAQ,KAAK,OAC9B,CAAC,CAAC,SAAS,CAAC,IAAI,QAAQ;GAC5B,MAAM,QAAQ,OAAO,KAAK,EAAG;GAC7B,IAAI,MAAM,WAAW,KAAK,MAAM,OAAO,SACrC,SAAS,MAAM;EAEnB,CAAC;EAGH,SAAS,SAAS;EAElB,MAAM,qBAAqB,KAAK,UAAU,IAAI;EAC9C,MAAM,SAAsB,KAAK,MAAM,kBAAkB;EACzD,OAAO,UAAU;EACjB,OAAO,gBAAgB,EACrB,KAAK,cACP;EACA,IAAI,MAAM,OAAO,OAAO;EACxB,IAAI,WAAW,OAAO,QAAQ;EAM9B,MAAM,0BAA0B,SAAS,OAAO;EAChD;GAAE;GAAgB;GAAmB;EAAkB,CAAC,CAAW,SAChE,SAAS;GACR,MAAM,OAAO,OAAO;GACpB,IAAI,CAAC,MAAM;GACX,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS,QAAQ;IAEjC,IADgB,KAAK,IACV,CAAC,WAAA,YAAgC,GAC1C,KAAK,OAAO,GAAG,sBAAsB;SAChC,IACL,2BACA,wBAAwB,QACxB,CAAC,KAAK,MAEN,KAAK,OAAO,wBAAwB;GAExC,CAAC;EACH,CACF;EAEA,OAAO,QAAQ,OAAO,SAAS,CAAC;EAChC,IAAI,CAAC,OAAO,MAAM,MAAM,SAAS,iBAAiB,KAAK,IAAI,CAAC,GAC1D,OAAO,MAAM,QAAQ,MAAM;EAG7B,IAAI,SACF,2BAA2B,QAAQ,MAAM,MAAM;EAGjD,OAAO,OAAO,OAAO,QAAQ;EAE7B,MAAM,KAAK,MAAM,mBAAmB,MAAM,IAAI;EAE9C,MAAM,SAAS,gBAAgB,MAAM;EACrC,MAAM,QAAQ,KAAK,UAAU,QAAQ,MAAM,CAAC;EAC5C,IAAI,uBAAuB,OAAO;GAChC,MAAM,gBAAgB,KAAK,IAAI,KAAK,qBAAqB,CAAC,CAAC,OAAO,KAAK;GACvE,KAAK,QAAQ;EACf;EACA,OAAO;CACT;CAEA,eAAoC;EAClC,MAAM,QAA6B,CAAC;EACpC,KAAK,QAAQ,SAAS,EAAE,eAAe;GACrC,YAAY,MAAM,KAAK,QAAQ;EACjC,CAAC;EACD,OAAO;CACT;CAEA,MAAM,OAAO;EACX,MAAM,KAAK,MAAM;EACjB,MAAMC,KAAG,MAAM,KAAK,KAAK,KAAK,KAAK;EACnC,OAAO,KAAK,QAAQ,KAAK;CAC3B;CAEA,MAAM,QAAQ;EACZ,MAAM,KAAK,MAAM;EACjB,OAAO,KAAK,QAAQ,MAAM;CAC5B;AACF;AAEA,eAAsB,aAGpB,WACA,cAGA;CACA,MAAM,MAAM,MAAM,wBAAwB,WAAW,YAAY;CACjE,IAAI,CAAC,KACH,OAAO;CAET,MAAM,EAAE,KAAK,SAAS;CACtB,MAAM,SAAS,MAAM,oBAAoB,IAAI,OAAO,CAAC;CAErD,MAAM,UAAU,MAAM,WAAW,IAAI,OAAO,MAAM,OAAO,mBAAmB;CAE5E,MAAM,OAAsB;EAC1B,KAAK,IAAI,KAAK,KAAK;EACnB,MAAM,IAAI,KAAK,MAAM;CACvB;CAEA,MAAM,EAAE,cAAc,kBAAkB,yBAAyB;CACjE,MAAM,UAAU;EACd,GAAG;EACH,GAAG;EACH,GAAG;CACL;CAEA,MAAM,gBAAgB,OAAO,KAAK,OAAO;CAEzC,MAAM,sBAAsB,OAAO,QAAQ,OAAO,CAAC,CAChD,QAAQ,CAAC,KAAK,UAAU,KAAK,WAAW,qBAAqB,CAAC,CAAC,CAC/D,KAAK,CAAC,SAAS,GAAG;CAErB,MAAM,OAAsB,CAAC;CAE7B,MAAM,iBAAiB,SAAS,WAAW,CAAC;CAC5C,MAAM,eAAe,SAAS,SAAS,CAAC;CACxC,MAAM,UAAoB,CAAC,GAAG,gBAAgB,GAAG,OAAO,OAAO;CAC/D,MAAM,SAAsB,CAAC,GAAG,YAAY;CAC5C,IAAI,OAAO,OACT,OAAO,KAAK,OAAO,KAAK;CAE1B,KAAK,MAAM,UAAU,OAAO,SAC1B,IAAI,OAAO,OACT,OAAO,KAAK,OAAO,KAAK;CAI5B,MAAM,QAAQ,WAAW,MADG,iBAAiB,GAAG,MAAM,CAChB;CAEtC,MAAM,MAAM,qBAAqB,SAAS,OAAO,KAAK,OAAO,GAAG;CAEhE,IAAI,EAAE,gBAAgB;CACtB,IAAI,gBAAgB,SAAS,WAAW,QAAQ,OAAO,aACrD,cAAc;EACZ,GAAG,QAAQ,OAAO;EAClB,GAAG;CACL;CAGF,MAAM,MAA6B;EACjC;EACA;EACA;EACA;EACA;EACA,cAAc;EACd;EACA;EACA;EACA;EACA;EACA,KAAK,OAAO;EACZ;EACA,iBAAiB,aAAa;GAC5B,OAAO,SAAS,CAAC;GACjB,OAAO,KAAK,cAAc,eACxB,OAAO,KAAK,aACZ,QACF;EACF;EACA,mBAAmB,aAAa;GAC9B,OAAO,SAAS,CAAC;GACjB,OAAO,KAAK,eAAe,iBACzB,OAAO,KAAK,cACZ,QACF;EACF;CACF;CAEA,MAAM,MAAM,eAAe,WAAW;EACpC,OAAO,OAAO,cAAc,cAAc,KAAA,IAAY;CACxD,CAAC;CAED,MAAM,YAAY,IAAI,iBAAiB,GAAG;CAE1C,MAAM,MAAM,gBAAgB,SAAS;CAErC,OAAO;AACT;;;AChcA,eAAsB,kBACpB,eACA,MAAM,QAAQ,IAAI,GAClB;CACA,MAAM,UAAU,MAAM,WAAW,GAAG;CACpC,MAAM,EAAE,WAAW;CAKnB,OAAO,CAAC,eAAe;EACrB,MAAM,QAAQ,MAAM,QAAQ,MAAM,EAChC,SAAS,yBACX,CAAC;EAED,IAAI,OACF,gBAAgB;CAEpB;CAKA,MAAM,cAAc,MAAM,QAAQ,MAAM;EACtC,SAAS;EACT,SAAS;CACX,CAAC;CAKD,IAAI;CACJ,OAAO,CAAC,SAAS;EACf,MAAM,QAAQ,MAAM,QAAQ,MAAM;GAChC,SAAS;GACT,SAAS;EACX,CAAC;EAED,IAAI,OACF,UAAU;CAEd;CASA,MAAM,YAAY,MAJQ,QAAQ,MAAM,EACtC,SAAS,iEACX,CAAC,EAAA,CAGE,MAAM,GAAG,CAAC,CACV,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAC1B,QAAQ,SAAS,KAAK,MAAM;CAK/B,MAAM,mBAAmB,OAAO;CAChC,IAAI;CACJ,IAAI,oBAAoB,iBAAiB,QAAQ;EAC/C,MAAM,QAAQ,MAAM,QAAQ,QAAQ;GAClC,SAAS;GACT,SAAS,CACP;IAAE,MAAM;IAAQ,OAAO;GAAG,GAC1B,GAAG,iBAAiB,KAAK,SAAS;IAChC,MAAM,IAAI;IACV,OAAO,IAAI;GACb,EAAE,CACJ;EACF,CAAC;EACD,kBAAkB,iBAAiB,MAAM,QAAQ,IAAI,SAAS,KAAK;CACrE;CACA,MAAM,UAAU,iBAAiB,WAAW,CAAC;CAK7C,MAAM,mBAAmB,OAAO,YAAY;EAC1C,MAAM,OAAO,MAAM,QAAQ,SAAS;GAClC,SACE;GACF,SAAS,OAAO,KAAK,OAAO,gBAAgB,CAAC,CAAC,KAAK,SAAS;IAC1D,MAAM;IACN,OAAO;GACT,EAAE;EACJ,CAAC;EACD,IAAI,CAAC,KAAK,QAAQ;EAClB,OAAO,OAAO,YACZ,KAAK,KAAK,QAAQ,CAAC,KAAK,OAAO,iBAAiB,IAAI,CAAC,CACvD;CACF,EAAA,CAAG;CAKH,MAAM,eAAe,OAAO,YAAY;EACtC,MAAM,OAAO,MAAM,QAAQ,SAAS;GAClC,SAAS;GACT,SAAS,QAAQ,mBAAmB,KAAK,cAAc;IACrD,MAAM,OAAO,KAAK,SAAS,SAAS;IACpC,OAAO;KACL;KACA,OAAO;IACT;GACF,CAAC;EACH,CAAC;EACD,IAAI,CAAC,KAAK,QAAQ;EAClB,OAAO,OAAO,YACZ,KAAK,KAAK,QAAQ,CAChB,IAAI,QAAQ,KAAK,GAAG,OACpB,GAAG,sBAAsB,EAC3B,CAAC,CACH;CACF,EAAA,CAAG;CAKH,MAAM,gBAAgB,MAAM,QAAQ,QAAQ;EAC1C,SAAS;EACT,SAAS;CACX,CAAC;CAKD,MAAM,QAA8B;EAClC,MAAM,IAAI,QAAQ,KAAK,GAAG;EAC1B,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;CACF;CAEA,2BAA2B,QAAQ,MAAM,KAAK;CAE9C,MAAM,OAAO,gBAAgB,KAAK;CAElC,MAAM,eAAe,KAAK,KAAK,OAAO,eAAe,aAAa;CAElE,QAAQ,IAAI,EAAE;CACd,QAAQ,IAAI,0CAA0C;CACtD,QAAQ,IAAI,cAAc,cAAc;CACxC,QAAQ,IAAI,oBAAoB,gBAAgB,QAAQ,MAAM;CAC9D,QAAQ,IAAI,IAAI;CAChB,QAAQ,IAAI,0CAA0C;CAOtD,IAAI,CAAC,MALsB,QAAQ,QAAQ;EACzC,SAAS;EACT,SAAS;CACX,CAAC,GAEkB;EACjB,QAAQ,IAAI,UAAU;EACtB,QAAQ,KAAK,CAAC;CAChB;CAGA,MAAMC,KAAG,MAAM,YAAY;CAG3B,MAAMA,KAAG,UACP,KAAK,KAAK,cAAc,cAAc,GACtC,KAAK,UAAU,MAAM,MAAM,CAAC,CAC9B;CAGA,MAAMA,KAAG,UAAU,KAAK,KAAK,cAAc,WAAW,GAAG,OAAO,OAAO,IAAI,CAAC;CAG5E,IAAI,eAAe;EACjB,MAAM,SAAS,KAAK,KAAK,cAAc,KAAK;EAC5C,MAAMA,KAAG,MAAM,MAAM;EAErB,MAAM,YAAY,oBAAoB,cAAc;EACpD,MAAM,UAAU,kCAAkC,cAAc;EAEhE,MAAMA,KAAG,UAAU,KAAK,KAAK,QAAQ,UAAU,GAAG,SAAS;EAC3D,MAAMA,KAAG,UAAU,KAAK,KAAK,QAAQ,GAAG,cAAc,IAAI,GAAG,OAAO;EAEpE,MAAM,EAAE,aAAa;EACrB,IAAI,UACF,MAAMA,KAAG,UACP,KAAK,KAAK,cAAc,eAAe,GACvC,KAAK,UAAU,UAAU,MAAM,CAAC,CAClC;EAGF,MAAM,iBAAiB,GAAG;;;;;;;;MAQxB,KAAK,EAAE;EACT,MAAMA,KAAG,UACP,KAAK,KAAK,cAAc,GAAG,0BAA0B,IAAI,GACzD,cACF;EAGA,OAAM,MADkB,aAAa,YAAY,EAAA,CACjC,mBAAmB;CACrC;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fastkit/plugboy",
3
- "version": "1.0.0-next.5",
3
+ "version": "1.0.0-next.6",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "repository": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace-VIdL5Yhp.mjs","names":["fs","fs","fs","fs","fs","fs"],"sources":["../src/types/hook.ts","../src/types/dts.ts","../src/types/css.ts","../src/types/workspace.ts","../src/types/project.ts","../src/utils/general.ts","../src/utils/tsdown.ts","../src/utils/exit-hook.ts","../src/utils/file.ts","../src/utils/expose.ts","../src/constants.ts","../src/utils/project.ts","../src/utils/plugin.ts","../src/utils/workspace.ts","../src/utils/hook.ts","../src/path.ts","../src/package.ts","../src/workspace/dts.ts","../src/env/constants.ts","../src/env/utils.ts","../src/env/plugin.ts","../src/workspace/builder.ts","../src/project/project.ts","../src/postcss/plugin.ts","../src/workspace/plugins/raw-loader.ts","../src/workspace/plugins/preserve-css-imports.ts","../src/workspace/workspace.ts","../src/workspace/generate.ts"],"sourcesContent":["import type { Listable } from '../utils';\nimport { WorkspaceSetupContext, WorkspacePackageJson } from './workspace';\nimport type { PlugboyWorkspace } from '../workspace';\n\nexport type TryGetWorkspace = () => PlugboyWorkspace | undefined;\n\n/** plugboy hook definition */\nexport interface HookTypes {\n /**\n * Hooks during workspace setup\n * @remarks Called just before the workspace instance is created\n * @param ctx - {@link WorkspaceSetupContext Workspace setup context object}\n */\n setupWorkspace: (\n ctx: WorkspaceSetupContext,\n getWorkspace: TryGetWorkspace,\n ) => any;\n /**\n * Hooks after workspace generation\n * @param workspace - {@link PlugboyWorkspace workspace instance}\n */\n createWorkspace: (workspace: PlugboyWorkspace) => any;\n /**\n * Hooks when correcting package.json\n * @param json - package.json just before it was modified and saved by the plugboy\n * @param workspace - {@link PlugboyWorkspace workspace instance}\n */\n preparePackageJSON: (\n json: WorkspacePackageJson,\n workspace: PlugboyWorkspace,\n ) => any;\n}\n\nexport function createHooksDefaults(): ResolvedHooks {\n return {\n setupWorkspace: [],\n createWorkspace: [],\n preparePackageJSON: [],\n };\n}\n\nexport type HookName = keyof HookTypes;\n\n/**\n * plugboy user hook definition\n * @see {@link HookTypes}\n */\nexport type UserHooks = {\n [Name in HookName]?: Listable<HookTypes[Name]>;\n};\n\n/**\n * Pre-setup hook definitions\n * @see {@link HookTypes}\n */\nexport type ResolvedHooks = {\n [Name in HookName]: HookTypes[Name][];\n};\n\nexport type HookArgs<Name extends HookName> = Parameters<HookTypes[Name]>;\n\nexport type UnPromisify<T> = T extends Promise<infer U> ? U : T;\n\nexport type HookReturnType<Name extends HookName> = UnPromisify<\n ReturnType<HookTypes[Name]>\n>;\n\n/**\n * Map of hook methods that can be initialized and called\n * @see {@link HookTypes}\n */\nexport type BuildedHooks = {\n [Name in HookName]: (\n ...args: HookArgs<Name>\n ) => Promise<HookReturnType<Name>>;\n};\n","import type { Builder } from '../workspace';\nimport type { PlugboyWorkspace } from '../workspace';\n\nexport interface EmitDTSOptions {\n cwd?: string;\n outDir?: string;\n}\n\n/**\n * Custom DTS compiler function\n */\nexport type DTSCompilerFunction = (\n opts: EmitDTSOptions & { workspace: PlugboyWorkspace },\n) => Promise<void>;\n\n/**\n * DTS compiler specification\n * - 'tsc': TypeScript compiler (default)\n * - 'vue-tsc': Vue SFC compatible compiler\n * - function: Custom compiler function\n */\nexport type DTSCompilerOption = 'tsc' | 'vue-tsc' | DTSCompilerFunction;\n\n/**\n * Type preservation target in declaration file\n */\nexport interface DTSPreserveTypeTarget {\n /** Type name */\n typeName: string;\n /**\n * String to be restored or regular expression to match\n */\n from: string | RegExp;\n}\n\n/**\n * Type preservation target in declaration file (normalized)\n *\n * @see {@link DTSPreserveTypeTarget}\n */\nexport interface NormalizedDTSPreserveTypeTarget extends Omit<\n DTSPreserveTypeTarget,\n 'from'\n> {\n /** Regular expression to match the string to be restored */\n from: RegExp;\n}\n\nexport function normalizeDTSPreserveTypeTarget(\n target: DTSPreserveTypeTarget,\n): NormalizedDTSPreserveTypeTarget {\n const { from, typeName } = target;\n return {\n from: typeof from === 'string' ? new RegExp(`${from}`, 'g') : from,\n typeName,\n };\n}\n\n/**\n * Type preservation setting for declaration files\n *\n * @remarks This setting is for restoring type information inlined by the TypeScript compiler to the original type name by string substitution.\n */\nexport interface DTSPreserveTypeSettings {\n /** Name of the package to which the type to be restored belongs */\n pkg?: string;\n /** List of preservation targets */\n targets: DTSPreserveTypeTarget[];\n}\n\n/**\n * Type preservation setting for declaration files (normalized)\n *\n * @see {@link DTSPreserveTypeSettings}\n */\nexport interface NormalizedDTSPreserveTypeSettings extends Omit<\n DTSPreserveTypeSettings,\n 'targets'\n> {\n /** List of normalized type preservation targets */\n targets: NormalizedDTSPreserveTypeTarget[];\n}\n\nexport function normalizeDTSPreserveTypeSettings(\n settings: DTSPreserveTypeSettings,\n): NormalizedDTSPreserveTypeSettings {\n return {\n ...settings,\n targets: settings.targets.map(normalizeDTSPreserveTypeTarget),\n };\n}\n\n/**\n * Function to normalize declaration strings\n * @param dts - Bundled declaration strings\n * @param builder - Builder\n */\nexport type DTSNormalizer = (\n dts: string,\n builder: Builder,\n) => string | undefined | void | Promise<string | undefined | void>;\n\n/**\n * declaration output setting\n */\nexport interface DTSSettings {\n /**\n * Inline output without bundling declaration\n *\n * @default false\n */\n inline?: boolean;\n\n /**\n * DTS compiler specification\n * @default 'tsc'\n */\n compiler?: DTSCompilerOption;\n\n /**\n * Whether to ignore compiler errors and continue\n * @default false\n */\n ignoreCompilerErrors?: boolean;\n\n /**\n * list of type preservation settings\n *\n * @remarks This setting is for restoring type information inlined by the TypeScript compiler to the original type name by string substitution.\n *\n * @see {@link DTSPreserveTypeSettings}\n */\n preserveType?: DTSPreserveTypeSettings[];\n\n /**\n * list of function to normalize declaration strings\n */\n normalizers?: DTSNormalizer[];\n}\n\n/**\n * declaration output setting (normalized)\n *\n * @see {@link DTSSettings}\n */\nexport interface NormalizedDTSSettings {\n /**\n * Inline output without bundling declaration\n */\n inline: boolean;\n\n /**\n * DTS compiler specification\n */\n compiler: DTSCompilerOption;\n\n /**\n * Whether to ignore compiler errors and continue\n */\n ignoreCompilerErrors: boolean;\n\n /**\n * list of type preservation settings\n */\n preserveType: NormalizedDTSPreserveTypeSettings[];\n\n /**\n * list of function to normalize declaration strings\n */\n normalizers: DTSNormalizer[];\n}\n\nexport function normalizeDTSSettings(\n settings: DTSSettings,\n): NormalizedDTSSettings {\n const {\n inline = false,\n compiler = 'tsc',\n ignoreCompilerErrors = false,\n preserveType = [],\n normalizers = [],\n } = settings || {};\n return {\n inline,\n compiler,\n ignoreCompilerErrors,\n preserveType: preserveType.map(normalizeDTSPreserveTypeSettings),\n normalizers,\n };\n}\n\nexport function mergeDTSSettingsList(\n ...settingsList: (DTSSettings | undefined)[]\n): NormalizedDTSSettings {\n const merged: DTSSettings = {};\n settingsList.forEach((settings) => {\n if (!settings) return;\n const { inline, preserveType, normalizers } = settings;\n if (inline !== undefined) merged.inline = inline;\n if (preserveType) {\n merged.preserveType = merged.preserveType || [];\n merged.preserveType.push(...preserveType);\n }\n if (normalizers) {\n merged.normalizers = merged.normalizers || [];\n merged.normalizers.push(...normalizers);\n }\n });\n return normalizeDTSSettings(merged);\n}\n","import type { Options } from 'cssnano';\nimport {\n OptimizeLayerOptions,\n OptimizeMediaOptions,\n CombineRulesOptions,\n} from '../postcss';\n\n/**\n * CSS optimization options\n */\nexport interface OptimizeCSSOptions {\n /**\n * Layer optimization options\n *\n * Disable the operation with `false`.\n *\n * @default true\n */\n layer?: OptimizeLayerOptions | boolean;\n /**\n * Media Query Optimization Options\n *\n * Disable the operation with `false`.\n *\n * @default true\n */\n media?: OptimizeMediaOptions | boolean;\n /**\n * Combine rules Options\n *\n * If unset, no optimization is performed\n */\n combineRules?: CombineRulesOptions;\n /**\n * Options for [cssnano](https://cssnano.co/)\n *\n * Disable the operation with `false`.\n *\n * @default { preset: ['default', { normalizeWhitespace: false }] }\n */\n cssnano?: Options | boolean;\n}\n\nexport interface ResolvedOptimizeCSSOptions {\n layer?: OptimizeLayerOptions;\n media?: OptimizeMediaOptions;\n combineRules?: CombineRulesOptions;\n cssnano?: Options;\n}\n\nexport function resolveOptimizeCSSOptions(options: OptimizeCSSOptions) {\n const resolved: ResolvedOptimizeCSSOptions = {};\n const { layer = true, media = true, combineRules, cssnano = true } = options;\n if (layer !== false) {\n resolved.layer = layer === true ? {} : layer;\n }\n if (media !== false) {\n resolved.media = media === true ? {} : media;\n }\n if (combineRules) {\n resolved.combineRules = combineRules;\n }\n if (cssnano !== false) {\n resolved.cssnano =\n cssnano === true\n ? { preset: ['default', { normalizeWhitespace: false }] }\n : cssnano;\n }\n return resolved;\n}\n","import type { UserConfig as TSDownConfig } from 'tsdown';\nimport type { Path } from '../path';\nimport { RequiredPackageJSON, MarkRequired } from './_utils';\nimport type { PlugboyProject } from '../project';\nimport type { UserPluginOption, Plugin } from './plugin';\nimport type { BuildedHooks, UserHooks } from './hook';\nimport { DTSSettings, NormalizedDTSSettings } from './dts';\nimport { OptimizeCSSOptions } from './css';\nimport type { ExternalOption } from '../types';\nimport { type NoExternalOption } from './tsdown';\nimport { type CssOptions } from '@tsdown/css';\n\nexport const WORKSPACE_REQUIRED_FIELDS = ['name', 'version'] as const;\n\ntype WorkspaceRequiredField = (typeof WORKSPACE_REQUIRED_FIELDS)[number];\n\n/**\n * Entry setting object\n */\nexport interface RawWorkspaceEntryObject {\n /**\n * Entry file path\n * @remarks It must be relative to the root directory of the workspace.\n */\n src: string;\n /**\n * Set to true if the entry outputs css at the same time\n * @remarks By doing this, the exports field in package.json will be set automatically.\n */\n css?: boolean;\n}\n\n/**\n * Entry setting object\n */\nexport type WorkspaceEntry = MarkRequired<\n RawWorkspaceEntryObject,\n 'src' | 'css'\n>;\n\nexport type RawWorkspaceEntry = string | RawWorkspaceEntryObject;\n\n/**\n * Configuration of all entries in the workspace (normalized)\n *\n * @see {@link RawWorkspaceEntries}\n */\nexport type WorkspaceEntries = Record<string, WorkspaceEntry>;\n\n/**\n * Configuration of all entries in the workspace\n *\n * @remarks The configuration must be `{ [id]: [Entry setting: }`. `\".\" ` is treated as a special ID and is the target of the main export.\n */\nexport type RawWorkspaceEntries = Record<string, RawWorkspaceEntry>;\n\nexport const TSDOWN_SYNC_OPTIONS = [\n 'define',\n 'skipNodeModulesBundle',\n 'onSuccess',\n 'copy',\n 'deps',\n] as const satisfies (keyof TSDownConfig)[];\n\ntype TSDownSyncOption = (typeof TSDOWN_SYNC_OPTIONS)[number];\n\ninterface TSDownSyncOptions extends Pick<TSDownConfig, TSDownSyncOption> {}\n\n/**\n * Workspace User Configuration\n */\nexport interface UserWorkspaceConfig extends TSDownSyncOptions {\n /**\n * Ignore project settings\n *\n * @remarks Normally, when processing a workspace, plugboy looks for and merges the settings of the entire project at the same time, but this action can be canceled.\n */\n ignoreProjectConfig?: boolean;\n /**\n * Configuration of all entries in the workspace\n *\n * @see {@link RawWorkspaceEntries}\n */\n entries?: RawWorkspaceEntries;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link UserPluginOption}\n */\n plugins?: UserPluginOption[];\n /**\n * declaration output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n css?: CssOptions;\n /**\n * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @default true\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS?: OptimizeCSSOptions | boolean;\n}\n\n/**\n * Workspace Configuration\n */\nexport interface ResolvedWorkspaceConfig\n extends\n Required<\n Omit<\n UserWorkspaceConfig,\n | 'entries'\n | 'hooks'\n | 'plugins'\n | 'dts'\n | 'css'\n | 'optimizeCSS'\n | TSDownSyncOption\n >\n >,\n TSDownSyncOptions {\n /**\n * Configuration of all entries in the workspace\n *\n * @see {@link WorkspaceEntries}\n */\n entries: WorkspaceEntries;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link UserPluginOption}\n */\n plugins: Plugin[];\n /**\n * declaration output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n css?: CssOptions;\n /**\n * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS: OptimizeCSSOptions | false;\n}\n\nexport type WorkspacePackageJson = RequiredPackageJSON<WorkspaceRequiredField>;\n\n/**\n * Workspace Directory Settings\n */\nexport interface WorkspaceDirs {\n /** Path instance of the source directory */\n src: Path;\n /** Path instance of the distribution directory */\n dist: Path;\n}\n\n/**\n * Workspace Meta Information\n *\n * @remarks This will be set to a value uniquely extended by the plugin\n */\n\nexport interface WorkspaceMeta {}\n\n/**\n * Workspace setup context object\n * @remarks Objects that are configured when the workspace is set up. Customization can be done before the workspace instance is created by a plug-in or other process.\n */\nexport interface WorkspaceSetupContext {\n /** Workspace directory path instance */\n dir: Path;\n /** package.json */\n json: WorkspacePackageJson;\n /**\n * Workspace Configuration\n * @see {@link ResolvedWorkspaceConfig}\n */\n config: ResolvedWorkspaceConfig;\n /** Plugboy Project */\n project: PlugboyProject | null;\n /** Workspace Directory Settings */\n dirs: WorkspaceDirs;\n /**\n * All package names on which the workspace depends\n */\n dependencies: string[];\n /**\n * Names of all in-project packages on which the workspace depends\n */\n projectDependencies: string[];\n /**\n * Workspace Meta Information\n * @see {@link WorkspaceMeta}\n */\n meta: WorkspaceMeta;\n /**\n * Plugin list\n * @see {@link Plugin}\n */\n plugins: Plugin[];\n /**\n * Map of hook methods that can be initialized and called\n * @see {@link BuildedHooks}\n */\n hooks: BuildedHooks;\n /**\n * declaration output setting\n * @see {@link NormalizedDTSSettings}\n */\n dts: NormalizedDTSSettings;\n css?: CssOptions;\n /**\n * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS: OptimizeCSSOptions | false;\n // @TODO JSDoc\n mergeExternals(override: ExternalOption): void;\n // @TODO JSDoc\n mergeNoExternals(override: NoExternalOption): void;\n}\n","import type { CompilerOptions } from 'typescript';\nimport { RequiredPackageJSON } from './_utils';\nimport { WorkspacePackageJson } from './workspace';\nimport { UserPluginOption, Plugin } from './plugin';\nimport type { Path } from '../path';\nimport { UserHooks } from './hook';\nimport { DTSSettings } from './dts';\nimport { OptimizeCSSOptions } from './css';\n\nexport const PROJECT_REQUIRED_FIELDS = ['name'] as const;\n\ntype ProjectRequiredField = (typeof PROJECT_REQUIRED_FIELDS)[number];\n\nexport type TSConfigJSON = {\n compilerOptions?: CompilerOptions;\n} & Record<string, any>;\n\n/**\n * Template for package.json script in workspace\n */\nexport interface ProjectScriptsTemplate {\n /** Template Name */\n name: string;\n /** Script Map */\n scripts: Record<string, string>;\n}\n\n/**\n * Project User Configuration\n */\nexport interface UserProjectConfig {\n /**\n * Directory where the workspace is located\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n * @default packages\n */\n workspacesDir?: string;\n /**\n * Workspace script templates, or a list of them\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n scripts?: Record<string, string> | ProjectScriptsTemplate[];\n /**\n * Workspace tsconfig template\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n tsconfig?: TSConfigJSON;\n /**\n * Workspace README template\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n readme?: (json: WorkspacePackageJson) => string;\n /**\n * Fixes the version of all peer dependencies in the project\n */\n peerDependencies?: Record<string, string>;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link UserPluginOption}\n */\n plugins?: UserPluginOption[];\n /**\n * declaration output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n /**\n * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @default true\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS?: OptimizeCSSOptions | boolean;\n}\n\n/**\n * Project Configuration\n */\n\nexport interface ResolvedProjectConfig extends Required<\n Omit<\n UserProjectConfig,\n 'scripts' | 'tsconfig' | 'hooks' | 'plugins' | 'dts' | 'optimizeCSS'\n >\n> {\n /**\n * Workspace script templates list\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n scripts: ProjectScriptsTemplate[];\n /**\n * Workspace tsconfig template\n * @remarks Used to create a new workspace with the `plugboy gen` CLI command.\n */\n tsconfig?: TSConfigJSON;\n /**\n * Hook Setting\n * @see {@link UserHooks}\n */\n hooks?: UserHooks;\n /**\n * Plug-in List\n * @see {@link Plugin}\n */\n plugins: Plugin[];\n /**\n * declaration output setting\n * @see {@link DTSSettings}\n */\n dts?: DTSSettings;\n /**\n * CSS optimization options\n *\n * Disable the operation with `false`.\n *\n * @see {@link OptimizeCSSOptions}\n */\n optimizeCSS: OptimizeCSSOptions | false;\n}\n\nexport type ProjectPackageJson = RequiredPackageJSON<ProjectRequiredField>;\n\n/**\n * Project setup context object\n * @remarks Objects that are configured when the project is set up.\n */\nexport interface ProjectSetupContext {\n /** Project directory path instance */\n dir: Path;\n /** package.json */\n json: ProjectPackageJson;\n /** Project Configuration */\n config: ResolvedProjectConfig;\n /**\n * List of directory names of workspaces located in the project\n * @remarks Note that it is the directory name, not the package name.\n */\n resolvedWorkspaces: string[];\n}\n","export function isPromise<T = any>(obj: any): obj is Promise<T> {\n return (\n !!obj &&\n (typeof obj === 'object' || typeof obj === 'function') &&\n typeof obj.then === 'function'\n );\n}\n\nexport type Listable<T> =\n | T\n | false\n | null\n | undefined\n | Listable<T>[]\n | Promise<T | false | null | undefined | Listable<T>[]>;\n\nexport async function resolveListable<T>(raw: Listable<T>): Promise<T[]> {\n const result: T[] = [];\n const list = Array.isArray(raw) ? raw : [raw];\n for (let row of list) {\n if (isPromise(row)) {\n row = await row;\n }\n if (!row) continue;\n if (Array.isArray(row)) {\n result.push(...(await resolveListable(row)));\n continue;\n }\n result.push(row);\n }\n return result;\n}\n","import {\n type ChunkAddon,\n type ChunkAddonObject,\n type ChunkAddonFunction,\n} from 'tsdown';\nimport type { NoExternalOption, ExternalOption } from '../types';\n\ntype ChunkAddonFunctionARGS = Parameters<ChunkAddonFunction>;\n\ntype MergeChunkAddonPosition = 'before' | 'after';\n\nconst _stringChunkToObject = (\n source: string | ChunkAddonObject,\n): ChunkAddonObject => {\n if (typeof source === 'object') return source;\n\n return {\n js: source,\n dts: source,\n css: source,\n } satisfies Required<ChunkAddonObject>;\n};\n\nconst _resolveChunkAddonToObject = (\n source: ChunkAddon,\n ...args: ChunkAddonFunctionARGS\n): ChunkAddonObject => {\n const tmp = typeof source === 'function' ? source(...args) || {} : source;\n return _stringChunkToObject(tmp);\n};\n\nconst _mergeChunkAddonObjects = (\n base: string | ChunkAddonObject,\n override: string | ChunkAddonObject,\n position: MergeChunkAddonPosition = 'after',\n): ChunkAddonObject => {\n const result = { ..._stringChunkToObject(base) };\n for (const [_key, value] of Object.entries(_stringChunkToObject(override))) {\n if (!value) continue;\n const key = _key as keyof ChunkAddonObject;\n const baseValue = result[key];\n const chunks = [value];\n if (baseValue) {\n if (position === 'before') {\n chunks.push(baseValue);\n } else {\n chunks.unshift(baseValue);\n }\n }\n result[key] = chunks.join('\\n\\n');\n }\n return result;\n};\n\nexport function mergeChunkAddons(\n base: ChunkAddon | undefined,\n override: ChunkAddon | undefined,\n position?: MergeChunkAddonPosition,\n): ChunkAddon | undefined {\n if (!override) return base;\n if (!base) return override;\n\n if (typeof base === 'function' || typeof override === 'function') {\n return (...args) => {\n const _base = _resolveChunkAddonToObject(base, ...args);\n const _override = _resolveChunkAddonToObject(override, ...args);\n return _mergeChunkAddonObjects(_base, _override, position);\n };\n }\n\n return _mergeChunkAddonObjects(base, override);\n}\n\ntype NullValue<T = void> = T | undefined | null | void;\n\nfunction isExternal(\n externalOption: ExternalOption,\n id: string,\n parentId: string | undefined,\n isResolved: boolean,\n): NullValue<boolean> {\n if (Array.isArray(externalOption)) {\n return externalOption.some((e) => isExternal(e, id, parentId, isResolved));\n }\n if (typeof externalOption === 'string') return id === externalOption;\n if (externalOption instanceof RegExp) return externalOption.test(id);\n if (typeof externalOption === 'function')\n return externalOption(id, parentId, isResolved);\n return false;\n}\n\nexport function mergeExternals(\n base: ExternalOption | undefined,\n override: ExternalOption | undefined,\n): ExternalOption | undefined {\n if (!override) return base;\n if (!base) return override;\n\n const externals = [base, override];\n\n return (id, parentId, isResolved) => {\n return externals.some((external) => {\n return isExternal(external, id, parentId, isResolved);\n });\n };\n}\n\nfunction isNoExternal(\n noExternalOption: NoExternalOption,\n id: string,\n importer: string | undefined,\n): NullValue<boolean> {\n if (Array.isArray(noExternalOption)) {\n return noExternalOption.some((e) => isNoExternal(e, id, importer));\n }\n if (typeof noExternalOption === 'string') return id === noExternalOption;\n if (noExternalOption instanceof RegExp) return noExternalOption.test(id);\n if (typeof noExternalOption === 'function')\n return noExternalOption(id, importer);\n return false;\n}\n\nexport function mergeNoExternals(\n base: NoExternalOption | undefined,\n override: NoExternalOption | undefined,\n): NoExternalOption | undefined {\n if (!override) return base;\n if (!base) return override;\n\n if (typeof base !== 'function' && typeof override !== 'function') {\n const _base = Array.isArray(base) ? base.slice() : [base];\n const _override = Array.isArray(override) ? override.slice() : [override];\n return [..._base, ..._override];\n }\n\n const noExternals = [base, override] as const;\n\n return (id, importer) => {\n return noExternals.some((spec) => {\n return isNoExternal(spec, id, importer);\n });\n };\n}\n","const EXIT_SIGNALS = ['SIGINT', 'SIGTERM', 'SIGHUP'] as const;\n\ntype ExitHandler = () => void;\n\nconst _callbacks: ExitHandler[] = [];\n\nexport function exitHook(cb: ExitHandler): () => void {\n _callbacks.push(cb);\n const off = () => {\n const index = _callbacks.indexOf(cb);\n if (index !== -1) {\n _callbacks.splice(index, 1);\n }\n };\n return off;\n}\n\nfor (const signal of EXIT_SIGNALS) {\n process.on(signal, async () => {\n const callbacks = _callbacks.slice();\n _callbacks.length = 0;\n try {\n await Promise.all(callbacks.map((cb) => cb()));\n process.exit(0);\n } catch (_err) {\n // eslint-disable-next-line no-console\n console.error(_err);\n process.exit(1);\n }\n });\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { exitHook } from './exit-hook';\n\nexport function getFilename(importMetaURL: string) {\n return fileURLToPath(importMetaURL);\n}\n\nexport function getDirname(importMetaURL: string) {\n return path.dirname(getFilename(importMetaURL));\n}\n\nconst FILE_NOT_FOUND_EXCEPTION_CODES = ['ENOTDIR', 'ENOENT'] as const;\n\nexport function isFileNotFoundException(\n source: unknown,\n): source is NodeJS.ErrnoException {\n return (\n !!source &&\n typeof source === 'object' &&\n FILE_NOT_FOUND_EXCEPTION_CODES.includes(\n (source as NodeJS.ErrnoException).code as any,\n )\n );\n}\n\nexport async function pathExists(\n target: string,\n type?: 'file' | 'dir',\n): Promise<boolean> {\n try {\n const stats = await fs.promises.stat(target);\n if (!type) return true;\n return type === 'file' ? stats.isFile() : stats.isDirectory();\n } catch (err) {\n if (isFileNotFoundException(err)) return false;\n throw err;\n }\n}\n\ntype FileMatcherFn = (\n file: fs.Dirent,\n dir: string,\n) => boolean | Promise<boolean>;\n\ntype FileMatcher = string | RegExp | FileMatcherFn;\n\nfunction normalizeFileMatcher(matcher: FileMatcher): FileMatcherFn {\n if (typeof matcher === 'function') {\n return matcher;\n }\n if (typeof matcher === 'string') {\n return (file) => file.name.includes(matcher);\n }\n return (file) => matcher.test(file.name);\n}\n\nexport async function findFile(\n dir: string,\n matcher: FileMatcher,\n recursive = true,\n): Promise<string | undefined> {\n const files = await fs.promises.readdir(dir, { withFileTypes: true });\n const _matcher = normalizeFileMatcher(matcher);\n\n const dirs: fs.Dirent[] | undefined = recursive ? [] : undefined;\n\n for (const file of files) {\n if (dirs && file.isDirectory()) {\n dirs.push(file);\n continue;\n }\n if (await _matcher(file, dir)) {\n return path.join(dir, file.name);\n }\n }\n\n if (dirs) {\n for (const subDir of dirs) {\n const hit = await findFile(\n path.join(dir, subDir.name),\n _matcher,\n recursive,\n );\n if (hit) return hit;\n }\n }\n}\n\nexport interface FindConfigResult {\n dir: string;\n fileName: string;\n path: string;\n code: string;\n}\n\ninterface FindConfigSettings<AllowMissing extends boolean | undefined> {\n fileName: string | string[];\n allowMissing?: AllowMissing;\n test?: (result: FindConfigResult) => boolean;\n /**\n * Trace up to how many directories above\n * @default 10\n */\n depth?: number;\n}\n\nconst FIND_CONFIG_OR_RE = /\\(.+?\\)/g;\n\nfunction parseFindConfigFileName(source: string): string[] {\n const matches = source.match(FIND_CONFIG_OR_RE);\n if (!matches) return [source];\n return matches\n .map((matched) => {\n const parts = matched.slice(1, matched.length - 1).split('|');\n return parts\n .map((part) => {\n const chunk = source.replace(matched, part);\n return parseFindConfigFileName(chunk);\n })\n .flat();\n })\n .flat();\n}\n\nfunction parseRawFindConfigFileName(source: string | string[]): string[] {\n return Array.isArray(source)\n ? source.map(parseFindConfigFileName).flat()\n : parseFindConfigFileName(source);\n}\n\nexport async function findConfig<\n AllowMissing extends boolean | undefined = false,\n>(\n fileNameOrSettings: string | string[] | FindConfigSettings<AllowMissing>,\n dir = process.cwd(),\n currentDepth = 0,\n): Promise<\n AllowMissing extends true ? FindConfigResult | null : FindConfigResult\n> {\n const settings: FindConfigSettings<AllowMissing> =\n typeof fileNameOrSettings === 'object' && !Array.isArray(fileNameOrSettings)\n ? fileNameOrSettings\n : { fileName: fileNameOrSettings };\n\n const { fileName, test, depth = 10, allowMissing } = settings;\n const fileNames = parseRawFindConfigFileName(fileName);\n if (depth && currentDepth === depth) {\n if (allowMissing) return null as any;\n throw new Error(\n `Failed to retrieve the \"${fileName}\" file because the maximum depth was reached.`,\n );\n }\n\n const next = (err?: unknown) => {\n const nextDir = path.dirname(dir);\n if (nextDir !== dir) {\n return findConfig(settings, nextDir, currentDepth + 1);\n }\n if (allowMissing) return null as any;\n throw err || new Error(`missing config \"${fileName}\"`);\n };\n\n const result = await (async () => {\n for (const fileName of fileNames) {\n try {\n const _path = path.join(dir, fileName);\n const code = await fs.promises.readFile(_path, 'utf-8');\n const _result: FindConfigResult = {\n fileName,\n dir,\n path: _path,\n code,\n };\n if (!test || test(_result)) {\n return _result;\n }\n } catch (err) {\n if (!isFileNotFoundException(err)) {\n throw err;\n }\n }\n }\n })();\n\n if (!result) {\n return next();\n }\n\n return result;\n}\n\nfunction _rmrf(_path: string): Promise<void> {\n return fs.promises\n .rm(_path, {\n recursive: true,\n force: true,\n })\n .catch((err) => {\n if (isFileNotFoundException(err)) return;\n throw err;\n });\n}\n\nexport async function rmrf(...paths: string[]): Promise<void> {\n await Promise.all(paths.map((_path) => _rmrf(_path)));\n}\n\nexport function copyDirSync(srcDir: string, destDir: string): void {\n if (!fs.existsSync(srcDir)) return;\n\n fs.mkdirSync(destDir, { recursive: true });\n for (const file of fs.readdirSync(srcDir)) {\n const srcFile = path.resolve(srcDir, file);\n if (srcFile === destDir) {\n continue;\n }\n const destFile = path.resolve(destDir, file);\n const stat = fs.statSync(srcFile);\n if (stat.isDirectory()) {\n copyDirSync(srcFile, destFile);\n } else {\n fs.copyFileSync(srcFile, destFile);\n }\n }\n}\n\nexport async function writeFileAtomic(filePath: string, content: string) {\n const tempFile = `${filePath}.${process.pid}.tmp`;\n const cleanup = () => {\n return fs.promises.unlink(tempFile).catch(() => {});\n };\n const off = exitHook(cleanup);\n try {\n await fs.promises.writeFile(tempFile, content);\n await fs.promises.rename(tempFile, filePath);\n off();\n } catch (error) {\n off();\n await cleanup();\n throw error;\n }\n}\n","import path from 'node:path';\nimport { glob } from 'glob';\nimport { RawWorkspaceEntryObject } from '../types';\n\nexport interface ExposeEntriesSettings {\n dir: string;\n /**\n * Path prefix at distribution\n */\n prefix?: string;\n}\n\nexport type RawExposeEntriesSettings = string | ExposeEntriesSettings;\n\nexport function resolveRawExposeEntriesSettings(\n rawSettings: RawExposeEntriesSettings,\n): ExposeEntriesSettings {\n return typeof rawSettings === 'string' ? { dir: rawSettings } : rawSettings;\n}\n\nconst TRIM_PATH_RE = /(^\\.?\\/|\\/$)/g;\nconst TRIM_EXT_RE = /\\.ts$/;\n\nexport async function exposeEntries(rawSettings: RawExposeEntriesSettings) {\n const { dir: _dir, prefix: _prefix } =\n resolveRawExposeEntriesSettings(rawSettings);\n const dir = path.resolve(_dir);\n const prefix = _prefix ? _prefix.replace(TRIM_PATH_RE, '') : '';\n const pattern = path.join(dir, '**/*.ts');\n const files = await glob(pattern);\n const entries: Record<string, RawWorkspaceEntryObject> = {};\n for (const file of files) {\n const id = (prefix + file.replace(dir, ''))\n .replace(TRIM_EXT_RE, '')\n .replace(TRIM_PATH_RE, '');\n entries[id] = {\n src: file,\n };\n }\n return entries;\n}\n","export const PROJECT_CONFIG_BASENAME = 'plugboy.project';\n\nexport const WORKSPACE_CONFIG_BASENAME = 'plugboy.workspace';\n\nexport const PACKAGE_JSON_FILENAME = 'package.json';\n\nexport const WORKSPACE_SPEC_PREFIX = 'workspace:';\n\nexport const SEARCH_BUNDLE_EXTENSIONS_MATCH = '(ts|mjs|js|json)';\n","import { PackageJson } from 'pkg-types';\nimport { bundleRequire } from 'bundle-require';\nimport {\n ProjectPackageJson,\n PROJECT_REQUIRED_FIELDS,\n UserProjectConfig,\n ResolvedProjectConfig,\n} from '../types';\nimport {\n PROJECT_CONFIG_BASENAME,\n SEARCH_BUNDLE_EXTENSIONS_MATCH,\n} from '../constants';\nimport { findConfig } from './file';\nimport { resolveUserPluginOption } from './plugin';\n\nexport function isProjectPackageJson(\n json: PackageJson,\n): json is ProjectPackageJson {\n return (\n !!json.private && PROJECT_REQUIRED_FIELDS.every((filed) => !!json[filed])\n );\n}\n\nexport async function resolveUserProjectConfig(\n userConfig: UserProjectConfig,\n): Promise<ResolvedProjectConfig> {\n const {\n workspacesDir = 'packages',\n scripts = [],\n peerDependencies = {},\n tsconfig,\n readme = (json) => `# ${json.name}\\n`,\n plugins,\n optimizeCSS = true,\n hooks,\n } = userConfig;\n return {\n workspacesDir,\n scripts: Array.isArray(scripts) ? scripts : [{ name: '', scripts }],\n peerDependencies,\n tsconfig,\n readme,\n plugins: await resolveUserPluginOption(plugins),\n optimizeCSS: optimizeCSS === true ? {} : optimizeCSS,\n hooks,\n };\n}\n\nexport function defineProjectConfig<Config extends UserProjectConfig>(\n config: Config,\n): Promise<ResolvedProjectConfig> {\n return resolveUserProjectConfig(config);\n}\n\nexport async function loadProjectConfig(\n searchDir?: string,\n depth?: number,\n): Promise<ResolvedProjectConfig> {\n const hit = await findConfig(\n {\n fileName: `${PROJECT_CONFIG_BASENAME}.${SEARCH_BUNDLE_EXTENSIONS_MATCH}`,\n depth,\n allowMissing: true,\n },\n searchDir,\n );\n\n const userConfig = hit\n ? (\n await bundleRequire<{\n default: UserProjectConfig | Promise<UserProjectConfig>;\n }>({\n filepath: hit.path,\n })\n ).mod.default\n : ({} as UserProjectConfig);\n\n return resolveUserProjectConfig(await userConfig);\n}\n","import { UserPluginOption, Plugin } from '../types';\nimport { loadProjectConfig } from './project';\n\nexport async function resolveUserPluginOption(\n pluginOption: UserPluginOption | undefined,\n): Promise<Plugin[]> {\n if (!pluginOption) return [];\n\n const awaited = await pluginOption;\n if (!awaited) return [];\n\n if (Array.isArray(pluginOption)) {\n return (\n await Promise.all(\n pluginOption.map((o) => resolveUserPluginOption(o)).flat(),\n )\n ).flat();\n }\n return [awaited as Plugin];\n}\n\nexport function definePlugin<T extends Plugin>(options: T): T {\n return options;\n}\n\nexport async function extractProjectPlugins(\n searchDir?: string,\n): Promise<Plugin[]> {\n const config = await loadProjectConfig(searchDir);\n return config ? config.plugins : [];\n}\n\nexport async function findProjectPlugin<T extends Plugin = Plugin>(\n pluginName: string,\n searchDir?: string,\n): Promise<T | undefined> {\n const plugins = await extractProjectPlugins(searchDir);\n return plugins.find((plugin) => plugin.name === pluginName) as T | undefined;\n}\n","import { PackageJson } from 'pkg-types';\nimport { bundleRequire } from 'bundle-require';\nimport {\n WorkspacePackageJson,\n WORKSPACE_REQUIRED_FIELDS,\n UserWorkspaceConfig,\n ResolvedWorkspaceConfig,\n RawWorkspaceEntryObject,\n RawWorkspaceEntry,\n WorkspaceEntry,\n RawWorkspaceEntries,\n WorkspaceEntries,\n} from '../types';\nimport { findConfig } from './file';\nimport {\n WORKSPACE_CONFIG_BASENAME,\n SEARCH_BUNDLE_EXTENSIONS_MATCH,\n} from '../constants';\nimport { resolveUserPluginOption } from './plugin';\n\nexport function isWorkspacePackageJson(\n json: PackageJson,\n): json is WorkspacePackageJson {\n return (\n !json.private && WORKSPACE_REQUIRED_FIELDS.every((filed) => !!json[filed])\n );\n}\n\nexport function resolveRawWorkspaceEntry(\n entry: RawWorkspaceEntry,\n): WorkspaceEntry {\n const { src, css }: RawWorkspaceEntryObject =\n typeof entry === 'string' ? { src: entry } : entry;\n return {\n src,\n css: css || src.endsWith('.css') || src.endsWith('.scss'),\n };\n}\n\nexport function resolveRawWorkspaceEntries(\n entries: RawWorkspaceEntries | undefined,\n): WorkspaceEntries {\n if (!entries) return {};\n return Object.fromEntries(\n Object.entries(entries).map(([name, raw]) => [\n name,\n resolveRawWorkspaceEntry(raw),\n ]),\n );\n}\n\nexport async function resolveUserWorkspaceConfig(\n userConfig: UserWorkspaceConfig,\n): Promise<ResolvedWorkspaceConfig> {\n const {\n ignoreProjectConfig = false,\n entries,\n plugins,\n optimizeCSS = true,\n hooks,\n } = userConfig;\n return {\n ...userConfig,\n ignoreProjectConfig,\n entries: resolveRawWorkspaceEntries(entries),\n plugins: await resolveUserPluginOption(plugins),\n optimizeCSS: optimizeCSS === true ? {} : optimizeCSS,\n hooks,\n };\n}\n\nexport function defineWorkspaceConfig<Config extends UserWorkspaceConfig>(\n config: Config,\n): Promise<ResolvedWorkspaceConfig> {\n return resolveUserWorkspaceConfig(config);\n}\n\nexport async function loadWorkspaceConfig(\n searchDir?: string,\n depth?: number,\n): Promise<ResolvedWorkspaceConfig> {\n const hit = await findConfig(\n {\n fileName: `${WORKSPACE_CONFIG_BASENAME}.${SEARCH_BUNDLE_EXTENSIONS_MATCH}`,\n depth,\n allowMissing: true,\n },\n searchDir,\n );\n\n const userConfig = hit\n ? (\n await bundleRequire<{\n default: UserWorkspaceConfig | Promise<UserWorkspaceConfig>;\n }>({\n filepath: hit.path,\n })\n ).mod.default\n : ({} as UserWorkspaceConfig);\n\n return resolveUserWorkspaceConfig(await userConfig);\n}\n","import {\n UserHooks,\n ResolvedHooks,\n BuildedHooks,\n createHooksDefaults,\n} from '../types';\nimport { resolveListable } from './general';\n\nexport async function resolveUserHooks(\n ...userHooks: (UserHooks | undefined | null | false)[]\n): Promise<ResolvedHooks> {\n const hooks = createHooksDefaults();\n if (!userHooks) return hooks;\n for (const userHook of userHooks) {\n if (!userHook) continue;\n for (const [hookName, _hooks] of Object.entries(userHook)) {\n if (hooks) {\n (hooks as any)[hookName].push(...(await resolveListable(_hooks)));\n }\n }\n }\n return hooks;\n}\n\nexport function buildHooks(resolvedHooks: ResolvedHooks): BuildedHooks {\n const hooks: any = {};\n Object.entries(resolvedHooks).forEach(([hookName, fns]) => {\n hooks[hookName] = async (...args: any[]): Promise<any> => {\n const results: any[] = [];\n for (const fn of fns) {\n results.push(await (fn as any)(...args));\n }\n return results;\n };\n });\n return hooks;\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport { isFileNotFoundException } from './utils';\n\nexport class Path {\n private _value: string;\n\n private _stats?: fs.Stats;\n\n get value() {\n return this._value;\n }\n\n set value(value) {\n const _value = path.resolve(value);\n if (_value === this._value) return;\n this._value = path.resolve(value);\n delete this._stats;\n }\n\n get dirname() {\n return path.dirname(this.value);\n }\n\n get basename() {\n return path.basename(this.value);\n }\n\n get extname() {\n return path.extname(this.value);\n }\n\n get stats() {\n let { _stats } = this;\n if (!_stats) {\n _stats = fs.statSync(this.value);\n this._stats = _stats;\n }\n return _stats;\n }\n\n get isDirectory() {\n return this.stats.isDirectory;\n }\n\n get isFile() {\n return this.stats.isFile;\n }\n\n constructor(value: string) {\n this._value = path.resolve(value);\n }\n\n toString() {\n return this.value;\n }\n\n valueOf() {\n return this.value;\n }\n\n toJSON() {\n return this.value;\n }\n\n relative(to: string) {\n return new Path(path.relative(this.value, to));\n }\n\n join(...paths: string[]) {\n return new Path(path.join(this.value, ...paths));\n }\n\n resolve(...paths: string[]) {\n return new Path(path.resolve(this.value, ...paths));\n }\n\n private _join(...paths: (string | undefined)[]) {\n const _paths = paths.filter((_path): _path is string => !!_path);\n return _paths.length ? path.join(this.value, ..._paths) : this.value;\n }\n\n async readdir(...paths: string[]): Promise<Path[]> {\n const dir = this._join(...paths);\n const files = await fs.promises.readdir(dir);\n return files.map((file) => new Path(path.join(dir, file)));\n }\n\n readFile<D = undefined>(\n pathAppend?: string,\n defaults?: D,\n ): Promise<D extends undefined ? string : string | D> {\n return new Promise<any>((resolve, reject) => {\n fs.readFile(this._join(pathAppend), 'utf-8', (err, data) => {\n if (err) {\n if (defaults !== undefined && isFileNotFoundException(err)) {\n return resolve(defaults);\n }\n return reject(err);\n }\n resolve(data);\n });\n });\n }\n\n async readJSON<T = any, D = undefined>(\n pathAppend?: string,\n defaults?: D,\n ): Promise<D extends undefined ? T : T | D> {\n try {\n const file = await this.readFile(pathAppend);\n return JSON.parse(file);\n } catch (err) {\n if (defaults === undefined) {\n throw err;\n }\n return defaults as any;\n }\n }\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { ProjectPackageJson, WorkspacePackageJson } from './types';\nimport {\n findConfig,\n isProjectPackageJson,\n isWorkspacePackageJson,\n} from './utils';\nimport { PACKAGE_JSON_FILENAME } from './constants';\nimport { Path } from './path';\n\nexport interface GetProjectPackageJsonResult {\n dir: Path;\n json: ProjectPackageJson;\n}\n\nexport async function getProjectPackageJson<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n): Promise<\n AllowMissing extends true\n ? GetProjectPackageJsonResult | null\n : GetProjectPackageJsonResult\n> {\n const hit = await findConfig(\n {\n fileName: PACKAGE_JSON_FILENAME,\n allowMissing,\n test: (result) => isProjectPackageJson(JSON.parse(result.code)),\n },\n searchDir,\n );\n if (!hit) {\n if (allowMissing) return null as any;\n throw new Error('missing project package.');\n }\n return {\n dir: new Path(hit.dir),\n json: JSON.parse(hit.code),\n } as any;\n}\n\nexport interface GetWorkspacePackageJsonResult {\n dir: Path;\n json: WorkspacePackageJson;\n}\n\nexport async function getWorkspacePackageJson<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n): Promise<\n AllowMissing extends true\n ? GetWorkspacePackageJsonResult | null\n : GetWorkspacePackageJsonResult\n> {\n const hit = await findConfig(\n {\n fileName: PACKAGE_JSON_FILENAME,\n allowMissing,\n test: (result) => isWorkspacePackageJson(JSON.parse(result.code)),\n },\n searchDir,\n );\n if (!hit) {\n if (allowMissing) return null as any;\n throw new Error('missing workspace package.');\n }\n return {\n dir: new Path(hit.dir),\n json: JSON.parse(hit.code),\n } as any;\n}\n\nexport async function findWorkspacePackages(\n dir: string,\n): Promise<GetWorkspacePackageJsonResult[]> {\n const results: GetWorkspacePackageJsonResult[] = [];\n const searchDir = path.resolve(dir);\n const dirs = await fs.readdir(searchDir);\n const pkgs = await Promise.all(\n dirs.map((dirName) =>\n getWorkspacePackageJson(path.join(searchDir, dirName), true),\n ),\n );\n pkgs.forEach((pkg) => {\n pkg && results.push(pkg);\n });\n return results;\n}\n","import { execa } from 'execa';\nimport path from 'node:path';\nimport type { DTSCompilerOption, EmitDTSOptions } from '../types/dts';\nimport type { PlugboyWorkspace } from './workspace';\n\nexport interface EmitDTSFullOptions extends EmitDTSOptions {\n workspace: PlugboyWorkspace;\n compiler?: DTSCompilerOption;\n ignoreCompilerErrors?: boolean;\n}\n// export interface EmitDTSOptions {\n// cwd?: string;\n// outDir?: string;\n// }\n\nexport async function runTsc(\n compiler: 'tsc' | 'vue-tsc',\n opts: EmitDTSOptions = {},\n ignoreErrors?: boolean,\n) {\n const { cwd = process.cwd(), outDir = path.join(cwd, 'dist/dts') } = opts;\n\n try {\n await execa(\n compiler,\n [\n '--declaration true',\n '--skipLibCheck',\n '--noEmit false',\n '--emitDeclarationOnly',\n `--outDir ${outDir}`,\n ],\n { cwd, shell: true, stdio: 'inherit' },\n );\n } catch (e) {\n if (!ignoreErrors) throw e;\n // eslint-disable-next-line no-console\n console.log(\n `Note: ${compiler} reported errors, but continuing with generated files...`,\n );\n }\n}\n\n/**\n * Emit DTS (declaration files)\n */\nexport async function emitDTS(opts: EmitDTSFullOptions) {\n const {\n compiler = 'tsc',\n ignoreCompilerErrors = false,\n workspace,\n ...baseOpts\n } = opts;\n\n if (typeof compiler === 'function') {\n // Custom compiler function\n await compiler({ ...baseOpts, workspace });\n } else {\n await runTsc(compiler, { ...baseOpts }, ignoreCompilerErrors);\n }\n}\n","import type { PlugboyEnvVarName } from './types';\n\n// Values starting with \"#\" have the \"#\" stripped and are transformed so that\n// references like import.meta.env are not removed by rolldown during bundling.\nexport const PLUGBOY_VAR_ENVS_FOR_BUNDLE: Record<PlugboyEnvVarName, string> = {\n __PLUGBOY_STUB__: 'false',\n __PLUGBOY_DEV__: `#(typeof process !== 'undefined' && process.env?.NODE_ENV === 'development') || (typeof import.meta !== 'undefined' && import.meta.env?.DEV === true)`,\n};\n\nexport const PLUGBOY_VAR_ENVS_FOR_STUB: Record<PlugboyEnvVarName, string> = {\n __PLUGBOY_STUB__: 'true',\n __PLUGBOY_DEV__: 'true',\n};\n","import { type InlineConfig } from 'tsdown';\nimport {\n PLUGBOY_VAR_ENVS_FOR_BUNDLE,\n PLUGBOY_VAR_ENVS_FOR_STUB,\n} from './constants';\n\nexport function applyPlugboyEnvs(\n config: Pick<InlineConfig, 'define' | 'banner'>,\n) {\n const DEFINE_VAR_INJECTS = Object.fromEntries(\n Object.entries(PLUGBOY_VAR_ENVS_FOR_BUNDLE).map(([envName, value]) => {\n const _value = value.startsWith('#') ? `$$${envName}` : value;\n return [envName, _value];\n }),\n );\n\n config.define = {\n ...config.define,\n ...DEFINE_VAR_INJECTS,\n };\n}\n\nexport function getPlugboyEnvCodeForStub() {\n return Object.entries(PLUGBOY_VAR_ENVS_FOR_STUB)\n .map(([envName, variable]) => `globalThis.${envName} = ${variable};`)\n .join('\\n');\n}\n","import type { PlugboyWorkspace } from '../workspace';\nimport type { Plugin } from '../types';\nimport { parse } from 'acorn';\nimport { PLUGBOY_VAR_ENVS_FOR_BUNDLE } from './constants';\n\nfunction findAfterImports(code: string): number {\n const ast = parse(code, {\n sourceType: 'module',\n ecmaVersion: 'latest',\n }) as any;\n\n let end = 0;\n\n for (const node of ast.body) {\n if (\n node.type === 'ImportDeclaration' ||\n node.type === 'ExportNamedDeclaration' ||\n node.type === 'ExportAllDeclaration' ||\n node.type === 'ExportDefaultDeclaration'\n ) {\n end = Math.max(end, node.end);\n continue;\n }\n break;\n }\n\n return end;\n}\n\nconst _replacements: [envName: string, value: string][] = [];\n\nObject.entries(PLUGBOY_VAR_ENVS_FOR_BUNDLE).forEach(([envName, value]) => {\n if (value.startsWith('#')) {\n _replacements.push([`$$${envName}`, value.substring(1)]);\n }\n});\n\nexport function WorkspaceEnvPlugin(_workspace: PlugboyWorkspace): Plugin {\n return {\n name: 'plugboy-workspace-env',\n async renderChunk(code, _chunk) {\n const injects = _replacements.filter(([envName]) =>\n code.includes(envName),\n );\n\n if (injects.length) {\n const MagicString = (await import('magic-string')).default;\n const ms = new MagicString(code);\n\n const insertPos = findAfterImports(code);\n const injectCode = injects\n .map(([eventName, value]) => `const ${eventName} = ${value};`)\n .join('\\n');\n ms.appendLeft(insertPos, `\\n${injectCode}`);\n\n return {\n code: ms.toString(),\n map: ms.generateMap({ hires: true }),\n };\n }\n },\n };\n}\n","import { type InlineConfig, build } from 'tsdown';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { glob } from 'glob';\nimport type { PlugboyWorkspace, WorkspaceObjectExport } from './workspace';\nimport {\n TSDOWN_SYNC_OPTIONS,\n NormalizedDTSPreserveTypeSettings,\n} from '../types';\nimport { copyDirSync, rmrf, mergeExternals } from '../utils';\nimport { emitDTS } from './dts';\nimport { applyPlugboyEnvs, getPlugboyEnvCodeForStub } from '../env';\n\nconst SHEBANG_MATCH_RE = /^(#!.+?)\\n/;\n\ninterface ResolvedOptions extends InlineConfig {}\n\nexport class Builder {\n readonly workspace: PlugboyWorkspace;\n\n private _tsdownOptions?: ResolvedOptions;\n\n get entry() {\n return this.workspace.entry;\n }\n\n get dts() {\n return this.workspace.dts;\n }\n\n constructor(workspace: PlugboyWorkspace) {\n this.workspace = workspace;\n }\n\n async tsdownOptions(overrides?: {\n watch?: boolean;\n }): Promise<ResolvedOptions> {\n const { _tsdownOptions } = this;\n if (_tsdownOptions) return _tsdownOptions;\n\n const { entry, dts } = this;\n\n const resolvedOptions: ResolvedOptions = {\n dts:\n dts.inline || typeof dts.compiler === 'function'\n ? false\n : dts.compiler === 'vue-tsc'\n ? { vue: true }\n : true,\n treeshake: true,\n css: this.workspace.cssOptions,\n plugins: this.workspace.plugins,\n entry,\n sourcemap: true,\n clean: true,\n ...overrides,\n };\n\n for (const opt of TSDOWN_SYNC_OPTIONS) {\n resolvedOptions[opt] = this.workspace.config[opt] as any;\n }\n\n applyPlugboyEnvs(resolvedOptions);\n\n resolvedOptions.deps ??= {};\n resolvedOptions.deps.neverBundle = mergeExternals(\n resolvedOptions.deps.neverBundle,\n [\n /^(@fastkit\\/)?plugboy(?!\\/runtime-utils)/,\n ...this.workspace.dependencies,\n ],\n );\n\n this._tsdownOptions = resolvedOptions;\n\n return resolvedOptions;\n }\n\n private async _stubLinkJS(from: string, to: string) {\n const fromParsed = path.parse(from);\n const fromDir = fromParsed.dir;\n const toParsed = path.parse(to);\n const toRelativeDir = path.relative(fromDir, toParsed.dir);\n const location = path.join(toRelativeDir, toParsed.base);\n const source = await fs.readFile(to, 'utf-8');\n const shebang = source.match(SHEBANG_MATCH_RE)?.[1];\n const disableChecks = '/* eslint-disable */\\n// @ts-nocheck\\n';\n const code = `${disableChecks}${getPlugboyEnvCodeForStub()}\\nexport * from '${location}';`;\n const dtsPath = path.join(fromDir, `${fromParsed.name}.d.mts`);\n const dtsCode = `${disableChecks}export * from '${location.replace(\n /\\.ts$/,\n '',\n )}';`;\n const srcFromDir = path.dirname(from);\n const dtsDir = path.dirname(dtsPath);\n await Promise.all(\n [srcFromDir, dtsDir].map((dir) => fs.mkdir(dir, { recursive: true })),\n );\n await Promise.all([\n fs.writeFile(from, `${shebang ? `${shebang}\\n` : ''}${code}`),\n fs.writeFile(dtsPath, dtsCode),\n ]);\n }\n\n private async _stubLinkCSS(from: string) {\n const code = `/* noop */`;\n await fs.writeFile(from, code);\n }\n\n async copyPublicDir() {\n const publicDir = this.workspace.dir.join('public').value;\n await copyDirSync(publicDir, this.workspace.dirs.dist.value);\n }\n\n async stub() {\n const links = this.workspace.getStubLinks();\n await this.copyPublicDir();\n await Promise.all(\n links.map((link) => {\n if (link.type === 'js') {\n return this._stubLinkJS(link.from, link.to);\n }\n if (link.type === 'css') {\n return this._stubLinkCSS(link.from);\n }\n throw new Error(`non supported type`);\n }),\n );\n await fs.writeFile(\n this.workspace.dirs.dist.join('.stub').value,\n '',\n 'utf-8',\n );\n }\n\n normalizeDTSBySettings(\n dts: string,\n settings: NormalizedDTSPreserveTypeSettings,\n ): string | undefined {\n const { targets, pkg } = settings;\n const myPackageName = this.workspace.json.name;\n const packageIsOwn = myPackageName === pkg;\n const pkgImports = (() => {\n if (!pkg || packageIsOwn) return;\n\n const importRe = new RegExp(`import {([^\\\\{\\\\}]+)} from '${pkg}'`);\n const importMatched = dts.match(importRe);\n const imports = importMatched && importMatched[1];\n if (!imports) return;\n\n return {\n pkg,\n importRe,\n imports,\n };\n })();\n\n const hitTypeNames: string[] = [];\n targets.forEach(({ from, typeName }) => {\n const matched = dts.match(from);\n if (matched) {\n hitTypeNames.push(typeName);\n dts = dts.replace(from, typeName);\n }\n });\n\n if (!hitTypeNames.length) return;\n\n if (pkgImports) {\n const { pkg, imports, importRe } = pkgImports;\n const mods = imports\n .trim()\n .split(',')\n .map((row) => {\n row = row.split(' as ')[0].trim();\n return row;\n });\n const appends: string[] = [];\n hitTypeNames.forEach((typeName) => {\n const re = new RegExp(`(^|\\n)import { ${typeName} } from '${pkg}'`);\n if (!re.test(dts) && !mods.includes(typeName)) {\n appends.push(typeName);\n }\n });\n if (appends.length) {\n dts = dts.replace(\n importRe,\n `import { $1, ${appends.join(', ')} } from '${pkg}'`,\n );\n }\n } else if (pkg && !packageIsOwn) {\n const mods: string[] = [];\n hitTypeNames.forEach((typeName) => {\n if (!dts.includes(`export declare type ${typeName} = `)) {\n mods.push(typeName);\n }\n });\n if (mods.length) {\n dts = `import { ${mods.join(', ')} } from '${pkg}';\\n${dts}`;\n }\n }\n return dts;\n }\n\n async normalizeDTSFile(filePath: string) {\n const dts = await fs.readFile(filePath, 'utf-8');\n const { preserveType, normalizers } = this.dts;\n let normalized = dts;\n let processed = false;\n for (const settings of preserveType) {\n const _normalized = this.normalizeDTSBySettings(normalized, settings);\n if (_normalized) {\n processed = true;\n normalized = _normalized;\n }\n }\n for (const normalizer of normalizers) {\n const _normalized = await normalizer(normalized, this);\n if (_normalized && normalized !== _normalized) {\n processed = true;\n normalized = _normalized;\n }\n }\n if (!processed) {\n return;\n }\n await fs.writeFile(filePath, normalized, 'utf-8');\n }\n\n async normalizeDTSFiles(dtsFiles: string[] = this.workspace.dtsFiles) {\n const { preserveType } = this.dts;\n if (!preserveType.length || !dtsFiles.length) return;\n\n await Promise.all(\n dtsFiles.map((filePath) => this.normalizeDTSFile(filePath)),\n );\n }\n\n async emitDTSManually() {\n const { dir, dirs, exports } = this.workspace;\n const cwd = dir.value;\n const outDir = dirs.dist.join('.dts-generate').value;\n const dtsSrcDir = path.join(outDir, 'src');\n const dtsDest = dirs.dist.join('.dts').value;\n\n await emitDTS({\n cwd,\n outDir,\n workspace: this.workspace,\n compiler: this.workspace.dts.compiler,\n ignoreCompilerErrors: this.workspace.dts.ignoreCompilerErrors,\n });\n\n await fs.rename(dtsSrcDir, dtsDest);\n await rmrf(outDir);\n\n const objectExports: WorkspaceObjectExport[] = [];\n\n exports.forEach(({ at }) => {\n typeof at === 'object' && objectExports.push(at);\n });\n\n await Promise.all(\n objectExports.map(async (at) => {\n const typesDir = path.dirname(at.types);\n const dtsDestDir = path.dirname(at.dtsDest);\n const relativeDir = path.relative(typesDir, dtsDestDir);\n const relativePath = path.join(\n relativeDir,\n path.basename(at.dtsDest).replace(/\\.d\\.m?ts$/, ''),\n );\n const code = `export * from './${relativePath}';`;\n await fs.writeFile(at.types, code, 'utf-8');\n }),\n );\n\n const dtsFiles = await glob(path.join(dtsDest, '**/*.{d.ts,d.mts}'));\n await this.normalizeDTSFiles(dtsFiles);\n }\n\n async build() {\n const options = await this.tsdownOptions();\n await build(options);\n\n if (this.dts.inline || typeof this.dts.compiler === 'function') {\n await this.emitDTSManually();\n } else {\n await this.normalizeDTSFiles();\n }\n }\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { glob } from 'glob';\nimport { Path } from '../path';\nimport {\n ProjectSetupContext,\n ProjectPackageJson,\n ResolvedProjectConfig,\n UserHooks,\n} from '../types';\nimport { getProjectPackageJson } from '../package';\nimport {\n isWorkspacePackageJson,\n loadProjectConfig,\n resolveUserProjectConfig,\n} from '../utils';\nimport { PACKAGE_JSON_FILENAME } from '../constants';\n\n/**\n * Plugboy Project\n *\n * @remarks This instance is only created if the project consists of a mono-repo.\n */\nexport class PlugboyProject {\n /** Path instance of the project directory */\n readonly dir: Path;\n\n /** package.json */\n readonly json: ProjectPackageJson;\n\n /**\n * Project Configuration\n * @see {@link ResolvedProjectConfig}\n */\n readonly config: ResolvedProjectConfig;\n\n /** Names of all packages on which the project depends */\n readonly dependencies: string[];\n\n /** Directory names of all workspaces owned by the project */\n readonly resolvedWorkspaces: string[];\n\n /**\n * Name of the project's package.json\n */\n get name() {\n return this.json.name;\n }\n\n /**\n * Plug-in List\n * @see {@link ResolvedProjectConfig.plugins}\n */\n get plugins() {\n return this.config.plugins;\n }\n\n /**\n * List of all user hook settings\n * @see {@link UserHooks}\n */\n get hooks(): UserHooks[] {\n const { hooks: _hooks, plugins } = this.config;\n const pluginHooks = plugins.map((plugin) => plugin.hooks);\n return [_hooks, ...pluginHooks].filter((hook) => !!hook);\n }\n\n constructor(ctx: ProjectSetupContext) {\n const { dir, json, config, resolvedWorkspaces } = ctx;\n\n this.dir = dir;\n this.json = json;\n this.config = config;\n\n const allDeps = {\n ...json.dependencies,\n ...json.devDependencies,\n };\n\n this.dependencies = Object.keys(allDeps);\n this.resolvedWorkspaces = resolvedWorkspaces;\n }\n}\n\nexport async function getProject<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n skipLoadConfig?: boolean,\n): Promise<AllowMissing extends true ? PlugboyProject | null : PlugboyProject> {\n const hit = await getProjectPackageJson(searchDir, allowMissing);\n if (!hit) {\n return null as any;\n }\n const { dir, json } = hit;\n const resolvedWorkspaces: string[] = [];\n const { workspaces = [] } = json;\n if (!Array.isArray(workspaces)) {\n throw new Error('workspaces only supports arrays.');\n }\n const workspacesPattern = workspaces.map(\n (workspace) => dir.join(workspace, PACKAGE_JSON_FILENAME).value,\n );\n const workspaceHits = await glob(workspacesPattern);\n for (const _hit of workspaceHits) {\n const _json = JSON.parse(await fs.readFile(_hit, 'utf-8'));\n if (!isWorkspacePackageJson(_json)) {\n continue;\n }\n resolvedWorkspaces.push(path.dirname(_hit));\n }\n resolvedWorkspaces.sort((a, b) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n });\n\n const config = skipLoadConfig\n ? await resolveUserProjectConfig({})\n : await loadProjectConfig(dir.value, 0);\n\n const ctx: ProjectSetupContext = {\n dir,\n json,\n config,\n resolvedWorkspaces,\n };\n\n return new PlugboyProject(ctx);\n}\n","import type { PlugboyWorkspace } from '../workspace';\nimport type { Plugin, ResolvedOptimizeCSSOptions } from '../types';\nimport type { Processor, AcceptedPlugin as PostcssPlugin } from 'postcss';\nimport type { RolldownChunk } from 'tsdown';\n\n/**\n * The rolldown `OutputAsset` type.\n *\n * tsdown no longer re-exports rolldown's `OutputAsset` directly, and rolldown\n * itself is not a direct dependency. We therefore derive it from the only\n * rolldown-output type tsdown still exposes (`RolldownChunk`), which is\n * `(OutputChunk | OutputAsset) & { outDir: string }`.\n *\n * - `Extract<..., { type: 'asset' }>` picks the asset variant via its discriminant.\n * - `Omit<..., 'outDir'>` drops the tsdown-specific augmentation so the type\n * matches the plain assets handed to rolldown's `generateBundle` hook.\n */\ntype OutputAsset = Omit<Extract<RolldownChunk, { type: 'asset' }>, 'outDir'>;\n\nasync function getPostcss(\n options: ResolvedOptimizeCSSOptions,\n): Promise<Processor> {\n const { layer, media, combineRules, cssnano } = options;\n const [postcss, _layer, _media, _combineRules, _cssnano] = await Promise.all([\n import('postcss').then((mod) => mod.default),\n layer &&\n import('../postcss/plugins/optimize-layer').then((mod) =>\n mod.OptimizeLayer(layer),\n ),\n media &&\n import('../postcss/plugins/optimize-media').then((mod) =>\n mod.OptimizeMedia(media),\n ),\n combineRules &&\n import('../postcss/plugins/combine-rules').then((mod) =>\n mod.CombineRules(combineRules),\n ),\n cssnano && import('cssnano').then((mod) => mod.default(cssnano)),\n ]);\n const plugins: PostcssPlugin[] = [];\n _layer && plugins.push(_layer);\n _media && plugins.push(_media);\n _combineRules && plugins.push(_combineRules);\n _cssnano && plugins.push(_cssnano);\n\n return postcss(plugins);\n}\n\nconst SOURCE_MAPPING_URL_COMMENT_RE = /\\/\\*# sourceMappingURL=.+? \\*\\//g;\nconst allLayerDefRe = /(^|\\n)@layer\\s+([a-zA-Z\\d\\-_$. ,]+);/g;\nconst layerDefTrimRe = /((^|\\n)@layer\\s+|;)/g;\n\nasync function optimizeCSS(\n asset: OutputAsset,\n options: ResolvedOptimizeCSSOptions,\n) {\n const postcss = await getPostcss(options);\n // let postcss = this._postcssCache;\n // if (!postcss) {\n // postcss = await getPostcss(options);\n // this._postcssCache = postcss;\n // }\n\n function prepare(css: string): string {\n const layerDefs = (() => {\n const matched = css.match(allLayerDefRe);\n if (!matched) return '';\n const layerNames: string[] = [];\n matched.forEach((row) => {\n const trimmed = row.replace(layerDefTrimRe, '');\n const chunks = trimmed.split(',');\n chunks.forEach((chunk) => layerNames.push(chunk.trim()));\n });\n const uniqued = Array.from(new Set(layerNames));\n const def = `@layer ${uniqued.join(', ')};\\n`;\n return def;\n })();\n return layerDefs + css.replace(allLayerDefRe, '');\n }\n\n const css = prepare(asset.source.toString());\n\n const result = await postcss.process(css, {\n from: asset.fileName,\n to: asset.fileName,\n map: { inline: false },\n });\n\n asset.source = result.css.replace(SOURCE_MAPPING_URL_COMMENT_RE, '');\n}\n\nexport function OptimizeCSSPlugin(workspace: PlugboyWorkspace): Plugin {\n return {\n name: 'plugboy-optimize-css',\n async generateBundle(_options, bundle) {\n const { optimizeCSSOptions } = workspace;\n if (!optimizeCSSOptions) return;\n\n for (const chunk of Object.values(bundle)) {\n if (chunk.type !== 'asset' || !chunk.fileName.endsWith('.css')) {\n continue;\n }\n await optimizeCSS(chunk, optimizeCSSOptions);\n }\n },\n };\n}\n","import { Plugin } from '../../types';\nimport fs from 'node:fs/promises';\n\nexport const rawLoaderPlugin: Plugin = {\n name: 'raw-loader',\n async resolveId(id, importer, options) {\n if (!id.endsWith('?raw')) return null;\n\n const rawPath = id.slice(0, -4); // remove '?raw'\n\n // Resolve a relative path to an absolute path\n const resolved = await this.resolve(rawPath, importer, {\n ...options,\n skipSelf: true,\n });\n\n if (!resolved) return null;\n\n // Return the resolved absolute path with a marker\n return `\\0raw:${resolved.id}`;\n },\n\n async load(id) {\n if (!id.startsWith('\\0raw:')) return null;\n\n const realPath = id.slice(5); // remove '\\0raw:'\n const content = await fs.readFile(realPath, 'utf-8');\n return `export default ${JSON.stringify(content)};`;\n },\n};\n","import { definePlugin } from '../../utils';\n\n/**\n * Plugin to preserve CSS @import statements\n *\n * rolldown tries to resolve and inline CSS @import statements,\n * but external package CSS should be treated as external and output @import as-is.\n *\n * Note: rolldown parses and optimizes CSS independently, so placeholder approach doesn't work.\n * Instead, collect external import paths and prepend them to CSS in generateBundle.\n */\n\n/**\n * Regular expression for CSS @import (with optional layer() support)\n *\n * Supports the following patterns:\n * - @import 'path';\n * - @import \"path\";\n * - @import url(path);\n * - @import url('path');\n * - @import url(\"path\");\n * - @import url('path') layer(name);\n * - @import 'path' layer(name);\n *\n * Captures:\n * 1: import path\n * 2: layer specification (e.g. \" layer(fabric.foundation)\") or undefined\n */\nconst EXTERNAL_IMPORT_REGEX =\n /@import\\s+(?:url\\(\\s*['\"]?|['\"])([^'\"\\s);]+)(?:['\"]?\\s*\\)|['\"])(\\s+layer\\([^)]+\\))?\\s*;/g;\n\ninterface ExternalCssImport {\n path: string;\n layer?: string;\n}\n\nfunction externalImportKey(entry: ExternalCssImport): string {\n return entry.layer ? `${entry.path}::${entry.layer}` : entry.path;\n}\n\nexport function createPreserveCssImportsPlugin() {\n // Collect external CSS imports (using Map keyed by path+layer to avoid duplicates)\n const externalCssImports = new Map<string, ExternalCssImport>();\n\n return definePlugin({\n name: 'preserve-css-imports',\n transform: {\n handler(code: string, id: string) {\n // Only process CSS files\n if (!id.endsWith('.css')) {\n return null;\n }\n\n // Detect external package @import statements, collect them, and remove\n let hasExternalImports = false;\n const transformed = code.replace(\n EXTERNAL_IMPORT_REGEX,\n (match, importPath: string, layerSpec?: string) => {\n // If not a relative path (./) or absolute path (/), treat as package reference from node_modules\n if (!importPath.startsWith('.') && !importPath.startsWith('/')) {\n hasExternalImports = true;\n const entry: ExternalCssImport = {\n path: importPath,\n layer: layerSpec?.trim(),\n };\n externalCssImports.set(externalImportKey(entry), entry);\n // Remove @import (replace with empty string)\n return '';\n }\n return match;\n },\n );\n\n if (hasExternalImports) {\n return { code: transformed, map: null };\n }\n return null;\n },\n },\n generateBundle: {\n handler(_options, bundle) {\n // Prepend collected external imports to CSS\n if (externalCssImports.size === 0) {\n return;\n }\n\n const importStatements = Array.from(externalCssImports.values())\n .map(({ path, layer }) =>\n layer ? `@import '${path}' ${layer};` : `@import '${path}';`,\n )\n .join('\\n');\n\n for (const chunk of Object.values(bundle)) {\n if (\n chunk.type === 'asset' &&\n typeof chunk.source === 'string' &&\n chunk.fileName.endsWith('.css')\n ) {\n (chunk as { source: string }).source =\n importStatements + '\\n' + chunk.source;\n }\n }\n },\n },\n });\n}\n","import sortPackageJson from 'sort-package-json';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport {\n rmrf,\n loadWorkspaceConfig,\n resolveUserHooks,\n buildHooks,\n mergeExternals,\n mergeNoExternals,\n writeFileAtomic,\n} from '../utils';\nimport {\n type ProjectPackageJson,\n type WorkspacePackageJson,\n type ResolvedWorkspaceConfig,\n type WorkspaceDirs,\n type WorkspaceSetupContext,\n type WorkspaceMeta,\n type Plugin,\n type UserHooks,\n type BuildedHooks,\n mergeDTSSettingsList,\n type NormalizedDTSSettings,\n type ResolvedOptimizeCSSOptions,\n resolveOptimizeCSSOptions,\n} from '../types';\nimport { Path } from '../path';\nimport { WORKSPACE_SPEC_PREFIX, PACKAGE_JSON_FILENAME } from '../constants';\nimport { PlugboyProject, getProject } from '../project';\nimport { Builder } from './builder';\nimport { getWorkspacePackageJson } from '../package';\nimport { WorkspaceEnvPlugin } from '../env';\nimport { OptimizeCSSPlugin } from '../postcss/plugin';\nimport { rawLoaderPlugin, createPreserveCssImportsPlugin } from './plugins';\nimport { type CssOptions } from '@tsdown/css';\n\nexport type WorkspaceStubLink =\n | {\n type: 'js';\n from: string;\n to: string;\n }\n | {\n type: 'css';\n from: string;\n };\n\nexport type WorkspaceStubLinkType = WorkspaceStubLink['type'];\n\nexport interface WorkspaceObjectExport {\n src: string;\n types: string;\n dtsDest: string;\n import: {\n default: string;\n };\n}\n\nfunction extractWorkspaceObjectExport(at: string | WorkspaceObjectExport) {\n if (typeof at === 'string') return at;\n const { types, import: _import } = at;\n return {\n types,\n import: _import,\n };\n}\n\nexport interface WorkspaceExport {\n id: string;\n at: string | WorkspaceObjectExport;\n stubLink?: WorkspaceStubLink;\n}\n\nexport const WORKSPACE_PACKAGE_SYNC_FIELDS = [\n 'repository',\n 'author',\n 'publishConfig',\n 'license',\n] as const;\n\nexport function syncWorkspacePackageFields(\n projectJSON: ProjectPackageJson,\n workspaceJSON: WorkspacePackageJson,\n) {\n for (const field of WORKSPACE_PACKAGE_SYNC_FIELDS) {\n const value = projectJSON[field];\n if (value && !workspaceJSON[field]) {\n workspaceJSON[field] = value as any;\n }\n }\n}\n\nconst BUILD_TARGET_SRC_MATCH_RE = /\\.(tsx?|s?css)$/;\n\nexport class PlugboyWorkspace {\n readonly name: string;\n\n readonly dir: Path;\n\n readonly config: ResolvedWorkspaceConfig;\n\n readonly project: PlugboyProject | null;\n\n readonly dirs: WorkspaceDirs;\n\n readonly dependencies: string[];\n\n readonly projectDependencies: string[];\n\n readonly meta: WorkspaceMeta;\n\n readonly entry: Record<string, string>;\n\n readonly exports: WorkspaceExport[];\n\n readonly builder: Builder;\n\n readonly plugins: Plugin[];\n\n readonly hooks: BuildedHooks;\n\n readonly dtsFiles: string[] = [];\n\n readonly dts: NormalizedDTSSettings;\n\n cssOptions: CssOptions | undefined;\n\n readonly optimizeCSSOptions: ResolvedOptimizeCSSOptions | false;\n\n private _json: WorkspacePackageJson;\n\n get json() {\n return this._json;\n }\n\n constructor(ctx: WorkspaceSetupContext) {\n const {\n dir,\n json,\n config,\n project,\n dirs,\n dependencies,\n projectDependencies,\n meta,\n plugins,\n hooks,\n dts,\n css,\n optimizeCSS,\n } = ctx;\n\n this.name = dir.basename;\n this.dir = dir;\n this._json = json;\n this.project = project;\n this.dirs = dirs;\n this.dependencies = dependencies;\n this.projectDependencies = projectDependencies;\n this.meta = meta;\n this.config = config;\n this.plugins = [\n ...plugins,\n OptimizeCSSPlugin(this),\n WorkspaceEnvPlugin(this),\n rawLoaderPlugin,\n createPreserveCssImportsPlugin(),\n ];\n this.hooks = hooks;\n this.dts = dts;\n this.cssOptions = css;\n this.optimizeCSSOptions = optimizeCSS\n ? resolveOptimizeCSSOptions(optimizeCSS)\n : false;\n\n const entry: Record<string, string> = {};\n const exports: WorkspaceExport[] = [\n {\n id: `./${PACKAGE_JSON_FILENAME}`,\n at: `./${PACKAGE_JSON_FILENAME}`,\n },\n ];\n\n Object.entries(config.entries).forEach(([id, { src, css }]) => {\n if (!BUILD_TARGET_SRC_MATCH_RE.test(src)) return;\n\n const isMainEntry = id === '.';\n const normalizedId = isMainEntry ? this.name : id;\n const exportId = id.startsWith('.') ? id : `./${id}`;\n const srcIsCSS = src.endsWith('.css') || src.endsWith('.scss');\n const ext = srcIsCSS ? 'css' : 'mjs';\n const dest = `./dist/${normalizedId}.${ext}`;\n const destFullPath = dir.join(dest).value;\n\n entry[normalizedId] = src;\n\n if (css) {\n const cssDest = `./dist/${normalizedId}.css`;\n exports.push({\n id: `./${normalizedId}.css`,\n at: cssDest,\n stubLink: {\n type: 'css',\n from: cssDest,\n },\n });\n\n if (srcIsCSS) return;\n }\n\n const types = `./dist/${normalizedId}.d.mts`;\n const dtsDest = `./dist/${src\n .replace(/^\\.\\/src/, '.dts')\n .replace(/\\.ts$/, '.d.mts')}`;\n\n this.dtsFiles.push(dir.join(types).value);\n exports.push({\n id: exportId,\n at: {\n src,\n types,\n dtsDest,\n import: {\n default: dest,\n },\n },\n stubLink: {\n from: destFullPath,\n to: path.isAbsolute(src) ? src : dir.join(src).value,\n type: 'js',\n },\n });\n });\n\n this.entry = entry;\n this.exports = exports;\n this.builder = new Builder(this);\n }\n\n clean(withDepsAndCache?: boolean) {\n const { dir, dirs } = this;\n const paths: string[] = [dirs.dist.value];\n if (withDepsAndCache) {\n paths.push(dir.join('node_modules').value, dir.join('.turbo').value);\n }\n return rmrf(...paths);\n }\n\n async preparePackageJSON() {\n const { exports, json, project } = this;\n const _exports: Record<string, any> = {};\n const typesVersions: Record<string, any> = {};\n let main: string | undefined;\n let mainTypes: string | undefined;\n\n exports.forEach(({ id, at }) => {\n const _at = extractWorkspaceObjectExport(at);\n _exports[id] = _at;\n if (typeof _at !== 'object') return;\n const isMainExport = id === '.';\n const trimmedId = isMainExport ? id : id.replace(/^\\.\\//, '');\n typesVersions[trimmedId] = [_at.types];\n\n if (isMainExport) {\n main = _at.import.default;\n mainTypes = _at.types;\n }\n });\n\n if (json.exports) {\n const entries = Object.entries(json.exports);\n entries.forEach(([id, at]) => {\n const types = Object.keys(at!);\n if (types.length === 1 && types[0] === 'types') {\n _exports[id] = at;\n }\n });\n }\n\n _exports['./*'] = './dist/*';\n\n const originalJSONString = JSON.stringify(json);\n const cloned: typeof json = JSON.parse(originalJSONString);\n cloned.exports = _exports;\n cloned.typesVersions = {\n '*': typesVersions,\n };\n if (main) cloned.main = main;\n if (mainTypes) cloned.types = mainTypes;\n\n // delete cloned.main;\n // delete cloned.types;\n // delete cloned.typesVersions;\n\n const projectPeerDependencies = project?.config.peerDependencies;\n (['dependencies', 'devDependencies', 'peerDependencies'] as const).forEach(\n (prop) => {\n const deps = cloned[prop];\n if (!deps) return;\n Object.keys(deps).forEach((dep) => {\n const version = deps[dep];\n if (version.startsWith(WORKSPACE_SPEC_PREFIX)) {\n deps[dep] = `${WORKSPACE_SPEC_PREFIX}^`;\n } else if (\n projectPeerDependencies &&\n projectPeerDependencies[dep] &&\n !deps[dep]\n ) {\n deps[dep] = projectPeerDependencies[dep];\n }\n });\n },\n );\n\n cloned.files = cloned.files || [];\n if (!cloned.files.some((file) => /(\\.\\/)?dist\\/?/.test(file))) {\n cloned.files.unshift('dist');\n }\n\n if (project) {\n syncWorkspacePackageFields(project.json, cloned);\n }\n\n cloned.type = cloned.type || 'module';\n\n await this.hooks.preparePackageJSON(json, this);\n\n const sorted = sortPackageJson(cloned);\n const toStr = JSON.stringify(sorted, null, 2);\n if (originalJSONString !== toStr) {\n await writeFileAtomic(this.dir.join(PACKAGE_JSON_FILENAME).value, toStr);\n this._json = sorted;\n }\n return sorted;\n }\n\n getStubLinks(): WorkspaceStubLink[] {\n const links: WorkspaceStubLink[] = [];\n this.exports.forEach(({ stubLink }) => {\n stubLink && links.push(stubLink);\n });\n return links;\n }\n\n async stub() {\n await this.clean();\n await fs.mkdir(this.dirs.dist.value);\n return this.builder.stub();\n }\n\n async build() {\n await this.clean();\n return this.builder.build();\n }\n}\n\nexport async function getWorkspace<\n AllowMissing extends boolean | undefined = false,\n>(\n searchDir?: string,\n allowMissing?: AllowMissing,\n): Promise<\n AllowMissing extends true ? PlugboyWorkspace | null : PlugboyWorkspace\n> {\n const hit = await getWorkspacePackageJson(searchDir, allowMissing);\n if (!hit) {\n return null as any;\n }\n const { dir, json } = hit;\n const config = await loadWorkspaceConfig(dir.value, 0);\n\n const project = await getProject(dir.value, true, config.ignoreProjectConfig);\n\n const dirs: WorkspaceDirs = {\n src: dir.join('src'),\n dist: dir.join('dist'),\n };\n\n const { dependencies, peerDependencies, optionalDependencies } = json;\n const allDeps = {\n ...dependencies,\n ...peerDependencies,\n ...optionalDependencies,\n };\n\n const _dependencies = Object.keys(allDeps);\n\n const projectDependencies = Object.entries(allDeps)\n .filter(([dep, spec]) => spec.startsWith(WORKSPACE_SPEC_PREFIX))\n .map(([dep]) => dep);\n\n const meta: WorkspaceMeta = {};\n\n const projectPlugins = project?.plugins || [];\n const projectHooks = project?.hooks || [];\n const plugins: Plugin[] = [...projectPlugins, ...config.plugins];\n const _hooks: UserHooks[] = [...projectHooks];\n if (config.hooks) {\n _hooks.push(config.hooks);\n }\n for (const plugin of config.plugins) {\n if (plugin.hooks) {\n _hooks.push(plugin.hooks);\n }\n }\n const resolvedHooks = await resolveUserHooks(..._hooks);\n const hooks = buildHooks(resolvedHooks);\n\n const dts = mergeDTSSettingsList(project?.config.dts, config.dts);\n\n let { optimizeCSS } = config;\n if (optimizeCSS !== false && project && project.config.optimizeCSS) {\n optimizeCSS = {\n ...project.config.optimizeCSS,\n ...optimizeCSS,\n };\n }\n\n const ctx: WorkspaceSetupContext = {\n dir,\n json,\n config,\n project,\n dirs,\n dependencies: _dependencies,\n projectDependencies,\n meta,\n plugins,\n hooks,\n dts,\n css: config.css,\n optimizeCSS,\n mergeExternals: (override) => {\n config.deps ??= {};\n config.deps.neverBundle = mergeExternals(\n config.deps.neverBundle,\n override,\n );\n },\n mergeNoExternals: (override) => {\n config.deps ??= {};\n config.deps.alwaysBundle = mergeNoExternals(\n config.deps.alwaysBundle,\n override,\n );\n },\n };\n\n await hooks.setupWorkspace(ctx, () => {\n return typeof workspace === 'undefined' ? undefined : workspace;\n });\n\n const workspace = new PlugboyWorkspace(ctx);\n\n await hooks.createWorkspace(workspace);\n\n return workspace;\n}\n","/* eslint-disable no-console */\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport sortPackageJson from 'sort-package-json';\nimport * as prompts from '@inquirer/prompts';\nimport { getProject } from '../project';\nimport { getWorkspace, syncWorkspacePackageFields } from '../workspace';\nimport { WorkspacePackageJson, ProjectScriptsTemplate } from '../types';\nimport { WORKSPACE_CONFIG_BASENAME, WORKSPACE_SPEC_PREFIX } from '../constants';\n\nexport async function generateWorkspace(\n workspaceName?: string,\n cwd = process.cwd(),\n) {\n const project = await getProject(cwd);\n const { config } = project;\n\n // ====================\n // workspace name\n // ====================\n while (!workspaceName) {\n const value = await prompts.input({\n message: 'Enter a workspace name',\n });\n\n if (value) {\n workspaceName = value;\n }\n }\n\n // ====================\n // description\n // ====================\n const description = await prompts.input({\n default: workspaceName,\n message: 'Please enter a description of your package',\n });\n\n // ====================\n // version\n // ====================\n let version: string | undefined;\n while (!version) {\n const value = await prompts.input({\n default: '0.0.0',\n message: 'Please enter the initial version',\n });\n\n if (value) {\n version = value;\n }\n }\n\n // ====================\n // keywords\n // ====================\n const rawKeywords = await prompts.input({\n message: 'Enter as many keywords, if any, as needed, separated by commas',\n });\n\n const keywords = (rawKeywords as string)\n .split(',')\n .map((word) => word.trim())\n .filter((word) => word.length);\n\n // ====================\n // scripts\n // ====================\n const scriptsTemplates = config.scripts;\n let scriptsTemplate: ProjectScriptsTemplate | undefined;\n if (scriptsTemplates && scriptsTemplates.length) {\n const value = await prompts.rawlist({\n message: 'Select a scripts template',\n choices: [\n { name: 'None', value: '' },\n ...scriptsTemplates.map((tpl) => ({\n name: tpl.name,\n value: tpl.name,\n })),\n ],\n });\n scriptsTemplate = scriptsTemplates.find((tpl) => tpl.name === value);\n }\n const scripts = scriptsTemplate?.scripts || {};\n\n // ====================\n // peerDependencies\n // ====================\n const peerDependencies = await (async () => {\n const deps = await prompts.checkbox({\n message:\n 'Select the dependent packages, if any, to be used in the package',\n choices: Object.keys(config.peerDependencies).map((dep) => ({\n name: dep,\n value: dep,\n })),\n });\n if (!deps.length) return;\n return Object.fromEntries(\n deps.map((dep) => [dep, config.peerDependencies[dep]]),\n );\n })();\n\n // ====================\n // dependencies\n // ====================\n const dependencies = await (async () => {\n const deps = await prompts.checkbox({\n message: 'Select the internal package to be used, if any.',\n choices: project.resolvedWorkspaces.map((workspace) => {\n const name = path.basename(workspace);\n return {\n name,\n value: name,\n };\n }),\n });\n if (!deps.length) return;\n return Object.fromEntries(\n deps.map((dep) => [\n `@${project.name}/${dep}`,\n `${WORKSPACE_SPEC_PREFIX}^`,\n ]),\n );\n })();\n\n // ====================\n // Generate source files?\n // ====================\n const withGenSource = await prompts.confirm({\n message: 'Generate source files?',\n default: true,\n });\n\n // ====================\n // final confirmation\n // ====================\n const _json: WorkspacePackageJson = {\n name: `@${project.name}/${workspaceName}`,\n type: 'module',\n description,\n version,\n keywords,\n scripts,\n peerDependencies,\n dependencies,\n };\n\n syncWorkspacePackageFields(project.json, _json);\n\n const json = sortPackageJson(_json);\n\n const workspaceDir = path.join(config.workspacesDir, workspaceName);\n\n console.log('');\n console.log('========================================');\n console.log(`Directory: ${workspaceDir}`);\n console.log(`Generate source: ${withGenSource ? 'Yes' : 'No'}`);\n console.log(json);\n console.log('========================================');\n\n const confirmation = await prompts.confirm({\n message: 'Is this OK?',\n default: true,\n });\n\n if (!confirmation) {\n console.log('Skipped.');\n process.exit(1);\n }\n\n // 1. Create directory\n await fs.mkdir(workspaceDir);\n\n // 2. Write package.json\n await fs.writeFile(\n path.join(workspaceDir, 'package.json'),\n JSON.stringify(json, null, 2),\n );\n\n // 3. Write README.md\n await fs.writeFile(path.join(workspaceDir, 'README.md'), config.readme(json));\n\n // 3. Generate source\n if (withGenSource) {\n const srcDir = path.join(workspaceDir, 'src');\n await fs.mkdir(srcDir);\n\n const indexCode = `export * from './${workspaceName}';\\n`;\n const modCode = `export const PACKAGE_NAME = './${workspaceName}';\\n`;\n\n await fs.writeFile(path.join(srcDir, 'index.ts'), indexCode);\n await fs.writeFile(path.join(srcDir, `${workspaceName}.ts`), modCode);\n\n const { tsconfig } = config;\n if (tsconfig) {\n await fs.writeFile(\n path.join(workspaceDir, 'tsconfig.json'),\n JSON.stringify(tsconfig, null, 2),\n );\n }\n\n const configFileCode = `${`\nimport { defineWorkspaceConfig } from '@fastkit/plugboy';\n\nexport default defineWorkspaceConfig({\n entries: {\n '.': './src/index.ts',\n },\n});\n `.trim()}\\n`;\n await fs.writeFile(\n path.join(workspaceDir, `${WORKSPACE_CONFIG_BASENAME}.ts`),\n configFileCode,\n );\n\n const workspace = await getWorkspace(workspaceDir);\n await workspace.preparePackageJSON();\n }\n}\n"],"mappings":"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"}