@ixo/domain.md 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +6 -0
- package/README.md +30 -0
- package/assets/domain-md.schema.json +1103 -0
- package/assets/oracle-capsule-jcs-vectors.json +57 -0
- package/assets/oracle-capsule-manifest-contract.md +72 -0
- package/assets/oracle-capsule-source-lock.schema.json +45 -0
- package/assets/oracle-capsule.schema.json +265 -0
- package/assets/rules.json +275 -0
- package/assets/spec.md +1434 -0
- package/assets/template-manifest.schema.json +57 -0
- package/dist/capsule/index.d.ts +75 -0
- package/dist/capsule/index.js +20 -0
- package/dist/capsule/index.js.map +1 -0
- package/dist/chunk-BYBC2TSS.js +597 -0
- package/dist/chunk-BYBC2TSS.js.map +1 -0
- package/dist/chunk-G7PZJYAJ.js +31826 -0
- package/dist/chunk-G7PZJYAJ.js.map +1 -0
- package/dist/chunk-R6QZRNEX.js +164 -0
- package/dist/chunk-R6QZRNEX.js.map +1 -0
- package/dist/chunk-T3STBWXP.js +46 -0
- package/dist/chunk-T3STBWXP.js.map +1 -0
- package/dist/chunk-W7MRQP7I.js +862 -0
- package/dist/chunk-W7MRQP7I.js.map +1 -0
- package/dist/chunk-XDIWMZVF.js +1150 -0
- package/dist/chunk-XDIWMZVF.js.map +1 -0
- package/dist/cli-KcUIQEiE.d.ts +171 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +400 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +83 -0
- package/dist/index.js.map +1 -0
- package/dist/resolver-B3mwnjJq.d.ts +96 -0
- package/dist/spec.d.ts +20 -0
- package/dist/spec.js +23 -0
- package/dist/spec.js.map +1 -0
- package/dist/templates/index.d.ts +7 -0
- package/dist/templates/index.js +24 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/workers-Dr8B8a2O.d.ts +19 -0
- package/dist/workers.d.ts +3 -0
- package/dist/workers.js +31 -0
- package/dist/workers.js.map +1 -0
- package/package.json +97 -0
- package/src/capsule/canonical.ts +74 -0
- package/src/capsule/index.ts +10 -0
- package/src/capsule/json.ts +373 -0
- package/src/capsule/types.ts +63 -0
- package/src/capsule/validate.ts +551 -0
- package/src/cli.ts +405 -0
- package/src/compiled-validators.d.ts +7 -0
- package/src/compiled-validators.js +32512 -0
- package/src/constants.ts +250 -0
- package/src/diff.ts +111 -0
- package/src/export.ts +28 -0
- package/src/index.ts +36 -0
- package/src/lint.ts +42 -0
- package/src/parser.ts +174 -0
- package/src/sarif.ts +49 -0
- package/src/semantic.ts +1156 -0
- package/src/spec.ts +48 -0
- package/src/templates/errors.ts +3 -0
- package/src/templates/index.ts +11 -0
- package/src/templates/manifest.ts +94 -0
- package/src/templates/render.ts +435 -0
- package/src/templates/resolver.ts +200 -0
- package/src/templates/types.ts +98 -0
- package/src/types.ts +195 -0
- package/src/workers.ts +6 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/templates/errors.ts","../src/templates/manifest.ts","../src/templates/resolver.ts","../src/templates/render.ts"],"sourcesContent":["export class TemplateValidationError extends Error {\n override readonly name = 'TemplateValidationError';\n}\n","import type { Ajv as AjvCore, Options } from 'ajv';\nimport Ajv2020Import from 'ajv/dist/2020.js';\nimport addFormatsImport from 'ajv-formats';\nimport { isAlias, parseDocument, visit as visitYaml } from 'yaml';\n\nimport {\n MAX_LINKED_BYTES,\n MAX_SCALAR_LENGTH,\n MAX_YAML_DEPTH,\n MAX_YAML_NODES,\n} from '../constants.js';\nimport { getTemplateManifestSchema } from '../spec.js';\nimport type { TemplateManifest } from './types.js';\n\nconst Ajv2020 = Ajv2020Import as unknown as new (options?: Options) => AjvCore;\nconst addFormats = addFormatsImport as unknown as (ajv: AjvCore) => AjvCore;\nconst ajv = new Ajv2020({ allErrors: true, strict: true, strictRequired: false });\naddFormats(ajv);\nconst validate = ajv.compile(getTemplateManifestSchema());\n\nexport function parseTemplateManifest(bytes: Uint8Array): TemplateManifest {\n if (bytes.byteLength > MAX_LINKED_BYTES)\n throw new Error(`Template manifest exceeds ${MAX_LINKED_BYTES} bytes.`);\n const source = new TextDecoder('utf-8', { fatal: true }).decode(bytes);\n const document = parseDocument(source, { prettyErrors: true, uniqueKeys: true, version: '1.2' });\n if (document.errors.length > 0 || document.warnings.length > 0) {\n throw new Error(\n [...document.errors, ...document.warnings].map((item) => item.message).join('; '),\n );\n }\n const unsafe = new Set<string>();\n let nodes = 0;\n let depth = 0;\n let scalarTooLong = false;\n visitYaml(document, {\n Node(_key, node, path) {\n const candidate = node as { anchor?: string; tag?: string; value?: unknown };\n nodes += 1;\n depth = Math.max(depth, path.length + 1);\n if (typeof candidate.value === 'string' && candidate.value.length > MAX_SCALAR_LENGTH)\n scalarTooLong = true;\n if (isAlias(node)) unsafe.add('alias');\n if (candidate.anchor) unsafe.add('anchor');\n if (candidate.tag?.startsWith('!')) unsafe.add('custom-tag');\n },\n Pair(_key, pair) {\n const key = pair.key as { value?: unknown } | null;\n if (key?.value === '<<') unsafe.add('merge-key');\n },\n });\n if (nodes > MAX_YAML_NODES || depth > MAX_YAML_DEPTH || scalarTooLong) {\n throw new Error('Template manifest exceeds YAML node, depth, or scalar limits.');\n }\n if (unsafe.size > 0)\n throw new Error(\n `Template manifest contains forbidden YAML features: ${[...unsafe].sort().join(', ')}.`,\n );\n const value: unknown = document.toJS({ maxAliasCount: 0 });\n if (!validate(value)) {\n const message = (validate.errors ?? [])\n .map((error) => `${error.instancePath || '$'} ${error.message ?? 'is invalid'}`)\n .join('; ');\n throw new Error(`Invalid template manifest: ${message}`);\n }\n const manifest = value as TemplateManifest;\n const derivedTypes = new Set<string>();\n for (const bundle of manifest.bundles) {\n if (derivedTypes.has(bundle.derived_type))\n throw new Error(`Duplicate template bundle ${bundle.derived_type}.`);\n derivedTypes.add(bundle.derived_type);\n const paths = new Set<string>();\n for (const file of bundle.files) {\n if (!file.path.startsWith(`templates/${bundle.derived_type}/`)) {\n throw new Error(\n `Template path ${file.path} does not match bundle type ${bundle.derived_type}.`,\n );\n }\n if (paths.has(file.path)) throw new Error(`Duplicate template path ${file.path}.`);\n paths.add(file.path);\n }\n const domainFiles = bundle.files.filter((file) => file.role === 'domain.md');\n if (\n domainFiles.length !== 1 ||\n domainFiles[0]?.media_type !== 'text/markdown' ||\n domainFiles[0].required !== true ||\n domainFiles[0].path !== `templates/${bundle.derived_type}/domain.md.tmpl`\n ) {\n throw new Error(\n `Template bundle ${bundle.derived_type} must contain exactly one required Markdown domain.md.`,\n );\n }\n }\n return manifest;\n}\n","import { lookup } from 'node:dns/promises';\nimport { lstat, readFile, realpath } from 'node:fs/promises';\nimport { request } from 'node:https';\nimport { relative, resolve } from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\n\nimport ipaddr from 'ipaddr.js';\n\nimport type {\n ResolvedTemplateResource,\n TemplateResolver,\n TemplateResolverContext,\n} from './types.js';\n\nfunction isPublicAddress(address: string): boolean {\n const parsed = ipaddr.parse(address);\n const range = parsed.range();\n return range === 'unicast';\n}\n\nexport function validateHttpsTarget(url: URL, addresses: string[] = []): void {\n if (url.protocol !== 'https:') throw new Error('Only HTTPS template retrieval is allowed.');\n if (url.username || url.password) throw new Error('Credentials in template URLs are forbidden.');\n if (!url.hostname) throw new Error('Template URL hostname is required.');\n if (addresses.some((address) => !isPublicAddress(address))) {\n throw new Error(`Template hostname ${url.hostname} resolves to a non-public address.`);\n }\n}\n\nexport class FileTemplateResolver implements TemplateResolver {\n supports(uri: string): boolean {\n return uri.startsWith('file:') || !/^[A-Za-z][A-Za-z0-9+.-]*:/.test(uri);\n }\n\n async resolve(uri: string, context: TemplateResolverContext): Promise<ResolvedTemplateResource> {\n const path = resolve(uri.startsWith('file:') ? fileURLToPath(uri) : uri);\n const stat = await lstat(path);\n if (!stat.isFile() || stat.isSymbolicLink())\n throw new Error('Template resources must be regular files, not symlinks.');\n if (stat.size > context.maxBytes)\n throw new Error(`Template resource exceeds ${context.maxBytes} bytes.`);\n const canonical = await realpath(path);\n if (canonical !== path) throw new Error('Template resource paths must not contain symlinks.');\n return { uri: pathToFileURL(canonical).href, bytes: await readFile(canonical) };\n }\n\n static async resolveRelative(manifestUri: string, logicalPath: string): Promise<string> {\n const manifestPath = fileURLToPath(manifestUri);\n const root = await realpath(resolve(manifestPath, '..'));\n const requested = resolve(root, logicalPath);\n const lexicalTraversal = relative(root, requested);\n if (\n lexicalTraversal.startsWith('..') ||\n lexicalTraversal.startsWith('/') ||\n lexicalTraversal === ''\n ) {\n throw new Error(`Template path escapes or aliases the manifest root: ${logicalPath}`);\n }\n let current = root;\n for (const component of lexicalTraversal.split(/[\\\\/]/)) {\n current = resolve(current, component);\n if ((await lstat(current)).isSymbolicLink())\n throw new Error(`Template path contains a symlink: ${logicalPath}`);\n }\n const target = await realpath(requested);\n const traversal = relative(root, target);\n if (traversal.startsWith('..') || traversal.startsWith('/') || traversal === '') {\n throw new Error(`Template path escapes or aliases the manifest root: ${logicalPath}`);\n }\n return pathToFileURL(target).href;\n }\n}\n\ninterface HttpsResolverOptions {\n maxRedirects?: number;\n}\n\nexport class HttpsTemplateResolver implements TemplateResolver {\n readonly maxRedirects: number;\n\n constructor(options: HttpsResolverOptions = {}) {\n this.maxRedirects = options.maxRedirects ?? 3;\n }\n\n supports(uri: string): boolean {\n return uri.startsWith('https:');\n }\n\n async resolve(uri: string, context: TemplateResolverContext): Promise<ResolvedTemplateResource> {\n return this.fetch(new URL(uri), context, 0);\n }\n\n private async fetch(\n url: URL,\n context: TemplateResolverContext,\n redirects: number,\n ): Promise<ResolvedTemplateResource> {\n validateHttpsTarget(url);\n const addresses = await lookup(url.hostname, { all: true, verbatim: true });\n if (addresses.length === 0)\n throw new Error(`Template hostname ${url.hostname} did not resolve.`);\n validateHttpsTarget(\n url,\n addresses.map((entry) => entry.address),\n );\n const approved = addresses[0];\n if (!approved) throw new Error(`Template hostname ${url.hostname} did not resolve.`);\n\n return new Promise((resolvePromise, reject) => {\n const req = request(\n url,\n {\n headers: { accept: 'application/yaml, application/json, text/markdown, text/plain' },\n lookup(_hostname, _options, callback) {\n callback(null, approved.address, approved.family);\n },\n servername: url.hostname,\n },\n (response) => {\n const status = response.statusCode ?? 0;\n const location = response.headers.location;\n if (status >= 300 && status < 400 && location) {\n response.resume();\n if (redirects >= this.maxRedirects) {\n reject(new Error('Template retrieval exceeded the redirect limit.'));\n return;\n }\n const redirected = new URL(location, url);\n this.fetch(redirected, context, redirects + 1).then(resolvePromise, reject);\n return;\n }\n if (status !== 200) {\n response.resume();\n reject(new Error(`Template retrieval returned HTTP ${status}.`));\n return;\n }\n const chunks: Buffer[] = [];\n let size = 0;\n response.on('data', (chunk: Buffer) => {\n size += chunk.length;\n if (size > context.maxBytes) {\n req.destroy(new Error(`Template resource exceeds ${context.maxBytes} bytes.`));\n return;\n }\n chunks.push(chunk);\n });\n response.on('end', () => {\n resolvePromise({\n uri: url.href,\n bytes: Buffer.concat(chunks),\n ...(typeof response.headers['content-type'] === 'string'\n ? { mediaType: response.headers['content-type'] }\n : {}),\n });\n });\n },\n );\n req.setTimeout(context.timeoutMs, () =>\n req.destroy(new Error('Template retrieval timed out.')),\n );\n req.on('error', reject);\n req.end();\n });\n }\n}\n\nexport class IpfsTemplateResolver implements TemplateResolver {\n private readonly gateway: URL;\n private readonly https: HttpsTemplateResolver;\n\n constructor(gateway: string, httpsResolver = new HttpsTemplateResolver()) {\n this.gateway = new URL(gateway.endsWith('/') ? gateway : `${gateway}/`);\n validateHttpsTarget(this.gateway);\n this.https = httpsResolver;\n }\n\n supports(uri: string): boolean {\n return uri.startsWith('ipfs:');\n }\n\n async resolve(uri: string, context: TemplateResolverContext): Promise<ResolvedTemplateResource> {\n const source = new URL(uri);\n const cid = source.hostname;\n if (!cid) throw new Error('IPFS URI must include a CID host.');\n const path = source.pathname.replace(/^\\/+/, '');\n const target = new URL(`ipfs/${cid}/${path}`, this.gateway);\n const result = await this.https.resolve(target.href, context);\n return { ...result, uri };\n }\n}\n\nexport function relativeTemplateUri(manifestUri: string, logicalPath: string): string {\n if (manifestUri.startsWith('ipfs:')) {\n const base = new URL(manifestUri);\n const root = base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1);\n base.pathname = `${root}${logicalPath}`;\n return base.href;\n }\n return new URL(logicalPath, manifestUri).href;\n}\n","import { createHash } from 'node:crypto';\nimport { basename } from 'node:path';\n\nimport { CID } from 'multiformats/cid';\nimport { sha256 } from 'multiformats/hashes/sha2';\nimport { isAlias, parseDocument, stringify, visit as visitYaml } from 'yaml';\n\nimport {\n MAX_LINKED_BYTES,\n MAX_SCALAR_LENGTH,\n MAX_YAML_DEPTH,\n MAX_YAML_NODES,\n SPEC_VERSION,\n} from '../constants.js';\nimport { lint } from '../lint.js';\nimport type { DomainRecord } from '../types.js';\nimport { TemplateValidationError } from './errors.js';\nimport { parseTemplateManifest } from './manifest.js';\nimport {\n FileTemplateResolver,\n HttpsTemplateResolver,\n IpfsTemplateResolver,\n relativeTemplateUri,\n} from './resolver.js';\nimport type {\n RenderedFile,\n RenderTemplateRequest,\n RenderTemplateResult,\n ResolvedTemplateResource,\n TemplateFileRecord,\n TemplateResolver,\n} from './types.js';\n\nfunction sha(bytes: Uint8Array): string {\n return createHash('sha256').update(bytes).digest('hex');\n}\n\nfunction canonical(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(canonical).join(',')}]`;\n if (isRecord(value)) {\n return `{${Object.entries(value)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, child]) => `${JSON.stringify(key)}:${canonical(child)}`)\n .join(',')}}`;\n }\n return JSON.stringify(value);\n}\n\nfunction deterministicUuid(seed: string): string {\n const bytes = createHash('sha256').update(seed).digest().subarray(0, 16);\n bytes[6] = ((bytes[6] ?? 0) & 0x0f) | 0x50;\n bytes[8] = ((bytes[8] ?? 0) & 0x3f) | 0x80;\n const hex = bytes.toString('hex');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nasync function verifyIdentity(\n resource: ResolvedTemplateResource,\n expectedSha?: string | null,\n expectedCid?: string | null,\n): Promise<void> {\n if (expectedSha && sha(resource.bytes) !== expectedSha.toLowerCase())\n throw new TemplateValidationError(`SHA-256 mismatch for ${resource.uri}.`);\n if (expectedCid) {\n let cid: CID;\n try {\n cid = CID.parse(expectedCid);\n } catch {\n throw new TemplateValidationError(`Invalid CID ${expectedCid}.`);\n }\n if (cid.code !== 0x55 || cid.multihash.code !== sha256.code) {\n throw new TemplateValidationError(\n `CID verification supports raw sha2-256 CIDs only: ${expectedCid}`,\n );\n }\n const digest = await sha256.digest(resource.bytes);\n if (!Buffer.from(digest.digest).equals(Buffer.from(cid.multihash.digest)))\n throw new TemplateValidationError(`CID mismatch for ${resource.uri}.`);\n }\n}\n\nfunction chooseResolver(uri: string, resolvers: TemplateResolver[]): TemplateResolver {\n const resolver = resolvers.find((candidate) => candidate.supports(uri));\n if (!resolver) throw new Error(`No template resolver supports ${uri}.`);\n return resolver;\n}\n\nfunction isRecord(value: unknown): value is DomainRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\ninterface ParameterDefinition {\n name: string;\n type: 'string' | 'number' | 'boolean' | 'object' | 'array';\n required: boolean;\n fill_at: 'author';\n}\n\nfunction parameterDefinitions(marker: DomainRecord): ParameterDefinition[] {\n if (!Array.isArray(marker.parameters))\n throw new TemplateValidationError('Template marker parameters must be an array.');\n const seen = new Set<string>();\n return marker.parameters.map((value) => {\n if (\n !isRecord(value) ||\n typeof value.name !== 'string' ||\n !['string', 'number', 'boolean', 'object', 'array'].includes(String(value.type)) ||\n typeof value.required !== 'boolean' ||\n value.fill_at !== 'author'\n ) {\n throw new TemplateValidationError(\n 'Every template parameter must declare name, supported type, required, and fill_at: author.',\n );\n }\n if (seen.has(value.name))\n throw new TemplateValidationError(`Duplicate template parameter ${value.name}.`);\n seen.add(value.name);\n return {\n name: value.name,\n type: value.type as ParameterDefinition['type'],\n required: value.required === true,\n fill_at: 'author',\n };\n });\n}\n\nfunction valueMatches(value: unknown, type: ParameterDefinition['type']): boolean {\n if (type === 'array') return Array.isArray(value);\n if (type === 'object') return isRecord(value);\n return typeof value === type;\n}\n\nfunction replaceExactString(value: unknown, before: string, after: string): unknown {\n if (value === before) return after;\n if (Array.isArray(value)) return value.map((item) => replaceExactString(item, before, after));\n if (!isRecord(value)) return value;\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [key, replaceExactString(item, before, after)]),\n );\n}\n\nfunction substitute(\n value: unknown,\n parameters: Record<string, unknown>,\n allowed: Map<string, ParameterDefinition>,\n used: Set<string>,\n): unknown {\n if (Array.isArray(value))\n return value.map((child) => substitute(child, parameters, allowed, used));\n if (!isRecord(value)) return value;\n if (Object.keys(value).length === 1 && typeof value.$param === 'string') {\n const definition = allowed.get(value.$param);\n if (!definition)\n throw new TemplateValidationError(`Unknown structured parameter ${value.$param}.`);\n const resolved = parameters[value.$param];\n if (resolved === undefined)\n throw new TemplateValidationError(\n `Required structured parameter ${value.$param} is unresolved.`,\n );\n if (!valueMatches(resolved, definition.type))\n throw new TemplateValidationError(`Parameter ${value.$param} must be ${definition.type}.`);\n used.add(value.$param);\n return resolved;\n }\n return Object.fromEntries(\n Object.entries(value).map(([key, child]) => [\n key,\n substitute(child, parameters, allowed, used),\n ]),\n );\n}\n\nfunction markdownEscape(value: unknown): string {\n if (typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'boolean') {\n throw new TemplateValidationError('Markdown parameters must be strings, numbers, or booleans.');\n }\n return String(value)\n .replace(/[\\\\`*_[\\]<>]/g, '\\\\$&')\n .replace(/&/g, '&');\n}\n\nfunction renderMarkdownTemplate(\n source: string,\n file: TemplateFileRecord,\n expectedProtocol: string,\n derivedType: string,\n parameters: Record<string, unknown>,\n draftId: string,\n): Uint8Array {\n const match = /^---[ \\t]*\\r?\\n([\\s\\S]*?)\\r?\\n---[ \\t]*(?:\\r?\\n|$)/.exec(source);\n if (!match?.[1])\n throw new TemplateValidationError(`Template ${file.path} requires YAML frontmatter.`);\n const yaml = parseDocument(match[1], { prettyErrors: true, uniqueKeys: true, version: '1.2' });\n if (yaml.errors.length > 0)\n throw new TemplateValidationError(yaml.errors.map((error) => error.message).join('; '));\n const unsafe = new Set<string>();\n let nodes = 0;\n let depth = 0;\n let scalarTooLong = false;\n visitYaml(yaml, {\n Node(_key, node, path) {\n const candidate = node as { anchor?: string; tag?: string; value?: unknown };\n nodes += 1;\n depth = Math.max(depth, path.length + 1);\n if (typeof candidate.value === 'string' && candidate.value.length > MAX_SCALAR_LENGTH)\n scalarTooLong = true;\n if (isAlias(node)) unsafe.add('alias');\n if (candidate.anchor) unsafe.add('anchor');\n if (candidate.tag?.startsWith('!')) unsafe.add('custom-tag');\n },\n Pair(_key, pair) {\n const key = pair.key as { value?: unknown } | null;\n if (key?.value === '<<') unsafe.add('merge-key');\n },\n });\n if (nodes > MAX_YAML_NODES || depth > MAX_YAML_DEPTH || scalarTooLong || unsafe.size > 0) {\n throw new TemplateValidationError(`Template ${file.path} contains unsafe or excessive YAML.`);\n }\n const frontmatter = yaml.toJS({ maxAliasCount: 0 }) as DomainRecord;\n const marker = frontmatter['x-template'];\n const markerKeys = new Set([\n 'is_template',\n 'instantiates_type',\n 'protocol',\n 'template_version',\n 'parameters',\n ]);\n if (\n !isRecord(marker) ||\n marker.is_template !== true ||\n marker.protocol !== expectedProtocol ||\n marker.instantiates_type !== derivedType ||\n typeof marker.template_version !== 'string' ||\n !/^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$/.test(marker.template_version) ||\n Object.keys(marker).some((key) => !markerKeys.has(key) && !key.startsWith('x-'))\n ) {\n throw new TemplateValidationError(`Template marker mismatch in ${file.path}.`);\n }\n const definitions = parameterDefinitions(marker);\n const allowed = new Map(definitions.map((definition) => [definition.name, definition]));\n for (const key of Object.keys(parameters))\n if (!allowed.has(key)) throw new TemplateValidationError(`Undeclared parameter ${key}.`);\n for (const definition of definitions) {\n if (definition.required && parameters[definition.name] === undefined)\n throw new TemplateValidationError(`Required parameter ${definition.name} is unresolved.`);\n if (\n parameters[definition.name] !== undefined &&\n !valueMatches(parameters[definition.name], definition.type)\n )\n throw new TemplateValidationError(`Parameter ${definition.name} must be ${definition.type}.`);\n }\n delete frontmatter['x-template'];\n const used = new Set<string>();\n const substitutedFrontmatter = substitute(frontmatter, parameters, allowed, used) as DomainRecord;\n const originalSubject =\n isRecord(substitutedFrontmatter.domain) && typeof substitutedFrontmatter.domain.id === 'string'\n ? substitutedFrontmatter.domain.id\n : undefined;\n const draftSubject = `urn:uuid:${draftId}`;\n const renderedFrontmatter =\n originalSubject === undefined\n ? substitutedFrontmatter\n : (replaceExactString(substitutedFrontmatter, originalSubject, draftSubject) as DomainRecord);\n if (isRecord(renderedFrontmatter.domain)) {\n renderedFrontmatter.domain.id = draftSubject;\n renderedFrontmatter.domain.iid = null;\n renderedFrontmatter.domain.type = derivedType;\n renderedFrontmatter.domain.class = expectedProtocol;\n renderedFrontmatter.domain.status = 'draft';\n }\n if (isRecord(renderedFrontmatter.constitution))\n renderedFrontmatter.constitution.subject = draftSubject;\n renderedFrontmatter.version = SPEC_VERSION;\n if (isRecord(renderedFrontmatter.conformance))\n renderedFrontmatter.conformance.profile = 'authoring_draft';\n\n const body = source\n .slice(match[0].length)\n .replace(/\\{\\{([A-Za-z0-9_.-]+)\\}\\}/g, (_whole, name: string) => {\n const definition = allowed.get(name);\n if (!definition) throw new TemplateValidationError(`Unknown Markdown parameter ${name}.`);\n const value = parameters[name];\n if (value === undefined)\n throw new TemplateValidationError(`Markdown parameter ${name} is unresolved.`);\n used.add(name);\n return markdownEscape(value);\n });\n for (const definition of definitions) {\n if (definition.required && !used.has(definition.name))\n throw new TemplateValidationError(\n `Required parameter ${definition.name} was declared but unused.`,\n );\n }\n if (/\\{\\{[^{}\\n]+\\}\\}/.test(body))\n throw new TemplateValidationError(`Unresolved placeholder remains in ${file.path}.`);\n return new TextEncoder().encode(\n `---\\n${stringify(renderedFrontmatter, { lineWidth: 0 }).trimEnd()}\\n---\\n${body.replace(/^\\n/, '')}`,\n );\n}\n\nasync function resolveRelative(manifestUri: string, path: string): Promise<string> {\n return manifestUri.startsWith('file:')\n ? FileTemplateResolver.resolveRelative(manifestUri, path)\n : relativeTemplateUri(manifestUri, path);\n}\n\nexport async function renderTemplateBundle(\n request: RenderTemplateRequest,\n): Promise<RenderTemplateResult> {\n const resolvers = request.resolvers ?? [\n new FileTemplateResolver(),\n new HttpsTemplateResolver(),\n ...(request.ipfsGateway ? [new IpfsTemplateResolver(request.ipfsGateway)] : []),\n ];\n if (request.manifestUri.startsWith('https:') && !request.manifestSha256 && !request.manifestCid) {\n throw new Error('HTTPS manifests require --manifest-sha256 or --manifest-cid.');\n }\n if (request.manifestUri.startsWith('ipfs:') && !request.ipfsGateway) {\n throw new Error('IPFS templates require an explicit HTTPS gateway.');\n }\n const context = { maxBytes: MAX_LINKED_BYTES, timeoutMs: request.timeoutMs ?? 10_000 };\n const manifestResource = await chooseResolver(request.manifestUri, resolvers).resolve(\n request.manifestUri,\n context,\n );\n const ipfsManifest = request.manifestUri.startsWith('ipfs:')\n ? new URL(request.manifestUri)\n : undefined;\n if (\n ipfsManifest &&\n ipfsManifest.pathname !== '' &&\n ipfsManifest.pathname !== '/' &&\n !request.manifestSha256\n ) {\n throw new Error('IPFS manifests below a root path require an explicit SHA-256 digest.');\n }\n const impliedCid =\n ipfsManifest && (ipfsManifest.pathname === '' || ipfsManifest.pathname === '/')\n ? ipfsManifest.hostname\n : undefined;\n await verifyIdentity(manifestResource, request.manifestSha256, request.manifestCid ?? impliedCid);\n let manifest;\n try {\n manifest = parseTemplateManifest(manifestResource.bytes);\n } catch (error) {\n throw new TemplateValidationError(\n `Template manifest is invalid: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n if (manifest.protocol !== request.expectedProtocol)\n throw new TemplateValidationError(\n 'Template manifest protocol does not match expectedProtocol.',\n );\n const bundle = manifest.bundles.find(\n (candidate) => candidate.derived_type === request.derivedType,\n );\n if (!bundle)\n throw new TemplateValidationError(`Template manifest has no ${request.derivedType} bundle.`);\n const parameterDigest = sha(new TextEncoder().encode(canonical(request.parameters)));\n const draftId = deterministicUuid(\n `${manifest.protocol}:${bundle.bundle_version}:${sha(manifestResource.bytes)}:${parameterDigest}`,\n );\n\n const rendered: RenderedFile[] = [];\n for (const file of bundle.files) {\n const uri = file.uri ?? (await resolveRelative(manifestResource.uri, file.path));\n const resource = await chooseResolver(uri, resolvers).resolve(uri, context);\n if (!manifestResource.uri.startsWith('file:') && resource.uri.startsWith('file:')) {\n throw new TemplateValidationError('Remote manifests cannot resolve local file resources.');\n }\n if (resource.bytes.byteLength > file.max_bytes) {\n throw new TemplateValidationError(\n `Template ${file.path} exceeds its declared max_bytes limit.`,\n );\n }\n await verifyIdentity(resource, file.sha256, file.cid);\n let source: string;\n try {\n source = new TextDecoder('utf-8', { fatal: true }).decode(resource.bytes);\n } catch {\n throw new TemplateValidationError(`Template ${file.path} is not valid UTF-8.`);\n }\n const bytes =\n file.media_type === 'text/markdown'\n ? renderMarkdownTemplate(\n source,\n file,\n request.expectedProtocol,\n request.derivedType,\n request.parameters,\n draftId,\n )\n : resource.bytes;\n rendered.push({\n role: file.role,\n path: file.path.replace(/^templates\\/[a-z0-9_-]+\\//, '').replace(/\\.tmpl$/, ''),\n bytes,\n sha256: sha(bytes),\n sourceUri: resource.uri,\n });\n }\n const domain = rendered.find((file) => basename(file.path) === 'domain.md');\n if (!domain) throw new TemplateValidationError('Rendered bundle must contain domain.md.');\n const domainText = new TextDecoder().decode(domain.bytes);\n const report = lint(domainText, { sourceName: domain.path, expectedProfile: 'authoring_draft' });\n if (!report.ok)\n throw new TemplateValidationError(\n `Rendered domain.md failed validation: ${report.findings\n .filter((item) => item.severity === 'error')\n .map((item) => `${item.code}: ${item.message}`)\n .join('; ')}`,\n );\n const provenance = stringify(\n {\n provenance: {\n state: 'authoring_draft',\n specification_version: SPEC_VERSION,\n protocol: manifest.protocol,\n protocol_version: manifest.protocol_version,\n manifest: { uri: manifestResource.uri, sha256: sha(manifestResource.bytes) },\n bundle: { derived_type: bundle.derived_type, version: bundle.bundle_version },\n draft_domain_id: `urn:uuid:${draftId}`,\n files: rendered.map((file) => ({\n role: file.role,\n path: file.path,\n source_uri: file.sourceUri,\n sha256: file.sha256,\n })),\n parameters_digest: parameterDigest,\n },\n },\n { lineWidth: 0 },\n );\n return { files: rendered, provenance, report, manifest };\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAO,IAAM,0BAAN,cAAsC,MAAM;AAAA,EAC/B,OAAO;AAC3B;;;ACDA,OAAO,mBAAmB;AAC1B,OAAO,sBAAsB;AAC7B,SAAS,SAAS,eAAe,SAAS,iBAAiB;AAW3D,IAAM,UAAU;AAChB,IAAM,aAAa;AACnB,IAAM,MAAM,IAAI,QAAQ,EAAE,WAAW,MAAM,QAAQ,MAAM,gBAAgB,MAAM,CAAC;AAChF,WAAW,GAAG;AACd,IAAM,WAAW,IAAI,QAAQ,0BAA0B,CAAC;AAEjD,SAAS,sBAAsB,OAAqC;AACzE,MAAI,MAAM,aAAa;AACrB,UAAM,IAAI,MAAM,6BAA6B,gBAAgB,SAAS;AACxE,QAAM,SAAS,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,KAAK;AACrE,QAAM,WAAW,cAAc,QAAQ,EAAE,cAAc,MAAM,YAAY,MAAM,SAAS,MAAM,CAAC;AAC/F,MAAI,SAAS,OAAO,SAAS,KAAK,SAAS,SAAS,SAAS,GAAG;AAC9D,UAAM,IAAI;AAAA,MACR,CAAC,GAAG,SAAS,QAAQ,GAAG,SAAS,QAAQ,EAAE,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE,KAAK,IAAI;AAAA,IAClF;AAAA,EACF;AACA,QAAM,SAAS,oBAAI,IAAY;AAC/B,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,MAAI,gBAAgB;AACpB,YAAU,UAAU;AAAA,IAClB,KAAK,MAAM,MAAM,MAAM;AACrB,YAAM,YAAY;AAClB,eAAS;AACT,cAAQ,KAAK,IAAI,OAAO,KAAK,SAAS,CAAC;AACvC,UAAI,OAAO,UAAU,UAAU,YAAY,UAAU,MAAM,SAAS;AAClE,wBAAgB;AAClB,UAAI,QAAQ,IAAI,EAAG,QAAO,IAAI,OAAO;AACrC,UAAI,UAAU,OAAQ,QAAO,IAAI,QAAQ;AACzC,UAAI,UAAU,KAAK,WAAW,GAAG,EAAG,QAAO,IAAI,YAAY;AAAA,IAC7D;AAAA,IACA,KAAK,MAAM,MAAM;AACf,YAAM,MAAM,KAAK;AACjB,UAAI,KAAK,UAAU,KAAM,QAAO,IAAI,WAAW;AAAA,IACjD;AAAA,EACF,CAAC;AACD,MAAI,QAAQ,kBAAkB,QAAQ,kBAAkB,eAAe;AACrE,UAAM,IAAI,MAAM,+DAA+D;AAAA,EACjF;AACA,MAAI,OAAO,OAAO;AAChB,UAAM,IAAI;AAAA,MACR,uDAAuD,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;AAAA,IACtF;AACF,QAAM,QAAiB,SAAS,KAAK,EAAE,eAAe,EAAE,CAAC;AACzD,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,UAAM,WAAW,SAAS,UAAU,CAAC,GAClC,IAAI,CAAC,UAAU,GAAG,MAAM,gBAAgB,GAAG,IAAI,MAAM,WAAW,YAAY,EAAE,EAC9E,KAAK,IAAI;AACZ,UAAM,IAAI,MAAM,8BAA8B,OAAO,EAAE;AAAA,EACzD;AACA,QAAM,WAAW;AACjB,QAAM,eAAe,oBAAI,IAAY;AACrC,aAAW,UAAU,SAAS,SAAS;AACrC,QAAI,aAAa,IAAI,OAAO,YAAY;AACtC,YAAM,IAAI,MAAM,6BAA6B,OAAO,YAAY,GAAG;AACrE,iBAAa,IAAI,OAAO,YAAY;AACpC,UAAM,QAAQ,oBAAI,IAAY;AAC9B,eAAW,QAAQ,OAAO,OAAO;AAC/B,UAAI,CAAC,KAAK,KAAK,WAAW,aAAa,OAAO,YAAY,GAAG,GAAG;AAC9D,cAAM,IAAI;AAAA,UACR,iBAAiB,KAAK,IAAI,+BAA+B,OAAO,YAAY;AAAA,QAC9E;AAAA,MACF;AACA,UAAI,MAAM,IAAI,KAAK,IAAI,EAAG,OAAM,IAAI,MAAM,2BAA2B,KAAK,IAAI,GAAG;AACjF,YAAM,IAAI,KAAK,IAAI;AAAA,IACrB;AACA,UAAM,cAAc,OAAO,MAAM,OAAO,CAAC,SAAS,KAAK,SAAS,WAAW;AAC3E,QACE,YAAY,WAAW,KACvB,YAAY,CAAC,GAAG,eAAe,mBAC/B,YAAY,CAAC,EAAE,aAAa,QAC5B,YAAY,CAAC,EAAE,SAAS,aAAa,OAAO,YAAY,mBACxD;AACA,YAAM,IAAI;AAAA,QACR,mBAAmB,OAAO,YAAY;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;AC7FA,SAAS,cAAc;AACvB,SAAS,OAAO,UAAU,gBAAgB;AAC1C,SAAS,eAAe;AACxB,SAAS,UAAU,eAAe;AAClC,SAAS,eAAe,qBAAqB;AAE7C,OAAO,YAAY;AAQnB,SAAS,gBAAgB,SAA0B;AACjD,QAAM,SAAS,OAAO,MAAM,OAAO;AACnC,QAAM,QAAQ,OAAO,MAAM;AAC3B,SAAO,UAAU;AACnB;AAEO,SAAS,oBAAoB,KAAU,YAAsB,CAAC,GAAS;AAC5E,MAAI,IAAI,aAAa,SAAU,OAAM,IAAI,MAAM,2CAA2C;AAC1F,MAAI,IAAI,YAAY,IAAI,SAAU,OAAM,IAAI,MAAM,6CAA6C;AAC/F,MAAI,CAAC,IAAI,SAAU,OAAM,IAAI,MAAM,oCAAoC;AACvE,MAAI,UAAU,KAAK,CAAC,YAAY,CAAC,gBAAgB,OAAO,CAAC,GAAG;AAC1D,UAAM,IAAI,MAAM,qBAAqB,IAAI,QAAQ,oCAAoC;AAAA,EACvF;AACF;AAEO,IAAM,uBAAN,MAAuD;AAAA,EAC5D,SAAS,KAAsB;AAC7B,WAAO,IAAI,WAAW,OAAO,KAAK,CAAC,4BAA4B,KAAK,GAAG;AAAA,EACzE;AAAA,EAEA,MAAM,QAAQ,KAAa,SAAqE;AAC9F,UAAM,OAAO,QAAQ,IAAI,WAAW,OAAO,IAAI,cAAc,GAAG,IAAI,GAAG;AACvE,UAAM,OAAO,MAAM,MAAM,IAAI;AAC7B,QAAI,CAAC,KAAK,OAAO,KAAK,KAAK,eAAe;AACxC,YAAM,IAAI,MAAM,yDAAyD;AAC3E,QAAI,KAAK,OAAO,QAAQ;AACtB,YAAM,IAAI,MAAM,6BAA6B,QAAQ,QAAQ,SAAS;AACxE,UAAMA,aAAY,MAAM,SAAS,IAAI;AACrC,QAAIA,eAAc,KAAM,OAAM,IAAI,MAAM,oDAAoD;AAC5F,WAAO,EAAE,KAAK,cAAcA,UAAS,EAAE,MAAM,OAAO,MAAM,SAASA,UAAS,EAAE;AAAA,EAChF;AAAA,EAEA,aAAa,gBAAgB,aAAqB,aAAsC;AACtF,UAAM,eAAe,cAAc,WAAW;AAC9C,UAAM,OAAO,MAAM,SAAS,QAAQ,cAAc,IAAI,CAAC;AACvD,UAAM,YAAY,QAAQ,MAAM,WAAW;AAC3C,UAAM,mBAAmB,SAAS,MAAM,SAAS;AACjD,QACE,iBAAiB,WAAW,IAAI,KAChC,iBAAiB,WAAW,GAAG,KAC/B,qBAAqB,IACrB;AACA,YAAM,IAAI,MAAM,uDAAuD,WAAW,EAAE;AAAA,IACtF;AACA,QAAI,UAAU;AACd,eAAW,aAAa,iBAAiB,MAAM,OAAO,GAAG;AACvD,gBAAU,QAAQ,SAAS,SAAS;AACpC,WAAK,MAAM,MAAM,OAAO,GAAG,eAAe;AACxC,cAAM,IAAI,MAAM,qCAAqC,WAAW,EAAE;AAAA,IACtE;AACA,UAAM,SAAS,MAAM,SAAS,SAAS;AACvC,UAAM,YAAY,SAAS,MAAM,MAAM;AACvC,QAAI,UAAU,WAAW,IAAI,KAAK,UAAU,WAAW,GAAG,KAAK,cAAc,IAAI;AAC/E,YAAM,IAAI,MAAM,uDAAuD,WAAW,EAAE;AAAA,IACtF;AACA,WAAO,cAAc,MAAM,EAAE;AAAA,EAC/B;AACF;AAMO,IAAM,wBAAN,MAAwD;AAAA,EACpD;AAAA,EAET,YAAY,UAAgC,CAAC,GAAG;AAC9C,SAAK,eAAe,QAAQ,gBAAgB;AAAA,EAC9C;AAAA,EAEA,SAAS,KAAsB;AAC7B,WAAO,IAAI,WAAW,QAAQ;AAAA,EAChC;AAAA,EAEA,MAAM,QAAQ,KAAa,SAAqE;AAC9F,WAAO,KAAK,MAAM,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC;AAAA,EAC5C;AAAA,EAEA,MAAc,MACZ,KACA,SACA,WACmC;AACnC,wBAAoB,GAAG;AACvB,UAAM,YAAY,MAAM,OAAO,IAAI,UAAU,EAAE,KAAK,MAAM,UAAU,KAAK,CAAC;AAC1E,QAAI,UAAU,WAAW;AACvB,YAAM,IAAI,MAAM,qBAAqB,IAAI,QAAQ,mBAAmB;AACtE;AAAA,MACE;AAAA,MACA,UAAU,IAAI,CAAC,UAAU,MAAM,OAAO;AAAA,IACxC;AACA,UAAM,WAAW,UAAU,CAAC;AAC5B,QAAI,CAAC,SAAU,OAAM,IAAI,MAAM,qBAAqB,IAAI,QAAQ,mBAAmB;AAEnF,WAAO,IAAI,QAAQ,CAAC,gBAAgB,WAAW;AAC7C,YAAM,MAAM;AAAA,QACV;AAAA,QACA;AAAA,UACE,SAAS,EAAE,QAAQ,gEAAgE;AAAA,UACnF,OAAO,WAAW,UAAU,UAAU;AACpC,qBAAS,MAAM,SAAS,SAAS,SAAS,MAAM;AAAA,UAClD;AAAA,UACA,YAAY,IAAI;AAAA,QAClB;AAAA,QACA,CAAC,aAAa;AACZ,gBAAM,SAAS,SAAS,cAAc;AACtC,gBAAM,WAAW,SAAS,QAAQ;AAClC,cAAI,UAAU,OAAO,SAAS,OAAO,UAAU;AAC7C,qBAAS,OAAO;AAChB,gBAAI,aAAa,KAAK,cAAc;AAClC,qBAAO,IAAI,MAAM,iDAAiD,CAAC;AACnE;AAAA,YACF;AACA,kBAAM,aAAa,IAAI,IAAI,UAAU,GAAG;AACxC,iBAAK,MAAM,YAAY,SAAS,YAAY,CAAC,EAAE,KAAK,gBAAgB,MAAM;AAC1E;AAAA,UACF;AACA,cAAI,WAAW,KAAK;AAClB,qBAAS,OAAO;AAChB,mBAAO,IAAI,MAAM,oCAAoC,MAAM,GAAG,CAAC;AAC/D;AAAA,UACF;AACA,gBAAM,SAAmB,CAAC;AAC1B,cAAI,OAAO;AACX,mBAAS,GAAG,QAAQ,CAAC,UAAkB;AACrC,oBAAQ,MAAM;AACd,gBAAI,OAAO,QAAQ,UAAU;AAC3B,kBAAI,QAAQ,IAAI,MAAM,6BAA6B,QAAQ,QAAQ,SAAS,CAAC;AAC7E;AAAA,YACF;AACA,mBAAO,KAAK,KAAK;AAAA,UACnB,CAAC;AACD,mBAAS,GAAG,OAAO,MAAM;AACvB,2BAAe;AAAA,cACb,KAAK,IAAI;AAAA,cACT,OAAO,OAAO,OAAO,MAAM;AAAA,cAC3B,GAAI,OAAO,SAAS,QAAQ,cAAc,MAAM,WAC5C,EAAE,WAAW,SAAS,QAAQ,cAAc,EAAE,IAC9C,CAAC;AAAA,YACP,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAAA,MACF;AACA,UAAI;AAAA,QAAW,QAAQ;AAAA,QAAW,MAChC,IAAI,QAAQ,IAAI,MAAM,+BAA+B,CAAC;AAAA,MACxD;AACA,UAAI,GAAG,SAAS,MAAM;AACtB,UAAI,IAAI;AAAA,IACV,CAAC;AAAA,EACH;AACF;AAEO,IAAM,uBAAN,MAAuD;AAAA,EAC3C;AAAA,EACA;AAAA,EAEjB,YAAY,SAAiB,gBAAgB,IAAI,sBAAsB,GAAG;AACxE,SAAK,UAAU,IAAI,IAAI,QAAQ,SAAS,GAAG,IAAI,UAAU,GAAG,OAAO,GAAG;AACtE,wBAAoB,KAAK,OAAO;AAChC,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,SAAS,KAAsB;AAC7B,WAAO,IAAI,WAAW,OAAO;AAAA,EAC/B;AAAA,EAEA,MAAM,QAAQ,KAAa,SAAqE;AAC9F,UAAM,SAAS,IAAI,IAAI,GAAG;AAC1B,UAAM,MAAM,OAAO;AACnB,QAAI,CAAC,IAAK,OAAM,IAAI,MAAM,mCAAmC;AAC7D,UAAM,OAAO,OAAO,SAAS,QAAQ,QAAQ,EAAE;AAC/C,UAAM,SAAS,IAAI,IAAI,QAAQ,GAAG,IAAI,IAAI,IAAI,KAAK,OAAO;AAC1D,UAAM,SAAS,MAAM,KAAK,MAAM,QAAQ,OAAO,MAAM,OAAO;AAC5D,WAAO,EAAE,GAAG,QAAQ,IAAI;AAAA,EAC1B;AACF;AAEO,SAAS,oBAAoB,aAAqB,aAA6B;AACpF,MAAI,YAAY,WAAW,OAAO,GAAG;AACnC,UAAM,OAAO,IAAI,IAAI,WAAW;AAChC,UAAM,OAAO,KAAK,SAAS,MAAM,GAAG,KAAK,SAAS,YAAY,GAAG,IAAI,CAAC;AACtE,SAAK,WAAW,GAAG,IAAI,GAAG,WAAW;AACrC,WAAO,KAAK;AAAA,EACd;AACA,SAAO,IAAI,IAAI,aAAa,WAAW,EAAE;AAC3C;;;ACvMA,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AAEzB,SAAS,WAAW;AACpB,SAAS,cAAc;AACvB,SAAS,WAAAC,UAAS,iBAAAC,gBAAe,WAAW,SAASC,kBAAiB;AA4BtE,SAAS,IAAI,OAA2B;AACtC,SAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AACxD;AAEA,SAAS,UAAU,OAAwB;AACzC,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,IAAI,MAAM,IAAI,SAAS,EAAE,KAAK,GAAG,CAAC;AACnE,MAAI,SAAS,KAAK,GAAG;AACnB,WAAO,IAAI,OAAO,QAAQ,KAAK,EAC5B,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,cAAc,KAAK,CAAC,EACnD,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,KAAK,UAAU,GAAG,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE,EAClE,KAAK,GAAG,CAAC;AAAA,EACd;AACA,SAAO,KAAK,UAAU,KAAK;AAC7B;AAEA,SAAS,kBAAkB,MAAsB;AAC/C,QAAM,QAAQ,WAAW,QAAQ,EAAE,OAAO,IAAI,EAAE,OAAO,EAAE,SAAS,GAAG,EAAE;AACvE,QAAM,CAAC,KAAM,MAAM,CAAC,KAAK,KAAK,KAAQ;AACtC,QAAM,CAAC,KAAM,MAAM,CAAC,KAAK,KAAK,KAAQ;AACtC,QAAM,MAAM,MAAM,SAAS,KAAK;AAChC,SAAO,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC;AAC1G;AAEA,eAAe,eACb,UACA,aACA,aACe;AACf,MAAI,eAAe,IAAI,SAAS,KAAK,MAAM,YAAY,YAAY;AACjE,UAAM,IAAI,wBAAwB,wBAAwB,SAAS,GAAG,GAAG;AAC3E,MAAI,aAAa;AACf,QAAI;AACJ,QAAI;AACF,YAAM,IAAI,MAAM,WAAW;AAAA,IAC7B,QAAQ;AACN,YAAM,IAAI,wBAAwB,eAAe,WAAW,GAAG;AAAA,IACjE;AACA,QAAI,IAAI,SAAS,MAAQ,IAAI,UAAU,SAAS,OAAO,MAAM;AAC3D,YAAM,IAAI;AAAA,QACR,qDAAqD,WAAW;AAAA,MAClE;AAAA,IACF;AACA,UAAM,SAAS,MAAM,OAAO,OAAO,SAAS,KAAK;AACjD,QAAI,CAAC,OAAO,KAAK,OAAO,MAAM,EAAE,OAAO,OAAO,KAAK,IAAI,UAAU,MAAM,CAAC;AACtE,YAAM,IAAI,wBAAwB,oBAAoB,SAAS,GAAG,GAAG;AAAA,EACzE;AACF;AAEA,SAAS,eAAe,KAAa,WAAiD;AACpF,QAAM,WAAW,UAAU,KAAK,CAAC,cAAc,UAAU,SAAS,GAAG,CAAC;AACtE,MAAI,CAAC,SAAU,OAAM,IAAI,MAAM,iCAAiC,GAAG,GAAG;AACtE,SAAO;AACT;AAEA,SAAS,SAAS,OAAuC;AACvD,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AASA,SAAS,qBAAqB,QAA6C;AACzE,MAAI,CAAC,MAAM,QAAQ,OAAO,UAAU;AAClC,UAAM,IAAI,wBAAwB,8CAA8C;AAClF,QAAM,OAAO,oBAAI,IAAY;AAC7B,SAAO,OAAO,WAAW,IAAI,CAAC,UAAU;AACtC,QACE,CAAC,SAAS,KAAK,KACf,OAAO,MAAM,SAAS,YACtB,CAAC,CAAC,UAAU,UAAU,WAAW,UAAU,OAAO,EAAE,SAAS,OAAO,MAAM,IAAI,CAAC,KAC/E,OAAO,MAAM,aAAa,aAC1B,MAAM,YAAY,UAClB;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,QAAI,KAAK,IAAI,MAAM,IAAI;AACrB,YAAM,IAAI,wBAAwB,gCAAgC,MAAM,IAAI,GAAG;AACjF,SAAK,IAAI,MAAM,IAAI;AACnB,WAAO;AAAA,MACL,MAAM,MAAM;AAAA,MACZ,MAAM,MAAM;AAAA,MACZ,UAAU,MAAM,aAAa;AAAA,MAC7B,SAAS;AAAA,IACX;AAAA,EACF,CAAC;AACH;AAEA,SAAS,aAAa,OAAgB,MAA4C;AAChF,MAAI,SAAS,QAAS,QAAO,MAAM,QAAQ,KAAK;AAChD,MAAI,SAAS,SAAU,QAAO,SAAS,KAAK;AAC5C,SAAO,OAAO,UAAU;AAC1B;AAEA,SAAS,mBAAmB,OAAgB,QAAgB,OAAwB;AAClF,MAAI,UAAU,OAAQ,QAAO;AAC7B,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,IAAI,CAAC,SAAS,mBAAmB,MAAM,QAAQ,KAAK,CAAC;AAC5F,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,mBAAmB,MAAM,QAAQ,KAAK,CAAC,CAAC;AAAA,EAC3F;AACF;AAEA,SAAS,WACP,OACA,YACA,SACA,MACS;AACT,MAAI,MAAM,QAAQ,KAAK;AACrB,WAAO,MAAM,IAAI,CAAC,UAAU,WAAW,OAAO,YAAY,SAAS,IAAI,CAAC;AAC1E,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,MAAI,OAAO,KAAK,KAAK,EAAE,WAAW,KAAK,OAAO,MAAM,WAAW,UAAU;AACvE,UAAM,aAAa,QAAQ,IAAI,MAAM,MAAM;AAC3C,QAAI,CAAC;AACH,YAAM,IAAI,wBAAwB,gCAAgC,MAAM,MAAM,GAAG;AACnF,UAAM,WAAW,WAAW,MAAM,MAAM;AACxC,QAAI,aAAa;AACf,YAAM,IAAI;AAAA,QACR,iCAAiC,MAAM,MAAM;AAAA,MAC/C;AACF,QAAI,CAAC,aAAa,UAAU,WAAW,IAAI;AACzC,YAAM,IAAI,wBAAwB,aAAa,MAAM,MAAM,YAAY,WAAW,IAAI,GAAG;AAC3F,SAAK,IAAI,MAAM,MAAM;AACrB,WAAO;AAAA,EACT;AACA,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAAA,MAC1C;AAAA,MACA,WAAW,OAAO,YAAY,SAAS,IAAI;AAAA,IAC7C,CAAC;AAAA,EACH;AACF;AAEA,SAAS,eAAe,OAAwB;AAC9C,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW;AACxF,UAAM,IAAI,wBAAwB,4DAA4D;AAAA,EAChG;AACA,SAAO,OAAO,KAAK,EAChB,QAAQ,iBAAiB,MAAM,EAC/B,QAAQ,MAAM,OAAO;AAC1B;AAEA,SAAS,uBACP,QACA,MACA,kBACA,aACA,YACA,SACY;AACZ,QAAM,QAAQ,qDAAqD,KAAK,MAAM;AAC9E,MAAI,CAAC,QAAQ,CAAC;AACZ,UAAM,IAAI,wBAAwB,YAAY,KAAK,IAAI,6BAA6B;AACtF,QAAM,OAAOC,eAAc,MAAM,CAAC,GAAG,EAAE,cAAc,MAAM,YAAY,MAAM,SAAS,MAAM,CAAC;AAC7F,MAAI,KAAK,OAAO,SAAS;AACvB,UAAM,IAAI,wBAAwB,KAAK,OAAO,IAAI,CAAC,UAAU,MAAM,OAAO,EAAE,KAAK,IAAI,CAAC;AACxF,QAAM,SAAS,oBAAI,IAAY;AAC/B,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,MAAI,gBAAgB;AACpB,EAAAC,WAAU,MAAM;AAAA,IACd,KAAK,MAAM,MAAM,MAAM;AACrB,YAAM,YAAY;AAClB,eAAS;AACT,cAAQ,KAAK,IAAI,OAAO,KAAK,SAAS,CAAC;AACvC,UAAI,OAAO,UAAU,UAAU,YAAY,UAAU,MAAM,SAAS;AAClE,wBAAgB;AAClB,UAAIC,SAAQ,IAAI,EAAG,QAAO,IAAI,OAAO;AACrC,UAAI,UAAU,OAAQ,QAAO,IAAI,QAAQ;AACzC,UAAI,UAAU,KAAK,WAAW,GAAG,EAAG,QAAO,IAAI,YAAY;AAAA,IAC7D;AAAA,IACA,KAAK,MAAM,MAAM;AACf,YAAM,MAAM,KAAK;AACjB,UAAI,KAAK,UAAU,KAAM,QAAO,IAAI,WAAW;AAAA,IACjD;AAAA,EACF,CAAC;AACD,MAAI,QAAQ,kBAAkB,QAAQ,kBAAkB,iBAAiB,OAAO,OAAO,GAAG;AACxF,UAAM,IAAI,wBAAwB,YAAY,KAAK,IAAI,qCAAqC;AAAA,EAC9F;AACA,QAAM,cAAc,KAAK,KAAK,EAAE,eAAe,EAAE,CAAC;AAClD,QAAM,SAAS,YAAY,YAAY;AACvC,QAAM,aAAa,oBAAI,IAAI;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,MACE,CAAC,SAAS,MAAM,KAChB,OAAO,gBAAgB,QACvB,OAAO,aAAa,oBACpB,OAAO,sBAAsB,eAC7B,OAAO,OAAO,qBAAqB,YACnC,CAAC,sCAAsC,KAAK,OAAO,gBAAgB,KACnE,OAAO,KAAK,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,IAAI,GAAG,KAAK,CAAC,IAAI,WAAW,IAAI,CAAC,GAC/E;AACA,UAAM,IAAI,wBAAwB,+BAA+B,KAAK,IAAI,GAAG;AAAA,EAC/E;AACA,QAAM,cAAc,qBAAqB,MAAM;AAC/C,QAAM,UAAU,IAAI,IAAI,YAAY,IAAI,CAAC,eAAe,CAAC,WAAW,MAAM,UAAU,CAAC,CAAC;AACtF,aAAW,OAAO,OAAO,KAAK,UAAU;AACtC,QAAI,CAAC,QAAQ,IAAI,GAAG,EAAG,OAAM,IAAI,wBAAwB,wBAAwB,GAAG,GAAG;AACzF,aAAW,cAAc,aAAa;AACpC,QAAI,WAAW,YAAY,WAAW,WAAW,IAAI,MAAM;AACzD,YAAM,IAAI,wBAAwB,sBAAsB,WAAW,IAAI,iBAAiB;AAC1F,QACE,WAAW,WAAW,IAAI,MAAM,UAChC,CAAC,aAAa,WAAW,WAAW,IAAI,GAAG,WAAW,IAAI;AAE1D,YAAM,IAAI,wBAAwB,aAAa,WAAW,IAAI,YAAY,WAAW,IAAI,GAAG;AAAA,EAChG;AACA,SAAO,YAAY,YAAY;AAC/B,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,yBAAyB,WAAW,aAAa,YAAY,SAAS,IAAI;AAChF,QAAM,kBACJ,SAAS,uBAAuB,MAAM,KAAK,OAAO,uBAAuB,OAAO,OAAO,WACnF,uBAAuB,OAAO,KAC9B;AACN,QAAM,eAAe,YAAY,OAAO;AACxC,QAAM,sBACJ,oBAAoB,SAChB,yBACC,mBAAmB,wBAAwB,iBAAiB,YAAY;AAC/E,MAAI,SAAS,oBAAoB,MAAM,GAAG;AACxC,wBAAoB,OAAO,KAAK;AAChC,wBAAoB,OAAO,MAAM;AACjC,wBAAoB,OAAO,OAAO;AAClC,wBAAoB,OAAO,QAAQ;AACnC,wBAAoB,OAAO,SAAS;AAAA,EACtC;AACA,MAAI,SAAS,oBAAoB,YAAY;AAC3C,wBAAoB,aAAa,UAAU;AAC7C,sBAAoB,UAAU;AAC9B,MAAI,SAAS,oBAAoB,WAAW;AAC1C,wBAAoB,YAAY,UAAU;AAE5C,QAAM,OAAO,OACV,MAAM,MAAM,CAAC,EAAE,MAAM,EACrB,QAAQ,8BAA8B,CAAC,QAAQ,SAAiB;AAC/D,UAAM,aAAa,QAAQ,IAAI,IAAI;AACnC,QAAI,CAAC,WAAY,OAAM,IAAI,wBAAwB,8BAA8B,IAAI,GAAG;AACxF,UAAM,QAAQ,WAAW,IAAI;AAC7B,QAAI,UAAU;AACZ,YAAM,IAAI,wBAAwB,sBAAsB,IAAI,iBAAiB;AAC/E,SAAK,IAAI,IAAI;AACb,WAAO,eAAe,KAAK;AAAA,EAC7B,CAAC;AACH,aAAW,cAAc,aAAa;AACpC,QAAI,WAAW,YAAY,CAAC,KAAK,IAAI,WAAW,IAAI;AAClD,YAAM,IAAI;AAAA,QACR,sBAAsB,WAAW,IAAI;AAAA,MACvC;AAAA,EACJ;AACA,MAAI,mBAAmB,KAAK,IAAI;AAC9B,UAAM,IAAI,wBAAwB,qCAAqC,KAAK,IAAI,GAAG;AACrF,SAAO,IAAI,YAAY,EAAE;AAAA,IACvB;AAAA,EAAQ,UAAU,qBAAqB,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,CAAC;AAAA;AAAA,EAAU,KAAK,QAAQ,OAAO,EAAE,CAAC;AAAA,EACrG;AACF;AAEA,eAAe,gBAAgB,aAAqB,MAA+B;AACjF,SAAO,YAAY,WAAW,OAAO,IACjC,qBAAqB,gBAAgB,aAAa,IAAI,IACtD,oBAAoB,aAAa,IAAI;AAC3C;AAEA,eAAsB,qBACpBC,UAC+B;AAC/B,QAAM,YAAYA,SAAQ,aAAa;AAAA,IACrC,IAAI,qBAAqB;AAAA,IACzB,IAAI,sBAAsB;AAAA,IAC1B,GAAIA,SAAQ,cAAc,CAAC,IAAI,qBAAqBA,SAAQ,WAAW,CAAC,IAAI,CAAC;AAAA,EAC/E;AACA,MAAIA,SAAQ,YAAY,WAAW,QAAQ,KAAK,CAACA,SAAQ,kBAAkB,CAACA,SAAQ,aAAa;AAC/F,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AACA,MAAIA,SAAQ,YAAY,WAAW,OAAO,KAAK,CAACA,SAAQ,aAAa;AACnE,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACA,QAAM,UAAU,EAAE,UAAU,kBAAkB,WAAWA,SAAQ,aAAa,IAAO;AACrF,QAAM,mBAAmB,MAAM,eAAeA,SAAQ,aAAa,SAAS,EAAE;AAAA,IAC5EA,SAAQ;AAAA,IACR;AAAA,EACF;AACA,QAAM,eAAeA,SAAQ,YAAY,WAAW,OAAO,IACvD,IAAI,IAAIA,SAAQ,WAAW,IAC3B;AACJ,MACE,gBACA,aAAa,aAAa,MAC1B,aAAa,aAAa,OAC1B,CAACA,SAAQ,gBACT;AACA,UAAM,IAAI,MAAM,sEAAsE;AAAA,EACxF;AACA,QAAM,aACJ,iBAAiB,aAAa,aAAa,MAAM,aAAa,aAAa,OACvE,aAAa,WACb;AACN,QAAM,eAAe,kBAAkBA,SAAQ,gBAAgBA,SAAQ,eAAe,UAAU;AAChG,MAAI;AACJ,MAAI;AACF,eAAW,sBAAsB,iBAAiB,KAAK;AAAA,EACzD,SAAS,OAAO;AACd,UAAM,IAAI;AAAA,MACR,iCAAiC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,IACzF;AAAA,EACF;AACA,MAAI,SAAS,aAAaA,SAAQ;AAChC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,QAAM,SAAS,SAAS,QAAQ;AAAA,IAC9B,CAAC,cAAc,UAAU,iBAAiBA,SAAQ;AAAA,EACpD;AACA,MAAI,CAAC;AACH,UAAM,IAAI,wBAAwB,4BAA4BA,SAAQ,WAAW,UAAU;AAC7F,QAAM,kBAAkB,IAAI,IAAI,YAAY,EAAE,OAAO,UAAUA,SAAQ,UAAU,CAAC,CAAC;AACnF,QAAM,UAAU;AAAA,IACd,GAAG,SAAS,QAAQ,IAAI,OAAO,cAAc,IAAI,IAAI,iBAAiB,KAAK,CAAC,IAAI,eAAe;AAAA,EACjG;AAEA,QAAM,WAA2B,CAAC;AAClC,aAAW,QAAQ,OAAO,OAAO;AAC/B,UAAM,MAAM,KAAK,OAAQ,MAAM,gBAAgB,iBAAiB,KAAK,KAAK,IAAI;AAC9E,UAAM,WAAW,MAAM,eAAe,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAO;AAC1E,QAAI,CAAC,iBAAiB,IAAI,WAAW,OAAO,KAAK,SAAS,IAAI,WAAW,OAAO,GAAG;AACjF,YAAM,IAAI,wBAAwB,uDAAuD;AAAA,IAC3F;AACA,QAAI,SAAS,MAAM,aAAa,KAAK,WAAW;AAC9C,YAAM,IAAI;AAAA,QACR,YAAY,KAAK,IAAI;AAAA,MACvB;AAAA,IACF;AACA,UAAM,eAAe,UAAU,KAAK,QAAQ,KAAK,GAAG;AACpD,QAAI;AACJ,QAAI;AACF,eAAS,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,SAAS,KAAK;AAAA,IAC1E,QAAQ;AACN,YAAM,IAAI,wBAAwB,YAAY,KAAK,IAAI,sBAAsB;AAAA,IAC/E;AACA,UAAM,QACJ,KAAK,eAAe,kBAChB;AAAA,MACE;AAAA,MACA;AAAA,MACAA,SAAQ;AAAA,MACRA,SAAQ;AAAA,MACRA,SAAQ;AAAA,MACR;AAAA,IACF,IACA,SAAS;AACf,aAAS,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,MAAM,KAAK,KAAK,QAAQ,6BAA6B,EAAE,EAAE,QAAQ,WAAW,EAAE;AAAA,MAC9E;AAAA,MACA,QAAQ,IAAI,KAAK;AAAA,MACjB,WAAW,SAAS;AAAA,IACtB,CAAC;AAAA,EACH;AACA,QAAM,SAAS,SAAS,KAAK,CAAC,SAAS,SAAS,KAAK,IAAI,MAAM,WAAW;AAC1E,MAAI,CAAC,OAAQ,OAAM,IAAI,wBAAwB,yCAAyC;AACxF,QAAM,aAAa,IAAI,YAAY,EAAE,OAAO,OAAO,KAAK;AACxD,QAAM,SAAS,KAAK,YAAY,EAAE,YAAY,OAAO,MAAM,iBAAiB,kBAAkB,CAAC;AAC/F,MAAI,CAAC,OAAO;AACV,UAAM,IAAI;AAAA,MACR,yCAAyC,OAAO,SAC7C,OAAO,CAAC,SAAS,KAAK,aAAa,OAAO,EAC1C,IAAI,CAAC,SAAS,GAAG,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE,EAC7C,KAAK,IAAI,CAAC;AAAA,IACf;AACF,QAAM,aAAa;AAAA,IACjB;AAAA,MACE,YAAY;AAAA,QACV,OAAO;AAAA,QACP,uBAAuB;AAAA,QACvB,UAAU,SAAS;AAAA,QACnB,kBAAkB,SAAS;AAAA,QAC3B,UAAU,EAAE,KAAK,iBAAiB,KAAK,QAAQ,IAAI,iBAAiB,KAAK,EAAE;AAAA,QAC3E,QAAQ,EAAE,cAAc,OAAO,cAAc,SAAS,OAAO,eAAe;AAAA,QAC5E,iBAAiB,YAAY,OAAO;AAAA,QACpC,OAAO,SAAS,IAAI,CAAC,UAAU;AAAA,UAC7B,MAAM,KAAK;AAAA,UACX,MAAM,KAAK;AAAA,UACX,YAAY,KAAK;AAAA,UACjB,QAAQ,KAAK;AAAA,QACf,EAAE;AAAA,QACF,mBAAmB;AAAA,MACrB;AAAA,IACF;AAAA,IACA,EAAE,WAAW,EAAE;AAAA,EACjB;AACA,SAAO,EAAE,OAAO,UAAU,YAAY,QAAQ,SAAS;AACzD;","names":["canonical","isAlias","parseDocument","visitYaml","parseDocument","visitYaml","isAlias","request"]}
|