@json-to-office/shared-docx 0.19.0 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@ import {
6
6
  strictDocumentValidator,
7
7
  validateAgainstSchema,
8
8
  validateJson
9
- } from "./chunk-TIQSCGX7.js";
9
+ } from "./chunk-WTKEDXYL.js";
10
10
  import {
11
11
  ComponentDefinitionSchema
12
12
  } from "./chunk-5KQFVW6L.js";
@@ -416,4 +416,4 @@ export {
416
416
  createErrorConfig,
417
417
  formatErrorMessage
418
418
  };
419
- //# sourceMappingURL=chunk-U574TQ3W.js.map
419
+ //# sourceMappingURL=chunk-JY5JBFBA.js.map
@@ -370,99 +370,94 @@ function deepValidateDocument(data, opts = {}) {
370
370
  message: 'Field "children" must be an array',
371
371
  code: "invalid_type"
372
372
  });
373
- } else {
374
- data.children.forEach((child, index) => {
375
- const childPath = `/children/${index}`;
376
- if (!child || typeof child !== "object") {
377
- allErrors.push({
373
+ }
374
+ walkComponentTree(data, "", opts, allErrors);
375
+ return allErrors;
376
+ }
377
+ function walkComponentTree(node, path, opts, errors) {
378
+ if (!node || typeof node !== "object") return;
379
+ const validateEntry = (child, childPath, strictStructure) => {
380
+ if (!child || typeof child !== "object") {
381
+ if (strictStructure) {
382
+ errors.push({
378
383
  path: childPath,
379
384
  message: "Component must be an object",
380
385
  code: "invalid_type"
381
386
  });
382
- return;
383
387
  }
384
- if (!child.name) {
385
- allErrors.push({
388
+ return;
389
+ }
390
+ if (typeof child.name !== "string" || child.name.length === 0) {
391
+ if (strictStructure) {
392
+ errors.push({
386
393
  path: `${childPath}/name`,
387
394
  message: 'Component missing required field "name"',
388
395
  code: "required_property"
389
396
  });
390
- return;
391
397
  }
392
- if (opts.knownCustomNames?.has(child.name)) {
393
- return;
394
- }
395
- if (child.props != null) {
396
- allErrors.push(
397
- ...validateComponentProps(
398
- child.name,
399
- child.props,
400
- `${childPath}/props`,
401
- opts
402
- )
403
- );
404
- } else if (child.name !== "custom") {
405
- allErrors.push(
406
- ...validateComponentProps(child.name, {}, `${childPath}/props`, opts)
407
- );
398
+ return;
399
+ }
400
+ if (opts.knownCustomNames?.has(child.name)) return;
401
+ if (child.props != null) {
402
+ errors.push(
403
+ ...validateComponentProps(
404
+ child.name,
405
+ child.props,
406
+ `${childPath}/props`,
407
+ opts
408
+ )
409
+ );
410
+ } else if (child.name !== "custom") {
411
+ errors.push(
412
+ ...validateComponentProps(child.name, {}, `${childPath}/props`, opts)
413
+ );
414
+ }
415
+ walkComponentTree(child, childPath, opts, errors);
416
+ };
417
+ for (const region of ["header", "footer"]) {
418
+ const entries = node.props?.[region];
419
+ if (Array.isArray(entries)) {
420
+ entries.forEach(
421
+ (child, i) => validateEntry(child, `${path}/props/${region}/${i}`, true)
422
+ );
423
+ }
424
+ }
425
+ if (node.name === "table" && Array.isArray(node.props?.columns)) {
426
+ node.props.columns.forEach((col, c) => {
427
+ if (!col || typeof col !== "object") return;
428
+ const base = `${path}/props/columns/${c}`;
429
+ const headerContent = col.header?.content;
430
+ if (headerContent && typeof headerContent === "object") {
431
+ validateEntry(headerContent, `${base}/header/content`, false);
408
432
  }
409
- if (child.name === "section" && child.children) {
410
- if (!Array.isArray(child.children)) {
411
- allErrors.push({
412
- path: `${childPath}/children`,
413
- message: "Section children must be an array",
414
- code: "invalid_type"
415
- });
416
- } else {
417
- child.children.forEach((nestedChild, nestedIndex) => {
418
- const nestedChildPath = `${childPath}/children/${nestedIndex}`;
419
- if (!nestedChild || typeof nestedChild !== "object") {
420
- allErrors.push({
421
- path: nestedChildPath,
422
- message: "Nested component must be an object",
423
- code: "invalid_type"
424
- });
425
- return;
426
- }
427
- if (!nestedChild.name) {
428
- allErrors.push({
429
- path: `${nestedChildPath}/name`,
430
- message: 'Nested component missing required field "name"',
431
- code: "required_property"
432
- });
433
- } else if (opts.knownCustomNames?.has(nestedChild.name)) {
434
- } else if (nestedChild.props != null) {
435
- allErrors.push(
436
- ...validateComponentProps(
437
- nestedChild.name,
438
- nestedChild.props,
439
- `${nestedChildPath}/props`,
440
- opts
441
- )
442
- );
443
- } else if (nestedChild.name !== "custom") {
444
- allErrors.push(
445
- ...validateComponentProps(
446
- nestedChild.name,
447
- {},
448
- `${nestedChildPath}/props`,
449
- opts
450
- )
451
- );
452
- }
453
- });
454
- }
433
+ if (Array.isArray(col.cells)) {
434
+ col.cells.forEach((cell, r) => {
435
+ const content = cell?.content;
436
+ if (content && typeof content === "object") {
437
+ validateEntry(content, `${base}/cells/${r}/content`, false);
438
+ }
439
+ });
455
440
  }
456
441
  });
457
442
  }
458
- return allErrors;
443
+ if (Array.isArray(node.children)) {
444
+ node.children.forEach(
445
+ (child, i) => validateEntry(child, `${path}/children/${i}`, true)
446
+ );
447
+ } else if (node.children != null && path !== "") {
448
+ errors.push({
449
+ path: `${path}/children`,
450
+ message: 'Field "children" must be an array',
451
+ code: "invalid_type"
452
+ });
453
+ }
459
454
  }
460
455
  function validateComponentProps(componentName, props, basePath, opts = {}) {
461
456
  const errors = [];
462
457
  const schema = COMPONENT_SCHEMAS[componentName];
463
458
  if (!schema) {
464
459
  errors.push({
465
- path: basePath.replace("/props", "/name"),
460
+ path: basePath.replace(/\/props$/, "/name"),
466
461
  message: `Unknown component "${componentName}"`,
467
462
  code: "unknown_component"
468
463
  });
@@ -818,4 +813,4 @@ export {
818
813
  validateJsonComponent,
819
814
  validateDocumentWithSchema
820
815
  };
821
- //# sourceMappingURL=chunk-TIQSCGX7.js.map
816
+ //# sourceMappingURL=chunk-WTKEDXYL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/validation/unified/error-transformer.ts","../src/validation/unified/deep-validator.ts","../src/validation/unified/base-validator.ts","../src/validation/unified/document-validator.ts"],"sourcesContent":["/**\n * Unified error transformation utilities\n * Converts TypeBox ValueError objects to standardized ValidationError format\n */\n\nimport type { ValueError } from '@sinclair/typebox/value';\nimport type { ValidationError } from '@json-to-office/shared';\nimport { ReportPropsSchema } from '../../schemas/components/report';\nimport {\n isObjectSchema,\n getObjectSchemaPropertyNames,\n getLiteralValue,\n type ErrorFormatterConfig,\n createErrorConfig,\n formatErrorMessage,\n ERROR_EMOJIS,\n} from '@json-to-office/shared';\n\n/**\n * Generate enhanced error message based on error type and context\n */\nfunction generateEnhancedMessage(\n error: ValueError,\n _config: Required<ErrorFormatterConfig>\n): string {\n const typeStr = String(error.type || '');\n const path = error.path || 'root';\n\n // Handle union errors specially - these are the most common and least helpful\n if (typeStr === '62' || typeStr === 'union') {\n return generateUnionErrorMessage(error);\n }\n\n // Handle additional properties error\n if (error.message?.includes('additionalProperties')) {\n return generateAdditionalPropertiesMessage(error);\n }\n\n // Handle missing required properties\n if (error.message?.includes('Required property')) {\n return generateRequiredPropertyMessage(error);\n }\n\n // Handle type mismatches\n if (\n typeStr === 'string' ||\n typeStr === 'number' ||\n typeStr === 'boolean' ||\n typeStr === 'array' ||\n typeStr === 'object'\n ) {\n return generateTypeMismatchMessage(error);\n }\n\n // Handle literal value errors\n if (typeStr === 'literal') {\n return generateLiteralErrorMessage(error);\n }\n\n // Handle pattern/regex errors\n if (typeStr === 'pattern' || typeStr === 'RegExp') {\n return generatePatternErrorMessage(error);\n }\n\n // Default to original message with some context\n return `At ${path}: ${error.message}`;\n}\n\n/**\n * Generate message for union validation errors\n */\nfunction generateUnionErrorMessage(error: ValueError): string {\n const path = error.path || 'root';\n const value = error.value;\n\n // Try to determine what the user was attempting\n if (path === 'root' || path === '/' || path === '/jsonDefinition') {\n // Root level or jsonDefinition union error - likely a document type issue\n if (value && typeof value === 'object') {\n if ('name' in value) {\n const name = value.name;\n if (name === 'docx') {\n return 'Document structure appears valid but contains invalid component configurations. Check each component for errors.';\n }\n return `Unknown document name '${name}'. Expected 'docx'.`;\n }\n\n // Missing name field\n const valueAny = value as Record<string, unknown>;\n if ('children' in value && Array.isArray(valueAny.children)) {\n return 'Document is missing required \\'name\\' field. Add \"name\": \"docx\" at the root level.';\n }\n\n // Check if it might be a theme\n if ('name' in value || 'styles' in value) {\n return 'This appears to be a theme configuration. Use --type theme or ensure proper document structure.';\n }\n }\n return 'Invalid document structure. Expected a document with name=\"docx\" or a theme configuration.';\n }\n\n // Component-level union error\n if (path.includes('/children/')) {\n if (value && typeof value === 'object' && 'name' in value) {\n const componentType = (value as any).name;\n return `Invalid component configuration for type '${componentType}'. Check that all required fields are present and correctly formatted.`;\n }\n return 'Invalid component structure. Each component must have a \"name\" field and valid configuration.';\n }\n\n // Default union error message\n return `Value at ${path} doesn't match any of the expected formats. Check the structure and required fields.`;\n}\n\n/**\n * Generate message for additional properties errors\n */\nfunction generateAdditionalPropertiesMessage(error: ValueError): string {\n const path = error.path || 'root';\n const value = error.value;\n\n if (typeof value === 'object' && value !== null) {\n // Try to identify the unknown properties\n const schema = error.schema;\n if (schema && isObjectSchema(schema)) {\n const knownProps = getObjectSchemaPropertyNames(schema);\n const actualProps = Object.keys(value);\n const unknownProps = actualProps.filter((p) => !knownProps.includes(p));\n\n if (unknownProps.length > 0) {\n return (\n `Unknown properties at ${path}: ${unknownProps.join(', ')}. ` +\n `Allowed properties are: ${knownProps.join(', ')}`\n );\n }\n }\n }\n\n return `Additional properties not allowed at ${path}. Check for typos or unsupported fields.`;\n}\n\n/**\n * Generate message for required property errors\n */\nfunction generateRequiredPropertyMessage(error: ValueError): string {\n const path = error.path || 'root';\n const match = error.message?.match(/Required property '([^']+)'/);\n\n if (match) {\n const propName = match[1];\n return `Missing required field '${propName}' at ${path}. This field is mandatory for this configuration.`;\n }\n\n return `Missing required property at ${path}. Check that all mandatory fields are present.`;\n}\n\n/**\n * Generate message for type mismatch errors\n */\nfunction generateTypeMismatchMessage(error: ValueError): string {\n const path = error.path || 'root';\n const expectedType = String(error.type);\n const actualType = Array.isArray(error.value) ? 'array' : typeof error.value;\n\n // Provide context-specific messages\n if (path.includes('alignment')) {\n return `Invalid alignment value at ${path}. Expected one of: left, center, right, justify`;\n }\n\n if (path.includes('color')) {\n return `Invalid color value at ${path}. Use hex format (#RRGGBB), rgb(r,g,b), or a named color`;\n }\n\n if (path.includes('fontSize') || path.includes('size')) {\n return `Invalid size value at ${path}. Expected a number (in points)`;\n }\n\n if (\n path.includes('margin') ||\n path.includes('padding') ||\n path.includes('spacing')\n ) {\n return `Invalid spacing value at ${path}. Expected a number or spacing object with top/bottom/left/right`;\n }\n\n return `Type mismatch at ${path}: Expected ${expectedType} but got ${actualType}`;\n}\n\n/**\n * Generate message for literal value errors\n */\nfunction generateLiteralErrorMessage(error: ValueError): string {\n const path = error.path || 'root';\n const expected = error.schema\n ? JSON.stringify(getLiteralValue(error.schema))\n : 'specific value';\n const actual = JSON.stringify(error.value);\n\n return `Invalid value at ${path}: Expected exactly ${expected} but got ${actual}`;\n}\n\n/**\n * Generate message for pattern/regex errors\n */\nfunction generatePatternErrorMessage(error: ValueError): string {\n const path = error.path || 'root';\n\n // Try to provide helpful context based on the path\n if (path.includes('email')) {\n return `Invalid email format at ${path}. Use format: user@example.com`;\n }\n\n if (path.includes('url') || path.includes('link')) {\n return `Invalid URL format at ${path}. Use format: https://example.com`;\n }\n\n if (path.includes('date')) {\n return `Invalid date format at ${path}. Use ISO format: YYYY-MM-DD`;\n }\n\n if (path.includes('phone')) {\n return `Invalid phone number format at ${path}`;\n }\n\n return `Value at ${path} doesn't match the required pattern`;\n}\n\n/**\n * Transform TypeBox ValueError to standardized ValidationError\n */\nexport function transformValueError(\n error: ValueError,\n jsonString?: string,\n config?: ErrorFormatterConfig\n): ValidationError {\n const formatterConfig = createErrorConfig(config);\n\n // Generate enhanced message based on error type\n const enhancedMessage = generateEnhancedMessage(error, formatterConfig);\n\n const baseError: ValidationError = {\n path: error.path || 'root',\n message: formatErrorMessage(\n enhancedMessage || error.message,\n formatterConfig\n ),\n code: String(error.type || 'validation_error'),\n value: error.value,\n };\n\n // Add suggestion if available and configured\n if (formatterConfig.includeSuggestions) {\n const suggestion = getSuggestion(error, formatterConfig);\n if (suggestion) {\n baseError.suggestion = formatErrorMessage(suggestion, formatterConfig);\n }\n }\n\n // Calculate line and column if JSON string is provided\n if (jsonString && error.path) {\n const position = calculatePosition(jsonString, error.path);\n if (position) {\n baseError.line = position.line;\n baseError.column = position.column;\n }\n }\n\n return baseError;\n}\n\n/**\n * Transform multiple TypeBox errors to ValidationError array\n * Enhanced to collect ALL errors, not just stopping at union failures\n */\nexport function transformValueErrors(\n errors: ValueError[],\n options?: {\n jsonString?: string;\n maxErrors?: number;\n }\n): ValidationError[] {\n const maxErrors = options?.maxErrors ?? Number.MAX_SAFE_INTEGER;\n const result: ValidationError[] = [];\n const seenPaths = new Set<string>();\n\n // Collect all errors, but avoid duplicates at the same path\n for (const error of errors) {\n if (result.length >= maxErrors) break;\n\n // Create a unique key for this error based on path and type\n const errorKey = `${error.path}:${error.type}`;\n\n // Skip if we've already seen an error at this exact path and type\n // This helps avoid duplicate union errors while still showing all unique issues\n if (!seenPaths.has(errorKey)) {\n seenPaths.add(errorKey);\n result.push(transformValueError(error, options?.jsonString, undefined));\n }\n }\n\n return result;\n}\n\n/**\n * Calculate line and column position in JSON string\n */\nexport function calculatePosition(\n jsonString: string,\n path: string\n): { line: number; column: number } | null {\n try {\n // Convert path like \"/children/0/props/title\" to searchable parts\n const pathParts = path.split('/').filter(Boolean);\n if (pathParts.length === 0) {\n return { line: 1, column: 1 };\n }\n\n // Try to find the last part of the path in the JSON\n const lastPart = pathParts[pathParts.length - 1];\n const searchPattern = `\"${lastPart}\"`;\n const index = jsonString.indexOf(searchPattern);\n\n if (index === -1) {\n // Try to find just the value if it's a property name\n return { line: 1, column: 1 };\n }\n\n // Calculate line and column from index\n const beforeError = jsonString.substring(0, index);\n const lines = beforeError.split('\\n');\n const line = lines.length;\n const column = lines[lines.length - 1].length + 1;\n\n return { line, column };\n } catch {\n return null;\n }\n}\n\n/**\n * Get helpful suggestion based on error type and context\n */\nfunction getSuggestion(\n error: ValueError,\n config: Required<ErrorFormatterConfig>\n): string | undefined {\n const { type, path, value } = error;\n const typeStr = String(type);\n\n // Enhanced suggestions for union errors\n if (typeStr === '62' || typeStr === 'union') {\n if (path === 'root' || path === '/') {\n if (value && typeof value === 'object') {\n if (!('name' in value)) {\n const msg = 'Add a \"name\" field with value \"docx\" for documents';\n return config.includeEmojis ? `${ERROR_EMOJIS.FIX} ${msg}` : msg;\n }\n if ('props' in value && typeof value.props === 'object') {\n const knownFields = getObjectSchemaPropertyNames(ReportPropsSchema);\n return `Review the props section for unsupported fields. Allowed fields: ${knownFields.join(', ')}`;\n }\n }\n return 'Ensure the document has proper structure: { \"name\": \"docx\", \"props\": {...}, \"children\": [...] }';\n }\n if (path?.includes('/children/')) {\n return 'Check that the component has a valid \"name\" and all required fields for that component type';\n }\n return 'Review the structure and ensure all required fields are present with correct types';\n }\n\n // Suggestions for additional properties errors\n if (error.message?.includes('additionalProperties')) {\n return 'Remove any unknown or unsupported fields. Check documentation for allowed properties.';\n }\n\n // Suggestions for required properties\n if (error.message?.includes('Required property')) {\n return 'Add the missing required field to fix this error';\n }\n\n // Type-specific suggestions\n if (typeStr === 'string') {\n if (path?.includes('alignment')) {\n return 'Use one of: left, center, right, justify';\n }\n if (path?.includes('color')) {\n return 'Use a valid color format (hex: #RRGGBB, rgb: rgb(r,g,b), or named color)';\n }\n return 'Provide a text string value';\n }\n\n if (typeStr === 'number') {\n if (path?.includes('fontSize') || path?.includes('size')) {\n return 'Use a number in points (e.g., 12, 14, 16)';\n }\n if (path?.includes('margin') || path?.includes('padding')) {\n return 'Use a number for spacing in points';\n }\n return 'Provide a numeric value';\n }\n\n if (typeStr === 'boolean') {\n return 'Use true or false (without quotes)';\n }\n\n if (typeStr === 'array') {\n if (path?.includes('children') || path?.includes('modules')) {\n return 'Provide an array of component objects, each with a \"name\" field';\n }\n return 'Provide an array/list of values using square brackets []';\n }\n\n if (typeStr === 'object') {\n return 'Provide an object with key-value pairs using curly braces {}';\n }\n\n if (typeStr === 'literal') {\n const expected = error.schema\n ? JSON.stringify(getLiteralValue(error.schema))\n : 'specific value';\n return `Use exactly this value: ${expected}`;\n }\n\n if (typeStr === 'pattern' || typeStr === 'RegExp') {\n if (path?.includes('email')) {\n return 'Use valid email format: user@example.com';\n }\n if (path?.includes('url')) {\n return 'Use valid URL format: https://example.com';\n }\n if (path?.includes('date')) {\n return 'Use ISO date format: YYYY-MM-DD';\n }\n return 'Ensure the value matches the required format';\n }\n\n // Path-based suggestions\n if (path?.includes('name') || path?.includes('type')) {\n return 'Use a valid component name: docx, section, columns, heading, paragraph, image, statistic, table, list, toc, text-box, highcharts, or visual';\n }\n\n return undefined;\n}\n\n/**\n * Format validation errors as a summary string\n */\nexport function formatErrorSummary(errors: ValidationError[]): string {\n if (errors.length === 0) return 'No errors';\n\n if (errors.length === 1) {\n return errors[0].message;\n }\n\n const summary = errors\n .slice(0, 3)\n .map((e) => `${e.path}: ${e.message}`)\n .join(', ');\n\n if (errors.length > 3) {\n return `${summary} and ${errors.length - 3} more...`;\n }\n\n return summary;\n}\n\n/**\n * Group errors by path for better reporting\n */\nexport function groupErrorsByPath(\n errors: ValidationError[]\n): Map<string, ValidationError[]> {\n const grouped = new Map<string, ValidationError[]>();\n\n for (const error of errors) {\n const path = error.path || 'root';\n const group = grouped.get(path) || [];\n group.push(error);\n grouped.set(path, group);\n }\n\n return grouped;\n}\n\n/**\n * Create a JSON parse error\n */\nexport function createJsonParseError(\n error: Error,\n jsonString: string\n): ValidationError {\n // Try to extract position from error message\n const match = error.message.match(/position (\\d+)/);\n const position = match ? parseInt(match[1], 10) : 0;\n\n let line = 1;\n let column = 1;\n\n if (position > 0) {\n const lines = jsonString.substring(0, position).split('\\n');\n line = lines.length;\n column = lines[lines.length - 1].length + 1;\n }\n\n return {\n path: 'root',\n message: `JSON Parse Error: ${error.message}`,\n code: 'json_parse_error',\n line,\n column,\n suggestion: 'Check for missing commas, quotes, or brackets',\n };\n}\n","/**\n * Deep validation utilities for collecting ALL errors in nested structures\n * This bypasses TypeBox's union short-circuiting to provide comprehensive error reporting\n */\n\nimport { Value } from '@sinclair/typebox/value';\nimport type { TSchema } from '@sinclair/typebox';\nimport type { ValidationError } from '@json-to-office/shared';\nimport { STANDARD_COMPONENTS_REGISTRY } from '../../schemas/component-registry';\nimport { CustomComponentDefinitionSchema } from '../../schemas/custom-components';\nimport { transformValueErrors } from './error-transformer';\n\n// Map of component names to their props schemas, sourced from the registry.\n// This stays in sync as new standard components are added, so the document\n// root ('docx') and every standard child component are recognized here.\nconst COMPONENT_SCHEMAS: Record<string, TSchema> = Object.fromEntries([\n ...STANDARD_COMPONENTS_REGISTRY.map((c) => [c.name, c.propsSchema]),\n ['custom', CustomComponentDefinitionSchema],\n]);\n\n// Root component names that may appear at the top of a document.\nconst ROOT_COMPONENT_NAMES = new Set(\n STANDARD_COMPONENTS_REGISTRY.filter((c) =>\n Boolean(c.special?.hasSchemaField)\n ).map((c) => c.name)\n);\n\n/**\n * Options that tune deep validation.\n *\n * `knownCustomNames` — names of registered plugin components. The deep\n * validator neither flags these as \"unknown component\" nor validates their\n * props here; the plugin layer validates custom props version-aware separately.\n *\n * `allowUnknownFields` — when true, unknown properties are stripped before the\n * per-component check instead of being rejected. The escape hatch for callers\n * migrating onto strict schemas.\n */\nexport interface DeepValidateOptions {\n knownCustomNames?: Set<string>;\n allowUnknownFields?: boolean;\n}\n\n// Image source fields that are mutually exclusive: exactly one may be set.\nconst IMAGE_SOURCE_FIELDS = ['path', 'base64', 'svg'] as const;\n\n/**\n * Names of the image source fields that carry a non-empty value on a props object.\n */\nexport function presentImageSources(props: unknown): string[] {\n if (!props || typeof props !== 'object') return [];\n const p = props as Record<string, unknown>;\n return IMAGE_SOURCE_FIELDS.filter((f) => {\n const v = p[f];\n return typeof v === 'string' && v.trim().length > 0;\n });\n}\n\n/**\n * Collect \"more than one image source\" conflicts anywhere in a document.\n *\n * `path`, `base64`, and `svg` are mutually exclusive on the image component, but\n * all three are optional fields on a single object schema — so a multi-source\n * payload passes TypeBox's structural check and would otherwise be silently\n * resolved by runtime precedence (svg > base64 > path). This walk runs\n * unconditionally and rejects such payloads. It traverses every nested value, so\n * images inside columns, table cells, text boxes, headers/footers, and sections\n * are all covered regardless of container shape.\n */\nexport function collectImageSourceConflicts(data: unknown): ValidationError[] {\n const errors: ValidationError[] = [];\n\n const visit = (node: any, path: string): void => {\n if (Array.isArray(node)) {\n node.forEach((item, i) => visit(item, `${path}/${i}`));\n return;\n }\n if (!node || typeof node !== 'object') return;\n\n if (node.name === 'image') {\n const present = presentImageSources(node.props);\n if (present.length > 1) {\n errors.push({\n path: `${path}/props`,\n message: `Image component accepts only one source, but found ${present\n .map((f) => `\"${f}\"`)\n .join(', ')}. Use exactly one of \"path\", \"base64\", or \"svg\".`,\n code: 'mutually_exclusive',\n });\n }\n }\n\n for (const key of Object.keys(node)) {\n visit(node[key], `${path}/${key}`);\n }\n };\n\n visit(data, '');\n return errors;\n}\n\n/**\n * Deep validate a document to collect ALL errors, not just union-level errors\n */\nexport function deepValidateDocument(\n data: any,\n opts: DeepValidateOptions = {}\n): ValidationError[] {\n const allErrors: ValidationError[] = [];\n\n // Validate the document structure\n if (!data || typeof data !== 'object') {\n allErrors.push({\n path: 'root',\n message: 'Document must be an object',\n code: 'invalid_type',\n });\n return allErrors;\n }\n\n // Check name field\n if (!data.name) {\n allErrors.push({\n path: '/name',\n message: 'Missing required field \"name\"',\n code: 'required_property',\n });\n } else if (!ROOT_COMPONENT_NAMES.has(data.name)) {\n const expected = [...ROOT_COMPONENT_NAMES].map((n) => `\"${n}\"`).join(', ');\n allErrors.push({\n path: '/name',\n message: `Invalid name \"${data.name}\". Expected ${expected}`,\n code: 'invalid_value',\n });\n }\n\n // Validate props section when the key is present so explicit `null` (or any\n // falsy non-object) is checked against the component's schema instead of\n // silently passing.\n if (ROOT_COMPONENT_NAMES.has(data.name) && 'props' in data) {\n const propsErrors = validateComponentProps(\n data.name,\n data.props,\n '/props',\n opts\n );\n allErrors.push(...propsErrors);\n }\n\n // Validate the children array. The root component requires one; nested\n // containers may legitimately omit it.\n if (!data.children) {\n allErrors.push({\n path: '/children',\n message: 'Missing required field \"children\"',\n code: 'required_property',\n });\n } else if (!Array.isArray(data.children)) {\n allErrors.push({\n path: '/children',\n message: 'Field \"children\" must be an array',\n code: 'invalid_type',\n });\n }\n\n // Deep-validate the props of every component anywhere in the tree.\n //\n // The earlier implementation only re-validated the root's direct children\n // and one level of `section` children. Two whole-tree blind spots followed:\n // 1. component props nested inside `text-box`/`columns` children — the\n // content of every container lives in the shared `children` field, so\n // anything below the first level went unchecked; and\n // 2. the `header`/`footer` paragraph regions, which the section schema\n // types loosely as an array of `Type.Any()` (or the `'linkToPrevious'`\n // literal) — so their entries' props are never checked by the\n // per-section validation.\n // The in-editor (Monaco) validator runs the generated JSON Schema over the\n // entire document, so it flags both. This walk brings the CLI to parity.\n walkComponentTree(data, '', opts, allErrors);\n\n return allErrors;\n}\n\n/**\n * Recursively validate the props of every component nested under `node`.\n *\n * Walks two kinds of child position to any depth:\n * - the `children` array — the universal container field shared by `docx`,\n * `section`, `columns` and `text-box` (added by the component registry), so\n * a bad prop inside a `text-box` or `columns` child is caught however deeply\n * it is nested; and\n * - the `header` / `footer` paragraph regions under `props` — typed only\n * loosely on the section schema (an array of `Type.Any()`, or the\n * `'linkToPrevious'` literal, which is skipped), so their entries are not\n * deep-checked by the parent's per-component validation.\n *\n * The node's own props are NOT validated here — the caller validates the root\n * props, and every entry is validated as it is visited. `table` and `list`\n * nest their components inside their own recursive props schemas, so those are\n * already covered by `validateComponentProps` and are intentionally not\n * re-walked here.\n */\nfunction walkComponentTree(\n node: any,\n path: string,\n opts: DeepValidateOptions,\n errors: ValidationError[]\n): void {\n if (!node || typeof node !== 'object') return;\n\n // `strictStructure` controls whether a malformed entry (not an object, or\n // missing `name`) is reported here. It is ON for positions the per-component\n // schema leaves unchecked — the `children` array (a sibling field, never seen\n // by props validation) and the `header`/`footer` regions (typed `Type.Any()`\n // on the static section schema) — so the walk is their only structural\n // checker and must match the whole-tree schema the editor runs. It is OFF for\n // `table` cell content, whose structure the table's own props schema already\n // validates; there the walk only adds the prop-constraint errors the loose\n // cell-content ref misses, so reporting structure too would double-report.\n const validateEntry = (\n child: any,\n childPath: string,\n strictStructure: boolean\n ): void => {\n if (!child || typeof child !== 'object') {\n if (strictStructure) {\n errors.push({\n path: childPath,\n message: 'Component must be an object',\n code: 'invalid_type',\n });\n }\n return;\n }\n if (typeof child.name !== 'string' || child.name.length === 0) {\n if (strictStructure) {\n errors.push({\n path: `${childPath}/name`,\n message: 'Component missing required field \"name\"',\n code: 'required_property',\n });\n }\n return;\n }\n\n // Registered plugin components are validated version-aware by the plugin\n // layer; skip their props and subtree so they are neither double-validated\n // nor misreported as unknown.\n if (opts.knownCustomNames?.has(child.name)) return;\n\n // Validate props against the component's schema. When props is omitted,\n // validate an empty object so the schema decides whether props are\n // required (e.g. `section` needs none; `heading` requires text+level).\n if (child.props != null) {\n errors.push(\n ...validateComponentProps(\n child.name,\n child.props,\n `${childPath}/props`,\n opts\n )\n );\n } else if (child.name !== 'custom') {\n errors.push(\n ...validateComponentProps(child.name, {}, `${childPath}/props`, opts)\n );\n }\n\n // Recurse so arbitrarily nested containers are covered.\n walkComponentTree(child, childPath, opts, errors);\n };\n\n // header/footer entries are validated strictly: the static section schema\n // types them as `Type.Any()`, so the editor's whole-tree schema (where they\n // resolve to the component union) is stricter than the per-component check —\n // the walk closes that gap, flagging non-component entries too. A bare\n // `'linkToPrevious'` value is not an array, so it is skipped here.\n for (const region of ['header', 'footer'] as const) {\n const entries = node.props?.[region];\n if (Array.isArray(entries)) {\n entries.forEach((child: any, i: number) =>\n validateEntry(child, `${path}/props/${region}/${i}`, true)\n );\n }\n }\n\n // `table` nests its cell content under `props` (not the shared `children`\n // field), and the static table schema types that content loosely — the\n // cell-content ref accepts any props object, just like the `Type.Any()`\n // header/footer above. So a bad prop deep in a cell (e.g. `font.size` over the\n // cap) slips past the per-component table check; walk each content component\n // so its props are validated against the real schema. Structural problems\n // with a cell are already reported by the table's own props validation, hence\n // the lenient (`false`) entry check to avoid double-reporting.\n if (node.name === 'table' && Array.isArray(node.props?.columns)) {\n node.props.columns.forEach((col: any, c: number) => {\n if (!col || typeof col !== 'object') return;\n const base = `${path}/props/columns/${c}`;\n const headerContent = col.header?.content;\n if (headerContent && typeof headerContent === 'object') {\n validateEntry(headerContent, `${base}/header/content`, false);\n }\n if (Array.isArray(col.cells)) {\n col.cells.forEach((cell: any, r: number) => {\n const content = cell?.content;\n if (content && typeof content === 'object') {\n validateEntry(content, `${base}/cells/${r}/content`, false);\n }\n });\n }\n });\n }\n\n if (Array.isArray(node.children)) {\n node.children.forEach((child: any, i: number) =>\n validateEntry(child, `${path}/children/${i}`, true)\n );\n } else if (node.children != null && path !== '') {\n // `children` is present but not an array on a nested container. The root's\n // `children` is already checked by deepValidateDocument (skipped here via\n // `path !== ''` so it is not reported twice); this branch covers every\n // deeper container (`section`/`columns`/`text-box`) the old one-level walk\n // never reached. Without it a malformed subtree slips through as valid:\n // TypeBox reports only a generic catch-all (which we strip), so an empty\n // error set would otherwise flip the document back to `valid`.\n errors.push({\n path: `${path}/children`,\n message: 'Field \"children\" must be an array',\n code: 'invalid_type',\n });\n }\n}\n\n/**\n * Validate a component's props against its schema\n */\nfunction validateComponentProps(\n componentName: string,\n props: any,\n basePath: string,\n opts: DeepValidateOptions = {}\n): ValidationError[] {\n const errors: ValidationError[] = [];\n\n // Get the schema for this component\n const schema = COMPONENT_SCHEMAS[componentName];\n if (!schema) {\n // Unknown component type. `basePath` always ends in `/props`; anchor the\n // swap to the end so a nested region path like `…/props/header/0/props`\n // becomes `…/props/header/0/name` rather than mangling an earlier `/props`.\n errors.push({\n path: basePath.replace(/\\/props$/, '/name'),\n message: `Unknown component \"${componentName}\"`,\n code: 'unknown_component',\n });\n return errors;\n }\n\n // When unknown fields are explicitly allowed, strip them before checking so\n // additionalProperties:false no longer rejects — required/typed fields are\n // still enforced.\n const toCheck = opts.allowUnknownFields\n ? Value.Clean(schema, Value.Clone(props))\n : props;\n\n // Use TypeBox to validate against the specific schema\n if (!Value.Check(schema, toCheck)) {\n const valueErrors = [...Value.Errors(schema, toCheck)];\n const transformedErrors = transformValueErrors(valueErrors, {\n maxErrors: 100,\n });\n\n // Adjust paths to be relative to the document root\n transformedErrors.forEach((error) => {\n // Combine base path with error path\n const fullPath =\n error.path === 'root'\n ? basePath\n : `${basePath}${error.path.startsWith('/') ? error.path : '/' + error.path}`;\n\n errors.push({\n ...error,\n path: fullPath,\n });\n });\n }\n\n return errors;\n}\n\n/**\n * Combine deep validation with standard validation.\n *\n * Deep validation produces precise, path-aware errors. TypeBox's discriminated-\n * union check, by contrast, often collapses any failure under the root document\n * into a single generic \"Invalid component configuration for 'docx'\" message at\n * `root` — useful as a signal that something is wrong, but actionable only via\n * the deep-validator's output. We always strip that catch-all so it doesn't\n * appear alongside (or, worse, instead of) the real diagnostics.\n */\nexport function comprehensiveValidateDocument(\n data: any,\n existingErrors: ValidationError[] = [],\n opts: DeepValidateOptions = {}\n): ValidationError[] {\n const deepErrors = deepValidateDocument(data, opts);\n\n const filteredExisting = existingErrors.filter(\n (e) => !isGenericUnionCatchAll(e)\n );\n\n return deduplicateErrors([...filteredExisting, ...deepErrors]);\n}\n\n/**\n * Detect TypeBox's generic union/discriminator catch-all error at the document\n * root. These messages name the component type ('docx') but give no actionable\n * detail — the deep validator emits the actual path-level errors instead.\n */\nfunction isGenericUnionCatchAll(error: ValidationError): boolean {\n const atRoot = !error.path || error.path === 'root' || error.path === '/';\n if (!atRoot) return false;\n const msg = error.message || '';\n return (\n /invalid (component|module) configurations?/i.test(msg) ||\n /invalid document structure/i.test(msg)\n );\n}\n\n/**\n * Deduplicate errors by path and message\n */\nfunction deduplicateErrors(errors: ValidationError[]): ValidationError[] {\n const seen = new Set<string>();\n const unique: ValidationError[] = [];\n\n for (const error of errors) {\n const key = `${error.path}:${error.message}`;\n if (!seen.has(key)) {\n seen.add(key);\n unique.push(error);\n }\n }\n\n return unique;\n}\n","/**\n * Base validator implementation\n * Core validation logic that eliminates duplication across the codebase\n */\n\nimport { Value } from '@sinclair/typebox/value';\nimport type { Static, TSchema } from '@sinclair/typebox';\nimport type {\n ValidationResult,\n ValidationOptions,\n JsonValidationResult,\n} from './types';\nimport {\n transformValueErrors,\n createJsonParseError,\n formatErrorSummary,\n} from '@json-to-office/shared';\n\n/**\n * Base validation function that all specific validators use\n * This eliminates the repeated Value.Check -> Value.Errors -> map pattern\n */\nexport function validateAgainstSchema<T extends TSchema>(\n schema: T,\n data: unknown,\n options?: ValidationOptions\n): ValidationResult<Static<T>> {\n try {\n // Check if data matches the schema\n if (!Value.Check(schema, data)) {\n // Collect ALL errors (not just the first one)\n const errors = [...Value.Errors(schema, data)];\n const transformedErrors = transformValueErrors(errors, {\n jsonString: options?.jsonString,\n maxErrors: options?.maxErrors || 100, // Default to 100 if not specified\n });\n\n return {\n valid: false,\n errors: transformedErrors,\n };\n }\n\n // Data is valid, apply transformations if requested\n let processedData = data;\n\n if (options?.clean) {\n // Remove unknown properties\n processedData = Value.Clean(schema, Value.Clone(processedData));\n }\n\n if (options?.applyDefaults) {\n // Apply default values\n processedData = Value.Default(schema, processedData);\n }\n\n return {\n valid: true,\n data: processedData as Static<T>,\n };\n } catch (error) {\n // Handle unexpected errors\n return {\n valid: false,\n errors: [\n {\n path: 'root',\n message:\n error instanceof Error ? error.message : 'Unknown validation error',\n code: 'validation_exception',\n },\n ],\n };\n }\n}\n\n/**\n * Validate JSON string or object with schema\n */\nexport function validateJson<T extends TSchema>(\n schema: T,\n jsonInput: string | object,\n options?: ValidationOptions\n): JsonValidationResult<Static<T>> {\n // Handle string input\n if (typeof jsonInput === 'string') {\n // Basic input validation\n if (!jsonInput.trim()) {\n return {\n valid: false,\n errors: [\n {\n path: 'root',\n message: 'Input must be a non-empty string',\n code: 'empty_input',\n },\n ],\n isJsonError: true,\n };\n }\n\n // Try to parse JSON\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonInput);\n } catch (error) {\n if (error instanceof Error) {\n return {\n valid: false,\n errors: [createJsonParseError(error, jsonInput)],\n isJsonError: true,\n };\n }\n return {\n valid: false,\n errors: [\n {\n path: 'root',\n message: 'Failed to parse JSON',\n code: 'json_parse_error',\n },\n ],\n isJsonError: true,\n };\n }\n\n // Validate parsed object with position calculation\n const result = validateAgainstSchema(schema, parsed, {\n ...options,\n jsonString: jsonInput,\n calculatePosition: true,\n });\n\n return {\n ...result,\n parsed,\n isJsonError: false,\n };\n }\n\n // Handle object input directly\n const result = validateAgainstSchema(schema, jsonInput, options);\n return {\n ...result,\n parsed: jsonInput,\n isJsonError: false,\n };\n}\n\n/**\n * Batch validate multiple items\n */\nexport function validateBatch<T extends TSchema>(\n schema: T,\n items: unknown[],\n options?: ValidationOptions\n): ValidationResult<Static<T>[]> {\n const results: Static<T>[] = [];\n const allErrors: any[] = [];\n let hasErrors = false;\n\n for (let i = 0; i < items.length; i++) {\n const result = validateAgainstSchema(schema, items[i], options);\n\n if (result.valid && result.data) {\n results.push(result.data);\n } else {\n hasErrors = true;\n if (result.errors) {\n // Prefix errors with item index\n const prefixedErrors = result.errors.map((e) => ({\n ...e,\n path: `[${i}]${e.path ? '/' + e.path : ''}`,\n }));\n allErrors.push(...prefixedErrors);\n }\n }\n\n // Stop if we've hit the max errors\n if (options?.maxErrors && allErrors.length >= options.maxErrors) {\n break;\n }\n }\n\n if (hasErrors) {\n return {\n valid: false,\n errors: allErrors.slice(0, options?.maxErrors),\n };\n }\n\n return {\n valid: true,\n data: results,\n };\n}\n\n/**\n * Validate with custom error enhancement\n */\nexport function validateWithEnhancement<T extends TSchema>(\n schema: T,\n data: unknown,\n enhancer: (errors: any[]) => any[],\n options?: ValidationOptions\n): ValidationResult<Static<T>> {\n const result = validateAgainstSchema(schema, data, options);\n\n if (!result.valid && result.errors) {\n result.errors = enhancer(result.errors);\n }\n\n return result;\n}\n\n/**\n * Create a validator function for a specific schema\n */\nexport function createValidator<T extends TSchema>(\n schema: T,\n defaultOptions?: ValidationOptions\n) {\n return (data: unknown, options?: ValidationOptions) => {\n return validateAgainstSchema(schema, data, {\n ...defaultOptions,\n ...options,\n });\n };\n}\n\n/**\n * Create a JSON validator function for a specific schema\n */\nexport function createJsonValidator<T extends TSchema>(\n schema: T,\n defaultOptions?: ValidationOptions\n) {\n return (jsonInput: string | object, options?: ValidationOptions) => {\n return validateJson(schema, jsonInput, {\n ...defaultOptions,\n ...options,\n });\n };\n}\n\n/**\n * Utility to check if validation result is successful with type guard\n */\nexport function isValidationSuccess<T>(\n result: ValidationResult<T>\n): result is ValidationResult<T> & { valid: true; data: T } {\n return result.valid === true && result.data !== undefined;\n}\n\n/**\n * Get validation error summary\n */\nexport function getValidationSummary(result: ValidationResult): string {\n if (result.valid) {\n return 'Validation successful';\n }\n\n if (!result.errors || result.errors.length === 0) {\n return 'Validation failed with unknown error';\n }\n\n return formatErrorSummary(result.errors);\n}\n","/**\n * Document validation implementation\n * Single source of truth for all document validation\n */\n\nimport type { Static } from '@sinclair/typebox';\nimport {\n ComponentDefinitionSchema,\n StandardComponentDefinitionSchema,\n} from '../../schemas/components';\nimport { extractStandardComponentNames } from '@json-to-office/shared';\nimport {\n comprehensiveValidateDocument,\n collectImageSourceConflicts,\n} from './deep-validator';\n\n// JsonComponentDefinitionSchema is just an alias for ComponentDefinitionSchema\nconst JsonComponentDefinitionSchema = ComponentDefinitionSchema;\nimport type { DocumentValidationResult, ValidationOptions } from './types';\nimport { validateAgainstSchema, validateJson } from './base-validator';\n\n/**\n * Validate a document/report component definition\n */\nexport function validateDocument(\n data: unknown,\n options?: ValidationOptions\n): DocumentValidationResult {\n const result = validateAgainstSchema(\n ComponentDefinitionSchema,\n data,\n options\n );\n\n // If validation failed, use deep validation to get all detailed errors\n let finalErrors = result.errors || [];\n let finalValid = result.valid;\n if (!result.valid && data) {\n finalErrors = comprehensiveValidateDocument(data, result.errors, {\n allowUnknownFields: options?.allowUnknownFields,\n knownCustomNames: options?.knownCustomNames,\n });\n // If TypeBox's union check produced only generic catch-all errors and the\n // deep validator finds nothing actionable, treat the document as valid.\n if (finalErrors.length === 0) {\n finalValid = true;\n }\n }\n\n // Image source mutual-exclusivity is a semantic rule the structural schema\n // cannot express, so it runs unconditionally — a multi-source image passes\n // the TypeBox check above.\n const sourceConflicts = collectImageSourceConflicts(data);\n if (sourceConflicts.length > 0) {\n finalErrors = [...finalErrors, ...sourceConflicts];\n finalValid = false;\n }\n\n // Add document-specific metadata. Keep `data` populated whenever `valid` is\n // true so `isValidDocument()` (which requires both) stays consistent — when\n // TypeBox failed and the deep validator cleared the doc, fall back to the\n // original input as the data payload.\n const resolvedData =\n result.data ??\n (finalValid\n ? (data as Static<typeof ComponentDefinitionSchema>)\n : undefined);\n const documentResult: DocumentValidationResult = {\n ...result,\n valid: finalValid,\n documentType: 'docx',\n errors: finalErrors,\n data: resolvedData,\n };\n\n // Check if document has custom components\n if (finalValid) {\n const doc = resolvedData as any;\n if (doc && doc.children && Array.isArray(doc.children)) {\n const hasCustom = doc.children.some(\n (c: any) => !isStandardComponentName(c.name)\n );\n documentResult.hasCustomComponents = hasCustom;\n }\n }\n\n return documentResult;\n}\n\n/**\n * Validate a JSON document (string or object)\n */\nexport function validateJsonDocument(\n jsonInput: string | object,\n options?: ValidationOptions\n): DocumentValidationResult {\n // Use the JSON-specific schema which includes the $schema field\n const result = validateJson(\n JsonComponentDefinitionSchema,\n jsonInput,\n options\n );\n\n // If validation failed, use deep validation to get all detailed errors\n let finalErrors = result.errors || [];\n let finalValid = result.valid;\n if (!result.valid && result.parsed) {\n finalErrors = comprehensiveValidateDocument(result.parsed, result.errors, {\n allowUnknownFields: options?.allowUnknownFields,\n knownCustomNames: options?.knownCustomNames,\n });\n if (finalErrors.length === 0) {\n finalValid = true;\n }\n }\n\n // Image source mutual-exclusivity (see validateDocument) — runs always.\n const sourceConflicts = collectImageSourceConflicts(result.parsed);\n if (sourceConflicts.length > 0) {\n finalErrors = [...finalErrors, ...sourceConflicts];\n finalValid = false;\n }\n\n // Add document-specific metadata. Keep `data` populated whenever `valid` is\n // true so `isValidDocument()` (which requires both) stays consistent — when\n // TypeBox failed and the deep validator cleared the doc, fall back to the\n // parsed input as the data payload.\n const resolvedData =\n result.data ??\n (finalValid\n ? (result.parsed as Static<typeof ComponentDefinitionSchema>)\n : undefined);\n const documentResult: DocumentValidationResult = {\n ...result,\n valid: finalValid,\n documentType: 'docx',\n errors: finalErrors,\n data: resolvedData,\n };\n\n // Check for custom components\n if (finalValid) {\n const doc = resolvedData as any;\n if (doc && doc.children && Array.isArray(doc.children)) {\n const hasCustom = doc.children.some(\n (c: any) => !isStandardComponentName(c.name)\n );\n documentResult.hasCustomComponents = hasCustom;\n }\n }\n\n return documentResult;\n}\n\n/**\n * Type guard for document validation result\n */\nexport function isValidDocument(\n result: DocumentValidationResult\n): result is DocumentValidationResult & {\n valid: true;\n data: Static<typeof ComponentDefinitionSchema>;\n} {\n return result.valid === true && result.data !== undefined;\n}\n\n/**\n * Extract standard component names from the schema (cached)\n */\nfunction getStandardComponentNames(): string[] {\n return extractStandardComponentNames(StandardComponentDefinitionSchema);\n}\n\n/**\n * Check if a component name is standard\n */\nfunction isStandardComponentName(name: string): boolean {\n const standardNames = getStandardComponentNames();\n return standardNames.includes(name);\n}\n\n/**\n * Create a document validator with default options\n */\nexport function createDocumentValidator(defaultOptions?: ValidationOptions) {\n return {\n validate: (data: unknown, options?: ValidationOptions) =>\n validateDocument(data, { ...defaultOptions, ...options }),\n validateJson: (jsonInput: string | object, options?: ValidationOptions) =>\n validateJsonDocument(jsonInput, { ...defaultOptions, ...options }),\n };\n}\n\n// Export convenient validators with common configurations\nexport const documentValidator = createDocumentValidator({\n clean: true,\n applyDefaults: true,\n maxErrors: 100, // Collect up to 100 errors to show all validation issues\n});\n\nexport const strictDocumentValidator = createDocumentValidator({\n clean: false,\n applyDefaults: false,\n maxErrors: 100, // Increased from 10 to show more errors\n});\n\n/**\n * Legacy compatibility exports\n */\nexport const validateJsonComponent = validateJsonDocument;\nexport const validateDocumentWithSchema = validateDocument;\n"],"mappings":"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","names":["Value","transformValueErrors","result"]}
package/dist/index.d.ts CHANGED
@@ -300,14 +300,6 @@ declare const COMPONENT_SCHEMA_MAP: {
300
300
  componentDefaults: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
301
301
  heading: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
302
302
  text: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
303
- lineSpacing: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TObject<{
304
- type: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"single">, _sinclair_typebox.TLiteral<"atLeast">, _sinclair_typebox.TLiteral<"exactly">, _sinclair_typebox.TLiteral<"double">, _sinclair_typebox.TLiteral<"multiple">]>;
305
- value: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
306
- }>]>>;
307
- spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
308
- before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
309
- after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
310
- }>>;
311
303
  level: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<1>, _sinclair_typebox.TLiteral<2>, _sinclair_typebox.TLiteral<3>, _sinclair_typebox.TLiteral<4>, _sinclair_typebox.TLiteral<5>, _sinclair_typebox.TLiteral<6>]>>;
312
304
  font: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
313
305
  size: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
@@ -330,6 +322,14 @@ declare const COMPONENT_SCHEMA_MAP: {
330
322
  }>>;
331
323
  family: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
332
324
  }>>;
325
+ lineSpacing: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TObject<{
326
+ type: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"single">, _sinclair_typebox.TLiteral<"atLeast">, _sinclair_typebox.TLiteral<"exactly">, _sinclair_typebox.TLiteral<"double">, _sinclair_typebox.TLiteral<"multiple">]>;
327
+ value: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
328
+ }>]>>;
329
+ spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
330
+ before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
331
+ after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
332
+ }>>;
333
333
  language: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
334
334
  noProof: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
335
335
  noProofWords: _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TString>>;
@@ -342,10 +342,6 @@ declare const COMPONENT_SCHEMA_MAP: {
342
342
  }>>;
343
343
  paragraph: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
344
344
  text: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
345
- spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
346
- before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
347
- after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
348
- }>>;
349
345
  font: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
350
346
  size: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
351
347
  color: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
@@ -367,6 +363,10 @@ declare const COMPONENT_SCHEMA_MAP: {
367
363
  }>>;
368
364
  family: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
369
365
  }>>;
366
+ spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
367
+ before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
368
+ after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
369
+ }>>;
370
370
  language: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
371
371
  noProof: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
372
372
  noProofWords: _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TString>>;
package/dist/index.js CHANGED
@@ -32,7 +32,7 @@ import {
32
32
  validateTheme,
33
33
  validateThemeJson,
34
34
  validateThemeWithEnhancement
35
- } from "./chunk-U574TQ3W.js";
35
+ } from "./chunk-JY5JBFBA.js";
36
36
  import {
37
37
  ThemeConfigSchema,
38
38
  isValidThemeConfig
@@ -68,7 +68,7 @@ import {
68
68
  validateJsonComponent,
69
69
  validateJsonDocument,
70
70
  validateWithEnhancement
71
- } from "./chunk-TIQSCGX7.js";
71
+ } from "./chunk-WTKEDXYL.js";
72
72
  import {
73
73
  ComponentDefinitionSchema,
74
74
  StandardComponentDefinitionSchema
@@ -3,14 +3,6 @@ import { Static } from '@sinclair/typebox';
3
3
 
4
4
  declare const HeadingComponentDefaultsSchema: _sinclair_typebox.TObject<{
5
5
  text: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
6
- lineSpacing: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TObject<{
7
- type: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"single">, _sinclair_typebox.TLiteral<"atLeast">, _sinclair_typebox.TLiteral<"exactly">, _sinclair_typebox.TLiteral<"double">, _sinclair_typebox.TLiteral<"multiple">]>;
8
- value: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
9
- }>]>>;
10
- spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
11
- before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
12
- after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
13
- }>>;
14
6
  level: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<1>, _sinclair_typebox.TLiteral<2>, _sinclair_typebox.TLiteral<3>, _sinclair_typebox.TLiteral<4>, _sinclair_typebox.TLiteral<5>, _sinclair_typebox.TLiteral<6>]>>;
15
7
  font: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
16
8
  size: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
@@ -33,6 +25,14 @@ declare const HeadingComponentDefaultsSchema: _sinclair_typebox.TObject<{
33
25
  }>>;
34
26
  family: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
35
27
  }>>;
28
+ lineSpacing: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TObject<{
29
+ type: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"single">, _sinclair_typebox.TLiteral<"atLeast">, _sinclair_typebox.TLiteral<"exactly">, _sinclair_typebox.TLiteral<"double">, _sinclair_typebox.TLiteral<"multiple">]>;
30
+ value: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
31
+ }>]>>;
32
+ spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
33
+ before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
34
+ after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
35
+ }>>;
36
36
  language: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
37
37
  noProof: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
38
38
  noProofWords: _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TString>>;
@@ -45,10 +45,6 @@ declare const HeadingComponentDefaultsSchema: _sinclair_typebox.TObject<{
45
45
  }>;
46
46
  declare const ParagraphComponentDefaultsSchema: _sinclair_typebox.TObject<{
47
47
  text: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
48
- spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
49
- before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
50
- after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
51
- }>>;
52
48
  font: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
53
49
  size: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
54
50
  color: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
@@ -70,6 +66,10 @@ declare const ParagraphComponentDefaultsSchema: _sinclair_typebox.TObject<{
70
66
  }>>;
71
67
  family: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
72
68
  }>>;
69
+ spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
70
+ before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
71
+ after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
72
+ }>>;
73
73
  language: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
74
74
  noProof: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
75
75
  noProofWords: _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TString>>;
@@ -237,14 +237,6 @@ declare const ListComponentDefaultsSchema: _sinclair_typebox.TObject<{
237
237
  declare const ComponentDefaultsSchema: _sinclair_typebox.TObject<{
238
238
  heading: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
239
239
  text: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
240
- lineSpacing: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TObject<{
241
- type: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"single">, _sinclair_typebox.TLiteral<"atLeast">, _sinclair_typebox.TLiteral<"exactly">, _sinclair_typebox.TLiteral<"double">, _sinclair_typebox.TLiteral<"multiple">]>;
242
- value: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
243
- }>]>>;
244
- spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
245
- before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
246
- after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
247
- }>>;
248
240
  level: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<1>, _sinclair_typebox.TLiteral<2>, _sinclair_typebox.TLiteral<3>, _sinclair_typebox.TLiteral<4>, _sinclair_typebox.TLiteral<5>, _sinclair_typebox.TLiteral<6>]>>;
249
241
  font: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
250
242
  size: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
@@ -267,6 +259,14 @@ declare const ComponentDefaultsSchema: _sinclair_typebox.TObject<{
267
259
  }>>;
268
260
  family: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
269
261
  }>>;
262
+ lineSpacing: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TObject<{
263
+ type: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"single">, _sinclair_typebox.TLiteral<"atLeast">, _sinclair_typebox.TLiteral<"exactly">, _sinclair_typebox.TLiteral<"double">, _sinclair_typebox.TLiteral<"multiple">]>;
264
+ value: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
265
+ }>]>>;
266
+ spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
267
+ before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
268
+ after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
269
+ }>>;
270
270
  language: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
271
271
  noProof: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
272
272
  noProofWords: _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TString>>;
@@ -279,10 +279,6 @@ declare const ComponentDefaultsSchema: _sinclair_typebox.TObject<{
279
279
  }>>;
280
280
  paragraph: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
281
281
  text: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
282
- spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
283
- before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
284
- after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
285
- }>>;
286
282
  font: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
287
283
  size: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
288
284
  color: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
@@ -304,6 +300,10 @@ declare const ComponentDefaultsSchema: _sinclair_typebox.TObject<{
304
300
  }>>;
305
301
  family: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
306
302
  }>>;
303
+ spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
304
+ before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
305
+ after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
306
+ }>>;
307
307
  language: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
308
308
  noProof: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
309
309
  noProofWords: _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TString>>;
@@ -114,14 +114,6 @@ declare const createReportPropsSchema: (_moduleRef?: TSchema) => _sinclair_typeb
114
114
  componentDefaults: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
115
115
  heading: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
116
116
  text: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
117
- lineSpacing: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TObject<{
118
- type: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"single">, _sinclair_typebox.TLiteral<"atLeast">, _sinclair_typebox.TLiteral<"exactly">, _sinclair_typebox.TLiteral<"double">, _sinclair_typebox.TLiteral<"multiple">]>;
119
- value: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
120
- }>]>>;
121
- spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
122
- before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
123
- after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
124
- }>>;
125
117
  level: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<1>, _sinclair_typebox.TLiteral<2>, _sinclair_typebox.TLiteral<3>, _sinclair_typebox.TLiteral<4>, _sinclair_typebox.TLiteral<5>, _sinclair_typebox.TLiteral<6>]>>;
126
118
  font: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
127
119
  size: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
@@ -144,6 +136,14 @@ declare const createReportPropsSchema: (_moduleRef?: TSchema) => _sinclair_typeb
144
136
  }>>;
145
137
  family: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
146
138
  }>>;
139
+ lineSpacing: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TObject<{
140
+ type: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"single">, _sinclair_typebox.TLiteral<"atLeast">, _sinclair_typebox.TLiteral<"exactly">, _sinclair_typebox.TLiteral<"double">, _sinclair_typebox.TLiteral<"multiple">]>;
141
+ value: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
142
+ }>]>>;
143
+ spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
144
+ before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
145
+ after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
146
+ }>>;
147
147
  language: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
148
148
  noProof: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
149
149
  noProofWords: _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TString>>;
@@ -156,10 +156,6 @@ declare const createReportPropsSchema: (_moduleRef?: TSchema) => _sinclair_typeb
156
156
  }>>;
157
157
  paragraph: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
158
158
  text: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
159
- spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
160
- before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
161
- after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
162
- }>>;
163
159
  font: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
164
160
  size: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
165
161
  color: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
@@ -181,6 +177,10 @@ declare const createReportPropsSchema: (_moduleRef?: TSchema) => _sinclair_typeb
181
177
  }>>;
182
178
  family: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
183
179
  }>>;
180
+ spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
181
+ before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
182
+ after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
183
+ }>>;
184
184
  language: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
185
185
  noProof: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
186
186
  noProofWords: _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TString>>;
@@ -367,14 +367,6 @@ declare const ReportPropsSchema: _sinclair_typebox.TObject<{
367
367
  componentDefaults: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
368
368
  heading: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
369
369
  text: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
370
- lineSpacing: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TObject<{
371
- type: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"single">, _sinclair_typebox.TLiteral<"atLeast">, _sinclair_typebox.TLiteral<"exactly">, _sinclair_typebox.TLiteral<"double">, _sinclair_typebox.TLiteral<"multiple">]>;
372
- value: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
373
- }>]>>;
374
- spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
375
- before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
376
- after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
377
- }>>;
378
370
  level: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<1>, _sinclair_typebox.TLiteral<2>, _sinclair_typebox.TLiteral<3>, _sinclair_typebox.TLiteral<4>, _sinclair_typebox.TLiteral<5>, _sinclair_typebox.TLiteral<6>]>>;
379
371
  font: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
380
372
  size: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
@@ -397,6 +389,14 @@ declare const ReportPropsSchema: _sinclair_typebox.TObject<{
397
389
  }>>;
398
390
  family: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
399
391
  }>>;
392
+ lineSpacing: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TObject<{
393
+ type: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"single">, _sinclair_typebox.TLiteral<"atLeast">, _sinclair_typebox.TLiteral<"exactly">, _sinclair_typebox.TLiteral<"double">, _sinclair_typebox.TLiteral<"multiple">]>;
394
+ value: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
395
+ }>]>>;
396
+ spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
397
+ before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
398
+ after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
399
+ }>>;
400
400
  language: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
401
401
  noProof: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
402
402
  noProofWords: _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TString>>;
@@ -409,10 +409,6 @@ declare const ReportPropsSchema: _sinclair_typebox.TObject<{
409
409
  }>>;
410
410
  paragraph: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
411
411
  text: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
412
- spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
413
- before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
414
- after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
415
- }>>;
416
412
  font: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
417
413
  size: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
418
414
  color: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
@@ -434,6 +430,10 @@ declare const ReportPropsSchema: _sinclair_typebox.TObject<{
434
430
  }>>;
435
431
  family: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
436
432
  }>>;
433
+ spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
434
+ before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
435
+ after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
436
+ }>>;
437
437
  language: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
438
438
  noProof: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
439
439
  noProofWords: _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TString>>;
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  validateDocumentWithSchema,
7
7
  validateJsonComponent
8
- } from "../chunk-TIQSCGX7.js";
8
+ } from "../chunk-WTKEDXYL.js";
9
9
  import "../chunk-5KQFVW6L.js";
10
10
  import "../chunk-7GGTZ4TA.js";
11
11
  import "../chunk-65U4X47S.js";
@@ -2129,14 +2129,6 @@ declare const ThemeConfigSchema: _sinclair_typebox.TObject<{
2129
2129
  componentDefaults: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
2130
2130
  heading: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
2131
2131
  text: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
2132
- lineSpacing: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TObject<{
2133
- type: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"single">, _sinclair_typebox.TLiteral<"atLeast">, _sinclair_typebox.TLiteral<"exactly">, _sinclair_typebox.TLiteral<"double">, _sinclair_typebox.TLiteral<"multiple">]>;
2134
- value: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
2135
- }>]>>;
2136
- spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
2137
- before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
2138
- after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
2139
- }>>;
2140
2132
  level: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<1>, _sinclair_typebox.TLiteral<2>, _sinclair_typebox.TLiteral<3>, _sinclair_typebox.TLiteral<4>, _sinclair_typebox.TLiteral<5>, _sinclair_typebox.TLiteral<6>]>>;
2141
2133
  font: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
2142
2134
  size: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
@@ -2159,6 +2151,14 @@ declare const ThemeConfigSchema: _sinclair_typebox.TObject<{
2159
2151
  }>>;
2160
2152
  family: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
2161
2153
  }>>;
2154
+ lineSpacing: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TObject<{
2155
+ type: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"single">, _sinclair_typebox.TLiteral<"atLeast">, _sinclair_typebox.TLiteral<"exactly">, _sinclair_typebox.TLiteral<"double">, _sinclair_typebox.TLiteral<"multiple">]>;
2156
+ value: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
2157
+ }>]>>;
2158
+ spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
2159
+ before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
2160
+ after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
2161
+ }>>;
2162
2162
  language: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
2163
2163
  noProof: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
2164
2164
  noProofWords: _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TString>>;
@@ -2171,10 +2171,6 @@ declare const ThemeConfigSchema: _sinclair_typebox.TObject<{
2171
2171
  }>>;
2172
2172
  paragraph: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
2173
2173
  text: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
2174
- spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
2175
- before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
2176
- after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
2177
- }>>;
2178
2174
  font: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
2179
2175
  size: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
2180
2176
  color: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
@@ -2196,6 +2192,10 @@ declare const ThemeConfigSchema: _sinclair_typebox.TObject<{
2196
2192
  }>>;
2197
2193
  family: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
2198
2194
  }>>;
2195
+ spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
2196
+ before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
2197
+ after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
2198
+ }>>;
2199
2199
  language: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
2200
2200
  noProof: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
2201
2201
  noProofWords: _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TString>>;
@@ -115,14 +115,6 @@ declare const COMPONENT_SCHEMA_MAP: {
115
115
  componentDefaults: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
116
116
  heading: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
117
117
  text: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
118
- lineSpacing: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TObject<{
119
- type: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"single">, _sinclair_typebox.TLiteral<"atLeast">, _sinclair_typebox.TLiteral<"exactly">, _sinclair_typebox.TLiteral<"double">, _sinclair_typebox.TLiteral<"multiple">]>;
120
- value: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
121
- }>]>>;
122
- spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
123
- before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
124
- after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
125
- }>>;
126
118
  level: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<1>, _sinclair_typebox.TLiteral<2>, _sinclair_typebox.TLiteral<3>, _sinclair_typebox.TLiteral<4>, _sinclair_typebox.TLiteral<5>, _sinclair_typebox.TLiteral<6>]>>;
127
119
  font: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
128
120
  size: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
@@ -145,6 +137,14 @@ declare const COMPONENT_SCHEMA_MAP: {
145
137
  }>>;
146
138
  family: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
147
139
  }>>;
140
+ lineSpacing: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TObject<{
141
+ type: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"single">, _sinclair_typebox.TLiteral<"atLeast">, _sinclair_typebox.TLiteral<"exactly">, _sinclair_typebox.TLiteral<"double">, _sinclair_typebox.TLiteral<"multiple">]>;
142
+ value: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
143
+ }>]>>;
144
+ spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
145
+ before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
146
+ after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
147
+ }>>;
148
148
  language: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
149
149
  noProof: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
150
150
  noProofWords: _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TString>>;
@@ -157,10 +157,6 @@ declare const COMPONENT_SCHEMA_MAP: {
157
157
  }>>;
158
158
  paragraph: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
159
159
  text: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
160
- spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
161
- before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
162
- after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
163
- }>>;
164
160
  font: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
165
161
  size: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
166
162
  color: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
@@ -182,6 +178,10 @@ declare const COMPONENT_SCHEMA_MAP: {
182
178
  }>>;
183
179
  family: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
184
180
  }>>;
181
+ spacing: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
182
+ before: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
183
+ after: _sinclair_typebox.TOptional<_sinclair_typebox.TNumber>;
184
+ }>>;
185
185
  language: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
186
186
  noProof: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
187
187
  noProofWords: _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TString>>;
@@ -48,7 +48,7 @@ import {
48
48
  validateTheme,
49
49
  validateThemeJson,
50
50
  validateThemeWithEnhancement
51
- } from "../../chunk-U574TQ3W.js";
51
+ } from "../../chunk-JY5JBFBA.js";
52
52
  import "../../chunk-QNIC7H4H.js";
53
53
  import {
54
54
  comprehensiveValidateDocument,
@@ -71,7 +71,7 @@ import {
71
71
  validateJsonComponent,
72
72
  validateJsonDocument,
73
73
  validateWithEnhancement
74
- } from "../../chunk-TIQSCGX7.js";
74
+ } from "../../chunk-WTKEDXYL.js";
75
75
  import "../../chunk-5KQFVW6L.js";
76
76
  import "../../chunk-7GGTZ4TA.js";
77
77
  import "../../chunk-65U4X47S.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@json-to-office/shared-docx",
3
- "version": "0.19.0",
3
+ "version": "0.19.1",
4
4
  "description": "DOCX-specific schemas, component registry and validation",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -30,8 +30,8 @@
30
30
  "dependencies": {
31
31
  "@sinclair/typebox": "0.34.38",
32
32
  "docx": "9.5.1",
33
- "@json-to-office/shared": "^0.16.0",
34
- "@json-to-office/shared-pptx": "^0.19.0"
33
+ "@json-to-office/shared-pptx": "^0.19.0",
34
+ "@json-to-office/shared": "^0.16.0"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/node": "20.11.0",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/validation/unified/error-transformer.ts","../src/validation/unified/deep-validator.ts","../src/validation/unified/base-validator.ts","../src/validation/unified/document-validator.ts"],"sourcesContent":["/**\n * Unified error transformation utilities\n * Converts TypeBox ValueError objects to standardized ValidationError format\n */\n\nimport type { ValueError } from '@sinclair/typebox/value';\nimport type { ValidationError } from '@json-to-office/shared';\nimport { ReportPropsSchema } from '../../schemas/components/report';\nimport {\n isObjectSchema,\n getObjectSchemaPropertyNames,\n getLiteralValue,\n type ErrorFormatterConfig,\n createErrorConfig,\n formatErrorMessage,\n ERROR_EMOJIS,\n} from '@json-to-office/shared';\n\n/**\n * Generate enhanced error message based on error type and context\n */\nfunction generateEnhancedMessage(\n error: ValueError,\n _config: Required<ErrorFormatterConfig>\n): string {\n const typeStr = String(error.type || '');\n const path = error.path || 'root';\n\n // Handle union errors specially - these are the most common and least helpful\n if (typeStr === '62' || typeStr === 'union') {\n return generateUnionErrorMessage(error);\n }\n\n // Handle additional properties error\n if (error.message?.includes('additionalProperties')) {\n return generateAdditionalPropertiesMessage(error);\n }\n\n // Handle missing required properties\n if (error.message?.includes('Required property')) {\n return generateRequiredPropertyMessage(error);\n }\n\n // Handle type mismatches\n if (\n typeStr === 'string' ||\n typeStr === 'number' ||\n typeStr === 'boolean' ||\n typeStr === 'array' ||\n typeStr === 'object'\n ) {\n return generateTypeMismatchMessage(error);\n }\n\n // Handle literal value errors\n if (typeStr === 'literal') {\n return generateLiteralErrorMessage(error);\n }\n\n // Handle pattern/regex errors\n if (typeStr === 'pattern' || typeStr === 'RegExp') {\n return generatePatternErrorMessage(error);\n }\n\n // Default to original message with some context\n return `At ${path}: ${error.message}`;\n}\n\n/**\n * Generate message for union validation errors\n */\nfunction generateUnionErrorMessage(error: ValueError): string {\n const path = error.path || 'root';\n const value = error.value;\n\n // Try to determine what the user was attempting\n if (path === 'root' || path === '/' || path === '/jsonDefinition') {\n // Root level or jsonDefinition union error - likely a document type issue\n if (value && typeof value === 'object') {\n if ('name' in value) {\n const name = value.name;\n if (name === 'docx') {\n return 'Document structure appears valid but contains invalid component configurations. Check each component for errors.';\n }\n return `Unknown document name '${name}'. Expected 'docx'.`;\n }\n\n // Missing name field\n const valueAny = value as Record<string, unknown>;\n if ('children' in value && Array.isArray(valueAny.children)) {\n return 'Document is missing required \\'name\\' field. Add \"name\": \"docx\" at the root level.';\n }\n\n // Check if it might be a theme\n if ('name' in value || 'styles' in value) {\n return 'This appears to be a theme configuration. Use --type theme or ensure proper document structure.';\n }\n }\n return 'Invalid document structure. Expected a document with name=\"docx\" or a theme configuration.';\n }\n\n // Component-level union error\n if (path.includes('/children/')) {\n if (value && typeof value === 'object' && 'name' in value) {\n const componentType = (value as any).name;\n return `Invalid component configuration for type '${componentType}'. Check that all required fields are present and correctly formatted.`;\n }\n return 'Invalid component structure. Each component must have a \"name\" field and valid configuration.';\n }\n\n // Default union error message\n return `Value at ${path} doesn't match any of the expected formats. Check the structure and required fields.`;\n}\n\n/**\n * Generate message for additional properties errors\n */\nfunction generateAdditionalPropertiesMessage(error: ValueError): string {\n const path = error.path || 'root';\n const value = error.value;\n\n if (typeof value === 'object' && value !== null) {\n // Try to identify the unknown properties\n const schema = error.schema;\n if (schema && isObjectSchema(schema)) {\n const knownProps = getObjectSchemaPropertyNames(schema);\n const actualProps = Object.keys(value);\n const unknownProps = actualProps.filter((p) => !knownProps.includes(p));\n\n if (unknownProps.length > 0) {\n return (\n `Unknown properties at ${path}: ${unknownProps.join(', ')}. ` +\n `Allowed properties are: ${knownProps.join(', ')}`\n );\n }\n }\n }\n\n return `Additional properties not allowed at ${path}. Check for typos or unsupported fields.`;\n}\n\n/**\n * Generate message for required property errors\n */\nfunction generateRequiredPropertyMessage(error: ValueError): string {\n const path = error.path || 'root';\n const match = error.message?.match(/Required property '([^']+)'/);\n\n if (match) {\n const propName = match[1];\n return `Missing required field '${propName}' at ${path}. This field is mandatory for this configuration.`;\n }\n\n return `Missing required property at ${path}. Check that all mandatory fields are present.`;\n}\n\n/**\n * Generate message for type mismatch errors\n */\nfunction generateTypeMismatchMessage(error: ValueError): string {\n const path = error.path || 'root';\n const expectedType = String(error.type);\n const actualType = Array.isArray(error.value) ? 'array' : typeof error.value;\n\n // Provide context-specific messages\n if (path.includes('alignment')) {\n return `Invalid alignment value at ${path}. Expected one of: left, center, right, justify`;\n }\n\n if (path.includes('color')) {\n return `Invalid color value at ${path}. Use hex format (#RRGGBB), rgb(r,g,b), or a named color`;\n }\n\n if (path.includes('fontSize') || path.includes('size')) {\n return `Invalid size value at ${path}. Expected a number (in points)`;\n }\n\n if (\n path.includes('margin') ||\n path.includes('padding') ||\n path.includes('spacing')\n ) {\n return `Invalid spacing value at ${path}. Expected a number or spacing object with top/bottom/left/right`;\n }\n\n return `Type mismatch at ${path}: Expected ${expectedType} but got ${actualType}`;\n}\n\n/**\n * Generate message for literal value errors\n */\nfunction generateLiteralErrorMessage(error: ValueError): string {\n const path = error.path || 'root';\n const expected = error.schema\n ? JSON.stringify(getLiteralValue(error.schema))\n : 'specific value';\n const actual = JSON.stringify(error.value);\n\n return `Invalid value at ${path}: Expected exactly ${expected} but got ${actual}`;\n}\n\n/**\n * Generate message for pattern/regex errors\n */\nfunction generatePatternErrorMessage(error: ValueError): string {\n const path = error.path || 'root';\n\n // Try to provide helpful context based on the path\n if (path.includes('email')) {\n return `Invalid email format at ${path}. Use format: user@example.com`;\n }\n\n if (path.includes('url') || path.includes('link')) {\n return `Invalid URL format at ${path}. Use format: https://example.com`;\n }\n\n if (path.includes('date')) {\n return `Invalid date format at ${path}. Use ISO format: YYYY-MM-DD`;\n }\n\n if (path.includes('phone')) {\n return `Invalid phone number format at ${path}`;\n }\n\n return `Value at ${path} doesn't match the required pattern`;\n}\n\n/**\n * Transform TypeBox ValueError to standardized ValidationError\n */\nexport function transformValueError(\n error: ValueError,\n jsonString?: string,\n config?: ErrorFormatterConfig\n): ValidationError {\n const formatterConfig = createErrorConfig(config);\n\n // Generate enhanced message based on error type\n const enhancedMessage = generateEnhancedMessage(error, formatterConfig);\n\n const baseError: ValidationError = {\n path: error.path || 'root',\n message: formatErrorMessage(\n enhancedMessage || error.message,\n formatterConfig\n ),\n code: String(error.type || 'validation_error'),\n value: error.value,\n };\n\n // Add suggestion if available and configured\n if (formatterConfig.includeSuggestions) {\n const suggestion = getSuggestion(error, formatterConfig);\n if (suggestion) {\n baseError.suggestion = formatErrorMessage(suggestion, formatterConfig);\n }\n }\n\n // Calculate line and column if JSON string is provided\n if (jsonString && error.path) {\n const position = calculatePosition(jsonString, error.path);\n if (position) {\n baseError.line = position.line;\n baseError.column = position.column;\n }\n }\n\n return baseError;\n}\n\n/**\n * Transform multiple TypeBox errors to ValidationError array\n * Enhanced to collect ALL errors, not just stopping at union failures\n */\nexport function transformValueErrors(\n errors: ValueError[],\n options?: {\n jsonString?: string;\n maxErrors?: number;\n }\n): ValidationError[] {\n const maxErrors = options?.maxErrors ?? Number.MAX_SAFE_INTEGER;\n const result: ValidationError[] = [];\n const seenPaths = new Set<string>();\n\n // Collect all errors, but avoid duplicates at the same path\n for (const error of errors) {\n if (result.length >= maxErrors) break;\n\n // Create a unique key for this error based on path and type\n const errorKey = `${error.path}:${error.type}`;\n\n // Skip if we've already seen an error at this exact path and type\n // This helps avoid duplicate union errors while still showing all unique issues\n if (!seenPaths.has(errorKey)) {\n seenPaths.add(errorKey);\n result.push(transformValueError(error, options?.jsonString, undefined));\n }\n }\n\n return result;\n}\n\n/**\n * Calculate line and column position in JSON string\n */\nexport function calculatePosition(\n jsonString: string,\n path: string\n): { line: number; column: number } | null {\n try {\n // Convert path like \"/children/0/props/title\" to searchable parts\n const pathParts = path.split('/').filter(Boolean);\n if (pathParts.length === 0) {\n return { line: 1, column: 1 };\n }\n\n // Try to find the last part of the path in the JSON\n const lastPart = pathParts[pathParts.length - 1];\n const searchPattern = `\"${lastPart}\"`;\n const index = jsonString.indexOf(searchPattern);\n\n if (index === -1) {\n // Try to find just the value if it's a property name\n return { line: 1, column: 1 };\n }\n\n // Calculate line and column from index\n const beforeError = jsonString.substring(0, index);\n const lines = beforeError.split('\\n');\n const line = lines.length;\n const column = lines[lines.length - 1].length + 1;\n\n return { line, column };\n } catch {\n return null;\n }\n}\n\n/**\n * Get helpful suggestion based on error type and context\n */\nfunction getSuggestion(\n error: ValueError,\n config: Required<ErrorFormatterConfig>\n): string | undefined {\n const { type, path, value } = error;\n const typeStr = String(type);\n\n // Enhanced suggestions for union errors\n if (typeStr === '62' || typeStr === 'union') {\n if (path === 'root' || path === '/') {\n if (value && typeof value === 'object') {\n if (!('name' in value)) {\n const msg = 'Add a \"name\" field with value \"docx\" for documents';\n return config.includeEmojis ? `${ERROR_EMOJIS.FIX} ${msg}` : msg;\n }\n if ('props' in value && typeof value.props === 'object') {\n const knownFields = getObjectSchemaPropertyNames(ReportPropsSchema);\n return `Review the props section for unsupported fields. Allowed fields: ${knownFields.join(', ')}`;\n }\n }\n return 'Ensure the document has proper structure: { \"name\": \"docx\", \"props\": {...}, \"children\": [...] }';\n }\n if (path?.includes('/children/')) {\n return 'Check that the component has a valid \"name\" and all required fields for that component type';\n }\n return 'Review the structure and ensure all required fields are present with correct types';\n }\n\n // Suggestions for additional properties errors\n if (error.message?.includes('additionalProperties')) {\n return 'Remove any unknown or unsupported fields. Check documentation for allowed properties.';\n }\n\n // Suggestions for required properties\n if (error.message?.includes('Required property')) {\n return 'Add the missing required field to fix this error';\n }\n\n // Type-specific suggestions\n if (typeStr === 'string') {\n if (path?.includes('alignment')) {\n return 'Use one of: left, center, right, justify';\n }\n if (path?.includes('color')) {\n return 'Use a valid color format (hex: #RRGGBB, rgb: rgb(r,g,b), or named color)';\n }\n return 'Provide a text string value';\n }\n\n if (typeStr === 'number') {\n if (path?.includes('fontSize') || path?.includes('size')) {\n return 'Use a number in points (e.g., 12, 14, 16)';\n }\n if (path?.includes('margin') || path?.includes('padding')) {\n return 'Use a number for spacing in points';\n }\n return 'Provide a numeric value';\n }\n\n if (typeStr === 'boolean') {\n return 'Use true or false (without quotes)';\n }\n\n if (typeStr === 'array') {\n if (path?.includes('children') || path?.includes('modules')) {\n return 'Provide an array of component objects, each with a \"name\" field';\n }\n return 'Provide an array/list of values using square brackets []';\n }\n\n if (typeStr === 'object') {\n return 'Provide an object with key-value pairs using curly braces {}';\n }\n\n if (typeStr === 'literal') {\n const expected = error.schema\n ? JSON.stringify(getLiteralValue(error.schema))\n : 'specific value';\n return `Use exactly this value: ${expected}`;\n }\n\n if (typeStr === 'pattern' || typeStr === 'RegExp') {\n if (path?.includes('email')) {\n return 'Use valid email format: user@example.com';\n }\n if (path?.includes('url')) {\n return 'Use valid URL format: https://example.com';\n }\n if (path?.includes('date')) {\n return 'Use ISO date format: YYYY-MM-DD';\n }\n return 'Ensure the value matches the required format';\n }\n\n // Path-based suggestions\n if (path?.includes('name') || path?.includes('type')) {\n return 'Use a valid component name: docx, section, columns, heading, paragraph, image, statistic, table, list, toc, text-box, highcharts, or visual';\n }\n\n return undefined;\n}\n\n/**\n * Format validation errors as a summary string\n */\nexport function formatErrorSummary(errors: ValidationError[]): string {\n if (errors.length === 0) return 'No errors';\n\n if (errors.length === 1) {\n return errors[0].message;\n }\n\n const summary = errors\n .slice(0, 3)\n .map((e) => `${e.path}: ${e.message}`)\n .join(', ');\n\n if (errors.length > 3) {\n return `${summary} and ${errors.length - 3} more...`;\n }\n\n return summary;\n}\n\n/**\n * Group errors by path for better reporting\n */\nexport function groupErrorsByPath(\n errors: ValidationError[]\n): Map<string, ValidationError[]> {\n const grouped = new Map<string, ValidationError[]>();\n\n for (const error of errors) {\n const path = error.path || 'root';\n const group = grouped.get(path) || [];\n group.push(error);\n grouped.set(path, group);\n }\n\n return grouped;\n}\n\n/**\n * Create a JSON parse error\n */\nexport function createJsonParseError(\n error: Error,\n jsonString: string\n): ValidationError {\n // Try to extract position from error message\n const match = error.message.match(/position (\\d+)/);\n const position = match ? parseInt(match[1], 10) : 0;\n\n let line = 1;\n let column = 1;\n\n if (position > 0) {\n const lines = jsonString.substring(0, position).split('\\n');\n line = lines.length;\n column = lines[lines.length - 1].length + 1;\n }\n\n return {\n path: 'root',\n message: `JSON Parse Error: ${error.message}`,\n code: 'json_parse_error',\n line,\n column,\n suggestion: 'Check for missing commas, quotes, or brackets',\n };\n}\n","/**\n * Deep validation utilities for collecting ALL errors in nested structures\n * This bypasses TypeBox's union short-circuiting to provide comprehensive error reporting\n */\n\nimport { Value } from '@sinclair/typebox/value';\nimport type { TSchema } from '@sinclair/typebox';\nimport type { ValidationError } from '@json-to-office/shared';\nimport { STANDARD_COMPONENTS_REGISTRY } from '../../schemas/component-registry';\nimport { CustomComponentDefinitionSchema } from '../../schemas/custom-components';\nimport { transformValueErrors } from './error-transformer';\n\n// Map of component names to their props schemas, sourced from the registry.\n// This stays in sync as new standard components are added, so the document\n// root ('docx') and every standard child component are recognized here.\nconst COMPONENT_SCHEMAS: Record<string, TSchema> = Object.fromEntries([\n ...STANDARD_COMPONENTS_REGISTRY.map((c) => [c.name, c.propsSchema]),\n ['custom', CustomComponentDefinitionSchema],\n]);\n\n// Root component names that may appear at the top of a document.\nconst ROOT_COMPONENT_NAMES = new Set(\n STANDARD_COMPONENTS_REGISTRY.filter((c) =>\n Boolean(c.special?.hasSchemaField)\n ).map((c) => c.name)\n);\n\n/**\n * Options that tune deep validation.\n *\n * `knownCustomNames` — names of registered plugin components. The deep\n * validator neither flags these as \"unknown component\" nor validates their\n * props here; the plugin layer validates custom props version-aware separately.\n *\n * `allowUnknownFields` — when true, unknown properties are stripped before the\n * per-component check instead of being rejected. The escape hatch for callers\n * migrating onto strict schemas.\n */\nexport interface DeepValidateOptions {\n knownCustomNames?: Set<string>;\n allowUnknownFields?: boolean;\n}\n\n// Image source fields that are mutually exclusive: exactly one may be set.\nconst IMAGE_SOURCE_FIELDS = ['path', 'base64', 'svg'] as const;\n\n/**\n * Names of the image source fields that carry a non-empty value on a props object.\n */\nexport function presentImageSources(props: unknown): string[] {\n if (!props || typeof props !== 'object') return [];\n const p = props as Record<string, unknown>;\n return IMAGE_SOURCE_FIELDS.filter((f) => {\n const v = p[f];\n return typeof v === 'string' && v.trim().length > 0;\n });\n}\n\n/**\n * Collect \"more than one image source\" conflicts anywhere in a document.\n *\n * `path`, `base64`, and `svg` are mutually exclusive on the image component, but\n * all three are optional fields on a single object schema — so a multi-source\n * payload passes TypeBox's structural check and would otherwise be silently\n * resolved by runtime precedence (svg > base64 > path). This walk runs\n * unconditionally and rejects such payloads. It traverses every nested value, so\n * images inside columns, table cells, text boxes, headers/footers, and sections\n * are all covered regardless of container shape.\n */\nexport function collectImageSourceConflicts(data: unknown): ValidationError[] {\n const errors: ValidationError[] = [];\n\n const visit = (node: any, path: string): void => {\n if (Array.isArray(node)) {\n node.forEach((item, i) => visit(item, `${path}/${i}`));\n return;\n }\n if (!node || typeof node !== 'object') return;\n\n if (node.name === 'image') {\n const present = presentImageSources(node.props);\n if (present.length > 1) {\n errors.push({\n path: `${path}/props`,\n message: `Image component accepts only one source, but found ${present\n .map((f) => `\"${f}\"`)\n .join(', ')}. Use exactly one of \"path\", \"base64\", or \"svg\".`,\n code: 'mutually_exclusive',\n });\n }\n }\n\n for (const key of Object.keys(node)) {\n visit(node[key], `${path}/${key}`);\n }\n };\n\n visit(data, '');\n return errors;\n}\n\n/**\n * Deep validate a document to collect ALL errors, not just union-level errors\n */\nexport function deepValidateDocument(\n data: any,\n opts: DeepValidateOptions = {}\n): ValidationError[] {\n const allErrors: ValidationError[] = [];\n\n // Validate the document structure\n if (!data || typeof data !== 'object') {\n allErrors.push({\n path: 'root',\n message: 'Document must be an object',\n code: 'invalid_type',\n });\n return allErrors;\n }\n\n // Check name field\n if (!data.name) {\n allErrors.push({\n path: '/name',\n message: 'Missing required field \"name\"',\n code: 'required_property',\n });\n } else if (!ROOT_COMPONENT_NAMES.has(data.name)) {\n const expected = [...ROOT_COMPONENT_NAMES].map((n) => `\"${n}\"`).join(', ');\n allErrors.push({\n path: '/name',\n message: `Invalid name \"${data.name}\". Expected ${expected}`,\n code: 'invalid_value',\n });\n }\n\n // Validate props section when the key is present so explicit `null` (or any\n // falsy non-object) is checked against the component's schema instead of\n // silently passing.\n if (ROOT_COMPONENT_NAMES.has(data.name) && 'props' in data) {\n const propsErrors = validateComponentProps(\n data.name,\n data.props,\n '/props',\n opts\n );\n allErrors.push(...propsErrors);\n }\n\n // Validate children array\n if (!data.children) {\n allErrors.push({\n path: '/children',\n message: 'Missing required field \"children\"',\n code: 'required_property',\n });\n } else if (!Array.isArray(data.children)) {\n allErrors.push({\n path: '/children',\n message: 'Field \"children\" must be an array',\n code: 'invalid_type',\n });\n } else {\n // Validate each child component\n data.children.forEach((child: any, index: number) => {\n const childPath = `/children/${index}`;\n\n if (!child || typeof child !== 'object') {\n allErrors.push({\n path: childPath,\n message: 'Component must be an object',\n code: 'invalid_type',\n });\n return;\n }\n\n // Check component name\n if (!child.name) {\n allErrors.push({\n path: `${childPath}/name`,\n message: 'Component missing required field \"name\"',\n code: 'required_property',\n });\n return;\n }\n\n // Registered plugin components are validated version-aware by the plugin\n // layer; skip them here so they are neither flagged as unknown nor\n // checked against a standard schema.\n if (opts.knownCustomNames?.has(child.name)) {\n return;\n }\n\n // Validate props against the component's schema. When props is omitted,\n // validate an empty object so the schema decides whether props are\n // required (e.g. `section` needs none; `heading` requires text+level)\n // rather than assuming every component requires a props field.\n if (child.props != null) {\n allErrors.push(\n ...validateComponentProps(\n child.name,\n child.props,\n `${childPath}/props`,\n opts\n )\n );\n } else if (child.name !== 'custom') {\n allErrors.push(\n ...validateComponentProps(child.name, {}, `${childPath}/props`, opts)\n );\n }\n\n // Special handling for section components (recursive)\n if (child.name === 'section' && child.children) {\n if (!Array.isArray(child.children)) {\n allErrors.push({\n path: `${childPath}/children`,\n message: 'Section children must be an array',\n code: 'invalid_type',\n });\n } else {\n // Recursively validate nested components\n child.children.forEach((nestedChild: any, nestedIndex: number) => {\n const nestedChildPath = `${childPath}/children/${nestedIndex}`;\n if (!nestedChild || typeof nestedChild !== 'object') {\n allErrors.push({\n path: nestedChildPath,\n message: 'Nested component must be an object',\n code: 'invalid_type',\n });\n return;\n }\n\n if (!nestedChild.name) {\n allErrors.push({\n path: `${nestedChildPath}/name`,\n message: 'Nested component missing required field \"name\"',\n code: 'required_property',\n });\n } else if (opts.knownCustomNames?.has(nestedChild.name)) {\n // Registered plugin component — validated separately.\n } else if (nestedChild.props != null) {\n allErrors.push(\n ...validateComponentProps(\n nestedChild.name,\n nestedChild.props,\n `${nestedChildPath}/props`,\n opts\n )\n );\n } else if (nestedChild.name !== 'custom') {\n allErrors.push(\n ...validateComponentProps(\n nestedChild.name,\n {},\n `${nestedChildPath}/props`,\n opts\n )\n );\n }\n });\n }\n }\n });\n }\n\n return allErrors;\n}\n\n/**\n * Validate a component's props against its schema\n */\nfunction validateComponentProps(\n componentName: string,\n props: any,\n basePath: string,\n opts: DeepValidateOptions = {}\n): ValidationError[] {\n const errors: ValidationError[] = [];\n\n // Get the schema for this component\n const schema = COMPONENT_SCHEMAS[componentName];\n if (!schema) {\n // Unknown component type\n errors.push({\n path: basePath.replace('/props', '/name'),\n message: `Unknown component \"${componentName}\"`,\n code: 'unknown_component',\n });\n return errors;\n }\n\n // When unknown fields are explicitly allowed, strip them before checking so\n // additionalProperties:false no longer rejects — required/typed fields are\n // still enforced.\n const toCheck = opts.allowUnknownFields\n ? Value.Clean(schema, Value.Clone(props))\n : props;\n\n // Use TypeBox to validate against the specific schema\n if (!Value.Check(schema, toCheck)) {\n const valueErrors = [...Value.Errors(schema, toCheck)];\n const transformedErrors = transformValueErrors(valueErrors, {\n maxErrors: 100,\n });\n\n // Adjust paths to be relative to the document root\n transformedErrors.forEach((error) => {\n // Combine base path with error path\n const fullPath =\n error.path === 'root'\n ? basePath\n : `${basePath}${error.path.startsWith('/') ? error.path : '/' + error.path}`;\n\n errors.push({\n ...error,\n path: fullPath,\n });\n });\n }\n\n return errors;\n}\n\n/**\n * Combine deep validation with standard validation.\n *\n * Deep validation produces precise, path-aware errors. TypeBox's discriminated-\n * union check, by contrast, often collapses any failure under the root document\n * into a single generic \"Invalid component configuration for 'docx'\" message at\n * `root` — useful as a signal that something is wrong, but actionable only via\n * the deep-validator's output. We always strip that catch-all so it doesn't\n * appear alongside (or, worse, instead of) the real diagnostics.\n */\nexport function comprehensiveValidateDocument(\n data: any,\n existingErrors: ValidationError[] = [],\n opts: DeepValidateOptions = {}\n): ValidationError[] {\n const deepErrors = deepValidateDocument(data, opts);\n\n const filteredExisting = existingErrors.filter(\n (e) => !isGenericUnionCatchAll(e)\n );\n\n return deduplicateErrors([...filteredExisting, ...deepErrors]);\n}\n\n/**\n * Detect TypeBox's generic union/discriminator catch-all error at the document\n * root. These messages name the component type ('docx') but give no actionable\n * detail — the deep validator emits the actual path-level errors instead.\n */\nfunction isGenericUnionCatchAll(error: ValidationError): boolean {\n const atRoot = !error.path || error.path === 'root' || error.path === '/';\n if (!atRoot) return false;\n const msg = error.message || '';\n return (\n /invalid (component|module) configurations?/i.test(msg) ||\n /invalid document structure/i.test(msg)\n );\n}\n\n/**\n * Deduplicate errors by path and message\n */\nfunction deduplicateErrors(errors: ValidationError[]): ValidationError[] {\n const seen = new Set<string>();\n const unique: ValidationError[] = [];\n\n for (const error of errors) {\n const key = `${error.path}:${error.message}`;\n if (!seen.has(key)) {\n seen.add(key);\n unique.push(error);\n }\n }\n\n return unique;\n}\n","/**\n * Base validator implementation\n * Core validation logic that eliminates duplication across the codebase\n */\n\nimport { Value } from '@sinclair/typebox/value';\nimport type { Static, TSchema } from '@sinclair/typebox';\nimport type {\n ValidationResult,\n ValidationOptions,\n JsonValidationResult,\n} from './types';\nimport {\n transformValueErrors,\n createJsonParseError,\n formatErrorSummary,\n} from '@json-to-office/shared';\n\n/**\n * Base validation function that all specific validators use\n * This eliminates the repeated Value.Check -> Value.Errors -> map pattern\n */\nexport function validateAgainstSchema<T extends TSchema>(\n schema: T,\n data: unknown,\n options?: ValidationOptions\n): ValidationResult<Static<T>> {\n try {\n // Check if data matches the schema\n if (!Value.Check(schema, data)) {\n // Collect ALL errors (not just the first one)\n const errors = [...Value.Errors(schema, data)];\n const transformedErrors = transformValueErrors(errors, {\n jsonString: options?.jsonString,\n maxErrors: options?.maxErrors || 100, // Default to 100 if not specified\n });\n\n return {\n valid: false,\n errors: transformedErrors,\n };\n }\n\n // Data is valid, apply transformations if requested\n let processedData = data;\n\n if (options?.clean) {\n // Remove unknown properties\n processedData = Value.Clean(schema, Value.Clone(processedData));\n }\n\n if (options?.applyDefaults) {\n // Apply default values\n processedData = Value.Default(schema, processedData);\n }\n\n return {\n valid: true,\n data: processedData as Static<T>,\n };\n } catch (error) {\n // Handle unexpected errors\n return {\n valid: false,\n errors: [\n {\n path: 'root',\n message:\n error instanceof Error ? error.message : 'Unknown validation error',\n code: 'validation_exception',\n },\n ],\n };\n }\n}\n\n/**\n * Validate JSON string or object with schema\n */\nexport function validateJson<T extends TSchema>(\n schema: T,\n jsonInput: string | object,\n options?: ValidationOptions\n): JsonValidationResult<Static<T>> {\n // Handle string input\n if (typeof jsonInput === 'string') {\n // Basic input validation\n if (!jsonInput.trim()) {\n return {\n valid: false,\n errors: [\n {\n path: 'root',\n message: 'Input must be a non-empty string',\n code: 'empty_input',\n },\n ],\n isJsonError: true,\n };\n }\n\n // Try to parse JSON\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonInput);\n } catch (error) {\n if (error instanceof Error) {\n return {\n valid: false,\n errors: [createJsonParseError(error, jsonInput)],\n isJsonError: true,\n };\n }\n return {\n valid: false,\n errors: [\n {\n path: 'root',\n message: 'Failed to parse JSON',\n code: 'json_parse_error',\n },\n ],\n isJsonError: true,\n };\n }\n\n // Validate parsed object with position calculation\n const result = validateAgainstSchema(schema, parsed, {\n ...options,\n jsonString: jsonInput,\n calculatePosition: true,\n });\n\n return {\n ...result,\n parsed,\n isJsonError: false,\n };\n }\n\n // Handle object input directly\n const result = validateAgainstSchema(schema, jsonInput, options);\n return {\n ...result,\n parsed: jsonInput,\n isJsonError: false,\n };\n}\n\n/**\n * Batch validate multiple items\n */\nexport function validateBatch<T extends TSchema>(\n schema: T,\n items: unknown[],\n options?: ValidationOptions\n): ValidationResult<Static<T>[]> {\n const results: Static<T>[] = [];\n const allErrors: any[] = [];\n let hasErrors = false;\n\n for (let i = 0; i < items.length; i++) {\n const result = validateAgainstSchema(schema, items[i], options);\n\n if (result.valid && result.data) {\n results.push(result.data);\n } else {\n hasErrors = true;\n if (result.errors) {\n // Prefix errors with item index\n const prefixedErrors = result.errors.map((e) => ({\n ...e,\n path: `[${i}]${e.path ? '/' + e.path : ''}`,\n }));\n allErrors.push(...prefixedErrors);\n }\n }\n\n // Stop if we've hit the max errors\n if (options?.maxErrors && allErrors.length >= options.maxErrors) {\n break;\n }\n }\n\n if (hasErrors) {\n return {\n valid: false,\n errors: allErrors.slice(0, options?.maxErrors),\n };\n }\n\n return {\n valid: true,\n data: results,\n };\n}\n\n/**\n * Validate with custom error enhancement\n */\nexport function validateWithEnhancement<T extends TSchema>(\n schema: T,\n data: unknown,\n enhancer: (errors: any[]) => any[],\n options?: ValidationOptions\n): ValidationResult<Static<T>> {\n const result = validateAgainstSchema(schema, data, options);\n\n if (!result.valid && result.errors) {\n result.errors = enhancer(result.errors);\n }\n\n return result;\n}\n\n/**\n * Create a validator function for a specific schema\n */\nexport function createValidator<T extends TSchema>(\n schema: T,\n defaultOptions?: ValidationOptions\n) {\n return (data: unknown, options?: ValidationOptions) => {\n return validateAgainstSchema(schema, data, {\n ...defaultOptions,\n ...options,\n });\n };\n}\n\n/**\n * Create a JSON validator function for a specific schema\n */\nexport function createJsonValidator<T extends TSchema>(\n schema: T,\n defaultOptions?: ValidationOptions\n) {\n return (jsonInput: string | object, options?: ValidationOptions) => {\n return validateJson(schema, jsonInput, {\n ...defaultOptions,\n ...options,\n });\n };\n}\n\n/**\n * Utility to check if validation result is successful with type guard\n */\nexport function isValidationSuccess<T>(\n result: ValidationResult<T>\n): result is ValidationResult<T> & { valid: true; data: T } {\n return result.valid === true && result.data !== undefined;\n}\n\n/**\n * Get validation error summary\n */\nexport function getValidationSummary(result: ValidationResult): string {\n if (result.valid) {\n return 'Validation successful';\n }\n\n if (!result.errors || result.errors.length === 0) {\n return 'Validation failed with unknown error';\n }\n\n return formatErrorSummary(result.errors);\n}\n","/**\n * Document validation implementation\n * Single source of truth for all document validation\n */\n\nimport type { Static } from '@sinclair/typebox';\nimport {\n ComponentDefinitionSchema,\n StandardComponentDefinitionSchema,\n} from '../../schemas/components';\nimport { extractStandardComponentNames } from '@json-to-office/shared';\nimport {\n comprehensiveValidateDocument,\n collectImageSourceConflicts,\n} from './deep-validator';\n\n// JsonComponentDefinitionSchema is just an alias for ComponentDefinitionSchema\nconst JsonComponentDefinitionSchema = ComponentDefinitionSchema;\nimport type { DocumentValidationResult, ValidationOptions } from './types';\nimport { validateAgainstSchema, validateJson } from './base-validator';\n\n/**\n * Validate a document/report component definition\n */\nexport function validateDocument(\n data: unknown,\n options?: ValidationOptions\n): DocumentValidationResult {\n const result = validateAgainstSchema(\n ComponentDefinitionSchema,\n data,\n options\n );\n\n // If validation failed, use deep validation to get all detailed errors\n let finalErrors = result.errors || [];\n let finalValid = result.valid;\n if (!result.valid && data) {\n finalErrors = comprehensiveValidateDocument(data, result.errors, {\n allowUnknownFields: options?.allowUnknownFields,\n knownCustomNames: options?.knownCustomNames,\n });\n // If TypeBox's union check produced only generic catch-all errors and the\n // deep validator finds nothing actionable, treat the document as valid.\n if (finalErrors.length === 0) {\n finalValid = true;\n }\n }\n\n // Image source mutual-exclusivity is a semantic rule the structural schema\n // cannot express, so it runs unconditionally — a multi-source image passes\n // the TypeBox check above.\n const sourceConflicts = collectImageSourceConflicts(data);\n if (sourceConflicts.length > 0) {\n finalErrors = [...finalErrors, ...sourceConflicts];\n finalValid = false;\n }\n\n // Add document-specific metadata. Keep `data` populated whenever `valid` is\n // true so `isValidDocument()` (which requires both) stays consistent — when\n // TypeBox failed and the deep validator cleared the doc, fall back to the\n // original input as the data payload.\n const resolvedData =\n result.data ??\n (finalValid\n ? (data as Static<typeof ComponentDefinitionSchema>)\n : undefined);\n const documentResult: DocumentValidationResult = {\n ...result,\n valid: finalValid,\n documentType: 'docx',\n errors: finalErrors,\n data: resolvedData,\n };\n\n // Check if document has custom components\n if (finalValid) {\n const doc = resolvedData as any;\n if (doc && doc.children && Array.isArray(doc.children)) {\n const hasCustom = doc.children.some(\n (c: any) => !isStandardComponentName(c.name)\n );\n documentResult.hasCustomComponents = hasCustom;\n }\n }\n\n return documentResult;\n}\n\n/**\n * Validate a JSON document (string or object)\n */\nexport function validateJsonDocument(\n jsonInput: string | object,\n options?: ValidationOptions\n): DocumentValidationResult {\n // Use the JSON-specific schema which includes the $schema field\n const result = validateJson(\n JsonComponentDefinitionSchema,\n jsonInput,\n options\n );\n\n // If validation failed, use deep validation to get all detailed errors\n let finalErrors = result.errors || [];\n let finalValid = result.valid;\n if (!result.valid && result.parsed) {\n finalErrors = comprehensiveValidateDocument(result.parsed, result.errors, {\n allowUnknownFields: options?.allowUnknownFields,\n knownCustomNames: options?.knownCustomNames,\n });\n if (finalErrors.length === 0) {\n finalValid = true;\n }\n }\n\n // Image source mutual-exclusivity (see validateDocument) — runs always.\n const sourceConflicts = collectImageSourceConflicts(result.parsed);\n if (sourceConflicts.length > 0) {\n finalErrors = [...finalErrors, ...sourceConflicts];\n finalValid = false;\n }\n\n // Add document-specific metadata. Keep `data` populated whenever `valid` is\n // true so `isValidDocument()` (which requires both) stays consistent — when\n // TypeBox failed and the deep validator cleared the doc, fall back to the\n // parsed input as the data payload.\n const resolvedData =\n result.data ??\n (finalValid\n ? (result.parsed as Static<typeof ComponentDefinitionSchema>)\n : undefined);\n const documentResult: DocumentValidationResult = {\n ...result,\n valid: finalValid,\n documentType: 'docx',\n errors: finalErrors,\n data: resolvedData,\n };\n\n // Check for custom components\n if (finalValid) {\n const doc = resolvedData as any;\n if (doc && doc.children && Array.isArray(doc.children)) {\n const hasCustom = doc.children.some(\n (c: any) => !isStandardComponentName(c.name)\n );\n documentResult.hasCustomComponents = hasCustom;\n }\n }\n\n return documentResult;\n}\n\n/**\n * Type guard for document validation result\n */\nexport function isValidDocument(\n result: DocumentValidationResult\n): result is DocumentValidationResult & {\n valid: true;\n data: Static<typeof ComponentDefinitionSchema>;\n} {\n return result.valid === true && result.data !== undefined;\n}\n\n/**\n * Extract standard component names from the schema (cached)\n */\nfunction getStandardComponentNames(): string[] {\n return extractStandardComponentNames(StandardComponentDefinitionSchema);\n}\n\n/**\n * Check if a component name is standard\n */\nfunction isStandardComponentName(name: string): boolean {\n const standardNames = getStandardComponentNames();\n return standardNames.includes(name);\n}\n\n/**\n * Create a document validator with default options\n */\nexport function createDocumentValidator(defaultOptions?: ValidationOptions) {\n return {\n validate: (data: unknown, options?: ValidationOptions) =>\n validateDocument(data, { ...defaultOptions, ...options }),\n validateJson: (jsonInput: string | object, options?: ValidationOptions) =>\n validateJsonDocument(jsonInput, { ...defaultOptions, ...options }),\n };\n}\n\n// Export convenient validators with common configurations\nexport const documentValidator = createDocumentValidator({\n clean: true,\n applyDefaults: true,\n maxErrors: 100, // Collect up to 100 errors to show all validation issues\n});\n\nexport const strictDocumentValidator = createDocumentValidator({\n clean: false,\n applyDefaults: false,\n maxErrors: 100, // Increased from 10 to show more errors\n});\n\n/**\n * Legacy compatibility exports\n */\nexport const validateJsonComponent = validateJsonDocument;\nexport const validateDocumentWithSchema = validateDocument;\n"],"mappings":"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","names":["Value","transformValueErrors","result"]}