@vp-tw/dirwell 0.1.0-alpha.1 → 0.1.0-alpha.3
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/CHANGELOG.md +12 -0
- package/README.md +63 -157
- package/THEME_PACKAGE_CONTRACT.md +3 -3
- package/THEMING.md +7 -7
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/dist/bin.mjs +1 -1
- package/dist/bun.d.mts +1 -1
- package/dist/bun.mjs +1 -1
- package/dist/{config-BJG2Zc3Q.d.mts → config-CJutlaP0.d.mts} +2 -2
- package/dist/esbuild.d.mts +1 -1
- package/dist/esbuild.mjs +1 -1
- package/dist/farm.d.mts +1 -1
- package/dist/farm.mjs +1 -1
- package/dist/generator-CtX3iHhK.mjs.map +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/{model-CWjYM17j.d.mts → model-D5PPrgIs.d.mts} +6 -1
- package/dist/rolldown.d.mts +1 -1
- package/dist/rolldown.mjs +1 -1
- package/dist/rollup.d.mts +1 -1
- package/dist/rollup.mjs +1 -1
- package/dist/rsbuild.d.mts +1 -1
- package/dist/rsbuild.mjs +1 -1
- package/dist/rspack.d.mts +1 -1
- package/dist/rspack.mjs +1 -1
- package/dist/{theme-components-DW0fv9_C.d.mts → theme-components-7e00FJN0.d.mts} +3 -3
- package/dist/theme-components.d.mts +1 -1
- package/dist/{unplugin-p6AXhL4F.mjs → unplugin-3KZVc7em.mjs} +5 -2
- package/dist/{unplugin-p6AXhL4F.mjs.map → unplugin-3KZVc7em.mjs.map} +1 -1
- package/dist/{unplugin-CKRUCTgW.d.mts → unplugin-BEWhmsTM.d.mts} +6 -3
- package/dist/unplugin.d.mts +1 -1
- package/dist/unplugin.mjs +1 -1
- package/dist/vite.d.mts +1 -1
- package/dist/webpack.d.mts +1 -1
- package/dist/webpack.mjs +1 -1
- package/package.json +1 -1
|
@@ -30,6 +30,7 @@ interface SymlinkMetadata {
|
|
|
30
30
|
}
|
|
31
31
|
interface FileSystemEntry {
|
|
32
32
|
readonly name: string;
|
|
33
|
+
/** Node-side source path; custom themes must not serialize it into public output. */
|
|
33
34
|
readonly absolutePath: string;
|
|
34
35
|
readonly relativePath: string;
|
|
35
36
|
readonly kind: EntryKind;
|
|
@@ -47,6 +48,7 @@ interface DirectoryData {
|
|
|
47
48
|
}
|
|
48
49
|
type OutputNameResolver = (directory: DirectoryData) => string | null | Promise<string | null>;
|
|
49
50
|
interface RenderedPage {
|
|
51
|
+
/** Complete document. Escape source names and other untrusted text before insertion. */
|
|
50
52
|
readonly html: string;
|
|
51
53
|
readonly assets?: Readonly<Record<string, string | Uint8Array>>;
|
|
52
54
|
}
|
|
@@ -75,6 +77,7 @@ interface ExplorerTheme {
|
|
|
75
77
|
readonly name: string;
|
|
76
78
|
/** Set to false when the theme does not offer global search. */
|
|
77
79
|
readonly searchIndex?: boolean;
|
|
80
|
+
/** Owns the document and assets; async renderers are awaited before output replacement. */
|
|
78
81
|
readonly render: (context: ThemeContext) => RenderedPage | Promise<RenderedPage>;
|
|
79
82
|
}
|
|
80
83
|
interface GenerateOptions {
|
|
@@ -82,11 +85,13 @@ interface GenerateOptions {
|
|
|
82
85
|
readonly include?: string | readonly string[];
|
|
83
86
|
readonly exclude?: string | readonly string[];
|
|
84
87
|
readonly sourceDir: string;
|
|
88
|
+
/** Dedicated output tree, replaced after a successful build. Keep unrelated files elsewhere. */
|
|
85
89
|
readonly outputDir: string;
|
|
86
90
|
readonly mode?: "mpa" | "ssg";
|
|
87
91
|
readonly mirror?: boolean;
|
|
88
92
|
readonly outputName?: OutputNameResolver | string;
|
|
89
93
|
readonly theme?: ExplorerTheme;
|
|
94
|
+
/** Equivalent to `urls` in dirwell.config.ts; defaults to portable relative links. */
|
|
90
95
|
readonly urlStrategy?: "base" | "html-base" | "relative";
|
|
91
96
|
readonly symlinks?: {
|
|
92
97
|
readonly follow?: boolean;
|
|
@@ -97,4 +102,4 @@ interface GenerateOptions {
|
|
|
97
102
|
}
|
|
98
103
|
//#endregion
|
|
99
104
|
export { FileSystemEntry as a, NameSortMode as c, SortDirection as d, SortField as f, ThemeContext as h, FileMetadata as i, OutputNameResolver as l, SymlinkMetadata as m, EntryKind as n, FileTimes as o, SortOptions as p, ExplorerTheme as r, GenerateOptions as s, DirectoryData as t, RenderedPage as u };
|
|
100
|
-
//# sourceMappingURL=model-
|
|
105
|
+
//# sourceMappingURL=model-D5PPrgIs.d.mts.map
|
package/dist/rolldown.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as DirwellPluginOptions, t as DirwellPluginInput } from "./unplugin-
|
|
1
|
+
import { n as DirwellPluginOptions, t as DirwellPluginInput } from "./unplugin-BEWhmsTM.mjs";
|
|
2
2
|
import { UnpluginInstance } from "unplugin";
|
|
3
3
|
//#region src/rolldown.d.ts
|
|
4
4
|
declare const plugin: UnpluginInstance<DirwellPluginInput, true>["rolldown"];
|
package/dist/rolldown.mjs
CHANGED
package/dist/rollup.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as DirwellPluginOptions, t as DirwellPluginInput } from "./unplugin-
|
|
1
|
+
import { n as DirwellPluginOptions, t as DirwellPluginInput } from "./unplugin-BEWhmsTM.mjs";
|
|
2
2
|
import { UnpluginInstance } from "unplugin";
|
|
3
3
|
//#region src/rollup.d.ts
|
|
4
4
|
declare const plugin: UnpluginInstance<DirwellPluginInput, true>["rollup"];
|
package/dist/rollup.mjs
CHANGED
package/dist/rsbuild.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as DirwellPluginOptions, t as DirwellPluginInput } from "./unplugin-
|
|
1
|
+
import { n as DirwellPluginOptions, t as DirwellPluginInput } from "./unplugin-BEWhmsTM.mjs";
|
|
2
2
|
import { UnpluginInstance } from "unplugin";
|
|
3
3
|
//#region src/rsbuild.d.ts
|
|
4
4
|
declare const plugin: UnpluginInstance<DirwellPluginInput, true>["rsbuild"];
|
package/dist/rsbuild.mjs
CHANGED
package/dist/rspack.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as DirwellPluginOptions, t as DirwellPluginInput } from "./unplugin-
|
|
1
|
+
import { n as DirwellPluginOptions, t as DirwellPluginInput } from "./unplugin-BEWhmsTM.mjs";
|
|
2
2
|
import { UnpluginInstance } from "unplugin";
|
|
3
3
|
//#region src/rspack.d.ts
|
|
4
4
|
declare const plugin: UnpluginInstance<DirwellPluginInput, true>["rspack"];
|
package/dist/rspack.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as FileSystemEntry, c as NameSortMode, d as SortDirection, f as SortField, t as DirectoryData } from "./model-
|
|
1
|
+
import { a as FileSystemEntry, c as NameSortMode, d as SortDirection, f as SortField, t as DirectoryData } from "./model-D5PPrgIs.mjs";
|
|
2
2
|
//#region src/theme-project.d.ts
|
|
3
3
|
interface ThemeProject {
|
|
4
4
|
readonly author: string;
|
|
@@ -23,7 +23,7 @@ interface DefaultThemeIconSet {
|
|
|
23
23
|
readonly light: DefaultThemeIconVariant;
|
|
24
24
|
/** Omit to use the light icons in both color schemes. */
|
|
25
25
|
readonly dark?: DefaultThemeIconVariant;
|
|
26
|
-
/** Optional attribution included in generated sites and linked as
|
|
26
|
+
/** Optional attribution included in generated sites and linked as Icon licenses. */
|
|
27
27
|
readonly notice?: string;
|
|
28
28
|
}
|
|
29
29
|
interface ResolvedIconVariant {
|
|
@@ -138,4 +138,4 @@ type DirwellThemeComponentOverrides = Partial<DirwellThemeComponents>;
|
|
|
138
138
|
declare function resolveThemeComponents(defaults: DirwellThemeComponents, ...layers: readonly DirwellThemeComponentOverrides[]): DirwellThemeComponents;
|
|
139
139
|
//#endregion
|
|
140
140
|
export { resolveThemeComponents as _, DirwellThemeComponents as a, ThemeProjectOptions as b, EntryListProps as c, FooterProps as d, IconName as f, ToolbarProps as g, ThemeComponent as h, DirwellThemeComponentOverrides as i, EntryNavigation as l, PageShellProps as m, BreadcrumbsProps as n, EmptyStateProps as o, IconProps as p, DefaultThemeRuntimeConfig as r, EntryListItem as s, BreadcrumbItem as t, EntryRowProps as u, DefaultThemeIconSet as v, DefaultThemeIconVariant as y };
|
|
141
|
-
//# sourceMappingURL=theme-components-
|
|
141
|
+
//# sourceMappingURL=theme-components-7e00FJN0.d.mts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as resolveThemeComponents, a as DirwellThemeComponents, c as EntryListProps, d as FooterProps, f as IconName, g as ToolbarProps, h as ThemeComponent, i as DirwellThemeComponentOverrides, l as EntryNavigation, m as PageShellProps, n as BreadcrumbsProps, o as EmptyStateProps, p as IconProps, r as DefaultThemeRuntimeConfig, s as EntryListItem, t as BreadcrumbItem, u as EntryRowProps } from "./theme-components-
|
|
1
|
+
import { _ as resolveThemeComponents, a as DirwellThemeComponents, c as EntryListProps, d as FooterProps, f as IconName, g as ToolbarProps, h as ThemeComponent, i as DirwellThemeComponentOverrides, l as EntryNavigation, m as PageShellProps, n as BreadcrumbsProps, o as EmptyStateProps, p as IconProps, r as DefaultThemeRuntimeConfig, s as EntryListItem, t as BreadcrumbItem, u as EntryRowProps } from "./theme-components-7e00FJN0.mjs";
|
|
2
2
|
export { BreadcrumbItem, BreadcrumbsProps, DefaultThemeRuntimeConfig, DirwellThemeComponentOverrides, DirwellThemeComponents, EmptyStateProps, EntryListItem, EntryListProps, EntryNavigation, EntryRowProps, FooterProps, IconName, IconProps, PageShellProps, ThemeComponent, ToolbarProps, resolveThemeComponents };
|
|
@@ -403,7 +403,10 @@ const core = createUnplugin((options, meta) => {
|
|
|
403
403
|
};
|
|
404
404
|
});
|
|
405
405
|
});
|
|
406
|
-
/**
|
|
406
|
+
/**
|
|
407
|
+
* Available adapters share asset generation, with host-specific lifecycle behavior.
|
|
408
|
+
* Availability does not imply feature parity; see the documented support policy.
|
|
409
|
+
*/
|
|
407
410
|
const unplugin = {
|
|
408
411
|
vite: core.vite,
|
|
409
412
|
rollup: core.rollup,
|
|
@@ -418,4 +421,4 @@ const unplugin = {
|
|
|
418
421
|
//#endregion
|
|
419
422
|
export { unplugin as t };
|
|
420
423
|
|
|
421
|
-
//# sourceMappingURL=unplugin-
|
|
424
|
+
//# sourceMappingURL=unplugin-3KZVc7em.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unplugin-p6AXhL4F.mjs","names":[],"sources":["../src/unplugin.ts"],"sourcesContent":["import {\n lstat,\n mkdir,\n mkdtemp,\n readdir,\n readFile,\n realpath,\n rm,\n writeFile,\n} from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { watch, type FSWatcher } from \"chokidar\";\nimport { createUnplugin, type UnpluginOptions, type UnpluginInstance } from \"unplugin\";\nimport {\n loadDirwellConfig,\n resolveGenerateOptions,\n validateConfig,\n type DirwellConfig,\n} from \"./config.ts\";\nimport { generateExplorerSkippingPaths } from \"./generator.ts\";\nimport dirwellVite from \"./vite.ts\";\nimport { assertSafeMirroredSymlinks, canonicalPath, isWithin } from \"./plugin-safety.ts\";\n\n/** A directory explorer emitted beneath the host's output root. */\nexport interface DirwellPluginOptions extends Omit<DirwellConfig, \"extends\" | \"server\" | \"outDir\"> {\n /** Project directory used for config discovery and relative source paths. */\n readonly cwd?: string;\n /** Dedicated relative path inside the host output; defaults to `dirwell`. */\n readonly outputPath?: string;\n}\n\nexport type DirwellPluginInput = DirwellPluginOptions | readonly DirwellPluginOptions[] | undefined;\ninterface PreviewContext {\n path: string;\n status: number;\n type: string;\n respond: boolean;\n body?: string | Uint8Array;\n req: IncomingMessage;\n res: ServerResponse;\n redirect(path: string): void;\n set(name: string, value: string): void;\n}\nconst marker = \".dirwell-plugin-output\";\n\nfunction outputPath(value = \"dirwell\"): string {\n if (\n !value ||\n path.isAbsolute(value) ||\n value.includes(\"\\\\\") ||\n value.split(\"/\").some((part) => !part || part === \".\" || part === \"..\")\n ) {\n throw new TypeError(\n \"Dirwell outputPath must be a dedicated relative path without dot segments\",\n );\n }\n return value;\n}\n\nasync function watchPaths(\n source: string,\n excluded: readonly string[],\n): Promise<{ files: string[]; directories: string[] }> {\n const files: string[] = [];\n const directories: string[] = [];\n async function visit(directory: string): Promise<void> {\n directories.push(directory);\n for (const entry of await readdir(directory, { withFileTypes: true })) {\n const name = path.join(directory, entry.name);\n if (excluded.some((candidate) => isWithin(candidate, name))) continue;\n if (entry.isDirectory()) await visit(name);\n else files.push(name);\n }\n }\n await visit(source);\n return { files, directories };\n}\n\nconst core = createUnplugin<DirwellPluginInput, true>((options, meta) => {\n const entries = Array.isArray(options) ? options : [options ?? {}];\n if (!entries.length) throw new TypeError(\"Dirwell options array must not be empty\");\n const prefixes = entries.map((entry) => outputPath(entry.outputPath));\n for (let index = 0; index < prefixes.length; index++) {\n for (let other = 0; other < index; other++) {\n if (\n isWithin(prefixes[index]!, prefixes[other]!) ||\n isWithin(prefixes[other]!, prefixes[index]!)\n ) {\n throw new Error(\"Dirwell options array has overlapping outputPath paths\");\n }\n }\n }\n return entries.map((inline, index): UnpluginOptions => {\n const prefix = prefixes[index]!;\n if (meta.framework === \"vite\")\n return { name: `dirwell:${prefix}`, vite: dirwellVite({ ...inline, outputPath: prefix }) };\n let cwd = path.resolve(inline.cwd ?? process.cwd());\n let hostOutput: string | undefined;\n let config: DirwellConfig;\n let source: string;\n let context: {\n emitFile(asset: { type: \"asset\"; fileName: string; source: string | Uint8Array }): unknown;\n };\n let failed = false;\n let previousFiles: string[] = [];\n let emittedFiles = new Set<string>();\n let sourceWatcher: FSWatcher | undefined;\n let watchDirectory: string | undefined;\n let sentinel: string | undefined;\n let revision = 0;\n let sentinelWrites = Promise.resolve();\n let sentinelTimer: ReturnType<typeof setTimeout> | undefined;\n const virtual = `dirwell-watch:${index}:${prefix}`;\n\n async function prepare(): Promise<void> {\n const loaded = await loadDirwellConfig(cwd, \"build\");\n config = { ...loaded.config, ...inline };\n validateConfig(config);\n source = path.resolve(cwd, config.root ?? \".\");\n }\n\n async function paths() {\n return watchPaths(source, hostOutput === undefined ? [] : [hostOutput]);\n }\n\n async function emit(target: {\n emitFile(asset: { type: \"asset\"; fileName: string; source: string | Uint8Array }): unknown;\n }): Promise<void> {\n if (failed) return;\n if (hostOutput === undefined) throw new Error(\"Dirwell requires a host output directory\");\n const destination = path.join(hostOutput, prefix);\n if (isWithin(await canonicalPath(destination), await realpath(source))) {\n throw new Error(\"Dirwell outputPath must not contain the source directory\");\n }\n previousFiles = [];\n try {\n if ((await lstat(destination)).isSymbolicLink())\n throw new Error(\"Dirwell refuses a symlink outputPath\");\n const existing = await readdir(destination);\n if (existing.length) {\n const value: unknown = JSON.parse(\n await readFile(path.join(destination, marker), \"utf8\").catch(() => \"null\"),\n );\n if (\n typeof value !== \"object\" ||\n value === null ||\n !(\"version\" in value) ||\n value.version !== 1 ||\n !(\"files\" in value) ||\n !Array.isArray(value.files) ||\n !value.files.every((file): file is string => typeof file === \"string\")\n ) {\n throw new Error(`Dirwell refuses to replace an unowned outputPath: ${destination}`);\n }\n previousFiles = value.files.map(outputPath);\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n }\n const temporary = await mkdtemp(path.join(tmpdir(), \"dirwell-plugin-\"));\n try {\n const generate = resolveGenerateOptions(cwd, { ...config, outDir: temporary });\n if (generate.mirror !== false) await assertSafeMirroredSymlinks(generate);\n await generateExplorerSkippingPaths(generate, [hostOutput]);\n const generated = await watchPaths(temporary, []);\n emittedFiles = new Set(\n generated.files.map((file) => path.relative(temporary, file).split(path.sep).join(\"/\")),\n );\n for (const file of generated.files) {\n target.emitFile({\n type: \"asset\",\n fileName: `${prefix}/${path.relative(temporary, file).split(path.sep).join(\"/\")}`,\n source: await readFile(file),\n });\n }\n target.emitFile({\n type: \"asset\",\n fileName: `${prefix}/${marker}`,\n source: JSON.stringify({ version: 1, files: [...emittedFiles] }),\n });\n } finally {\n await rm(temporary, { recursive: true, force: true });\n }\n }\n\n async function removeStaleFiles(): Promise<void> {\n if (failed || hostOutput === undefined) return;\n const destination = path.join(hostOutput, prefix);\n const canonicalDestination = await canonicalPath(destination);\n for (const file of previousFiles) {\n if (emittedFiles.has(file)) continue;\n const stale = path.join(destination, file);\n if (!isWithin(canonicalDestination, await canonicalPath(path.dirname(stale))))\n throw new Error(\"Dirwell refuses to remove a stale asset through a symlink\");\n await rm(stale, { force: true });\n }\n previousFiles = [];\n }\n\n return {\n name: `dirwell:${prefix}`,\n async buildStart() {\n context = { emitFile: (asset) => this.emitFile(asset) };\n failed = false;\n const native = this.getNativeBuildContext?.();\n if (native?.framework === \"webpack\" || native?.framework === \"rspack\") {\n if (inline.cwd === undefined) cwd = native.compiler.context;\n hostOutput = native.compiler.options.output.path;\n }\n await prepare();\n if (\n meta.framework === \"rolldown\" &&\n \"meta\" in this &&\n typeof this.meta === \"object\" &&\n this.meta !== null &&\n \"watchMode\" in this.meta &&\n this.meta.watchMode\n ) {\n if (sourceWatcher === undefined) {\n watchDirectory = await mkdtemp(path.join(tmpdir(), \"dirwell-watch-\"));\n sentinel = path.join(watchDirectory, \"revision.js\");\n await writeFile(sentinel, \"export {};\\n\");\n sourceWatcher = watch(source, {\n ignoreInitial: true,\n followSymlinks: false,\n ignored: (name) => hostOutput !== undefined && isWithin(hostOutput, name),\n });\n await new Promise<void>((resolve, reject) => {\n sourceWatcher!.once(\"ready\", resolve);\n sourceWatcher!.once(\"error\", reject);\n });\n const notify = () => {\n clearTimeout(sentinelTimer);\n sentinelTimer = setTimeout(() => {\n sentinelWrites = sentinelWrites\n .then(() => writeFile(sentinel!, `// ${++revision}\\nexport {};\\n`))\n .catch((error) => console.error(\"Dirwell watch failed\", error));\n }, 50);\n };\n sourceWatcher.on(\"all\", notify);\n // A rapid add/unlink can precede Chokidar's per-file watcher registration.\n // Parent-directory rename events still identify that tree change.\n sourceWatcher.on(\"raw\", (event: string, name: string, details: unknown) => {\n if (\n event !== \"rename\" ||\n typeof name !== \"string\" ||\n typeof details !== \"object\" ||\n details === null ||\n !(\"watchedPath\" in details) ||\n typeof details.watchedPath !== \"string\"\n )\n return;\n const changed = path.isAbsolute(name)\n ? name\n : path.basename(details.watchedPath) === name\n ? details.watchedPath\n : path.resolve(details.watchedPath, name);\n if (\n isWithin(source, changed) &&\n (hostOutput === undefined || !isWithin(hostOutput, changed))\n )\n notify();\n });\n }\n this.addWatchFile(sentinel!);\n }\n if (meta.framework !== \"esbuild\" && meta.framework !== \"bun\") {\n const watched = await paths();\n if (native?.framework === \"webpack\" || native?.framework === \"rspack\") {\n for (const directory of watched.directories)\n native.compilation?.contextDependencies.add(directory);\n } else {\n for (const directory of watched.directories) this.addWatchFile(directory);\n }\n for (const file of watched.files) this.addWatchFile(file);\n if (native?.framework === \"webpack\" || native?.framework === \"rspack\") {\n native.compilation?.hooks.processAssets.tapPromise(\n {\n name: `dirwell:${prefix}`,\n stage: native.compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL,\n },\n async () => {\n if (!native.compilation?.errors.length)\n await emit({ emitFile: (asset) => this.emitFile(asset) });\n },\n );\n }\n }\n },\n async buildEnd() {\n if (\n ![\n \"rollup\",\n \"rolldown\",\n \"unloader\",\n \"esbuild\",\n \"bun\",\n \"webpack\",\n \"rspack\",\n \"rsbuild\",\n ].includes(meta.framework)\n )\n await emit(this);\n },\n async writeBundle() {\n await removeStaleFiles();\n },\n rollup: {\n async generateBundle(output) {\n hostOutput = path.resolve(\n cwd,\n output.dir ?? path.dirname(output.file ?? \"dist/index.js\"),\n );\n await emit(this);\n },\n },\n rolldown: {\n transform(code, id) {\n if (sentinel === undefined || !this.getModuleInfo(id)?.isEntry) return null;\n return { code: `import ${JSON.stringify(sentinel)};\\n${code}`, map: null };\n },\n async closeWatcher() {\n await sourceWatcher?.close();\n clearTimeout(sentinelTimer);\n await sentinelWrites;\n sourceWatcher = undefined;\n if (watchDirectory !== undefined)\n await rm(watchDirectory, { recursive: true, force: true });\n watchDirectory = undefined;\n sentinel = undefined;\n },\n async generateBundle(output) {\n hostOutput = path.resolve(\n cwd,\n output.dir ?? path.dirname(output.file ?? \"dist/index.js\"),\n );\n await emit(this);\n },\n },\n webpack(compiler) {\n compiler.hooks.shouldEmit.tap(`dirwell:${prefix}`, (compilation) => {\n failed = compilation.errors.length > 0;\n });\n },\n rspack(compiler) {\n compiler.hooks.shouldEmit.tap(`dirwell:${prefix}`, (compilation) => {\n failed = compilation.errors.length > 0;\n });\n },\n farm: {\n configResolved(resolved) {\n if (inline.cwd === undefined) cwd = resolved.compilation?.root ?? cwd;\n hostOutput = path.resolve(cwd, resolved.compilation?.output?.path ?? \"dist\");\n },\n configureDevServer(server) {\n let assets = new Map<string, string | Uint8Array>();\n let pending = Promise.resolve();\n let timer: ReturnType<typeof setTimeout> | undefined;\n let closed = false;\n const clients = new Set<ServerResponse>();\n async function rebuild() {\n if (closed) return;\n const next = new Map<string, string | Uint8Array>();\n await prepare();\n await emit({\n emitFile(asset) {\n next.set(asset.fileName, asset.source);\n },\n });\n assets = next;\n for (const client of clients) client.write(\"event: reload\\ndata: updated\\n\\n\");\n }\n const ready = (async () => {\n await rebuild();\n sourceWatcher = watch(source, {\n ignoreInitial: true,\n followSymlinks: false,\n ignored: (name) => hostOutput !== undefined && isWithin(hostOutput, name),\n });\n await new Promise<void>((resolve, reject) => {\n sourceWatcher!.once(\"ready\", resolve);\n sourceWatcher!.once(\"error\", reject);\n });\n sourceWatcher.on(\"all\", () => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n pending = pending\n .then(rebuild)\n .catch((error) =>\n server.logger.error(`Dirwell rebuild failed: ${String(error)}`),\n );\n }, 75);\n });\n })();\n void ready.catch((error) =>\n server.logger.error(`Dirwell preview failed: ${String(error)}`),\n );\n // Farm does not await configureDevServer; await readiness in its middleware.\n server\n .app()\n .use(async (ctx: PreviewContext, next: () => Promise<unknown>): Promise<void> => {\n await ready;\n const base = `${new URL(server.publicPath ?? \"/\", \"http://dirwell.local\").pathname.replace(/\\/+$/, \"\")}/${prefix}/`;\n if (ctx.path === base.slice(0, -1)) {\n ctx.redirect(base);\n return;\n }\n if (!ctx.path.startsWith(base)) {\n await next();\n return;\n }\n const events = `${base}__dirwell_events`;\n if (ctx.path === events) {\n ctx.respond = false;\n ctx.res.writeHead(200, {\n \"content-type\": \"text/event-stream\",\n \"cache-control\": \"no-cache\",\n });\n ctx.res.write(\": connected\\n\\n\");\n clients.add(ctx.res);\n ctx.req.on(\"close\", () => clients.delete(ctx.res));\n return;\n }\n let relative: string;\n try {\n relative = decodeURIComponent(ctx.path.slice(base.length));\n } catch {\n ctx.status = 400;\n return;\n }\n if (relative.split(\"/\").some((part) => part === \"..\") || relative.includes(\"\\\\\")) {\n ctx.status = 403;\n return;\n }\n const file = `${prefix}/${relative.endsWith(\"/\") || !relative ? `${relative}index.html` : relative}`;\n const contents = assets.get(file);\n if (contents === undefined) {\n ctx.status = 404;\n return;\n }\n ctx.type = path.extname(file) || \"application/octet-stream\";\n ctx.set(\"cache-control\", \"no-store\");\n ctx.body = file.endsWith(\".html\")\n ? Buffer.from(contents)\n .toString()\n .replace(\n \"</body>\",\n `<script>new EventSource(${JSON.stringify(events)}).addEventListener('reload',()=>location.reload())</script></body>`,\n )\n : contents;\n });\n const close = server.close.bind(server);\n server.close = async () => {\n closed = true;\n clearTimeout(timer);\n for (const client of clients) client.end();\n try {\n await ready;\n await sourceWatcher?.close();\n await pending;\n await server.watcher?.getInternalWatcher()?.close();\n } finally {\n sourceWatcher = undefined;\n await close();\n }\n };\n },\n },\n esbuild: {\n setup(build) {\n if (inline.cwd === undefined) cwd = build.initialOptions.absWorkingDir ?? cwd;\n const output =\n build.initialOptions.outdir ??\n (build.initialOptions.outfile === undefined\n ? undefined\n : path.dirname(build.initialOptions.outfile));\n if (output !== undefined) hostOutput = path.resolve(cwd, output);\n build.initialOptions.inject = [...(build.initialOptions.inject ?? []), virtual];\n build.onResolve({ filter: /^dirwell-watch:/ }, (args) =>\n args.path === virtual ? { path: virtual, namespace: virtual } : undefined,\n );\n build.onLoad({ filter: /.*/, namespace: virtual }, async () => {\n const watched = await paths();\n return {\n contents: \"\",\n loader: \"js\",\n watchFiles: watched.files,\n watchDirs: watched.directories,\n };\n });\n build.onStart(async () => {\n failed = false;\n await prepare();\n });\n build.onEnd(async (result) => {\n if (result.errors.length) return;\n const assets: { fileName: string; source: string | Uint8Array }[] = [];\n await emit({\n emitFile(asset) {\n if (asset.fileName && asset.source !== undefined)\n assets.push({ fileName: asset.fileName, source: asset.source });\n },\n });\n for (const asset of assets) {\n const destination = path.join(hostOutput!, asset.fileName);\n if (build.initialOptions.write !== false) {\n await mkdir(path.dirname(destination), { recursive: true });\n await writeFile(destination, asset.source);\n } else {\n const bytes =\n typeof asset.source === \"string\" ? Buffer.from(asset.source) : asset.source;\n result.outputFiles ??= [];\n result.outputFiles.push({\n path: destination,\n contents: bytes,\n hash: \"\",\n get text() {\n return Buffer.from(bytes).toString();\n },\n });\n }\n }\n if (build.initialOptions.write !== false) await removeStaleFiles();\n });\n },\n },\n bun: {\n setup(build) {\n if (build.config.outdir !== undefined)\n hostOutput = path.resolve(cwd, build.config.outdir);\n build.onEnd(async (result: { success: boolean }) => {\n failed = !result.success;\n if (!failed) {\n await emit(context);\n await removeStaleFiles();\n }\n });\n },\n },\n };\n });\n});\n\n/** The Vite host retains its server integration; all other hosts share asset generation. */\nexport const unplugin: Pick<\n UnpluginInstance<DirwellPluginInput, true>,\n \"vite\" | \"rollup\" | \"rolldown\" | \"webpack\" | \"rspack\" | \"rsbuild\" | \"esbuild\" | \"farm\" | \"bun\"\n> = {\n vite: core.vite,\n rollup: core.rollup,\n rolldown: core.rolldown,\n webpack: core.webpack,\n rspack: core.rspack,\n rsbuild: core.rsbuild,\n esbuild: core.esbuild,\n farm: core.farm,\n bun: core.bun,\n};\nexport default unplugin;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"unplugin-3KZVc7em.mjs","names":[],"sources":["../src/unplugin.ts"],"sourcesContent":["import {\n lstat,\n mkdir,\n mkdtemp,\n readdir,\n readFile,\n realpath,\n rm,\n writeFile,\n} from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { watch, type FSWatcher } from \"chokidar\";\nimport { createUnplugin, type UnpluginOptions, type UnpluginInstance } from \"unplugin\";\nimport {\n loadDirwellConfig,\n resolveGenerateOptions,\n validateConfig,\n type DirwellConfig,\n} from \"./config.ts\";\nimport { generateExplorerSkippingPaths } from \"./generator.ts\";\nimport dirwellVite from \"./vite.ts\";\nimport { assertSafeMirroredSymlinks, canonicalPath, isWithin } from \"./plugin-safety.ts\";\n\n/** A directory explorer emitted beneath the host's output root. */\nexport interface DirwellPluginOptions extends Omit<DirwellConfig, \"extends\" | \"server\" | \"outDir\"> {\n /** Project directory used for config discovery and relative source paths. */\n readonly cwd?: string;\n /** Dedicated relative path inside the host output; defaults to `dirwell`. */\n readonly outputPath?: string;\n}\n\nexport type DirwellPluginInput = DirwellPluginOptions | readonly DirwellPluginOptions[] | undefined;\ninterface PreviewContext {\n path: string;\n status: number;\n type: string;\n respond: boolean;\n body?: string | Uint8Array;\n req: IncomingMessage;\n res: ServerResponse;\n redirect(path: string): void;\n set(name: string, value: string): void;\n}\nconst marker = \".dirwell-plugin-output\";\n\nfunction outputPath(value = \"dirwell\"): string {\n if (\n !value ||\n path.isAbsolute(value) ||\n value.includes(\"\\\\\") ||\n value.split(\"/\").some((part) => !part || part === \".\" || part === \"..\")\n ) {\n throw new TypeError(\n \"Dirwell outputPath must be a dedicated relative path without dot segments\",\n );\n }\n return value;\n}\n\nasync function watchPaths(\n source: string,\n excluded: readonly string[],\n): Promise<{ files: string[]; directories: string[] }> {\n const files: string[] = [];\n const directories: string[] = [];\n async function visit(directory: string): Promise<void> {\n directories.push(directory);\n for (const entry of await readdir(directory, { withFileTypes: true })) {\n const name = path.join(directory, entry.name);\n if (excluded.some((candidate) => isWithin(candidate, name))) continue;\n if (entry.isDirectory()) await visit(name);\n else files.push(name);\n }\n }\n await visit(source);\n return { files, directories };\n}\n\nconst core = createUnplugin<DirwellPluginInput, true>((options, meta) => {\n const entries = Array.isArray(options) ? options : [options ?? {}];\n if (!entries.length) throw new TypeError(\"Dirwell options array must not be empty\");\n const prefixes = entries.map((entry) => outputPath(entry.outputPath));\n for (let index = 0; index < prefixes.length; index++) {\n for (let other = 0; other < index; other++) {\n if (\n isWithin(prefixes[index]!, prefixes[other]!) ||\n isWithin(prefixes[other]!, prefixes[index]!)\n ) {\n throw new Error(\"Dirwell options array has overlapping outputPath paths\");\n }\n }\n }\n return entries.map((inline, index): UnpluginOptions => {\n const prefix = prefixes[index]!;\n if (meta.framework === \"vite\")\n return { name: `dirwell:${prefix}`, vite: dirwellVite({ ...inline, outputPath: prefix }) };\n let cwd = path.resolve(inline.cwd ?? process.cwd());\n let hostOutput: string | undefined;\n let config: DirwellConfig;\n let source: string;\n let context: {\n emitFile(asset: { type: \"asset\"; fileName: string; source: string | Uint8Array }): unknown;\n };\n let failed = false;\n let previousFiles: string[] = [];\n let emittedFiles = new Set<string>();\n let sourceWatcher: FSWatcher | undefined;\n let watchDirectory: string | undefined;\n let sentinel: string | undefined;\n let revision = 0;\n let sentinelWrites = Promise.resolve();\n let sentinelTimer: ReturnType<typeof setTimeout> | undefined;\n const virtual = `dirwell-watch:${index}:${prefix}`;\n\n async function prepare(): Promise<void> {\n const loaded = await loadDirwellConfig(cwd, \"build\");\n config = { ...loaded.config, ...inline };\n validateConfig(config);\n source = path.resolve(cwd, config.root ?? \".\");\n }\n\n async function paths() {\n return watchPaths(source, hostOutput === undefined ? [] : [hostOutput]);\n }\n\n async function emit(target: {\n emitFile(asset: { type: \"asset\"; fileName: string; source: string | Uint8Array }): unknown;\n }): Promise<void> {\n if (failed) return;\n if (hostOutput === undefined) throw new Error(\"Dirwell requires a host output directory\");\n const destination = path.join(hostOutput, prefix);\n if (isWithin(await canonicalPath(destination), await realpath(source))) {\n throw new Error(\"Dirwell outputPath must not contain the source directory\");\n }\n previousFiles = [];\n try {\n if ((await lstat(destination)).isSymbolicLink())\n throw new Error(\"Dirwell refuses a symlink outputPath\");\n const existing = await readdir(destination);\n if (existing.length) {\n const value: unknown = JSON.parse(\n await readFile(path.join(destination, marker), \"utf8\").catch(() => \"null\"),\n );\n if (\n typeof value !== \"object\" ||\n value === null ||\n !(\"version\" in value) ||\n value.version !== 1 ||\n !(\"files\" in value) ||\n !Array.isArray(value.files) ||\n !value.files.every((file): file is string => typeof file === \"string\")\n ) {\n throw new Error(`Dirwell refuses to replace an unowned outputPath: ${destination}`);\n }\n previousFiles = value.files.map(outputPath);\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n }\n const temporary = await mkdtemp(path.join(tmpdir(), \"dirwell-plugin-\"));\n try {\n const generate = resolveGenerateOptions(cwd, { ...config, outDir: temporary });\n if (generate.mirror !== false) await assertSafeMirroredSymlinks(generate);\n await generateExplorerSkippingPaths(generate, [hostOutput]);\n const generated = await watchPaths(temporary, []);\n emittedFiles = new Set(\n generated.files.map((file) => path.relative(temporary, file).split(path.sep).join(\"/\")),\n );\n for (const file of generated.files) {\n target.emitFile({\n type: \"asset\",\n fileName: `${prefix}/${path.relative(temporary, file).split(path.sep).join(\"/\")}`,\n source: await readFile(file),\n });\n }\n target.emitFile({\n type: \"asset\",\n fileName: `${prefix}/${marker}`,\n source: JSON.stringify({ version: 1, files: [...emittedFiles] }),\n });\n } finally {\n await rm(temporary, { recursive: true, force: true });\n }\n }\n\n async function removeStaleFiles(): Promise<void> {\n if (failed || hostOutput === undefined) return;\n const destination = path.join(hostOutput, prefix);\n const canonicalDestination = await canonicalPath(destination);\n for (const file of previousFiles) {\n if (emittedFiles.has(file)) continue;\n const stale = path.join(destination, file);\n if (!isWithin(canonicalDestination, await canonicalPath(path.dirname(stale))))\n throw new Error(\"Dirwell refuses to remove a stale asset through a symlink\");\n await rm(stale, { force: true });\n }\n previousFiles = [];\n }\n\n return {\n name: `dirwell:${prefix}`,\n async buildStart() {\n context = { emitFile: (asset) => this.emitFile(asset) };\n failed = false;\n const native = this.getNativeBuildContext?.();\n if (native?.framework === \"webpack\" || native?.framework === \"rspack\") {\n if (inline.cwd === undefined) cwd = native.compiler.context;\n hostOutput = native.compiler.options.output.path;\n }\n await prepare();\n if (\n meta.framework === \"rolldown\" &&\n \"meta\" in this &&\n typeof this.meta === \"object\" &&\n this.meta !== null &&\n \"watchMode\" in this.meta &&\n this.meta.watchMode\n ) {\n if (sourceWatcher === undefined) {\n watchDirectory = await mkdtemp(path.join(tmpdir(), \"dirwell-watch-\"));\n sentinel = path.join(watchDirectory, \"revision.js\");\n await writeFile(sentinel, \"export {};\\n\");\n sourceWatcher = watch(source, {\n ignoreInitial: true,\n followSymlinks: false,\n ignored: (name) => hostOutput !== undefined && isWithin(hostOutput, name),\n });\n await new Promise<void>((resolve, reject) => {\n sourceWatcher!.once(\"ready\", resolve);\n sourceWatcher!.once(\"error\", reject);\n });\n const notify = () => {\n clearTimeout(sentinelTimer);\n sentinelTimer = setTimeout(() => {\n sentinelWrites = sentinelWrites\n .then(() => writeFile(sentinel!, `// ${++revision}\\nexport {};\\n`))\n .catch((error) => console.error(\"Dirwell watch failed\", error));\n }, 50);\n };\n sourceWatcher.on(\"all\", notify);\n // A rapid add/unlink can precede Chokidar's per-file watcher registration.\n // Parent-directory rename events still identify that tree change.\n sourceWatcher.on(\"raw\", (event: string, name: string, details: unknown) => {\n if (\n event !== \"rename\" ||\n typeof name !== \"string\" ||\n typeof details !== \"object\" ||\n details === null ||\n !(\"watchedPath\" in details) ||\n typeof details.watchedPath !== \"string\"\n )\n return;\n const changed = path.isAbsolute(name)\n ? name\n : path.basename(details.watchedPath) === name\n ? details.watchedPath\n : path.resolve(details.watchedPath, name);\n if (\n isWithin(source, changed) &&\n (hostOutput === undefined || !isWithin(hostOutput, changed))\n )\n notify();\n });\n }\n this.addWatchFile(sentinel!);\n }\n if (meta.framework !== \"esbuild\" && meta.framework !== \"bun\") {\n const watched = await paths();\n if (native?.framework === \"webpack\" || native?.framework === \"rspack\") {\n for (const directory of watched.directories)\n native.compilation?.contextDependencies.add(directory);\n } else {\n for (const directory of watched.directories) this.addWatchFile(directory);\n }\n for (const file of watched.files) this.addWatchFile(file);\n if (native?.framework === \"webpack\" || native?.framework === \"rspack\") {\n native.compilation?.hooks.processAssets.tapPromise(\n {\n name: `dirwell:${prefix}`,\n stage: native.compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL,\n },\n async () => {\n if (!native.compilation?.errors.length)\n await emit({ emitFile: (asset) => this.emitFile(asset) });\n },\n );\n }\n }\n },\n async buildEnd() {\n if (\n ![\n \"rollup\",\n \"rolldown\",\n \"unloader\",\n \"esbuild\",\n \"bun\",\n \"webpack\",\n \"rspack\",\n \"rsbuild\",\n ].includes(meta.framework)\n )\n await emit(this);\n },\n async writeBundle() {\n await removeStaleFiles();\n },\n rollup: {\n async generateBundle(output) {\n hostOutput = path.resolve(\n cwd,\n output.dir ?? path.dirname(output.file ?? \"dist/index.js\"),\n );\n await emit(this);\n },\n },\n rolldown: {\n transform(code, id) {\n if (sentinel === undefined || !this.getModuleInfo(id)?.isEntry) return null;\n return { code: `import ${JSON.stringify(sentinel)};\\n${code}`, map: null };\n },\n async closeWatcher() {\n await sourceWatcher?.close();\n clearTimeout(sentinelTimer);\n await sentinelWrites;\n sourceWatcher = undefined;\n if (watchDirectory !== undefined)\n await rm(watchDirectory, { recursive: true, force: true });\n watchDirectory = undefined;\n sentinel = undefined;\n },\n async generateBundle(output) {\n hostOutput = path.resolve(\n cwd,\n output.dir ?? path.dirname(output.file ?? \"dist/index.js\"),\n );\n await emit(this);\n },\n },\n webpack(compiler) {\n compiler.hooks.shouldEmit.tap(`dirwell:${prefix}`, (compilation) => {\n failed = compilation.errors.length > 0;\n });\n },\n rspack(compiler) {\n compiler.hooks.shouldEmit.tap(`dirwell:${prefix}`, (compilation) => {\n failed = compilation.errors.length > 0;\n });\n },\n farm: {\n configResolved(resolved) {\n if (inline.cwd === undefined) cwd = resolved.compilation?.root ?? cwd;\n hostOutput = path.resolve(cwd, resolved.compilation?.output?.path ?? \"dist\");\n },\n configureDevServer(server) {\n let assets = new Map<string, string | Uint8Array>();\n let pending = Promise.resolve();\n let timer: ReturnType<typeof setTimeout> | undefined;\n let closed = false;\n const clients = new Set<ServerResponse>();\n async function rebuild() {\n if (closed) return;\n const next = new Map<string, string | Uint8Array>();\n await prepare();\n await emit({\n emitFile(asset) {\n next.set(asset.fileName, asset.source);\n },\n });\n assets = next;\n for (const client of clients) client.write(\"event: reload\\ndata: updated\\n\\n\");\n }\n const ready = (async () => {\n await rebuild();\n sourceWatcher = watch(source, {\n ignoreInitial: true,\n followSymlinks: false,\n ignored: (name) => hostOutput !== undefined && isWithin(hostOutput, name),\n });\n await new Promise<void>((resolve, reject) => {\n sourceWatcher!.once(\"ready\", resolve);\n sourceWatcher!.once(\"error\", reject);\n });\n sourceWatcher.on(\"all\", () => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n pending = pending\n .then(rebuild)\n .catch((error) =>\n server.logger.error(`Dirwell rebuild failed: ${String(error)}`),\n );\n }, 75);\n });\n })();\n void ready.catch((error) =>\n server.logger.error(`Dirwell preview failed: ${String(error)}`),\n );\n // Farm does not await configureDevServer; await readiness in its middleware.\n server\n .app()\n .use(async (ctx: PreviewContext, next: () => Promise<unknown>): Promise<void> => {\n await ready;\n const base = `${new URL(server.publicPath ?? \"/\", \"http://dirwell.local\").pathname.replace(/\\/+$/, \"\")}/${prefix}/`;\n if (ctx.path === base.slice(0, -1)) {\n ctx.redirect(base);\n return;\n }\n if (!ctx.path.startsWith(base)) {\n await next();\n return;\n }\n const events = `${base}__dirwell_events`;\n if (ctx.path === events) {\n ctx.respond = false;\n ctx.res.writeHead(200, {\n \"content-type\": \"text/event-stream\",\n \"cache-control\": \"no-cache\",\n });\n ctx.res.write(\": connected\\n\\n\");\n clients.add(ctx.res);\n ctx.req.on(\"close\", () => clients.delete(ctx.res));\n return;\n }\n let relative: string;\n try {\n relative = decodeURIComponent(ctx.path.slice(base.length));\n } catch {\n ctx.status = 400;\n return;\n }\n if (relative.split(\"/\").some((part) => part === \"..\") || relative.includes(\"\\\\\")) {\n ctx.status = 403;\n return;\n }\n const file = `${prefix}/${relative.endsWith(\"/\") || !relative ? `${relative}index.html` : relative}`;\n const contents = assets.get(file);\n if (contents === undefined) {\n ctx.status = 404;\n return;\n }\n ctx.type = path.extname(file) || \"application/octet-stream\";\n ctx.set(\"cache-control\", \"no-store\");\n ctx.body = file.endsWith(\".html\")\n ? Buffer.from(contents)\n .toString()\n .replace(\n \"</body>\",\n `<script>new EventSource(${JSON.stringify(events)}).addEventListener('reload',()=>location.reload())</script></body>`,\n )\n : contents;\n });\n const close = server.close.bind(server);\n server.close = async () => {\n closed = true;\n clearTimeout(timer);\n for (const client of clients) client.end();\n try {\n await ready;\n await sourceWatcher?.close();\n await pending;\n await server.watcher?.getInternalWatcher()?.close();\n } finally {\n sourceWatcher = undefined;\n await close();\n }\n };\n },\n },\n esbuild: {\n setup(build) {\n if (inline.cwd === undefined) cwd = build.initialOptions.absWorkingDir ?? cwd;\n const output =\n build.initialOptions.outdir ??\n (build.initialOptions.outfile === undefined\n ? undefined\n : path.dirname(build.initialOptions.outfile));\n if (output !== undefined) hostOutput = path.resolve(cwd, output);\n build.initialOptions.inject = [...(build.initialOptions.inject ?? []), virtual];\n build.onResolve({ filter: /^dirwell-watch:/ }, (args) =>\n args.path === virtual ? { path: virtual, namespace: virtual } : undefined,\n );\n build.onLoad({ filter: /.*/, namespace: virtual }, async () => {\n const watched = await paths();\n return {\n contents: \"\",\n loader: \"js\",\n watchFiles: watched.files,\n watchDirs: watched.directories,\n };\n });\n build.onStart(async () => {\n failed = false;\n await prepare();\n });\n build.onEnd(async (result) => {\n if (result.errors.length) return;\n const assets: { fileName: string; source: string | Uint8Array }[] = [];\n await emit({\n emitFile(asset) {\n if (asset.fileName && asset.source !== undefined)\n assets.push({ fileName: asset.fileName, source: asset.source });\n },\n });\n for (const asset of assets) {\n const destination = path.join(hostOutput!, asset.fileName);\n if (build.initialOptions.write !== false) {\n await mkdir(path.dirname(destination), { recursive: true });\n await writeFile(destination, asset.source);\n } else {\n const bytes =\n typeof asset.source === \"string\" ? Buffer.from(asset.source) : asset.source;\n result.outputFiles ??= [];\n result.outputFiles.push({\n path: destination,\n contents: bytes,\n hash: \"\",\n get text() {\n return Buffer.from(bytes).toString();\n },\n });\n }\n }\n if (build.initialOptions.write !== false) await removeStaleFiles();\n });\n },\n },\n bun: {\n setup(build) {\n if (build.config.outdir !== undefined)\n hostOutput = path.resolve(cwd, build.config.outdir);\n build.onEnd(async (result: { success: boolean }) => {\n failed = !result.success;\n if (!failed) {\n await emit(context);\n await removeStaleFiles();\n }\n });\n },\n },\n };\n });\n});\n\n/**\n * Available adapters share asset generation, with host-specific lifecycle behavior.\n * Availability does not imply feature parity; see the documented support policy.\n */\nexport const unplugin: Pick<\n UnpluginInstance<DirwellPluginInput, true>,\n \"vite\" | \"rollup\" | \"rolldown\" | \"webpack\" | \"rspack\" | \"rsbuild\" | \"esbuild\" | \"farm\" | \"bun\"\n> = {\n vite: core.vite,\n rollup: core.rollup,\n rolldown: core.rolldown,\n webpack: core.webpack,\n rspack: core.rspack,\n rsbuild: core.rsbuild,\n esbuild: core.esbuild,\n farm: core.farm,\n bun: core.bun,\n};\nexport default unplugin;\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as DirwellConfig } from "./config-
|
|
1
|
+
import { t as DirwellConfig } from "./config-CJutlaP0.mjs";
|
|
2
2
|
import { UnpluginInstance } from "unplugin";
|
|
3
3
|
//#region src/unplugin.d.ts
|
|
4
4
|
/** A directory explorer emitted beneath the host's output root. */
|
|
@@ -9,8 +9,11 @@ interface DirwellPluginOptions extends Omit<DirwellConfig, "extends" | "server"
|
|
|
9
9
|
readonly outputPath?: string;
|
|
10
10
|
}
|
|
11
11
|
type DirwellPluginInput = DirwellPluginOptions | readonly DirwellPluginOptions[] | undefined;
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Available adapters share asset generation, with host-specific lifecycle behavior.
|
|
14
|
+
* Availability does not imply feature parity; see the documented support policy.
|
|
15
|
+
*/
|
|
13
16
|
declare const unplugin: Pick<UnpluginInstance<DirwellPluginInput, true>, "vite" | "rollup" | "rolldown" | "webpack" | "rspack" | "rsbuild" | "esbuild" | "farm" | "bun">;
|
|
14
17
|
//#endregion
|
|
15
18
|
export { DirwellPluginOptions as n, unplugin as r, DirwellPluginInput as t };
|
|
16
|
-
//# sourceMappingURL=unplugin-
|
|
19
|
+
//# sourceMappingURL=unplugin-BEWhmsTM.d.mts.map
|
package/dist/unplugin.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as DirwellPluginOptions, r as unplugin, t as DirwellPluginInput } from "./unplugin-
|
|
1
|
+
import { n as DirwellPluginOptions, r as unplugin, t as DirwellPluginInput } from "./unplugin-BEWhmsTM.mjs";
|
|
2
2
|
export { DirwellPluginInput, DirwellPluginOptions, unplugin as default, unplugin };
|
package/dist/unplugin.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as unplugin } from "./unplugin-
|
|
1
|
+
import { t as unplugin } from "./unplugin-3KZVc7em.mjs";
|
|
2
2
|
export { unplugin as default, unplugin };
|
package/dist/vite.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as DirwellConfig } from "./config-
|
|
1
|
+
import { t as DirwellConfig } from "./config-CJutlaP0.mjs";
|
|
2
2
|
//#region src/vite.d.ts
|
|
3
3
|
/** Dirwell configuration with an output path relative to the Vite project root or absolute. */
|
|
4
4
|
export type DirwellViteOptions = Omit<DirwellConfig, "extends" | "server"> & {
|
package/dist/webpack.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as DirwellPluginOptions, t as DirwellPluginInput } from "./unplugin-
|
|
1
|
+
import { n as DirwellPluginOptions, t as DirwellPluginInput } from "./unplugin-BEWhmsTM.mjs";
|
|
2
2
|
import { UnpluginInstance } from "unplugin";
|
|
3
3
|
//#region src/webpack.d.ts
|
|
4
4
|
declare const plugin: UnpluginInstance<DirwellPluginInput, true>["webpack"];
|
package/dist/webpack.mjs
CHANGED