@better-fullstack/template-generator 2.1.8 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.d.mts +1 -1
- package/dist/browser.mjs +1 -1
- package/dist/index.d.mts +249 -196
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +156 -6
- package/dist/index.mjs.map +1 -1
- package/dist/{preflight-validation-D2Kdxd4D.d.mts → preflight-validation-BX7t84dq.d.mts} +2 -2
- package/dist/{preflight-validation-D2Kdxd4D.d.mts.map → preflight-validation-BX7t84dq.d.mts.map} +1 -1
- package/dist/{preflight-validation-CZ_oL2PY.mjs → preflight-validation-C2r49RGh.mjs} +85693 -80252
- package/dist/preflight-validation-C2r49RGh.mjs.map +1 -0
- package/package.json +3 -3
- package/dist/preflight-validation-CZ_oL2PY.mjs.map +0 -1
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/template-processor.ts","../src/processors/addons-deps.ts","../src/utils/add-deps.ts","../src/utils/dependency-checker.ts"],"sourcesContent":[],"mappings":";;;;;;iBAqQgB,sBAAA;iBA4BA,gBAAA;iBAUA,mBAAA;iBAeA,mBAAA;AArDA,iBA4FA,qBAAA,CA5FsB,OAAA,EAAA,MAAA,EAAA,OAAA,EA4F0B,aA5F1B,CAAA,EAAA,MAAA;AA4BtB,iBAoEA,YAAA,CApEgB,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAUhB,iBA8DA,iBAAA,CA9DmB,QAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAenB,iBAyDA,kBAAA,CAzDmB,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EA4DxB,aA5DwB,CAAA,EAAA,MAAA;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/template-processor.ts","../src/processors/addons-deps.ts","../src/utils/add-deps.ts","../src/utils/dependency-checker.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,130 @@
|
|
|
1
|
-
import { _ as VirtualFileSystem, a as processAddonTemplates, c as Handlebars, d as isBinaryFile, f as nativeApplicationId, g as transformFilename, h as processTemplateString, i as generateVirtualProject, l as elixirDeployAppName, m as processFileContent, n as EMBEDDED_TEMPLATES, o as processAddonsDeps, p as normalizeElixirAppName, r as TEMPLATE_COUNT, s as dependencyVersionMap, t as validatePreflightConfig, u as elixirModuleName } from "./preflight-validation-
|
|
1
|
+
import { _ as VirtualFileSystem, a as processAddonTemplates, c as Handlebars, d as isBinaryFile, f as nativeApplicationId, g as transformFilename, h as processTemplateString, i as generateVirtualProject, l as elixirDeployAppName, m as processFileContent, n as EMBEDDED_TEMPLATES, o as processAddonsDeps, p as normalizeElixirAppName, r as TEMPLATE_COUNT, s as dependencyVersionMap, t as validatePreflightConfig, u as elixirModuleName } from "./preflight-validation-C2r49RGh.mjs";
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
|
|
5
|
+
//#region src/utils/dependency-update-policy.ts
|
|
6
|
+
/**
|
|
7
|
+
* Registry freshness is advisory. This policy captures compatibility and
|
|
8
|
+
* package-manager constraints that cannot be inferred from npm's latest tag.
|
|
9
|
+
*/
|
|
10
|
+
const DEPENDENCY_UPDATE_POLICIES = {
|
|
11
|
+
nuxt: {
|
|
12
|
+
pinnedVersion: "4.4.8",
|
|
13
|
+
reason: "nuxt 4.5.0 requires @unhead/vue ^3 while @nuxt/ui 4.10.0 still pins ^2 — nitro dev/build crash. Exact pin; unpin when @nuxt/ui supports nuxt 4.5."
|
|
14
|
+
},
|
|
15
|
+
typescript: {
|
|
16
|
+
pinnedVersion: "^6.0.3",
|
|
17
|
+
reason: "TypeScript 7 currently breaks generated database package type portability (TS2883)."
|
|
18
|
+
},
|
|
19
|
+
turbo: {
|
|
20
|
+
pinnedVersion: "^2.10.0",
|
|
21
|
+
reason: "Newer 2.10.x releases are quarantined by Yarn hardened mode."
|
|
22
|
+
},
|
|
23
|
+
tsdown: {
|
|
24
|
+
pinnedVersion: "^0.22.3",
|
|
25
|
+
reason: "Newer releases are quarantined by Yarn hardened mode."
|
|
26
|
+
},
|
|
27
|
+
postcss: {
|
|
28
|
+
pinnedVersion: "^8.5.15",
|
|
29
|
+
reason: "Newer releases are quarantined by Yarn hardened mode."
|
|
30
|
+
},
|
|
31
|
+
graphql: {
|
|
32
|
+
pinnedVersion: "^16.11.0",
|
|
33
|
+
reason: "Garph, GraphQL Yoga, and Apollo Server peers currently cap GraphQL at 16.x."
|
|
34
|
+
},
|
|
35
|
+
"lucide-react": {
|
|
36
|
+
pinnedVersion: "^1.21.0",
|
|
37
|
+
reason: "Newer releases are quarantined by Yarn hardened mode."
|
|
38
|
+
},
|
|
39
|
+
"lucide-solid": {
|
|
40
|
+
pinnedVersion: "^1.21.0",
|
|
41
|
+
reason: "Keep the Lucide framework packages on the reviewed Yarn-compatible release."
|
|
42
|
+
},
|
|
43
|
+
hono: {
|
|
44
|
+
pinnedVersion: "^4.12.27",
|
|
45
|
+
reason: "Newer releases are quarantined by Yarn hardened mode."
|
|
46
|
+
},
|
|
47
|
+
"@tanstack/react-form": {
|
|
48
|
+
pinnedVersion: "^1.33.0",
|
|
49
|
+
reason: "Keep the TanStack Form family aligned on the reviewed Yarn-compatible release."
|
|
50
|
+
},
|
|
51
|
+
"@tanstack/solid-form": {
|
|
52
|
+
pinnedVersion: "^1.33.0",
|
|
53
|
+
reason: "Keep the TanStack Form family aligned on the reviewed Yarn-compatible release."
|
|
54
|
+
},
|
|
55
|
+
"@tanstack/svelte-form": {
|
|
56
|
+
pinnedVersion: "^1.33.0",
|
|
57
|
+
reason: "Keep the TanStack Form family aligned on the reviewed Yarn-compatible release."
|
|
58
|
+
},
|
|
59
|
+
"@auth0/nextjs-auth0": {
|
|
60
|
+
pinnedVersion: "^4.23.0",
|
|
61
|
+
reason: "Keep generated Next.js Auth0 integration on the explicitly tested SDK line."
|
|
62
|
+
},
|
|
63
|
+
"better-auth": {
|
|
64
|
+
pinnedVersion: "^1.6.22",
|
|
65
|
+
reason: "Keep the Better Auth family aligned with the reviewed Kysely and Yarn combination."
|
|
66
|
+
},
|
|
67
|
+
"@better-auth/expo": {
|
|
68
|
+
pinnedVersion: "^1.6.22",
|
|
69
|
+
reason: "Keep the Better Auth family aligned with the reviewed Kysely and Yarn combination."
|
|
70
|
+
},
|
|
71
|
+
"@better-auth/drizzle-adapter": {
|
|
72
|
+
pinnedVersion: "^1.6.22",
|
|
73
|
+
reason: "Keep the Better Auth family aligned with the reviewed Kysely and Yarn combination."
|
|
74
|
+
},
|
|
75
|
+
"@better-auth/prisma-adapter": {
|
|
76
|
+
pinnedVersion: "^1.6.22",
|
|
77
|
+
reason: "Keep the Better Auth family aligned with the reviewed Kysely and Yarn combination."
|
|
78
|
+
},
|
|
79
|
+
"@better-auth/mongo-adapter": {
|
|
80
|
+
pinnedVersion: "^1.6.22",
|
|
81
|
+
reason: "Keep the Better Auth family aligned with the reviewed Kysely and Yarn combination."
|
|
82
|
+
},
|
|
83
|
+
"@opentelemetry/sdk-node": {
|
|
84
|
+
pinnedVersion: "0.220.0",
|
|
85
|
+
reason: "Keep the coupled OpenTelemetry SDK and exporter release trains exact and aligned."
|
|
86
|
+
},
|
|
87
|
+
"@opentelemetry/auto-instrumentations-node": {
|
|
88
|
+
pinnedVersion: "0.78.0",
|
|
89
|
+
reason: "Keep the coupled OpenTelemetry SDK and exporter release trains exact and aligned."
|
|
90
|
+
},
|
|
91
|
+
"@opentelemetry/exporter-trace-otlp-http": {
|
|
92
|
+
pinnedVersion: "0.220.0",
|
|
93
|
+
reason: "Keep the coupled OpenTelemetry SDK and exporter release trains exact and aligned."
|
|
94
|
+
},
|
|
95
|
+
"@opentelemetry/exporter-metrics-otlp-http": {
|
|
96
|
+
pinnedVersion: "0.220.0",
|
|
97
|
+
reason: "Keep the coupled OpenTelemetry SDK and exporter release trains exact and aligned."
|
|
98
|
+
},
|
|
99
|
+
"@opentelemetry/resources": {
|
|
100
|
+
pinnedVersion: "2.9.0",
|
|
101
|
+
reason: "Keep the coupled OpenTelemetry SDK and exporter release trains exact and aligned."
|
|
102
|
+
},
|
|
103
|
+
"@opentelemetry/sdk-metrics": {
|
|
104
|
+
pinnedVersion: "2.9.0",
|
|
105
|
+
reason: "Keep the coupled OpenTelemetry SDK and exporter release trains exact and aligned."
|
|
106
|
+
},
|
|
107
|
+
vitest: {
|
|
108
|
+
pinnedVersion: "4.1.8",
|
|
109
|
+
reason: "The Vitest family is exact-pinned to the latest reviewed Yarn-compatible patch."
|
|
110
|
+
},
|
|
111
|
+
"@vitest/ui": {
|
|
112
|
+
pinnedVersion: "4.1.8",
|
|
113
|
+
reason: "The Vitest family is exact-pinned to the latest reviewed Yarn-compatible patch."
|
|
114
|
+
},
|
|
115
|
+
"@vitest/coverage-v8": {
|
|
116
|
+
pinnedVersion: "4.1.8",
|
|
117
|
+
reason: "The Vitest family is exact-pinned to the latest reviewed Yarn-compatible patch."
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
function getPinnedDependencyVersion(packageName) {
|
|
121
|
+
return DEPENDENCY_UPDATE_POLICIES[packageName]?.pinnedVersion;
|
|
122
|
+
}
|
|
123
|
+
function isMajorUpdateAllowlisted(packageName) {
|
|
124
|
+
return DEPENDENCY_UPDATE_POLICIES[packageName]?.allowMajor === true;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
//#endregion
|
|
5
128
|
//#region src/utils/dependency-checker.ts
|
|
6
129
|
/**
|
|
7
130
|
* Dependency Version Checker
|
|
@@ -9,6 +132,31 @@ import path from "node:path";
|
|
|
9
132
|
* Core library for checking and updating dependency versions.
|
|
10
133
|
* Used by both the CLI command and GitHub Action.
|
|
11
134
|
*/
|
|
135
|
+
/**
|
|
136
|
+
* Select updates automation may apply. Downgrades are never automatic, and
|
|
137
|
+
* majors require an explicit per-package allowlist even in `all` mode.
|
|
138
|
+
*/
|
|
139
|
+
function selectAutomatedUpdates(updates, mode) {
|
|
140
|
+
return updates.filter((update) => {
|
|
141
|
+
if (update.updateType === "downgrade" || update.updateType === "none") return false;
|
|
142
|
+
if (update.updateType === "major") return mode === "all" && isMajorUpdateAllowlisted(update.name);
|
|
143
|
+
return update.updateType === "minor" || update.updateType === "patch";
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Never bump a template floor onto a release younger than this. Yarn's
|
|
148
|
+
* hardened mode quarantines versions below its npmMinimalAgeGate (24h by
|
|
149
|
+
* default), so a fresher floor makes every yarn scaffold fail resolution;
|
|
150
|
+
* the margin also keeps generated projects off day-zero supply-chain risk.
|
|
151
|
+
*/
|
|
152
|
+
const MIN_RELEASE_AGE_MS = 2880 * 60 * 1e3;
|
|
153
|
+
function isOldEnough(info, version) {
|
|
154
|
+
const published = info.time?.[version];
|
|
155
|
+
if (!published) return true;
|
|
156
|
+
const publishedMs = Date.parse(published);
|
|
157
|
+
if (Number.isNaN(publishedMs)) return true;
|
|
158
|
+
return Date.now() - publishedMs >= MIN_RELEASE_AGE_MS;
|
|
159
|
+
}
|
|
12
160
|
const ECOSYSTEM_GROUPS = {
|
|
13
161
|
effect: [
|
|
14
162
|
"effect",
|
|
@@ -422,6 +570,8 @@ function getUpdateType(current, latest) {
|
|
|
422
570
|
if (comparison < 0) return "downgrade";
|
|
423
571
|
if (comparison === 0) return "patch";
|
|
424
572
|
if (lat.major > curr.major) return "major";
|
|
573
|
+
if (curr.major === 0 && lat.major === 0 && lat.minor > curr.minor) return "major";
|
|
574
|
+
if (curr.major === 0 && lat.major === 0 && curr.minor === 0 && lat.minor === 0 && lat.patch > curr.patch) return "major";
|
|
425
575
|
if (lat.minor > curr.minor) return "minor";
|
|
426
576
|
if (lat.patch > curr.patch) return "patch";
|
|
427
577
|
if (comparison > 0) return "patch";
|
|
@@ -444,7 +594,7 @@ async function fetchPackageInfo(packageName) {
|
|
|
444
594
|
return info;
|
|
445
595
|
}
|
|
446
596
|
function getStableVersionsDescending(info) {
|
|
447
|
-
return Object.keys(info.versions || {}).filter((version) => !/-(alpha|beta|rc|next|canary)/.test(version)).sort((a, b) => compareVersions(b, a));
|
|
597
|
+
return Object.keys(info.versions || {}).filter((version) => !/-(alpha|beta|rc|next|canary)/.test(version)).filter((version) => isOldEnough(info, version)).sort((a, b) => compareVersions(b, a));
|
|
448
598
|
}
|
|
449
599
|
async function fetchLatestCompatibleEcosystemVersion(ecosystem) {
|
|
450
600
|
const cached = lockstepVersionCache.get(ecosystem);
|
|
@@ -472,7 +622,7 @@ async function fetchLatestVersion(packageName, options = {}) {
|
|
|
472
622
|
const { skipPrerelease = true } = options;
|
|
473
623
|
const data = await fetchPackageInfo(packageName);
|
|
474
624
|
let latest = data["dist-tags"]?.latest;
|
|
475
|
-
if (
|
|
625
|
+
if (latest && (skipPrerelease && /-(alpha|beta|rc|next|canary)/.test(latest) || !isOldEnough(data, latest))) {
|
|
476
626
|
const versions = getStableVersionsDescending(data);
|
|
477
627
|
if (versions.length > 0 && versions[0]) latest = versions[0];
|
|
478
628
|
}
|
|
@@ -575,12 +725,12 @@ async function checkAllVersions(options) {
|
|
|
575
725
|
const entry = allPackages[pkg];
|
|
576
726
|
try {
|
|
577
727
|
const ecosystem$1 = getEcosystem(pkg);
|
|
578
|
-
const latest = await resolveLatestVersion(pkg, ecosystem$1)
|
|
728
|
+
const latest = getPinnedDependencyVersion(pkg) ?? `^${await resolveLatestVersion(pkg, ecosystem$1)}`;
|
|
579
729
|
const updateType = getUpdateType(entry.version, latest);
|
|
580
730
|
return {
|
|
581
731
|
name: pkg,
|
|
582
732
|
current: entry.version,
|
|
583
|
-
latest
|
|
733
|
+
latest,
|
|
584
734
|
updateType,
|
|
585
735
|
ecosystem: ecosystem$1,
|
|
586
736
|
source: entry.source
|
|
@@ -758,5 +908,5 @@ function listEcosystems() {
|
|
|
758
908
|
}
|
|
759
909
|
|
|
760
910
|
//#endregion
|
|
761
|
-
export { ECOSYSTEM_GROUPS, EMBEDDED_TEMPLATES, Handlebars, TEMPLATE_COUNT, VirtualFileSystem, checkAllVersions, checkVersionExists, compareVersions, dependencyVersionMap, elixirDeployAppName, elixirModuleName, fetchLatestVersion, findTemplateFilesWithPackage, generateCliReport, generateMarkdownReport, generateUpdatedVersionMap, generateVirtualProject, getDependencyVersionMap, getEcosystem, getUpdateType, groupByEcosystem, isBinaryFile, listEcosystems, nativeApplicationId, normalizeElixirAppName, parseVersion, processAddonTemplates, processAddonsDeps, processFileContent, processTemplateString, scanTemplateVersions, transformFilename, validatePreflightConfig };
|
|
911
|
+
export { ECOSYSTEM_GROUPS, EMBEDDED_TEMPLATES, Handlebars, MIN_RELEASE_AGE_MS, TEMPLATE_COUNT, VirtualFileSystem, checkAllVersions, checkVersionExists, compareVersions, dependencyVersionMap, elixirDeployAppName, elixirModuleName, fetchLatestVersion, findTemplateFilesWithPackage, generateCliReport, generateMarkdownReport, generateUpdatedVersionMap, generateVirtualProject, getDependencyVersionMap, getEcosystem, getUpdateType, groupByEcosystem, isBinaryFile, listEcosystems, nativeApplicationId, normalizeElixirAppName, parseVersion, processAddonTemplates, processAddonsDeps, processFileContent, processTemplateString, scanTemplateVersions, selectAutomatedUpdates, transformFilename, validatePreflightConfig };
|
|
762
912
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["ECOSYSTEM_GROUPS: Record<string, string[]>","templateOnly: Record<string, string>","versionMismatches: { name: string; mapVersion: string; templateVersion: string; file: string }[]","entries: fs.Dirent[]","results: { filePath: string; version: string }[]","grouped: Record<string, string[]>","other: string[]","allPackages: Record<string, { version: string; source: string }>","result: CheckResult","ecosystem","typeOrder: Record<UpdateType, number>","lines: string[]","byType: Record<UpdateType, VersionInfo[]>"],"sources":["../src/utils/dependency-checker.ts"],"sourcesContent":["/**\n * Dependency Version Checker\n *\n * Core library for checking and updating dependency versions.\n * Used by both the CLI command and GitHub Action.\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport { dependencyVersionMap } from \"./add-deps\";\n\n// Types\nexport type UpdateType = \"downgrade\" | \"major\" | \"minor\" | \"patch\" | \"none\";\n\nexport type VersionInfo = {\n name: string;\n current: string;\n latest: string;\n updateType: UpdateType;\n ecosystem?: string;\n source?: string;\n};\n\nexport type VersionMismatch = {\n name: string;\n mapVersion: string;\n templateVersion: string;\n file: string;\n};\n\nexport type CheckResult = {\n outdated: VersionInfo[];\n upToDate: VersionInfo[];\n errors: { name: string; error: string }[];\n versionMismatches?: VersionMismatch[];\n};\n\nexport type NpmPackageInfo = {\n name: string;\n \"dist-tags\": {\n latest: string;\n [tag: string]: string;\n };\n versions: Record<string, unknown>;\n};\n\n// Ecosystem groups for organizing related packages\nexport const ECOSYSTEM_GROUPS: Record<string, string[]> = {\n effect: [\n \"effect\",\n \"@effect/platform\",\n \"@effect/platform-node\",\n \"@effect/platform-bun\",\n \"@effect/platform-browser\",\n \"@effect/sql\",\n \"@effect/sql-sqlite-node\",\n \"@effect/sql-sqlite-bun\",\n \"@effect/sql-pg\",\n \"@effect/sql-mysql2\",\n \"@effect/sql-libsql\",\n \"@effect/sql-drizzle\",\n \"@effect/cli\",\n \"@effect/vitest\",\n \"@effect/opentelemetry\",\n \"@effect/rpc\",\n \"@effect/rpc-http\",\n \"@effect/cluster\",\n \"@effect/workflow\",\n \"@effect/ai\",\n \"@effect/ai-openai\",\n \"@effect/ai-anthropic\",\n ],\n tanstack: [\n \"@tanstack/react-query\",\n \"@tanstack/react-query-devtools\",\n \"@tanstack/vue-query\",\n \"@tanstack/vue-query-devtools\",\n \"@tanstack/svelte-query\",\n \"@tanstack/svelte-query-devtools\",\n \"@tanstack/solid-query\",\n \"@tanstack/solid-query-devtools\",\n \"@tanstack/solid-router-devtools\",\n \"@tanstack/react-router-ssr-query\",\n \"@tanstack/store\",\n \"@tanstack/react-store\",\n ],\n prisma: [\n \"prisma\",\n \"@prisma/client\",\n \"@prisma/adapter-d1\",\n \"@prisma/adapter-neon\",\n \"@prisma/adapter-mariadb\",\n \"@prisma/adapter-libsql\",\n \"@prisma/adapter-better-sqlite3\",\n \"@prisma/adapter-pg\",\n \"@prisma/adapter-planetscale\",\n ],\n drizzle: [\"drizzle-orm\", \"drizzle-kit\"],\n clerk: [\n \"@clerk/nextjs\",\n \"@clerk/clerk-react\",\n \"@clerk/tanstack-react-start\",\n \"@clerk/clerk-expo\",\n ],\n radix: [\n \"@radix-ui/react-dialog\",\n \"@radix-ui/react-dropdown-menu\",\n \"@radix-ui/react-slot\",\n \"@radix-ui/react-label\",\n \"@radix-ui/react-checkbox\",\n \"@radix-ui/react-select\",\n \"@radix-ui/react-toast\",\n \"@radix-ui/react-popover\",\n \"@radix-ui/react-switch\",\n \"@radix-ui/react-tabs\",\n ],\n opentelemetry: [\n \"@opentelemetry/api\",\n \"@opentelemetry/sdk-node\",\n \"@opentelemetry/auto-instrumentations-node\",\n \"@opentelemetry/exporter-trace-otlp-http\",\n \"@opentelemetry/exporter-metrics-otlp-http\",\n \"@opentelemetry/resources\",\n \"@opentelemetry/semantic-conventions\",\n ],\n testing: [\n \"vitest\",\n \"@vitest/ui\",\n \"@vitest/coverage-v8\",\n \"playwright\",\n \"@playwright/test\",\n \"jest\",\n \"@types/jest\",\n \"ts-jest\",\n \"@jest/globals\",\n \"jest-environment-jsdom\",\n \"cypress\",\n ],\n storybook: [\n \"storybook\",\n \"@storybook/react\",\n \"@storybook/react-vite\",\n \"@storybook/vue3-vite\",\n \"@storybook/svelte-vite\",\n \"@storybook/nextjs\",\n \"@storybook/addon-essentials\",\n \"@storybook/addon-interactions\",\n \"@storybook/test\",\n ],\n trpc: [\"@trpc/server\", \"@trpc/client\", \"@trpc/tanstack-react-query\"],\n orpc: [\"@orpc/server\", \"@orpc/client\", \"@orpc/openapi\", \"@orpc/zod\", \"@orpc/tanstack-query\"],\n \"ts-rest\": [\"@ts-rest/core\", \"@ts-rest/react-query\", \"@ts-rest/serverless\", \"@ts-rest/next\"],\n \"apollo-server\": [\"@apollo/server\", \"graphql\"],\n openapi: [\n \"@hono/zod-openapi\",\n \"@scalar/hono-api-reference\",\n \"@asteasolutions/zod-to-openapi\",\n \"@scalar/express-api-reference\",\n \"@fastify/swagger\",\n \"fastify-type-provider-zod\",\n \"@scalar/fastify-api-reference\",\n \"@elysiajs/openapi\",\n ],\n angular: [\n \"@angular/core\",\n \"@angular/common\",\n \"@angular/compiler\",\n \"@angular/platform-browser\",\n \"@angular/platform-browser-dynamic\",\n \"@angular/router\",\n \"@angular/forms\",\n \"@angular/animations\",\n \"@angular-devkit/build-angular\",\n \"@angular/cli\",\n \"@angular/compiler-cli\",\n ],\n nestjs: [\"@nestjs/core\", \"@nestjs/common\", \"@nestjs/platform-express\"],\n mikro: [\n \"@mikro-orm/core\",\n \"@mikro-orm/sqlite\",\n \"@mikro-orm/postgresql\",\n \"@mikro-orm/mysql\",\n \"@mikro-orm/better-sqlite\",\n ],\n mantine: [\"@mantine/core\", \"@mantine/hooks\"],\n ark: [\"@ark-ui/react\", \"@ark-ui/vue\", \"@ark-ui/solid\", \"@ark-ui/svelte\"],\n uppy: [\n \"@uppy/core\",\n \"@uppy/dashboard\",\n \"@uppy/drag-drop\",\n \"@uppy/progress-bar\",\n \"@uppy/xhr-upload\",\n \"@uppy/tus\",\n \"@uppy/react\",\n \"@uppy/svelte\",\n \"@uppy/vue\",\n \"@uppy/angular\",\n ],\n uploadthing: [\n \"uploadthing\",\n \"@uploadthing/react\",\n \"@uploadthing/svelte\",\n \"@uploadthing/vue\",\n \"@uploadthing/solid\",\n \"@uploadthing/nuxt\",\n \"@uploadthing/expo\",\n ],\n payload: [\n \"payload\",\n \"@payloadcms/next\",\n \"@payloadcms/richtext-lexical\",\n \"@payloadcms/db-postgres\",\n \"@payloadcms/db-mongodb\",\n \"@payloadcms/db-sqlite\",\n \"@payloadcms/plugin-seo\",\n \"@payloadcms/storage-s3\",\n ],\n redwood: [\n \"@redwoodjs/core\",\n \"@redwoodjs/web\",\n \"@redwoodjs/api\",\n \"@redwoodjs/router\",\n \"@redwoodjs/forms\",\n \"@redwoodjs/graphql-server\",\n \"@redwoodjs/vite\",\n \"@redwoodjs/project-config\",\n ],\n convex: [\n \"convex\",\n \"@convex-dev/react-query\",\n \"@convex-dev/agent\",\n \"convex-svelte\",\n \"convex-nuxt\",\n \"convex-vue\",\n \"@convex-dev/better-auth\",\n ],\n cloudflare: [\n \"wrangler\",\n \"@cloudflare/vite-plugin\",\n \"@opennextjs/cloudflare\",\n \"nitro-cloudflare-dev\",\n \"@sveltejs/adapter-cloudflare\",\n \"@cloudflare/workers-types\",\n ],\n liveblocks: [\"@liveblocks/client\", \"@liveblocks/react\", \"@liveblocks/node\"],\n temporal: [\n \"@temporalio/client\",\n \"@temporalio/worker\",\n \"@temporalio/workflow\",\n \"@temporalio/activity\",\n ],\n};\n\nconst SKIP_FIELDS = new Set([\n \"name\", \"version\", \"private\", \"type\", \"main\", \"module\", \"types\",\n \"exports\", \"scripts\", \"workspaces\", \"engines\", \"packageManager\",\n \"author\", \"license\", \"description\", \"homepage\", \"repository\",\n \"bugs\", \"keywords\", \"files\", \"sideEffects\", \"browserslist\",\n \"eslintConfig\", \"prettier\", \"jest\", \"babel\",\n]);\n\nconst DEP_PATTERN = /\"(@?[a-z][a-z0-9._-]*(?:\\/[a-z][a-z0-9._-]*)?)\"\\s*:\\s*\"([~^]?[\\d][^\"]+)\"/g;\n\nexport function scanTemplateVersions(templatesDir: string): {\n templateOnly: Record<string, string>;\n versionMismatches: { name: string; mapVersion: string; templateVersion: string; file: string }[];\n} {\n const templateOnly: Record<string, string> = {};\n const versionMismatches: { name: string; mapVersion: string; templateVersion: string; file: string }[] = [];\n const seenMismatches = new Set<string>();\n\n function walkDir(dir: string) {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n walkDir(fullPath);\n } else if (entry.name === \"package.json.hbs\") {\n extractVersions(fullPath);\n }\n }\n }\n\n function extractVersions(filePath: string) {\n const content = fs.readFileSync(filePath, \"utf-8\");\n const relPath = path.relative(templatesDir, filePath);\n\n DEP_PATTERN.lastIndex = 0;\n let match;\n\n while ((match = DEP_PATTERN.exec(content)) !== null) {\n const [, pkg, version] = match;\n if (!pkg || !version) continue;\n\n if (SKIP_FIELDS.has(pkg)) continue;\n\n if (pkg in dependencyVersionMap) {\n const mapVersion = dependencyVersionMap[pkg as keyof typeof dependencyVersionMap];\n const mismatchKey = `${relPath}|${pkg}|${version}`;\n if (mapVersion !== version && !seenMismatches.has(mismatchKey)) {\n seenMismatches.add(mismatchKey);\n versionMismatches.push({ name: pkg, mapVersion, templateVersion: version, file: relPath });\n }\n } else {\n const existing = templateOnly[pkg];\n if (!existing || compareVersions(version, existing) > 0) {\n templateOnly[pkg] = version;\n }\n }\n }\n }\n\n walkDir(templatesDir);\n return { templateOnly, versionMismatches };\n}\n\nexport function findTemplateFilesWithPackage(\n templatesDir: string,\n packageName: string,\n): { filePath: string; version: string }[] {\n const results: { filePath: string; version: string }[] = [];\n\n function walkDir(dir: string) {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n walkDir(fullPath);\n } else if (entry.name === \"package.json.hbs\") {\n const content = fs.readFileSync(fullPath, \"utf-8\");\n const escapedName = packageName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const pattern = new RegExp(`\"${escapedName}\"\\\\s*:\\\\s*\"([~^]?[\\\\d][^\"]+)\"`, \"g\");\n let match;\n while ((match = pattern.exec(content)) !== null) {\n if (match[1]) {\n results.push({ filePath: fullPath, version: match[1] });\n }\n }\n }\n }\n }\n\n walkDir(templatesDir);\n return results;\n}\n\nconst LOCKSTEP_ECOSYSTEMS = new Set([\"storybook\"]);\n\n// Cache for npm registry responses\nconst versionCache = new Map<string, { info: NpmPackageInfo; timestamp: number }>();\nconst lockstepVersionCache = new Map<string, { latest: string; timestamp: number }>();\nconst CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes\n\n/**\n * Parse a version string, removing any leading ^, ~, or other specifiers\n */\nexport function parseVersion(versionSpec: string): {\n major: number;\n minor: number;\n patch: number;\n raw: string;\n} {\n const raw = versionSpec.replace(/^[\\^~>=<]+/, \"\").split(\" \")[0] ?? \"\";\n const parts = raw.split(\".\");\n return {\n major: parseInt(parts[0] || \"0\", 10),\n minor: parseInt(parts[1] || \"0\", 10),\n patch: parseInt(parts[2] || \"0\", 10),\n raw,\n };\n}\n\ntype ParsedSemver = {\n major: number;\n minor: number;\n patch: number;\n prerelease: Array<number | string>;\n};\n\nfunction parseSemver(versionSpec: string): ParsedSemver {\n const raw = parseVersion(versionSpec).raw;\n const withoutBuild = raw.split(\"+\")[0] ?? raw;\n const dashIndex = withoutBuild.indexOf(\"-\");\n const core = dashIndex === -1 ? withoutBuild : withoutBuild.slice(0, dashIndex);\n const prereleasePart = dashIndex === -1 ? \"\" : withoutBuild.slice(dashIndex + 1);\n const [major = \"0\", minor = \"0\", patch = \"0\"] = core.split(\".\");\n\n return {\n major: parseInt(major, 10) || 0,\n minor: parseInt(minor, 10) || 0,\n patch: parseInt(patch, 10) || 0,\n prerelease: prereleasePart\n ? prereleasePart\n .split(\".\")\n .filter(Boolean)\n .map((id) => (/^\\d+$/.test(id) ? parseInt(id, 10) : id))\n : [],\n };\n}\n\nfunction comparePrerelease(a: Array<number | string>, b: Array<number | string>): number {\n if (a.length === 0 && b.length === 0) return 0;\n if (a.length === 0) return 1;\n if (b.length === 0) return -1;\n\n const length = Math.max(a.length, b.length);\n for (let i = 0; i < length; i++) {\n const ai = a[i];\n const bi = b[i];\n\n if (ai === undefined) return -1;\n if (bi === undefined) return 1;\n\n if (typeof ai === \"number\" && typeof bi === \"number\") {\n if (ai !== bi) return ai > bi ? 1 : -1;\n continue;\n }\n\n if (typeof ai === \"number\") return -1;\n if (typeof bi === \"number\") return 1;\n if (ai !== bi) return ai > bi ? 1 : -1;\n }\n\n return 0;\n}\n\n/**\n * Compare two semver-like specs after removing range operators.\n * Returns >0 when a > b, <0 when a < b, and 0 when equal.\n */\nexport function compareVersions(a: string, b: string): number {\n const pa = parseSemver(a);\n const pb = parseSemver(b);\n\n if (pa.major !== pb.major) return pa.major - pb.major;\n if (pa.minor !== pb.minor) return pa.minor - pb.minor;\n if (pa.patch !== pb.patch) return pa.patch - pb.patch;\n return comparePrerelease(pa.prerelease, pb.prerelease);\n}\n\n/**\n * Determine the type of update between two versions\n */\nexport function getUpdateType(current: string, latest: string): UpdateType {\n const comparison = compareVersions(latest, current);\n const curr = parseVersion(current);\n const lat = parseVersion(latest);\n\n if (comparison === 0 && curr.raw === lat.raw) return \"none\";\n if (comparison < 0) return \"downgrade\";\n if (comparison === 0) return \"patch\";\n if (lat.major > curr.major) return \"major\";\n if (lat.minor > curr.minor) return \"minor\";\n if (lat.patch > curr.patch) return \"patch\";\n if (comparison > 0) return \"patch\";\n return \"none\";\n}\n\n/**\n * Fetch the latest version of a package from npm registry\n */\nasync function fetchPackageInfo(packageName: string): Promise<NpmPackageInfo> {\n const cached = versionCache.get(packageName);\n if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) {\n return cached.info;\n }\n\n const encodedName = encodeURIComponent(packageName).replace(\"%40\", \"@\");\n const url = `https://registry.npmjs.org/${encodedName}`;\n\n const response = await fetch(url, {\n headers: { Accept: \"application/json\" },\n });\n\n if (!response.ok) {\n throw new Error(`Package ${packageName} not found (${response.status})`);\n }\n\n const info = (await response.json()) as NpmPackageInfo;\n\n versionCache.set(packageName, { info, timestamp: Date.now() });\n return info;\n}\n\nfunction getStableVersionsDescending(info: NpmPackageInfo): string[] {\n return Object.keys(info.versions || {})\n .filter((version) => !/-(alpha|beta|rc|next|canary)/.test(version))\n .sort((a, b) => compareVersions(b, a));\n}\n\nasync function fetchLatestCompatibleEcosystemVersion(ecosystem: string): Promise<string | undefined> {\n const cached = lockstepVersionCache.get(ecosystem);\n if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) {\n return cached.latest;\n }\n\n const ecosystemPackages = ECOSYSTEM_GROUPS[ecosystem]?.filter((pkg) => !pkg.endsWith(\"/*\")) ?? [];\n if (ecosystemPackages.length === 0) return undefined;\n\n const packageInfos = await Promise.all(ecosystemPackages.map((pkg) => fetchPackageInfo(pkg)));\n const [firstInfo, ...remainingInfos] = packageInfos;\n if (!firstInfo) return undefined;\n\n const sharedVersions = getStableVersionsDescending(firstInfo);\n\n for (const info of remainingInfos) {\n const stableVersions = new Set(getStableVersionsDescending(info));\n for (let i = sharedVersions.length - 1; i >= 0; i--) {\n const version = sharedVersions[i];\n if (!version || !stableVersions.has(version)) {\n sharedVersions.splice(i, 1);\n }\n }\n }\n\n const latest = sharedVersions[0];\n if (latest) {\n lockstepVersionCache.set(ecosystem, { latest, timestamp: Date.now() });\n }\n\n return latest;\n}\n\nexport async function fetchLatestVersion(\n packageName: string,\n options: { skipPrerelease?: boolean } = {},\n): Promise<string> {\n const { skipPrerelease = true } = options;\n const data = await fetchPackageInfo(packageName);\n let latest = data[\"dist-tags\"]?.latest;\n\n // If the latest is a prerelease and we want to skip prereleases,\n // find the highest stable version\n if (skipPrerelease && latest && /-(alpha|beta|rc|next|canary)/.test(latest)) {\n const versions = getStableVersionsDescending(data);\n if (versions.length > 0 && versions[0]) {\n latest = versions[0];\n }\n }\n\n if (!latest) {\n throw new Error(`No versions found for ${packageName}`);\n }\n\n return latest;\n}\n\nasync function resolveLatestVersion(packageName: string, ecosystem?: string): Promise<string> {\n if (ecosystem && LOCKSTEP_ECOSYSTEMS.has(ecosystem)) {\n const compatibleVersion = await fetchLatestCompatibleEcosystemVersion(ecosystem);\n if (compatibleVersion) {\n return compatibleVersion;\n }\n }\n\n return fetchLatestVersion(packageName);\n}\n\n/**\n * Check if a specific version exists on npm\n */\nexport async function checkVersionExists(\n packageName: string,\n versionSpec: string,\n): Promise<boolean> {\n try {\n const cleanVersion = parseVersion(versionSpec).raw;\n const encodedName = encodeURIComponent(packageName).replace(\"%40\", \"@\");\n const url = `https://registry.npmjs.org/${encodedName}`;\n\n const response = await fetch(url, {\n headers: { Accept: \"application/json\" },\n });\n\n if (!response.ok) return false;\n\n const data = (await response.json()) as NpmPackageInfo;\n const versions = Object.keys(data.versions || {});\n\n // For caret versions, check if any version satisfies the range\n if (versionSpec.startsWith(\"^\")) {\n const { major, minor, patch } = parseVersion(versionSpec);\n\n return versions.some((v) => {\n const parsed = parseVersion(v);\n if (major === 0) {\n // For ^0.Y.Z, only minor must match, patch can be >= specified\n return parsed.major === 0 && parsed.minor === minor && parsed.patch >= patch;\n } else {\n // For ^X.Y.Z (X > 0), major must match, rest can be >=\n return (\n parsed.major === major &&\n (parsed.minor > minor || (parsed.minor === minor && parsed.patch >= patch))\n );\n }\n });\n }\n\n return versions.includes(cleanVersion);\n } catch {\n return false;\n }\n}\n\n/**\n * Get the ecosystem group for a package\n */\nexport function getEcosystem(packageName: string): string | undefined {\n for (const [ecosystem, packages] of Object.entries(ECOSYSTEM_GROUPS)) {\n if (packages.includes(packageName)) {\n return ecosystem;\n }\n // Check for glob patterns like @effect/*\n for (const pattern of packages) {\n if (pattern.endsWith(\"/*\")) {\n const prefix = pattern.slice(0, -2);\n if (packageName.startsWith(prefix + \"/\")) {\n return ecosystem;\n }\n }\n }\n }\n return undefined;\n}\n\n/**\n * Group packages by their ecosystem\n */\nexport function groupByEcosystem(packages: string[]): Record<string, string[]> {\n const grouped: Record<string, string[]> = {};\n const other: string[] = [];\n\n for (const pkg of packages) {\n const ecosystem = getEcosystem(pkg);\n if (ecosystem) {\n if (!grouped[ecosystem]) grouped[ecosystem] = [];\n grouped[ecosystem]!.push(pkg);\n } else {\n other.push(pkg);\n }\n }\n\n // Add other group if not empty\n if (other.length > 0) {\n grouped.other = other;\n }\n\n return grouped;\n}\n\nexport async function checkAllVersions(options: {\n versionMap?: Record<string, string>;\n templateVersions?: Record<string, string>;\n filter?: string[];\n ecosystem?: string;\n concurrency?: number;\n onProgress?: (checked: number, total: number, current: string) => void;\n delayMs?: number;\n}): Promise<CheckResult> {\n const {\n versionMap = dependencyVersionMap,\n templateVersions = {},\n filter,\n ecosystem,\n concurrency = 5,\n onProgress,\n delayMs = 100,\n } = options;\n\n const allPackages: Record<string, { version: string; source: string }> = {};\n for (const [pkg, version] of Object.entries(versionMap)) {\n allPackages[pkg] = { version, source: \"map\" };\n }\n for (const [pkg, version] of Object.entries(templateVersions)) {\n if (!(pkg in allPackages)) {\n allPackages[pkg] = { version, source: \"template\" };\n }\n }\n\n let packages = Object.keys(allPackages);\n\n // Filter by specific packages\n if (filter && filter.length > 0) {\n packages = packages.filter((p) => filter.includes(p));\n }\n\n // Filter by ecosystem\n if (ecosystem) {\n const ecosystemPackages = ECOSYSTEM_GROUPS[ecosystem];\n if (ecosystemPackages) {\n packages = packages.filter((p) => {\n if (ecosystemPackages.includes(p)) return true;\n // Check glob patterns\n for (const pattern of ecosystemPackages) {\n if (pattern.endsWith(\"/*\")) {\n const prefix = pattern.slice(0, -2);\n if (p.startsWith(prefix + \"/\")) return true;\n }\n }\n return false;\n });\n }\n }\n\n const result: CheckResult = {\n outdated: [],\n upToDate: [],\n errors: [],\n };\n\n const total = packages.length;\n let checked = 0;\n\n // Process in batches for rate limiting\n for (let i = 0; i < packages.length; i += concurrency) {\n const batch = packages.slice(i, i + concurrency);\n\n const batchResults = await Promise.allSettled(\n batch.map(async (pkg) => {\n const entry = allPackages[pkg]!;\n try {\n const ecosystem = getEcosystem(pkg);\n const latest = await resolveLatestVersion(pkg, ecosystem);\n const updateType = getUpdateType(entry.version, latest);\n\n return {\n name: pkg,\n current: entry.version,\n latest: `^${latest}`,\n updateType,\n ecosystem,\n source: entry.source,\n };\n } catch (error) {\n throw { name: pkg, error: String(error) };\n }\n }),\n );\n\n for (const settled of batchResults) {\n if (settled.status === \"fulfilled\") {\n const info = settled.value as VersionInfo;\n if (info.updateType === \"none\") {\n result.upToDate.push(info);\n } else {\n result.outdated.push(info);\n }\n } else {\n const err = settled.reason as { name: string; error: string };\n result.errors.push(err);\n }\n checked++;\n onProgress?.(checked, total, batch[0] ?? \"\");\n }\n\n // Rate limiting delay between batches\n if (i + concurrency < packages.length && delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n\n // Sort outdated by update type (downgrade > major > minor > patch)\n const typeOrder: Record<UpdateType, number> = {\n downgrade: 0,\n major: 1,\n minor: 2,\n patch: 3,\n none: 4,\n };\n result.outdated.sort((a, b) => typeOrder[a.updateType] - typeOrder[b.updateType]);\n\n return result;\n}\n\n/**\n * Generate a markdown report of the check results\n */\nexport function generateMarkdownReport(result: CheckResult): string {\n const lines: string[] = [];\n\n lines.push(\"# Dependency Version Check Report\\n\");\n lines.push(`Generated: ${new Date().toISOString()}\\n`);\n\n // Summary\n lines.push(\"## Summary\\n\");\n const downgradeCount = result.outdated.filter((info) => info.updateType === \"downgrade\").length;\n const templateOnlyCount = result.outdated.filter((info) => info.source === \"template\").length;\n lines.push(`- **Outdated**: ${result.outdated.length}`);\n if (templateOnlyCount > 0) {\n lines.push(`- **Template-only** (not in version map): ${templateOnlyCount}`);\n }\n lines.push(`- **Downgrades detected**: ${downgradeCount}`);\n lines.push(`- **Up to date**: ${result.upToDate.length}`);\n lines.push(`- **Errors**: ${result.errors.length}\\n`);\n\n // Outdated packages\n if (result.outdated.length > 0) {\n lines.push(\"## Outdated Packages\\n\");\n\n // Group by update type\n const byType: Record<UpdateType, VersionInfo[]> = {\n downgrade: [],\n major: [],\n minor: [],\n patch: [],\n none: [],\n };\n for (const info of result.outdated) {\n byType[info.updateType].push(info);\n }\n\n if (byType.downgrade.length > 0) {\n lines.push(\"### Downgrades Detected (Manual Review Required)\\n\");\n lines.push(\"| Package | Current | Latest | Ecosystem | Source |\");\n lines.push(\"|---------|---------|--------|-----------|--------|\");\n for (const info of byType.downgrade) {\n lines.push(\n `| ${info.name} | ${info.current} | ${info.latest} | ${info.ecosystem || \"-\"} | ${info.source === \"template\" ? \"template\" : \"map\"} |`,\n );\n }\n lines.push(\"\");\n }\n\n if (byType.major.length > 0) {\n lines.push(\"### Major Updates (Breaking Changes Possible)\\n\");\n lines.push(\"| Package | Current | Latest | Ecosystem | Source |\");\n lines.push(\"|---------|---------|--------|-----------|--------|\");\n for (const info of byType.major) {\n lines.push(\n `| ${info.name} | ${info.current} | ${info.latest} | ${info.ecosystem || \"-\"} | ${info.source === \"template\" ? \"template\" : \"map\"} |`,\n );\n }\n lines.push(\"\");\n }\n\n if (byType.minor.length > 0) {\n lines.push(\"### Minor Updates\\n\");\n lines.push(\"| Package | Current | Latest | Ecosystem | Source |\");\n lines.push(\"|---------|---------|--------|-----------|--------|\");\n for (const info of byType.minor) {\n lines.push(\n `| ${info.name} | ${info.current} | ${info.latest} | ${info.ecosystem || \"-\"} | ${info.source === \"template\" ? \"template\" : \"map\"} |`,\n );\n }\n lines.push(\"\");\n }\n\n if (byType.patch.length > 0) {\n lines.push(\"### Patch Updates\\n\");\n lines.push(\"| Package | Current | Latest | Ecosystem | Source |\");\n lines.push(\"|---------|---------|--------|-----------|--------|\");\n for (const info of byType.patch) {\n lines.push(\n `| ${info.name} | ${info.current} | ${info.latest} | ${info.ecosystem || \"-\"} | ${info.source === \"template\" ? \"template\" : \"map\"} |`,\n );\n }\n lines.push(\"\");\n }\n }\n\n if (result.versionMismatches && result.versionMismatches.length > 0) {\n lines.push(\"## Version Mismatches (map vs template)\\n\");\n lines.push(\"| Package | Map Version | Template Version | Template File |\");\n lines.push(\"|---------|-------------|------------------|---------------|\");\n for (const m of result.versionMismatches) {\n lines.push(`| ${m.name} | ${m.mapVersion} | ${m.templateVersion} | ${m.file} |`);\n }\n lines.push(\"\");\n }\n\n // Errors\n if (result.errors.length > 0) {\n lines.push(\"## Errors\\n\");\n lines.push(\"| Package | Error |\");\n lines.push(\"|---------|-------|\");\n for (const err of result.errors) {\n lines.push(`| ${err.name} | ${err.error} |`);\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Generate a CLI-friendly table report\n */\nexport function generateCliReport(result: CheckResult): string {\n const lines: string[] = [];\n\n if (result.outdated.length === 0 && result.errors.length === 0) {\n lines.push(\"All dependencies are up to date!\");\n return lines.join(\"\\n\");\n }\n\n if (result.outdated.length > 0) {\n // Group by update type\n const byType: Record<UpdateType, VersionInfo[]> = {\n downgrade: [],\n major: [],\n minor: [],\n patch: [],\n none: [],\n };\n for (const info of result.outdated) {\n byType[info.updateType].push(info);\n }\n\n const formatRow = (info: VersionInfo) => {\n const label =\n info.updateType === \"downgrade\"\n ? \"[DOWNGRADE]\"\n : info.updateType === \"major\"\n ? \"[MAJOR]\"\n : info.updateType === \"minor\"\n ? \"[MINOR]\"\n : \"[PATCH]\";\n return ` ${label.padEnd(8)} ${info.name.padEnd(45)} ${info.current.padEnd(15)} -> ${info.latest}`;\n };\n\n if (byType.downgrade.length > 0) {\n lines.push(\"\\nDowngrades Detected (Manual Review Required):\");\n for (const info of byType.downgrade) {\n lines.push(formatRow(info));\n }\n }\n\n if (byType.major.length > 0) {\n lines.push(\"\\nMajor Updates (Breaking Changes Possible):\");\n for (const info of byType.major) {\n lines.push(formatRow(info));\n }\n }\n\n if (byType.minor.length > 0) {\n lines.push(\"\\nMinor Updates:\");\n for (const info of byType.minor) {\n lines.push(formatRow(info));\n }\n }\n\n if (byType.patch.length > 0) {\n lines.push(\"\\nPatch Updates:\");\n for (const info of byType.patch) {\n lines.push(formatRow(info));\n }\n }\n }\n\n if (result.versionMismatches && result.versionMismatches.length > 0) {\n lines.push(\"\\nVersion Mismatches (map vs template):\");\n for (const m of result.versionMismatches) {\n lines.push(` ${m.name.padEnd(45)} map: ${m.mapVersion.padEnd(15)} template: ${m.templateVersion.padEnd(15)} ${m.file}`);\n }\n }\n\n if (result.errors.length > 0) {\n lines.push(\"\\nErrors:\");\n for (const err of result.errors) {\n lines.push(` ${err.name}: ${err.error}`);\n }\n }\n\n const mismatchCount = result.versionMismatches?.length ?? 0;\n lines.push(\n `\\nSummary: ${result.outdated.length} outdated, ${result.upToDate.length} up to date, ${mismatchCount} mismatches, ${result.errors.length} errors`,\n );\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Generate updated code for add-deps.ts with new versions\n */\nexport function generateUpdatedVersionMap(\n updates: VersionInfo[],\n currentMap: Record<string, string>,\n): Record<string, string> {\n const newMap = { ...currentMap };\n for (const update of updates) {\n if (update.updateType !== \"none\") {\n newMap[update.name] = update.latest;\n }\n }\n return newMap;\n}\n\n/**\n * Get the current dependency version map\n */\nexport function getDependencyVersionMap(): Record<string, string> {\n return { ...dependencyVersionMap };\n}\n\n/**\n * List all available ecosystems\n */\nexport function listEcosystems(): string[] {\n return Object.keys(ECOSYSTEM_GROUPS);\n}\n"],"mappings":";;;;;;;;;;;AAgDA,MAAaA,mBAA6C;CACxD,QAAQ;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,UAAU;EACR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,QAAQ;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,SAAS,CAAC,eAAe,cAAc;CACvC,OAAO;EACL;EACA;EACA;EACA;EACD;CACD,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,eAAe;EACb;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,SAAS;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,WAAW;EACT;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,MAAM;EAAC;EAAgB;EAAgB;EAA6B;CACpE,MAAM;EAAC;EAAgB;EAAgB;EAAiB;EAAa;EAAuB;CAC5F,WAAW;EAAC;EAAiB;EAAwB;EAAuB;EAAgB;CAC5F,iBAAiB,CAAC,kBAAkB,UAAU;CAC9C,SAAS;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,SAAS;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,QAAQ;EAAC;EAAgB;EAAkB;EAA2B;CACtE,OAAO;EACL;EACA;EACA;EACA;EACA;EACD;CACD,SAAS,CAAC,iBAAiB,iBAAiB;CAC5C,KAAK;EAAC;EAAiB;EAAe;EAAiB;EAAiB;CACxE,MAAM;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,aAAa;EACX;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,SAAS;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,SAAS;EACP;E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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["DEPENDENCY_UPDATE_POLICIES: Readonly<Record<string, DependencyUpdatePolicy>>","ECOSYSTEM_GROUPS: Record<string, string[]>","templateOnly: Record<string, string>","versionMismatches: { name: string; mapVersion: string; templateVersion: string; file: string }[]","entries: fs.Dirent[]","results: { filePath: string; version: string }[]","grouped: Record<string, string[]>","other: string[]","allPackages: Record<string, { version: string; source: string }>","result: CheckResult","ecosystem","typeOrder: Record<UpdateType, number>","lines: string[]","byType: Record<UpdateType, VersionInfo[]>"],"sources":["../src/utils/dependency-update-policy.ts","../src/utils/dependency-checker.ts"],"sourcesContent":["export type DependencyUpdatePolicy = {\n /** Keep automation on this reviewed version until the hold is removed deliberately. */\n pinnedVersion?: string;\n /** Major updates are denied by default and must be explicitly reviewed here. */\n allowMajor?: boolean;\n reason: string;\n};\n\n/**\n * Registry freshness is advisory. This policy captures compatibility and\n * package-manager constraints that cannot be inferred from npm's latest tag.\n */\nexport const DEPENDENCY_UPDATE_POLICIES: Readonly<Record<string, DependencyUpdatePolicy>> = {\n nuxt: {\n pinnedVersion: \"4.4.8\",\n reason:\n \"nuxt 4.5.0 requires @unhead/vue ^3 while @nuxt/ui 4.10.0 still pins ^2 — nitro dev/build crash. Exact pin; unpin when @nuxt/ui supports nuxt 4.5.\",\n },\n typescript: {\n pinnedVersion: \"^6.0.3\",\n reason: \"TypeScript 7 currently breaks generated database package type portability (TS2883).\",\n },\n turbo: {\n pinnedVersion: \"^2.10.0\",\n reason: \"Newer 2.10.x releases are quarantined by Yarn hardened mode.\",\n },\n tsdown: {\n pinnedVersion: \"^0.22.3\",\n reason: \"Newer releases are quarantined by Yarn hardened mode.\",\n },\n postcss: {\n pinnedVersion: \"^8.5.15\",\n reason: \"Newer releases are quarantined by Yarn hardened mode.\",\n },\n graphql: {\n pinnedVersion: \"^16.11.0\",\n reason: \"Garph, GraphQL Yoga, and Apollo Server peers currently cap GraphQL at 16.x.\",\n },\n \"lucide-react\": {\n pinnedVersion: \"^1.21.0\",\n reason: \"Newer releases are quarantined by Yarn hardened mode.\",\n },\n \"lucide-solid\": {\n pinnedVersion: \"^1.21.0\",\n reason: \"Keep the Lucide framework packages on the reviewed Yarn-compatible release.\",\n },\n hono: {\n pinnedVersion: \"^4.12.27\",\n reason: \"Newer releases are quarantined by Yarn hardened mode.\",\n },\n \"@tanstack/react-form\": {\n pinnedVersion: \"^1.33.0\",\n reason: \"Keep the TanStack Form family aligned on the reviewed Yarn-compatible release.\",\n },\n \"@tanstack/solid-form\": {\n pinnedVersion: \"^1.33.0\",\n reason: \"Keep the TanStack Form family aligned on the reviewed Yarn-compatible release.\",\n },\n \"@tanstack/svelte-form\": {\n pinnedVersion: \"^1.33.0\",\n reason: \"Keep the TanStack Form family aligned on the reviewed Yarn-compatible release.\",\n },\n \"@auth0/nextjs-auth0\": {\n pinnedVersion: \"^4.23.0\",\n reason: \"Keep generated Next.js Auth0 integration on the explicitly tested SDK line.\",\n },\n \"better-auth\": {\n pinnedVersion: \"^1.6.22\",\n reason: \"Keep the Better Auth family aligned with the reviewed Kysely and Yarn combination.\",\n },\n \"@better-auth/expo\": {\n pinnedVersion: \"^1.6.22\",\n reason: \"Keep the Better Auth family aligned with the reviewed Kysely and Yarn combination.\",\n },\n \"@better-auth/drizzle-adapter\": {\n pinnedVersion: \"^1.6.22\",\n reason: \"Keep the Better Auth family aligned with the reviewed Kysely and Yarn combination.\",\n },\n \"@better-auth/prisma-adapter\": {\n pinnedVersion: \"^1.6.22\",\n reason: \"Keep the Better Auth family aligned with the reviewed Kysely and Yarn combination.\",\n },\n \"@better-auth/mongo-adapter\": {\n pinnedVersion: \"^1.6.22\",\n reason: \"Keep the Better Auth family aligned with the reviewed Kysely and Yarn combination.\",\n },\n \"@opentelemetry/sdk-node\": {\n pinnedVersion: \"0.220.0\",\n reason: \"Keep the coupled OpenTelemetry SDK and exporter release trains exact and aligned.\",\n },\n \"@opentelemetry/auto-instrumentations-node\": {\n pinnedVersion: \"0.78.0\",\n reason: \"Keep the coupled OpenTelemetry SDK and exporter release trains exact and aligned.\",\n },\n \"@opentelemetry/exporter-trace-otlp-http\": {\n pinnedVersion: \"0.220.0\",\n reason: \"Keep the coupled OpenTelemetry SDK and exporter release trains exact and aligned.\",\n },\n \"@opentelemetry/exporter-metrics-otlp-http\": {\n pinnedVersion: \"0.220.0\",\n reason: \"Keep the coupled OpenTelemetry SDK and exporter release trains exact and aligned.\",\n },\n \"@opentelemetry/resources\": {\n pinnedVersion: \"2.9.0\",\n reason: \"Keep the coupled OpenTelemetry SDK and exporter release trains exact and aligned.\",\n },\n \"@opentelemetry/sdk-metrics\": {\n pinnedVersion: \"2.9.0\",\n reason: \"Keep the coupled OpenTelemetry SDK and exporter release trains exact and aligned.\",\n },\n vitest: {\n pinnedVersion: \"4.1.8\",\n reason: \"The Vitest family is exact-pinned to the latest reviewed Yarn-compatible patch.\",\n },\n \"@vitest/ui\": {\n pinnedVersion: \"4.1.8\",\n reason: \"The Vitest family is exact-pinned to the latest reviewed Yarn-compatible patch.\",\n },\n \"@vitest/coverage-v8\": {\n pinnedVersion: \"4.1.8\",\n reason: \"The Vitest family is exact-pinned to the latest reviewed Yarn-compatible patch.\",\n },\n};\n\nexport function getPinnedDependencyVersion(packageName: string): string | undefined {\n return DEPENDENCY_UPDATE_POLICIES[packageName]?.pinnedVersion;\n}\n\nexport function isMajorUpdateAllowlisted(packageName: string): boolean {\n return DEPENDENCY_UPDATE_POLICIES[packageName]?.allowMajor === true;\n}\n","/**\n * Dependency Version Checker\n *\n * Core library for checking and updating dependency versions.\n * Used by both the CLI command and GitHub Action.\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport { dependencyVersionMap } from \"./add-deps\";\nimport {\n getPinnedDependencyVersion,\n isMajorUpdateAllowlisted,\n} from \"./dependency-update-policy\";\n\n// Types\nexport type UpdateType = \"downgrade\" | \"major\" | \"minor\" | \"patch\" | \"none\";\n\nexport type VersionInfo = {\n name: string;\n current: string;\n latest: string;\n updateType: UpdateType;\n ecosystem?: string;\n source?: string;\n};\n\nexport type VersionMismatch = {\n name: string;\n mapVersion: string;\n templateVersion: string;\n file: string;\n};\n\nexport type CheckResult = {\n outdated: VersionInfo[];\n upToDate: VersionInfo[];\n errors: { name: string; error: string }[];\n versionMismatches?: VersionMismatch[];\n};\n\nexport type AutomatedUpdateMode = \"patch-minor\" | \"all\";\n\n/**\n * Select updates automation may apply. Downgrades are never automatic, and\n * majors require an explicit per-package allowlist even in `all` mode.\n */\nexport function selectAutomatedUpdates(\n updates: VersionInfo[],\n mode: AutomatedUpdateMode,\n): VersionInfo[] {\n return updates.filter((update) => {\n if (update.updateType === \"downgrade\" || update.updateType === \"none\") return false;\n if (update.updateType === \"major\") {\n return mode === \"all\" && isMajorUpdateAllowlisted(update.name);\n }\n return update.updateType === \"minor\" || update.updateType === \"patch\";\n });\n}\n\nexport type NpmPackageInfo = {\n name: string;\n \"dist-tags\": {\n latest: string;\n [tag: string]: string;\n };\n versions: Record<string, unknown>;\n time?: Record<string, string>;\n};\n\n/**\n * Never bump a template floor onto a release younger than this. Yarn's\n * hardened mode quarantines versions below its npmMinimalAgeGate (24h by\n * default), so a fresher floor makes every yarn scaffold fail resolution;\n * the margin also keeps generated projects off day-zero supply-chain risk.\n */\nexport const MIN_RELEASE_AGE_MS = 48 * 60 * 60 * 1000;\n\nfunction isOldEnough(info: NpmPackageInfo, version: string): boolean {\n const published = info.time?.[version];\n if (!published) return true; // no timestamp data — don't block the update\n const publishedMs = Date.parse(published);\n if (Number.isNaN(publishedMs)) return true;\n return Date.now() - publishedMs >= MIN_RELEASE_AGE_MS;\n}\n\n// Ecosystem groups for organizing related packages\nexport const ECOSYSTEM_GROUPS: Record<string, string[]> = {\n effect: [\n \"effect\",\n \"@effect/platform\",\n \"@effect/platform-node\",\n \"@effect/platform-bun\",\n \"@effect/platform-browser\",\n \"@effect/sql\",\n \"@effect/sql-sqlite-node\",\n \"@effect/sql-sqlite-bun\",\n \"@effect/sql-pg\",\n \"@effect/sql-mysql2\",\n \"@effect/sql-libsql\",\n \"@effect/sql-drizzle\",\n \"@effect/cli\",\n \"@effect/vitest\",\n \"@effect/opentelemetry\",\n \"@effect/rpc\",\n \"@effect/rpc-http\",\n \"@effect/cluster\",\n \"@effect/workflow\",\n \"@effect/ai\",\n \"@effect/ai-openai\",\n \"@effect/ai-anthropic\",\n ],\n tanstack: [\n \"@tanstack/react-query\",\n \"@tanstack/react-query-devtools\",\n \"@tanstack/vue-query\",\n \"@tanstack/vue-query-devtools\",\n \"@tanstack/svelte-query\",\n \"@tanstack/svelte-query-devtools\",\n \"@tanstack/solid-query\",\n \"@tanstack/solid-query-devtools\",\n \"@tanstack/solid-router-devtools\",\n \"@tanstack/react-router-ssr-query\",\n \"@tanstack/store\",\n \"@tanstack/react-store\",\n ],\n prisma: [\n \"prisma\",\n \"@prisma/client\",\n \"@prisma/adapter-d1\",\n \"@prisma/adapter-neon\",\n \"@prisma/adapter-mariadb\",\n \"@prisma/adapter-libsql\",\n \"@prisma/adapter-better-sqlite3\",\n \"@prisma/adapter-pg\",\n \"@prisma/adapter-planetscale\",\n ],\n drizzle: [\"drizzle-orm\", \"drizzle-kit\"],\n clerk: [\n \"@clerk/nextjs\",\n \"@clerk/clerk-react\",\n \"@clerk/tanstack-react-start\",\n \"@clerk/clerk-expo\",\n ],\n radix: [\n \"@radix-ui/react-dialog\",\n \"@radix-ui/react-dropdown-menu\",\n \"@radix-ui/react-slot\",\n \"@radix-ui/react-label\",\n \"@radix-ui/react-checkbox\",\n \"@radix-ui/react-select\",\n \"@radix-ui/react-toast\",\n \"@radix-ui/react-popover\",\n \"@radix-ui/react-switch\",\n \"@radix-ui/react-tabs\",\n ],\n opentelemetry: [\n \"@opentelemetry/api\",\n \"@opentelemetry/sdk-node\",\n \"@opentelemetry/auto-instrumentations-node\",\n \"@opentelemetry/exporter-trace-otlp-http\",\n \"@opentelemetry/exporter-metrics-otlp-http\",\n \"@opentelemetry/resources\",\n \"@opentelemetry/semantic-conventions\",\n ],\n testing: [\n \"vitest\",\n \"@vitest/ui\",\n \"@vitest/coverage-v8\",\n \"playwright\",\n \"@playwright/test\",\n \"jest\",\n \"@types/jest\",\n \"ts-jest\",\n \"@jest/globals\",\n \"jest-environment-jsdom\",\n \"cypress\",\n ],\n storybook: [\n \"storybook\",\n \"@storybook/react\",\n \"@storybook/react-vite\",\n \"@storybook/vue3-vite\",\n \"@storybook/svelte-vite\",\n \"@storybook/nextjs\",\n \"@storybook/addon-essentials\",\n \"@storybook/addon-interactions\",\n \"@storybook/test\",\n ],\n trpc: [\"@trpc/server\", \"@trpc/client\", \"@trpc/tanstack-react-query\"],\n orpc: [\"@orpc/server\", \"@orpc/client\", \"@orpc/openapi\", \"@orpc/zod\", \"@orpc/tanstack-query\"],\n \"ts-rest\": [\"@ts-rest/core\", \"@ts-rest/react-query\", \"@ts-rest/serverless\", \"@ts-rest/next\"],\n \"apollo-server\": [\"@apollo/server\", \"graphql\"],\n openapi: [\n \"@hono/zod-openapi\",\n \"@scalar/hono-api-reference\",\n \"@asteasolutions/zod-to-openapi\",\n \"@scalar/express-api-reference\",\n \"@fastify/swagger\",\n \"fastify-type-provider-zod\",\n \"@scalar/fastify-api-reference\",\n \"@elysiajs/openapi\",\n ],\n angular: [\n \"@angular/core\",\n \"@angular/common\",\n \"@angular/compiler\",\n \"@angular/platform-browser\",\n \"@angular/platform-browser-dynamic\",\n \"@angular/router\",\n \"@angular/forms\",\n \"@angular/animations\",\n \"@angular-devkit/build-angular\",\n \"@angular/cli\",\n \"@angular/compiler-cli\",\n ],\n nestjs: [\"@nestjs/core\", \"@nestjs/common\", \"@nestjs/platform-express\"],\n mikro: [\n \"@mikro-orm/core\",\n \"@mikro-orm/sqlite\",\n \"@mikro-orm/postgresql\",\n \"@mikro-orm/mysql\",\n \"@mikro-orm/better-sqlite\",\n ],\n mantine: [\"@mantine/core\", \"@mantine/hooks\"],\n ark: [\"@ark-ui/react\", \"@ark-ui/vue\", \"@ark-ui/solid\", \"@ark-ui/svelte\"],\n uppy: [\n \"@uppy/core\",\n \"@uppy/dashboard\",\n \"@uppy/drag-drop\",\n \"@uppy/progress-bar\",\n \"@uppy/xhr-upload\",\n \"@uppy/tus\",\n \"@uppy/react\",\n \"@uppy/svelte\",\n \"@uppy/vue\",\n \"@uppy/angular\",\n ],\n uploadthing: [\n \"uploadthing\",\n \"@uploadthing/react\",\n \"@uploadthing/svelte\",\n \"@uploadthing/vue\",\n \"@uploadthing/solid\",\n \"@uploadthing/nuxt\",\n \"@uploadthing/expo\",\n ],\n payload: [\n \"payload\",\n \"@payloadcms/next\",\n \"@payloadcms/richtext-lexical\",\n \"@payloadcms/db-postgres\",\n \"@payloadcms/db-mongodb\",\n \"@payloadcms/db-sqlite\",\n \"@payloadcms/plugin-seo\",\n \"@payloadcms/storage-s3\",\n ],\n redwood: [\n \"@redwoodjs/core\",\n \"@redwoodjs/web\",\n \"@redwoodjs/api\",\n \"@redwoodjs/router\",\n \"@redwoodjs/forms\",\n \"@redwoodjs/graphql-server\",\n \"@redwoodjs/vite\",\n \"@redwoodjs/project-config\",\n ],\n convex: [\n \"convex\",\n \"@convex-dev/react-query\",\n \"@convex-dev/agent\",\n \"convex-svelte\",\n \"convex-nuxt\",\n \"convex-vue\",\n \"@convex-dev/better-auth\",\n ],\n cloudflare: [\n \"wrangler\",\n \"@cloudflare/vite-plugin\",\n \"@opennextjs/cloudflare\",\n \"nitro-cloudflare-dev\",\n \"@sveltejs/adapter-cloudflare\",\n \"@cloudflare/workers-types\",\n ],\n liveblocks: [\"@liveblocks/client\", \"@liveblocks/react\", \"@liveblocks/node\"],\n temporal: [\n \"@temporalio/client\",\n \"@temporalio/worker\",\n \"@temporalio/workflow\",\n \"@temporalio/activity\",\n ],\n};\n\nconst SKIP_FIELDS = new Set([\n \"name\", \"version\", \"private\", \"type\", \"main\", \"module\", \"types\",\n \"exports\", \"scripts\", \"workspaces\", \"engines\", \"packageManager\",\n \"author\", \"license\", \"description\", \"homepage\", \"repository\",\n \"bugs\", \"keywords\", \"files\", \"sideEffects\", \"browserslist\",\n \"eslintConfig\", \"prettier\", \"jest\", \"babel\",\n]);\n\nconst DEP_PATTERN = /\"(@?[a-z][a-z0-9._-]*(?:\\/[a-z][a-z0-9._-]*)?)\"\\s*:\\s*\"([~^]?[\\d][^\"]+)\"/g;\n\nexport function scanTemplateVersions(templatesDir: string): {\n templateOnly: Record<string, string>;\n versionMismatches: { name: string; mapVersion: string; templateVersion: string; file: string }[];\n} {\n const templateOnly: Record<string, string> = {};\n const versionMismatches: { name: string; mapVersion: string; templateVersion: string; file: string }[] = [];\n const seenMismatches = new Set<string>();\n\n function walkDir(dir: string) {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n walkDir(fullPath);\n } else if (entry.name === \"package.json.hbs\") {\n extractVersions(fullPath);\n }\n }\n }\n\n function extractVersions(filePath: string) {\n const content = fs.readFileSync(filePath, \"utf-8\");\n const relPath = path.relative(templatesDir, filePath);\n\n DEP_PATTERN.lastIndex = 0;\n let match;\n\n while ((match = DEP_PATTERN.exec(content)) !== null) {\n const [, pkg, version] = match;\n if (!pkg || !version) continue;\n\n if (SKIP_FIELDS.has(pkg)) continue;\n\n if (pkg in dependencyVersionMap) {\n const mapVersion = dependencyVersionMap[pkg as keyof typeof dependencyVersionMap];\n const mismatchKey = `${relPath}|${pkg}|${version}`;\n if (mapVersion !== version && !seenMismatches.has(mismatchKey)) {\n seenMismatches.add(mismatchKey);\n versionMismatches.push({ name: pkg, mapVersion, templateVersion: version, file: relPath });\n }\n } else {\n const existing = templateOnly[pkg];\n if (!existing || compareVersions(version, existing) > 0) {\n templateOnly[pkg] = version;\n }\n }\n }\n }\n\n walkDir(templatesDir);\n return { templateOnly, versionMismatches };\n}\n\nexport function findTemplateFilesWithPackage(\n templatesDir: string,\n packageName: string,\n): { filePath: string; version: string }[] {\n const results: { filePath: string; version: string }[] = [];\n\n function walkDir(dir: string) {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n walkDir(fullPath);\n } else if (entry.name === \"package.json.hbs\") {\n const content = fs.readFileSync(fullPath, \"utf-8\");\n const escapedName = packageName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const pattern = new RegExp(`\"${escapedName}\"\\\\s*:\\\\s*\"([~^]?[\\\\d][^\"]+)\"`, \"g\");\n let match;\n while ((match = pattern.exec(content)) !== null) {\n if (match[1]) {\n results.push({ filePath: fullPath, version: match[1] });\n }\n }\n }\n }\n }\n\n walkDir(templatesDir);\n return results;\n}\n\nconst LOCKSTEP_ECOSYSTEMS = new Set([\"storybook\"]);\n\n// Cache for npm registry responses\nconst versionCache = new Map<string, { info: NpmPackageInfo; timestamp: number }>();\nconst lockstepVersionCache = new Map<string, { latest: string; timestamp: number }>();\nconst CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes\n\n/**\n * Parse a version string, removing any leading ^, ~, or other specifiers\n */\nexport function parseVersion(versionSpec: string): {\n major: number;\n minor: number;\n patch: number;\n raw: string;\n} {\n const raw = versionSpec.replace(/^[\\^~>=<]+/, \"\").split(\" \")[0] ?? \"\";\n const parts = raw.split(\".\");\n return {\n major: parseInt(parts[0] || \"0\", 10),\n minor: parseInt(parts[1] || \"0\", 10),\n patch: parseInt(parts[2] || \"0\", 10),\n raw,\n };\n}\n\ntype ParsedSemver = {\n major: number;\n minor: number;\n patch: number;\n prerelease: Array<number | string>;\n};\n\nfunction parseSemver(versionSpec: string): ParsedSemver {\n const raw = parseVersion(versionSpec).raw;\n const withoutBuild = raw.split(\"+\")[0] ?? raw;\n const dashIndex = withoutBuild.indexOf(\"-\");\n const core = dashIndex === -1 ? withoutBuild : withoutBuild.slice(0, dashIndex);\n const prereleasePart = dashIndex === -1 ? \"\" : withoutBuild.slice(dashIndex + 1);\n const [major = \"0\", minor = \"0\", patch = \"0\"] = core.split(\".\");\n\n return {\n major: parseInt(major, 10) || 0,\n minor: parseInt(minor, 10) || 0,\n patch: parseInt(patch, 10) || 0,\n prerelease: prereleasePart\n ? prereleasePart\n .split(\".\")\n .filter(Boolean)\n .map((id) => (/^\\d+$/.test(id) ? parseInt(id, 10) : id))\n : [],\n };\n}\n\nfunction comparePrerelease(a: Array<number | string>, b: Array<number | string>): number {\n if (a.length === 0 && b.length === 0) return 0;\n if (a.length === 0) return 1;\n if (b.length === 0) return -1;\n\n const length = Math.max(a.length, b.length);\n for (let i = 0; i < length; i++) {\n const ai = a[i];\n const bi = b[i];\n\n if (ai === undefined) return -1;\n if (bi === undefined) return 1;\n\n if (typeof ai === \"number\" && typeof bi === \"number\") {\n if (ai !== bi) return ai > bi ? 1 : -1;\n continue;\n }\n\n if (typeof ai === \"number\") return -1;\n if (typeof bi === \"number\") return 1;\n if (ai !== bi) return ai > bi ? 1 : -1;\n }\n\n return 0;\n}\n\n/**\n * Compare two semver-like specs after removing range operators.\n * Returns >0 when a > b, <0 when a < b, and 0 when equal.\n */\nexport function compareVersions(a: string, b: string): number {\n const pa = parseSemver(a);\n const pb = parseSemver(b);\n\n if (pa.major !== pb.major) return pa.major - pb.major;\n if (pa.minor !== pb.minor) return pa.minor - pb.minor;\n if (pa.patch !== pb.patch) return pa.patch - pb.patch;\n return comparePrerelease(pa.prerelease, pb.prerelease);\n}\n\n/**\n * Determine the type of update between two versions\n */\nexport function getUpdateType(current: string, latest: string): UpdateType {\n const comparison = compareVersions(latest, current);\n const curr = parseVersion(current);\n const lat = parseVersion(latest);\n\n if (comparison === 0 && curr.raw === lat.raw) return \"none\";\n if (comparison < 0) return \"downgrade\";\n if (comparison === 0) return \"patch\";\n if (lat.major > curr.major) return \"major\";\n // SemVer does not promise compatibility before 1.0. A caret range can cross\n // neither a 0.x minor boundary nor a 0.0.x patch boundary, so automation\n // treats both as breaking-equivalent and requires explicit major approval.\n if (curr.major === 0 && lat.major === 0 && lat.minor > curr.minor) return \"major\";\n if (\n curr.major === 0 &&\n lat.major === 0 &&\n curr.minor === 0 &&\n lat.minor === 0 &&\n lat.patch > curr.patch\n ) {\n return \"major\";\n }\n if (lat.minor > curr.minor) return \"minor\";\n if (lat.patch > curr.patch) return \"patch\";\n if (comparison > 0) return \"patch\";\n return \"none\";\n}\n\n/**\n * Fetch the latest version of a package from npm registry\n */\nasync function fetchPackageInfo(packageName: string): Promise<NpmPackageInfo> {\n const cached = versionCache.get(packageName);\n if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) {\n return cached.info;\n }\n\n const encodedName = encodeURIComponent(packageName).replace(\"%40\", \"@\");\n const url = `https://registry.npmjs.org/${encodedName}`;\n\n const response = await fetch(url, {\n headers: { Accept: \"application/json\" },\n });\n\n if (!response.ok) {\n throw new Error(`Package ${packageName} not found (${response.status})`);\n }\n\n const info = (await response.json()) as NpmPackageInfo;\n\n versionCache.set(packageName, { info, timestamp: Date.now() });\n return info;\n}\n\nfunction getStableVersionsDescending(info: NpmPackageInfo): string[] {\n return Object.keys(info.versions || {})\n .filter((version) => !/-(alpha|beta|rc|next|canary)/.test(version))\n .filter((version) => isOldEnough(info, version))\n .sort((a, b) => compareVersions(b, a));\n}\n\nasync function fetchLatestCompatibleEcosystemVersion(ecosystem: string): Promise<string | undefined> {\n const cached = lockstepVersionCache.get(ecosystem);\n if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) {\n return cached.latest;\n }\n\n const ecosystemPackages = ECOSYSTEM_GROUPS[ecosystem]?.filter((pkg) => !pkg.endsWith(\"/*\")) ?? [];\n if (ecosystemPackages.length === 0) return undefined;\n\n const packageInfos = await Promise.all(ecosystemPackages.map((pkg) => fetchPackageInfo(pkg)));\n const [firstInfo, ...remainingInfos] = packageInfos;\n if (!firstInfo) return undefined;\n\n const sharedVersions = getStableVersionsDescending(firstInfo);\n\n for (const info of remainingInfos) {\n const stableVersions = new Set(getStableVersionsDescending(info));\n for (let i = sharedVersions.length - 1; i >= 0; i--) {\n const version = sharedVersions[i];\n if (!version || !stableVersions.has(version)) {\n sharedVersions.splice(i, 1);\n }\n }\n }\n\n const latest = sharedVersions[0];\n if (latest) {\n lockstepVersionCache.set(ecosystem, { latest, timestamp: Date.now() });\n }\n\n return latest;\n}\n\nexport async function fetchLatestVersion(\n packageName: string,\n options: { skipPrerelease?: boolean } = {},\n): Promise<string> {\n const { skipPrerelease = true } = options;\n const data = await fetchPackageInfo(packageName);\n let latest = data[\"dist-tags\"]?.latest;\n\n // If the latest is a prerelease (and we want to skip prereleases) or is\n // younger than the minimum release age, fall back to the highest stable\n // version that clears both filters.\n if (\n latest &&\n ((skipPrerelease && /-(alpha|beta|rc|next|canary)/.test(latest)) || !isOldEnough(data, latest))\n ) {\n const versions = getStableVersionsDescending(data);\n if (versions.length > 0 && versions[0]) {\n latest = versions[0];\n }\n }\n\n if (!latest) {\n throw new Error(`No versions found for ${packageName}`);\n }\n\n return latest;\n}\n\nasync function resolveLatestVersion(packageName: string, ecosystem?: string): Promise<string> {\n if (ecosystem && LOCKSTEP_ECOSYSTEMS.has(ecosystem)) {\n const compatibleVersion = await fetchLatestCompatibleEcosystemVersion(ecosystem);\n if (compatibleVersion) {\n return compatibleVersion;\n }\n }\n\n return fetchLatestVersion(packageName);\n}\n\n/**\n * Check if a specific version exists on npm\n */\nexport async function checkVersionExists(\n packageName: string,\n versionSpec: string,\n): Promise<boolean> {\n try {\n const cleanVersion = parseVersion(versionSpec).raw;\n const encodedName = encodeURIComponent(packageName).replace(\"%40\", \"@\");\n const url = `https://registry.npmjs.org/${encodedName}`;\n\n const response = await fetch(url, {\n headers: { Accept: \"application/json\" },\n });\n\n if (!response.ok) return false;\n\n const data = (await response.json()) as NpmPackageInfo;\n const versions = Object.keys(data.versions || {});\n\n // For caret versions, check if any version satisfies the range\n if (versionSpec.startsWith(\"^\")) {\n const { major, minor, patch } = parseVersion(versionSpec);\n\n return versions.some((v) => {\n const parsed = parseVersion(v);\n if (major === 0) {\n // For ^0.Y.Z, only minor must match, patch can be >= specified\n return parsed.major === 0 && parsed.minor === minor && parsed.patch >= patch;\n } else {\n // For ^X.Y.Z (X > 0), major must match, rest can be >=\n return (\n parsed.major === major &&\n (parsed.minor > minor || (parsed.minor === minor && parsed.patch >= patch))\n );\n }\n });\n }\n\n return versions.includes(cleanVersion);\n } catch {\n return false;\n }\n}\n\n/**\n * Get the ecosystem group for a package\n */\nexport function getEcosystem(packageName: string): string | undefined {\n for (const [ecosystem, packages] of Object.entries(ECOSYSTEM_GROUPS)) {\n if (packages.includes(packageName)) {\n return ecosystem;\n }\n // Check for glob patterns like @effect/*\n for (const pattern of packages) {\n if (pattern.endsWith(\"/*\")) {\n const prefix = pattern.slice(0, -2);\n if (packageName.startsWith(prefix + \"/\")) {\n return ecosystem;\n }\n }\n }\n }\n return undefined;\n}\n\n/**\n * Group packages by their ecosystem\n */\nexport function groupByEcosystem(packages: string[]): Record<string, string[]> {\n const grouped: Record<string, string[]> = {};\n const other: string[] = [];\n\n for (const pkg of packages) {\n const ecosystem = getEcosystem(pkg);\n if (ecosystem) {\n if (!grouped[ecosystem]) grouped[ecosystem] = [];\n grouped[ecosystem]!.push(pkg);\n } else {\n other.push(pkg);\n }\n }\n\n // Add other group if not empty\n if (other.length > 0) {\n grouped.other = other;\n }\n\n return grouped;\n}\n\nexport async function checkAllVersions(options: {\n versionMap?: Record<string, string>;\n templateVersions?: Record<string, string>;\n filter?: string[];\n ecosystem?: string;\n concurrency?: number;\n onProgress?: (checked: number, total: number, current: string) => void;\n delayMs?: number;\n}): Promise<CheckResult> {\n const {\n versionMap = dependencyVersionMap,\n templateVersions = {},\n filter,\n ecosystem,\n concurrency = 5,\n onProgress,\n delayMs = 100,\n } = options;\n\n const allPackages: Record<string, { version: string; source: string }> = {};\n for (const [pkg, version] of Object.entries(versionMap)) {\n allPackages[pkg] = { version, source: \"map\" };\n }\n for (const [pkg, version] of Object.entries(templateVersions)) {\n if (!(pkg in allPackages)) {\n allPackages[pkg] = { version, source: \"template\" };\n }\n }\n\n let packages = Object.keys(allPackages);\n\n // Filter by specific packages\n if (filter && filter.length > 0) {\n packages = packages.filter((p) => filter.includes(p));\n }\n\n // Filter by ecosystem\n if (ecosystem) {\n const ecosystemPackages = ECOSYSTEM_GROUPS[ecosystem];\n if (ecosystemPackages) {\n packages = packages.filter((p) => {\n if (ecosystemPackages.includes(p)) return true;\n // Check glob patterns\n for (const pattern of ecosystemPackages) {\n if (pattern.endsWith(\"/*\")) {\n const prefix = pattern.slice(0, -2);\n if (p.startsWith(prefix + \"/\")) return true;\n }\n }\n return false;\n });\n }\n }\n\n const result: CheckResult = {\n outdated: [],\n upToDate: [],\n errors: [],\n };\n\n const total = packages.length;\n let checked = 0;\n\n // Process in batches for rate limiting\n for (let i = 0; i < packages.length; i += concurrency) {\n const batch = packages.slice(i, i + concurrency);\n\n const batchResults = await Promise.allSettled(\n batch.map(async (pkg) => {\n const entry = allPackages[pkg]!;\n try {\n const ecosystem = getEcosystem(pkg);\n const pinnedVersion = getPinnedDependencyVersion(pkg);\n const latest = pinnedVersion ?? `^${await resolveLatestVersion(pkg, ecosystem)}`;\n const updateType = getUpdateType(entry.version, latest);\n\n return {\n name: pkg,\n current: entry.version,\n latest,\n updateType,\n ecosystem,\n source: entry.source,\n };\n } catch (error) {\n throw { name: pkg, error: String(error) };\n }\n }),\n );\n\n for (const settled of batchResults) {\n if (settled.status === \"fulfilled\") {\n const info = settled.value as VersionInfo;\n if (info.updateType === \"none\") {\n result.upToDate.push(info);\n } else {\n result.outdated.push(info);\n }\n } else {\n const err = settled.reason as { name: string; error: string };\n result.errors.push(err);\n }\n checked++;\n onProgress?.(checked, total, batch[0] ?? \"\");\n }\n\n // Rate limiting delay between batches\n if (i + concurrency < packages.length && delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n\n // Sort outdated by update type (downgrade > major > minor > patch)\n const typeOrder: Record<UpdateType, number> = {\n downgrade: 0,\n major: 1,\n minor: 2,\n patch: 3,\n none: 4,\n };\n result.outdated.sort((a, b) => typeOrder[a.updateType] - typeOrder[b.updateType]);\n\n return result;\n}\n\n/**\n * Generate a markdown report of the check results\n */\nexport function generateMarkdownReport(result: CheckResult): string {\n const lines: string[] = [];\n\n lines.push(\"# Dependency Version Check Report\\n\");\n lines.push(`Generated: ${new Date().toISOString()}\\n`);\n\n // Summary\n lines.push(\"## Summary\\n\");\n const downgradeCount = result.outdated.filter((info) => info.updateType === \"downgrade\").length;\n const templateOnlyCount = result.outdated.filter((info) => info.source === \"template\").length;\n lines.push(`- **Outdated**: ${result.outdated.length}`);\n if (templateOnlyCount > 0) {\n lines.push(`- **Template-only** (not in version map): ${templateOnlyCount}`);\n }\n lines.push(`- **Downgrades detected**: ${downgradeCount}`);\n lines.push(`- **Up to date**: ${result.upToDate.length}`);\n lines.push(`- **Errors**: ${result.errors.length}\\n`);\n\n // Outdated packages\n if (result.outdated.length > 0) {\n lines.push(\"## Outdated Packages\\n\");\n\n // Group by update type\n const byType: Record<UpdateType, VersionInfo[]> = {\n downgrade: [],\n major: [],\n minor: [],\n patch: [],\n none: [],\n };\n for (const info of result.outdated) {\n byType[info.updateType].push(info);\n }\n\n if (byType.downgrade.length > 0) {\n lines.push(\"### Downgrades Detected (Manual Review Required)\\n\");\n lines.push(\"| Package | Current | Latest | Ecosystem | Source |\");\n lines.push(\"|---------|---------|--------|-----------|--------|\");\n for (const info of byType.downgrade) {\n lines.push(\n `| ${info.name} | ${info.current} | ${info.latest} | ${info.ecosystem || \"-\"} | ${info.source === \"template\" ? \"template\" : \"map\"} |`,\n );\n }\n lines.push(\"\");\n }\n\n if (byType.major.length > 0) {\n lines.push(\"### Major Updates (Breaking Changes Possible)\\n\");\n lines.push(\"| Package | Current | Latest | Ecosystem | Source |\");\n lines.push(\"|---------|---------|--------|-----------|--------|\");\n for (const info of byType.major) {\n lines.push(\n `| ${info.name} | ${info.current} | ${info.latest} | ${info.ecosystem || \"-\"} | ${info.source === \"template\" ? \"template\" : \"map\"} |`,\n );\n }\n lines.push(\"\");\n }\n\n if (byType.minor.length > 0) {\n lines.push(\"### Minor Updates\\n\");\n lines.push(\"| Package | Current | Latest | Ecosystem | Source |\");\n lines.push(\"|---------|---------|--------|-----------|--------|\");\n for (const info of byType.minor) {\n lines.push(\n `| ${info.name} | ${info.current} | ${info.latest} | ${info.ecosystem || \"-\"} | ${info.source === \"template\" ? \"template\" : \"map\"} |`,\n );\n }\n lines.push(\"\");\n }\n\n if (byType.patch.length > 0) {\n lines.push(\"### Patch Updates\\n\");\n lines.push(\"| Package | Current | Latest | Ecosystem | Source |\");\n lines.push(\"|---------|---------|--------|-----------|--------|\");\n for (const info of byType.patch) {\n lines.push(\n `| ${info.name} | ${info.current} | ${info.latest} | ${info.ecosystem || \"-\"} | ${info.source === \"template\" ? \"template\" : \"map\"} |`,\n );\n }\n lines.push(\"\");\n }\n }\n\n if (result.versionMismatches && result.versionMismatches.length > 0) {\n lines.push(\"## Version Mismatches (map vs template)\\n\");\n lines.push(\"| Package | Map Version | Template Version | Template File |\");\n lines.push(\"|---------|-------------|------------------|---------------|\");\n for (const m of result.versionMismatches) {\n lines.push(`| ${m.name} | ${m.mapVersion} | ${m.templateVersion} | ${m.file} |`);\n }\n lines.push(\"\");\n }\n\n // Errors\n if (result.errors.length > 0) {\n lines.push(\"## Errors\\n\");\n lines.push(\"| Package | Error |\");\n lines.push(\"|---------|-------|\");\n for (const err of result.errors) {\n lines.push(`| ${err.name} | ${err.error} |`);\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Generate a CLI-friendly table report\n */\nexport function generateCliReport(result: CheckResult): string {\n const lines: string[] = [];\n\n if (result.outdated.length === 0 && result.errors.length === 0) {\n lines.push(\"All dependencies are up to date!\");\n return lines.join(\"\\n\");\n }\n\n if (result.outdated.length > 0) {\n // Group by update type\n const byType: Record<UpdateType, VersionInfo[]> = {\n downgrade: [],\n major: [],\n minor: [],\n patch: [],\n none: [],\n };\n for (const info of result.outdated) {\n byType[info.updateType].push(info);\n }\n\n const formatRow = (info: VersionInfo) => {\n const label =\n info.updateType === \"downgrade\"\n ? \"[DOWNGRADE]\"\n : info.updateType === \"major\"\n ? \"[MAJOR]\"\n : info.updateType === \"minor\"\n ? \"[MINOR]\"\n : \"[PATCH]\";\n return ` ${label.padEnd(8)} ${info.name.padEnd(45)} ${info.current.padEnd(15)} -> ${info.latest}`;\n };\n\n if (byType.downgrade.length > 0) {\n lines.push(\"\\nDowngrades Detected (Manual Review Required):\");\n for (const info of byType.downgrade) {\n lines.push(formatRow(info));\n }\n }\n\n if (byType.major.length > 0) {\n lines.push(\"\\nMajor Updates (Breaking Changes Possible):\");\n for (const info of byType.major) {\n lines.push(formatRow(info));\n }\n }\n\n if (byType.minor.length > 0) {\n lines.push(\"\\nMinor Updates:\");\n for (const info of byType.minor) {\n lines.push(formatRow(info));\n }\n }\n\n if (byType.patch.length > 0) {\n lines.push(\"\\nPatch Updates:\");\n for (const info of byType.patch) {\n lines.push(formatRow(info));\n }\n }\n }\n\n if (result.versionMismatches && result.versionMismatches.length > 0) {\n lines.push(\"\\nVersion Mismatches (map vs template):\");\n for (const m of result.versionMismatches) {\n lines.push(` ${m.name.padEnd(45)} map: ${m.mapVersion.padEnd(15)} template: ${m.templateVersion.padEnd(15)} ${m.file}`);\n }\n }\n\n if (result.errors.length > 0) {\n lines.push(\"\\nErrors:\");\n for (const err of result.errors) {\n lines.push(` ${err.name}: ${err.error}`);\n }\n }\n\n const mismatchCount = result.versionMismatches?.length ?? 0;\n lines.push(\n `\\nSummary: ${result.outdated.length} outdated, ${result.upToDate.length} up to date, ${mismatchCount} mismatches, ${result.errors.length} errors`,\n );\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Generate updated code for add-deps.ts with new versions\n */\nexport function generateUpdatedVersionMap(\n updates: VersionInfo[],\n currentMap: Record<string, string>,\n): Record<string, string> {\n const newMap = { ...currentMap };\n for (const update of updates) {\n if (update.updateType !== \"none\") {\n newMap[update.name] = update.latest;\n }\n }\n return newMap;\n}\n\n/**\n * Get the current dependency version map\n */\nexport function getDependencyVersionMap(): Record<string, string> {\n return { ...dependencyVersionMap };\n}\n\n/**\n * List all available ecosystems\n */\nexport function listEcosystems(): string[] {\n return Object.keys(ECOSYSTEM_GROUPS);\n}\n"],"mappings":";;;;;;;;;AAYA,MAAaA,6BAA+E;CAC1F,MAAM;EACJ,eAAe;EACf,QACE;EACH;CACD,YAAY;EACV,eAAe;EACf,QAAQ;EACT;CACD,OAAO;EACL,eAAe;EACf,QAAQ;EACT;CACD,QAAQ;EACN,eAAe;EACf,QAAQ;EACT;CACD,SAAS;EACP,eAAe;EACf,QAAQ;EACT;CACD,SAAS;EACP,eAAe;EACf,QAAQ;EACT;CACD,gBAAgB;EACd,eAAe;EACf,QAAQ;EACT;CACD,gBAAgB;EACd,eAAe;EACf,QAAQ;EACT;CACD,MAAM;EACJ,eAAe;EACf,QAAQ;EACT;CACD,wBAAwB;EACtB,eAAe;EACf,QAAQ;EACT;CACD,wBAAwB;EACtB,eAAe;EACf,QAAQ;EACT;CACD,yBAAyB;EACvB,eAAe;EACf,QAAQ;EACT;CACD,uBAAuB;EACrB,eAAe;EACf,QAAQ;EACT;CACD,eAAe;EACb,eAAe;EACf,QAAQ;EACT;CACD,qBAAqB;EACnB,eAAe;EACf,QAAQ;EACT;CACD,gCAAgC;EAC9B,eAAe;EACf,QAAQ;EACT;CACD,+BAA+B;EAC7B,eAAe;EACf,QAAQ;EACT;CACD,8BAA8B;EAC5B,eAAe;EACf,QAAQ;EACT;CACD,2BAA2B;EACzB,eAAe;EACf,QAAQ;EACT;CACD,6CAA6C;EAC3C,eAAe;EACf,QAAQ;EACT;CACD,2CAA2C;EACzC,eAAe;EACf,QAAQ;EACT;CACD,6CAA6C;EAC3C,eAAe;EACf,QAAQ;EACT;CACD,4BAA4B;EAC1B,eAAe;EACf,QAAQ;EACT;CACD,8BAA8B;EAC5B,eAAe;EACf,QAAQ;EACT;CACD,QAAQ;EACN,eAAe;EACf,QAAQ;EACT;CACD,cAAc;EACZ,eAAe;EACf,QAAQ;EACT;CACD,uBAAuB;EACrB,eAAe;EACf,QAAQ;EACT;CACF;AAED,SAAgB,2BAA2B,aAAyC;AAClF,QAAO,2BAA2B,cAAc;;AAGlD,SAAgB,yBAAyB,aAA8B;AACrE,QAAO,2BAA2B,cAAc,eAAe;;;;;;;;;;;;;;;ACjFjE,SAAgB,uBACd,SACA,MACe;AACf,QAAO,QAAQ,QAAQ,WAAW;AAChC,MAAI,OAAO,eAAe,eAAe,OAAO,eAAe,OAAQ,QAAO;AAC9E,MAAI,OAAO,eAAe,QACxB,QAAO,SAAS,SAAS,yBAAyB,OAAO,KAAK;AAEhE,SAAO,OAAO,eAAe,WAAW,OAAO,eAAe;GAC9D;;;;;;;;AAmBJ,MAAa,qBAAqB,OAAU,KAAK;AAEjD,SAAS,YAAY,MAAsB,SAA0B;CACnE,MAAM,YAAY,KAAK,OAAO;AAC9B,KAAI,CAAC,UAAW,QAAO;CACvB,MAAM,cAAc,KAAK,MAAM,UAAU;AACzC,KAAI,OAAO,MAAM,YAAY,CAAE,QAAO;AACtC,QAAO,KAAK,KAAK,GAAG,eAAe;;AAIrC,MAAaC,mBAA6C;CACxD,QAAQ;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,UAAU;EACR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,QAAQ;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,SAAS,CAAC,eAAe,cAAc;CACvC,OAAO;EACL;EACA;EACA;EACA;EACD;CACD,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,eAAe;EACb;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,SAAS;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,WAAW;EACT;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,MAAM;EAAC;EAAgB;EAAgB;EAA6B;CACpE,MAAM;EAAC;EAAgB;EAAgB;EAAiB;EAAa;EAAuB;CAC5F,WAAW;EAAC;EAAiB;EAAwB;EAAuB;EAAgB;CAC5F,iBAAiB,CAAC,kBAAkB,UAAU;CAC9C,SAAS;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,SAAS;EACP;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAC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"}
|
|
@@ -54,7 +54,7 @@ declare function generateVirtualProject(options: GeneratorOptions): Promise<Gene
|
|
|
54
54
|
//#endregion
|
|
55
55
|
//#region src/templates.generated.d.ts
|
|
56
56
|
declare const EMBEDDED_TEMPLATES: Map<string, string>;
|
|
57
|
-
declare const TEMPLATE_COUNT =
|
|
57
|
+
declare const TEMPLATE_COUNT = 1599;
|
|
58
58
|
//#endregion
|
|
59
59
|
//#region src/preflight-validation.d.ts
|
|
60
60
|
declare class PreflightWarning {
|
|
@@ -83,4 +83,4 @@ declare class PreflightResult {
|
|
|
83
83
|
declare const validatePreflightConfig: (config: ProjectConfig) => PreflightResult;
|
|
84
84
|
//#endregion
|
|
85
85
|
export { TEMPLATE_COUNT as a, TemplateData as c, EMBEDDED_TEMPLATES as i, VirtualFileSystem as l, PreflightWarning as n, generateVirtualProject as o, validatePreflightConfig as r, processAddonTemplates as s, PreflightResult as t };
|
|
86
|
-
//# sourceMappingURL=preflight-validation-
|
|
86
|
+
//# sourceMappingURL=preflight-validation-BX7t84dq.d.mts.map
|
package/dist/{preflight-validation-D2Kdxd4D.d.mts.map → preflight-validation-BX7t84dq.d.mts.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight-validation-
|
|
1
|
+
{"version":3,"file":"preflight-validation-BX7t84dq.d.mts","names":[],"sources":["../src/core/virtual-fs.ts","../src/template-handlers/utils.ts","../src/template-handlers/addons.ts","../src/generator.ts","../src/templates.generated.ts","../src/preflight-validation.ts"],"sourcesContent":[],"mappings":";;;;;;;;AASA;;cAAa,iBAAA;;ECHD,QAAA,KAAA;;;;ECwGU,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,OAAqB;EACpC,UAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EACM,eAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EACH,KAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EACP,UAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAAO;;;;ECmLY,SAAA,CAAA,OAAA,EAAA,MAAsB,CAAA,EAAA,IAAA;EAAU;EAA2B,aAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAAR,OAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,MAAA,EAAA;EAAO,QAAA,CAAA,IAAA,OAAA,CAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EHrLrC,CGqLqC,GAAA,SAAA;;;;EClSnE,YAAA,CAAA,CAAA,EAAA,MA0wgGX;EAEW,iBAAc,CAAA,CAAA,EAAA,MAAA;6BJ7ngGK;;;EKhJnB,QAAA,QAAA;EAyBA,QAAA,UAAe;EAuNf,QAAA,aAAA;;;;;;KJ5OD,YAAA,GAAe;;;iBCwGL,qBAAA,MACf,8BACM,sBACH,gBACP;;;iBCmLmB,sBAAA,UAAgC,mBAAmB,QAAQ;;;cClSpE,oBAAoB;cA4wgGpB,cAAA;;;cC7wgGA,gBAAA;;;ELOA,SAAA,UAAA,EAAiB,MKJD,aL6IG;;;;EC5IpB,WAAA,CAAA,KAAY,EAAA;;;+BIOO;IHiGT,SAAA,aAAqB,EAAA,MAAA,GAAA,MAAA,EAAA;IACpC,SAAA,MAAA,EAAA,MAAA;IACM,SAAA,WAAA,EAAA,SAAA,MAAA,EAAA;EACH,CAAA;;AACA,cGvFG,eAAA,CHuFH;8BGtFoB;;gCAEqB;EFuQ7B,CAAA;EAAgC,IAAA,WAAA,CAAA,CAAA,EAAA,OAAA;;AAAmB,cEnD5D,uBFmD4D,EAAA,CAAA,MAAA,EEnDzB,aFmDyB,EAAA,GEnDT,eFmDS"}
|