@wix/web50-cli 0.1.1 → 0.1.2

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.
Files changed (100) hide show
  1. package/bin/web5.js +1 -2
  2. package/dist/cjs/auth/deviceFlow.js +90 -17
  3. package/dist/cjs/auth/deviceFlow.js.map +1 -1
  4. package/dist/cjs/auth/index.js +40 -10
  5. package/dist/cjs/auth/index.js.map +1 -1
  6. package/dist/cjs/cli.js +3 -3
  7. package/dist/cjs/cli.js.map +1 -1
  8. package/dist/cjs/commands/bundle.js +12 -4
  9. package/dist/cjs/commands/bundle.js.map +1 -1
  10. package/dist/cjs/commands/conversation.js.map +1 -1
  11. package/dist/cjs/commands/conversationWizard.js +3 -1
  12. package/dist/cjs/commands/conversationWizard.js.map +1 -1
  13. package/dist/cjs/commands/deploy.js +55 -10
  14. package/dist/cjs/commands/deploy.js.map +1 -1
  15. package/dist/cjs/commands/ecom.js +239 -0
  16. package/dist/cjs/commands/ecom.js.map +1 -0
  17. package/dist/cjs/commands/embed.js.map +1 -1
  18. package/dist/cjs/commands/init.js +34 -3
  19. package/dist/cjs/commands/init.js.map +1 -1
  20. package/dist/cjs/commands/instructions.js +147 -51
  21. package/dist/cjs/commands/instructions.js.map +1 -1
  22. package/dist/cjs/commands/login.js +8 -4
  23. package/dist/cjs/commands/login.js.map +1 -1
  24. package/dist/cjs/commands/serve.js.map +1 -1
  25. package/dist/cjs/commands/validate.js +368 -16
  26. package/dist/cjs/commands/validate.js.map +1 -1
  27. package/dist/cjs/commands/whoami.js.map +1 -1
  28. package/dist/cjs/templates/aiInstructionsSchema.js +5 -1
  29. package/dist/cjs/templates/aiInstructionsSchema.js.map +1 -1
  30. package/dist/cjs/templates/cmsMappingSchema.js +132 -0
  31. package/dist/cjs/templates/cmsMappingSchema.js.map +1 -0
  32. package/dist/cjs/utils/project.js +13 -0
  33. package/dist/cjs/utils/project.js.map +1 -1
  34. package/dist/cjs/utils/wixApi.js +3 -1
  35. package/dist/cjs/utils/wixApi.js.map +1 -1
  36. package/dist/esm/auth/deviceFlow.js +89 -17
  37. package/dist/esm/auth/deviceFlow.js.map +1 -1
  38. package/dist/esm/auth/index.js +40 -11
  39. package/dist/esm/auth/index.js.map +1 -1
  40. package/dist/esm/cli.js +3 -3
  41. package/dist/esm/cli.js.map +1 -1
  42. package/dist/esm/commands/bundle.js +12 -4
  43. package/dist/esm/commands/bundle.js.map +1 -1
  44. package/dist/esm/commands/conversation.js.map +1 -1
  45. package/dist/esm/commands/conversationWizard.js +3 -1
  46. package/dist/esm/commands/conversationWizard.js.map +1 -1
  47. package/dist/esm/commands/deploy.js +55 -10
  48. package/dist/esm/commands/deploy.js.map +1 -1
  49. package/dist/esm/commands/ecom.js +234 -0
  50. package/dist/esm/commands/ecom.js.map +1 -0
  51. package/dist/esm/commands/embed.js.map +1 -1
  52. package/dist/esm/commands/init.js +34 -3
  53. package/dist/esm/commands/init.js.map +1 -1
  54. package/dist/esm/commands/instructions.js +152 -53
  55. package/dist/esm/commands/instructions.js.map +1 -1
  56. package/dist/esm/commands/login.js +8 -4
  57. package/dist/esm/commands/login.js.map +1 -1
  58. package/dist/esm/commands/serve.js.map +1 -1
  59. package/dist/esm/commands/validate.js +373 -19
  60. package/dist/esm/commands/validate.js.map +1 -1
  61. package/dist/esm/commands/whoami.js.map +1 -1
  62. package/dist/esm/templates/aiInstructionsSchema.js +5 -1
  63. package/dist/esm/templates/aiInstructionsSchema.js.map +1 -1
  64. package/dist/esm/templates/cmsMappingSchema.js +128 -0
  65. package/dist/esm/templates/cmsMappingSchema.js.map +1 -0
  66. package/dist/esm/utils/project.js +15 -0
  67. package/dist/esm/utils/project.js.map +1 -1
  68. package/dist/esm/utils/wixApi.js +4 -2
  69. package/dist/esm/utils/wixApi.js.map +1 -1
  70. package/dist/types/auth/deviceFlow.d.ts +1 -1
  71. package/dist/types/auth/deviceFlow.d.ts.map +1 -1
  72. package/dist/types/auth/index.d.ts +2 -1
  73. package/dist/types/auth/index.d.ts.map +1 -1
  74. package/dist/types/commands/bundle.d.ts.map +1 -1
  75. package/dist/types/commands/conversation.d.ts.map +1 -1
  76. package/dist/types/commands/conversationWizard.d.ts.map +1 -1
  77. package/dist/types/commands/deploy.d.ts.map +1 -1
  78. package/dist/types/commands/ecom.d.ts +3 -0
  79. package/dist/types/commands/ecom.d.ts.map +1 -0
  80. package/dist/types/commands/embed.d.ts.map +1 -1
  81. package/dist/types/commands/init.d.ts.map +1 -1
  82. package/dist/types/commands/instructions.d.ts.map +1 -1
  83. package/dist/types/commands/login.d.ts.map +1 -1
  84. package/dist/types/commands/serve.d.ts.map +1 -1
  85. package/dist/types/commands/validate.d.ts +4 -2
  86. package/dist/types/commands/validate.d.ts.map +1 -1
  87. package/dist/types/commands/whoami.d.ts.map +1 -1
  88. package/dist/types/templates/aiInstructionsSchema.d.ts.map +1 -1
  89. package/dist/types/templates/cmsMappingSchema.d.ts +2 -0
  90. package/dist/types/templates/cmsMappingSchema.d.ts.map +1 -0
  91. package/dist/types/utils/project.d.ts +2 -0
  92. package/dist/types/utils/project.d.ts.map +1 -1
  93. package/dist/types/utils/wixApi.d.ts.map +1 -1
  94. package/package.json +2 -2
  95. package/dist/cjs/commands/getClientId.js +0 -60
  96. package/dist/cjs/commands/getClientId.js.map +0 -1
  97. package/dist/esm/commands/getClientId.js +0 -56
  98. package/dist/esm/commands/getClientId.js.map +0 -1
  99. package/dist/types/commands/getClientId.d.ts +0 -3
  100. package/dist/types/commands/getClientId.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["Command","Ajv","load","yamlLoad","readFileSync","existsSync","readdirSync","watch","fsWatch","path","chalk","error","info","cmsSchemaSchemaTemplate","aiInstructionsSchemaTemplate","actionYamlSchemaTemplate","SCHEMAS","findProjectRoot","startDir","current","parent","dirname","join","tryParseYaml","filePath","data","e","err","Error","message","String","readText","kebabToCamel","s","replace","_","c","toUpperCase","camelToSnake","toLowerCase","formatAjvError","hints","loc","instancePath","keyword","missing","params","missingProperty","hint","fix","expected","type","field","min","limit","extra","additionalProperty","AI_INSTRUCTIONS_HINTS","rules","instructions","semantics","tone","ACTION_YAML_HINTS","name","buildAiInstructionsDomain","root","fileName","ajv","allErrors","strict","schema","parsed","fileExists","yamlOk","checks","label","run","ok","errors","result","undefined","validate","compile","map","buildCmsSchemaDomain","buildActionsDomain","actionsDir","registryPath","indexPath","yamlFiles","filter","f","endsWith","length","actionSchema","yamlFile","yamlPath","yamlData","schemaOk","actionName","basename","extname","push","getNames","camel","handler","snake","handlerFile","handlerPath","content","includes","declaredParams","Set","p","param","match","usedParams","split","trim","startsWith","undeclared","has","printDomain","domain","results","verbose","failed","r","domainOk","console","log","green","process","stderr","write","red","e_","collectDomainJson","every","_ref","buildScriptsDomain","pkgPath","pkg","JSON","parse","_pkg$scripts","scripts","bundle","_pkg$scripts2","build","selectDomains","all","ai","cms","actions","d","runDomains","domains","format","hasErrors","jsonResults","check","jr","runValidation","startWatch","watchDirs","debounce","trigger","clearTimeout","setTimeout","clear","Date","toLocaleTimeString","dir","recursive","relative","validateCommand","description","option","action","opts","Boolean","domainFilter","project","resolve","cwd","exit","stringify","stdout","isTTY"],"sources":["../../../src/commands/validate.ts"],"sourcesContent":["import { Command } from 'commander';\nimport Ajv from 'ajv/dist/2020';\nimport type { ErrorObject } from 'ajv';\nimport { load as yamlLoad } from 'js-yaml';\nimport { readFileSync, existsSync, readdirSync, watch as fsWatch } from 'fs';\nimport * as path from 'path';\nimport chalk from 'chalk';\nimport { error, info } from '../utils/print';\n\ntype OutputFormat = 'text' | 'json';\ntype DomainFilter = 'ai' | 'cms' | 'actions' | 'scripts';\nimport { cmsSchemaSchemaTemplate } from '../templates/cmsSchemaSchema';\nimport { aiInstructionsSchemaTemplate } from '../templates/aiInstructionsSchema';\nimport { actionYamlSchemaTemplate } from '../templates/actionYamlSchema';\n\n// ── Bundled schemas (never exposed to user's project) ────────────────────────\n\nconst SCHEMAS: Record<string, object> = {\n 'cms-schema.yaml': yamlLoad(cmsSchemaSchemaTemplate()) as object,\n 'prompt-instructions.yaml': yamlLoad(\n aiInstructionsSchemaTemplate(),\n ) as object,\n 'action.yaml': yamlLoad(actionYamlSchemaTemplate()) as object,\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface CheckError {\n message: string;\n fix?: string;\n}\n\ninterface CheckResult {\n ok: boolean;\n errors: CheckError[];\n}\n\ninterface Check {\n label: string;\n run: () => CheckResult;\n}\n\ninterface Domain {\n name: string;\n checks: Check[];\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction findProjectRoot(startDir: string): string | null {\n let current = startDir;\n let parent = path.dirname(current);\n while (current !== parent) {\n if (existsSync(path.join(current, 'web5.config.json'))) {\n return current;\n }\n current = parent;\n parent = path.dirname(current);\n }\n if (existsSync(path.join(current, 'web5.config.json'))) {\n return current;\n }\n return null;\n}\n\nfunction tryParseYaml(\n filePath: string,\n): { data: unknown; err?: undefined } | { data?: undefined; err: string } {\n try {\n return { data: yamlLoad(readFileSync(filePath, 'utf8')) };\n } catch (e) {\n return { err: e instanceof Error ? e.message : String(e) };\n }\n}\n\nfunction readText(filePath: string): string {\n return readFileSync(filePath, 'utf8');\n}\n\n/** kebab-case → camelCase e.g. book-demo → bookDemo */\nfunction kebabToCamel(s: string): string {\n return s.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase());\n}\n\n/** camelCase → snake_case e.g. bookDemo → book_demo */\nfunction camelToSnake(s: string): string {\n return s.replace(/([A-Z])/g, '_$1').toLowerCase();\n}\n\n// ── AJV error formatter ───────────────────────────────────────────────────────\n\n// hints: field-name → indented YAML example of the full expected structure\nfunction formatAjvError(\n e: ErrorObject,\n hints: Record<string, string> = {},\n): CheckError {\n const loc = e.instancePath || '(root)';\n\n if (e.keyword === 'required') {\n const missing = (e.params as { missingProperty: string }).missingProperty;\n const parent =\n loc === '(root)' ? 'top level' : `'${loc.replace(/^\\//, '')}'`;\n const hint = hints[missing];\n return {\n message: `[${loc}] missing required property '${missing}'`,\n fix: hint\n ? `Add '${missing}:' under ${parent}. Expected structure:\\n${hint}`\n : `Add '${missing}:' under ${parent}.`,\n };\n }\n\n if (e.keyword === 'type') {\n const expected = (e.params as { type: string }).type;\n const field = loc.replace(/^\\//, '');\n const hint = hints[field];\n return {\n message: `[${loc}] must be ${expected}`,\n fix: hint\n ? `Replace the current value of '${field}' with:\\n${hint}`\n : `Change '${field}' to a ${expected}.`,\n };\n }\n\n if (e.keyword === 'minItems') {\n const min = (e.params as { limit: number }).limit;\n const field = loc.replace(/^\\//, '');\n const hint = hints[field];\n return {\n message: `[${loc}] must have at least ${min} item${min === 1 ? '' : 's'}`,\n fix: hint\n ? `Add at least ${min} entry under '${field}':\\n${hint}`\n : `Add at least ${min} entry under '${field}'.`,\n };\n }\n\n if (e.keyword === 'additionalProperties') {\n const extra = (e.params as { additionalProperty: string })\n .additionalProperty;\n return {\n message: `[${loc}] unknown property '${extra}'`,\n fix: `Remove '${extra}' — it is not a recognised field.`,\n };\n }\n\n return { message: `[${loc}] ${e.message ?? e.keyword}` };\n}\n\n// ── Structural hints ──────────────────────────────────────────────────────────\n\nconst AI_INSTRUCTIONS_HINTS: Record<string, string> = {\n rules: [\n ' rules:',\n \" - Always respond in the language of the user's prompt\",\n ' - Do not hallucinate or fabricate information',\n ' - Refuse requests that are harmful, illegal, or unethical',\n ].join('\\n'),\n instructions: [\n ' instructions: >',\n ' Structure prompts clearly and specifically. Provide relevant',\n ' context and set output expectations (format, length, style).',\n ].join('\\n'),\n semantics: [\n ' semantics:',\n \" PROX: The user's natural language request or structured prompt\",\n ' VERIFY: A response aligned with the detected intent',\n ' SUB-ACTION: Background information or metadata alongside the prompt',\n ].join('\\n'),\n tone: [\n ' tone:',\n ' style: concise',\n ' voice: \"clear and direct — avoid filler phrases\"',\n ].join('\\n'),\n};\n\nconst ACTION_YAML_HINTS: Record<string, string> = {\n name: [' name: my-action'].join('\\n'),\n params: [\n ' params:',\n ' - param: exampleParam',\n ' values:',\n ' - value1',\n ' - value2',\n ' - param: optionalParam',\n ' optional: true',\n ' values:',\n ' - valueA',\n ].join('\\n'),\n};\n\n// ── Domain builders ───────────────────────────────────────────────────────────\n\nfunction buildAiInstructionsDomain(root: string): Domain {\n const filePath = path.join(\n root,\n 'src',\n 'configuration',\n 'ai',\n 'prompt-instructions.yaml',\n );\n const fileName = 'prompt-instructions.yaml';\n const ajv = new Ajv({ allErrors: true, strict: false });\n const schema = SCHEMAS[fileName];\n\n let parsed: unknown;\n let fileExists = false;\n let yamlOk = false;\n\n return {\n name: 'AI Instructions',\n checks: [\n {\n label: `${fileName} — file exists`,\n run(): CheckResult {\n fileExists = existsSync(filePath);\n if (fileExists) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `File not found: ${filePath}`,\n fix: `Create 'src/configuration/ai/prompt-instructions.yaml' in your project.`,\n },\n ],\n };\n },\n },\n {\n label: `${fileName} — valid YAML`,\n run(): CheckResult {\n if (!fileExists) {\n return {\n ok: false,\n errors: [{ message: 'skipped — file does not exist' }],\n };\n }\n const result = tryParseYaml(filePath);\n if (result.err !== undefined) {\n return {\n ok: false,\n errors: [\n {\n message: result.err,\n fix: 'Fix the YAML syntax error above.',\n },\n ],\n };\n }\n parsed = result.data;\n yamlOk = true;\n return { ok: true, errors: [] };\n },\n },\n {\n label: `${fileName} — schema valid`,\n run(): CheckResult {\n if (!yamlOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML parse failed' }],\n };\n }\n const validate = ajv.compile(schema);\n if (validate(parsed)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: (validate.errors ?? []).map((e) =>\n formatAjvError(e, AI_INSTRUCTIONS_HINTS),\n ),\n };\n },\n },\n ],\n };\n}\n\nfunction buildCmsSchemaDomain(root: string): Domain {\n const filePath = path.join(\n root,\n 'src',\n 'configuration',\n 'cms',\n 'cms-schema.yaml',\n );\n const fileName = 'cms-schema.yaml';\n const ajv = new Ajv({ allErrors: true, strict: false });\n const schema = SCHEMAS[fileName];\n\n let parsed: unknown;\n let fileExists = false;\n let yamlOk = false;\n\n return {\n name: 'CMS Schema',\n checks: [\n {\n label: `${fileName} — file exists`,\n run(): CheckResult {\n fileExists = existsSync(filePath);\n if (fileExists) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `File not found: ${filePath}`,\n fix: `Create 'src/configuration/cms/cms-schema.yaml' in your project.`,\n },\n ],\n };\n },\n },\n {\n label: `${fileName} — valid YAML`,\n run(): CheckResult {\n if (!fileExists) {\n return {\n ok: false,\n errors: [{ message: 'skipped — file does not exist' }],\n };\n }\n const result = tryParseYaml(filePath);\n if (result.err !== undefined) {\n return {\n ok: false,\n errors: [\n {\n message: result.err,\n fix: 'Fix the YAML syntax error above.',\n },\n ],\n };\n }\n parsed = result.data;\n yamlOk = true;\n return { ok: true, errors: [] };\n },\n },\n {\n label: `${fileName} — schema valid`,\n run(): CheckResult {\n if (!yamlOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML parse failed' }],\n };\n }\n const validate = ajv.compile(schema);\n if (validate(parsed)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: (validate.errors ?? []).map((e) => formatAjvError(e)),\n };\n },\n },\n ],\n };\n}\n\nfunction buildActionsDomain(root: string): Domain {\n const actionsDir = path.join(root, 'src', 'actions');\n const registryPath = path.join(root, 'src', 'createRegistry.ts');\n const indexPath = path.join(actionsDir, 'index.ts');\n\n // If the actions directory is missing, report it and stop\n if (!existsSync(actionsDir)) {\n return {\n name: 'Actions',\n checks: [\n {\n label: 'src/actions/ — directory exists',\n run: () => ({\n ok: false,\n errors: [\n {\n message: 'src/actions/ directory not found',\n fix: 'Create the src/actions/ directory and add at least one action YAML + handler.',\n },\n ],\n }),\n },\n ],\n };\n }\n\n const yamlFiles = readdirSync(actionsDir).filter(\n (f) => f.endsWith('.yaml') || f.endsWith('.yml'),\n );\n\n if (yamlFiles.length === 0) {\n return {\n name: 'Actions',\n checks: [\n {\n label: 'src/actions/ — at least one action defined',\n run: () => ({\n ok: false,\n errors: [\n {\n message: 'No action YAML files found in src/actions/',\n fix: 'Add an action YAML file, e.g. src/actions/my-action.yaml',\n },\n ],\n }),\n },\n ],\n };\n }\n\n const ajv = new Ajv({ allErrors: true, strict: false });\n const actionSchema = SCHEMAS['action.yaml'];\n const checks: Check[] = [];\n\n for (const yamlFile of yamlFiles) {\n const yamlPath = path.join(actionsDir, yamlFile);\n\n // Mutable state shared across this action's checks (captured by closures)\n let yamlData: Record<string, unknown> = {};\n let yamlOk = false;\n let schemaOk = false;\n let actionName = path.basename(yamlFile, path.extname(yamlFile));\n\n // ── Check 1: valid YAML ────────────────────────────────────────────────\n checks.push({\n label: `${yamlFile} — valid YAML`,\n run(): CheckResult {\n const result = tryParseYaml(yamlPath);\n if (result.err !== undefined) {\n return {\n ok: false,\n errors: [\n { message: result.err, fix: 'Fix the YAML syntax error.' },\n ],\n };\n }\n yamlData = result.data as Record<string, unknown>;\n yamlOk = true;\n if (typeof yamlData.name === 'string') {\n actionName = yamlData.name;\n }\n return { ok: true, errors: [] };\n },\n });\n\n // ── Check 2: schema valid ─────────────────────────────────────────────\n checks.push({\n label: `${yamlFile} — schema valid`,\n run(): CheckResult {\n if (!yamlOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML parse failed' }],\n };\n }\n const validate = ajv.compile(actionSchema);\n if (validate(yamlData)) {\n schemaOk = true;\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: (validate.errors ?? []).map((e) =>\n formatAjvError(e, ACTION_YAML_HINTS),\n ),\n };\n },\n });\n\n // Derive names — evaluated lazily inside each check closure after\n // yamlOk sets actionName correctly\n const getNames = () => {\n const camel = kebabToCamel(actionName);\n return {\n camel,\n handler: `${camel}Action`,\n snake: camelToSnake(camel),\n handlerFile: `${camel}Action.ts`,\n handlerPath: path.join(actionsDir, `${camel}Action.ts`),\n };\n };\n\n // ── Check 3: handler file exists ──────────────────────────────────────\n checks.push({\n label: `${yamlFile} — handler file exists`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler, handlerFile, handlerPath } = getNames();\n if (existsSync(handlerPath)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `Handler not found: src/actions/${handlerFile}`,\n fix: `Create src/actions/${handlerFile} exporting 'export const ${handler}: ActionHandler = ...'`,\n },\n ],\n };\n },\n });\n\n // ── Check 4: handler exports correct name ─────────────────────────────\n checks.push({\n label: `${yamlFile} — handler exports correct name`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler, handlerFile, handlerPath } = getNames();\n if (!existsSync(handlerPath)) {\n return {\n ok: false,\n errors: [{ message: 'skipped — handler file missing' }],\n };\n }\n const content = readText(handlerPath);\n if (content.includes(`export const ${handler}`)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `'export const ${handler}' not found in ${handlerFile}`,\n fix: `Rename the export to 'export const ${handler}: ActionHandler = ...'`,\n },\n ],\n };\n },\n });\n\n // ── Check 5: handler params ⊆ YAML params ────────────────────────────\n checks.push({\n label: `${yamlFile} — handler params declared in YAML`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handlerPath } = getNames();\n if (!existsSync(handlerPath)) {\n return {\n ok: false,\n errors: [{ message: 'skipped — handler file missing' }],\n };\n }\n\n const declaredParams = new Set(\n ((yamlData.params as { param: string }[]) ?? []).map((p) => p.param),\n );\n\n const content = readText(handlerPath);\n const match = content.match(/const\\s*\\{([^}]+)\\}\\s*=\\s*params/);\n if (!match) {\n return { ok: true, errors: [] }; // No destructure — nothing to check\n }\n\n const usedParams = match[1]\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0 && !s.startsWith('...'))\n .map((s) => s.split(':')[0].trim()); // handle aliased: { foo: bar }\n\n const undeclared = usedParams.filter((p) => !declaredParams.has(p));\n if (undeclared.length === 0) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: undeclared.map((p) => ({\n message: `Handler uses param '${p}' not declared in ${yamlFile}`,\n fix: `Add to ${yamlFile}:\\n params:\\n - param: ${p}\\n values: [...]`,\n })),\n };\n },\n });\n\n // ── Check 6: index.ts exports handler ─────────────────────────────────\n checks.push({\n label: `${yamlFile} — exported from src/actions/index.ts`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler } = getNames();\n if (!existsSync(indexPath)) {\n return {\n ok: false,\n errors: [\n {\n message: 'src/actions/index.ts not found',\n fix: `Create src/actions/index.ts and add:\\nexport { ${handler} } from './${handler}';`,\n },\n ],\n };\n }\n const content = readText(indexPath);\n if (content.includes(handler)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `'${handler}' not found in src/actions/index.ts`,\n fix: `Add: export { ${handler} } from './${handler}';`,\n },\n ],\n };\n },\n });\n\n // ── Check 7: createRegistry.ts imports handler ────────────────────────\n checks.push({\n label: `${yamlFile} — imported in src/createRegistry.ts`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler, handlerFile } = getNames();\n if (!existsSync(registryPath)) {\n return {\n ok: false,\n errors: [{ message: 'src/createRegistry.ts not found' }],\n };\n }\n const content = readText(registryPath);\n if (content.includes(handler)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `'${handler}' not imported in src/createRegistry.ts`,\n fix: `Add: import { ${handler} } from './actions/${handlerFile.replace(\n '.ts',\n '',\n )}';`,\n },\n ],\n };\n },\n });\n\n // ── Check 8: createRegistry.ts registers the action ──────────────────\n checks.push({\n label: `${yamlFile} — registered in src/createRegistry.ts`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler, snake } = getNames();\n if (!existsSync(registryPath)) {\n return {\n ok: false,\n errors: [{ message: 'src/createRegistry.ts not found' }],\n };\n }\n const content = readText(registryPath);\n if (\n content.includes(`registerAction('${snake}'`) ||\n content.includes(`registerAction(\"${snake}\"`)\n ) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `'.registerAction('${snake}', ...)' not found in src/createRegistry.ts`,\n fix: `Add to the registry chain:\\n .registerAction('${snake}', ${handler})`,\n },\n ],\n };\n },\n });\n }\n\n return { name: 'Actions', checks };\n}\n\n// ── Rendering ─────────────────────────────────────────────────────────────────\n\ninterface CheckResultWithLabel {\n label: string;\n result: CheckResult;\n}\n\nfunction printDomain(\n domain: Domain,\n results: CheckResultWithLabel[],\n verbose: boolean,\n): boolean {\n const failed = results.filter((r) => !r.result.ok);\n const domainOk = failed.length === 0;\n\n if (verbose) {\n console.log(domain.name);\n for (const { label, result } of results) {\n if (result.ok) {\n console.log(chalk.green(` \\u2714 ${label}`));\n } else {\n process.stderr.write(chalk.red(` \\u2716 ${label}\\n`));\n for (const e_ of result.errors) {\n process.stderr.write(` ${e_.message}\\n`);\n if (e_.fix) {\n process.stderr.write(` Fix: ${e_.fix}\\n`);\n }\n }\n }\n }\n console.log('');\n return domainOk;\n }\n\n // Slim mode\n if (domainOk) {\n console.log(chalk.green(`\\u2714 ${domain.name} — valid`));\n return true;\n }\n\n console.log(domain.name);\n for (const { label, result } of failed) {\n process.stderr.write(chalk.red(` \\u2716 ${label}\\n`));\n for (const e_ of result.errors) {\n process.stderr.write(` ${e_.message}\\n`);\n if (e_.fix) {\n process.stderr.write(` Fix: ${e_.fix}\\n`);\n }\n }\n }\n console.log('');\n return false;\n}\n\n// ── JSON output ───────────────────────────────────────────────────────────────\n\ninterface JsonDomainResult {\n name: string;\n ok: boolean;\n checks: { label: string; ok: boolean; errors: CheckError[] }[];\n}\n\nfunction collectDomainJson(\n domain: Domain,\n results: CheckResultWithLabel[],\n): JsonDomainResult {\n return {\n name: domain.name,\n ok: results.every((r) => r.result.ok),\n checks: results.map(({ label, result }) => ({\n label,\n ok: result.ok,\n errors: result.errors,\n })),\n };\n}\n\n// ── Build scripts domain ──────────────────────────────────────────────────────\n\nfunction buildScriptsDomain(root: string): Domain {\n const pkgPath = path.join(root, 'package.json');\n let pkg: { scripts?: Record<string, string> } = {};\n let fileExists = false;\n\n return {\n name: 'Build Scripts',\n checks: [\n {\n label: 'package.json — file exists',\n run(): CheckResult {\n fileExists = existsSync(pkgPath);\n if (!fileExists) {\n return {\n ok: false,\n errors: [\n {\n message: `File not found: ${pkgPath}`,\n fix: `Create a 'package.json' at the root of your project.`,\n },\n ],\n };\n }\n try {\n pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as typeof pkg;\n } catch (e) {\n fileExists = false;\n return {\n ok: false,\n errors: [\n {\n message: `Failed to parse package.json: ${e instanceof Error ? e.message : String(e)}`,\n fix: `Fix the JSON syntax in your package.json.`,\n },\n ],\n };\n }\n return { ok: true, errors: [] };\n },\n },\n {\n label: 'package.json — bundle script defined',\n run(): CheckResult {\n if (!fileExists) {\n return { ok: false, errors: [{ message: 'skipped — package.json not readable' }] };\n }\n if (typeof pkg.scripts?.bundle === 'string' && pkg.scripts.bundle.length > 0) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `Missing 'bundle' script in package.json`,\n fix: `Add a 'bundle' script to your package.json scripts, e.g.:\\n \"bundle\": \"vite build --config src/vite.cdn.config.ts\"`,\n },\n ],\n };\n },\n },\n {\n label: 'package.json — build script defined',\n run(): CheckResult {\n if (!fileExists) {\n return { ok: false, errors: [{ message: 'skipped — package.json not readable' }] };\n }\n if (typeof pkg.scripts?.build === 'string' && pkg.scripts.build.length > 0) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `Missing 'build' script in package.json`,\n fix: `Add a 'build' script to your package.json scripts, e.g.:\\n \"build\": \"tsc\"`,\n },\n ],\n };\n },\n },\n ],\n };\n}\n\n// ── Domain selection ──────────────────────────────────────────────────────────\n\nfunction selectDomains(root: string, filter?: DomainFilter): Domain[] {\n const all: Domain[] = [\n buildAiInstructionsDomain(root),\n buildCmsSchemaDomain(root),\n buildActionsDomain(root),\n buildScriptsDomain(root),\n ];\n if (!filter) return all;\n const map: Record<DomainFilter, string> = {\n ai: 'AI Instructions',\n cms: 'CMS Schema',\n scripts: 'Build Scripts',\n actions: 'Actions',\n };\n return all.filter((d) => d.name === map[filter]);\n}\n\n// ── Core runner ───────────────────────────────────────────────────────────────\n\nfunction runDomains(\n domains: Domain[],\n verbose: boolean,\n format: OutputFormat,\n): { ok: boolean; jsonResults?: JsonDomainResult[] } {\n let hasErrors = false;\n const jsonResults: JsonDomainResult[] = [];\n\n for (const domain of domains) {\n const results: CheckResultWithLabel[] = domain.checks.map((check) => ({\n label: check.label,\n result: check.run(),\n }));\n\n let domainOk: boolean;\n if (format === 'json') {\n const jr = collectDomainJson(domain, results);\n jsonResults.push(jr);\n domainOk = jr.ok;\n } else {\n domainOk = printDomain(domain, results, verbose);\n }\n\n if (!domainOk) hasErrors = true;\n }\n\n return { ok: !hasErrors, jsonResults };\n}\n\n// ── Programmatic API ─────────────────────────────────────────────────────────\n\n/**\n * Runs all validation domains against the given project root.\n * Prints results in slim mode and returns true if everything passes.\n */\nexport function runValidation(root: string): boolean {\n const domains = selectDomains(root);\n const { ok } = runDomains(domains, false, 'text');\n return ok;\n}\n\n// ── Watch mode ────────────────────────────────────────────────────────────────\n\nfunction startWatch(\n root: string,\n run: () => void,\n): void {\n const watchDirs = [\n path.join(root, 'src', 'configuration'),\n path.join(root, 'src', 'actions'),\n ].filter((d) => existsSync(d));\n\n if (watchDirs.length === 0) {\n error('No directories to watch found.');\n return;\n }\n\n let debounce: ReturnType<typeof setTimeout> | null = null;\n const trigger = () => {\n if (debounce) clearTimeout(debounce);\n debounce = setTimeout(() => {\n console.clear();\n info(`[${new Date().toLocaleTimeString()}] Re-validating...`);\n console.log('');\n run();\n }, 200);\n };\n\n for (const dir of watchDirs) {\n fsWatch(dir, { recursive: true }, trigger);\n }\n\n info(`Watching for changes in ${watchDirs.map((d) => path.relative(root, d)).join(', ')}...`);\n info('Press Ctrl+C to stop.');\n console.log('');\n}\n\n// ── Command ───────────────────────────────────────────────────────────────────\n\nexport const validateCommand = new Command('validate')\n .description('Validate project config files against their schemas')\n .option('--verbose', 'Show all checks, including passing ones')\n .option('--domain <domain>', 'Only validate one domain: ai, cms, actions, or scripts')\n .option('--format <format>', 'Output format: text (default) or json', 'text')\n .option('--watch', 'Re-validate on file changes (TTY only)')\n .option('--strict', 'Exit with error even on warnings')\n .option('--project <path>', 'Explicit project root (overrides cwd auto-detection)')\n .action((opts: {\n verbose?: boolean;\n domain?: string;\n format?: string;\n watch?: boolean;\n strict?: boolean;\n project?: string;\n }) => {\n const verbose = Boolean(opts.verbose);\n const format = (opts.format ?? 'text') as OutputFormat;\n const domainFilter = opts.domain as DomainFilter | undefined;\n\n const root = opts.project\n ? path.resolve(opts.project)\n : findProjectRoot(process.cwd());\n\n if (!root) {\n error(\n 'No web5.config.json found — run this command from inside a Web5 project',\n );\n process.exit(1);\n }\n\n if (format === 'text') {\n info(`Project root: ${root}`);\n console.log('');\n }\n\n const run = () => {\n const domains = selectDomains(root, domainFilter);\n const { ok, jsonResults } = runDomains(domains, verbose, format);\n\n if (format === 'json') {\n console.log(JSON.stringify({ ok, domains: jsonResults }, null, 2));\n }\n\n if (!ok && !opts.watch) {\n process.exit(1);\n }\n };\n\n run();\n\n if (opts.watch) {\n if (!process.stdout.isTTY) {\n error('--watch requires a TTY (interactive terminal).');\n process.exit(1);\n }\n startWatch(root, run);\n }\n });\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Command","Ajv","load","yamlLoad","readFileSync","existsSync","readdirSync","watch","fsWatch","path","chalk","error","info","cmsSchemaSchemaTemplate","cmsMappingSchemaTemplate","aiInstructionsSchemaTemplate","actionYamlSchemaTemplate","SCHEMAS","findProjectRoot","startDir","current","parent","dirname","join","tryParseYaml","filePath","data","e","err","Error","message","String","readText","kebabToCamel","s","replace","_","c","toUpperCase","camelToSnake","toLowerCase","formatAjvError","hints","loc","instancePath","keyword","missing","params","missingProperty","hint","fix","expected","type","field","min","limit","extra","additionalProperty","AI_INSTRUCTIONS_HINTS","rules","instructions","semantics","tone","ACTION_YAML_HINTS","name","buildAiInstructionsDomain","root","fileName","ajv","allErrors","strict","schema","parsed","fileExists","yamlOk","checks","label","run","ok","errors","result","undefined","validate","compile","map","buildCmsSchemaDomain","buildCmsMappingDomain","buildActionsDomain","actionsDir","registryPath","indexPath","yamlFiles","filter","f","endsWith","length","actionSchema","yamlFile","yamlPath","yamlData","schemaOk","actionName","basename","extname","push","getNames","camel","handler","snake","handlerFile","handlerPath","content","includes","declaredParams","Set","p","param","match","usedParams","split","trim","startsWith","undeclared","has","extractRegisterBlocks","blocks","marker","searchFrom","start","indexOf","depth","i","ch","block","slice","buildSectionImportMap","Map","re","m","exec","stem","names","raw","token","asParts","localName","set","buildSectionsDomain","sectionsDir","registryExists","registryContent","tsxFiles","file","importMap","blockText","_find","entries","find","_ref","defMatch","defName","allHaveIntent","every","entry","refs","matchAll","ref","get","printDomain","domain","results","verbose","failed","r","domainOk","console","log","green","process","stderr","write","red","e_","collectDomainJson","_ref2","buildScriptsDomain","pkgPath","pkg","JSON","parse","_pkg$scripts","scripts","bundle","_pkg$scripts2","build","DOMAIN_NAME_MAP","ai","cms","actions","sections","selectDomains","all","filters","Array","isArray","d","runDomains","domains","format","hasErrors","jsonResults","check","jr","runValidation","startWatch","watchDirs","debounce","trigger","clearTimeout","setTimeout","clear","Date","toLocaleTimeString","dir","recursive","relative","validateCommand","description","option","action","opts","Boolean","domainFilter","project","resolve","cwd","exit","stringify","stdout","isTTY"],"sources":["../../../src/commands/validate.ts"],"sourcesContent":["import { Command } from 'commander';\nimport Ajv from 'ajv/dist/2020';\nimport type { ErrorObject } from 'ajv';\nimport { load as yamlLoad } from 'js-yaml';\nimport { readFileSync, existsSync, readdirSync, watch as fsWatch } from 'fs';\nimport * as path from 'path';\nimport chalk from 'chalk';\nimport { error, info } from '../utils/print';\n\nimport { cmsSchemaSchemaTemplate } from '../templates/cmsSchemaSchema';\nimport { cmsMappingSchemaTemplate } from '../templates/cmsMappingSchema';\nimport { aiInstructionsSchemaTemplate } from '../templates/aiInstructionsSchema';\nimport { actionYamlSchemaTemplate } from '../templates/actionYamlSchema';\n\ntype OutputFormat = 'text' | 'json';\nexport type DomainFilter =\n | 'ai'\n | 'cms'\n | 'cms-mapping'\n | 'actions'\n | 'scripts'\n | 'sections';\n\n// ── Bundled schemas (never exposed to user's project) ────────────────────────\n\nconst SCHEMAS: Record<string, object> = {\n 'cms-schema.yaml': yamlLoad(cmsSchemaSchemaTemplate()) as object,\n 'cms-mapping.yaml': yamlLoad(cmsMappingSchemaTemplate()) as object,\n 'prompt-instructions.yaml': yamlLoad(\n aiInstructionsSchemaTemplate(),\n ) as object,\n 'action.yaml': yamlLoad(actionYamlSchemaTemplate()) as object,\n};\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\ninterface CheckError {\n message: string;\n fix?: string;\n}\n\ninterface CheckResult {\n ok: boolean;\n errors: CheckError[];\n}\n\ninterface Check {\n label: string;\n run: () => CheckResult;\n}\n\ninterface Domain {\n name: string;\n checks: Check[];\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction findProjectRoot(startDir: string): string | null {\n let current = startDir;\n let parent = path.dirname(current);\n while (current !== parent) {\n if (existsSync(path.join(current, 'web5.config.json'))) {\n return current;\n }\n current = parent;\n parent = path.dirname(current);\n }\n if (existsSync(path.join(current, 'web5.config.json'))) {\n return current;\n }\n return null;\n}\n\nfunction tryParseYaml(\n filePath: string,\n): { data: unknown; err?: undefined } | { data?: undefined; err: string } {\n try {\n return { data: yamlLoad(readFileSync(filePath, 'utf8')) };\n } catch (e) {\n return { err: e instanceof Error ? e.message : String(e) };\n }\n}\n\nfunction readText(filePath: string): string {\n return readFileSync(filePath, 'utf8');\n}\n\n/** kebab-case → camelCase e.g. book-demo → bookDemo */\nfunction kebabToCamel(s: string): string {\n return s.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase());\n}\n\n/** camelCase → snake_case e.g. bookDemo → book_demo */\nfunction camelToSnake(s: string): string {\n return s.replace(/([A-Z])/g, '_$1').toLowerCase();\n}\n\n// ── AJV error formatter ───────────────────────────────────────────────────────\n\n// hints: field-name → indented YAML example of the full expected structure\nfunction formatAjvError(\n e: ErrorObject,\n hints: Record<string, string> = {},\n): CheckError {\n const loc = e.instancePath || '(root)';\n\n if (e.keyword === 'required') {\n const missing = (e.params as { missingProperty: string }).missingProperty;\n const parent =\n loc === '(root)' ? 'top level' : `'${loc.replace(/^\\//, '')}'`;\n const hint = hints[missing];\n return {\n message: `[${loc}] missing required property '${missing}'`,\n fix: hint\n ? `Add '${missing}:' under ${parent}. Expected structure:\\n${hint}`\n : `Add '${missing}:' under ${parent}.`,\n };\n }\n\n if (e.keyword === 'type') {\n const expected = (e.params as { type: string }).type;\n const field = loc.replace(/^\\//, '');\n const hint = hints[field];\n return {\n message: `[${loc}] must be ${expected}`,\n fix: hint\n ? `Replace the current value of '${field}' with:\\n${hint}`\n : `Change '${field}' to a ${expected}.`,\n };\n }\n\n if (e.keyword === 'minItems') {\n const min = (e.params as { limit: number }).limit;\n const field = loc.replace(/^\\//, '');\n const hint = hints[field];\n return {\n message: `[${loc}] must have at least ${min} item${min === 1 ? '' : 's'}`,\n fix: hint\n ? `Add at least ${min} entry under '${field}':\\n${hint}`\n : `Add at least ${min} entry under '${field}'.`,\n };\n }\n\n if (e.keyword === 'additionalProperties') {\n const extra = (e.params as { additionalProperty: string })\n .additionalProperty;\n return {\n message: `[${loc}] unknown property '${extra}'`,\n fix: `Remove '${extra}' — it is not a recognised field.`,\n };\n }\n\n return { message: `[${loc}] ${e.message ?? e.keyword}` };\n}\n\n// ── Structural hints ──────────────────────────────────────────────────────────\n\nconst AI_INSTRUCTIONS_HINTS: Record<string, string> = {\n rules: [\n ' rules:',\n \" - Always respond in the language of the user's prompt\",\n ' - Do not hallucinate or fabricate information',\n ' - Refuse requests that are harmful, illegal, or unethical',\n ].join('\\n'),\n instructions: [\n ' instructions: >',\n ' Structure prompts clearly and specifically. Provide relevant',\n ' context and set output expectations (format, length, style).',\n ].join('\\n'),\n semantics: [\n ' semantics:',\n \" PROX: The user's natural language request or structured prompt\",\n ' VERIFY: A response aligned with the detected intent',\n ' SUB-ACTION: Background information or metadata alongside the prompt',\n ].join('\\n'),\n tone: [\n ' tone:',\n ' style: concise',\n ' voice: \"clear and direct — avoid filler phrases\"',\n ].join('\\n'),\n};\n\nconst ACTION_YAML_HINTS: Record<string, string> = {\n name: [' name: my-action'].join('\\n'),\n params: [\n ' params:',\n ' - param: exampleParam',\n ' values:',\n ' - value1',\n ' - value2',\n ' - param: optionalParam',\n ' optional: true',\n ' values:',\n ' - valueA',\n ].join('\\n'),\n};\n\n// ── Domain builders ───────────────────────────────────────────────────────────\n\nfunction buildAiInstructionsDomain(root: string): Domain {\n const filePath = path.join(\n root,\n 'src',\n 'configuration',\n 'ai',\n 'prompt-instructions.yaml',\n );\n const fileName = 'prompt-instructions.yaml';\n const ajv = new Ajv({ allErrors: true, strict: false });\n const schema = SCHEMAS[fileName];\n\n let parsed: unknown;\n let fileExists = false;\n let yamlOk = false;\n\n return {\n name: 'AI Instructions',\n checks: [\n {\n label: `${fileName} — file exists`,\n run(): CheckResult {\n fileExists = existsSync(filePath);\n if (fileExists) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `File not found: ${filePath}`,\n fix: `Create 'src/configuration/ai/prompt-instructions.yaml' in your project.`,\n },\n ],\n };\n },\n },\n {\n label: `${fileName} — valid YAML`,\n run(): CheckResult {\n if (!fileExists) {\n return {\n ok: false,\n errors: [{ message: 'skipped — file does not exist' }],\n };\n }\n const result = tryParseYaml(filePath);\n if (result.err !== undefined) {\n return {\n ok: false,\n errors: [\n {\n message: result.err,\n fix: 'Fix the YAML syntax error above.',\n },\n ],\n };\n }\n parsed = result.data;\n yamlOk = true;\n return { ok: true, errors: [] };\n },\n },\n {\n label: `${fileName} — schema valid`,\n run(): CheckResult {\n if (!yamlOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML parse failed' }],\n };\n }\n const validate = ajv.compile(schema);\n if (validate(parsed)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: (validate.errors ?? []).map((e) =>\n formatAjvError(e, AI_INSTRUCTIONS_HINTS),\n ),\n };\n },\n },\n ],\n };\n}\n\nfunction buildCmsSchemaDomain(root: string): Domain {\n const filePath = path.join(\n root,\n 'src',\n 'configuration',\n 'cms',\n 'cms-schema.yaml',\n );\n const fileName = 'cms-schema.yaml';\n const ajv = new Ajv({ allErrors: true, strict: false });\n const schema = SCHEMAS[fileName];\n\n let parsed: unknown;\n let fileExists = false;\n let yamlOk = false;\n\n return {\n name: 'CMS Schema',\n checks: [\n {\n label: `${fileName} — file exists`,\n run(): CheckResult {\n fileExists = existsSync(filePath);\n if (fileExists) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `File not found: ${filePath}`,\n fix: `Create 'src/configuration/cms/cms-schema.yaml' in your project.`,\n },\n ],\n };\n },\n },\n {\n label: `${fileName} — valid YAML`,\n run(): CheckResult {\n if (!fileExists) {\n return {\n ok: false,\n errors: [{ message: 'skipped — file does not exist' }],\n };\n }\n const result = tryParseYaml(filePath);\n if (result.err !== undefined) {\n return {\n ok: false,\n errors: [\n {\n message: result.err,\n fix: 'Fix the YAML syntax error above.',\n },\n ],\n };\n }\n parsed = result.data;\n yamlOk = true;\n return { ok: true, errors: [] };\n },\n },\n {\n label: `${fileName} — schema valid`,\n run(): CheckResult {\n if (!yamlOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML parse failed' }],\n };\n }\n const validate = ajv.compile(schema);\n if (validate(parsed)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: (validate.errors ?? []).map((e) => formatAjvError(e)),\n };\n },\n },\n ],\n };\n}\n\nfunction buildCmsMappingDomain(root: string): Domain {\n const filePath = path.join(\n root,\n 'src',\n 'configuration',\n 'cms',\n 'cms-mapping.yaml',\n );\n const fileName = 'cms-mapping.yaml';\n const ajv = new Ajv({ allErrors: true, strict: false });\n const schema = SCHEMAS[fileName];\n\n let parsed: unknown;\n let fileExists = false;\n let yamlOk = false;\n\n return {\n name: 'CMS Mapping',\n checks: [\n {\n label: `${fileName} — file exists`,\n run(): CheckResult {\n fileExists = existsSync(filePath);\n if (fileExists) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `File not found: ${filePath}`,\n fix: `Create 'src/configuration/cms/cms-mapping.yaml' in your project.`,\n },\n ],\n };\n },\n },\n {\n label: `${fileName} — valid YAML`,\n run(): CheckResult {\n if (!fileExists) {\n return {\n ok: false,\n errors: [{ message: 'skipped — file does not exist' }],\n };\n }\n const result = tryParseYaml(filePath);\n if (result.err !== undefined) {\n return {\n ok: false,\n errors: [\n {\n message: result.err,\n fix: 'Fix the YAML syntax error above.',\n },\n ],\n };\n }\n parsed = result.data;\n yamlOk = true;\n return { ok: true, errors: [] };\n },\n },\n {\n label: `${fileName} — schema valid`,\n run(): CheckResult {\n if (!yamlOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML parse failed' }],\n };\n }\n const validate = ajv.compile(schema);\n if (validate(parsed)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: (validate.errors ?? []).map((e) => formatAjvError(e)),\n };\n },\n },\n ],\n };\n}\n\nfunction buildActionsDomain(root: string): Domain {\n const actionsDir = path.join(root, 'src', 'actions');\n const registryPath = path.join(root, 'src', 'createRegistry.ts');\n const indexPath = path.join(actionsDir, 'index.ts');\n\n // If the actions directory is missing, report it and stop\n if (!existsSync(actionsDir)) {\n return {\n name: 'Actions',\n checks: [\n {\n label: 'src/actions/ — directory exists',\n run: () => ({\n ok: false,\n errors: [\n {\n message: 'src/actions/ directory not found',\n fix: 'Create the src/actions/ directory and add at least one action YAML + handler.',\n },\n ],\n }),\n },\n ],\n };\n }\n\n const yamlFiles = readdirSync(actionsDir).filter(\n (f) => f.endsWith('.yaml') || f.endsWith('.yml'),\n );\n\n if (yamlFiles.length === 0) {\n return {\n name: 'Actions',\n checks: [\n {\n label: 'src/actions/ — at least one action defined',\n run: () => ({\n ok: false,\n errors: [\n {\n message: 'No action YAML files found in src/actions/',\n fix: 'Add an action YAML file, e.g. src/actions/my-action.yaml',\n },\n ],\n }),\n },\n ],\n };\n }\n\n const ajv = new Ajv({ allErrors: true, strict: false });\n const actionSchema = SCHEMAS['action.yaml'];\n const checks: Check[] = [];\n\n for (const yamlFile of yamlFiles) {\n const yamlPath = path.join(actionsDir, yamlFile);\n\n // Mutable state shared across this action's checks (captured by closures)\n let yamlData: Record<string, unknown> = {};\n let yamlOk = false;\n let schemaOk = false;\n let actionName = path.basename(yamlFile, path.extname(yamlFile));\n\n // ── Check 1: valid YAML ────────────────────────────────────────────────\n checks.push({\n label: `${yamlFile} — valid YAML`,\n run(): CheckResult {\n const result = tryParseYaml(yamlPath);\n if (result.err !== undefined) {\n return {\n ok: false,\n errors: [\n { message: result.err, fix: 'Fix the YAML syntax error.' },\n ],\n };\n }\n yamlData = result.data as Record<string, unknown>;\n yamlOk = true;\n if (typeof yamlData.name === 'string') {\n actionName = yamlData.name;\n }\n return { ok: true, errors: [] };\n },\n });\n\n // ── Check 2: schema valid ─────────────────────────────────────────────\n checks.push({\n label: `${yamlFile} — schema valid`,\n run(): CheckResult {\n if (!yamlOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML parse failed' }],\n };\n }\n const validate = ajv.compile(actionSchema);\n if (validate(yamlData)) {\n schemaOk = true;\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: (validate.errors ?? []).map((e) =>\n formatAjvError(e, ACTION_YAML_HINTS),\n ),\n };\n },\n });\n\n // Derive names — evaluated lazily inside each check closure after\n // yamlOk sets actionName correctly\n const getNames = () => {\n const camel = kebabToCamel(actionName);\n return {\n camel,\n handler: `${camel}Action`,\n snake: camelToSnake(camel),\n handlerFile: `${camel}Action.ts`,\n handlerPath: path.join(actionsDir, `${camel}Action.ts`),\n };\n };\n\n // ── Check 3: handler file exists ──────────────────────────────────────\n checks.push({\n label: `${yamlFile} — handler file exists`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler, handlerFile, handlerPath } = getNames();\n if (existsSync(handlerPath)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `Handler not found: src/actions/${handlerFile}`,\n fix: `Create src/actions/${handlerFile} exporting 'export const ${handler}: ActionHandler = ...'`,\n },\n ],\n };\n },\n });\n\n // ── Check 4: handler exports correct name ─────────────────────────────\n checks.push({\n label: `${yamlFile} — handler exports correct name`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler, handlerFile, handlerPath } = getNames();\n if (!existsSync(handlerPath)) {\n return {\n ok: false,\n errors: [{ message: 'skipped — handler file missing' }],\n };\n }\n const content = readText(handlerPath);\n if (content.includes(`export const ${handler}`)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `'export const ${handler}' not found in ${handlerFile}`,\n fix: `Rename the export to 'export const ${handler}: ActionHandler = ...'`,\n },\n ],\n };\n },\n });\n\n // ── Check 5: handler params ⊆ YAML params ────────────────────────────\n checks.push({\n label: `${yamlFile} — handler params declared in YAML`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handlerPath } = getNames();\n if (!existsSync(handlerPath)) {\n return {\n ok: false,\n errors: [{ message: 'skipped — handler file missing' }],\n };\n }\n\n const declaredParams = new Set(\n ((yamlData.params as { param: string }[]) ?? []).map((p) => p.param),\n );\n\n const content = readText(handlerPath);\n const match = content.match(/const\\s*\\{([^}]+)\\}\\s*=\\s*params/);\n if (!match) {\n return { ok: true, errors: [] }; // No destructure — nothing to check\n }\n\n const usedParams = match[1]\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0 && !s.startsWith('...'))\n .map((s) => s.split(':')[0].trim()); // handle aliased: { foo: bar }\n\n const undeclared = usedParams.filter((p) => !declaredParams.has(p));\n if (undeclared.length === 0) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: undeclared.map((p) => ({\n message: `Handler uses param '${p}' not declared in ${yamlFile}`,\n fix: `Add to ${yamlFile}:\\n params:\\n - param: ${p}\\n values: [...]`,\n })),\n };\n },\n });\n\n // ── Check 6: index.ts exports handler ─────────────────────────────────\n checks.push({\n label: `${yamlFile} — exported from src/actions/index.ts`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler } = getNames();\n if (!existsSync(indexPath)) {\n return {\n ok: false,\n errors: [\n {\n message: 'src/actions/index.ts not found',\n fix: `Create src/actions/index.ts and add:\\nexport { ${handler} } from './${handler}';`,\n },\n ],\n };\n }\n const content = readText(indexPath);\n if (content.includes(handler)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `'${handler}' not found in src/actions/index.ts`,\n fix: `Add: export { ${handler} } from './${handler}';`,\n },\n ],\n };\n },\n });\n\n // ── Check 7: createRegistry.ts imports handler ────────────────────────\n checks.push({\n label: `${yamlFile} — imported in src/createRegistry.ts`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler, handlerFile } = getNames();\n if (!existsSync(registryPath)) {\n return {\n ok: false,\n errors: [{ message: 'src/createRegistry.ts not found' }],\n };\n }\n const content = readText(registryPath);\n if (content.includes(handler)) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `'${handler}' not imported in src/createRegistry.ts`,\n fix: `Add: import { ${handler} } from './actions/${handlerFile.replace(\n '.ts',\n '',\n )}';`,\n },\n ],\n };\n },\n });\n\n // ── Check 8: createRegistry.ts registers the action ──────────────────\n checks.push({\n label: `${yamlFile} — registered in src/createRegistry.ts`,\n run(): CheckResult {\n if (!schemaOk) {\n return {\n ok: false,\n errors: [{ message: 'skipped — YAML schema invalid' }],\n };\n }\n const { handler, snake } = getNames();\n if (!existsSync(registryPath)) {\n return {\n ok: false,\n errors: [{ message: 'src/createRegistry.ts not found' }],\n };\n }\n const content = readText(registryPath);\n if (\n content.includes(`registerAction('${snake}'`) ||\n content.includes(`registerAction(\"${snake}\"`)\n ) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `'.registerAction('${snake}', ...)' not found in src/createRegistry.ts`,\n fix: `Add to the registry chain:\\n .registerAction('${snake}', ${handler})`,\n },\n ],\n };\n },\n });\n }\n\n return { name: 'Actions', checks };\n}\n\n// ── Sections helpers ──────────────────────────────────────────────────────────\n\n/**\n * Extracts the text of every `.register(...)` call that has a component array.\n * Uses bracket-counting to handle nesting correctly.\n * Skips system registrations that have no `[` (e.g. SkipNodesSectionDefinition).\n */\nfunction extractRegisterBlocks(content: string): string[] {\n const blocks: string[] = [];\n const marker = '.register(';\n let searchFrom = 0;\n\n let start = content.indexOf(marker, searchFrom);\n while (start !== -1) {\n let depth = 0;\n let i = start + marker.length - 1; // position of the opening '('\n while (i < content.length) {\n const ch = content[i];\n if (ch === '(') {\n depth++;\n } else if (ch === ')') {\n depth--;\n if (depth === 0) {\n break;\n }\n }\n i++;\n }\n\n const block = content.slice(start, i + 1);\n if (block.includes('[')) {\n blocks.push(block);\n }\n searchFrom = i + 1;\n start = content.indexOf(marker, searchFrom);\n }\n\n return blocks;\n}\n\n/**\n * Scans all import lines that reference a `sections/` path and returns a\n * Map<localName, stem>. Handles aliases and multi-name imports:\n * import { KpiSection as KpiSectionComponent } from '...sections/KpiSection'\n * → \"KpiSectionComponent\" → \"KpiSection\"\n */\nfunction buildSectionImportMap(content: string): Map<string, string> {\n const map = new Map<string, string>();\n const re = /import\\s*\\{([^}]+)\\}\\s*from\\s*['\"][^'\"]*sections\\/(\\w+)['\"]/g;\n let m = re.exec(content);\n while (m !== null) {\n const stem = m[2];\n const names = m[1].split(',');\n for (const raw of names) {\n const token = raw.trim();\n if (!token) {\n continue;\n }\n const asParts = token.split(/\\s+as\\s+/);\n const localName = (asParts[1] ?? asParts[0]).trim();\n if (localName) {\n map.set(localName, stem);\n }\n }\n m = re.exec(content);\n }\n return map;\n}\n\n// ── Sections domain ────────────────────────────────────────────────────────────\n\nfunction buildSectionsDomain(root: string): Domain {\n const registryPath = path.join(root, 'src', 'createRegistry.ts');\n const sectionsDir = path.join(root, 'src', 'components', 'sections');\n\n let registryExists = false;\n let registryContent = '';\n let tsxFiles: string[] = [];\n\n return {\n name: 'Sections',\n checks: [\n // ── Check 1: createRegistry.ts exists ────────────────────────────────\n {\n label: 'createRegistry.ts — file exists',\n run(): CheckResult {\n registryExists = existsSync(registryPath);\n if (!registryExists) {\n return {\n ok: false,\n errors: [\n {\n message: 'src/createRegistry.ts not found',\n fix: 'Create src/createRegistry.ts and export a createRegistry() function that registers your section components.',\n },\n ],\n };\n }\n registryContent = readText(registryPath);\n tsxFiles = existsSync(sectionsDir)\n ? readdirSync(sectionsDir).filter((f) => f.endsWith('.tsx'))\n : [];\n return { ok: true, errors: [] };\n },\n },\n\n // ── Check 2: all .tsx files imported in createRegistry.ts ─────────────\n {\n label:\n 'src/components/sections/ — all .tsx files imported in createRegistry.ts',\n run(): CheckResult {\n if (!registryExists) {\n return {\n ok: false,\n errors: [{ message: 'skipped — createRegistry.ts not found' }],\n };\n }\n const errors: CheckError[] = [];\n for (const file of tsxFiles) {\n const stem = path.basename(file, '.tsx');\n if (!registryContent.includes(`sections/${stem}`)) {\n errors.push({\n message: `'${stem}.tsx' is not imported in src/createRegistry.ts`,\n fix: `Add: import { ${stem} } from './components/sections/${stem}';`,\n });\n }\n }\n return errors.length === 0\n ? { ok: true, errors: [] }\n : { ok: false, errors };\n },\n },\n\n // ── Check 3: all .tsx files wired into a .register() call ─────────────\n {\n label:\n 'src/components/sections/ — all .tsx files wired into .register()',\n run(): CheckResult {\n if (!registryExists) {\n return {\n ok: false,\n errors: [{ message: 'skipped — createRegistry.ts not found' }],\n };\n }\n const importMap = buildSectionImportMap(registryContent);\n const blocks = extractRegisterBlocks(registryContent);\n const blockText = blocks.join('\\n');\n const errors: CheckError[] = [];\n\n for (const file of tsxFiles) {\n const stem = path.basename(file, '.tsx');\n // Find the local name for this stem (may have been aliased on import)\n const localName =\n [...importMap.entries()].find(([, s]) => s === stem)?.[0] ?? stem;\n\n if (!blockText.includes(localName)) {\n errors.push({\n message: `'${localName}' (${stem}.tsx) is imported but not passed to any .register() call`,\n fix: `Add { component: ${localName} } inside a .register(new <Definition>(), [...]) call in src/createRegistry.ts.`,\n });\n }\n }\n return errors.length === 0\n ? { ok: true, errors: [] }\n : { ok: false, errors };\n },\n },\n\n // ── Check 4: every .register() block has a catch-all entry ────────────\n {\n label:\n 'createRegistry.ts — all .register() blocks have a catch-all component',\n run(): CheckResult {\n if (!registryExists) {\n return {\n ok: false,\n errors: [{ message: 'skipped — createRegistry.ts not found' }],\n };\n }\n const blocks = extractRegisterBlocks(registryContent);\n const errors: CheckError[] = [];\n\n for (const block of blocks) {\n const defMatch = block.match(/\\.register\\(\\s*new\\s+(\\w+)/);\n const defName = defMatch ? defMatch[1] : '(unknown)';\n\n // Split on \"{ component:\" to isolate each entry\n const entries = block.split('{ component:').slice(1);\n if (entries.length === 0) {\n continue;\n }\n\n const allHaveIntent = entries.every((entry) =>\n entry.includes('intent:'),\n );\n if (allHaveIntent) {\n errors.push({\n message: `'${defName}' has no catch-all component — every entry specifies an intent`,\n fix: `Add a catch-all entry to the .register(new ${defName}(), [...]) call:\\n { component: YourDefaultComponent }`,\n });\n }\n }\n return errors.length === 0\n ? { ok: true, errors: [] }\n : { ok: false, errors };\n },\n },\n\n // ── Check 5: all component refs in .register() resolve to a .tsx file ─\n {\n label:\n 'createRegistry.ts — all .register() component references resolve to a .tsx file',\n run(): CheckResult {\n if (!registryExists) {\n return {\n ok: false,\n errors: [{ message: 'skipped — createRegistry.ts not found' }],\n };\n }\n const importMap = buildSectionImportMap(registryContent);\n const blocks = extractRegisterBlocks(registryContent);\n const errors: CheckError[] = [];\n\n for (const block of blocks) {\n const refs = [...block.matchAll(/\\{\\s*component:\\s*(\\w+)/g)].map(\n (m) => m[1],\n );\n for (const ref of refs) {\n const stem = importMap.get(ref);\n if (stem === undefined) {\n errors.push({\n message: `Component '${ref}' used in .register() has no matching import from sections/`,\n fix: `Add: import { ${ref} } from './components/sections/${ref}'; or check the import alias.`,\n });\n continue;\n }\n const filePath = path.join(sectionsDir, `${stem}.tsx`);\n if (!existsSync(filePath)) {\n errors.push({\n message: `Component '${ref}' maps to '${stem}.tsx' which does not exist in src/components/sections/`,\n fix: `Create src/components/sections/${stem}.tsx, or remove the stale .register() entry from src/createRegistry.ts.`,\n });\n }\n }\n }\n return errors.length === 0\n ? { ok: true, errors: [] }\n : { ok: false, errors };\n },\n },\n ],\n };\n}\n\n// ── Rendering ─────────────────────────────────────────────────────────────────\n\ninterface CheckResultWithLabel {\n label: string;\n result: CheckResult;\n}\n\nfunction printDomain(\n domain: Domain,\n results: CheckResultWithLabel[],\n verbose: boolean,\n): boolean {\n const failed = results.filter((r) => !r.result.ok);\n const domainOk = failed.length === 0;\n\n if (verbose) {\n console.log(domain.name);\n for (const { label, result } of results) {\n if (result.ok) {\n console.log(chalk.green(` \\u2714 ${label}`));\n } else {\n process.stderr.write(chalk.red(` \\u2716 ${label}\\n`));\n for (const e_ of result.errors) {\n process.stderr.write(` ${e_.message}\\n`);\n if (e_.fix) {\n process.stderr.write(` Fix: ${e_.fix}\\n`);\n }\n }\n }\n }\n console.log('');\n return domainOk;\n }\n\n // Slim mode\n if (domainOk) {\n console.log(chalk.green(`\\u2714 ${domain.name} — valid`));\n return true;\n }\n\n console.log(domain.name);\n for (const { label, result } of failed) {\n process.stderr.write(chalk.red(` \\u2716 ${label}\\n`));\n for (const e_ of result.errors) {\n process.stderr.write(` ${e_.message}\\n`);\n if (e_.fix) {\n process.stderr.write(` Fix: ${e_.fix}\\n`);\n }\n }\n }\n console.log('');\n return false;\n}\n\n// ── JSON output ───────────────────────────────────────────────────────────────\n\ninterface JsonDomainResult {\n name: string;\n ok: boolean;\n checks: { label: string; ok: boolean; errors: CheckError[] }[];\n}\n\nfunction collectDomainJson(\n domain: Domain,\n results: CheckResultWithLabel[],\n): JsonDomainResult {\n return {\n name: domain.name,\n ok: results.every((r) => r.result.ok),\n checks: results.map(({ label, result }) => ({\n label,\n ok: result.ok,\n errors: result.errors,\n })),\n };\n}\n\n// ── Build scripts domain ──────────────────────────────────────────────────────\n\nfunction buildScriptsDomain(root: string): Domain {\n const pkgPath = path.join(root, 'package.json');\n let pkg: { scripts?: Record<string, string> } = {};\n let fileExists = false;\n\n return {\n name: 'Build Scripts',\n checks: [\n {\n label: 'package.json — file exists',\n run(): CheckResult {\n fileExists = existsSync(pkgPath);\n if (!fileExists) {\n return {\n ok: false,\n errors: [\n {\n message: `File not found: ${pkgPath}`,\n fix: `Create a 'package.json' at the root of your project.`,\n },\n ],\n };\n }\n try {\n pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as typeof pkg;\n } catch (e) {\n fileExists = false;\n return {\n ok: false,\n errors: [\n {\n message: `Failed to parse package.json: ${\n e instanceof Error ? e.message : String(e)\n }`,\n fix: `Fix the JSON syntax in your package.json.`,\n },\n ],\n };\n }\n return { ok: true, errors: [] };\n },\n },\n {\n label: 'package.json — bundle script defined',\n run(): CheckResult {\n if (!fileExists) {\n return {\n ok: false,\n errors: [{ message: 'skipped — package.json not readable' }],\n };\n }\n if (\n typeof pkg.scripts?.bundle === 'string' &&\n pkg.scripts.bundle.length > 0\n ) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `Missing 'bundle' script in package.json`,\n fix: `Add a 'bundle' script to your package.json scripts, e.g.:\\n \"bundle\": \"vite build --config src/vite.cdn.config.ts\"`,\n },\n ],\n };\n },\n },\n {\n label: 'package.json — build script defined',\n run(): CheckResult {\n if (!fileExists) {\n return {\n ok: false,\n errors: [{ message: 'skipped — package.json not readable' }],\n };\n }\n if (\n typeof pkg.scripts?.build === 'string' &&\n pkg.scripts.build.length > 0\n ) {\n return { ok: true, errors: [] };\n }\n return {\n ok: false,\n errors: [\n {\n message: `Missing 'build' script in package.json`,\n fix: `Add a 'build' script to your package.json scripts, e.g.:\\n \"build\": \"tsc\"`,\n },\n ],\n };\n },\n },\n ],\n };\n}\n\n// ── Domain selection ──────────────────────────────────────────────────────────\n\nconst DOMAIN_NAME_MAP: Record<DomainFilter, string> = {\n ai: 'AI Instructions',\n cms: 'CMS Schema',\n 'cms-mapping': 'CMS Mapping',\n scripts: 'Build Scripts',\n actions: 'Actions',\n sections: 'Sections',\n};\n\nfunction selectDomains(\n root: string,\n filter?: DomainFilter | DomainFilter[],\n): Domain[] {\n const all: Domain[] = [\n buildAiInstructionsDomain(root),\n buildCmsSchemaDomain(root),\n buildCmsMappingDomain(root),\n buildActionsDomain(root),\n buildScriptsDomain(root),\n buildSectionsDomain(root),\n ];\n if (!filter) {\n return all;\n }\n const filters = Array.isArray(filter) ? filter : [filter];\n const names = new Set(filters.map((f) => DOMAIN_NAME_MAP[f]));\n return all.filter((d) => names.has(d.name));\n}\n\n// ── Core runner ───────────────────────────────────────────────────────────────\n\nfunction runDomains(\n domains: Domain[],\n verbose: boolean,\n format: OutputFormat,\n): { ok: boolean; jsonResults?: JsonDomainResult[] } {\n let hasErrors = false;\n const jsonResults: JsonDomainResult[] = [];\n\n for (const domain of domains) {\n const results: CheckResultWithLabel[] = domain.checks.map((check) => ({\n label: check.label,\n result: check.run(),\n }));\n\n let domainOk: boolean;\n if (format === 'json') {\n const jr = collectDomainJson(domain, results);\n jsonResults.push(jr);\n domainOk = jr.ok;\n } else {\n domainOk = printDomain(domain, results, verbose);\n }\n\n if (!domainOk) {\n hasErrors = true;\n }\n }\n\n return { ok: !hasErrors, jsonResults };\n}\n\n// ── Programmatic API ─────────────────────────────────────────────────────────\n\n/**\n * Runs validation domains against the given project root.\n * Pass `filters` to validate only specific domains; omit to validate all.\n * Prints results in slim mode and returns true if everything passes.\n */\nexport function runValidation(root: string, filters?: DomainFilter[]): boolean {\n const domains = selectDomains(root, filters);\n const { ok } = runDomains(domains, false, 'text');\n return ok;\n}\n\n// ── Watch mode ────────────────────────────────────────────────────────────────\n\nfunction startWatch(root: string, run: () => void): void {\n const watchDirs = [\n path.join(root, 'src', 'configuration'),\n path.join(root, 'src', 'actions'),\n path.join(root, 'src', 'components', 'sections'),\n path.join(root, 'src', 'createRegistry.ts'),\n ].filter((d) => existsSync(d));\n\n if (watchDirs.length === 0) {\n error('No directories to watch found.');\n return;\n }\n\n let debounce: ReturnType<typeof setTimeout> | null = null;\n const trigger = () => {\n if (debounce) {\n clearTimeout(debounce);\n }\n debounce = setTimeout(() => {\n console.clear();\n info(`[${new Date().toLocaleTimeString()}] Re-validating...`);\n console.log('');\n run();\n }, 200);\n };\n\n for (const dir of watchDirs) {\n fsWatch(dir, { recursive: true }, trigger);\n }\n\n info(\n `Watching for changes in ${watchDirs\n .map((d) => path.relative(root, d))\n .join(', ')}...`,\n );\n info('Press Ctrl+C to stop.');\n console.log('');\n}\n\n// ── Command ───────────────────────────────────────────────────────────────────\n\nexport const validateCommand = new Command('validate')\n .description('Validate project config files against their schemas')\n .option('--verbose', 'Show all checks, including passing ones')\n .option(\n '--domain <domain>',\n 'Only validate one domain: ai, cms, actions, scripts, or sections',\n )\n .option('--format <format>', 'Output format: text (default) or json', 'text')\n .option('--watch', 'Re-validate on file changes (TTY only)')\n .option('--strict', 'Exit with error even on warnings')\n .option(\n '--project <path>',\n 'Explicit project root (overrides cwd auto-detection)',\n )\n .action(\n (opts: {\n verbose?: boolean;\n domain?: string;\n format?: string;\n watch?: boolean;\n strict?: boolean;\n project?: string;\n }) => {\n const verbose = Boolean(opts.verbose);\n const format = (opts.format ?? 'text') as OutputFormat;\n const domainFilter = opts.domain as DomainFilter | undefined;\n\n const root = opts.project\n ? path.resolve(opts.project)\n : findProjectRoot(process.cwd());\n\n if (!root) {\n error(\n 'No web5.config.json found — run this command from inside a Web5 project',\n );\n process.exit(1);\n }\n\n if (format === 'text') {\n info(`Project root: ${root}`);\n console.log('');\n }\n\n const run = () => {\n const domains = selectDomains(root, domainFilter);\n const { ok, jsonResults } = runDomains(domains, verbose, format);\n\n if (format === 'json') {\n console.log(JSON.stringify({ ok, domains: jsonResults }, null, 2));\n }\n\n if (!ok && !opts.watch) {\n process.exit(1);\n }\n };\n\n run();\n\n if (opts.watch) {\n if (!process.stdout.isTTY) {\n error('--watch requires a TTY (interactive terminal).');\n process.exit(1);\n }\n startWatch(root, run);\n }\n },\n );\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Command","readCredentials","success","error","info","isJsonMode","whoamiCommand","description","action","creds","console","log","JSON","stringify","authenticated","authMethod","api_key","siteId","site_id","expiresAt","expires_at","Date","toISOString","expired","now","err_","Error","message","String","process","exit"],"sources":["../../../src/commands/whoami.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { readCredentials } from '../auth/secretStore';\nimport { success, error, info, isJsonMode } from '../utils/print';\n\nexport const whoamiCommand = new Command('whoami')\n .description('Show current authentication status and identity')\n .action(async () => {\n try {\n const creds = await readCredentials();\n\n if (!creds) {\n if (isJsonMode()) {\n console.log(JSON.stringify({ authenticated: false }));\n } else {\n info('Not authenticated. Run `web5 login` to sign in.');\n }\n return;\n }\n\n const authMethod = creds.api_key ? 'api-key' : 'device-flow';\n const siteId = creds.site_id ?? null;\n const expiresAt = creds.expires_at\n ? new Date(creds.expires_at).toISOString()\n : null;\n const expired = creds.expires_at ? creds.expires_at < Date.now() : false;\n\n if (isJsonMode()) {\n console.log(\n JSON.stringify({ authenticated: true, authMethod, siteId, expiresAt, expired }),\n );\n return;\n }\n\n success('Authenticated');\n info(`Method: ${authMethod}`);\n if (siteId) {\n info(`Site ID: ${siteId}`);\n }\n if (expiresAt) {\n info(`Expires: ${expiresAt}${expired ? ' (expired)' : ''}`);\n }\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n });\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,WAAW;AACnC,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,OAAO,EAAEC,KAAK,EAAEC,IAAI,EAAEC,UAAU,QAAQ,gBAAgB;AAEjE,OAAO,MAAMC,aAAa,GAAG,IAAIN,OAAO,CAAC,QAAQ,CAAC,CAC/CO,WAAW,CAAC,iDAAiD,CAAC,CAC9DC,MAAM,CAAC,YAAY;EAClB,IAAI;IACF,MAAMC,KAAK,GAAG,MAAMR,eAAe,CAAC,CAAC;IAErC,IAAI,CAACQ,KAAK,EAAE;MACV,IAAIJ,UAAU,CAAC,CAAC,EAAE;QAChBK,OAAO,CAACC,GAAG,CAACC,IAAI,CAACC,SAAS,CAAC;UAAEC,aAAa,EAAE;QAAM,CAAC,CAAC,CAAC;MACvD,CAAC,MAAM;QACLV,IAAI,CAAC,iDAAiD,CAAC;MACzD;MACA;IACF;IAEA,MAAMW,UAAU,GAAGN,KAAK,CAACO,OAAO,GAAG,SAAS,GAAG,aAAa;IAC5D,MAAMC,MAAM,GAAGR,KAAK,CAACS,OAAO,IAAI,IAAI;IACpC,MAAMC,SAAS,GAAGV,KAAK,CAACW,UAAU,GAC9B,IAAIC,IAAI,CAACZ,KAAK,CAACW,UAAU,CAAC,CAACE,WAAW,CAAC,CAAC,GACxC,IAAI;IACR,MAAMC,OAAO,GAAGd,KAAK,CAACW,UAAU,GAAGX,KAAK,CAACW,UAAU,GAAGC,IAAI,CAACG,GAAG,CAAC,CAAC,GAAG,KAAK;IAExE,IAAInB,UAAU,CAAC,CAAC,EAAE;MAChBK,OAAO,CAACC,GAAG,CACTC,IAAI,CAACC,SAAS,CAAC;QAAEC,aAAa,EAAE,IAAI;QAAEC,UAAU;QAAEE,MAAM;QAAEE,SAAS;QAAEI;MAAQ,CAAC,CAChF,CAAC;MACD;IACF;IAEArB,OAAO,CAAC,eAAe,CAAC;IACxBE,IAAI,CAAC,aAAaW,UAAU,EAAE,CAAC;IAC/B,IAAIE,MAAM,EAAE;MACVb,IAAI,CAAC,aAAaa,MAAM,EAAE,CAAC;IAC7B;IACA,IAAIE,SAAS,EAAE;MACbf,IAAI,CAAC,aAAae,SAAS,GAAGI,OAAO,GAAG,aAAa,GAAG,EAAE,EAAE,CAAC;IAC/D;EACF,CAAC,CAAC,OAAOE,IAAI,EAAE;IACbtB,KAAK,CAACsB,IAAI,YAAYC,KAAK,GAAGD,IAAI,CAACE,OAAO,GAAGC,MAAM,CAACH,IAAI,CAAC,CAAC;IAC1DI,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;EACjB;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Command","readCredentials","success","error","info","isJsonMode","whoamiCommand","description","action","creds","console","log","JSON","stringify","authenticated","authMethod","api_key","siteId","site_id","expiresAt","expires_at","Date","toISOString","expired","now","err_","Error","message","String","process","exit"],"sources":["../../../src/commands/whoami.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { readCredentials } from '../auth/secretStore';\nimport { success, error, info, isJsonMode } from '../utils/print';\n\nexport const whoamiCommand = new Command('whoami')\n .description('Show current authentication status and identity')\n .action(async () => {\n try {\n const creds = await readCredentials();\n\n if (!creds) {\n if (isJsonMode()) {\n console.log(JSON.stringify({ authenticated: false }));\n } else {\n info('Not authenticated. Run `web5 login` to sign in.');\n }\n return;\n }\n\n const authMethod = creds.api_key ? 'api-key' : 'device-flow';\n const siteId = creds.site_id ?? null;\n const expiresAt = creds.expires_at\n ? new Date(creds.expires_at).toISOString()\n : null;\n const expired = creds.expires_at ? creds.expires_at < Date.now() : false;\n\n if (isJsonMode()) {\n console.log(\n JSON.stringify({\n authenticated: true,\n authMethod,\n siteId,\n expiresAt,\n expired,\n }),\n );\n return;\n }\n\n success('Authenticated');\n info(`Method: ${authMethod}`);\n if (siteId) {\n info(`Site ID: ${siteId}`);\n }\n if (expiresAt) {\n info(`Expires: ${expiresAt}${expired ? ' (expired)' : ''}`);\n }\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n });\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,WAAW;AACnC,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,OAAO,EAAEC,KAAK,EAAEC,IAAI,EAAEC,UAAU,QAAQ,gBAAgB;AAEjE,OAAO,MAAMC,aAAa,GAAG,IAAIN,OAAO,CAAC,QAAQ,CAAC,CAC/CO,WAAW,CAAC,iDAAiD,CAAC,CAC9DC,MAAM,CAAC,YAAY;EAClB,IAAI;IACF,MAAMC,KAAK,GAAG,MAAMR,eAAe,CAAC,CAAC;IAErC,IAAI,CAACQ,KAAK,EAAE;MACV,IAAIJ,UAAU,CAAC,CAAC,EAAE;QAChBK,OAAO,CAACC,GAAG,CAACC,IAAI,CAACC,SAAS,CAAC;UAAEC,aAAa,EAAE;QAAM,CAAC,CAAC,CAAC;MACvD,CAAC,MAAM;QACLV,IAAI,CAAC,iDAAiD,CAAC;MACzD;MACA;IACF;IAEA,MAAMW,UAAU,GAAGN,KAAK,CAACO,OAAO,GAAG,SAAS,GAAG,aAAa;IAC5D,MAAMC,MAAM,GAAGR,KAAK,CAACS,OAAO,IAAI,IAAI;IACpC,MAAMC,SAAS,GAAGV,KAAK,CAACW,UAAU,GAC9B,IAAIC,IAAI,CAACZ,KAAK,CAACW,UAAU,CAAC,CAACE,WAAW,CAAC,CAAC,GACxC,IAAI;IACR,MAAMC,OAAO,GAAGd,KAAK,CAACW,UAAU,GAAGX,KAAK,CAACW,UAAU,GAAGC,IAAI,CAACG,GAAG,CAAC,CAAC,GAAG,KAAK;IAExE,IAAInB,UAAU,CAAC,CAAC,EAAE;MAChBK,OAAO,CAACC,GAAG,CACTC,IAAI,CAACC,SAAS,CAAC;QACbC,aAAa,EAAE,IAAI;QACnBC,UAAU;QACVE,MAAM;QACNE,SAAS;QACTI;MACF,CAAC,CACH,CAAC;MACD;IACF;IAEArB,OAAO,CAAC,eAAe,CAAC;IACxBE,IAAI,CAAC,aAAaW,UAAU,EAAE,CAAC;IAC/B,IAAIE,MAAM,EAAE;MACVb,IAAI,CAAC,aAAaa,MAAM,EAAE,CAAC;IAC7B;IACA,IAAIE,SAAS,EAAE;MACbf,IAAI,CAAC,aAAae,SAAS,GAAGI,OAAO,GAAG,aAAa,GAAG,EAAE,EAAE,CAAC;IAC/D;EACF,CAAC,CAAC,OAAOE,IAAI,EAAE;IACbtB,KAAK,CAACsB,IAAI,YAAYC,KAAK,GAAGD,IAAI,CAACE,OAAO,GAAGC,MAAM,CAACH,IAAI,CAAC,CAAC;IAC1DI,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;EACjB;AACF,CAAC,CAAC","ignoreList":[]}
@@ -1,8 +1,12 @@
1
1
  export function aiInstructionsSchemaTemplate() {
2
2
  return `type: object
3
- required: [rules, instructions, semantics, tone]
3
+ required: [rules, instructions, intent, semantics, tone]
4
4
  additionalProperties: false
5
5
  properties:
6
+ intent:
7
+ type: object
8
+ additionalProperties:
9
+ type: string
6
10
  rules:
7
11
  type: array
8
12
  minItems: 1
@@ -1 +1 @@
1
- {"version":3,"names":["aiInstructionsSchemaTemplate"],"sources":["../../../src/templates/aiInstructionsSchema.ts"],"sourcesContent":["export function aiInstructionsSchemaTemplate(): string {\n return `type: object\nrequired: [rules, instructions, semantics, tone]\nadditionalProperties: false\nproperties:\n rules:\n type: array\n minItems: 1\n items:\n type: string\n instructions:\n type: string\n semantics:\n type: object\n required: [PROX, VERIFY, SUB-ACTION]\n additionalProperties: false\n properties:\n PROX:\n type: string\n VERIFY:\n type: string\n SUB-ACTION:\n type: string\n tone:\n type: object\n required: [style, voice]\n additionalProperties: false\n properties:\n style:\n type: string\n voice:\n type: string\n`;\n}\n"],"mappings":"AAAA,OAAO,SAASA,4BAA4BA,CAAA,EAAW;EACrD,OAAO;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD","ignoreList":[]}
1
+ {"version":3,"names":["aiInstructionsSchemaTemplate"],"sources":["../../../src/templates/aiInstructionsSchema.ts"],"sourcesContent":["export function aiInstructionsSchemaTemplate(): string {\n return `type: object\nrequired: [rules, instructions, intent, semantics, tone]\nadditionalProperties: false\nproperties:\n intent:\n type: object\n additionalProperties:\n type: string\n rules:\n type: array\n minItems: 1\n items:\n type: string\n instructions:\n type: string\n semantics:\n type: object\n required: [PROX, VERIFY, SUB-ACTION]\n additionalProperties: false\n properties:\n PROX:\n type: string\n VERIFY:\n type: string\n SUB-ACTION:\n type: string\n tone:\n type: object\n required: [style, voice]\n additionalProperties: false\n properties:\n style:\n type: string\n voice:\n type: string\n`;\n}\n"],"mappings":"AAAA,OAAO,SAASA,4BAA4BA,CAAA,EAAW;EACrD,OAAO;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD","ignoreList":[]}
@@ -0,0 +1,128 @@
1
+ export function cmsMappingSchemaTemplate() {
2
+ return `# JSON Schema for cms-mapping.yaml
3
+ # Validates the CmsMapping projection from CMS data items to AI Assistant documents.
4
+ # This file is bundled with the CLI and is not part of the user's project.
5
+
6
+ type: object
7
+ additionalProperties: false
8
+ properties:
9
+ localFields:
10
+ type: array
11
+ maxItems: 256
12
+ items:
13
+ $ref: '#/$defs/localField'
14
+ referencedFields:
15
+ type: array
16
+ maxItems: 256
17
+ items:
18
+ $ref: '#/$defs/referenceField'
19
+ title:
20
+ type: string
21
+ minLength: 1
22
+ maxLength: 256
23
+ description:
24
+ type: string
25
+ minLength: 1
26
+ maxLength: 256
27
+ url:
28
+ type: string
29
+ minLength: 1
30
+ maxLength: 256
31
+ image:
32
+ type: string
33
+ minLength: 1
34
+ maxLength: 256
35
+ documentType:
36
+ type: string
37
+ minLength: 1
38
+ maxLength: 256
39
+
40
+ $defs:
41
+ arrayJoin:
42
+ type: object
43
+ required: [path]
44
+ additionalProperties: false
45
+ properties:
46
+ path:
47
+ type: string
48
+ minLength: 1
49
+ maxLength: 256
50
+ prefix:
51
+ type: string
52
+ minLength: 1
53
+ maxLength: 256
54
+ separator:
55
+ type: string
56
+ minLength: 1
57
+ maxLength: 256
58
+ suffix:
59
+ type: string
60
+ minLength: 1
61
+ maxLength: 256
62
+
63
+ localField:
64
+ type: object
65
+ required: [name]
66
+ additionalProperties: false
67
+ properties:
68
+ name:
69
+ type: string
70
+ minLength: 1
71
+ maxLength: 256
72
+ path:
73
+ type: string
74
+ minLength: 1
75
+ maxLength: 256
76
+ arrayJoin:
77
+ $ref: '#/$defs/arrayJoin'
78
+
79
+ reference:
80
+ type: object
81
+ required: [path]
82
+ additionalProperties: false
83
+ properties:
84
+ path:
85
+ type: string
86
+ minLength: 1
87
+ maxLength: 256
88
+ fields:
89
+ type: array
90
+ maxItems: 256
91
+ items:
92
+ $ref: '#/$defs/localField'
93
+
94
+ multiReference:
95
+ type: object
96
+ required: [path]
97
+ additionalProperties: false
98
+ properties:
99
+ path:
100
+ type: string
101
+ minLength: 1
102
+ maxLength: 256
103
+ limit:
104
+ type: integer
105
+ minimum: 1
106
+ maximum: 100
107
+ fields:
108
+ type: array
109
+ maxItems: 256
110
+ items:
111
+ $ref: '#/$defs/localField'
112
+
113
+ referenceField:
114
+ type: object
115
+ required: [name]
116
+ additionalProperties: false
117
+ properties:
118
+ name:
119
+ type: string
120
+ minLength: 1
121
+ maxLength: 256
122
+ single:
123
+ $ref: '#/$defs/reference'
124
+ multi:
125
+ $ref: '#/$defs/multiReference'
126
+ `;
127
+ }
128
+ //# sourceMappingURL=cmsMappingSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["cmsMappingSchemaTemplate"],"sources":["../../../src/templates/cmsMappingSchema.ts"],"sourcesContent":["export function cmsMappingSchemaTemplate(): string {\n return `# JSON Schema for cms-mapping.yaml\n# Validates the CmsMapping projection from CMS data items to AI Assistant documents.\n# This file is bundled with the CLI and is not part of the user's project.\n\ntype: object\nadditionalProperties: false\nproperties:\n localFields:\n type: array\n maxItems: 256\n items:\n $ref: '#/$defs/localField'\n referencedFields:\n type: array\n maxItems: 256\n items:\n $ref: '#/$defs/referenceField'\n title:\n type: string\n minLength: 1\n maxLength: 256\n description:\n type: string\n minLength: 1\n maxLength: 256\n url:\n type: string\n minLength: 1\n maxLength: 256\n image:\n type: string\n minLength: 1\n maxLength: 256\n documentType:\n type: string\n minLength: 1\n maxLength: 256\n\n$defs:\n arrayJoin:\n type: object\n required: [path]\n additionalProperties: false\n properties:\n path:\n type: string\n minLength: 1\n maxLength: 256\n prefix:\n type: string\n minLength: 1\n maxLength: 256\n separator:\n type: string\n minLength: 1\n maxLength: 256\n suffix:\n type: string\n minLength: 1\n maxLength: 256\n\n localField:\n type: object\n required: [name]\n additionalProperties: false\n properties:\n name:\n type: string\n minLength: 1\n maxLength: 256\n path:\n type: string\n minLength: 1\n maxLength: 256\n arrayJoin:\n $ref: '#/$defs/arrayJoin'\n\n reference:\n type: object\n required: [path]\n additionalProperties: false\n properties:\n path:\n type: string\n minLength: 1\n maxLength: 256\n fields:\n type: array\n maxItems: 256\n items:\n $ref: '#/$defs/localField'\n\n multiReference:\n type: object\n required: [path]\n additionalProperties: false\n properties:\n path:\n type: string\n minLength: 1\n maxLength: 256\n limit:\n type: integer\n minimum: 1\n maximum: 100\n fields:\n type: array\n maxItems: 256\n items:\n $ref: '#/$defs/localField'\n\n referenceField:\n type: object\n required: [name]\n additionalProperties: false\n properties:\n name:\n type: string\n minLength: 1\n maxLength: 256\n single:\n $ref: '#/$defs/reference'\n multi:\n $ref: '#/$defs/multiReference'\n`;\n}\n"],"mappings":"AAAA,OAAO,SAASA,wBAAwBA,CAAA,EAAW;EACjD,OAAO;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD","ignoreList":[]}
@@ -28,4 +28,19 @@ export function findProjectRoot(startDir) {
28
28
  }
29
29
  return null;
30
30
  }
31
+ export function getProjectMsid(startDir) {
32
+ if (startDir === void 0) {
33
+ startDir = process.cwd();
34
+ }
35
+ const root = findProjectRoot(startDir);
36
+ if (!root) {
37
+ return null;
38
+ }
39
+ const config = readConfig(root);
40
+ const msid = config.msid;
41
+ if (!msid || typeof msid !== 'string' || msid.trim() === '') {
42
+ return null;
43
+ }
44
+ return msid.trim();
45
+ }
31
46
  //# sourceMappingURL=project.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["fs","path","readConfig","root","configPath","join","JSON","parse","readFileSync","writeConfig","config","writeFileSync","stringify","findProjectRoot","startDir","current","parent","dirname","existsSync"],"sources":["../../../src/utils/project.ts"],"sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface Web5Config {\n $schema?: string;\n packageName?: string;\n displayName?: string;\n msid?: string;\n clientId?: string;\n [key: string]: unknown;\n}\n\nexport function readConfig(root: string): Web5Config {\n const configPath = path.join(root, 'web5.config.json');\n return JSON.parse(fs.readFileSync(configPath, 'utf8')) as Web5Config;\n}\n\nexport function writeConfig(root: string, config: Web5Config): void {\n const configPath = path.join(root, 'web5.config.json');\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\\n', 'utf8');\n}\n\n/**\n * Walk up from startDir until we find a directory containing web5.config.json.\n * Returns that directory, or null if none found.\n */\nexport function findProjectRoot(startDir: string): string | null {\n let current = startDir;\n let parent = path.dirname(current);\n while (current !== parent) {\n if (fs.existsSync(path.join(current, 'web5.config.json'))) {\n return current;\n }\n current = parent;\n parent = path.dirname(current);\n }\n if (fs.existsSync(path.join(current, 'web5.config.json'))) {\n return current;\n }\n return null;\n}\n"],"mappings":"AAAA,OAAO,KAAKA,EAAE,MAAM,IAAI;AACxB,OAAO,KAAKC,IAAI,MAAM,MAAM;AAW5B,OAAO,SAASC,UAAUA,CAACC,IAAY,EAAc;EACnD,MAAMC,UAAU,GAAGH,IAAI,CAACI,IAAI,CAACF,IAAI,EAAE,kBAAkB,CAAC;EACtD,OAAOG,IAAI,CAACC,KAAK,CAACP,EAAE,CAACQ,YAAY,CAACJ,UAAU,EAAE,MAAM,CAAC,CAAC;AACxD;AAEA,OAAO,SAASK,WAAWA,CAACN,IAAY,EAAEO,MAAkB,EAAQ;EAClE,MAAMN,UAAU,GAAGH,IAAI,CAACI,IAAI,CAACF,IAAI,EAAE,kBAAkB,CAAC;EACtDH,EAAE,CAACW,aAAa,CAACP,UAAU,EAAEE,IAAI,CAACM,SAAS,CAACF,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC;AAC9E;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASG,eAAeA,CAACC,QAAgB,EAAiB;EAC/D,IAAIC,OAAO,GAAGD,QAAQ;EACtB,IAAIE,MAAM,GAAGf,IAAI,CAACgB,OAAO,CAACF,OAAO,CAAC;EAClC,OAAOA,OAAO,KAAKC,MAAM,EAAE;IACzB,IAAIhB,EAAE,CAACkB,UAAU,CAACjB,IAAI,CAACI,IAAI,CAACU,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE;MACzD,OAAOA,OAAO;IAChB;IACAA,OAAO,GAAGC,MAAM;IAChBA,MAAM,GAAGf,IAAI,CAACgB,OAAO,CAACF,OAAO,CAAC;EAChC;EACA,IAAIf,EAAE,CAACkB,UAAU,CAACjB,IAAI,CAACI,IAAI,CAACU,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE;IACzD,OAAOA,OAAO;EAChB;EACA,OAAO,IAAI;AACb","ignoreList":[]}
1
+ {"version":3,"names":["fs","path","readConfig","root","configPath","join","JSON","parse","readFileSync","writeConfig","config","writeFileSync","stringify","findProjectRoot","startDir","current","parent","dirname","existsSync","getProjectMsid","process","cwd","msid","trim"],"sources":["../../../src/utils/project.ts"],"sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface Web5Config {\n $schema?: string;\n packageName?: string;\n displayName?: string;\n msid?: string;\n clientId?: string;\n platformType?: 'Content' | 'Ecommerce';\n [key: string]: unknown;\n}\n\nexport function readConfig(root: string): Web5Config {\n const configPath = path.join(root, 'web5.config.json');\n return JSON.parse(fs.readFileSync(configPath, 'utf8')) as Web5Config;\n}\n\nexport function writeConfig(root: string, config: Web5Config): void {\n const configPath = path.join(root, 'web5.config.json');\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\\n', 'utf8');\n}\n\n/**\n * Walk up from startDir until we find a directory containing web5.config.json.\n * Returns that directory, or null if none found.\n */\nexport function findProjectRoot(startDir: string): string | null {\n let current = startDir;\n let parent = path.dirname(current);\n while (current !== parent) {\n if (fs.existsSync(path.join(current, 'web5.config.json'))) {\n return current;\n }\n current = parent;\n parent = path.dirname(current);\n }\n if (fs.existsSync(path.join(current, 'web5.config.json'))) {\n return current;\n }\n return null;\n}\n\nexport function getProjectMsid(\n startDir: string = process.cwd(),\n): string | null {\n const root = findProjectRoot(startDir);\n if (!root) {\n return null;\n }\n const config = readConfig(root);\n const msid = config.msid;\n if (!msid || typeof msid !== 'string' || msid.trim() === '') {\n return null;\n }\n return msid.trim();\n}\n"],"mappings":"AAAA,OAAO,KAAKA,EAAE,MAAM,IAAI;AACxB,OAAO,KAAKC,IAAI,MAAM,MAAM;AAY5B,OAAO,SAASC,UAAUA,CAACC,IAAY,EAAc;EACnD,MAAMC,UAAU,GAAGH,IAAI,CAACI,IAAI,CAACF,IAAI,EAAE,kBAAkB,CAAC;EACtD,OAAOG,IAAI,CAACC,KAAK,CAACP,EAAE,CAACQ,YAAY,CAACJ,UAAU,EAAE,MAAM,CAAC,CAAC;AACxD;AAEA,OAAO,SAASK,WAAWA,CAACN,IAAY,EAAEO,MAAkB,EAAQ;EAClE,MAAMN,UAAU,GAAGH,IAAI,CAACI,IAAI,CAACF,IAAI,EAAE,kBAAkB,CAAC;EACtDH,EAAE,CAACW,aAAa,CAACP,UAAU,EAAEE,IAAI,CAACM,SAAS,CAACF,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC;AAC9E;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASG,eAAeA,CAACC,QAAgB,EAAiB;EAC/D,IAAIC,OAAO,GAAGD,QAAQ;EACtB,IAAIE,MAAM,GAAGf,IAAI,CAACgB,OAAO,CAACF,OAAO,CAAC;EAClC,OAAOA,OAAO,KAAKC,MAAM,EAAE;IACzB,IAAIhB,EAAE,CAACkB,UAAU,CAACjB,IAAI,CAACI,IAAI,CAACU,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE;MACzD,OAAOA,OAAO;IAChB;IACAA,OAAO,GAAGC,MAAM;IAChBA,MAAM,GAAGf,IAAI,CAACgB,OAAO,CAACF,OAAO,CAAC;EAChC;EACA,IAAIf,EAAE,CAACkB,UAAU,CAACjB,IAAI,CAACI,IAAI,CAACU,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE;IACzD,OAAOA,OAAO;EAChB;EACA,OAAO,IAAI;AACb;AAEA,OAAO,SAASI,cAAcA,CAC5BL,QAAgB,EACD;EAAA,IADfA,QAAgB;IAAhBA,QAAgB,GAAGM,OAAO,CAACC,GAAG,CAAC,CAAC;EAAA;EAEhC,MAAMlB,IAAI,GAAGU,eAAe,CAACC,QAAQ,CAAC;EACtC,IAAI,CAACX,IAAI,EAAE;IACT,OAAO,IAAI;EACb;EACA,MAAMO,MAAM,GAAGR,UAAU,CAACC,IAAI,CAAC;EAC/B,MAAMmB,IAAI,GAAGZ,MAAM,CAACY,IAAI;EACxB,IAAI,CAACA,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAIA,IAAI,CAACC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;IAC3D,OAAO,IAAI;EACb;EACA,OAAOD,IAAI,CAACC,IAAI,CAAC,CAAC;AACpB","ignoreList":[]}
@@ -1,4 +1,5 @@
1
- import { getToken } from '../auth';
1
+ import { getToken, getTokenForSite } from '../auth';
2
+ import { getProjectMsid } from './project';
2
3
  const BASE_URL = 'https://www.wixapis.com';
3
4
  export async function wixRequest(options) {
4
5
  const {
@@ -8,7 +9,8 @@ export async function wixRequest(options) {
8
9
  body,
9
10
  verbose = false
10
11
  } = options;
11
- const token = await getToken();
12
+ const projectMsid = getProjectMsid(process.cwd());
13
+ const token = projectMsid ? await getTokenForSite(projectMsid) : await getToken();
12
14
  if (!token) {
13
15
  throw new Error('Not authenticated. Run `web5 login` first.');
14
16
  }
@@ -1 +1 @@
1
- {"version":3,"names":["getToken","BASE_URL","wixRequest","options","path","method","params","body","verbose","token","Error","url","URL","key","value","Object","entries","searchParams","set","console","error","toString","undefined","JSON","stringify","res","fetch","headers","Authorization","text","status","statusText","parse","slice"],"sources":["../../../src/utils/wixApi.ts"],"sourcesContent":["import { getToken } from '../auth';\n\nconst BASE_URL = 'https://www.wixapis.com';\n\nexport interface WixRequestOptions {\n path: string;\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n params?: Record<string, string>;\n body?: unknown;\n verbose?: boolean;\n}\n\nexport async function wixRequest<T = unknown>(\n options: WixRequestOptions,\n): Promise<T> {\n const { path, method = 'GET', params, body, verbose = false } = options;\n\n const token = await getToken();\n if (!token) {\n throw new Error('Not authenticated. Run `web5 login` first.');\n }\n\n const url = new URL(`${BASE_URL}${path}`);\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n url.searchParams.set(key, value);\n }\n }\n\n if (verbose) {\n console.error(`[LOG] ${method} ${url.toString()}`);\n if (body !== undefined) {\n console.error(`[LOG] body: ${JSON.stringify(body)}`);\n }\n }\n\n const res = await fetch(url.toString(), {\n method,\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n });\n\n const text = await res.text();\n\n if (verbose) {\n console.error(`[LOG] HTTP ${res.status} ${res.statusText}`);\n console.error(`[LOG] response: ${text}`);\n }\n\n if (!text) {\n throw new Error(\n `Empty response from ${method} ${path} (HTTP ${res.status})`,\n );\n }\n\n try {\n return JSON.parse(text) as T;\n } catch {\n throw new Error(\n `Invalid JSON from ${method} ${path} (HTTP ${res.status}): ${text.slice(\n 0,\n 200,\n )}`,\n );\n }\n}\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,SAAS;AAElC,MAAMC,QAAQ,GAAG,yBAAyB;AAU1C,OAAO,eAAeC,UAAUA,CAC9BC,OAA0B,EACd;EACZ,MAAM;IAAEC,IAAI;IAAEC,MAAM,GAAG,KAAK;IAAEC,MAAM;IAAEC,IAAI;IAAEC,OAAO,GAAG;EAAM,CAAC,GAAGL,OAAO;EAEvE,MAAMM,KAAK,GAAG,MAAMT,QAAQ,CAAC,CAAC;EAC9B,IAAI,CAACS,KAAK,EAAE;IACV,MAAM,IAAIC,KAAK,CAAC,4CAA4C,CAAC;EAC/D;EAEA,MAAMC,GAAG,GAAG,IAAIC,GAAG,CAAC,GAAGX,QAAQ,GAAGG,IAAI,EAAE,CAAC;EACzC,IAAIE,MAAM,EAAE;IACV,KAAK,MAAM,CAACO,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACV,MAAM,CAAC,EAAE;MACjDK,GAAG,CAACM,YAAY,CAACC,GAAG,CAACL,GAAG,EAAEC,KAAK,CAAC;IAClC;EACF;EAEA,IAAIN,OAAO,EAAE;IACXW,OAAO,CAACC,KAAK,CAAC,SAASf,MAAM,IAAIM,GAAG,CAACU,QAAQ,CAAC,CAAC,EAAE,CAAC;IAClD,IAAId,IAAI,KAAKe,SAAS,EAAE;MACtBH,OAAO,CAACC,KAAK,CAAC,eAAeG,IAAI,CAACC,SAAS,CAACjB,IAAI,CAAC,EAAE,CAAC;IACtD;EACF;EAEA,MAAMkB,GAAG,GAAG,MAAMC,KAAK,CAACf,GAAG,CAACU,QAAQ,CAAC,CAAC,EAAE;IACtChB,MAAM;IACNsB,OAAO,EAAE;MACPC,aAAa,EAAE,UAAUnB,KAAK,EAAE;MAChC,cAAc,EAAE;IAClB,CAAC;IACD,IAAIF,IAAI,KAAKe,SAAS,GAAG;MAAEf,IAAI,EAAEgB,IAAI,CAACC,SAAS,CAACjB,IAAI;IAAE,CAAC,GAAG,CAAC,CAAC;EAC9D,CAAC,CAAC;EAEF,MAAMsB,IAAI,GAAG,MAAMJ,GAAG,CAACI,IAAI,CAAC,CAAC;EAE7B,IAAIrB,OAAO,EAAE;IACXW,OAAO,CAACC,KAAK,CAAC,cAAcK,GAAG,CAACK,MAAM,IAAIL,GAAG,CAACM,UAAU,EAAE,CAAC;IAC3DZ,OAAO,CAACC,KAAK,CAAC,mBAAmBS,IAAI,EAAE,CAAC;EAC1C;EAEA,IAAI,CAACA,IAAI,EAAE;IACT,MAAM,IAAInB,KAAK,CACb,uBAAuBL,MAAM,IAAID,IAAI,UAAUqB,GAAG,CAACK,MAAM,GAC3D,CAAC;EACH;EAEA,IAAI;IACF,OAAOP,IAAI,CAACS,KAAK,CAACH,IAAI,CAAC;EACzB,CAAC,CAAC,MAAM;IACN,MAAM,IAAInB,KAAK,CACb,qBAAqBL,MAAM,IAAID,IAAI,UAAUqB,GAAG,CAACK,MAAM,MAAMD,IAAI,CAACI,KAAK,CACrE,CAAC,EACD,GACF,CAAC,EACH,CAAC;EACH;AACF","ignoreList":[]}
1
+ {"version":3,"names":["getToken","getTokenForSite","getProjectMsid","BASE_URL","wixRequest","options","path","method","params","body","verbose","projectMsid","process","cwd","token","Error","url","URL","key","value","Object","entries","searchParams","set","console","error","toString","undefined","JSON","stringify","res","fetch","headers","Authorization","text","status","statusText","parse","slice"],"sources":["../../../src/utils/wixApi.ts"],"sourcesContent":["import { getToken, getTokenForSite } from '../auth';\nimport { getProjectMsid } from './project';\n\nconst BASE_URL = 'https://www.wixapis.com';\n\nexport interface WixRequestOptions {\n path: string;\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n params?: Record<string, string>;\n body?: unknown;\n verbose?: boolean;\n}\n\nexport async function wixRequest<T = unknown>(\n options: WixRequestOptions,\n): Promise<T> {\n const { path, method = 'GET', params, body, verbose = false } = options;\n\n const projectMsid = getProjectMsid(process.cwd());\n const token = projectMsid\n ? await getTokenForSite(projectMsid)\n : await getToken();\n if (!token) {\n throw new Error('Not authenticated. Run `web5 login` first.');\n }\n\n const url = new URL(`${BASE_URL}${path}`);\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n url.searchParams.set(key, value);\n }\n }\n\n if (verbose) {\n console.error(`[LOG] ${method} ${url.toString()}`);\n if (body !== undefined) {\n console.error(`[LOG] body: ${JSON.stringify(body)}`);\n }\n }\n\n const res = await fetch(url.toString(), {\n method,\n headers: {\n Authorization: `Bearer ${token}`,\n 'Content-Type': 'application/json',\n },\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n });\n\n const text = await res.text();\n\n if (verbose) {\n console.error(`[LOG] HTTP ${res.status} ${res.statusText}`);\n console.error(`[LOG] response: ${text}`);\n }\n\n if (!text) {\n throw new Error(\n `Empty response from ${method} ${path} (HTTP ${res.status})`,\n );\n }\n\n try {\n return JSON.parse(text) as T;\n } catch {\n throw new Error(\n `Invalid JSON from ${method} ${path} (HTTP ${res.status}): ${text.slice(\n 0,\n 200,\n )}`,\n );\n }\n}\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,eAAe,QAAQ,SAAS;AACnD,SAASC,cAAc,QAAQ,WAAW;AAE1C,MAAMC,QAAQ,GAAG,yBAAyB;AAU1C,OAAO,eAAeC,UAAUA,CAC9BC,OAA0B,EACd;EACZ,MAAM;IAAEC,IAAI;IAAEC,MAAM,GAAG,KAAK;IAAEC,MAAM;IAAEC,IAAI;IAAEC,OAAO,GAAG;EAAM,CAAC,GAAGL,OAAO;EAEvE,MAAMM,WAAW,GAAGT,cAAc,CAACU,OAAO,CAACC,GAAG,CAAC,CAAC,CAAC;EACjD,MAAMC,KAAK,GAAGH,WAAW,GACrB,MAAMV,eAAe,CAACU,WAAW,CAAC,GAClC,MAAMX,QAAQ,CAAC,CAAC;EACpB,IAAI,CAACc,KAAK,EAAE;IACV,MAAM,IAAIC,KAAK,CAAC,4CAA4C,CAAC;EAC/D;EAEA,MAAMC,GAAG,GAAG,IAAIC,GAAG,CAAC,GAAGd,QAAQ,GAAGG,IAAI,EAAE,CAAC;EACzC,IAAIE,MAAM,EAAE;IACV,KAAK,MAAM,CAACU,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACb,MAAM,CAAC,EAAE;MACjDQ,GAAG,CAACM,YAAY,CAACC,GAAG,CAACL,GAAG,EAAEC,KAAK,CAAC;IAClC;EACF;EAEA,IAAIT,OAAO,EAAE;IACXc,OAAO,CAACC,KAAK,CAAC,SAASlB,MAAM,IAAIS,GAAG,CAACU,QAAQ,CAAC,CAAC,EAAE,CAAC;IAClD,IAAIjB,IAAI,KAAKkB,SAAS,EAAE;MACtBH,OAAO,CAACC,KAAK,CAAC,eAAeG,IAAI,CAACC,SAAS,CAACpB,IAAI,CAAC,EAAE,CAAC;IACtD;EACF;EAEA,MAAMqB,GAAG,GAAG,MAAMC,KAAK,CAACf,GAAG,CAACU,QAAQ,CAAC,CAAC,EAAE;IACtCnB,MAAM;IACNyB,OAAO,EAAE;MACPC,aAAa,EAAE,UAAUnB,KAAK,EAAE;MAChC,cAAc,EAAE;IAClB,CAAC;IACD,IAAIL,IAAI,KAAKkB,SAAS,GAAG;MAAElB,IAAI,EAAEmB,IAAI,CAACC,SAAS,CAACpB,IAAI;IAAE,CAAC,GAAG,CAAC,CAAC;EAC9D,CAAC,CAAC;EAEF,MAAMyB,IAAI,GAAG,MAAMJ,GAAG,CAACI,IAAI,CAAC,CAAC;EAE7B,IAAIxB,OAAO,EAAE;IACXc,OAAO,CAACC,KAAK,CAAC,cAAcK,GAAG,CAACK,MAAM,IAAIL,GAAG,CAACM,UAAU,EAAE,CAAC;IAC3DZ,OAAO,CAACC,KAAK,CAAC,mBAAmBS,IAAI,EAAE,CAAC;EAC1C;EAEA,IAAI,CAACA,IAAI,EAAE;IACT,MAAM,IAAInB,KAAK,CACb,uBAAuBR,MAAM,IAAID,IAAI,UAAUwB,GAAG,CAACK,MAAM,GAC3D,CAAC;EACH;EAEA,IAAI;IACF,OAAOP,IAAI,CAACS,KAAK,CAACH,IAAI,CAAC;EACzB,CAAC,CAAC,MAAM;IACN,MAAM,IAAInB,KAAK,CACb,qBAAqBR,MAAM,IAAID,IAAI,UAAUwB,GAAG,CAACK,MAAM,MAAMD,IAAI,CAACI,KAAK,CACrE,CAAC,EACD,GACF,CAAC,EACH,CAAC;EACH;AACF","ignoreList":[]}