@sneat/structured-data 0.0.0-stage → 0.27.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -2
- package/assets/hcl-worker.mjs +135 -0
- package/assets/tree-sitter-hcl.LICENSE +201 -0
- package/assets/tree-sitter-hcl.wasm +0 -0
- package/assets/web-tree-sitter.LICENSE +21 -0
- package/assets/web-tree-sitter.js +4081 -0
- package/assets/web-tree-sitter.wasm +0 -0
- package/fesm2022/sneat-structured-data-core.mjs +692 -0
- package/fesm2022/sneat-structured-data-core.mjs.map +1 -0
- package/fesm2022/sneat-structured-data.mjs +1163 -0
- package/fesm2022/sneat-structured-data.mjs.map +1 -0
- package/package.json +32 -3
- package/tsconfig.lib.prod.tsbuildinfo +1 -0
- package/types/sneat-structured-data-core.d.ts +253 -0
- package/types/sneat-structured-data.d.ts +327 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sneat-structured-data.mjs","sources":["../../../../libs/structured-data/src/lib/core/limits.ts","../../../../libs/structured-data/src/lib/core/json.ts","../../../../libs/structured-data/src/lib/core/yaml.ts","../../../../libs/structured-data/src/lib/core/hcl.ts","../../../../libs/structured-data/src/lib/core/selectors.ts","../../../../libs/structured-data/src/lib/core/config.ts","../../../../libs/structured-data/src/lib/core/index.ts","../../../../libs/structured-data/src/lib/structured-data/structured-node.ts","../../../../libs/structured-data/src/lib/structured-data/structured-data-viewer.component.ts","../../../../libs/structured-data/src/lib/structured-data/structured-data-viewer.html","../../../../libs/structured-data/src/sneat-structured-data.ts"],"sourcesContent":["import type { SourceRange, StructuredDiagnostic, StructuredLimits } from './structured-data.types';\n\nexport const DEFAULT_LIMITS: Required<StructuredLimits> = {\n maxSourceBytes: 2_000_000,\n maxNodes: 30_000,\n maxDepth: 64,\n maxRows: 2_000,\n maxConfigBytes: 64_000,\n maxRules: 100,\n maxSections: 300,\n maxSelectorLength: 256,\n maxSelectorDepth: 16,\n maxYamlAliases: 0,\n timeoutMs: 2_000,\n};\n\nexport function effectiveLimits(overrides?: StructuredLimits): Required<StructuredLimits> {\n const result = { ...DEFAULT_LIMITS };\n if (overrides) {\n for (const key of Object.keys(DEFAULT_LIMITS) as (keyof StructuredLimits)[]) {\n const value = overrides[key];\n if (value !== undefined) {\n if (!Number.isSafeInteger(value) || value < 0 || value > DEFAULT_LIMITS[key]) {\n throw new Error(`Invalid ${key} limit`);\n }\n result[key] = value;\n }\n }\n }\n return result;\n}\n\nexport function sourceByteLength(text: string): number {\n return new TextEncoder().encode(text).length;\n}\n\nexport function exceedsSourceLimit(text: string, maxBytes: number): boolean {\n return text.length > maxBytes || sourceByteLength(text) > maxBytes;\n}\n\nexport function diagnostic(\n code: StructuredDiagnostic['code'],\n message: string,\n range?: SourceRange,\n source?: string,\n): StructuredDiagnostic {\n return { code, message, severity: 'error', ...(range ? { range } : {}), ...(source ? { source } : {}) };\n}\n\n/** Tree-sitter and JS parser offsets are UTF-16 code-unit offsets. */\nexport class SourceLocator {\n private readonly lineStarts: number[] = [0];\n\n constructor(private readonly source: string) {\n for (let index = 0; index < source.length; index++) {\n if (source[index] === '\\r') {\n if (source[index + 1] === '\\n') index++;\n this.lineStarts.push(index + 1);\n } else if (source[index] === '\\n') {\n this.lineStarts.push(index + 1);\n }\n }\n }\n\n range(startOffset: number, endOffset: number): SourceRange {\n return {\n startOffset,\n endOffset,\n start: this.position(startOffset),\n end: this.position(endOffset),\n };\n }\n\n private position(offset: number): { line: number; column: number } {\n let low = 0;\n let high = this.lineStarts.length;\n while (low + 1 < high) {\n const middle = (low + high) >>> 1;\n if (this.lineStarts[middle] <= offset) low = middle;\n else high = middle;\n }\n return { line: low, column: offset - this.lineStarts[low] };\n }\n}\n","import { parseTree, type Node, type ParseError } from 'jsonc-parser';\nimport type { ParseResult, StructuredObjectEntry, StructuredValue, StructuredLimits } from './structured-data.types';\nimport { diagnostic, effectiveLimits, exceedsSourceLimit, SourceLocator } from './limits';\n\nexport function parseJsonText(sourceText: string, limits?: StructuredLimits): ParseResult {\n let bounded: Required<StructuredLimits>;\n try { bounded = effectiveLimits(limits); }\n catch (error) { return { ok: false, diagnostics: [diagnostic('limit_exceeded', String(error))] }; }\n if (exceedsSourceLimit(sourceText, bounded.maxSourceBytes)) {\n return { ok: false, diagnostics: [diagnostic('limit_exceeded', `JSON source exceeds ${bounded.maxSourceBytes} bytes`)] };\n }\n const errors: ParseError[] = [];\n let root: Node | undefined;\n try { root = parseTree(sourceText, errors, { disallowComments: true, allowTrailingComma: false }); }\n catch { return { ok: false, diagnostics: [diagnostic('limit_exceeded', 'JSON parser could not process this source safely')] }; }\n const locator = new SourceLocator(sourceText);\n if (!root || errors.length) {\n return { ok: false, diagnostics: errors.length\n ? errors.map(error => diagnostic('invalid_syntax', `Invalid JSON (${error.error})`, locator.range(error.offset, error.offset + error.length)))\n : [diagnostic('invalid_syntax', 'JSON document is empty')] };\n }\n let count = 0;\n try {\n const convert = (node: Node, depth: number): StructuredValue => {\n if (++count > bounded.maxNodes || depth > bounded.maxDepth) throw new Error('JSON node or depth limit exceeded');\n const range = locator.range(node.offset, node.offset + node.length);\n switch (node.type) {\n case 'null': return { kind: 'null', range };\n case 'boolean': return { kind: 'boolean', value: node.value as boolean, range };\n case 'string': return { kind: 'string', value: node.value as string, range };\n case 'number': {\n const sourceNumber = sourceText.slice(node.offset, node.offset + node.length);\n const parsedNumber = Number(sourceNumber);\n const losslessInteger = !Number.isInteger(parsedNumber) || Number.isSafeInteger(parsedNumber);\n return { kind: 'number', sourceText: sourceNumber,\n ...(Number.isFinite(parsedNumber) && losslessInteger ? { value: parsedNumber } : {}), range };\n }\n case 'array': return { kind: 'array', items: (node.children ?? []).map(child => convert(child, depth + 1)), range };\n case 'object': {\n const entries: StructuredObjectEntry[] = [];\n const seen = new Set<string>();\n for (const property of node.children ?? []) {\n const keyNode = property.children?.[0];\n const valueNode = property.children?.[1];\n if (!keyNode || !valueNode || typeof keyNode.value !== 'string') throw new Error('Invalid JSON property');\n const key = keyNode.value;\n if (seen.has(key)) throw new Error(`Duplicate JSON key: ${key}`);\n seen.add(key);\n entries.push({ key, value: convert(valueNode, depth + 1), range: locator.range(property.offset, property.offset + property.length) });\n }\n return { kind: 'object', entries, range };\n }\n default: throw new Error(`Unsupported JSON node: ${node.type}`);\n }\n };\n return { ok: true, document: { format: 'json', root: convert(root, 0), sourceText }, diagnostics: [] };\n } catch (error) {\n const message = String(error);\n return { ok: false, diagnostics: [diagnostic(message.includes('limit') ? 'limit_exceeded' : 'invalid_syntax', message)] };\n }\n}\n","import { isAlias, isMap, isScalar, isSeq, parseDocument, type Node } from 'yaml';\nimport type { ParseResult, StructuredLimits, StructuredObjectEntry, StructuredValue, SourceRange } from './structured-data.types';\nimport { diagnostic, effectiveLimits, exceedsSourceLimit, SourceLocator } from './limits';\n\nexport function parseYamlText(sourceText: string, limits?: StructuredLimits): ParseResult {\n let bounded: Required<StructuredLimits>;\n try { bounded = effectiveLimits(limits); }\n catch (error) { return { ok: false, diagnostics: [diagnostic('limit_exceeded', String(error))] }; }\n if (exceedsSourceLimit(sourceText, bounded.maxSourceBytes)) {\n return { ok: false, diagnostics: [diagnostic('limit_exceeded', `YAML source exceeds ${bounded.maxSourceBytes} bytes`)] };\n }\n const locator = new SourceLocator(sourceText);\n let yaml;\n try { yaml = parseDocument(sourceText, { uniqueKeys: true, strict: true }); }\n catch { return { ok: false, diagnostics: [diagnostic('limit_exceeded', 'YAML parser could not process this source safely')] }; }\n if (yaml.errors.length) {\n return { ok: false, diagnostics: yaml.errors.map(error => diagnostic(\n 'invalid_syntax', error.message,\n error.pos ? locator.range(error.pos[0], error.pos[1]) : undefined,\n )) };\n }\n let count = 0;\n const rangeOf = (node: Node | null): SourceRange | undefined => node?.range\n ? locator.range(node.range[0], node.range[1]) : undefined;\n try {\n const convert = (node: Node | null, depth: number): StructuredValue => {\n if (++count > bounded.maxNodes || depth > bounded.maxDepth) throw new Error('YAML node or depth limit exceeded');\n if (node === null) return { kind: 'null' };\n if (isAlias(node)) throw new Error('YAML aliases are unsupported in structured view');\n if (node.tag && !node.tag.startsWith('tag:yaml.org,2002:')) throw new Error(`Unsupported YAML tag: ${node.tag}`);\n const range = rangeOf(node);\n if (isScalar(node)) {\n const value = node.value;\n if (value === null || value === undefined) return { kind: 'null', range };\n if (typeof value === 'boolean') return { kind: 'boolean', value, range };\n if (typeof value === 'number') {\n const sourceNumber = range ? sourceText.slice(range.startOffset, range.endOffset) : String(value);\n return { kind: 'number', sourceText: sourceNumber,\n ...(Number.isFinite(value) && (!Number.isInteger(value) || Number.isSafeInteger(value)) ? { value } : {}), range };\n }\n if (typeof value === 'string') return { kind: 'string', value, range };\n throw new Error('Unsupported YAML scalar');\n }\n if (isSeq(node)) return { kind: 'array', items: node.items.map(item => convert(item as Node | null, depth + 1)), range };\n if (isMap(node)) {\n const entries: StructuredObjectEntry[] = [];\n const seen = new Set<string>();\n for (const pair of node.items) {\n if (!isScalar(pair.key) || typeof pair.key.value !== 'string') throw new Error('YAML mapping keys must be strings');\n const key = pair.key.value;\n if (seen.has(key)) throw new Error(`Duplicate YAML key: ${key}`);\n seen.add(key);\n entries.push({ key, value: convert(pair.value as Node | null, depth + 1), range: rangeOf(pair.key) });\n }\n return { kind: 'object', entries, range };\n }\n throw new Error('Unsupported YAML node');\n };\n return { ok: true, document: { format: 'yaml', root: convert(yaml.contents, 0), sourceText }, diagnostics: [] };\n } catch (error) {\n const message = String(error);\n const code = message.includes('limit') ? 'limit_exceeded' : 'unsupported_construct';\n return { ok: false, diagnostics: [diagnostic(code, message)] };\n }\n}\n","import type { HclBody, ParseResult, StructuredDiagnostic, StructuredLimits } from './structured-data.types';\nimport { diagnostic, effectiveLimits, exceedsSourceLimit } from './limits';\n\ninterface HclWorkerReply {\n readonly id: number;\n readonly ok: boolean;\n readonly root?: HclBody;\n readonly diagnostics?: readonly StructuredDiagnostic[];\n}\n\n/** Loads only same-origin packaged assets, and only when invoked in a browser. */\nexport async function parseHclText(sourceText: string, limits?: StructuredLimits): Promise<ParseResult> {\n let bounded: Required<StructuredLimits>;\n try { bounded = effectiveLimits(limits); }\n catch (error) { return { ok: false, diagnostics: [diagnostic('limit_exceeded', String(error))] }; }\n if (exceedsSourceLimit(sourceText, bounded.maxSourceBytes)) {\n return { ok: false, diagnostics: [diagnostic('limit_exceeded', `HCL source exceeds ${bounded.maxSourceBytes} bytes`)] };\n }\n if (typeof Worker === 'undefined') {\n return { ok: false, diagnostics: [diagnostic('parser_unavailable', 'HCL parsing requires a browser Worker')] };\n }\n let worker: Worker;\n try {\n worker = new Worker(new URL('../assets/hcl-worker.mjs', import.meta.url), { type: 'module' });\n } catch (error) {\n return { ok: false, diagnostics: [diagnostic('parser_unavailable', `HCL Worker could not start: ${String(error)}`)] };\n }\n return new Promise<ParseResult>(resolve => {\n let settled = false;\n const finish = (result: ParseResult): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n worker.terminate();\n resolve(result);\n };\n const timer = setTimeout(() => finish({ ok: false,\n diagnostics: [diagnostic('limit_exceeded', 'HCL parsing exceeded its hard deadline')] }), bounded.timeoutMs + 1_000);\n worker.onmessage = (event: MessageEvent<HclWorkerReply>) => {\n const reply = event.data;\n if (!reply || reply.id !== 1) return;\n if (reply.ok && reply.root) finish({ ok: true,\n document: { format: 'hcl', root: reply.root, sourceText }, diagnostics: [] });\n else finish({ ok: false, diagnostics: reply.diagnostics?.length\n ? reply.diagnostics : [diagnostic('invalid_syntax', 'HCL parser returned no document')] });\n };\n worker.onerror = () => finish({ ok: false,\n diagnostics: [diagnostic('parser_unavailable', 'HCL Worker failed to load its packaged assets')] });\n worker.postMessage({ id: 1, sourceText, limits: bounded });\n });\n}\n","import type { HclBody, SelectionResult, StructuredNode, StructuredValue, ViewRowContext } from './structured-data.types';\nimport { DEFAULT_LIMITS } from './limits';\n\n/** RFC 6901 without wildcards, evaluation, or prototype traversal. */\nexport function parseRelativePointer(pointer: string, maxLength = DEFAULT_LIMITS.maxSelectorLength,\n maxDepth = DEFAULT_LIMITS.maxSelectorDepth): readonly string[] | null {\n if (pointer === '') return [];\n if (!pointer.startsWith('/') || pointer.length > maxLength) return null;\n const parts = pointer.slice(1).split('/');\n if (parts.length > maxDepth) return null;\n const decoded: string[] = [];\n for (const part of parts) {\n if (/~(?![01])/.test(part)) return null;\n const value = part.replace(/~1/g, '/').replace(/~0/g, '~');\n if (value === '__proto__' || value === 'prototype' || value === 'constructor') return null;\n decoded.push(value);\n }\n return decoded;\n}\n\nconst missing: SelectionResult = { found: false };\n\nexport function selectRelative(node: StructuredNode, pointer: string): SelectionResult {\n const parts = parseRelativePointer(pointer);\n if (parts === null) return missing;\n let current: StructuredNode = node;\n for (let index = 0; index < parts.length; index++) {\n const part = parts[index];\n if (current.kind === 'hcl-block') current = current.body;\n if (current.kind === 'hcl-attribute') current = current.value;\n if (current.kind === 'hcl-body') {\n const body: HclBody = current;\n if (part === 'attributes' && index + 1 < parts.length) {\n const name = parts[++index];\n const found = body.members.find(member => member.kind === 'hcl-attribute' && member.name === name);\n if (!found || found.kind !== 'hcl-attribute') return missing;\n current = found.value;\n continue;\n }\n if (part === 'blocks' && index + 1 < parts.length) {\n const position = Number(parts[++index]);\n if (!Number.isSafeInteger(position) || position < 0 || String(position) !== parts[index]) return missing;\n const found = body.members.filter(member => member.kind === 'hcl-block')[position];\n if (!found) return missing;\n current = found;\n continue;\n }\n return missing;\n }\n if (current.kind === 'object') {\n const found = current.entries.find(entry => entry.key === part);\n if (!found) return missing;\n current = found.value;\n continue;\n }\n if (current.kind === 'array') {\n const position = Number(part);\n if (!Number.isSafeInteger(position) || position < 0 || String(position) !== part) return missing;\n const found: StructuredValue | undefined = current.items[position];\n if (!found) return missing;\n current = found;\n continue;\n }\n return missing;\n }\n return { found: true, value: current };\n}\n\nexport function selectViewPath(context: ViewRowContext, path: string): SelectionResult {\n if (path === '$key') return context.key === undefined ? missing\n : { found: true, value: { kind: 'string', value: context.key } };\n if (path.startsWith('$label/')) {\n const position = Number(path.slice('$label/'.length));\n if (!Number.isSafeInteger(position) || position < 0 || String(position) !== path.slice('$label/'.length)) return missing;\n const value = context.labels?.[position];\n return value === undefined ? missing : { found: true, value: { kind: 'string', value } };\n }\n return selectRelative(context.node, path);\n}\n","import type {\n BlocksSection, EntriesSection, FieldsSection, ParseResult, ResolveViewOptions, ResolutionResult,\n StructuredLimits, StructuredNode, TableSection, ValidationResult,\n ViewColumn, ViewEntryLayout, ViewField, ViewRule, ViewSection, ViewTitle,\n} from './structured-data.types';\nimport { diagnostic, effectiveLimits, exceedsSourceLimit } from './limits';\nimport { parseJsonText } from './json';\nimport { parseRelativePointer } from './selectors';\nimport { parseYamlText } from './yaml';\n\ntype RecordValue = Record<string, unknown>;\n\nfunction record(value: unknown): RecordValue | null {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return null;\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return null;\n for (const property of Object.values(Object.getOwnPropertyDescriptors(value))) {\n if (!('value' in property)) return null;\n }\n return value as RecordValue;\n}\n\nfunction exactKeys(value: RecordValue, allowed: readonly string[]): boolean {\n return Object.keys(value).every(key => allowed.includes(key));\n}\n\nfunction text(value: unknown, max = 256): value is string {\n return typeof value === 'string' && value.length > 0 && value.length <= max;\n}\n\nfunction pointer(value: unknown, limits: Required<StructuredLimits>, allowSpecial = false): value is string {\n if (typeof value !== 'string') return false;\n if (allowSpecial && (value === '$key' || /^\\$label\\/(0|[1-9]\\d{0,2})$/.test(value))) return true;\n return parseRelativePointer(value, limits.maxSelectorLength, limits.maxSelectorDepth) !== null;\n}\n\nfunction safeGlob(value: unknown, limits: Required<StructuredLimits>): value is string {\n return text(value, limits.maxSelectorLength) && !value.startsWith('/') && !value.includes('..')\n && /^[A-Za-z0-9_./*?@-]+$/.test(value);\n}\n\nfunction parseTitle(value: unknown, limits: Required<StructuredLimits>): ViewTitle | null {\n const source = record(value);\n if (!source || !exactKeys(source, ['label', 'path']) || !text(source['label']) || !pointer(source['path'], limits)) return null;\n return { label: source['label'], path: source['path'] };\n}\n\nfunction parseFields(value: unknown, limits: Required<StructuredLimits>): readonly ViewField[] | null {\n if (!Array.isArray(value) || value.length > 64) return null;\n const result: ViewField[] = [];\n for (const item of value) {\n const field = record(item);\n if (!field || !exactKeys(field, ['label', 'path', 'scalarListLayout']) || !text(field['label'])\n || !pointer(field['path'], limits) || (field['scalarListLayout'] !== undefined\n && field['scalarListLayout'] !== 'inline' && field['scalarListLayout'] !== 'list')) return null;\n result.push({ label: field['label'], path: field['path'],\n ...(field['scalarListLayout'] ? { scalarListLayout: field['scalarListLayout'] as 'inline' | 'list' } : {}) });\n }\n return result;\n}\n\nfunction parseColumns(value: unknown, limits: Required<StructuredLimits>): readonly ViewColumn[] | null {\n if (!Array.isArray(value) || value.length === 0 || value.length > 64) return null;\n const result: ViewColumn[] = [];\n for (const item of value) {\n const column = record(item);\n if (!column || !exactKeys(column, ['label', 'path']) || !text(column['label'])\n || !pointer(column['path'], limits, true)) return null;\n result.push({ label: column['label'], path: column['path'] });\n }\n return result;\n}\n\nfunction parseSections(value: unknown, limits: Required<StructuredLimits>, counter: { count: number },\n depth = 0): readonly ViewSection[] | null {\n if (!Array.isArray(value) || depth > limits.maxDepth || value.length > limits.maxSections) return null;\n const result: ViewSection[] = [];\n const ids = new Set<string>();\n for (const item of value) {\n if (++counter.count > limits.maxSections) return null;\n const section = record(item);\n if (!section || !text(section['id'], 100) || !/^[A-Za-z0-9_-]+$/.test(section['id'])\n || ids.has(section['id']) || !text(section['title']) || !pointer(section['path'], limits)) return null;\n ids.add(section['id']);\n const base = { id: section['id'], title: section['title'], path: section['path'] };\n if (section['kind'] === 'fields') {\n if (!exactKeys(section, ['id', 'title', 'kind', 'path', 'fields'])) return null;\n const fields = parseFields(section['fields'], limits);\n if (!fields) return null;\n result.push({ ...base, kind: 'fields', fields } as FieldsSection);\n continue;\n }\n if (section['kind'] === 'value') {\n if (!exactKeys(section, ['id', 'title', 'kind', 'path', 'scalarListLayout'])\n || (section['scalarListLayout'] !== undefined && section['scalarListLayout'] !== 'inline'\n && section['scalarListLayout'] !== 'list')) return null;\n result.push({ ...base, kind: 'value',\n ...(section['scalarListLayout'] ? { scalarListLayout: section['scalarListLayout'] } : {}) } as ViewSection);\n continue;\n }\n if (section['kind'] === 'table') {\n if (!exactKeys(section, ['id', 'title', 'kind', 'path', 'rows', 'blockType', 'columns'])\n || !['dictionary', 'list', 'blocks'].includes(String(section['rows']))\n || (section['blockType'] !== undefined && !text(section['blockType'], 100))) return null;\n const columns = parseColumns(section['columns'], limits);\n if (!columns) return null;\n result.push({ ...base, kind: 'table', rows: section['rows'], columns,\n ...(section['blockType'] ? { blockType: section['blockType'] } : {}) } as TableSection);\n continue;\n }\n if (section['kind'] === 'entries' || section['kind'] === 'blocks') {\n const blocks = section['kind'] === 'blocks';\n if (!exactKeys(section, blocks\n ? ['id', 'title', 'kind', 'path', 'blockType', 'presentation', 'allowLayoutSwitch', 'initiallyExpanded', 'entry']\n : ['id', 'title', 'kind', 'path', 'presentation', 'allowLayoutSwitch', 'initiallyExpanded', 'entry'])) return null;\n if (blocks && !text(section['blockType'], 100)) return null;\n if (section['presentation'] !== undefined && section['presentation'] !== 'list' && section['presentation'] !== 'accordion') return null;\n if (section['allowLayoutSwitch'] !== undefined && typeof section['allowLayoutSwitch'] !== 'boolean') return null;\n if (section['initiallyExpanded'] !== undefined && !['first', 'all', 'none'].includes(String(section['initiallyExpanded']))) return null;\n let entry: ViewEntryLayout | undefined;\n if (section['entry'] !== undefined) {\n const rawEntry = record(section['entry']);\n if (!rawEntry || !exactKeys(rawEntry, ['heading', 'sections']) || !text(rawEntry['heading'])\n || !pointer(rawEntry['heading'], limits, true)) return null;\n const nested = rawEntry['sections'] === undefined ? undefined\n : parseSections(rawEntry['sections'], limits, counter, depth + 1);\n if (rawEntry['sections'] !== undefined && !nested) return null;\n entry = { heading: rawEntry['heading'], ...(nested ? { sections: nested } : {}) };\n }\n const common = { ...base,\n ...(section['presentation'] ? { presentation: section['presentation'] } : {}),\n ...(section['allowLayoutSwitch'] !== undefined ? { allowLayoutSwitch: section['allowLayoutSwitch'] } : {}),\n ...(section['initiallyExpanded'] ? { initiallyExpanded: section['initiallyExpanded'] } : {}),\n ...(entry ? { entry } : {}) };\n result.push(blocks ? { ...common, kind: 'blocks', blockType: section['blockType'] } as BlocksSection\n : { ...common, kind: 'entries' } as EntriesSection);\n continue;\n }\n return null;\n }\n return result;\n}\n\nexport function validateViewConfig(input: unknown, limits?: StructuredLimits): ValidationResult {\n let bounded: Required<StructuredLimits>;\n try { bounded = effectiveLimits(limits); }\n catch (error) { return { ok: false, diagnostics: [diagnostic('limit_exceeded', String(error))] }; }\n const source = record(input);\n if (!source || !exactKeys(source, ['version', 'rules']) || source['version'] !== 1\n || !Array.isArray(source['rules']) || source['rules'].length > bounded.maxRules) {\n return { ok: false, diagnostics: [diagnostic('invalid_config', 'Expected version 1 and a bounded rules array')] };\n }\n const rules: ViewRule[] = [];\n const ids = new Set<string>();\n const counter = { count: 0 };\n for (const item of source['rules']) {\n const rule = record(item);\n if (!rule || !exactKeys(rule, ['id', 'match', 'parser', 'title', 'sections']) || !text(rule['id'], 100)\n || !/^[A-Za-z0-9_-]+$/.test(rule['id']) || ids.has(rule['id'])\n || !safeGlob(rule['match'], bounded) || !['json', 'yaml', 'hcl'].includes(String(rule['parser']))) {\n return { ok: false, diagnostics: [diagnostic('invalid_config', 'Invalid or duplicate view rule')] };\n }\n ids.add(rule['id']);\n const title = rule['title'] === undefined ? undefined : parseTitle(rule['title'], bounded);\n if (rule['title'] !== undefined && !title) return { ok: false, diagnostics: [diagnostic('invalid_config', `Invalid title in ${rule['id']}`)] };\n const sections = rule['sections'] === undefined ? undefined : parseSections(rule['sections'], bounded, counter);\n if (rule['sections'] !== undefined && !sections) return { ok: false, diagnostics: [diagnostic('invalid_config', `Invalid sections in ${rule['id']}`)] };\n rules.push({ id: rule['id'], match: rule['match'], parser: rule['parser'] as ViewRule['parser'],\n ...(title ? { title } : {}), ...(sections ? { sections } : {}) });\n }\n return { ok: true, config: { version: 1, rules } };\n}\n\nfunction plain(node: StructuredNode): unknown {\n switch (node.kind) {\n case 'null': return null;\n case 'boolean': case 'string': return node.value;\n case 'number': return node.value ?? Number(node.sourceText);\n case 'array': return node.items.map(plain);\n case 'object': return Object.fromEntries(node.entries.map(entry => [entry.key, plain(entry.value)]));\n default: throw new Error('Configuration cannot contain HCL or expressions');\n }\n}\n\nexport function parseViewConfigText(textSource: string, format: 'json' | 'yaml', sourcePath?: string,\n limits?: StructuredLimits): ValidationResult {\n let bounded: Required<StructuredLimits>;\n try { bounded = effectiveLimits(limits); }\n catch (error) { return { ok: false, diagnostics: [diagnostic('limit_exceeded', String(error))] }; }\n if (exceedsSourceLimit(textSource, bounded.maxConfigBytes)) {\n return { ok: false, diagnostics: [diagnostic('limit_exceeded', `View config exceeds ${bounded.maxConfigBytes} bytes`, undefined, sourcePath)] };\n }\n const parsed: ParseResult = format === 'json' ? parseJsonText(textSource, { ...bounded, maxSourceBytes: bounded.maxConfigBytes })\n : parseYamlText(textSource, { ...bounded, maxSourceBytes: bounded.maxConfigBytes });\n if (!parsed.ok) return { ok: false, diagnostics: parsed.diagnostics.map(item => ({ ...item, source: sourcePath })) };\n try { return validateViewConfig(plain(parsed.document.root), bounded); }\n catch (error) { return { ok: false, diagnostics: [diagnostic('invalid_config', String(error), undefined, sourcePath)] }; }\n}\n\nfunction matchGlob(glob: string, path: string): boolean {\n if (path.length > 4_096) return false;\n const width = path.length + 1;\n const table = new Uint8Array((glob.length + 1) * width);\n const at = (pattern: number, position: number): number => table[pattern * width + position];\n table[glob.length * width + path.length] = 1;\n for (let pattern = glob.length - 1; pattern >= 0; pattern--) {\n let consumedDirectory = false;\n for (let position = path.length; position >= 0; position--) {\n const character = glob[pattern];\n const remaining = position < path.length;\n let matches = false;\n if (character === '*' && glob[pattern + 1] === '*' && glob[pattern + 2] === '/') {\n consumedDirectory = remaining && ((path[position] === '/' && !!at(pattern + 3, position + 1)) || consumedDirectory);\n matches = !!at(pattern + 3, position) || consumedDirectory;\n } else if (character === '*' && glob[pattern + 1] === '*') {\n matches = !!at(pattern + 2, position) || (remaining && !!at(pattern, position + 1));\n } else if (character === '*') {\n matches = !!at(pattern + 1, position) || (remaining && path[position] !== '/' && !!at(pattern, position + 1));\n } else if (character === '?') {\n matches = remaining && path[position] !== '/' && !!at(pattern + 1, position + 1);\n } else {\n matches = remaining && character === path[position] && !!at(pattern + 1, position + 1);\n }\n table[pattern * width + position] = matches ? 1 : 0;\n }\n }\n return !!at(0, 0);\n}\n\nexport function resolveViewRule(options: ResolveViewOptions): ResolutionResult {\n let bounded: Required<StructuredLimits>;\n try { bounded = effectiveLimits(options.limits); }\n catch (error) { return { status: 'error', diagnostics: [diagnostic('limit_exceeded', String(error))] }; }\n const pathSegments = options.repositoryPath.split('/');\n if (options.repositoryPath.length > 4_096 || options.repositoryPath.startsWith('/')\n || options.repositoryPath.includes('\\\\')\n || [...options.repositoryPath].some(character => character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127)\n || pathSegments.some(segment => segment === '.' || segment === '..' || segment === '')) {\n return { status: 'error', diagnostics: [diagnostic('invalid_config', 'Invalid repository path for view resolution')] };\n }\n const limits = options.limits;\n const merged: ViewRule[] = [];\n const append = (rule: ViewRule): void => {\n const previous = merged.findIndex(candidate => candidate.id === rule.id);\n if (previous >= 0) merged.splice(previous, 1);\n merged.push(rule);\n };\n if (options.builtInRules?.length) {\n const checked = validateViewConfig({ version: 1, rules: options.builtInRules }, limits);\n if (!checked.ok) return { status: 'error', diagnostics: checked.diagnostics };\n checked.config.rules.forEach(append);\n if (merged.length > bounded.maxRules) {\n return { status: 'error', diagnostics: [diagnostic('limit_exceeded', 'Too many combined view rules')] };\n }\n }\n const levels = new Set<string>();\n for (const document of options.orderedDocuments) {\n const level = document.sourcePath.replace(/\\/[^/]+$/, '');\n if (levels.has(level)) return { status: 'error', diagnostics: [diagnostic('invalid_config', `Multiple view config files at ${level}`)] };\n levels.add(level);\n const checked = validateViewConfig(document.config, limits);\n if (!checked.ok) return { status: 'error', diagnostics: checked.diagnostics.map(item => ({ ...item, source: document.sourcePath })) };\n checked.config.rules.forEach(append);\n if (merged.length > bounded.maxRules) {\n return { status: 'error', diagnostics: [diagnostic('limit_exceeded', 'Too many combined view rules')] };\n }\n }\n const path = options.repositoryPath.replace(/^\\/+/, '');\n let matchingWork = 0;\n for (let index = merged.length - 1; index >= 0; index--) {\n matchingWork += (merged[index].match.length + 1) * (path.length + 1);\n if (matchingWork > 8_000_000) {\n return { status: 'error', diagnostics: [diagnostic('limit_exceeded', 'View rule matching work limit exceeded')] };\n }\n if (matchGlob(merged[index].match, path)) return { status: 'matched', parser: merged[index].parser, view: merged[index] };\n }\n const suffix = path.toLowerCase().split('.').pop();\n if (suffix === 'json' || suffix === 'yaml' || suffix === 'hcl') return { status: 'generic', parser: suffix };\n if (suffix === 'yml') return { status: 'generic', parser: 'yaml' };\n return { status: 'unsupported', diagnostics: [diagnostic('unsupported_format', 'No JSON, YAML, or HCL view applies')] };\n}\n","export type * from './structured-data.types';\nexport { DEFAULT_LIMITS } from './limits';\nexport { parseJsonText } from './json';\nexport { parseYamlText } from './yaml';\nexport { parseHclText } from './hcl';\nexport { parseRelativePointer, selectRelative, selectViewPath } from './selectors';\nexport { validateViewConfig, parseViewConfigText, resolveViewRule } from './config';\n\nimport type { ParseResult, StructuredFormat, StructuredLimits } from './structured-data.types';\nimport { parseJsonText } from './json';\nimport { parseYamlText } from './yaml';\nimport { parseHclText } from './hcl';\n\nexport function parseStructuredText(sourceText: string, format: StructuredFormat,\n limits?: StructuredLimits): Promise<ParseResult> {\n if (format === 'json') return Promise.resolve(parseJsonText(sourceText, limits));\n if (format === 'yaml') return Promise.resolve(parseYamlText(sourceText, limits));\n return parseHclText(sourceText, limits);\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\nimport type { HclAttribute, HclBlock, HclBody, SourceRange, StructuredArray, StructuredNode,\n StructuredObject, StructuredValue, ScalarListLayout } from '../core/structured-data.types';\n\n/** Internal recursive, read-only value renderer. The host's source remains authoritative. */\n@Component({\n selector: 'sneat-structured-node',\n standalone: true,\n imports: [CommonModule, forwardRef(() => StructuredNodeComponent)],\n template: `\n @if (depth > maxDepth) {\n <span class=\"sd-limit\">Nested value limit reached</span>\n } @else {\n @switch (node.kind) {\n @case ('null') { <span class=\"sd-scalar sd-null\">null</span> }\n @case ('boolean') { <span class=\"sd-scalar\">{{ scalarText(node) }}</span> }\n @case ('number') { <span class=\"sd-scalar\">{{ scalarText(node) }}</span> }\n @case ('string') { <span class=\"sd-scalar\">{{ scalarText(node) }}</span> }\n @case ('expression') {\n <span class=\"sd-expression\" aria-label=\"Unevaluated HCL expression\">{{ scalarText(node) }}</span>\n }\n @case ('array') {\n @if (isInlineArray(node) && (node.items.length <= inlineLimit || expanded)) {\n <span class=\"sd-inline-array\" aria-label=\"List of {{node.items.length}} values\">{{inlineArrayText(node)}}</span>\n @if (node.items.length > maxRows) { <span class=\"sd-limit\">{{node.items.length - maxRows}} more values; inspect Raw source</span> }\n } @else if (isInlineArray(node) && !expanded) {\n <button type=\"button\" class=\"sd-link\" (click)=\"expanded = true\">Show {{node.items.length}} values</button>\n } @else {\n <ol class=\"sd-list\">\n @for (item of limitedArray(node); track $index) {\n <li><sneat-structured-node [node]=\"item\" [depth]=\"depth + 1\" [maxDepth]=\"maxDepth\"\n [maxRows]=\"maxRows\" (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" /></li>\n }\n </ol>\n @if (node.items.length > maxRows) { <span class=\"sd-limit\">{{node.items.length - maxRows}} more values; inspect Raw source</span> }\n }\n }\n @case ('object') {\n @if (node.entries.length === 0) { <span class=\"sd-empty\">Empty object</span> }\n @else {\n <dl class=\"sd-fields\">\n @for (entry of limitedEntries(node); track entry.key) {\n <dt>{{entry.key}}</dt>\n <dd><sneat-structured-node [node]=\"entry.value\" [depth]=\"depth + 1\" [maxDepth]=\"maxDepth\"\n [maxRows]=\"maxRows\" (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" /></dd>\n }\n </dl>\n @if (node.entries.length > maxRows) { <span class=\"sd-limit\">{{node.entries.length - maxRows}} more fields; inspect Raw source</span> }\n }\n }\n @case ('hcl-body') {\n @if (node.members.length === 0) { <span class=\"sd-empty\">Empty body</span> }\n @for (member of limitedMembers(node); track $index) {\n @if (member.kind === 'hcl-attribute') {\n <div class=\"sd-hcl-member\"><strong>{{member.name}}</strong>:\n <sneat-structured-node [node]=\"member.value\" [depth]=\"depth + 1\" [maxDepth]=\"maxDepth\"\n [maxRows]=\"maxRows\" (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n <button type=\"button\" class=\"sd-source\" (click)=\"sourcePositionSelected.emit(member.range)\"\n [attr.aria-label]=\"'Open source for ' + member.name\">Source</button>\n </div>\n } @else {\n <details class=\"sd-hcl-block\">\n <summary>{{member.blockType}} @for (label of member.labels; track $index) { <span>{{label}} </span> }</summary>\n <sneat-structured-node [node]=\"member.body\" [depth]=\"depth + 1\" [maxDepth]=\"maxDepth\"\n [maxRows]=\"maxRows\" (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n <button type=\"button\" class=\"sd-source\" (click)=\"sourcePositionSelected.emit(member.range)\"\n [attr.aria-label]=\"'Open source for ' + member.blockType\">Source</button>\n </details>\n }\n }\n @if (node.members.length > maxRows) { <span class=\"sd-limit\">{{node.members.length - maxRows}} more members; inspect Raw source</span> }\n }\n @case ('hcl-block') {\n <strong>{{node.blockType}} @for (label of node.labels; track $index) { <span>{{label}} </span> }</strong>\n <sneat-structured-node [node]=\"node.body\" [depth]=\"depth + 1\" [maxDepth]=\"maxDepth\"\n [maxRows]=\"maxRows\" (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n }\n @case ('hcl-attribute') {\n <strong>{{node.name}}</strong>:\n <sneat-structured-node [node]=\"node.value\" [depth]=\"depth + 1\" [maxDepth]=\"maxDepth\"\n [maxRows]=\"maxRows\" (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n }\n }\n @if (node.range && node.kind !== 'hcl-body' && node.kind !== 'hcl-block' && node.kind !== 'hcl-attribute') {\n <button type=\"button\" class=\"sd-source\" (click)=\"sourcePositionSelected.emit(node.range)\"\n aria-label=\"Open source for value\">Source</button>\n }\n }\n `,\n styles: [`\n :host { display: inline-block; max-width: 100%; overflow-wrap: anywhere; }\n .sd-inline-array { display: inline-flex; flex-wrap: wrap; gap: .2rem; max-width: 100%; }\n .sd-inline-item { white-space: normal; }\n .sd-fields { display: grid; grid-template-columns: minmax(6rem, auto) minmax(0, 1fr); gap: .3rem .8rem; }\n .sd-fields dt { font-weight: 600; }\n .sd-fields dd { margin: 0; min-width: 0; }\n .sd-list { margin: .2rem 0; padding-inline-start: 1.5rem; }\n .sd-expression { font-family: monospace; }\n .sd-source, .sd-link { border: 0; background: transparent; color: inherit; text-decoration: underline; cursor: pointer; }\n .sd-source { font-size: .75em; margin-inline-start: .5rem; }\n .sd-empty, .sd-null, .sd-limit { opacity: .75; }\n .sd-hcl-member, .sd-hcl-block { display: block; margin-block: .25rem; }\n `],\n})\nexport class StructuredNodeComponent {\n @Input({ required: true }) node!: StructuredNode;\n @Input() depth = 0;\n @Input() maxDepth = 64;\n @Input() maxRows = 2_000;\n @Input() scalarListLayout: ScalarListLayout = 'inline';\n @Output() sourcePositionSelected = new EventEmitter<SourceRange>();\n\n expanded = false;\n readonly inlineLimit = 12;\n\n scalarText(node: StructuredNode): string {\n switch (node.kind) {\n case 'null': return 'null';\n case 'boolean': return String(node.value);\n case 'number': return node.sourceText;\n case 'string': return JSON.stringify(node.value);\n case 'expression': return node.sourceText;\n default: return '';\n }\n }\n\n isInlineArray(node: StructuredNode): node is StructuredArray {\n return node.kind === 'array' && this.scalarListLayout === 'inline'\n && node.items.every(item => ['null', 'boolean', 'number', 'string', 'expression'].includes(item.kind));\n }\n\n inlineArrayText(node: StructuredArray): string {\n return `[${this.limitedArray(node).map(item => this.inlineScalarText(item)).join(', ')}]`;\n }\n\n private inlineScalarText(node: StructuredValue): string {\n if (node.kind !== 'string') return this.scalarText(node);\n const safe = /^[\\p{L}_][\\p{L}\\p{N}_.-]*$/u.test(node.value)\n && !['true', 'false', 'null', 'nan', 'infinity'].includes(node.value.toLowerCase());\n return safe ? node.value : JSON.stringify(node.value);\n }\n\n limitedArray(node: StructuredArray): readonly StructuredValue[] { return node.items.slice(0, this.maxRows); }\n limitedEntries(node: StructuredObject): StructuredObject['entries'] { return node.entries.slice(0, this.maxRows); }\n limitedMembers(node: HclBody): readonly (HclAttribute | HclBlock)[] { return node.members.slice(0, this.maxRows); }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewChecked, Component, ElementRef, EventEmitter, inject, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { AccordionModule } from 'primeng/accordion';\nimport { ButtonModule } from 'primeng/button';\nimport { TableModule } from 'primeng/table';\nimport type {\n CollectionPresentation, SourceRange, StructuredDiagnostic, StructuredDocument, StructuredLimits,\n StructuredNode, StructuredSectionSelection, ViewEntryLayout, ViewRowContext, ViewRule, ViewSection,\n} from '../core/structured-data.types';\nimport { parseRelativePointer, selectRelative, selectViewPath } from '../core/selectors';\nimport { StructuredNodeComponent } from './structured-node';\n\nexport interface StructuredDisplayRow extends ViewRowContext {\n readonly id: string;\n readonly title: string;\n}\n\n@Component({\n selector: 'sneat-structured-data-viewer',\n standalone: true,\n imports: [CommonModule, AccordionModule, ButtonModule, TableModule, StructuredNodeComponent],\n templateUrl: './structured-data-viewer.html',\n styleUrl: './structured-data-viewer.css',\n})\nexport class StructuredDataViewerComponent implements OnChanges, AfterViewChecked {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n @Input() document: StructuredDocument | null = null;\n @Input() view: ViewRule | null = null;\n @Input() activeSectionId: string | null = null;\n @Input() diagnostics: readonly StructuredDiagnostic[] = [];\n @Input() sourceText = '';\n @Input() showRawFallback = false;\n @Input() limits: StructuredLimits = {};\n @Output() sourcePositionSelected = new EventEmitter<SourceRange>();\n @Output() sectionSelected = new EventEmitter<StructuredSectionSelection>();\n\n private readonly expanded = new Map<string, string[]>();\n private readonly layouts = new Map<string, CollectionPresentation>();\n private lastNavigatedId: string | null = null;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['document'] || changes['view']) {\n this.expanded.clear(); this.layouts.clear(); this.lastNavigatedId = null;\n }\n }\n\n ngAfterViewChecked(): void {\n if (!this.activeSectionId || this.lastNavigatedId === this.activeSectionId || typeof document === 'undefined') return;\n const target = [...this.host.nativeElement.querySelectorAll<HTMLElement>('[id]')]\n .find(element => element.id === this.activeSectionId);\n if (!target) return;\n target.focus({ preventScroll: true });\n target.scrollIntoView?.({ block: 'nearest' });\n this.lastNavigatedId = this.activeSectionId;\n }\n\n get maxRows(): number { return Math.max(0, Math.min(2_000, this.limits.maxRows ?? 2_000)); }\n get maxDepth(): number { return Math.max(0, Math.min(64, this.limits.maxDepth ?? 64)); }\n get sections(): readonly ViewSection[] { return this.view?.sections ?? []; }\n get rootContext(): ViewRowContext | null { return this.document ? { node: this.document.root, pathId: '' } : null; }\n get rawFallbackText(): string { return this.sourceText || this.document?.sourceText || ''; }\n\n titleText(): string | null {\n if (!this.document || !this.view?.title) return null;\n const value = selectRelative(this.document.root, this.view.title.path);\n return value.found ? `${this.view.title.label} ${this.shortText(value.value)}` : this.view.title.label;\n }\n\n selected(context: ViewRowContext, path: string): StructuredNode | null {\n const result = selectViewPath(context, path);\n return result.found ? result.value : null;\n }\n\n shortText(node: StructuredNode): string {\n switch (node.kind) {\n case 'null': return 'null';\n case 'boolean': return String(node.value);\n case 'number': return node.sourceText;\n case 'string': return node.value;\n case 'expression': return node.sourceText;\n case 'array': return `[${node.items.length} values]`;\n case 'object': return `{${node.entries.length} fields}`;\n case 'hcl-body': return `${node.members.length} members`;\n case 'hcl-attribute': return node.name;\n case 'hcl-block': return `${node.blockType} ${node.labels.join(' ')}`;\n }\n }\n\n selectSection(sectionId: string): void { this.sectionSelected.emit({ sectionId }); }\n sectionId(section: ViewSection, context: ViewRowContext): string {\n return context.pathId ? `${context.pathId}/${section.id}` : section.id;\n }\n rowActivated(row: StructuredDisplayRow): void { this.selectSection(row.pathId || row.id); }\n\n private rowPath(section: ViewSection, parent: ViewRowContext, id: string): string {\n return `${this.sectionId(section, parent)}/${id}`;\n }\n\n rowsFor(section: ViewSection, context: ViewRowContext): StructuredDisplayRow[] {\n const selected = this.selected(context, section.path);\n if (!selected || this.maxRows === 0) return [];\n const rows: StructuredDisplayRow[] = [];\n if (section.kind === 'blocks' || (section.kind === 'table' && section.rows === 'blocks')) {\n const body = selected.kind === 'hcl-block' ? selected.body : selected;\n if (body.kind !== 'hcl-body') return [];\n for (const member of body.members) {\n if (member.kind !== 'hcl-block' || (section.blockType && member.blockType !== section.blockType)) continue;\n const rowContext = { node: member, labels: member.labels };\n const id = `${member.blockType}-${member.range.startOffset}-${encodeURIComponent(member.labels.join('|'))}`;\n rows.push({ ...rowContext, id, pathId: this.rowPath(section, context, id),\n title: this.entryHeading(section.kind === 'blocks' ? section.entry : undefined,\n rowContext, `${member.blockType} ${member.labels.join(' ')}`) });\n if (rows.length >= this.maxRows) break;\n }\n } else if (selected.kind === 'object' && (section.kind === 'entries' || (section.kind === 'table' && section.rows === 'dictionary'))) {\n for (const entry of selected.entries) {\n const rowContext = { node: entry.value, key: entry.key };\n const id = encodeURIComponent(entry.key);\n rows.push({ ...rowContext, id, pathId: this.rowPath(section, context, id),\n title: this.entryHeading(section.kind === 'entries' ? section.entry : undefined, rowContext, entry.key) });\n if (rows.length >= this.maxRows) break;\n }\n } else if (selected.kind === 'array' && (section.kind === 'entries' || (section.kind === 'table' && section.rows === 'list'))) {\n selected.items.slice(0, this.maxRows).forEach((item, index) => {\n const rowContext = { node: item };\n const id = String(index);\n rows.push({ ...rowContext, id, pathId: this.rowPath(section, context, id),\n title: this.entryHeading(section.kind === 'entries' ? section.entry : undefined, rowContext, String(index + 1)) });\n });\n }\n return rows;\n }\n\n totalRows(section: ViewSection, context: ViewRowContext): number {\n const selected = this.selected(context, section.path);\n if (!selected) return 0;\n if (selected.kind === 'object') return selected.entries.length;\n if (selected.kind === 'array') return selected.items.length;\n const body = selected.kind === 'hcl-block' ? selected.body : selected;\n return body.kind === 'hcl-body' ? body.members.filter(member => member.kind === 'hcl-block'\n && (!('blockType' in section) || !section.blockType || member.blockType === section.blockType)).length : 0;\n }\n\n rowLimitNotice(section: ViewSection, context: ViewRowContext): string | null {\n const remaining = this.totalRows(section, context) - this.maxRows;\n return remaining > 0 ? `${remaining} more rows; inspect Raw source` : null;\n }\n\n entryHeading(entry: ViewEntryLayout | undefined, context: ViewRowContext, fallback: string): string {\n if (!entry) return fallback;\n const selected = selectViewPath(context, entry.heading);\n return selected.found ? this.shortText(selected.value) : fallback;\n }\n\n entrySections(section: ViewSection): readonly ViewSection[] {\n return section.kind === 'entries' || section.kind === 'blocks' ? section.entry?.sections ?? [] : [];\n }\n\n layoutFor(section: ViewSection, context: ViewRowContext): CollectionPresentation {\n return this.layouts.get(this.sectionId(section, context)) ?? ('presentation' in section ? section.presentation || 'list' : 'list');\n }\n setLayout(section: ViewSection, context: ViewRowContext, layout: CollectionPresentation): void {\n this.layouts.set(this.sectionId(section, context), layout);\n }\n\n expandedValues(section: ViewSection, context: ViewRowContext, rows: readonly StructuredDisplayRow[]): string[] {\n const pathId = this.sectionId(section, context);\n let current = this.expanded.get(pathId);\n if (!current) {\n const initial = 'initiallyExpanded' in section ? section.initiallyExpanded : undefined;\n current = initial === 'all' ? rows.map(row => row.id) : initial === 'first' && rows.length ? [rows[0].id] : [];\n this.expanded.set(pathId, current);\n }\n if (this.activeSectionId?.startsWith(`${pathId}/`)) {\n const requested = this.activeSectionId.slice(pathId.length + 1).split('/')[0];\n if (rows.some(row => row.id === requested) && !current.includes(requested)) {\n current = [...current, requested];\n this.expanded.set(pathId, current);\n }\n }\n return current;\n }\n\n setExpandedValues(section: ViewSection, context: ViewRowContext,\n values: string | number | readonly (string | number)[] | null | undefined): void {\n this.expanded.set(this.sectionId(section, context), values == null ? [] : Array.isArray(values) ? values.map(String) : [String(values)]);\n }\n expandAll(section: ViewSection, context: ViewRowContext, rows: readonly StructuredDisplayRow[]): void {\n this.expanded.set(this.sectionId(section, context), rows.map(row => row.id));\n }\n collapseAll(section: ViewSection, context: ViewRowContext): void { this.expanded.set(this.sectionId(section, context), []); }\n\n limitedFields(fields: readonly { label: string; node: StructuredNode }[]): readonly { label: string; node: StructuredNode }[] {\n return fields.slice(0, this.maxRows);\n }\n omittedFields(fields: readonly { label: string; node: StructuredNode }[]): number {\n return Math.max(0, fields.length - this.maxRows);\n }\n\n otherFields(node: StructuredNode, sections: readonly ViewSection[]): readonly { label: string; node: StructuredNode }[] {\n const current = node.kind === 'hcl-block' ? node.body : node;\n const paths = sections.flatMap(section => section.kind === 'fields' && section.path === ''\n ? section.fields.map(field => field.path) : [section.path]);\n if (current.kind === 'object') {\n const consumed = new Set(paths.flatMap(path => {\n const segments = parseRelativePointer(path);\n return segments?.length === 1 ? [segments[0]] : [];\n }));\n return current.entries.filter(entry => !consumed.has(entry.key)).map(entry => ({ label: entry.key, node: entry.value }));\n }\n if (current.kind === 'hcl-body') {\n const attributes = new Set(paths.flatMap(path => {\n const segments = parseRelativePointer(path);\n return segments?.length === 2 && segments[0] === 'attributes' ? [segments[1]] : [];\n }));\n const blocks = new Set(sections.flatMap(section => {\n if (section.kind === 'blocks' || (section.kind === 'table' && section.rows === 'blocks')) {\n return section.blockType ? [section.blockType] : [];\n }\n return [];\n }));\n return current.members.filter(member => member.kind === 'hcl-attribute' ? !attributes.has(member.name) : !blocks.has(member.blockType))\n .map(member => ({ label: member.kind === 'hcl-attribute' ? member.name : `${member.blockType} ${member.labels.join(' ')}`, node: member }));\n }\n return [];\n }\n\n fieldOther(node: StructuredNode, section: ViewSection): readonly { label: string; node: StructuredNode }[] {\n if (section.kind !== 'fields') return [];\n // A root fields section shares its value with the top-level disclosure.\n // Show root leftovers once there; nested row sections retain their own details.\n if (node === this.document?.root) return [];\n return this.otherFields(node, section.fields.map((field, index) => ({ kind: 'value',\n id: `${section.id}-${index}`, title: field.label, path: field.path })));\n }\n\n tableOtherFields(node: StructuredNode, section: ViewSection): readonly { label: string; node: StructuredNode }[] {\n if (section.kind !== 'table') return [];\n return this.otherFields(node, section.columns.map((column, index) => ({ kind: 'value',\n id: `${section.id}-${index}`, title: column.label, path: column.path })));\n }\n\n tableFallbackNode(node: StructuredNode): boolean {\n return node.kind !== 'object' && node.kind !== 'hcl-body' && node.kind !== 'hcl-block';\n }\n}\n","<article class=\"sd-viewer\" aria-label=\"Structured data viewer\">\n @if (diagnostics.length) {\n <div class=\"sd-diagnostics\" role=\"alert\">\n @for (item of diagnostics; track $index) { <p>{{item.message}}</p> }\n </div>\n }\n\n @if (document; as parsed) {\n @if (titleText(); as title) { <h2>{{title}}</h2> }\n @if (rootContext; as root) {\n @if (sections.length) {\n <ng-container *ngTemplateOutlet=\"sectionList; context: { $implicit: root, sectionItems: sections }\" />\n @let remaining = otherFields(root.node, sections);\n @if (remaining.length) {\n <section class=\"sd-section\" aria-label=\"Other fields\">\n <h3>Other fields</h3>\n @for (field of limitedFields(remaining); track $index) {\n <div class=\"sd-field\"><strong>{{field.label}}</strong>\n <sneat-structured-node [node]=\"field.node\" [maxRows]=\"maxRows\" [maxDepth]=\"maxDepth\"\n (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n </div>\n }\n @if (omittedFields(remaining); as omitted) { <p class=\"sd-limit\">{{omitted}} more fields; inspect Raw source</p> }\n </section>\n }\n } @else {\n <sneat-structured-node [node]=\"parsed.root\" [maxRows]=\"maxRows\" [maxDepth]=\"maxDepth\"\n (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n }\n }\n } @else if (showRawFallback && rawFallbackText) {\n <pre class=\"sd-raw\">{{rawFallbackText}}</pre>\n }\n</article>\n\n<ng-template #sectionList let-context let-sectionItems=\"sectionItems\">\n @for (section of sectionItems; track section.id) {\n <section class=\"sd-section\" [id]=\"sectionId(section, context)\" tabindex=\"-1\">\n <h3><button type=\"button\" class=\"sd-section-link\" (click)=\"selectSection(sectionId(section, context))\">{{section.title}}</button></h3>\n @switch (section.kind) {\n @case ('value') {\n @if (selected(context, section.path); as node) {\n <sneat-structured-node [node]=\"node\" [scalarListLayout]=\"section.scalarListLayout || 'inline'\"\n [maxRows]=\"maxRows\" [maxDepth]=\"maxDepth\" (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n } @else { <span class=\"sd-missing\">Missing</span> }\n }\n @case ('fields') {\n @if (selected(context, section.path); as node) {\n <dl class=\"sd-fields\">\n @for (field of section.fields; track field.label) {\n <dt>{{field.label}}</dt>\n <dd>\n @if (selected({node: node}, field.path); as fieldNode) {\n <sneat-structured-node [node]=\"fieldNode\" [scalarListLayout]=\"field.scalarListLayout || 'inline'\"\n [maxRows]=\"maxRows\" [maxDepth]=\"maxDepth\" (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n } @else { <span class=\"sd-missing\">Missing</span> }\n </dd>\n }\n </dl>\n @let other = fieldOther(node, section);\n @if (other.length) {\n <details><summary>Other fields ({{other.length}})</summary>\n @for (field of limitedFields(other); track $index) {\n <div class=\"sd-field\"><strong>{{field.label}}</strong>\n <sneat-structured-node [node]=\"field.node\" [maxRows]=\"maxRows\" [maxDepth]=\"maxDepth\"\n (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n </div>\n }\n @if (omittedFields(other); as omitted) { <p class=\"sd-limit\">{{omitted}} more fields; inspect Raw source</p> }\n </details>\n }\n } @else { <span class=\"sd-missing\">Missing</span> }\n }\n @case ('table') {\n @let rows = rowsFor(section, context);\n @if (rows.length) {\n <p-table [value]=\"rows\" [scrollable]=\"true\" styleClass=\"sd-table\">\n <ng-template #header><tr>\n @for (column of section.columns; track column.label) { <th scope=\"col\">{{column.label}}</th> }\n <th scope=\"col\">Other fields</th>\n </tr></ng-template>\n <ng-template #body let-row><tr [id]=\"row.pathId\" tabindex=\"-1\">\n @for (column of section.columns; track column.label) {\n <td>\n @if (selected(row, column.path); as cell) {\n <sneat-structured-node [node]=\"cell\" [maxRows]=\"maxRows\" [maxDepth]=\"maxDepth\"\n (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n } @else { <span class=\"sd-missing\">Missing</span> }\n </td>\n }\n <td>\n @let other = tableOtherFields(row.node, section);\n @if (other.length) {\n <details><summary>Other fields ({{other.length}})</summary>\n @for (field of limitedFields(other); track $index) {\n <div class=\"sd-field\"><strong>{{field.label}}</strong>\n <sneat-structured-node [node]=\"field.node\" [maxRows]=\"maxRows\" [maxDepth]=\"maxDepth\"\n (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n </div>\n }\n @if (omittedFields(other); as omitted) { <p class=\"sd-limit\">{{omitted}} more fields; inspect Raw source</p> }\n </details>\n } @else if (tableFallbackNode(row.node)) {\n <sneat-structured-node [node]=\"row.node\" [maxRows]=\"maxRows\" [maxDepth]=\"maxDepth\"\n (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n } @else { <span class=\"sd-empty\">None</span> }\n </td>\n </tr></ng-template>\n </p-table>\n @if (rowLimitNotice(section, context); as notice) { <p class=\"sd-limit\">{{notice}}</p> }\n } @else { <span class=\"sd-empty\">No rows</span> }\n }\n @case ('entries') {\n <ng-container *ngTemplateOutlet=\"collection; context: { $implicit: section, parent: context }\" />\n }\n @case ('blocks') {\n <ng-container *ngTemplateOutlet=\"collection; context: { $implicit: section, parent: context }\" />\n }\n }\n </section>\n }\n</ng-template>\n\n<ng-template #collection let-section let-parent=\"parent\">\n @let rows = rowsFor(section, parent);\n @if (rows.length) {\n <div class=\"sd-controls\" [attr.aria-label]=\"section.title + ' controls'\">\n @if (section.allowLayoutSwitch) {\n <button pButton type=\"button\" [attr.aria-pressed]=\"layoutFor(section, parent) === 'accordion'\"\n (click)=\"setLayout(section, parent, 'accordion')\">Accordion</button>\n <button pButton type=\"button\" [attr.aria-pressed]=\"layoutFor(section, parent) === 'list'\"\n (click)=\"setLayout(section, parent, 'list')\">List</button>\n }\n @if (layoutFor(section, parent) === 'accordion') {\n <p-button label=\"Expand all\" [text]=\"true\" (onClick)=\"expandAll(section, parent, rows)\" />\n <p-button label=\"Collapse all\" [text]=\"true\" (onClick)=\"collapseAll(section, parent)\" />\n }\n </div>\n @if (layoutFor(section, parent) === 'accordion') {\n <p-accordion [multiple]=\"true\" [value]=\"expandedValues(section, parent, rows)\"\n (valueChange)=\"setExpandedValues(section, parent, $event)\">\n @for (row of rows; track row.id) {\n <p-accordion-panel [value]=\"row.id\" [id]=\"row.pathId\" tabindex=\"-1\">\n <p-accordion-header>\n <span>{{row.title}}</span>\n </p-accordion-header>\n <p-accordion-content>\n <button type=\"button\" class=\"sd-section-link\" (click)=\"rowActivated(row)\"\n [attr.aria-label]=\"'Link to ' + row.title\">Link to section</button>\n @if (entrySections(section).length) {\n <ng-container *ngTemplateOutlet=\"sectionList; context: { $implicit: row, sectionItems: entrySections(section) }\" />\n @let other = otherFields(row.node, entrySections(section));\n @if (other.length) {\n <details><summary>Other fields ({{other.length}})</summary>\n @for (field of limitedFields(other); track $index) {\n <div class=\"sd-field\"><strong>{{field.label}}</strong>\n <sneat-structured-node [node]=\"field.node\" [maxRows]=\"maxRows\" [maxDepth]=\"maxDepth\"\n (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n </div>\n }\n @if (omittedFields(other); as omitted) { <p class=\"sd-limit\">{{omitted}} more fields; inspect Raw source</p> }\n </details>\n }\n } @else {\n <sneat-structured-node [node]=\"row.node\" [maxRows]=\"maxRows\" [maxDepth]=\"maxDepth\"\n (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n }\n </p-accordion-content>\n </p-accordion-panel>\n }\n </p-accordion>\n } @else {\n <div class=\"sd-full-list\">\n @for (row of rows; track row.id) {\n <article class=\"sd-entry\" [id]=\"row.pathId\" tabindex=\"-1\">\n <h4><button type=\"button\" class=\"sd-section-link\" (click)=\"rowActivated(row)\">{{row.title}}</button></h4>\n @if (entrySections(section).length) {\n <ng-container *ngTemplateOutlet=\"sectionList; context: { $implicit: row, sectionItems: entrySections(section) }\" />\n @let other = otherFields(row.node, entrySections(section));\n @if (other.length) {\n <details><summary>Other fields ({{other.length}})</summary>\n @for (field of limitedFields(other); track $index) {\n <div class=\"sd-field\"><strong>{{field.label}}</strong>\n <sneat-structured-node [node]=\"field.node\" [maxRows]=\"maxRows\" [maxDepth]=\"maxDepth\"\n (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n </div>\n }\n @if (omittedFields(other); as omitted) { <p class=\"sd-limit\">{{omitted}} more fields; inspect Raw source</p> }\n </details>\n }\n } @else {\n <sneat-structured-node [node]=\"row.node\" [maxRows]=\"maxRows\" [maxDepth]=\"maxDepth\"\n (sourcePositionSelected)=\"sourcePositionSelected.emit($event)\" />\n }\n </article>\n }\n </div>\n }\n @if (rowLimitNotice(section, parent); as notice) { <p class=\"sd-limit\">{{notice}}</p> }\n } @else { <span class=\"sd-empty\">No entries</span> }\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sneat/structured-data",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
|
|
3
|
+
"version": "0.27.29",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"access": "public"
|
|
6
|
+
},
|
|
7
|
+
"peerDependencies": {
|
|
8
|
+
"@angular/cdk": ">=22.0.0 <23.0.0",
|
|
9
|
+
"@angular/common": ">=22.0.0 <23.0.0",
|
|
10
|
+
"@angular/core": ">=22.0.0 <23.0.0",
|
|
11
|
+
"primeng": ">=22.0.0 <23.0.0"
|
|
12
|
+
},
|
|
13
|
+
"sideEffects": false,
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"jsonc-parser": "3.3.1",
|
|
16
|
+
"tslib": "2.8.1",
|
|
17
|
+
"yaml": "2.9.1"
|
|
18
|
+
},
|
|
19
|
+
"module": "fesm2022/sneat-structured-data.mjs",
|
|
20
|
+
"typings": "types/sneat-structured-data.d.ts",
|
|
21
|
+
"exports": {
|
|
22
|
+
"./package.json": {
|
|
23
|
+
"default": "./package.json"
|
|
24
|
+
},
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./types/sneat-structured-data.d.ts",
|
|
27
|
+
"default": "./fesm2022/sneat-structured-data.mjs"
|
|
28
|
+
},
|
|
29
|
+
"./core": {
|
|
30
|
+
"types": "./types/sneat-structured-data-core.d.ts",
|
|
31
|
+
"default": "./fesm2022/sneat-structured-data-core.mjs"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"type": "module"
|
|
6
35
|
}
|