@kubuild/schema 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/document.ts","../src/manifest.ts","../src/template.ts","../src/fixtures/starter-page.json","../src/fixtures.ts","../src/json-schema.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const SCHEMA_NAME = 'stora.page' as const;\nexport const CURRENT_SCHEMA_VERSION = '1.0.0' as const;\n\n/**\n * Asset Reference Schema\n * Represents a reference to an asset stored either locally within the .stora package or hosted externally.\n */\nexport const AssetReferenceSchema = z.object({\n type: z.literal('asset'),\n assetId: z.string().min(1, 'Asset ID cannot be empty'),\n filename: z.string().optional(),\n mimeType: z.string().optional(),\n fallbackUrl: z.string().url().optional(),\n});\n\nexport type AssetReference = z.infer<typeof AssetReferenceSchema>;\n\n/**\n * Variable Binding Schema\n * Represents a dynamic runtime variable replacement (e.g. {{ site.name }}).\n */\nexport const VariableBindingSchema = z.object({\n type: z.literal('variable'),\n key: z.string().min(1, 'Variable key cannot be empty'),\n fallback: z.unknown().optional(),\n});\n\nexport type VariableBinding = z.infer<typeof VariableBindingSchema>;\n\n/**\n * Action Binding Schema\n * Represents an interactive action triggerable by UI components (e.g. navigation, modal, custom event).\n */\nexport const ActionBindingSchema = z.object({\n type: z.string().min(1, 'Action type cannot be empty'),\n payload: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type ActionBinding = z.infer<typeof ActionBindingSchema>;\n\n/**\n * Style Definition Schema\n * Key-value mapping of CSS properties or design tokens.\n *\n * Values are restricted to safe, serializable primitives (string, number,\n * boolean, null) — no functions, objects, or arrays — and string values are\n * screened against known CSS/HTML injection vectors (e.g. `url(javascript:...)`,\n * legacy IE `expression()`, `@import`, embedded `<script>` tags).\n */\nconst DANGEROUS_STYLE_VALUE_PATTERN = /javascript:|expression\\(|@import|<script|vbscript:|data:text\\/html/i;\n\nexport const StyleValueSchema = z.union([\n z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {\n message: 'Style value contains a disallowed or unsafe pattern',\n }),\n z.number(),\n z.boolean(),\n z.null(),\n z.undefined(),\n]);\nexport const StyleDefinitionSchema = z.record(z.string(), StyleValueSchema);\nexport type StyleDefinition = Record<string, string | number | boolean | null | undefined>;\n\n/**\n * Pseudo-state style definitions keyed by CSS pseudo-class selector\n * (e.g. `:hover`, `:focus`, `:active`). Each entry is a style layer applied\n * on top of the resolved breakpoint styles when the state is active.\n */\nexport const PseudoStateStylesSchema = z.record(z.string(), StyleDefinitionSchema);\nexport type PseudoStateStyles = Record<string, StyleDefinition>;\n\n/**\n * Responsive Styles Schema\n * Breakpoint-specific style definitions: base (all viewports), desktop, tablet, and mobile.\n * Optionally carries `states` — pseudo-class style layers (e.g. `:hover`).\n */\nexport const ResponsiveStylesSchema = z\n .object({\n base: StyleDefinitionSchema.optional(),\n desktop: StyleDefinitionSchema.optional(),\n tablet: StyleDefinitionSchema.optional(),\n mobile: StyleDefinitionSchema.optional(),\n states: PseudoStateStylesSchema.optional(),\n })\n .catchall(StyleDefinitionSchema)\n .default({});\n\nexport type ResponsiveStyles = z.infer<typeof ResponsiveStylesSchema>;\n\n/**\n * Recursive Node Type Definition\n */\nexport type Node = {\n id: string;\n type: string;\n props?: Record<string, unknown>;\n styles?: ResponsiveStyles;\n children?: Node[];\n};\n\n/**\n * Recursive Node Schema\n * Represents any element/node in the document tree.\n * Node IDs are deterministic, independent of React keys, and unique across the document.\n */\nexport const NodeSchema: z.ZodType<Node> = z.lazy(() =>\n z.object({\n id: z.string().min(1, 'Node ID must be a non-empty string'),\n type: z.string().min(1, 'Node type must be a non-empty string'),\n props: z.record(z.string(), z.unknown()).optional().default({}),\n styles: ResponsiveStylesSchema.optional().default({}),\n children: z.array(NodeSchema).optional().default([]),\n }),\n);\n\nexport type RootPageNode = Node & { type: 'page' };\n\n/**\n * Root Page Node Schema\n * The root node of a PageDocument must be of type 'page'.\n */\nexport const RootPageNodeSchema: z.ZodType<RootPageNode> = NodeSchema.refine(\n (node): node is RootPageNode => node.type === 'page',\n {\n message: 'Root node must have type \"page\"',\n path: ['type'],\n },\n);\n\n\n/**\n * Document Metadata Schema\n * Pure serializable metadata for the document.\n */\nexport const DocumentMetadataSchema = z.object({\n title: z.string().min(1, 'Title is required').default('Untitled Page'),\n description: z.string().optional().default(''),\n author: z.string().optional().default(''),\n createdAt: z.string().optional(),\n updatedAt: z.string().optional(),\n tags: z.array(z.string()).optional().default([]),\n category: z.string().optional().default('general'),\n version: z.string().optional().default('1.0.0'),\n custom: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type DocumentMetadata = z.infer<typeof DocumentMetadataSchema>;\n\n/**\n * Page Document Schema v1\n * Root portable document structure:\n * - schema: strictly \"stora.page\"\n * - version: schema version string (e.g. \"1.0.0\")\n * - metadata: serializable metadata\n * - document: root page node\n */\nexport const PageDocumentSchema = z.object({\n schema: z.literal(SCHEMA_NAME),\n version: z.string().min(1, 'Schema version is required').default(CURRENT_SCHEMA_VERSION),\n metadata: DocumentMetadataSchema.optional(),\n document: RootPageNodeSchema,\n});\n\nexport type PageDocument = z.infer<typeof PageDocumentSchema>;\n\n\n\n/**\n * Type guards\n */\nexport function isAssetReference(value: unknown): value is AssetReference {\n return AssetReferenceSchema.safeParse(value).success;\n}\n\nexport function isVariableBinding(value: unknown): value is VariableBinding {\n return VariableBindingSchema.safeParse(value).success;\n}\n\nexport function isActionBinding(value: unknown): value is ActionBinding {\n return ActionBindingSchema.safeParse(value).success;\n}\n\n/**\n * Deterministic Node ID Generator\n * Generates predictable IDs based on prefix and an index/identifier (not bound to React keys).\n */\nexport function generateDeterministicNodeId(prefix: string, indexOrKey: number | string): string {\n const cleanPrefix = prefix.toLowerCase().replace(/[^a-z0-9_-]/g, '-');\n return `${cleanPrefix}_${indexOrKey}`;\n}\n\n/**\n * Collect all Node IDs in a node tree\n */\nexport function collectNodeIds(node: Node): string[] {\n const ids: string[] = [node.id];\n if (node.children && Array.isArray(node.children)) {\n for (const child of node.children) {\n ids.push(...collectNodeIds(child));\n }\n }\n return ids;\n}\n\n/**\n * Validate Node ID uniqueness across a node tree or document\n */\nexport function validateNodeIdUniqueness(node: Node): { valid: boolean; duplicateIds: string[] } {\n const allIds = collectNodeIds(node);\n const seen = new Set<string>();\n const duplicates = new Set<string>();\n\n for (const id of allIds) {\n if (seen.has(id)) {\n duplicates.add(id);\n } else {\n seen.add(id);\n }\n }\n\n return {\n valid: duplicates.size === 0,\n duplicateIds: Array.from(duplicates),\n };\n}\n","import { z } from 'zod';\nimport { SCHEMA_NAME } from './document';\n\nexport const ManifestAssetItemSchema = z.object({\n id: z.string().min(1, 'Asset ID cannot be empty'),\n path: z.string().min(1, 'Asset archive path cannot be empty'),\n mimeType: z.string().min(1, 'MIME type cannot be empty'),\n size: z.number().nonnegative('Asset size must be non-negative'),\n checksum: z.string().optional(),\n});\n\nexport type ManifestAssetItem = z.infer<typeof ManifestAssetItemSchema>;\n\nexport const ManifestSchema = z.object({\n schema: z.literal(SCHEMA_NAME).default(SCHEMA_NAME),\n schemaVersion: z.string().min(1, 'Schema version cannot be empty').default('1.0.0'),\n packageVersion: z.string().min(1, 'Package version cannot be empty').default('1.0.0'),\n builderCompatibility: z.string().default('>=0.1.0'),\n requiredComponents: z.array(z.string()).default([]),\n requiredCapabilities: z.array(z.string()).default([]),\n assets: z.array(ManifestAssetItemSchema).default([]),\n createdAt: z.string().optional(),\n});\n\nexport type Manifest = z.infer<typeof ManifestSchema>;\n\nexport function isManifest(value: unknown): value is Manifest {\n return ManifestSchema.safeParse(value).success;\n}\n","import { z } from 'zod';\nimport { AssetReferenceSchema, PageDocumentSchema, type AssetReference, type PageDocument } from './document';\n\n/**\n * Regex for screening dangerous URI schemes and payloads in thumbnail URLs.\n * Rejects javascript:, vbscript:, data: URIs that are not images (e.g. data:text/html),\n * and embedded <script> tags.\n */\nconst DANGEROUS_URI_PATTERN = /^(javascript:|vbscript:|data:(?!image\\/))|<script/i;\n\n/**\n * Validates a string as a safe URL or safe asset path.\n */\nexport function isSafeThumbnailUrl(url: string): boolean {\n if (!url || typeof url !== 'string') return false;\n const trimmed = url.trim();\n if (trimmed.length === 0) return false;\n if (DANGEROUS_URI_PATTERN.test(trimmed)) return false;\n return true;\n}\n\n/**\n * Safe Thumbnail URL String Schema\n */\nexport const SafeThumbnailUrlSchema = z.string().min(1, 'Thumbnail URL cannot be empty').refine(\n (url) => isSafeThumbnailUrl(url),\n { message: 'Thumbnail URL contains an unsafe protocol or payload' }\n);\n\n/**\n * Safe Thumbnail Object Schema\n */\nexport const SafeThumbnailObjectSchema = z.object({\n url: SafeThumbnailUrlSchema,\n alt: z.string().optional(),\n width: z.number().positive().optional(),\n height: z.number().positive().optional(),\n});\n\nexport type SafeThumbnailObject = z.infer<typeof SafeThumbnailObjectSchema>;\n\n/**\n * Safe Thumbnail Schema (AssetReference | safe URL string | safe thumbnail object)\n */\nexport const SafeThumbnailSchema = z.union([\n AssetReferenceSchema,\n SafeThumbnailObjectSchema,\n SafeThumbnailUrlSchema,\n]);\n\nexport type SafeThumbnail = AssetReference | SafeThumbnailObject | string;\n\n/**\n * Template Package Reference Schema\n * Points to an external or archived .stora / JSON package file.\n */\nexport const TemplatePackageRefSchema = z.object({\n path: z.string().optional(),\n url: SafeThumbnailUrlSchema.optional(),\n checksum: z.string().optional(),\n format: z.enum(['stora', 'json']).default('stora'),\n});\n\nexport type TemplatePackageRef = z.infer<typeof TemplatePackageRefSchema>;\n\n/**\n * Template Requirements Schema\n * Declares custom components and host capabilities required by this template.\n */\nexport const TemplateRequirementsSchema = z.object({\n requiredComponents: z.array(z.string()).default([]),\n requiredCapabilities: z.array(z.string()).default([]),\n});\n\nexport type TemplateRequirements = z.infer<typeof TemplateRequirementsSchema>;\n\n/**\n * Template Record Schema v1\n * Represents a reusable page template with full metadata, safe thumbnail,\n * component/capability requirements, and snapshot document / package reference.\n */\nexport const TemplateRecordSchema = z.object({\n id: z.string().min(1, 'Template ID must be a non-empty string'),\n name: z.string().min(1, 'Template name must be a non-empty string'),\n description: z.string().optional().default(''),\n category: z.string().optional().default('general'),\n tags: z.array(z.string()).optional().default([]),\n thumbnail: SafeThumbnailSchema.optional(),\n author: z.string().optional().default(''),\n version: z.string().optional().default('1.0.0'),\n document: PageDocumentSchema.optional(),\n packageReference: TemplatePackageRefSchema.optional(),\n requirements: TemplateRequirementsSchema.default({\n requiredComponents: [],\n requiredCapabilities: [],\n }),\n createdAt: z.string().optional(),\n updatedAt: z.string().optional(),\n custom: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type TemplateRecord = z.infer<typeof TemplateRecordSchema>;\n\n/**\n * Type guard for TemplateRecord\n */\nexport function isTemplateRecord(value: unknown): value is TemplateRecord {\n return TemplateRecordSchema.safeParse(value).success;\n}\n\n/**\n * Type guard for SafeThumbnail\n */\nexport function isSafeThumbnail(value: unknown): value is SafeThumbnail {\n return SafeThumbnailSchema.safeParse(value).success;\n}\n\n","{\n \"schema\": \"stora.page\",\n \"version\": \"1.0.0\",\n \"metadata\": {\n \"title\": \"Welcome to KUBUILD\",\n \"description\": \"A starter template built with KUBUILD portable web builder\",\n \"author\": \"KUBUILD Team\",\n \"tags\": [\"landing-page\", \"starter\", \"portable\"],\n \"category\": \"landing\",\n \"version\": \"1.0.0\",\n \"createdAt\": \"2026-08-22T00:00:00.000Z\",\n \"updatedAt\": \"2026-08-22T00:00:00.000Z\"\n },\n \"document\": {\n \"id\": \"root-page\",\n \"type\": \"page\",\n \"props\": {\n \"title\": \"KUBUILD Starter Page\"\n },\n \"styles\": {\n \"base\": {\n \"backgroundColor\": \"#ffffff\",\n \"fontFamily\": \"Inter, sans-serif\",\n \"color\": \"#111827\",\n \"minHeight\": \"100vh\"\n }\n },\n \"children\": [\n {\n \"id\": \"hero-section\",\n \"type\": \"section\",\n \"props\": {},\n \"styles\": {\n \"base\": {\n \"paddingTop\": \"64px\",\n \"paddingBottom\": \"64px\",\n \"paddingLeft\": \"24px\",\n \"paddingRight\": \"24px\",\n \"backgroundColor\": \"#f8fafc\"\n }\n },\n \"children\": [\n {\n \"id\": \"hero-container\",\n \"type\": \"container\",\n \"props\": {\n \"maxWidth\": \"1200px\"\n },\n \"styles\": {\n \"base\": {\n \"margin\": \"0 auto\",\n \"display\": \"flex\",\n \"flexDirection\": \"column\",\n \"alignItems\": \"center\",\n \"textAlign\": \"center\",\n \"gap\": \"24px\"\n }\n },\n \"children\": [\n {\n \"id\": \"hero-heading\",\n \"type\": \"heading\",\n \"props\": {\n \"text\": \"Build Once, Render Anywhere\",\n \"level\": 1\n },\n \"styles\": {\n \"base\": {\n \"fontSize\": \"48px\",\n \"fontWeight\": \"800\",\n \"color\": \"#0f172a\",\n \"lineHeight\": \"1.2\"\n },\n \"mobile\": {\n \"fontSize\": \"32px\"\n }\n },\n \"children\": []\n },\n {\n \"id\": \"hero-text\",\n \"type\": \"text\",\n \"props\": {\n \"content\": \"KUBUILD is an open, portable web page builder engine designed for modern web applications.\"\n },\n \"styles\": {\n \"base\": {\n \"fontSize\": \"18px\",\n \"color\": \"#475569\",\n \"maxWidth\": \"680px\",\n \"lineHeight\": \"1.6\"\n }\n },\n \"children\": []\n },\n {\n \"id\": \"hero-image\",\n \"type\": \"image\",\n \"props\": {\n \"src\": \"https://picsum.photos/200/300\",\n \"asset\": {\n \"type\": \"asset\",\n \"assetId\": \"asset_hero_graphic\",\n \"filename\": \"hero.webp\",\n \"mimeType\": \"image/webp\"\n },\n \"alt\": \"KUBUILD Platform Graphic\",\n \"width\": 640,\n \"height\": 360\n },\n \"styles\": {\n \"base\": {\n \"borderRadius\": \"12px\",\n \"maxWidth\": \"100%\",\n \"height\": \"auto\",\n \"boxShadow\": \"0 20px 25px -5px rgba(0, 0, 0, 0.1)\"\n }\n },\n \"children\": []\n },\n {\n \"id\": \"hero-button\",\n \"type\": \"button\",\n \"props\": {\n \"label\": \"Get Started\",\n \"action\": {\n \"type\": \"navigate\",\n \"payload\": {\n \"url\": \"/docs\"\n }\n }\n },\n \"styles\": {\n \"base\": {\n \"backgroundColor\": \"#2563eb\",\n \"color\": \"#ffffff\",\n \"paddingTop\": \"12px\",\n \"paddingBottom\": \"12px\",\n \"paddingLeft\": \"28px\",\n \"paddingRight\": \"28px\",\n \"borderRadius\": \"8px\",\n \"fontWeight\": \"600\",\n \"fontSize\": \"16px\",\n \"cursor\": \"pointer\",\n \"border\": \"none\"\n }\n },\n \"children\": []\n }\n ]\n }\n ]\n }\n ]\n }\n}\n","import starterPageData from './fixtures/starter-page.json';\nimport { PageDocument } from './document';\n\nexport const starterPageFixture: PageDocument = starterPageData as unknown as PageDocument;\n","/**\n * Standard JSON Schema Draft-07 representation of stora.page Document v1\n * Aligned 1:1 with TypeScript PageDocument type definition.\n */\nexport const PAGE_DOCUMENT_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/page.json',\n title: 'StoraPageDocument',\n description: 'Portable Web Page Document v1 schema definition for KUBUILD',\n type: 'object',\n required: ['schema', 'version', 'document'],\n additionalProperties: false,\n properties: {\n schema: {\n type: 'string',\n const: 'stora.page',\n description: 'Identifies the document type format',\n },\n version: {\n type: 'string',\n pattern: '^\\\\d+(\\\\.\\\\d+)*$',\n description: 'Schema version of the document',\n default: '1.0.0',\n },\n metadata: {\n $ref: '#/definitions/documentMetadata',\n },\n document: {\n $ref: '#/definitions/rootPageNode',\n },\n },\n definitions: {\n styleValue: {\n type: ['string', 'number', 'boolean', 'null'],\n description: 'A CSS property or design token value',\n },\n styleDefinition: {\n type: 'object',\n additionalProperties: {\n $ref: '#/definitions/styleValue',\n },\n description: 'Key-value map of style properties',\n },\n responsiveStyles: {\n type: 'object',\n properties: {\n base: { $ref: '#/definitions/styleDefinition' },\n desktop: { $ref: '#/definitions/styleDefinition' },\n tablet: { $ref: '#/definitions/styleDefinition' },\n mobile: { $ref: '#/definitions/styleDefinition' },\n },\n additionalProperties: {\n $ref: '#/definitions/styleDefinition',\n },\n },\n assetReference: {\n type: 'object',\n required: ['type', 'assetId'],\n properties: {\n type: {\n type: 'string',\n const: 'asset',\n },\n assetId: {\n type: 'string',\n minLength: 1,\n },\n filename: {\n type: 'string',\n },\n mimeType: {\n type: 'string',\n },\n fallbackUrl: {\n type: 'string',\n format: 'uri',\n },\n },\n additionalProperties: false,\n },\n variableBinding: {\n type: 'object',\n required: ['type', 'key'],\n properties: {\n type: {\n type: 'string',\n const: 'variable',\n },\n key: {\n type: 'string',\n minLength: 1,\n },\n fallback: {},\n },\n additionalProperties: false,\n },\n actionBinding: {\n type: 'object',\n required: ['type'],\n properties: {\n type: {\n type: 'string',\n minLength: 1,\n },\n payload: {\n type: 'object',\n },\n },\n additionalProperties: false,\n },\n node: {\n type: 'object',\n required: ['id', 'type'],\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique deterministic node identifier',\n },\n type: {\n type: 'string',\n minLength: 1,\n description: 'Component type identifier',\n },\n props: {\n type: 'object',\n description: 'Component props payload and bindings',\n default: {},\n },\n styles: {\n $ref: '#/definitions/responsiveStyles',\n },\n children: {\n type: 'array',\n items: {\n $ref: '#/definitions/node',\n },\n default: [],\n },\n },\n additionalProperties: false,\n },\n rootPageNode: {\n allOf: [\n { $ref: '#/definitions/node' },\n {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n const: 'page',\n description: 'The root node type must be \"page\"',\n },\n },\n },\n ],\n },\n documentMetadata: {\n type: 'object',\n required: ['title'],\n properties: {\n title: {\n type: 'string',\n minLength: 1,\n default: 'Untitled Page',\n },\n description: {\n type: 'string',\n default: '',\n },\n author: {\n type: 'string',\n default: '',\n },\n createdAt: {\n type: 'string',\n format: 'date-time',\n },\n updatedAt: {\n type: 'string',\n format: 'date-time',\n },\n tags: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n },\n category: {\n type: 'string',\n default: 'general',\n },\n version: {\n type: 'string',\n default: '1.0.0',\n },\n custom: {\n type: 'object',\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getPageDocumentJsonSchema() {\n return PAGE_DOCUMENT_JSON_SCHEMA_V1;\n}\n\n/**\n * Standard JSON Schema Draft-07 representation of stora.page Package Manifest v1\n * Aligned 1:1 with TypeScript Manifest type definition.\n */\nexport const MANIFEST_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/manifest.json',\n title: 'StoraPackageManifest',\n description: 'Portable Package Manifest v1 schema definition for KUBUILD (.stora)',\n type: 'object',\n required: ['schemaVersion', 'packageVersion', 'builderCompatibility', 'requiredComponents', 'requiredCapabilities', 'assets'],\n additionalProperties: false,\n properties: {\n schema: {\n type: 'string',\n const: 'stora.page',\n description: 'Schema identifier',\n default: 'stora.page',\n },\n schemaVersion: {\n type: 'string',\n pattern: '^\\\\d+(\\\\.\\\\d+)*$',\n description: 'Document schema version',\n default: '1.0.0',\n },\n packageVersion: {\n type: 'string',\n pattern: '^\\\\d+(\\\\.\\\\d+)*$',\n description: 'Package version',\n default: '1.0.0',\n },\n builderCompatibility: {\n type: 'string',\n description: 'Minimum or range of builder versions compatible with this package',\n default: '>=0.1.0',\n },\n requiredComponents: {\n type: 'array',\n items: { type: 'string' },\n description: 'List of custom component types required by the page',\n default: [],\n },\n requiredCapabilities: {\n type: 'array',\n items: { type: 'string' },\n description: 'List of capabilities required by components in the page',\n default: [],\n },\n assets: {\n type: 'array',\n items: { $ref: '#/definitions/manifestAssetItem' },\n description: 'Inventory of local assets packaged within the archive',\n default: [],\n },\n createdAt: {\n type: 'string',\n format: 'date-time',\n description: 'ISO timestamp when the package was created',\n },\n },\n definitions: {\n manifestAssetItem: {\n type: 'object',\n required: ['id', 'path', 'mimeType', 'size'],\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique asset identifier',\n },\n path: {\n type: 'string',\n minLength: 1,\n description: 'Relative archive path to asset file (e.g. assets/hero.png)',\n },\n mimeType: {\n type: 'string',\n minLength: 1,\n description: 'MIME type of the asset',\n },\n size: {\n type: 'number',\n minimum: 0,\n description: 'Asset size in bytes',\n },\n checksum: {\n type: 'string',\n description: 'SHA-256 or algorithm-prefixed checksum (e.g. sha256:...)',\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getManifestJsonSchema() {\n return MANIFEST_JSON_SCHEMA_V1;\n}\n\n/**\n * Standard JSON Schema Draft-07 representation of Template Record v1\n * Aligned 1:1 with TypeScript TemplateRecord type definition.\n */\nexport const TEMPLATE_RECORD_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/template.json',\n title: 'StoraTemplateRecord',\n description: 'Reusable Page Template Record v1 schema definition for KUBUILD',\n type: 'object',\n required: ['id', 'name'],\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique template identifier',\n },\n name: {\n type: 'string',\n minLength: 1,\n description: 'Human-readable name of the template',\n },\n description: {\n type: 'string',\n default: '',\n description: 'Detailed description of the template purpose and contents',\n },\n category: {\n type: 'string',\n default: 'general',\n description: 'Template category grouping',\n },\n tags: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n description: 'Search and filter tags',\n },\n thumbnail: {\n oneOf: [\n { $ref: '#/definitions/assetReference' },\n { $ref: '#/definitions/safeThumbnailObject' },\n { type: 'string', minLength: 1 },\n ],\n description: 'Safe preview image asset reference or URL',\n },\n author: {\n type: 'string',\n default: '',\n description: 'Template creator or team',\n },\n version: {\n type: 'string',\n default: '1.0.0',\n description: 'Semantic version of the template',\n },\n document: {\n $ref: 'https://schema.stora.page/v1/page.json#',\n description: 'Embedded PageDocument snapshot (optional if packageReference provided)',\n },\n packageReference: {\n $ref: '#/definitions/templatePackageRef',\n description: 'External package/archive reference (optional if document provided)',\n },\n requirements: {\n $ref: '#/definitions/templateRequirements',\n description: 'Component and capability requirements for this template',\n },\n createdAt: {\n type: 'string',\n format: 'date-time',\n description: 'ISO creation timestamp',\n },\n updatedAt: {\n type: 'string',\n format: 'date-time',\n description: 'ISO last updated timestamp',\n },\n custom: {\n type: 'object',\n description: 'Custom host-specific serializable metadata',\n },\n },\n definitions: {\n assetReference: {\n type: 'object',\n required: ['type', 'assetId'],\n properties: {\n type: {\n type: 'string',\n const: 'asset',\n },\n assetId: {\n type: 'string',\n minLength: 1,\n },\n filename: {\n type: 'string',\n },\n mimeType: {\n type: 'string',\n },\n fallbackUrl: {\n type: 'string',\n format: 'uri',\n },\n },\n additionalProperties: false,\n },\n safeThumbnailObject: {\n type: 'object',\n required: ['url'],\n properties: {\n url: {\n type: 'string',\n minLength: 1,\n },\n alt: {\n type: 'string',\n },\n width: {\n type: 'number',\n minimum: 1,\n },\n height: {\n type: 'number',\n minimum: 1,\n },\n },\n additionalProperties: false,\n },\n templatePackageRef: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n },\n url: {\n type: 'string',\n },\n checksum: {\n type: 'string',\n },\n format: {\n type: 'string',\n enum: ['stora', 'json'],\n default: 'stora',\n },\n },\n additionalProperties: false,\n },\n templateRequirements: {\n type: 'object',\n properties: {\n requiredComponents: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n },\n requiredCapabilities: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getTemplateRecordJsonSchema() {\n return TEMPLATE_RECORD_JSON_SCHEMA_V1;\n}\n\n"],"mappings":"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","names":["z","z","z","z"]}
1
+ {"version":3,"sources":["../src/document.ts","../src/manifest.ts","../src/template.ts","../src/fixtures/starter-page.json","../src/fixtures.ts","../src/json-schema.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const SCHEMA_NAME = 'stora.page' as const;\nexport const CURRENT_SCHEMA_VERSION = '1.0.0' as const;\n\n/**\n * Asset Reference Schema\n * Represents a reference to an asset stored either locally within the .stora package or hosted externally.\n */\nexport const AssetReferenceSchema = z.object({\n type: z.literal('asset'),\n assetId: z.string().min(1, 'Asset ID cannot be empty'),\n filename: z.string().optional(),\n mimeType: z.string().optional(),\n fallbackUrl: z.string().url().optional(),\n});\n\nexport type AssetReference = z.infer<typeof AssetReferenceSchema>;\n\n/**\n * Variable Binding Schema\n * Represents a dynamic runtime variable replacement (e.g. {{ site.name }}).\n */\nexport const VariableBindingSchema = z.object({\n type: z.literal('variable'),\n key: z.string().min(1, 'Variable key cannot be empty'),\n fallback: z.unknown().optional(),\n});\n\nexport type VariableBinding = z.infer<typeof VariableBindingSchema>;\n\n/**\n * Action Binding Schema\n * Represents an interactive action triggerable by UI components (e.g. navigation, modal, custom event).\n */\nexport const ActionBindingSchema = z.object({\n type: z.string().min(1, 'Action type cannot be empty'),\n payload: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type ActionBinding = z.infer<typeof ActionBindingSchema>;\n\n/**\n * Style Definition Schema\n * Key-value mapping of CSS properties or design tokens.\n *\n * Values are restricted to safe, serializable primitives (string, number,\n * boolean, null) — no functions, objects, or arrays — and string values are\n * screened against known CSS/HTML injection vectors (e.g. `url(javascript:...)`,\n * legacy IE `expression()`, `@import`, embedded `<script>` tags).\n */\nconst DANGEROUS_STYLE_VALUE_PATTERN = /javascript:|expression\\(|@import|<script|vbscript:|data:text\\/html/i;\n\nexport const StyleValueSchema = z.union([\n z.string().refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {\n message: 'Style value contains a disallowed or unsafe pattern',\n }),\n z.number(),\n z.boolean(),\n z.null(),\n z.undefined(),\n]);\nexport const StyleDefinitionSchema = z.record(z.string(), StyleValueSchema);\nexport type StyleDefinition = Record<string, string | number | boolean | null | undefined>;\n\n/**\n * Pseudo-state style definitions keyed by CSS pseudo-class selector\n * (e.g. `:hover`, `:focus`, `:active`). Each entry is a style layer applied\n * on top of the resolved breakpoint styles when the state is active.\n */\nexport const PseudoStateStylesSchema = z.record(z.string(), StyleDefinitionSchema);\nexport type PseudoStateStyles = Record<string, StyleDefinition>;\n\n/**\n * Responsive Styles Schema\n * Breakpoint-specific style definitions: base (all viewports), desktop, tablet, and mobile.\n * Optionally carries `states` — pseudo-class style layers (e.g. `:hover`).\n */\nexport const ResponsiveStylesSchema = z\n .object({\n base: StyleDefinitionSchema.optional(),\n desktop: StyleDefinitionSchema.optional(),\n tablet: StyleDefinitionSchema.optional(),\n mobile: StyleDefinitionSchema.optional(),\n states: PseudoStateStylesSchema.optional(),\n })\n .passthrough()\n .default({});\n\nexport type ResponsiveStyles = z.infer<typeof ResponsiveStylesSchema>;\n\n/**\n * Animation Configuration Schema\n * Defines scroll entrance animations (AOS), duration, delay, easing curve,\n * trigger behavior (once), hover micro-interactions, and continuous loop effects.\n */\nexport const AnimationConfigSchema = z.object({\n type: z\n .string()\n .refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {\n message: 'Animation type contains a disallowed or unsafe pattern',\n })\n .optional()\n .default('none'),\n duration: z.number().min(0, 'Duration must be non-negative').optional().default(600),\n delay: z.number().min(0, 'Delay must be non-negative').optional().default(0),\n easing: z\n .string()\n .refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {\n message: 'Animation easing contains a disallowed or unsafe pattern',\n })\n .optional()\n .default('ease-out'),\n once: z.boolean().optional().default(true),\n hoverEffect: z\n .string()\n .refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {\n message: 'Hover effect contains a disallowed or unsafe pattern',\n })\n .optional()\n .default('none'),\n loopEffect: z\n .string()\n .refine((value) => !DANGEROUS_STYLE_VALUE_PATTERN.test(value), {\n message: 'Loop effect contains a disallowed or unsafe pattern',\n })\n .optional()\n .default('none'),\n});\n\nexport type AnimationConfig = z.infer<typeof AnimationConfigSchema>;\n\nexport const DEFAULT_ANIMATION_CONFIG: AnimationConfig = {\n type: 'none',\n duration: 600,\n delay: 0,\n easing: 'ease-out',\n once: true,\n hoverEffect: 'none',\n loopEffect: 'none',\n};\n\n/**\n * Recursive Node Type Definition\n */\nexport type Node = {\n id: string;\n type: string;\n props?: Record<string, unknown>;\n styles?: ResponsiveStyles;\n animation?: AnimationConfig;\n children?: Node[];\n};\n\n/**\n * Recursive Node Schema\n * Represents any element/node in the document tree.\n * Node IDs are deterministic, independent of React keys, and unique across the document.\n */\nexport const NodeSchema: z.ZodType<Node> = z.lazy(() =>\n z.object({\n id: z.string().min(1, 'Node ID must be a non-empty string'),\n type: z.string().min(1, 'Node type must be a non-empty string'),\n props: z.record(z.string(), z.unknown()).optional().default({}),\n styles: ResponsiveStylesSchema.optional().default({}),\n animation: AnimationConfigSchema.optional(),\n children: z.array(NodeSchema).optional().default([]),\n }),\n);\n\nexport type RootPageNode = Node & { type: 'page' };\n\n/**\n * Root Page Node Schema\n * The root node of a PageDocument must be of type 'page'.\n */\nexport const RootPageNodeSchema: z.ZodType<RootPageNode> = NodeSchema.refine(\n (node): node is RootPageNode => node.type === 'page',\n {\n message: 'Root node must have type \"page\"',\n path: ['type'],\n },\n);\n\n\n/**\n * Document Metadata Schema\n * Pure serializable metadata for the document.\n */\nexport const DocumentMetadataSchema = z.object({\n title: z.string().min(1, 'Title is required').default('Untitled Page'),\n description: z.string().optional().default(''),\n author: z.string().optional().default(''),\n createdAt: z.string().optional(),\n updatedAt: z.string().optional(),\n tags: z.array(z.string()).optional().default([]),\n category: z.string().optional().default('general'),\n version: z.string().optional().default('1.0.0'),\n custom: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type DocumentMetadata = z.infer<typeof DocumentMetadataSchema>;\n\n/**\n * Page Document Schema v1\n * Root portable document structure:\n * - schema: strictly \"stora.page\"\n * - version: schema version string (e.g. \"1.0.0\")\n * - metadata: serializable metadata\n * - document: root page node\n */\nexport const PageDocumentSchema = z.object({\n schema: z.literal(SCHEMA_NAME),\n version: z.string().min(1, 'Schema version is required').default(CURRENT_SCHEMA_VERSION),\n metadata: DocumentMetadataSchema.optional(),\n document: RootPageNodeSchema,\n});\n\nexport type PageDocument = z.infer<typeof PageDocumentSchema>;\n\n\n\n/**\n * Type guards\n */\nexport function isAssetReference(value: unknown): value is AssetReference {\n return AssetReferenceSchema.safeParse(value).success;\n}\n\nexport function isVariableBinding(value: unknown): value is VariableBinding {\n return VariableBindingSchema.safeParse(value).success;\n}\n\nexport function isActionBinding(value: unknown): value is ActionBinding {\n return ActionBindingSchema.safeParse(value).success;\n}\n\nexport function isAnimationConfig(value: unknown): value is AnimationConfig {\n return AnimationConfigSchema.safeParse(value).success;\n}\n\n/**\n * Deterministic Node ID Generator\n * Generates predictable IDs based on prefix and an index/identifier (not bound to React keys).\n */\nexport function generateDeterministicNodeId(prefix: string, indexOrKey: number | string): string {\n const cleanPrefix = prefix.toLowerCase().replace(/[^a-z0-9_-]/g, '-');\n return `${cleanPrefix}_${indexOrKey}`;\n}\n\n/**\n * Collect all Node IDs in a node tree\n */\nexport function collectNodeIds(node: Node): string[] {\n const ids: string[] = [node.id];\n if (node.children && Array.isArray(node.children)) {\n for (const child of node.children) {\n ids.push(...collectNodeIds(child));\n }\n }\n return ids;\n}\n\n/**\n * Validate Node ID uniqueness across a node tree or document\n */\nexport function validateNodeIdUniqueness(node: Node): { valid: boolean; duplicateIds: string[] } {\n const allIds = collectNodeIds(node);\n const seen = new Set<string>();\n const duplicates = new Set<string>();\n\n for (const id of allIds) {\n if (seen.has(id)) {\n duplicates.add(id);\n } else {\n seen.add(id);\n }\n }\n\n return {\n valid: duplicates.size === 0,\n duplicateIds: Array.from(duplicates),\n };\n}\n","import { z } from 'zod';\nimport { SCHEMA_NAME } from './document';\n\nexport const ManifestAssetItemSchema = z.object({\n id: z.string().min(1, 'Asset ID cannot be empty'),\n path: z.string().min(1, 'Asset archive path cannot be empty'),\n mimeType: z.string().min(1, 'MIME type cannot be empty'),\n size: z.number().nonnegative('Asset size must be non-negative'),\n checksum: z.string().optional(),\n});\n\nexport type ManifestAssetItem = z.infer<typeof ManifestAssetItemSchema>;\n\nexport const ManifestSchema = z.object({\n schema: z.literal(SCHEMA_NAME).default(SCHEMA_NAME),\n schemaVersion: z.string().min(1, 'Schema version cannot be empty').default('1.0.0'),\n packageVersion: z.string().min(1, 'Package version cannot be empty').default('1.0.0'),\n builderCompatibility: z.string().default('>=0.1.0'),\n requiredComponents: z.array(z.string()).default([]),\n requiredCapabilities: z.array(z.string()).default([]),\n assets: z.array(ManifestAssetItemSchema).default([]),\n createdAt: z.string().optional(),\n});\n\nexport type Manifest = z.infer<typeof ManifestSchema>;\n\nexport function isManifest(value: unknown): value is Manifest {\n return ManifestSchema.safeParse(value).success;\n}\n","import { z } from 'zod';\nimport { AssetReferenceSchema, PageDocumentSchema, type AssetReference, type PageDocument } from './document';\n\n/**\n * Regex for screening dangerous URI schemes and payloads in thumbnail URLs.\n * Rejects javascript:, vbscript:, data: URIs that are not images (e.g. data:text/html),\n * and embedded <script> tags.\n */\nconst DANGEROUS_URI_PATTERN = /^(javascript:|vbscript:|data:(?!image\\/))|<script/i;\n\n/**\n * Validates a string as a safe URL or safe asset path.\n */\nexport function isSafeThumbnailUrl(url: string): boolean {\n if (!url || typeof url !== 'string') return false;\n const trimmed = url.trim();\n if (trimmed.length === 0) return false;\n if (DANGEROUS_URI_PATTERN.test(trimmed)) return false;\n return true;\n}\n\n/**\n * Safe Thumbnail URL String Schema\n */\nexport const SafeThumbnailUrlSchema = z.string().min(1, 'Thumbnail URL cannot be empty').refine(\n (url) => isSafeThumbnailUrl(url),\n { message: 'Thumbnail URL contains an unsafe protocol or payload' }\n);\n\n/**\n * Safe Thumbnail Object Schema\n */\nexport const SafeThumbnailObjectSchema = z.object({\n url: SafeThumbnailUrlSchema,\n alt: z.string().optional(),\n width: z.number().positive().optional(),\n height: z.number().positive().optional(),\n});\n\nexport type SafeThumbnailObject = z.infer<typeof SafeThumbnailObjectSchema>;\n\n/**\n * Safe Thumbnail Schema (AssetReference | safe URL string | safe thumbnail object)\n */\nexport const SafeThumbnailSchema = z.union([\n AssetReferenceSchema,\n SafeThumbnailObjectSchema,\n SafeThumbnailUrlSchema,\n]);\n\nexport type SafeThumbnail = AssetReference | SafeThumbnailObject | string;\n\n/**\n * Template Package Reference Schema\n * Points to an external or archived .stora / JSON package file.\n */\nexport const TemplatePackageRefSchema = z.object({\n path: z.string().optional(),\n url: SafeThumbnailUrlSchema.optional(),\n checksum: z.string().optional(),\n format: z.enum(['stora', 'json']).default('stora'),\n});\n\nexport type TemplatePackageRef = z.infer<typeof TemplatePackageRefSchema>;\n\n/**\n * Template Requirements Schema\n * Declares custom components and host capabilities required by this template.\n */\nexport const TemplateRequirementsSchema = z.object({\n requiredComponents: z.array(z.string()).default([]),\n requiredCapabilities: z.array(z.string()).default([]),\n});\n\nexport type TemplateRequirements = z.infer<typeof TemplateRequirementsSchema>;\n\n/**\n * Template Record Schema v1\n * Represents a reusable page template with full metadata, safe thumbnail,\n * component/capability requirements, and snapshot document / package reference.\n */\nexport const TemplateRecordSchema = z.object({\n id: z.string().min(1, 'Template ID must be a non-empty string'),\n name: z.string().min(1, 'Template name must be a non-empty string'),\n description: z.string().optional().default(''),\n category: z.string().optional().default('general'),\n tags: z.array(z.string()).optional().default([]),\n thumbnail: SafeThumbnailSchema.optional(),\n author: z.string().optional().default(''),\n version: z.string().optional().default('1.0.0'),\n document: PageDocumentSchema.optional(),\n packageReference: TemplatePackageRefSchema.optional(),\n requirements: TemplateRequirementsSchema.default({\n requiredComponents: [],\n requiredCapabilities: [],\n }),\n createdAt: z.string().optional(),\n updatedAt: z.string().optional(),\n custom: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type TemplateRecord = z.infer<typeof TemplateRecordSchema>;\n\n/**\n * Type guard for TemplateRecord\n */\nexport function isTemplateRecord(value: unknown): value is TemplateRecord {\n return TemplateRecordSchema.safeParse(value).success;\n}\n\n/**\n * Type guard for SafeThumbnail\n */\nexport function isSafeThumbnail(value: unknown): value is SafeThumbnail {\n return SafeThumbnailSchema.safeParse(value).success;\n}\n\n","{\n \"schema\": \"stora.page\",\n \"version\": \"1.0.0\",\n \"metadata\": {\n \"title\": \"Welcome to KUBUILD\",\n \"description\": \"A starter template built with KUBUILD portable web builder\",\n \"author\": \"KUBUILD Team\",\n \"tags\": [\"landing-page\", \"starter\", \"portable\"],\n \"category\": \"landing\",\n \"version\": \"1.0.0\",\n \"createdAt\": \"2026-08-22T00:00:00.000Z\",\n \"updatedAt\": \"2026-08-22T00:00:00.000Z\"\n },\n \"document\": {\n \"id\": \"root-page\",\n \"type\": \"page\",\n \"props\": {\n \"title\": \"KUBUILD Starter Page\"\n },\n \"styles\": {\n \"base\": {\n \"backgroundColor\": \"#ffffff\",\n \"fontFamily\": \"Inter, sans-serif\",\n \"color\": \"#111827\",\n \"minHeight\": \"100vh\"\n }\n },\n \"children\": [\n {\n \"id\": \"hero-section\",\n \"type\": \"section\",\n \"props\": {},\n \"styles\": {\n \"base\": {\n \"paddingTop\": \"64px\",\n \"paddingBottom\": \"64px\",\n \"paddingLeft\": \"24px\",\n \"paddingRight\": \"24px\",\n \"backgroundColor\": \"#f8fafc\"\n }\n },\n \"children\": [\n {\n \"id\": \"hero-container\",\n \"type\": \"container\",\n \"props\": {\n \"maxWidth\": \"1200px\"\n },\n \"styles\": {\n \"base\": {\n \"margin\": \"0 auto\",\n \"display\": \"flex\",\n \"flexDirection\": \"column\",\n \"alignItems\": \"center\",\n \"textAlign\": \"center\",\n \"gap\": \"24px\"\n }\n },\n \"children\": [\n {\n \"id\": \"hero-heading\",\n \"type\": \"heading\",\n \"props\": {\n \"text\": \"Build Once, Render Anywhere\",\n \"level\": 1\n },\n \"styles\": {\n \"base\": {\n \"fontSize\": \"48px\",\n \"fontWeight\": \"800\",\n \"color\": \"#0f172a\",\n \"lineHeight\": \"1.2\"\n },\n \"mobile\": {\n \"fontSize\": \"32px\"\n }\n },\n \"children\": []\n },\n {\n \"id\": \"hero-text\",\n \"type\": \"text\",\n \"props\": {\n \"content\": \"KUBUILD is an open, portable web page builder engine designed for modern web applications.\"\n },\n \"styles\": {\n \"base\": {\n \"fontSize\": \"18px\",\n \"color\": \"#475569\",\n \"maxWidth\": \"680px\",\n \"lineHeight\": \"1.6\"\n }\n },\n \"children\": []\n },\n {\n \"id\": \"hero-image\",\n \"type\": \"image\",\n \"props\": {\n \"src\": \"https://picsum.photos/200/300\",\n \"asset\": {\n \"type\": \"asset\",\n \"assetId\": \"asset_hero_graphic\",\n \"filename\": \"hero.webp\",\n \"mimeType\": \"image/webp\"\n },\n \"alt\": \"KUBUILD Platform Graphic\",\n \"width\": 640,\n \"height\": 360\n },\n \"styles\": {\n \"base\": {\n \"borderRadius\": \"12px\",\n \"maxWidth\": \"100%\",\n \"height\": \"auto\",\n \"boxShadow\": \"0 20px 25px -5px rgba(0, 0, 0, 0.1)\"\n }\n },\n \"children\": []\n },\n {\n \"id\": \"hero-button\",\n \"type\": \"button\",\n \"props\": {\n \"label\": \"Get Started\",\n \"action\": {\n \"type\": \"navigate\",\n \"payload\": {\n \"url\": \"/docs\"\n }\n }\n },\n \"styles\": {\n \"base\": {\n \"backgroundColor\": \"#2563eb\",\n \"color\": \"#ffffff\",\n \"paddingTop\": \"12px\",\n \"paddingBottom\": \"12px\",\n \"paddingLeft\": \"28px\",\n \"paddingRight\": \"28px\",\n \"borderRadius\": \"8px\",\n \"fontWeight\": \"600\",\n \"fontSize\": \"16px\",\n \"cursor\": \"pointer\",\n \"border\": \"none\"\n }\n },\n \"children\": []\n }\n ]\n }\n ]\n }\n ]\n }\n}\n","import starterPageData from './fixtures/starter-page.json';\nimport { PageDocument } from './document';\n\nexport const starterPageFixture: PageDocument = starterPageData as unknown as PageDocument;\n","/**\n * Standard JSON Schema Draft-07 representation of stora.page Document v1\n * Aligned 1:1 with TypeScript PageDocument type definition.\n */\nexport const PAGE_DOCUMENT_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/page.json',\n title: 'StoraPageDocument',\n description: 'Portable Web Page Document v1 schema definition for KUBUILD',\n type: 'object',\n required: ['schema', 'version', 'document'],\n additionalProperties: false,\n properties: {\n schema: {\n type: 'string',\n const: 'stora.page',\n description: 'Identifies the document type format',\n },\n version: {\n type: 'string',\n pattern: '^\\\\d+(\\\\.\\\\d+)*$',\n description: 'Schema version of the document',\n default: '1.0.0',\n },\n metadata: {\n $ref: '#/definitions/documentMetadata',\n },\n document: {\n $ref: '#/definitions/rootPageNode',\n },\n },\n definitions: {\n styleValue: {\n type: ['string', 'number', 'boolean', 'null'],\n description: 'A CSS property or design token value',\n },\n styleDefinition: {\n type: 'object',\n additionalProperties: {\n $ref: '#/definitions/styleValue',\n },\n description: 'Key-value map of style properties',\n },\n responsiveStyles: {\n type: 'object',\n properties: {\n base: { $ref: '#/definitions/styleDefinition' },\n desktop: { $ref: '#/definitions/styleDefinition' },\n tablet: { $ref: '#/definitions/styleDefinition' },\n mobile: { $ref: '#/definitions/styleDefinition' },\n },\n additionalProperties: {\n $ref: '#/definitions/styleDefinition',\n },\n },\n assetReference: {\n type: 'object',\n required: ['type', 'assetId'],\n properties: {\n type: {\n type: 'string',\n const: 'asset',\n },\n assetId: {\n type: 'string',\n minLength: 1,\n },\n filename: {\n type: 'string',\n },\n mimeType: {\n type: 'string',\n },\n fallbackUrl: {\n type: 'string',\n format: 'uri',\n },\n },\n additionalProperties: false,\n },\n variableBinding: {\n type: 'object',\n required: ['type', 'key'],\n properties: {\n type: {\n type: 'string',\n const: 'variable',\n },\n key: {\n type: 'string',\n minLength: 1,\n },\n fallback: {},\n },\n additionalProperties: false,\n },\n actionBinding: {\n type: 'object',\n required: ['type'],\n properties: {\n type: {\n type: 'string',\n minLength: 1,\n },\n payload: {\n type: 'object',\n },\n },\n additionalProperties: false,\n },\n animationConfig: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n default: 'none',\n description: 'Scroll entrance animation type (e.g. fade, fade-up, zoom-in, slide-left)',\n },\n duration: {\n type: 'number',\n minimum: 0,\n default: 600,\n description: 'Animation duration in milliseconds',\n },\n delay: {\n type: 'number',\n minimum: 0,\n default: 0,\n description: 'Animation delay in milliseconds',\n },\n easing: {\n type: 'string',\n default: 'ease-out',\n description: 'CSS animation easing / transition timing function',\n },\n once: {\n type: 'boolean',\n default: true,\n description: 'Whether scroll animation plays only once when entering viewport',\n },\n hoverEffect: {\n type: 'string',\n default: 'none',\n description: 'Hover micro-interaction effect (e.g. lift, scale, glow, tilt)',\n },\n loopEffect: {\n type: 'string',\n default: 'none',\n description: 'Continuous loop animation effect (e.g. pulse, bounce, spin, float)',\n },\n },\n additionalProperties: false,\n },\n node: {\n type: 'object',\n required: ['id', 'type'],\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique deterministic node identifier',\n },\n type: {\n type: 'string',\n minLength: 1,\n description: 'Component type identifier',\n },\n props: {\n type: 'object',\n description: 'Component props payload and bindings',\n default: {},\n },\n styles: {\n $ref: '#/definitions/responsiveStyles',\n },\n animation: {\n $ref: '#/definitions/animationConfig',\n },\n children: {\n type: 'array',\n items: {\n $ref: '#/definitions/node',\n },\n default: [],\n },\n },\n additionalProperties: false,\n },\n rootPageNode: {\n allOf: [\n { $ref: '#/definitions/node' },\n {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n const: 'page',\n description: 'The root node type must be \"page\"',\n },\n },\n },\n ],\n },\n documentMetadata: {\n type: 'object',\n required: ['title'],\n properties: {\n title: {\n type: 'string',\n minLength: 1,\n default: 'Untitled Page',\n },\n description: {\n type: 'string',\n default: '',\n },\n author: {\n type: 'string',\n default: '',\n },\n createdAt: {\n type: 'string',\n format: 'date-time',\n },\n updatedAt: {\n type: 'string',\n format: 'date-time',\n },\n tags: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n },\n category: {\n type: 'string',\n default: 'general',\n },\n version: {\n type: 'string',\n default: '1.0.0',\n },\n custom: {\n type: 'object',\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getPageDocumentJsonSchema() {\n return PAGE_DOCUMENT_JSON_SCHEMA_V1;\n}\n\n/**\n * Standard JSON Schema Draft-07 representation of stora.page Package Manifest v1\n * Aligned 1:1 with TypeScript Manifest type definition.\n */\nexport const MANIFEST_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/manifest.json',\n title: 'StoraPackageManifest',\n description: 'Portable Package Manifest v1 schema definition for KUBUILD (.stora)',\n type: 'object',\n required: ['schemaVersion', 'packageVersion', 'builderCompatibility', 'requiredComponents', 'requiredCapabilities', 'assets'],\n additionalProperties: false,\n properties: {\n schema: {\n type: 'string',\n const: 'stora.page',\n description: 'Schema identifier',\n default: 'stora.page',\n },\n schemaVersion: {\n type: 'string',\n pattern: '^\\\\d+(\\\\.\\\\d+)*$',\n description: 'Document schema version',\n default: '1.0.0',\n },\n packageVersion: {\n type: 'string',\n pattern: '^\\\\d+(\\\\.\\\\d+)*$',\n description: 'Package version',\n default: '1.0.0',\n },\n builderCompatibility: {\n type: 'string',\n description: 'Minimum or range of builder versions compatible with this package',\n default: '>=0.1.0',\n },\n requiredComponents: {\n type: 'array',\n items: { type: 'string' },\n description: 'List of custom component types required by the page',\n default: [],\n },\n requiredCapabilities: {\n type: 'array',\n items: { type: 'string' },\n description: 'List of capabilities required by components in the page',\n default: [],\n },\n assets: {\n type: 'array',\n items: { $ref: '#/definitions/manifestAssetItem' },\n description: 'Inventory of local assets packaged within the archive',\n default: [],\n },\n createdAt: {\n type: 'string',\n format: 'date-time',\n description: 'ISO timestamp when the package was created',\n },\n },\n definitions: {\n manifestAssetItem: {\n type: 'object',\n required: ['id', 'path', 'mimeType', 'size'],\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique asset identifier',\n },\n path: {\n type: 'string',\n minLength: 1,\n description: 'Relative archive path to asset file (e.g. assets/hero.png)',\n },\n mimeType: {\n type: 'string',\n minLength: 1,\n description: 'MIME type of the asset',\n },\n size: {\n type: 'number',\n minimum: 0,\n description: 'Asset size in bytes',\n },\n checksum: {\n type: 'string',\n description: 'SHA-256 or algorithm-prefixed checksum (e.g. sha256:...)',\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getManifestJsonSchema() {\n return MANIFEST_JSON_SCHEMA_V1;\n}\n\n/**\n * Standard JSON Schema Draft-07 representation of Template Record v1\n * Aligned 1:1 with TypeScript TemplateRecord type definition.\n */\nexport const TEMPLATE_RECORD_JSON_SCHEMA_V1 = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: 'https://schema.stora.page/v1/template.json',\n title: 'StoraTemplateRecord',\n description: 'Reusable Page Template Record v1 schema definition for KUBUILD',\n type: 'object',\n required: ['id', 'name'],\n additionalProperties: false,\n properties: {\n id: {\n type: 'string',\n minLength: 1,\n description: 'Unique template identifier',\n },\n name: {\n type: 'string',\n minLength: 1,\n description: 'Human-readable name of the template',\n },\n description: {\n type: 'string',\n default: '',\n description: 'Detailed description of the template purpose and contents',\n },\n category: {\n type: 'string',\n default: 'general',\n description: 'Template category grouping',\n },\n tags: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n description: 'Search and filter tags',\n },\n thumbnail: {\n oneOf: [\n { $ref: '#/definitions/assetReference' },\n { $ref: '#/definitions/safeThumbnailObject' },\n { type: 'string', minLength: 1 },\n ],\n description: 'Safe preview image asset reference or URL',\n },\n author: {\n type: 'string',\n default: '',\n description: 'Template creator or team',\n },\n version: {\n type: 'string',\n default: '1.0.0',\n description: 'Semantic version of the template',\n },\n document: {\n $ref: 'https://schema.stora.page/v1/page.json#',\n description: 'Embedded PageDocument snapshot (optional if packageReference provided)',\n },\n packageReference: {\n $ref: '#/definitions/templatePackageRef',\n description: 'External package/archive reference (optional if document provided)',\n },\n requirements: {\n $ref: '#/definitions/templateRequirements',\n description: 'Component and capability requirements for this template',\n },\n createdAt: {\n type: 'string',\n format: 'date-time',\n description: 'ISO creation timestamp',\n },\n updatedAt: {\n type: 'string',\n format: 'date-time',\n description: 'ISO last updated timestamp',\n },\n custom: {\n type: 'object',\n description: 'Custom host-specific serializable metadata',\n },\n },\n definitions: {\n assetReference: {\n type: 'object',\n required: ['type', 'assetId'],\n properties: {\n type: {\n type: 'string',\n const: 'asset',\n },\n assetId: {\n type: 'string',\n minLength: 1,\n },\n filename: {\n type: 'string',\n },\n mimeType: {\n type: 'string',\n },\n fallbackUrl: {\n type: 'string',\n format: 'uri',\n },\n },\n additionalProperties: false,\n },\n safeThumbnailObject: {\n type: 'object',\n required: ['url'],\n properties: {\n url: {\n type: 'string',\n minLength: 1,\n },\n alt: {\n type: 'string',\n },\n width: {\n type: 'number',\n minimum: 1,\n },\n height: {\n type: 'number',\n minimum: 1,\n },\n },\n additionalProperties: false,\n },\n templatePackageRef: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n },\n url: {\n type: 'string',\n },\n checksum: {\n type: 'string',\n },\n format: {\n type: 'string',\n enum: ['stora', 'json'],\n default: 'stora',\n },\n },\n additionalProperties: false,\n },\n templateRequirements: {\n type: 'object',\n properties: {\n requiredComponents: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n },\n requiredCapabilities: {\n type: 'array',\n items: { type: 'string' },\n default: [],\n },\n },\n additionalProperties: false,\n },\n },\n} as const;\n\nexport function getTemplateRecordJsonSchema() {\n return TEMPLATE_RECORD_JSON_SCHEMA_V1;\n}\n\n"],"mappings":"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","names":["z","z","z","z"]}