@zigrivers/scaffold 3.9.2 → 3.10.1
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/README.md +39 -8
- package/dist/cli/commands/adopt.cli-flags.test.d.ts +2 -0
- package/dist/cli/commands/adopt.cli-flags.test.d.ts.map +1 -0
- package/dist/cli/commands/adopt.cli-flags.test.js +165 -0
- package/dist/cli/commands/adopt.cli-flags.test.js.map +1 -0
- package/dist/cli/commands/adopt.config-resolution.test.d.ts +2 -0
- package/dist/cli/commands/adopt.config-resolution.test.d.ts.map +1 -0
- package/dist/cli/commands/adopt.config-resolution.test.js +217 -0
- package/dist/cli/commands/adopt.config-resolution.test.js.map +1 -0
- package/dist/cli/commands/adopt.config-write-integration.test.d.ts +2 -0
- package/dist/cli/commands/adopt.config-write-integration.test.d.ts.map +1 -0
- package/dist/cli/commands/adopt.config-write-integration.test.js +138 -0
- package/dist/cli/commands/adopt.config-write-integration.test.js.map +1 -0
- package/dist/cli/commands/adopt.d.ts +4 -0
- package/dist/cli/commands/adopt.d.ts.map +1 -1
- package/dist/cli/commands/adopt.js +432 -61
- package/dist/cli/commands/adopt.js.map +1 -1
- package/dist/cli/commands/adopt.performance.test.d.ts +2 -0
- package/dist/cli/commands/adopt.performance.test.d.ts.map +1 -0
- package/dist/cli/commands/adopt.performance.test.js +30 -0
- package/dist/cli/commands/adopt.performance.test.js.map +1 -0
- package/dist/cli/commands/adopt.result-shape.test.d.ts +2 -0
- package/dist/cli/commands/adopt.result-shape.test.d.ts.map +1 -0
- package/dist/cli/commands/adopt.result-shape.test.js +166 -0
- package/dist/cli/commands/adopt.result-shape.test.js.map +1 -0
- package/dist/cli/commands/adopt.serialization.test.d.ts +2 -0
- package/dist/cli/commands/adopt.serialization.test.d.ts.map +1 -0
- package/dist/cli/commands/adopt.serialization.test.js +228 -0
- package/dist/cli/commands/adopt.serialization.test.js.map +1 -0
- package/dist/cli/commands/adopt.test.js +26 -15
- package/dist/cli/commands/adopt.test.js.map +1 -1
- package/dist/cli/commands/adopt.windows-crlf.test.d.ts +2 -0
- package/dist/cli/commands/adopt.windows-crlf.test.d.ts.map +1 -0
- package/dist/cli/commands/adopt.windows-crlf.test.js +102 -0
- package/dist/cli/commands/adopt.windows-crlf.test.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +4 -157
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/init-flag-families.d.ts +86 -0
- package/dist/cli/init-flag-families.d.ts.map +1 -0
- package/dist/cli/init-flag-families.js +418 -0
- package/dist/cli/init-flag-families.js.map +1 -0
- package/dist/cli/init-flag-families.test.d.ts +2 -0
- package/dist/cli/init-flag-families.test.d.ts.map +1 -0
- package/dist/cli/init-flag-families.test.js +268 -0
- package/dist/cli/init-flag-families.test.js.map +1 -0
- package/dist/config/schema.d.ts +6 -6
- package/dist/config/schema.js +2 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/config/schema.test.js +10 -4
- package/dist/config/schema.test.js.map +1 -1
- package/dist/e2e/adopt-multi-type.test.d.ts +2 -0
- package/dist/e2e/adopt-multi-type.test.d.ts.map +1 -0
- package/dist/e2e/adopt-multi-type.test.js +35 -0
- package/dist/e2e/adopt-multi-type.test.js.map +1 -0
- package/dist/project/__frozen-schemas__/schema-v3.9.2.d.ts +2891 -0
- package/dist/project/__frozen-schemas__/schema-v3.9.2.d.ts.map +1 -0
- package/dist/project/__frozen-schemas__/schema-v3.9.2.js +177 -0
- package/dist/project/__frozen-schemas__/schema-v3.9.2.js.map +1 -0
- package/dist/project/adopt.d.ts +38 -2
- package/dist/project/adopt.d.ts.map +1 -1
- package/dist/project/adopt.error-messages.test.d.ts +2 -0
- package/dist/project/adopt.error-messages.test.d.ts.map +1 -0
- package/dist/project/adopt.error-messages.test.js +112 -0
- package/dist/project/adopt.error-messages.test.js.map +1 -0
- package/dist/project/adopt.forward-compat.test.d.ts +2 -0
- package/dist/project/adopt.forward-compat.test.d.ts.map +1 -0
- package/dist/project/adopt.forward-compat.test.js +71 -0
- package/dist/project/adopt.forward-compat.test.js.map +1 -0
- package/dist/project/adopt.js +218 -27
- package/dist/project/adopt.js.map +1 -1
- package/dist/project/adopt.merge.test.d.ts +2 -0
- package/dist/project/adopt.merge.test.d.ts.map +1 -0
- package/dist/project/adopt.merge.test.js +62 -0
- package/dist/project/adopt.merge.test.js.map +1 -0
- package/dist/project/adopt.re-adoption.test.d.ts +2 -0
- package/dist/project/adopt.re-adoption.test.d.ts.map +1 -0
- package/dist/project/adopt.re-adoption.test.js +222 -0
- package/dist/project/adopt.re-adoption.test.js.map +1 -0
- package/dist/project/adopt.test.js +72 -27
- package/dist/project/adopt.test.js.map +1 -1
- package/dist/project/detectors/backend.d.ts +4 -0
- package/dist/project/detectors/backend.d.ts.map +1 -0
- package/dist/project/detectors/backend.js +199 -0
- package/dist/project/detectors/backend.js.map +1 -0
- package/dist/project/detectors/backend.test.d.ts +2 -0
- package/dist/project/detectors/backend.test.d.ts.map +1 -0
- package/dist/project/detectors/backend.test.js +64 -0
- package/dist/project/detectors/backend.test.js.map +1 -0
- package/dist/project/detectors/browser-extension.d.ts +4 -0
- package/dist/project/detectors/browser-extension.d.ts.map +1 -0
- package/dist/project/detectors/browser-extension.js +61 -0
- package/dist/project/detectors/browser-extension.js.map +1 -0
- package/dist/project/detectors/browser-extension.test.d.ts +2 -0
- package/dist/project/detectors/browser-extension.test.d.ts.map +1 -0
- package/dist/project/detectors/browser-extension.test.js +64 -0
- package/dist/project/detectors/browser-extension.test.js.map +1 -0
- package/dist/project/detectors/cli.d.ts +4 -0
- package/dist/project/detectors/cli.d.ts.map +1 -0
- package/dist/project/detectors/cli.js +68 -0
- package/dist/project/detectors/cli.js.map +1 -0
- package/dist/project/detectors/cli.test.d.ts +2 -0
- package/dist/project/detectors/cli.test.d.ts.map +1 -0
- package/dist/project/detectors/cli.test.js +70 -0
- package/dist/project/detectors/cli.test.js.map +1 -0
- package/dist/project/detectors/context.d.ts +105 -0
- package/dist/project/detectors/context.d.ts.map +1 -0
- package/dist/project/detectors/context.js +652 -0
- package/dist/project/detectors/context.js.map +1 -0
- package/dist/project/detectors/context.test.d.ts +2 -0
- package/dist/project/detectors/context.test.d.ts.map +1 -0
- package/dist/project/detectors/context.test.js +240 -0
- package/dist/project/detectors/context.test.js.map +1 -0
- package/dist/project/detectors/data-pipeline.d.ts +4 -0
- package/dist/project/detectors/data-pipeline.d.ts.map +1 -0
- package/dist/project/detectors/data-pipeline.js +97 -0
- package/dist/project/detectors/data-pipeline.js.map +1 -0
- package/dist/project/detectors/data-pipeline.test.d.ts +2 -0
- package/dist/project/detectors/data-pipeline.test.d.ts.map +1 -0
- package/dist/project/detectors/data-pipeline.test.js +67 -0
- package/dist/project/detectors/data-pipeline.test.js.map +1 -0
- package/dist/project/detectors/disambiguate.d.ts +12 -0
- package/dist/project/detectors/disambiguate.d.ts.map +1 -0
- package/dist/project/detectors/disambiguate.js +87 -0
- package/dist/project/detectors/disambiguate.js.map +1 -0
- package/dist/project/detectors/disambiguate.test.d.ts +2 -0
- package/dist/project/detectors/disambiguate.test.d.ts.map +1 -0
- package/dist/project/detectors/disambiguate.test.js +114 -0
- package/dist/project/detectors/disambiguate.test.js.map +1 -0
- package/dist/project/detectors/file-text-match.d.ts +3 -0
- package/dist/project/detectors/file-text-match.d.ts.map +1 -0
- package/dist/project/detectors/file-text-match.js +60 -0
- package/dist/project/detectors/file-text-match.js.map +1 -0
- package/dist/project/detectors/file-text-match.test.d.ts +2 -0
- package/dist/project/detectors/file-text-match.test.d.ts.map +1 -0
- package/dist/project/detectors/file-text-match.test.js +81 -0
- package/dist/project/detectors/file-text-match.test.js.map +1 -0
- package/dist/project/detectors/game.d.ts +18 -0
- package/dist/project/detectors/game.d.ts.map +1 -0
- package/dist/project/detectors/game.js +83 -0
- package/dist/project/detectors/game.js.map +1 -0
- package/dist/project/detectors/game.test.d.ts +2 -0
- package/dist/project/detectors/game.test.d.ts.map +1 -0
- package/dist/project/detectors/game.test.js +87 -0
- package/dist/project/detectors/game.test.js.map +1 -0
- package/dist/project/detectors/index.d.ts +5 -0
- package/dist/project/detectors/index.d.ts.map +1 -0
- package/dist/project/detectors/index.js +29 -0
- package/dist/project/detectors/index.js.map +1 -0
- package/dist/project/detectors/library.d.ts +4 -0
- package/dist/project/detectors/library.d.ts.map +1 -0
- package/dist/project/detectors/library.js +122 -0
- package/dist/project/detectors/library.js.map +1 -0
- package/dist/project/detectors/library.test.d.ts +2 -0
- package/dist/project/detectors/library.test.d.ts.map +1 -0
- package/dist/project/detectors/library.test.js +95 -0
- package/dist/project/detectors/library.test.js.map +1 -0
- package/dist/project/detectors/ml.d.ts +4 -0
- package/dist/project/detectors/ml.d.ts.map +1 -0
- package/dist/project/detectors/ml.js +112 -0
- package/dist/project/detectors/ml.js.map +1 -0
- package/dist/project/detectors/ml.test.d.ts +2 -0
- package/dist/project/detectors/ml.test.d.ts.map +1 -0
- package/dist/project/detectors/ml.test.js +75 -0
- package/dist/project/detectors/ml.test.js.map +1 -0
- package/dist/project/detectors/mobile-app.d.ts +4 -0
- package/dist/project/detectors/mobile-app.d.ts.map +1 -0
- package/dist/project/detectors/mobile-app.js +58 -0
- package/dist/project/detectors/mobile-app.js.map +1 -0
- package/dist/project/detectors/mobile-app.test.d.ts +2 -0
- package/dist/project/detectors/mobile-app.test.d.ts.map +1 -0
- package/dist/project/detectors/mobile-app.test.js +57 -0
- package/dist/project/detectors/mobile-app.test.js.map +1 -0
- package/dist/project/detectors/required-fields.d.ts +4 -0
- package/dist/project/detectors/required-fields.d.ts.map +1 -0
- package/dist/project/detectors/required-fields.js +13 -0
- package/dist/project/detectors/required-fields.js.map +1 -0
- package/dist/project/detectors/required-fields.test.d.ts +2 -0
- package/dist/project/detectors/required-fields.test.d.ts.map +1 -0
- package/dist/project/detectors/required-fields.test.js +24 -0
- package/dist/project/detectors/required-fields.test.js.map +1 -0
- package/dist/project/detectors/resolve-detection.d.ts +18 -0
- package/dist/project/detectors/resolve-detection.d.ts.map +1 -0
- package/dist/project/detectors/resolve-detection.js +184 -0
- package/dist/project/detectors/resolve-detection.js.map +1 -0
- package/dist/project/detectors/resolve-detection.test.d.ts +2 -0
- package/dist/project/detectors/resolve-detection.test.d.ts.map +1 -0
- package/dist/project/detectors/resolve-detection.test.js +158 -0
- package/dist/project/detectors/resolve-detection.test.js.map +1 -0
- package/dist/project/detectors/types.d.ts +56 -0
- package/dist/project/detectors/types.d.ts.map +1 -0
- package/dist/project/detectors/types.js +9 -0
- package/dist/project/detectors/types.js.map +1 -0
- package/dist/project/detectors/web-app.d.ts +15 -0
- package/dist/project/detectors/web-app.d.ts.map +1 -0
- package/dist/project/detectors/web-app.js +228 -0
- package/dist/project/detectors/web-app.js.map +1 -0
- package/dist/project/detectors/web-app.test.d.ts +2 -0
- package/dist/project/detectors/web-app.test.d.ts.map +1 -0
- package/dist/project/detectors/web-app.test.js +95 -0
- package/dist/project/detectors/web-app.test.js.map +1 -0
- package/dist/types/config.d.ts +33 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/enums.d.ts +2 -1
- package/dist/types/enums.d.ts.map +1 -1
- package/dist/types/enums.js +1 -0
- package/dist/types/enums.js.map +1 -1
- package/dist/utils/errors.d.ts +7 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +38 -0
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/errors.test.js +42 -1
- package/dist/utils/errors.test.js.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-v3.9.2.d.ts","sourceRoot":"","sources":["../../../src/project/__frozen-schemas__/schema-v3.9.2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAYvB,eAAO,MAAM,iBAAiB,uHAG5B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;EAKpB,CAAA;AAEX,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAMrB,CAAA;AAEX,eAAO,MAAM,eAAe;;;;;;;;;;;;EAMjB,CAAA;AAEX,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAMrB,CAAA;AAEX,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;EAKvB,CAAA;AAEX,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;EAM1B,CAAA;AAEX,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAKhB,CAAA;AAEX,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;EAK9B,CAAA;AAEX,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBlB,CAAA;AA+FX,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAMT,CAAA;AAEhB,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
// src/config/schema.ts
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
const CustomStepSchema = z.object({
|
|
4
|
+
enabled: z.boolean().optional(),
|
|
5
|
+
depth: z.number().int().min(1).max(5).optional(),
|
|
6
|
+
}).strict();
|
|
7
|
+
const CustomSchema = z.object({
|
|
8
|
+
default_depth: z.number().int().min(1).max(5).optional(),
|
|
9
|
+
steps: z.record(z.string(), CustomStepSchema).optional(),
|
|
10
|
+
}).strict();
|
|
11
|
+
export const ProjectTypeSchema = z.enum([
|
|
12
|
+
'web-app', 'mobile-app', 'backend', 'cli', 'library', 'game',
|
|
13
|
+
'data-pipeline', 'ml', 'browser-extension',
|
|
14
|
+
]);
|
|
15
|
+
export const WebAppConfigSchema = z.object({
|
|
16
|
+
renderingStrategy: z.enum(['spa', 'ssr', 'ssg', 'hybrid']),
|
|
17
|
+
deployTarget: z.enum(['static', 'serverless', 'container', 'edge', 'long-running']).default('serverless'),
|
|
18
|
+
realtime: z.enum(['none', 'websocket', 'sse']).default('none'),
|
|
19
|
+
authFlow: z.enum(['none', 'session', 'oauth', 'passkey']).default('none'),
|
|
20
|
+
}).strict();
|
|
21
|
+
export const BackendConfigSchema = z.object({
|
|
22
|
+
apiStyle: z.enum(['rest', 'graphql', 'grpc', 'trpc', 'none']),
|
|
23
|
+
dataStore: z.array(z.enum(['relational', 'document', 'key-value'])).min(1).default(['relational']),
|
|
24
|
+
authMechanism: z.enum(['none', 'jwt', 'session', 'oauth', 'apikey']).default('none'),
|
|
25
|
+
asyncMessaging: z.enum(['none', 'queue', 'event-driven']).default('none'),
|
|
26
|
+
deployTarget: z.enum(['serverless', 'container', 'long-running']).default('container'),
|
|
27
|
+
}).strict();
|
|
28
|
+
export const CliConfigSchema = z.object({
|
|
29
|
+
interactivity: z.enum(['args-only', 'interactive', 'hybrid']),
|
|
30
|
+
distributionChannels: z.array(z.enum(['package-manager', 'system-package-manager', 'standalone-binary', 'container'])).min(1).default(['package-manager']),
|
|
31
|
+
hasStructuredOutput: z.boolean().default(false),
|
|
32
|
+
}).strict();
|
|
33
|
+
export const LibraryConfigSchema = z.object({
|
|
34
|
+
visibility: z.enum(['public', 'internal']),
|
|
35
|
+
runtimeTarget: z.enum(['node', 'browser', 'isomorphic', 'edge']).default('isomorphic'),
|
|
36
|
+
bundleFormat: z.enum(['esm', 'cjs', 'dual', 'unbundled']).default('dual'),
|
|
37
|
+
hasTypeDefinitions: z.boolean().default(true),
|
|
38
|
+
documentationLevel: z.enum(['none', 'readme', 'api-docs', 'full-site']).default('readme'),
|
|
39
|
+
}).strict();
|
|
40
|
+
export const MobileAppConfigSchema = z.object({
|
|
41
|
+
platform: z.enum(['ios', 'android', 'cross-platform']),
|
|
42
|
+
distributionModel: z.enum(['public', 'private', 'mixed']).default('public'),
|
|
43
|
+
offlineSupport: z.enum(['none', 'cache', 'offline-first']).default('none'),
|
|
44
|
+
hasPushNotifications: z.boolean().default(false),
|
|
45
|
+
}).strict();
|
|
46
|
+
export const DataPipelineConfigSchema = z.object({
|
|
47
|
+
processingModel: z.enum(['batch', 'streaming', 'hybrid']),
|
|
48
|
+
orchestration: z.enum(['none', 'dag-based', 'event-driven', 'scheduled']).default('none'),
|
|
49
|
+
dataQualityStrategy: z.enum(['none', 'validation', 'testing', 'observability']).default('validation'),
|
|
50
|
+
schemaManagement: z.enum(['none', 'schema-registry', 'contracts']).default('none'),
|
|
51
|
+
hasDataCatalog: z.boolean().default(false),
|
|
52
|
+
}).strict();
|
|
53
|
+
export const MlConfigSchema = z.object({
|
|
54
|
+
projectPhase: z.enum(['training', 'inference', 'both']),
|
|
55
|
+
modelType: z.enum(['classical', 'deep-learning', 'llm']).default('deep-learning'),
|
|
56
|
+
servingPattern: z.enum(['none', 'batch', 'realtime', 'edge']).default('none'),
|
|
57
|
+
hasExperimentTracking: z.boolean().default(true),
|
|
58
|
+
}).strict();
|
|
59
|
+
export const BrowserExtensionConfigSchema = z.object({
|
|
60
|
+
manifestVersion: z.enum(['2', '3']).default('3'),
|
|
61
|
+
uiSurfaces: z.array(z.enum(['popup', 'options', 'newtab', 'devtools', 'sidepanel'])).default(['popup']),
|
|
62
|
+
hasContentScript: z.boolean().default(false),
|
|
63
|
+
hasBackgroundWorker: z.boolean().default(true),
|
|
64
|
+
}).strict();
|
|
65
|
+
export const GameConfigSchema = z.object({
|
|
66
|
+
engine: z.enum(['unity', 'unreal', 'godot', 'custom']),
|
|
67
|
+
multiplayerMode: z.enum(['none', 'local', 'online', 'hybrid']).default('none'),
|
|
68
|
+
narrative: z.enum(['none', 'light', 'heavy']).default('none'),
|
|
69
|
+
contentStructure: z.enum(['discrete', 'open-world', 'procedural', 'endless', 'mission-based']).default('discrete'),
|
|
70
|
+
economy: z.enum(['none', 'progression', 'monetized', 'both']).default('none'),
|
|
71
|
+
onlineServices: z.array(z.enum(['leaderboards', 'accounts', 'matchmaking', 'live-ops'])).default([]),
|
|
72
|
+
persistence: z.enum(['none', 'settings-only', 'profile', 'progression', 'cloud']).default('progression'),
|
|
73
|
+
targetPlatforms: z.array(z.enum(['pc', 'web', 'ios', 'android', 'ps5', 'xbox', 'switch', 'vr', 'ar'])).min(1).default(['pc']),
|
|
74
|
+
supportedLocales: z.array(z.string().regex(/^[a-z]{2}(-[A-Z]{2})?$/, 'Must be a valid locale code (e.g. "en", "en-US", "ja", "fr-FR")')).min(1).default(['en']),
|
|
75
|
+
hasModding: z.boolean().default(false),
|
|
76
|
+
npcAiComplexity: z.enum(['none', 'simple', 'complex']).default('none'),
|
|
77
|
+
}).strict();
|
|
78
|
+
const ProjectSchema = z.object({
|
|
79
|
+
name: z.string().min(1).optional(),
|
|
80
|
+
platforms: z.array(z.enum(['web', 'mobile', 'desktop'])).optional(),
|
|
81
|
+
projectType: ProjectTypeSchema.optional(),
|
|
82
|
+
gameConfig: GameConfigSchema.optional(),
|
|
83
|
+
webAppConfig: WebAppConfigSchema.optional(),
|
|
84
|
+
backendConfig: BackendConfigSchema.optional(),
|
|
85
|
+
cliConfig: CliConfigSchema.optional(),
|
|
86
|
+
libraryConfig: LibraryConfigSchema.optional(),
|
|
87
|
+
mobileAppConfig: MobileAppConfigSchema.optional(),
|
|
88
|
+
dataPipelineConfig: DataPipelineConfigSchema.optional(),
|
|
89
|
+
mlConfig: MlConfigSchema.optional(),
|
|
90
|
+
browserExtensionConfig: BrowserExtensionConfigSchema.optional(),
|
|
91
|
+
}).passthrough() // allow unknown fields per ADR-033
|
|
92
|
+
.superRefine((data, ctx) => {
|
|
93
|
+
if (data.gameConfig !== undefined && data.projectType !== 'game') {
|
|
94
|
+
ctx.addIssue({ path: ['gameConfig'], code: 'custom',
|
|
95
|
+
message: 'gameConfig is only valid when projectType is "game"' });
|
|
96
|
+
}
|
|
97
|
+
if (data.webAppConfig !== undefined && data.projectType !== 'web-app') {
|
|
98
|
+
ctx.addIssue({ path: ['webAppConfig'], code: 'custom',
|
|
99
|
+
message: 'webAppConfig requires projectType: web-app' });
|
|
100
|
+
}
|
|
101
|
+
if (data.backendConfig !== undefined && data.projectType !== 'backend') {
|
|
102
|
+
ctx.addIssue({ path: ['backendConfig'], code: 'custom',
|
|
103
|
+
message: 'backendConfig requires projectType: backend' });
|
|
104
|
+
}
|
|
105
|
+
if (data.cliConfig !== undefined && data.projectType !== 'cli') {
|
|
106
|
+
ctx.addIssue({ path: ['cliConfig'], code: 'custom',
|
|
107
|
+
message: 'cliConfig requires projectType: cli' });
|
|
108
|
+
}
|
|
109
|
+
if (data.libraryConfig !== undefined && data.projectType !== 'library') {
|
|
110
|
+
ctx.addIssue({ path: ['libraryConfig'], code: 'custom',
|
|
111
|
+
message: 'libraryConfig requires projectType: library' });
|
|
112
|
+
}
|
|
113
|
+
if (data.mobileAppConfig !== undefined && data.projectType !== 'mobile-app') {
|
|
114
|
+
ctx.addIssue({ path: ['mobileAppConfig'], code: 'custom',
|
|
115
|
+
message: 'mobileAppConfig requires projectType: mobile-app' });
|
|
116
|
+
}
|
|
117
|
+
if (data.dataPipelineConfig !== undefined && data.projectType !== 'data-pipeline') {
|
|
118
|
+
ctx.addIssue({ path: ['dataPipelineConfig'], code: 'custom',
|
|
119
|
+
message: 'dataPipelineConfig requires projectType: data-pipeline' });
|
|
120
|
+
}
|
|
121
|
+
if (data.mlConfig !== undefined && data.projectType !== 'ml') {
|
|
122
|
+
ctx.addIssue({ path: ['mlConfig'], code: 'custom',
|
|
123
|
+
message: 'mlConfig requires projectType: ml' });
|
|
124
|
+
}
|
|
125
|
+
if (data.browserExtensionConfig !== undefined && data.projectType !== 'browser-extension') {
|
|
126
|
+
ctx.addIssue({ path: ['browserExtensionConfig'], code: 'custom',
|
|
127
|
+
message: 'browserExtensionConfig requires projectType: browser-extension' });
|
|
128
|
+
}
|
|
129
|
+
if (data.libraryConfig) {
|
|
130
|
+
const { visibility, documentationLevel } = data.libraryConfig;
|
|
131
|
+
if (visibility === 'public' && documentationLevel === 'none') {
|
|
132
|
+
ctx.addIssue({
|
|
133
|
+
path: ['libraryConfig', 'documentationLevel'],
|
|
134
|
+
code: 'custom',
|
|
135
|
+
message: 'Public libraries should have documentation'
|
|
136
|
+
+ ' (documentationLevel: none with visibility: public)',
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (data.webAppConfig) {
|
|
141
|
+
const { renderingStrategy, deployTarget, authFlow } = data.webAppConfig;
|
|
142
|
+
if (['ssr', 'hybrid'].includes(renderingStrategy) && deployTarget === 'static') {
|
|
143
|
+
ctx.addIssue({ path: ['webAppConfig', 'deployTarget'], code: 'custom',
|
|
144
|
+
message: 'SSR/hybrid rendering requires compute, not static hosting' });
|
|
145
|
+
}
|
|
146
|
+
if (authFlow === 'session' && deployTarget === 'static') {
|
|
147
|
+
ctx.addIssue({ path: ['webAppConfig', 'authFlow'], code: 'custom',
|
|
148
|
+
message: 'Session auth requires server state, incompatible with static hosting' });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (data.mlConfig) {
|
|
152
|
+
const { projectPhase, servingPattern } = data.mlConfig;
|
|
153
|
+
if (projectPhase === 'inference' && servingPattern === 'none') {
|
|
154
|
+
ctx.addIssue({ path: ['mlConfig', 'servingPattern'], code: 'custom',
|
|
155
|
+
message: 'Inference projects must specify a serving pattern' });
|
|
156
|
+
}
|
|
157
|
+
if (projectPhase === 'training' && servingPattern !== 'none') {
|
|
158
|
+
ctx.addIssue({ path: ['mlConfig', 'servingPattern'], code: 'custom',
|
|
159
|
+
message: 'Training-only projects should not have a serving pattern' });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (data.browserExtensionConfig) {
|
|
163
|
+
const { uiSurfaces, hasContentScript, hasBackgroundWorker } = data.browserExtensionConfig;
|
|
164
|
+
if ((!uiSurfaces || uiSurfaces.length === 0) && !hasContentScript && !hasBackgroundWorker) {
|
|
165
|
+
ctx.addIssue({ path: ['browserExtensionConfig'], code: 'custom',
|
|
166
|
+
message: 'Extension must have at least one UI surface, content script, or background worker' });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
export const ConfigSchema = z.object({
|
|
171
|
+
version: z.literal(2),
|
|
172
|
+
methodology: z.enum(['deep', 'mvp', 'custom']),
|
|
173
|
+
custom: CustomSchema.optional(),
|
|
174
|
+
platforms: z.array(z.enum(['claude-code', 'codex', 'gemini'])).min(1),
|
|
175
|
+
project: ProjectSchema.optional(),
|
|
176
|
+
}).passthrough(); // allow unknown fields at top level per ADR-033
|
|
177
|
+
//# sourceMappingURL=schema-v3.9.2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-v3.9.2.js","sourceRoot":"","sources":["../../../src/project/__frozen-schemas__/schema-v3.9.2.ts"],"names":[],"mappings":"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"}
|
package/dist/project/adopt.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import type { ScaffoldError, ScaffoldWarning, ProjectType, GameConfig } from '../types/index.js';
|
|
1
|
+
import type { ScaffoldError, ScaffoldWarning, ProjectType, GameConfig, DetectedConfig } from '../types/index.js';
|
|
2
|
+
import type { Confidence, DetectionEvidence } from './detectors/types.js';
|
|
3
|
+
import type { PartialConfigOverrides } from '../cli/init-flag-families.js';
|
|
4
|
+
declare const TYPE_KEY: Record<ProjectType, string>;
|
|
5
|
+
export { TYPE_KEY };
|
|
2
6
|
export type AdaptationStrategy = 'update-mode' | 'skip-recommended' | 'context-only' | 'full-run';
|
|
3
7
|
export interface ArtifactMatch {
|
|
4
8
|
artifactPath: string;
|
|
@@ -15,7 +19,11 @@ export interface AdoptionResult {
|
|
|
15
19
|
errors: ScaffoldError[];
|
|
16
20
|
warnings: ScaffoldWarning[];
|
|
17
21
|
projectType?: ProjectType;
|
|
22
|
+
/** @deprecated Use detectedConfig instead. Removed in v4.0. */
|
|
18
23
|
gameConfig?: Partial<GameConfig>;
|
|
24
|
+
detectedConfig?: DetectedConfig;
|
|
25
|
+
detectionEvidence?: readonly DetectionEvidence[];
|
|
26
|
+
detectionConfidence?: Confidence;
|
|
19
27
|
}
|
|
20
28
|
/**
|
|
21
29
|
* Scan projectRoot for existing artifacts, match to pipeline steps,
|
|
@@ -26,5 +34,33 @@ export declare function runAdoption(options: {
|
|
|
26
34
|
metaPromptDir: string;
|
|
27
35
|
methodology: string;
|
|
28
36
|
dryRun: boolean;
|
|
29
|
-
|
|
37
|
+
auto?: boolean;
|
|
38
|
+
force?: boolean;
|
|
39
|
+
verbose?: boolean;
|
|
40
|
+
explicitProjectType?: ProjectType;
|
|
41
|
+
flagOverrides?: PartialConfigOverrides;
|
|
42
|
+
}): Promise<AdoptionResult>;
|
|
43
|
+
export interface FieldConflict {
|
|
44
|
+
readonly field: string;
|
|
45
|
+
readonly existing: unknown;
|
|
46
|
+
readonly detected: unknown;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Shallow merge: existing values win on overlap, detected fills gaps.
|
|
50
|
+
* Returns the merged object plus a list of FieldConflict records for any field
|
|
51
|
+
* where detected and existing disagree (caller emits ADOPT_FIELD_CONFLICT warnings).
|
|
52
|
+
*
|
|
53
|
+
* Uses JSON.stringify for value equality so arrays and (future) nested objects
|
|
54
|
+
* are compared by content, not reference.
|
|
55
|
+
*/
|
|
56
|
+
export declare function mergeRawConfig<T extends Record<string, unknown>>(detected: Partial<T>, existing: Record<string, unknown> | undefined): {
|
|
57
|
+
merged: Record<string, unknown>;
|
|
58
|
+
conflicts: FieldConflict[];
|
|
59
|
+
};
|
|
60
|
+
export declare function applyFlagOverrides<T extends Record<string, unknown>>(base: Record<string, unknown>, overrides: Partial<T> | undefined): Record<string, unknown>;
|
|
61
|
+
/**
|
|
62
|
+
* Convert FieldConflict[] into ADOPT_FIELD_CONFLICT warnings for the orchestrator
|
|
63
|
+
* to push onto result.warnings.
|
|
64
|
+
*/
|
|
65
|
+
export declare function emitFieldConflictWarnings(conflicts: readonly FieldConflict[], configKey: string): import('../types/index.js').ScaffoldWarning[];
|
|
30
66
|
//# sourceMappingURL=adopt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adopt.d.ts","sourceRoot":"","sources":["../../src/project/adopt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"adopt.d.ts","sourceRoot":"","sources":["../../src/project/adopt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adopt.error-messages.test.d.ts","sourceRoot":"","sources":["../../src/project/adopt.error-messages.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Hoisted mocks
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
vi.mock('./detector.js', () => ({
|
|
9
|
+
detectProjectMode: vi.fn(() => ({
|
|
10
|
+
mode: 'brownfield',
|
|
11
|
+
signals: [],
|
|
12
|
+
methodologySuggestion: 'deep',
|
|
13
|
+
sourceFileCount: 10,
|
|
14
|
+
})),
|
|
15
|
+
}));
|
|
16
|
+
vi.mock('../core/assembly/meta-prompt-loader.js', () => ({
|
|
17
|
+
discoverMetaPrompts: vi.fn(() => new Map()),
|
|
18
|
+
}));
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Imports (after mocks)
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
import { runAdoption } from './adopt.js';
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Helpers
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
function makeTempDir() {
|
|
27
|
+
return fs.mkdtempSync(path.join(os.tmpdir(), 'scaffold-err-msg-'));
|
|
28
|
+
}
|
|
29
|
+
function seedConfig(dir, content) {
|
|
30
|
+
const scaffoldDir = path.join(dir, '.scaffold');
|
|
31
|
+
fs.mkdirSync(scaffoldDir, { recursive: true });
|
|
32
|
+
fs.writeFileSync(path.join(scaffoldDir, 'config.yml'), content, 'utf8');
|
|
33
|
+
}
|
|
34
|
+
function baseOpts(dir) {
|
|
35
|
+
return {
|
|
36
|
+
projectRoot: dir,
|
|
37
|
+
metaPromptDir: path.join(dir, 'content', 'pipeline'),
|
|
38
|
+
methodology: 'deep',
|
|
39
|
+
dryRun: true,
|
|
40
|
+
auto: true,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Error message snapshot tests
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
describe('adoption error messages', () => {
|
|
47
|
+
let tmpDir;
|
|
48
|
+
beforeEach(() => {
|
|
49
|
+
tmpDir = makeTempDir();
|
|
50
|
+
});
|
|
51
|
+
afterEach(() => {
|
|
52
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
53
|
+
vi.restoreAllMocks();
|
|
54
|
+
});
|
|
55
|
+
it('ADOPT_TYPE_CONFLICT includes both types and recovery hint', async () => {
|
|
56
|
+
seedConfig(tmpDir, 'version: 2\nproject:\n projectType: game\n');
|
|
57
|
+
const result = await runAdoption({
|
|
58
|
+
...baseOpts(tmpDir),
|
|
59
|
+
explicitProjectType: 'web-app',
|
|
60
|
+
});
|
|
61
|
+
expect(result.errors).toHaveLength(1);
|
|
62
|
+
const err = result.errors[0];
|
|
63
|
+
expect(err.code).toBe('ADOPT_TYPE_CONFLICT');
|
|
64
|
+
expect(err.message).toMatch(/game/);
|
|
65
|
+
expect(err.message).toMatch(/web-app/);
|
|
66
|
+
expect(err.message).toMatch(/--force/);
|
|
67
|
+
expect(err.exitCode).toBe(6); // ExitCode.Ambiguous
|
|
68
|
+
});
|
|
69
|
+
it('ADOPT_DETECTION_INCONCLUSIVE includes existing type', async () => {
|
|
70
|
+
seedConfig(tmpDir, 'version: 2\nproject:\n projectType: backend\n');
|
|
71
|
+
const result = await runAdoption({ ...baseOpts(tmpDir) });
|
|
72
|
+
const warning = result.warnings.find(w => w.code === 'ADOPT_DETECTION_INCONCLUSIVE');
|
|
73
|
+
expect(warning).toBeDefined();
|
|
74
|
+
expect(warning.message).toMatch(/backend/);
|
|
75
|
+
expect(warning.message).toMatch(/--force/);
|
|
76
|
+
expect(warning.message).toMatch(/--project-type/);
|
|
77
|
+
});
|
|
78
|
+
it('ADOPT_MISSING_REQUIRED_FIELDS includes type and missing fields', async () => {
|
|
79
|
+
// web-app requires renderingStrategy (no default) — passing explicit
|
|
80
|
+
// project-type with no flags triggers Zod validation failure
|
|
81
|
+
const result = await runAdoption({
|
|
82
|
+
...baseOpts(tmpDir),
|
|
83
|
+
explicitProjectType: 'web-app',
|
|
84
|
+
});
|
|
85
|
+
expect(result.errors).toHaveLength(1);
|
|
86
|
+
const err = result.errors[0];
|
|
87
|
+
expect(err.code).toBe('ADOPT_MISSING_REQUIRED_FIELDS');
|
|
88
|
+
expect(err.message).toMatch(/web-app/);
|
|
89
|
+
expect(err.message).toMatch(/renderingStrategy/);
|
|
90
|
+
expect(err.exitCode).toBe(1); // ExitCode.ValidationError
|
|
91
|
+
});
|
|
92
|
+
it('ADOPT_GAME_CONFIG_DEPRECATED includes removal timeline', async () => {
|
|
93
|
+
const assetsDir = path.join(tmpDir, 'Assets');
|
|
94
|
+
fs.mkdirSync(assetsDir, { recursive: true });
|
|
95
|
+
fs.writeFileSync(path.join(assetsDir, 'foo.meta'), '');
|
|
96
|
+
const result = await runAdoption({ ...baseOpts(tmpDir) });
|
|
97
|
+
const warning = result.warnings.find(w => w.code === 'ADOPT_GAME_CONFIG_DEPRECATED');
|
|
98
|
+
expect(warning).toBeDefined();
|
|
99
|
+
expect(warning.message).toMatch(/gameConfig/);
|
|
100
|
+
expect(warning.message).toMatch(/detectedConfig/);
|
|
101
|
+
expect(warning.message).toMatch(/v4\.0/);
|
|
102
|
+
});
|
|
103
|
+
it('CONFIG_PARSE_ERROR includes file path', async () => {
|
|
104
|
+
seedConfig(tmpDir, '{unclosed');
|
|
105
|
+
const result = await runAdoption({ ...baseOpts(tmpDir) });
|
|
106
|
+
expect(result.errors).toHaveLength(1);
|
|
107
|
+
const err = result.errors[0];
|
|
108
|
+
expect(err.code).toBe('CONFIG_PARSE_ERROR');
|
|
109
|
+
expect(err.context?.file).toContain('config.yml');
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
//# sourceMappingURL=adopt.error-messages.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adopt.error-messages.test.js","sourceRoot":"","sources":["../../src/project/adopt.error-messages.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adopt.forward-compat.test.d.ts","sourceRoot":"","sources":["../../src/project/adopt.forward-compat.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// src/project/adopt.forward-compat.test.ts
|
|
2
|
+
import { describe, it, expect } from 'vitest';
|
|
3
|
+
import { ConfigSchema as V39Schema } from './__frozen-schemas__/schema-v3.9.2.js';
|
|
4
|
+
describe('forward compat: v3.10 output parses under frozen v3.9.2 schema', () => {
|
|
5
|
+
// PRECONDITION: v3.9.2's ProjectSchema must use .passthrough() for unknown fields
|
|
6
|
+
// (verified by spec ADR-033). If the schema is .strict(), these tests will fail
|
|
7
|
+
// and the dual-emit guarantee needs revisiting. The first test below pins this.
|
|
8
|
+
it('PRECONDITION: v3.9.2 ProjectSchema accepts unknown fields (passthrough)', () => {
|
|
9
|
+
const minimal = {
|
|
10
|
+
version: 2,
|
|
11
|
+
methodology: 'deep',
|
|
12
|
+
platforms: ['claude-code'],
|
|
13
|
+
project: {
|
|
14
|
+
projectType: 'web-app',
|
|
15
|
+
// unknown field that v3.9.2 doesn't know about
|
|
16
|
+
someUnknownField: 'allowed by passthrough',
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
const result = V39Schema.safeParse(minimal);
|
|
20
|
+
if (!result.success) {
|
|
21
|
+
console.error('PRECONDITION FAILED:', result.error.errors);
|
|
22
|
+
console.error('v3.9.2 ProjectSchema is .strict(), not .passthrough().');
|
|
23
|
+
console.error('Forward-compat dual-emit is broken — escalate to user before proceeding.');
|
|
24
|
+
}
|
|
25
|
+
expect(result.success).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
it('a v3.10 game config (with gameConfig dual-emit) parses under v3.9.2', () => {
|
|
28
|
+
const v310Output = {
|
|
29
|
+
version: 2,
|
|
30
|
+
methodology: 'deep',
|
|
31
|
+
platforms: ['claude-code'],
|
|
32
|
+
project: {
|
|
33
|
+
projectType: 'game',
|
|
34
|
+
gameConfig: { engine: 'unity' }, // v3.9.2 knows this
|
|
35
|
+
detectedConfig: { type: 'game', config: { engine: 'unity' } }, // v3.9.2 doesn't, must passthrough
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
const result = V39Schema.safeParse(v310Output);
|
|
39
|
+
expect(result.success).toBe(true);
|
|
40
|
+
});
|
|
41
|
+
it('a v3.10 web-app config parses under v3.9.2', () => {
|
|
42
|
+
const v310Output = {
|
|
43
|
+
version: 2,
|
|
44
|
+
methodology: 'deep',
|
|
45
|
+
platforms: ['claude-code'],
|
|
46
|
+
project: {
|
|
47
|
+
projectType: 'web-app',
|
|
48
|
+
webAppConfig: { renderingStrategy: 'ssr' }, // v3.9.2 knows this from R1
|
|
49
|
+
detectedConfig: { type: 'web-app', config: { renderingStrategy: 'ssr' } },
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
const result = V39Schema.safeParse(v310Output);
|
|
53
|
+
expect(result.success).toBe(true);
|
|
54
|
+
});
|
|
55
|
+
it('unknown top-level fields like detectionConfidence pass through (ADR-033)', () => {
|
|
56
|
+
const v310Output = {
|
|
57
|
+
version: 2,
|
|
58
|
+
methodology: 'deep',
|
|
59
|
+
platforms: ['claude-code'],
|
|
60
|
+
project: {
|
|
61
|
+
projectType: 'web-app',
|
|
62
|
+
webAppConfig: { renderingStrategy: 'ssr' },
|
|
63
|
+
detectionConfidence: 'high',
|
|
64
|
+
detectionEvidence: [],
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
const result = V39Schema.safeParse(v310Output);
|
|
68
|
+
expect(result.success).toBe(true);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=adopt.forward-compat.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adopt.forward-compat.test.js","sourceRoot":"","sources":["../../src/project/adopt.forward-compat.test.ts"],"names":[],"mappings":"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"}
|