From 2b374ddd69da129283708865a7eb400859fd171a Mon Sep 17 00:00:00 2001 From: Niels Mokkenstorm Date: Tue, 19 May 2026 00:35:09 +0200 Subject: [PATCH] fix(cvg-133): mirror @cv/core .hbs/.css assets to dist via post-build script (#58) --- package.json | 3 +- packages/core/package.json | 2 +- packages/core/scripts/post-build.mts | 38 ++++++++++++++++ pnpm-lock.yaml | 68 +++++++++++++++++----------- 4 files changed, 83 insertions(+), 28 deletions(-) create mode 100644 packages/core/scripts/post-build.mts diff --git a/package.json b/package.json index 6e99453..19ed31d 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "@commitlint/config-conventional": "^19.6.0", "@types/node": "^22.7.5", "lefthook": "^1.8.0", - "lerna": "^8.2.4" + "lerna": "^8.2.4", + "tsx": "^4.22.2" }, "scripts": { "prepare": "lefthook install", diff --git a/packages/core/package.json b/packages/core/package.json index 949893c..2ad2ccc 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -10,7 +10,7 @@ "typecheck": "tsc --noEmit", "prisma:generate": "prisma generate", "prisma:deploy": "prisma migrate deploy", - "build": "tsc -b && cp -R src/modules/cv-template/templates dist/modules/cv-template/templates" + "build": "tsc -b && tsx scripts/post-build.mts" }, "dependencies": { "@cv/ai-parser": "workspace:*", diff --git a/packages/core/scripts/post-build.mts b/packages/core/scripts/post-build.mts new file mode 100644 index 0000000..af0b8e0 --- /dev/null +++ b/packages/core/scripts/post-build.mts @@ -0,0 +1,38 @@ +import type { Dirent } from "node:fs"; +import { copyFile, mkdir, readdir } from "node:fs/promises"; +import { dirname, join, relative } from "node:path"; + +const SRC = "src"; +const DIST = "dist"; +const ASSET_EXTENSIONS = [".hbs", ".css"] as const; + +const isAsset = (filename: string): boolean => + ASSET_EXTENSIONS.some((ext) => filename.endsWith(ext)); + +const mirrorAsset = async (fullPath: string): Promise => { + const target = join(DIST, relative(SRC, fullPath)); + await mkdir(dirname(target), { recursive: true }); + await copyFile(fullPath, target); +}; + +const walk = async (dir: string): Promise => { + const entries = await readdir(dir, { withFileTypes: true }); + + const tasks = entries.flatMap((entry: Dirent): Promise[] => { + const fullPath = join(dir, entry.name); + + if (entry.isDirectory()) { + return [walk(fullPath)]; + } + + if (entry.isFile() && isAsset(entry.name)) { + return [mirrorAsset(fullPath)]; + } + + return []; + }); + + await Promise.all(tasks); +}; + +await walk(SRC); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 276e327..770a407 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -66,6 +66,9 @@ importers: lerna: specifier: ^8.2.4 version: 8.2.4(@swc/core@1.15.13)(@types/node@22.19.3)(encoding@0.1.13) + tsx: + specifier: ^4.22.2 + version: 4.22.2 apps/api: dependencies: @@ -324,7 +327,7 @@ importers: version: 1.5.9(@swc/core@1.15.13)(rollup@4.60.3) vitest: specifier: ^4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(yaml@2.9.0) + version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) apps/client: dependencies: @@ -415,7 +418,7 @@ importers: version: 4.1.18 '@tailwindcss/vite': specifier: ^4.0.0 - version: 4.1.18(vite@7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0)) + version: 4.1.18(vite@7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0)) '@types/react': specifier: ^19.0.6 version: 19.2.7 @@ -424,7 +427,7 @@ importers: version: 19.2.3(@types/react@19.2.7) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0)) + version: 4.7.0(vite@7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0)) tailwindcss: specifier: ^4.0.0 version: 4.1.18 @@ -433,7 +436,7 @@ importers: version: 5.9.3 vite: specifier: ^7.3.2 - version: 7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0) + version: 7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) apps/docs: dependencies: @@ -485,7 +488,7 @@ importers: version: 4.1.18 '@tailwindcss/vite': specifier: ^4.0.0 - version: 4.1.18(vite@7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0)) + version: 4.1.18(vite@7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0)) '@types/mdast': specifier: ^4.0.4 version: 4.0.4 @@ -500,7 +503,7 @@ importers: version: 3.0.3 '@vitejs/plugin-react': specifier: ^4.3.1 - version: 4.7.0(vite@7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0)) + version: 4.7.0(vite@7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0)) autoprefixer: specifier: ^10.4.20 version: 10.4.23(postcss@8.5.14) @@ -518,7 +521,7 @@ importers: version: 11.0.5 vite: specifier: ^7.3.2 - version: 7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0) + version: 7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) apps/worker: dependencies: @@ -612,7 +615,7 @@ importers: version: 1.5.9(@swc/core@1.15.13)(rollup@4.60.3) vitest: specifier: ^4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(yaml@2.9.0) + version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) packages/ai-parser: dependencies: @@ -637,7 +640,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.0 - version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(yaml@2.9.0) + version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) packages/ai-provider: dependencies: @@ -662,7 +665,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.0 - version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(yaml@2.9.0) + version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) packages/auth: dependencies: @@ -888,7 +891,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.0 - version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(yaml@2.9.0) + version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) packages/cv-renderer: dependencies: @@ -916,7 +919,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.0 - version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(yaml@2.9.0) + version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) packages/file-storage: dependencies: @@ -999,7 +1002,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.0 - version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(yaml@2.9.0) + version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) packages/handlebars: dependencies: @@ -1070,7 +1073,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.0 - version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(yaml@2.9.0) + version: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) packages/mail: dependencies: @@ -8688,6 +8691,11 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsx@4.22.2: + resolution: {integrity: sha512-6w9FwtT8WQqRAyTNR+Z+86kghRqpmOLjXUrBlBT6T+CQGDuIMm0VmAqaFUFBIeKDTGobE6/YSigZYLeomzBaRg==} + engines: {node: '>=18.0.0'} + hasBin: true + tuf-js@2.2.1: resolution: {integrity: sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -13145,12 +13153,12 @@ snapshots: postcss: 8.5.14 tailwindcss: 4.1.18 - '@tailwindcss/vite@4.1.18(vite@7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0))': + '@tailwindcss/vite@4.1.18(vite@7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0))': dependencies: '@tailwindcss/node': 4.1.18 '@tailwindcss/oxide': 4.1.18 tailwindcss: 4.1.18 - vite: 7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0) + vite: 7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) '@tanstack/query-core@5.90.16': {} @@ -13444,7 +13452,7 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-react@4.7.0(vite@7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0))': + '@vitejs/plugin-react@4.7.0(vite@7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) @@ -13452,7 +13460,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0) + vite: 7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) transitivePeerDependencies: - supports-color @@ -13465,13 +13473,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.16(vite@7.3.0(@types/node@22.19.3)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0))': + '@vitest/mocker@4.0.16(vite@7.3.0(@types/node@22.19.3)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.0.16 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.0(@types/node@22.19.3)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0) + vite: 7.3.0(@types/node@22.19.3)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) '@vitest/pretty-format@4.0.16': dependencies: @@ -13499,7 +13507,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(yaml@2.9.0) + vitest: 4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) '@vitest/utils@4.0.16': dependencies: @@ -18228,6 +18236,12 @@ snapshots: tslib@2.8.1: {} + tsx@4.22.2: + dependencies: + esbuild: 0.25.12 + optionalDependencies: + fsevents: 2.3.3 + tuf-js@2.2.1: dependencies: '@tufjs/models': 2.0.1 @@ -18430,7 +18444,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@7.3.0(@types/node@22.19.3)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0): + vite@7.3.0(@types/node@22.19.3)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.4) @@ -18443,9 +18457,10 @@ snapshots: fsevents: 2.3.3 jiti: 2.7.0 lightningcss: 1.30.2 + tsx: 4.22.2 yaml: 2.9.0 - vite@7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0): + vite@7.3.3(@types/node@22.19.18)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.4) @@ -18458,12 +18473,13 @@ snapshots: fsevents: 2.3.3 jiti: 2.7.0 lightningcss: 1.30.2 + tsx: 4.22.2 yaml: 2.9.0 - vitest@4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(yaml@2.9.0): + vitest@4.0.16(@opentelemetry/api@1.9.1)(@types/node@22.19.3)(@vitest/ui@4.0.16)(jiti@2.7.0)(jsdom@28.1.0(@noble/hashes@1.8.0)(canvas@3.2.1))(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0): dependencies: '@vitest/expect': 4.0.16 - '@vitest/mocker': 4.0.16(vite@7.3.0(@types/node@22.19.3)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0)) + '@vitest/mocker': 4.0.16(vite@7.3.0(@types/node@22.19.3)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0)) '@vitest/pretty-format': 4.0.16 '@vitest/runner': 4.0.16 '@vitest/snapshot': 4.0.16 @@ -18480,7 +18496,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.0(@types/node@22.19.3)(jiti@2.7.0)(lightningcss@1.30.2)(yaml@2.9.0) + vite: 7.3.0(@types/node@22.19.3)(jiti@2.7.0)(lightningcss@1.30.2)(tsx@4.22.2)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 -- 2.51.2