@blorkfield/overlay-core 0.5.7 → 0.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -36,13 +36,32 @@ __export(vite_plugin_exports, {
36
36
  module.exports = __toCommonJS(vite_plugin_exports);
37
37
  var import_node_url = require("url");
38
38
  var import_node_path = require("path");
39
+ var import_promises = require("fs/promises");
39
40
  var import_meta = {};
41
+ async function getAllFiles(dir, baseDir = dir) {
42
+ const files = [];
43
+ const entries = await (0, import_promises.readdir)(dir, { withFileTypes: true });
44
+ for (const entry of entries) {
45
+ const fullPath = (0, import_node_path.join)(dir, entry.name);
46
+ if (entry.isDirectory()) {
47
+ files.push(...await getAllFiles(fullPath, baseDir));
48
+ } else {
49
+ files.push({
50
+ path: fullPath,
51
+ relativePath: (0, import_node_path.relative)(baseDir, fullPath)
52
+ });
53
+ }
54
+ }
55
+ return files;
56
+ }
40
57
  function overlayFontsPlugin() {
41
58
  let fontsDir;
42
59
  let publicDir;
60
+ let isBuild = false;
43
61
  return {
44
62
  name: "overlay-core-assets",
45
- configResolved() {
63
+ configResolved(config) {
64
+ isBuild = config.command === "build";
46
65
  let packageRoot;
47
66
  try {
48
67
  const currentFile = (0, import_node_url.fileURLToPath)(import_meta.url);
@@ -71,6 +90,41 @@ function overlayFontsPlugin() {
71
90
  server.middlewares.use("/fonts", serveFonts);
72
91
  const servePublic = sirv(publicDir, { etag: true });
73
92
  server.middlewares.use(servePublic);
93
+ },
94
+ async generateBundle() {
95
+ if (!isBuild) return;
96
+ try {
97
+ const fontsDirStat = await (0, import_promises.stat)(fontsDir).catch(() => null);
98
+ if (fontsDirStat?.isDirectory()) {
99
+ const fontFiles = await getAllFiles(fontsDir);
100
+ for (const file of fontFiles) {
101
+ const content = await (0, import_promises.readFile)(file.path);
102
+ this.emitFile({
103
+ type: "asset",
104
+ fileName: `fonts/${file.relativePath}`,
105
+ source: content
106
+ });
107
+ }
108
+ }
109
+ } catch (err) {
110
+ console.warn("[overlay-core-assets] Failed to emit font files:", err);
111
+ }
112
+ try {
113
+ const publicDirStat = await (0, import_promises.stat)(publicDir).catch(() => null);
114
+ if (publicDirStat?.isDirectory()) {
115
+ const publicFiles = await getAllFiles(publicDir);
116
+ for (const file of publicFiles) {
117
+ const content = await (0, import_promises.readFile)(file.path);
118
+ this.emitFile({
119
+ type: "asset",
120
+ fileName: file.relativePath,
121
+ source: content
122
+ });
123
+ }
124
+ }
125
+ } catch (err) {
126
+ console.warn("[overlay-core-assets] Failed to emit public files:", err);
127
+ }
74
128
  }
75
129
  };
76
130
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/vite-plugin.ts"],"sourcesContent":["import type { Plugin, ViteDevServer, PreviewServer } from 'vite';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, resolve } from 'node:path';\n\n/**\n * Vite plugin that serves bundled assets from the package.\n * Serves fonts at /fonts/ and public assets at root level.\n *\n * @example\n * ```typescript\n * // vite.config.ts\n * import { overlayFontsPlugin } from '@blorkfield/overlay-core/vite';\n *\n * export default defineConfig({\n * plugins: [overlayFontsPlugin()],\n * });\n * ```\n */\nexport function overlayFontsPlugin(): Plugin {\n let fontsDir: string;\n let publicDir: string;\n\n return {\n name: 'overlay-core-assets',\n\n configResolved() {\n // Determine the package root directory\n let packageRoot: string;\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const currentDir = dirname(currentFile);\n // From dist/vite-plugin.js, package root is ..\n packageRoot = resolve(currentDir, '..');\n } catch {\n // Fallback for CJS where __dirname is available\n if (typeof __dirname !== 'undefined') {\n packageRoot = resolve(__dirname, '..');\n } else {\n throw new Error('Unable to determine package path');\n }\n }\n fontsDir = resolve(packageRoot, 'fonts');\n publicDir = resolve(packageRoot, 'public');\n },\n\n async configureServer(server: ViteDevServer) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sirv = (await import('sirv' as any)).default as (dir: string, opts?: Record<string, unknown>) => any;\n\n // Serve fonts at /fonts/\n const serveFonts = sirv(fontsDir, { dev: true, etag: true });\n server.middlewares.use('/fonts', serveFonts);\n\n // Serve public assets at root level\n const servePublic = sirv(publicDir, { dev: true, etag: true });\n server.middlewares.use(servePublic);\n },\n\n async configurePreviewServer(server: PreviewServer) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sirv = (await import('sirv' as any)).default as (dir: string, opts?: Record<string, unknown>) => any;\n\n // Serve fonts at /fonts/\n const serveFonts = sirv(fontsDir, { etag: true });\n server.middlewares.use('/fonts', serveFonts);\n\n // Serve public assets at root level\n const servePublic = sirv(publicDir, { etag: true });\n server.middlewares.use(servePublic);\n },\n };\n}\n\nexport default overlayFontsPlugin;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,sBAA8B;AAC9B,uBAAiC;AAFjC;AAkBO,SAAS,qBAA6B;AAC3C,MAAI;AACJ,MAAI;AAEJ,SAAO;AAAA,IACL,MAAM;AAAA,IAEN,iBAAiB;AAEf,UAAI;AACJ,UAAI;AACF,cAAM,kBAAc,+BAAc,YAAY,GAAG;AACjD,cAAM,iBAAa,0BAAQ,WAAW;AAEtC,0BAAc,0BAAQ,YAAY,IAAI;AAAA,MACxC,QAAQ;AAEN,YAAI,OAAO,cAAc,aAAa;AACpC,4BAAc,0BAAQ,WAAW,IAAI;AAAA,QACvC,OAAO;AACL,gBAAM,IAAI,MAAM,kCAAkC;AAAA,QACpD;AAAA,MACF;AACA,qBAAW,0BAAQ,aAAa,OAAO;AACvC,sBAAY,0BAAQ,aAAa,QAAQ;AAAA,IAC3C;AAAA,IAEA,MAAM,gBAAgB,QAAuB;AAE3C,YAAM,QAAQ,MAAM,OAAO,MAAa,GAAG;AAG3C,YAAM,aAAa,KAAK,UAAU,EAAE,KAAK,MAAM,MAAM,KAAK,CAAC;AAC3D,aAAO,YAAY,IAAI,UAAU,UAAU;AAG3C,YAAM,cAAc,KAAK,WAAW,EAAE,KAAK,MAAM,MAAM,KAAK,CAAC;AAC7D,aAAO,YAAY,IAAI,WAAW;AAAA,IACpC;AAAA,IAEA,MAAM,uBAAuB,QAAuB;AAElD,YAAM,QAAQ,MAAM,OAAO,MAAa,GAAG;AAG3C,YAAM,aAAa,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC;AAChD,aAAO,YAAY,IAAI,UAAU,UAAU;AAG3C,YAAM,cAAc,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAClD,aAAO,YAAY,IAAI,WAAW;AAAA,IACpC;AAAA,EACF;AACF;AAEA,IAAO,sBAAQ;","names":[]}
1
+ {"version":3,"sources":["../src/vite-plugin.ts"],"sourcesContent":["import type { Plugin, ViteDevServer, PreviewServer } from 'vite';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, resolve, join, relative } from 'node:path';\nimport { readdir, readFile, stat } from 'node:fs/promises';\n\n/**\n * Recursively get all files in a directory\n */\nasync function getAllFiles(dir: string, baseDir: string = dir): Promise<{ path: string; relativePath: string }[]> {\n const files: { path: string; relativePath: string }[] = [];\n const entries = await readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n files.push(...await getAllFiles(fullPath, baseDir));\n } else {\n files.push({\n path: fullPath,\n relativePath: relative(baseDir, fullPath)\n });\n }\n }\n\n return files;\n}\n\n/**\n * Vite plugin that serves bundled assets from the package.\n * Serves fonts at /fonts/ and public assets at root level.\n *\n * During build, emits all assets to the output directory.\n *\n * @example\n * ```typescript\n * // vite.config.ts\n * import { overlayFontsPlugin } from '@blorkfield/overlay-core/vite';\n *\n * export default defineConfig({\n * plugins: [overlayFontsPlugin()],\n * });\n * ```\n */\nexport function overlayFontsPlugin(): Plugin {\n let fontsDir: string;\n let publicDir: string;\n let isBuild = false;\n\n return {\n name: 'overlay-core-assets',\n\n configResolved(config) {\n isBuild = config.command === 'build';\n\n // Determine the package root directory\n let packageRoot: string;\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const currentDir = dirname(currentFile);\n // From dist/vite-plugin.js, package root is ..\n packageRoot = resolve(currentDir, '..');\n } catch {\n // Fallback for CJS where __dirname is available\n if (typeof __dirname !== 'undefined') {\n packageRoot = resolve(__dirname, '..');\n } else {\n throw new Error('Unable to determine package path');\n }\n }\n fontsDir = resolve(packageRoot, 'fonts');\n publicDir = resolve(packageRoot, 'public');\n },\n\n async configureServer(server: ViteDevServer) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sirv = (await import('sirv' as any)).default as (dir: string, opts?: Record<string, unknown>) => any;\n\n // Serve fonts at /fonts/\n const serveFonts = sirv(fontsDir, { dev: true, etag: true });\n server.middlewares.use('/fonts', serveFonts);\n\n // Serve public assets at root level\n const servePublic = sirv(publicDir, { dev: true, etag: true });\n server.middlewares.use(servePublic);\n },\n\n async configurePreviewServer(server: PreviewServer) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sirv = (await import('sirv' as any)).default as (dir: string, opts?: Record<string, unknown>) => any;\n\n // Serve fonts at /fonts/\n const serveFonts = sirv(fontsDir, { etag: true });\n server.middlewares.use('/fonts', serveFonts);\n\n // Serve public assets at root level\n const servePublic = sirv(publicDir, { etag: true });\n server.middlewares.use(servePublic);\n },\n\n async generateBundle() {\n if (!isBuild) return;\n\n // Emit font files\n try {\n const fontsDirStat = await stat(fontsDir).catch(() => null);\n if (fontsDirStat?.isDirectory()) {\n const fontFiles = await getAllFiles(fontsDir);\n for (const file of fontFiles) {\n const content = await readFile(file.path);\n this.emitFile({\n type: 'asset',\n fileName: `fonts/${file.relativePath}`,\n source: content\n });\n }\n }\n } catch (err) {\n console.warn('[overlay-core-assets] Failed to emit font files:', err);\n }\n\n // Emit public files\n try {\n const publicDirStat = await stat(publicDir).catch(() => null);\n if (publicDirStat?.isDirectory()) {\n const publicFiles = await getAllFiles(publicDir);\n for (const file of publicFiles) {\n const content = await readFile(file.path);\n this.emitFile({\n type: 'asset',\n fileName: file.relativePath,\n source: content\n });\n }\n }\n } catch (err) {\n console.warn('[overlay-core-assets] Failed to emit public files:', err);\n }\n }\n };\n}\n\nexport default overlayFontsPlugin;\n"],"mappings":"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","names":[]}
@@ -4,6 +4,8 @@ import { Plugin } from 'vite';
4
4
  * Vite plugin that serves bundled assets from the package.
5
5
  * Serves fonts at /fonts/ and public assets at root level.
6
6
  *
7
+ * During build, emits all assets to the output directory.
8
+ *
7
9
  * @example
8
10
  * ```typescript
9
11
  * // vite.config.ts
@@ -4,6 +4,8 @@ import { Plugin } from 'vite';
4
4
  * Vite plugin that serves bundled assets from the package.
5
5
  * Serves fonts at /fonts/ and public assets at root level.
6
6
  *
7
+ * During build, emits all assets to the output directory.
8
+ *
7
9
  * @example
8
10
  * ```typescript
9
11
  * // vite.config.ts
@@ -1,12 +1,31 @@
1
1
  // src/vite-plugin.ts
2
2
  import { fileURLToPath } from "url";
3
- import { dirname, resolve } from "path";
3
+ import { dirname, resolve, join, relative } from "path";
4
+ import { readdir, readFile, stat } from "fs/promises";
5
+ async function getAllFiles(dir, baseDir = dir) {
6
+ const files = [];
7
+ const entries = await readdir(dir, { withFileTypes: true });
8
+ for (const entry of entries) {
9
+ const fullPath = join(dir, entry.name);
10
+ if (entry.isDirectory()) {
11
+ files.push(...await getAllFiles(fullPath, baseDir));
12
+ } else {
13
+ files.push({
14
+ path: fullPath,
15
+ relativePath: relative(baseDir, fullPath)
16
+ });
17
+ }
18
+ }
19
+ return files;
20
+ }
4
21
  function overlayFontsPlugin() {
5
22
  let fontsDir;
6
23
  let publicDir;
24
+ let isBuild = false;
7
25
  return {
8
26
  name: "overlay-core-assets",
9
- configResolved() {
27
+ configResolved(config) {
28
+ isBuild = config.command === "build";
10
29
  let packageRoot;
11
30
  try {
12
31
  const currentFile = fileURLToPath(import.meta.url);
@@ -35,6 +54,41 @@ function overlayFontsPlugin() {
35
54
  server.middlewares.use("/fonts", serveFonts);
36
55
  const servePublic = sirv(publicDir, { etag: true });
37
56
  server.middlewares.use(servePublic);
57
+ },
58
+ async generateBundle() {
59
+ if (!isBuild) return;
60
+ try {
61
+ const fontsDirStat = await stat(fontsDir).catch(() => null);
62
+ if (fontsDirStat?.isDirectory()) {
63
+ const fontFiles = await getAllFiles(fontsDir);
64
+ for (const file of fontFiles) {
65
+ const content = await readFile(file.path);
66
+ this.emitFile({
67
+ type: "asset",
68
+ fileName: `fonts/${file.relativePath}`,
69
+ source: content
70
+ });
71
+ }
72
+ }
73
+ } catch (err) {
74
+ console.warn("[overlay-core-assets] Failed to emit font files:", err);
75
+ }
76
+ try {
77
+ const publicDirStat = await stat(publicDir).catch(() => null);
78
+ if (publicDirStat?.isDirectory()) {
79
+ const publicFiles = await getAllFiles(publicDir);
80
+ for (const file of publicFiles) {
81
+ const content = await readFile(file.path);
82
+ this.emitFile({
83
+ type: "asset",
84
+ fileName: file.relativePath,
85
+ source: content
86
+ });
87
+ }
88
+ }
89
+ } catch (err) {
90
+ console.warn("[overlay-core-assets] Failed to emit public files:", err);
91
+ }
38
92
  }
39
93
  };
40
94
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/vite-plugin.ts"],"sourcesContent":["import type { Plugin, ViteDevServer, PreviewServer } from 'vite';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, resolve } from 'node:path';\n\n/**\n * Vite plugin that serves bundled assets from the package.\n * Serves fonts at /fonts/ and public assets at root level.\n *\n * @example\n * ```typescript\n * // vite.config.ts\n * import { overlayFontsPlugin } from '@blorkfield/overlay-core/vite';\n *\n * export default defineConfig({\n * plugins: [overlayFontsPlugin()],\n * });\n * ```\n */\nexport function overlayFontsPlugin(): Plugin {\n let fontsDir: string;\n let publicDir: string;\n\n return {\n name: 'overlay-core-assets',\n\n configResolved() {\n // Determine the package root directory\n let packageRoot: string;\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const currentDir = dirname(currentFile);\n // From dist/vite-plugin.js, package root is ..\n packageRoot = resolve(currentDir, '..');\n } catch {\n // Fallback for CJS where __dirname is available\n if (typeof __dirname !== 'undefined') {\n packageRoot = resolve(__dirname, '..');\n } else {\n throw new Error('Unable to determine package path');\n }\n }\n fontsDir = resolve(packageRoot, 'fonts');\n publicDir = resolve(packageRoot, 'public');\n },\n\n async configureServer(server: ViteDevServer) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sirv = (await import('sirv' as any)).default as (dir: string, opts?: Record<string, unknown>) => any;\n\n // Serve fonts at /fonts/\n const serveFonts = sirv(fontsDir, { dev: true, etag: true });\n server.middlewares.use('/fonts', serveFonts);\n\n // Serve public assets at root level\n const servePublic = sirv(publicDir, { dev: true, etag: true });\n server.middlewares.use(servePublic);\n },\n\n async configurePreviewServer(server: PreviewServer) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sirv = (await import('sirv' as any)).default as (dir: string, opts?: Record<string, unknown>) => any;\n\n // Serve fonts at /fonts/\n const serveFonts = sirv(fontsDir, { etag: true });\n server.middlewares.use('/fonts', serveFonts);\n\n // Serve public assets at root level\n const servePublic = sirv(publicDir, { etag: true });\n server.middlewares.use(servePublic);\n },\n };\n}\n\nexport default overlayFontsPlugin;\n"],"mappings":";AACA,SAAS,qBAAqB;AAC9B,SAAS,SAAS,eAAe;AAgB1B,SAAS,qBAA6B;AAC3C,MAAI;AACJ,MAAI;AAEJ,SAAO;AAAA,IACL,MAAM;AAAA,IAEN,iBAAiB;AAEf,UAAI;AACJ,UAAI;AACF,cAAM,cAAc,cAAc,YAAY,GAAG;AACjD,cAAM,aAAa,QAAQ,WAAW;AAEtC,sBAAc,QAAQ,YAAY,IAAI;AAAA,MACxC,QAAQ;AAEN,YAAI,OAAO,cAAc,aAAa;AACpC,wBAAc,QAAQ,WAAW,IAAI;AAAA,QACvC,OAAO;AACL,gBAAM,IAAI,MAAM,kCAAkC;AAAA,QACpD;AAAA,MACF;AACA,iBAAW,QAAQ,aAAa,OAAO;AACvC,kBAAY,QAAQ,aAAa,QAAQ;AAAA,IAC3C;AAAA,IAEA,MAAM,gBAAgB,QAAuB;AAE3C,YAAM,QAAQ,MAAM,OAAO,MAAa,GAAG;AAG3C,YAAM,aAAa,KAAK,UAAU,EAAE,KAAK,MAAM,MAAM,KAAK,CAAC;AAC3D,aAAO,YAAY,IAAI,UAAU,UAAU;AAG3C,YAAM,cAAc,KAAK,WAAW,EAAE,KAAK,MAAM,MAAM,KAAK,CAAC;AAC7D,aAAO,YAAY,IAAI,WAAW;AAAA,IACpC;AAAA,IAEA,MAAM,uBAAuB,QAAuB;AAElD,YAAM,QAAQ,MAAM,OAAO,MAAa,GAAG;AAG3C,YAAM,aAAa,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC;AAChD,aAAO,YAAY,IAAI,UAAU,UAAU;AAG3C,YAAM,cAAc,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAClD,aAAO,YAAY,IAAI,WAAW;AAAA,IACpC;AAAA,EACF;AACF;AAEA,IAAO,sBAAQ;","names":[]}
1
+ {"version":3,"sources":["../src/vite-plugin.ts"],"sourcesContent":["import type { Plugin, ViteDevServer, PreviewServer } from 'vite';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, resolve, join, relative } from 'node:path';\nimport { readdir, readFile, stat } from 'node:fs/promises';\n\n/**\n * Recursively get all files in a directory\n */\nasync function getAllFiles(dir: string, baseDir: string = dir): Promise<{ path: string; relativePath: string }[]> {\n const files: { path: string; relativePath: string }[] = [];\n const entries = await readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n files.push(...await getAllFiles(fullPath, baseDir));\n } else {\n files.push({\n path: fullPath,\n relativePath: relative(baseDir, fullPath)\n });\n }\n }\n\n return files;\n}\n\n/**\n * Vite plugin that serves bundled assets from the package.\n * Serves fonts at /fonts/ and public assets at root level.\n *\n * During build, emits all assets to the output directory.\n *\n * @example\n * ```typescript\n * // vite.config.ts\n * import { overlayFontsPlugin } from '@blorkfield/overlay-core/vite';\n *\n * export default defineConfig({\n * plugins: [overlayFontsPlugin()],\n * });\n * ```\n */\nexport function overlayFontsPlugin(): Plugin {\n let fontsDir: string;\n let publicDir: string;\n let isBuild = false;\n\n return {\n name: 'overlay-core-assets',\n\n configResolved(config) {\n isBuild = config.command === 'build';\n\n // Determine the package root directory\n let packageRoot: string;\n try {\n const currentFile = fileURLToPath(import.meta.url);\n const currentDir = dirname(currentFile);\n // From dist/vite-plugin.js, package root is ..\n packageRoot = resolve(currentDir, '..');\n } catch {\n // Fallback for CJS where __dirname is available\n if (typeof __dirname !== 'undefined') {\n packageRoot = resolve(__dirname, '..');\n } else {\n throw new Error('Unable to determine package path');\n }\n }\n fontsDir = resolve(packageRoot, 'fonts');\n publicDir = resolve(packageRoot, 'public');\n },\n\n async configureServer(server: ViteDevServer) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sirv = (await import('sirv' as any)).default as (dir: string, opts?: Record<string, unknown>) => any;\n\n // Serve fonts at /fonts/\n const serveFonts = sirv(fontsDir, { dev: true, etag: true });\n server.middlewares.use('/fonts', serveFonts);\n\n // Serve public assets at root level\n const servePublic = sirv(publicDir, { dev: true, etag: true });\n server.middlewares.use(servePublic);\n },\n\n async configurePreviewServer(server: PreviewServer) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sirv = (await import('sirv' as any)).default as (dir: string, opts?: Record<string, unknown>) => any;\n\n // Serve fonts at /fonts/\n const serveFonts = sirv(fontsDir, { etag: true });\n server.middlewares.use('/fonts', serveFonts);\n\n // Serve public assets at root level\n const servePublic = sirv(publicDir, { etag: true });\n server.middlewares.use(servePublic);\n },\n\n async generateBundle() {\n if (!isBuild) return;\n\n // Emit font files\n try {\n const fontsDirStat = await stat(fontsDir).catch(() => null);\n if (fontsDirStat?.isDirectory()) {\n const fontFiles = await getAllFiles(fontsDir);\n for (const file of fontFiles) {\n const content = await readFile(file.path);\n this.emitFile({\n type: 'asset',\n fileName: `fonts/${file.relativePath}`,\n source: content\n });\n }\n }\n } catch (err) {\n console.warn('[overlay-core-assets] Failed to emit font files:', err);\n }\n\n // Emit public files\n try {\n const publicDirStat = await stat(publicDir).catch(() => null);\n if (publicDirStat?.isDirectory()) {\n const publicFiles = await getAllFiles(publicDir);\n for (const file of publicFiles) {\n const content = await readFile(file.path);\n this.emitFile({\n type: 'asset',\n fileName: file.relativePath,\n source: content\n });\n }\n }\n } catch (err) {\n console.warn('[overlay-core-assets] Failed to emit public files:', err);\n }\n }\n };\n}\n\nexport default overlayFontsPlugin;\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blorkfield/overlay-core",
3
- "version": "0.5.7",
3
+ "version": "0.5.8",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",