@oml/markdown 0.14.16 → 0.15.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.
@@ -1,4 +1,4 @@
1
1
  import type { MarkdownFrontMatter } from './md-types.js';
2
2
  export declare function stripLeadingFrontMatter(markdown: string): string;
3
3
  export declare function extractLeadingFrontMatter(markdown: string): MarkdownFrontMatter | undefined;
4
- export declare function extractContextIri(frontMatterRaw: string): string | undefined;
4
+ export declare function extractOntology(frontMatterRaw: string): string | undefined;
@@ -18,7 +18,7 @@ export function extractLeadingFrontMatter(markdown) {
18
18
  const yamlData = parseYamlMap(yamlBody);
19
19
  return {
20
20
  raw: yamlMatch[1],
21
- contextOntologyIri: extractContextIriFromData(yamlData) ?? extractContextIri(yamlMatch[1]),
21
+ ontology: extractOntologyFromData(yamlData) ?? extractOntology(yamlMatch[1]),
22
22
  data: yamlData,
23
23
  };
24
24
  }
@@ -26,28 +26,23 @@ export function extractLeadingFrontMatter(markdown) {
26
26
  if (tomlMatch) {
27
27
  return {
28
28
  raw: tomlMatch[1],
29
- contextOntologyIri: extractContextIri(tomlMatch[1])
29
+ ontology: extractOntology(tomlMatch[1])
30
30
  };
31
31
  }
32
32
  return undefined;
33
33
  }
34
- export function extractContextIri(frontMatterRaw) {
35
- const match = /^ontologyIri\s*:\s*(.+)$/m.exec(frontMatterRaw)
36
- ?? /^ontology\s*:\s*(.+)$/m.exec(frontMatterRaw);
34
+ export function extractOntology(frontMatterRaw) {
35
+ const match = /^ontology\s*:\s*(.+)$/m.exec(frontMatterRaw);
37
36
  if (!match) {
38
37
  return undefined;
39
38
  }
40
39
  return match[1].trim().replace(/^['"]|['"]$/g, '');
41
40
  }
42
- function extractContextIriFromData(data) {
41
+ function extractOntologyFromData(data) {
43
42
  if (!data) {
44
43
  return undefined;
45
44
  }
46
- const value = typeof data.ontologyIri === 'string'
47
- ? data.ontologyIri
48
- : typeof data.ontology === 'string'
49
- ? data.ontology
50
- : undefined;
45
+ const value = typeof data.ontology === 'string' ? data.ontology : undefined;
51
46
  return typeof value === 'string' ? value : undefined;
52
47
  }
53
48
  //# sourceMappingURL=md-frontmatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"md-frontmatter.js","sourceRoot":"","sources":["../../src/md/md-frontmatter.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACpD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACtB,CAAC;IACD,OAAO,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAgB;IACtD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,oDAAoD,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxF,IAAI,SAAS,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;aACxB,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;aAC9B,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACxC,OAAO;YACH,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;YACjB,kBAAkB,EAAE,yBAAyB,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1F,IAAI,EAAE,QAAQ;SACjB,CAAC;IACN,CAAC;IACD,MAAM,SAAS,GAAG,0DAA0D,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9F,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO;YACH,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;YACjB,kBAAkB,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACtD,CAAC;IACN,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,cAAsB;IACpD,MAAM,KAAK,GAAG,2BAA2B,CAAC,IAAI,CAAC,cAAc,CAAC;WACvD,wBAAwB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAyC;IACxE,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;QAC9C,CAAC,CAAC,IAAI,CAAC,WAAW;QAClB,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;YAC/B,CAAC,CAAC,IAAI,CAAC,QAAQ;YACf,CAAC,CAAC,SAAS,CAAC;IACpB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"md-frontmatter.js","sourceRoot":"","sources":["../../src/md/md-frontmatter.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACpD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACtB,CAAC;IACD,OAAO,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAgB;IACtD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,oDAAoD,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxF,IAAI,SAAS,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;aACxB,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;aAC9B,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACxC,OAAO;YACH,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;YACjB,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC5E,IAAI,EAAE,QAAQ;SACjB,CAAC;IACN,CAAC;IACD,MAAM,SAAS,GAAG,0DAA0D,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9F,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO;YACH,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;YACjB,QAAQ,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC1C,CAAC;IACN,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,cAAsB;IAClD,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAyC;IACtE,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC"}
@@ -3,6 +3,7 @@ import MarkdownIt from 'markdown-it';
3
3
  import { displayLabelFromIri } from '../renderers/renderer.js';
4
4
  import { extractLeadingFrontMatter, stripLeadingFrontMatter } from './md-frontmatter.js';
5
5
  import { parseYamlMap } from './md-yaml.js';
6
+ import { interpolateTemplateBody } from '../template/engine.js';
6
7
  export class MarkdownPreviewRuntime {
7
8
  constructor(handlers) {
8
9
  this.handlers = handlers;
@@ -16,14 +17,17 @@ export class MarkdownPreviewRuntime {
16
17
  prepare(markdown) {
17
18
  const frontMatter = extractLeadingFrontMatter(markdown);
18
19
  const stripped = stripLeadingFrontMatter(markdown);
19
- const codeBlocks = this.parseCodeBlocks(stripped);
20
+ const body = frontMatter?.data && Object.keys(frontMatter.data).length > 0
21
+ ? interpolateTemplateBody(stripped, frontMatter.data)
22
+ : stripped;
23
+ const codeBlocks = this.parseCodeBlocks(body);
20
24
  const executableBlocks = this.resolveExecutableBlocks(codeBlocks);
21
- const renderedHtml = this.renderer.render(stripped);
25
+ const renderedHtml = this.renderer.render(body);
22
26
  return {
23
- markdown: stripped,
27
+ markdown: body,
24
28
  renderedHtml,
25
29
  frontMatter,
26
- contextOntologyIri: frontMatter?.contextOntologyIri,
30
+ ontology: frontMatter?.ontology,
27
31
  codeBlocks,
28
32
  executableBlocks
29
33
  };
@@ -41,7 +45,7 @@ export class MarkdownPreviewRuntime {
41
45
  const lineEnd = token.map?.[1] ?? lineStart;
42
46
  const parsed = parseBlockOptions(token.content);
43
47
  blocks.push({
44
- id: buildBlockId(lineStart, lineEnd, language, parsed.content),
48
+ id: buildBlockId(language, parsed.content),
45
49
  language,
46
50
  meta,
47
51
  content: parsed.content,
@@ -128,8 +132,8 @@ function parseMeta(info) {
128
132
  }
129
133
  return trimmed.slice(index + 1).trim() || undefined;
130
134
  }
131
- function buildBlockId(lineStart, lineEnd, language, content) {
132
- return `block-${lineStart}-${lineEnd}-${hash32(`${language}|${content}`)}`;
135
+ function buildBlockId(language, content) {
136
+ return `block-${language}-${hash32(`${language}|${content}`)}`;
133
137
  }
134
138
  function hash32(input) {
135
139
  let hash = 2166136261;
@@ -1 +1 @@
1
- {"version":3,"file":"md-runtime.js","sourceRoot":"","sources":["../../src/md/md-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"md-runtime.js","sourceRoot":"","sources":["../../src/md/md-runtime.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ export interface ParsedCodeBlock {
9
9
  }
10
10
  export interface MarkdownFrontMatter {
11
11
  raw: string;
12
- contextOntologyIri?: string;
12
+ ontology?: string;
13
13
  data?: Record<string, unknown>;
14
14
  }
15
15
  export interface PreparedCodeBlock {
@@ -20,7 +20,7 @@ export interface PreparedMarkdownDocument {
20
20
  markdown: string;
21
21
  renderedHtml: string;
22
22
  frontMatter?: MarkdownFrontMatter;
23
- contextOntologyIri?: string;
23
+ ontology?: string;
24
24
  codeBlocks: ParsedCodeBlock[];
25
25
  executableBlocks: PreparedCodeBlock[];
26
26
  }
@@ -6,51 +6,175 @@ export function bindTemplateParameters(template, context, explicitArgs = {}) {
6
6
  for (const parameter of parameters) {
7
7
  const explicit = explicitArgs[parameter.id];
8
8
  if (explicit !== undefined) {
9
- values[parameter.id] = explicit;
9
+ values[parameter.id] = coerceParameterValue(parameter, explicit);
10
10
  continue;
11
11
  }
12
- const bound = resolveValueFromContext(parameter, context);
13
- if (bound !== undefined) {
14
- values[parameter.id] = bound;
15
- continue;
16
- }
17
- if (parameter.defaultValue !== undefined) {
18
- values[parameter.id] = parameter.defaultValue;
12
+ const defaultValue = resolveTemplateDefaultValue(parameter.defaultValue, context);
13
+ if (defaultValue !== undefined) {
14
+ values[parameter.id] = coerceParameterValue(parameter, defaultValue);
19
15
  continue;
20
16
  }
21
17
  if (parameter.required) {
22
18
  missingRequired.push(parameter.id);
19
+ continue;
23
20
  }
21
+ values[parameter.id] = naturalDefaultValue(parameter.type);
24
22
  }
25
23
  return { values, missingRequired };
26
24
  }
27
- function resolveValueFromContext(parameter, context) {
28
- switch (parameter.from) {
29
- case 'context.member':
30
- return context.focus?.memberIri;
31
- case 'context.ontology':
32
- return context.model?.ontologyIri;
33
- case 'context.modelUri':
34
- return context.model?.modelUri;
35
- case 'context.selection[*]':
36
- return context.selection?.iris ?? [];
37
- default:
38
- return resolveSelectionIndexedBinding(parameter.from, context);
39
- }
40
- }
41
- function resolveSelectionIndexedBinding(source, context) {
42
- if (!source || !source.startsWith('context.selection[')) {
25
+ function resolveTemplateDefaultValue(value, context) {
26
+ if (value === undefined) {
43
27
  return undefined;
44
28
  }
45
- const match = /^context\.selection\[(\d+)]$/.exec(source);
46
- if (!match) {
47
- return undefined;
29
+ if (typeof value !== 'string') {
30
+ return value;
48
31
  }
49
- const index = Number.parseInt(match[1] ?? '', 10);
50
- if (!Number.isFinite(index) || index < 0) {
51
- return undefined;
32
+ return interpolateContextExpression(value, context);
33
+ }
34
+ function interpolateContextExpression(source, context) {
35
+ let unresolved = false;
36
+ const output = source.replace(/\$\{context\.([^}]+)\}/g, (_match, token) => {
37
+ const resolved = resolveContextToken(token.trim(), context);
38
+ if (resolved === undefined) {
39
+ unresolved = true;
40
+ return '';
41
+ }
42
+ return resolved;
43
+ });
44
+ return unresolved ? undefined : output;
45
+ }
46
+ function resolveContextToken(token, context) {
47
+ const indexedSelection = /^selection\[(\d+)]$/.exec(token);
48
+ if (indexedSelection) {
49
+ const index = Number.parseInt(indexedSelection[1] ?? '', 10);
50
+ if (!Number.isFinite(index) || index < 0) {
51
+ return undefined;
52
+ }
53
+ const selection = context.selection?.iris ?? [];
54
+ const value = selection[index];
55
+ return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;
56
+ }
57
+ const key = token;
58
+ const vars = context.vars ?? {};
59
+ const direct = vars[key];
60
+ if (typeof direct === 'string') {
61
+ return direct;
62
+ }
63
+ if (typeof direct === 'number' || typeof direct === 'boolean') {
64
+ return String(direct);
65
+ }
66
+ if (key === 'ontology') {
67
+ return context.model?.ontologyIri?.trim() || undefined;
68
+ }
69
+ if (key === 'member') {
70
+ return context.focus?.memberIri?.trim() || undefined;
71
+ }
72
+ if (key === 'selection') {
73
+ const selection = context.selection?.iris ?? [];
74
+ return selection.join(', ');
75
+ }
76
+ return undefined;
77
+ }
78
+ function coerceParameterValue(parameter, value) {
79
+ switch (parameter.type) {
80
+ case 'string':
81
+ case 'iri':
82
+ return coerceString(parameter, value);
83
+ case 'number':
84
+ return coerceNumber(parameter, value);
85
+ case 'boolean':
86
+ return coerceBoolean(parameter, value);
87
+ case 'iri[]':
88
+ return coerceIriArray(parameter, value);
89
+ case 'json':
90
+ return coerceJson(parameter, value);
91
+ }
92
+ }
93
+ function coerceString(parameter, value) {
94
+ if (typeof value === 'string') {
95
+ return value;
96
+ }
97
+ if (typeof value === 'number' || typeof value === 'boolean') {
98
+ return String(value);
99
+ }
100
+ throw new Error(`Template parameter '${parameter.id}' must be a string.`);
101
+ }
102
+ function coerceNumber(parameter, value) {
103
+ if (typeof value === 'number' && Number.isFinite(value)) {
104
+ return value;
105
+ }
106
+ if (typeof value === 'string') {
107
+ const parsed = Number(value.trim());
108
+ if (Number.isFinite(parsed)) {
109
+ return parsed;
110
+ }
111
+ }
112
+ throw new Error(`Template parameter '${parameter.id}' must be a number.`);
113
+ }
114
+ function coerceBoolean(parameter, value) {
115
+ if (typeof value === 'boolean') {
116
+ return value;
117
+ }
118
+ if (typeof value === 'string') {
119
+ const normalized = value.trim().toLowerCase();
120
+ if (normalized === 'true') {
121
+ return true;
122
+ }
123
+ if (normalized === 'false') {
124
+ return false;
125
+ }
126
+ }
127
+ throw new Error(`Template parameter '${parameter.id}' must be a boolean.`);
128
+ }
129
+ function coerceIriArray(parameter, value) {
130
+ if (Array.isArray(value) && value.every((entry) => typeof entry === 'string')) {
131
+ return value;
132
+ }
133
+ if (typeof value === 'string') {
134
+ const normalized = value.trim();
135
+ if (!normalized) {
136
+ return [];
137
+ }
138
+ return normalized.split(',').map((entry) => entry.trim()).filter((entry) => entry.length > 0);
139
+ }
140
+ throw new Error(`Template parameter '${parameter.id}' must be an array of strings.`);
141
+ }
142
+ function coerceJson(parameter, value) {
143
+ if (value === null || typeof value === 'object') {
144
+ return value;
145
+ }
146
+ if (typeof value === 'string') {
147
+ try {
148
+ const parsed = JSON.parse(value);
149
+ if (parsed === null
150
+ || typeof parsed === 'string'
151
+ || typeof parsed === 'number'
152
+ || typeof parsed === 'boolean'
153
+ || (Array.isArray(parsed) && parsed.every((entry) => typeof entry === 'string'))
154
+ || (typeof parsed === 'object' && parsed !== null)) {
155
+ return parsed;
156
+ }
157
+ throw new Error('unsupported-json');
158
+ }
159
+ catch {
160
+ throw new Error(`Template parameter '${parameter.id}' must be valid JSON.`);
161
+ }
162
+ }
163
+ throw new Error(`Template parameter '${parameter.id}' must be JSON.`);
164
+ }
165
+ function naturalDefaultValue(type) {
166
+ switch (type) {
167
+ case 'number':
168
+ return 0;
169
+ case 'boolean':
170
+ return false;
171
+ case 'iri[]':
172
+ return [];
173
+ case 'json':
174
+ return {};
175
+ case 'string':
176
+ case 'iri':
177
+ return '';
52
178
  }
53
- const iris = context.selection?.iris ?? [];
54
- return iris[index];
55
179
  }
56
180
  //# sourceMappingURL=binder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"binder.js","sourceRoot":"","sources":["../../src/template/binder.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAIrD,MAAM,UAAU,sBAAsB,CAClC,QAA4B,EAC5B,OAAkC,EAClC,eAAwD,EAAE;IAE1D,MAAM,MAAM,GAAkC,EAAE,CAAC;IACjD,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;IAC7C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;YAChC,SAAS;QACb,CAAC;QACD,MAAM,KAAK,GAAG,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;YAC7B,SAAS;QACb,CAAC;QACD,IAAI,SAAS,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC;YAC9C,SAAS;QACb,CAAC;QACD,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACrB,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,uBAAuB,CAC5B,SAAsC,EACtC,OAAkC;IAElC,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,gBAAgB;YACjB,OAAO,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC;QACpC,KAAK,kBAAkB;YACnB,OAAO,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC;QACtC,KAAK,kBAAkB;YACnB,OAAO,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;QACnC,KAAK,sBAAsB;YACvB,OAAO,OAAO,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC;QACzC;YACI,OAAO,8BAA8B,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;AACL,CAAC;AAED,SAAS,8BAA8B,CACnC,MAA2C,EAC3C,OAAkC;IAElC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAG,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC;IAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"binder.js","sourceRoot":"","sources":["../../src/template/binder.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
- import type { TemplateBindingSource, TemplateValue } from './types.js';
1
+ import type { TemplateValue } from './types.js';
2
2
  export interface TemplateComposeDirective {
3
3
  id: string;
4
4
  args: Record<string, TemplateValue>;
5
- bind: Record<string, TemplateBindingSource>;
6
5
  }
7
6
  export declare function parseTemplateComposeDirective(source: string): TemplateComposeDirective | undefined;
@@ -2,37 +2,26 @@
2
2
  import { parse } from 'yaml';
3
3
  export function parseTemplateComposeDirective(source) {
4
4
  const normalized = source.replace(/^\uFEFF/, '');
5
- const frontMatterMatch = /^(---[ \t]*\r?\n[\s\S]*?\r?\n---[ \t]*)([\s\S]*)$/.exec(normalized);
6
- if (!frontMatterMatch) {
7
- return undefined;
8
- }
9
- const trailing = frontMatterMatch[2] ?? '';
10
- if (trailing.trim().length > 0) {
11
- return undefined;
12
- }
13
- const yamlBody = frontMatterMatch[1]
14
- .replace(/^---[ \t]*\r?\n/, '')
15
- .replace(/\r?\n---[ \t]*$/, '');
16
- const parsed = parse(yamlBody);
5
+ const parsed = parse(normalized);
17
6
  if (!isRecord(parsed)) {
18
7
  return undefined;
19
8
  }
20
- const id = normalizeString(parsed.id);
9
+ const id = normalizeString(parsed.template);
21
10
  if (!id) {
22
11
  return undefined;
23
12
  }
24
- const args = parseArgs(parsed.args);
25
- const bind = parseBind(parsed.bind);
26
- return { id, args, bind };
13
+ const args = parseArgs(parsed, ['template']);
14
+ return { id, args };
27
15
  }
28
- function parseArgs(value) {
16
+ function parseArgs(value, excludedKeys = []) {
29
17
  if (!isRecord(value)) {
30
18
  return {};
31
19
  }
20
+ const excluded = new Set(excludedKeys);
32
21
  const args = {};
33
22
  for (const [key, raw] of Object.entries(value)) {
34
23
  const normalizedKey = normalizeString(key);
35
- if (!normalizedKey) {
24
+ if (!normalizedKey || excluded.has(normalizedKey)) {
36
25
  continue;
37
26
  }
38
27
  const converted = toTemplateValue(raw);
@@ -42,21 +31,6 @@ function parseArgs(value) {
42
31
  }
43
32
  return args;
44
33
  }
45
- function parseBind(value) {
46
- if (!isRecord(value)) {
47
- return {};
48
- }
49
- const bind = {};
50
- for (const [key, raw] of Object.entries(value)) {
51
- const normalizedKey = normalizeString(key);
52
- const source = normalizeString(raw);
53
- if (!normalizedKey || !source || !isTemplateBindingSource(source)) {
54
- continue;
55
- }
56
- bind[normalizedKey] = source;
57
- }
58
- return bind;
59
- }
60
34
  function toTemplateValue(value) {
61
35
  if (value === null) {
62
36
  return null;
@@ -72,14 +46,6 @@ function toTemplateValue(value) {
72
46
  }
73
47
  return undefined;
74
48
  }
75
- function isTemplateBindingSource(value) {
76
- return value === 'context.member'
77
- || value === 'context.ontology'
78
- || value === 'context.modelUri'
79
- || value === 'context.selection[*]'
80
- || value === 'user'
81
- || /^context\.selection\[\d+]$/.test(value);
82
- }
83
49
  function normalizeString(value) {
84
50
  if (typeof value !== 'string') {
85
51
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/template/compose.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/template/compose.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAQ7B,MAAM,UAAU,6BAA6B,CAAC,MAAc;IACxD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,EAAE,EAAE,CAAC;QACN,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,eAAyB,EAAE;IAC1D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,IAAI,GAAkC,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,aAAa,IAAI,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAChD,SAAS;QACb,CAAC;QACD,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;QACpC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACvF,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC"}
@@ -105,8 +105,6 @@ function parseTemplateParameters(raw) {
105
105
  continue;
106
106
  }
107
107
  const required = typeof entry.required === 'boolean' ? entry.required : undefined;
108
- const fromValue = typeof entry.from === 'string' ? entry.from.trim() : '';
109
- const from = isSupportedBindingSource(fromValue) ? fromValue : undefined;
110
108
  const description = typeof entry.description === 'string' && entry.description.trim().length > 0
111
109
  ? entry.description.trim()
112
110
  : undefined;
@@ -114,7 +112,6 @@ function parseTemplateParameters(raw) {
114
112
  id,
115
113
  type,
116
114
  required,
117
- from,
118
115
  defaultValue: toTemplateValue(entry.defaultValue),
119
116
  description,
120
117
  });
@@ -129,14 +126,6 @@ function isSupportedParameterType(value) {
129
126
  || value === 'iri[]'
130
127
  || value === 'json';
131
128
  }
132
- function isSupportedBindingSource(value) {
133
- return value === 'context.member'
134
- || value === 'context.ontology'
135
- || value === 'context.modelUri'
136
- || value === 'context.selection[*]'
137
- || /^context\.selection\[\d+]$/.test(value)
138
- || value === 'user';
139
- }
140
129
  function toTemplateValue(value) {
141
130
  if (value === null) {
142
131
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/template/definition.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAQ7F,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,SAAkB;IACvE,MAAM,WAAW,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC;IAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;IAClC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,EAAE,GAAG,qBAAqB,CAAC,OAAO,WAAW,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3F,IAAI,CAAC,EAAE,EAAE,CAAC;QACN,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACnF,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE;QACzB,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,sBAAsB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,uBAAuB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/D,OAAO;QACH,EAAE;QACF,IAAI;QACJ,IAAI;QACJ,SAAS;QACT,UAAU;QACV,IAAI,EAAE,uBAAuB,CAAC,OAAO,CAAC;QACtC,SAAS;KACZ,CAAC;AACN,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACjD,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,OAAO,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,oBAAoB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACzD,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,gBAAgB,CAAC,oBAAoB,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IACxC,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,aAAa,EAAE,CAAC;QAChB,UAAU,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAY;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,SAAS,GAAuB,EAAE,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,SAAS;QACb,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9D,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,uBAAuB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAC9D,SAAS,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;oBAClD,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE;oBAC3B,CAAC,CAAC,SAAS;aAClB,CAAC,CAAC;YACH,SAAS;QACb,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YACpC,SAAS;QACb,CAAC;QACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1E,MAAM,GAAG,GAAG,oBAAoB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,oBAAoB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACjD,SAAS,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS;aAC/E,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAY;IACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAkC,EAAE,CAAC;IACjD,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,SAAS;QACb,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,IAAI,CAAC,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,SAAS;QACb,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAClF,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,MAAM,WAAW,GAAG,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC5F,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE;YAC1B,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC;YACR,EAAE;YACF,IAAI;YACJ,QAAQ;YACR,IAAI;YACJ,YAAY,EAAE,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC;YACjD,WAAW;SACd,CAAC,CAAC;IACP,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAa;IAC3C,OAAO,KAAK,KAAK,KAAK;WACf,KAAK,KAAK,QAAQ;WAClB,KAAK,KAAK,QAAQ;WAClB,KAAK,KAAK,SAAS;WACnB,KAAK,KAAK,OAAO;WACjB,KAAK,KAAK,MAAM,CAAC;AAC5B,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAa;IAC3C,OAAO,KAAK,KAAK,gBAAgB;WAC1B,KAAK,KAAK,kBAAkB;WAC5B,KAAK,KAAK,kBAAkB;WAC5B,KAAK,KAAK,sBAAsB;WAChC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC;WACxC,KAAK,KAAK,MAAM,CAAC;AAC5B,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACvF,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC;QAClB,CAAC;IACL,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACd,CAAC;IACD,OAAO,KAAK;SACP,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;SAC7D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;SAC5C,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,MAAM,CAAC;QAClB,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,CAAC;QACD,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/template/definition.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,9 @@
1
1
  export type TemplateValue = string | number | boolean | null | string[] | Record<string, unknown>;
2
2
  export type TemplateParameterType = 'iri' | 'string' | 'number' | 'boolean' | 'iri[]' | 'json';
3
- export type TemplateBindingSource = 'context.member' | 'context.ontology' | 'context.modelUri' | `context.selection[${number}]` | 'context.selection[*]' | 'user';
4
3
  export interface TemplateParameterDefinition {
5
4
  id: string;
6
5
  type: TemplateParameterType;
7
6
  required?: boolean;
8
- from?: TemplateBindingSource;
9
7
  defaultValue?: TemplateValue;
10
8
  description?: string;
11
9
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@oml/markdown",
3
3
  "description": "Markdown runtime and execution contracts for OML",
4
- "version": "0.14.16",
4
+ "version": "0.15.0",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "node": ">=20.10.0",
@@ -56,7 +56,7 @@
56
56
  "dependencies": {
57
57
  "@antv/x6": "^3.1.6",
58
58
  "@dagrejs/dagre": "^2.0.4",
59
- "@oml/owl": "0.14.16",
59
+ "@oml/owl": "0.15.0",
60
60
  "chart.js": "^4.4.0",
61
61
  "markdown-it": "^14.1.1",
62
62
  "reflect-metadata": "^0.2.2",
@@ -22,7 +22,7 @@ export function extractLeadingFrontMatter(markdown: string): MarkdownFrontMatter
22
22
  const yamlData = parseYamlMap(yamlBody);
23
23
  return {
24
24
  raw: yamlMatch[1],
25
- contextOntologyIri: extractContextIriFromData(yamlData) ?? extractContextIri(yamlMatch[1]),
25
+ ontology: extractOntologyFromData(yamlData) ?? extractOntology(yamlMatch[1]),
26
26
  data: yamlData,
27
27
  };
28
28
  }
@@ -30,29 +30,24 @@ export function extractLeadingFrontMatter(markdown: string): MarkdownFrontMatter
30
30
  if (tomlMatch) {
31
31
  return {
32
32
  raw: tomlMatch[1],
33
- contextOntologyIri: extractContextIri(tomlMatch[1])
33
+ ontology: extractOntology(tomlMatch[1])
34
34
  };
35
35
  }
36
36
  return undefined;
37
37
  }
38
38
 
39
- export function extractContextIri(frontMatterRaw: string): string | undefined {
40
- const match = /^ontologyIri\s*:\s*(.+)$/m.exec(frontMatterRaw)
41
- ?? /^ontology\s*:\s*(.+)$/m.exec(frontMatterRaw);
39
+ export function extractOntology(frontMatterRaw: string): string | undefined {
40
+ const match = /^ontology\s*:\s*(.+)$/m.exec(frontMatterRaw);
42
41
  if (!match) {
43
42
  return undefined;
44
43
  }
45
44
  return match[1].trim().replace(/^['"]|['"]$/g, '');
46
45
  }
47
46
 
48
- function extractContextIriFromData(data: Record<string, unknown> | undefined): string | undefined {
47
+ function extractOntologyFromData(data: Record<string, unknown> | undefined): string | undefined {
49
48
  if (!data) {
50
49
  return undefined;
51
50
  }
52
- const value = typeof data.ontologyIri === 'string'
53
- ? data.ontologyIri
54
- : typeof data.ontology === 'string'
55
- ? data.ontology
56
- : undefined;
51
+ const value = typeof data.ontology === 'string' ? data.ontology : undefined;
57
52
  return typeof value === 'string' ? value : undefined;
58
53
  }
@@ -7,6 +7,8 @@ import { extractLeadingFrontMatter, stripLeadingFrontMatter } from './md-frontma
7
7
  import { MarkdownHandlerRegistry } from './md-registry.js';
8
8
  import { parseYamlMap } from './md-yaml.js';
9
9
  import type { ParsedCodeBlock, PreparedCodeBlock, PreparedMarkdownDocument } from './md-types.js';
10
+ import { interpolateTemplateBody } from '../template/engine.js';
11
+ import type { TemplateValue } from '../template/types.js';
10
12
 
11
13
  export class MarkdownPreviewRuntime {
12
14
  private readonly renderer: MarkdownIt;
@@ -23,15 +25,18 @@ export class MarkdownPreviewRuntime {
23
25
  prepare(markdown: string): PreparedMarkdownDocument {
24
26
  const frontMatter = extractLeadingFrontMatter(markdown);
25
27
  const stripped = stripLeadingFrontMatter(markdown);
26
- const codeBlocks = this.parseCodeBlocks(stripped);
28
+ const body = frontMatter?.data && Object.keys(frontMatter.data).length > 0
29
+ ? interpolateTemplateBody(stripped, frontMatter.data as Record<string, TemplateValue>)
30
+ : stripped;
31
+ const codeBlocks = this.parseCodeBlocks(body);
27
32
  const executableBlocks = this.resolveExecutableBlocks(codeBlocks);
28
- const renderedHtml = this.renderer.render(stripped);
33
+ const renderedHtml = this.renderer.render(body);
29
34
 
30
35
  return {
31
- markdown: stripped,
36
+ markdown: body,
32
37
  renderedHtml,
33
38
  frontMatter,
34
- contextOntologyIri: frontMatter?.contextOntologyIri,
39
+ ontology: frontMatter?.ontology,
35
40
  codeBlocks,
36
41
  executableBlocks
37
42
  };
@@ -51,7 +56,7 @@ export class MarkdownPreviewRuntime {
51
56
  const lineEnd = token.map?.[1] ?? lineStart;
52
57
  const parsed = parseBlockOptions(token.content);
53
58
  blocks.push({
54
- id: buildBlockId(lineStart, lineEnd, language, parsed.content),
59
+ id: buildBlockId(language, parsed.content),
55
60
  language,
56
61
  meta,
57
62
  content: parsed.content,
@@ -151,8 +156,8 @@ function parseMeta(info: string): string | undefined {
151
156
  return trimmed.slice(index + 1).trim() || undefined;
152
157
  }
153
158
 
154
- function buildBlockId(lineStart: number, lineEnd: number, language: string, content: string): string {
155
- return `block-${lineStart}-${lineEnd}-${hash32(`${language}|${content}`)}`;
159
+ function buildBlockId(language: string, content: string): string {
160
+ return `block-${language}-${hash32(`${language}|${content}`)}`;
156
161
  }
157
162
 
158
163
  function hash32(input: string): string {
@@ -12,7 +12,7 @@ export interface ParsedCodeBlock {
12
12
 
13
13
  export interface MarkdownFrontMatter {
14
14
  raw: string;
15
- contextOntologyIri?: string;
15
+ ontology?: string;
16
16
  data?: Record<string, unknown>;
17
17
  }
18
18
 
@@ -25,7 +25,7 @@ export interface PreparedMarkdownDocument {
25
25
  markdown: string;
26
26
  renderedHtml: string;
27
27
  frontMatter?: MarkdownFrontMatter;
28
- contextOntologyIri?: string;
28
+ ontology?: string;
29
29
  codeBlocks: ParsedCodeBlock[];
30
30
  executableBlocks: PreparedCodeBlock[];
31
31
  }
@@ -726,6 +726,8 @@ pre {
726
726
  align-items: center;
727
727
  gap: 0.5rem;
728
728
  margin-left: auto;
729
+ font-family: var(--vscode-font-family, var(--markdown-font-family, -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", system-ui, "Ubuntu", "Droid Sans", sans-serif));
730
+ font-size: 0.85rem;
729
731
  }
730
732
 
731
733
  .oml-md-result .table-pagination {
@@ -745,6 +747,7 @@ pre {
745
747
  background: transparent;
746
748
  color: var(--vscode-foreground);
747
749
  cursor: pointer;
750
+ font-family: inherit;
748
751
  font-size: 1rem;
749
752
  font-weight: 600;
750
753
  line-height: 1;
@@ -764,6 +767,10 @@ pre {
764
767
  .oml-md-result .table-page-label {
765
768
  min-width: 36px;
766
769
  text-align: center;
770
+ font-family: inherit;
771
+ font-size: inherit;
772
+ font-weight: 400;
773
+ line-height: 1.2;
767
774
  }
768
775
 
769
776
  .oml-md-result .graph-canvas-root {
@@ -13,58 +13,188 @@ export function bindTemplateParameters(
13
13
  for (const parameter of parameters) {
14
14
  const explicit = explicitArgs[parameter.id];
15
15
  if (explicit !== undefined) {
16
- values[parameter.id] = explicit;
16
+ values[parameter.id] = coerceParameterValue(parameter, explicit);
17
17
  continue;
18
18
  }
19
- const bound = resolveValueFromContext(parameter, context);
20
- if (bound !== undefined) {
21
- values[parameter.id] = bound;
22
- continue;
23
- }
24
- if (parameter.defaultValue !== undefined) {
25
- values[parameter.id] = parameter.defaultValue;
19
+ const defaultValue = resolveTemplateDefaultValue(parameter.defaultValue, context);
20
+ if (defaultValue !== undefined) {
21
+ values[parameter.id] = coerceParameterValue(parameter, defaultValue);
26
22
  continue;
27
23
  }
28
24
  if (parameter.required) {
29
25
  missingRequired.push(parameter.id);
26
+ continue;
30
27
  }
28
+ values[parameter.id] = naturalDefaultValue(parameter.type);
31
29
  }
32
30
  return { values, missingRequired };
33
31
  }
34
32
 
35
- function resolveValueFromContext(
36
- parameter: TemplateParameterDefinition,
33
+ function resolveTemplateDefaultValue(
34
+ value: TemplateValue | undefined,
37
35
  context: TemplateInvocationContext
38
36
  ): TemplateValue | undefined {
39
- switch (parameter.from) {
40
- case 'context.member':
41
- return context.focus?.memberIri;
42
- case 'context.ontology':
43
- return context.model?.ontologyIri;
44
- case 'context.modelUri':
45
- return context.model?.modelUri;
46
- case 'context.selection[*]':
47
- return context.selection?.iris ?? [];
48
- default:
49
- return resolveSelectionIndexedBinding(parameter.from, context);
37
+ if (value === undefined) {
38
+ return undefined;
39
+ }
40
+ if (typeof value !== 'string') {
41
+ return value;
50
42
  }
43
+ return interpolateContextExpression(value, context);
51
44
  }
52
45
 
53
- function resolveSelectionIndexedBinding(
54
- source: TemplateParameterDefinition['from'],
55
- context: TemplateInvocationContext
56
- ): TemplateValue | undefined {
57
- if (!source || !source.startsWith('context.selection[')) {
58
- return undefined;
46
+ function interpolateContextExpression(source: string, context: TemplateInvocationContext): string | undefined {
47
+ let unresolved = false;
48
+ const output = source.replace(/\$\{context\.([^}]+)\}/g, (_match, token: string) => {
49
+ const resolved = resolveContextToken(token.trim(), context);
50
+ if (resolved === undefined) {
51
+ unresolved = true;
52
+ return '';
53
+ }
54
+ return resolved;
55
+ });
56
+ return unresolved ? undefined : output;
57
+ }
58
+
59
+ function resolveContextToken(token: string, context: TemplateInvocationContext): string | undefined {
60
+ const indexedSelection = /^selection\[(\d+)]$/.exec(token);
61
+ if (indexedSelection) {
62
+ const index = Number.parseInt(indexedSelection[1] ?? '', 10);
63
+ if (!Number.isFinite(index) || index < 0) {
64
+ return undefined;
65
+ }
66
+ const selection = context.selection?.iris ?? [];
67
+ const value = selection[index];
68
+ return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;
59
69
  }
60
- const match = /^context\.selection\[(\d+)]$/.exec(source);
61
- if (!match) {
62
- return undefined;
70
+ const key = token;
71
+ const vars = context.vars ?? {};
72
+ const direct = vars[key];
73
+ if (typeof direct === 'string') {
74
+ return direct;
63
75
  }
64
- const index = Number.parseInt(match[1] ?? '', 10);
65
- if (!Number.isFinite(index) || index < 0) {
66
- return undefined;
76
+ if (typeof direct === 'number' || typeof direct === 'boolean') {
77
+ return String(direct);
78
+ }
79
+ if (key === 'ontology') {
80
+ return context.model?.ontologyIri?.trim() || undefined;
81
+ }
82
+ if (key === 'member') {
83
+ return context.focus?.memberIri?.trim() || undefined;
84
+ }
85
+ if (key === 'selection') {
86
+ const selection = context.selection?.iris ?? [];
87
+ return selection.join(', ');
88
+ }
89
+ return undefined;
90
+ }
91
+
92
+ function coerceParameterValue(parameter: TemplateParameterDefinition, value: TemplateValue): TemplateValue {
93
+ switch (parameter.type) {
94
+ case 'string':
95
+ case 'iri':
96
+ return coerceString(parameter, value);
97
+ case 'number':
98
+ return coerceNumber(parameter, value);
99
+ case 'boolean':
100
+ return coerceBoolean(parameter, value);
101
+ case 'iri[]':
102
+ return coerceIriArray(parameter, value);
103
+ case 'json':
104
+ return coerceJson(parameter, value);
105
+ }
106
+ }
107
+
108
+ function coerceString(parameter: TemplateParameterDefinition, value: TemplateValue): string {
109
+ if (typeof value === 'string') {
110
+ return value;
111
+ }
112
+ if (typeof value === 'number' || typeof value === 'boolean') {
113
+ return String(value);
114
+ }
115
+ throw new Error(`Template parameter '${parameter.id}' must be a string.`);
116
+ }
117
+
118
+ function coerceNumber(parameter: TemplateParameterDefinition, value: TemplateValue): number {
119
+ if (typeof value === 'number' && Number.isFinite(value)) {
120
+ return value;
121
+ }
122
+ if (typeof value === 'string') {
123
+ const parsed = Number(value.trim());
124
+ if (Number.isFinite(parsed)) {
125
+ return parsed;
126
+ }
127
+ }
128
+ throw new Error(`Template parameter '${parameter.id}' must be a number.`);
129
+ }
130
+
131
+ function coerceBoolean(parameter: TemplateParameterDefinition, value: TemplateValue): boolean {
132
+ if (typeof value === 'boolean') {
133
+ return value;
134
+ }
135
+ if (typeof value === 'string') {
136
+ const normalized = value.trim().toLowerCase();
137
+ if (normalized === 'true') {
138
+ return true;
139
+ }
140
+ if (normalized === 'false') {
141
+ return false;
142
+ }
143
+ }
144
+ throw new Error(`Template parameter '${parameter.id}' must be a boolean.`);
145
+ }
146
+
147
+ function coerceIriArray(parameter: TemplateParameterDefinition, value: TemplateValue): string[] {
148
+ if (Array.isArray(value) && value.every((entry) => typeof entry === 'string')) {
149
+ return value;
150
+ }
151
+ if (typeof value === 'string') {
152
+ const normalized = value.trim();
153
+ if (!normalized) {
154
+ return [];
155
+ }
156
+ return normalized.split(',').map((entry) => entry.trim()).filter((entry) => entry.length > 0);
157
+ }
158
+ throw new Error(`Template parameter '${parameter.id}' must be an array of strings.`);
159
+ }
160
+
161
+ function coerceJson(parameter: TemplateParameterDefinition, value: TemplateValue): TemplateValue {
162
+ if (value === null || typeof value === 'object') {
163
+ return value;
164
+ }
165
+ if (typeof value === 'string') {
166
+ try {
167
+ const parsed = JSON.parse(value) as unknown;
168
+ if (
169
+ parsed === null
170
+ || typeof parsed === 'string'
171
+ || typeof parsed === 'number'
172
+ || typeof parsed === 'boolean'
173
+ || (Array.isArray(parsed) && parsed.every((entry) => typeof entry === 'string'))
174
+ || (typeof parsed === 'object' && parsed !== null)
175
+ ) {
176
+ return parsed as TemplateValue;
177
+ }
178
+ throw new Error('unsupported-json');
179
+ } catch {
180
+ throw new Error(`Template parameter '${parameter.id}' must be valid JSON.`);
181
+ }
182
+ }
183
+ throw new Error(`Template parameter '${parameter.id}' must be JSON.`);
184
+ }
185
+
186
+ function naturalDefaultValue(type: TemplateParameterDefinition['type']): TemplateValue {
187
+ switch (type) {
188
+ case 'number':
189
+ return 0;
190
+ case 'boolean':
191
+ return false;
192
+ case 'iri[]':
193
+ return [];
194
+ case 'json':
195
+ return {};
196
+ case 'string':
197
+ case 'iri':
198
+ return '';
67
199
  }
68
- const iris = context.selection?.iris ?? [];
69
- return iris[index];
70
200
  }
@@ -1,48 +1,36 @@
1
1
  // Copyright (c) 2026 Modelware. All rights reserved.
2
2
 
3
3
  import { parse } from 'yaml';
4
- import type { TemplateBindingSource, TemplateValue } from './types.js';
4
+ import type { TemplateValue } from './types.js';
5
5
 
6
6
  export interface TemplateComposeDirective {
7
7
  id: string;
8
8
  args: Record<string, TemplateValue>;
9
- bind: Record<string, TemplateBindingSource>;
10
9
  }
11
10
 
12
11
  export function parseTemplateComposeDirective(source: string): TemplateComposeDirective | undefined {
13
12
  const normalized = source.replace(/^\uFEFF/, '');
14
- const frontMatterMatch = /^(---[ \t]*\r?\n[\s\S]*?\r?\n---[ \t]*)([\s\S]*)$/.exec(normalized);
15
- if (!frontMatterMatch) {
16
- return undefined;
17
- }
18
- const trailing = frontMatterMatch[2] ?? '';
19
- if (trailing.trim().length > 0) {
20
- return undefined;
21
- }
22
- const yamlBody = frontMatterMatch[1]
23
- .replace(/^---[ \t]*\r?\n/, '')
24
- .replace(/\r?\n---[ \t]*$/, '');
25
- const parsed = parse(yamlBody);
13
+ const parsed = parse(normalized);
26
14
  if (!isRecord(parsed)) {
27
15
  return undefined;
28
16
  }
29
- const id = normalizeString(parsed.id);
17
+ const id = normalizeString(parsed.template);
30
18
  if (!id) {
31
19
  return undefined;
32
20
  }
33
- const args = parseArgs(parsed.args);
34
- const bind = parseBind(parsed.bind);
35
- return { id, args, bind };
21
+ const args = parseArgs(parsed, ['template']);
22
+ return { id, args };
36
23
  }
37
24
 
38
- function parseArgs(value: unknown): Record<string, TemplateValue> {
25
+ function parseArgs(value: unknown, excludedKeys: string[] = []): Record<string, TemplateValue> {
39
26
  if (!isRecord(value)) {
40
27
  return {};
41
28
  }
29
+ const excluded = new Set(excludedKeys);
42
30
  const args: Record<string, TemplateValue> = {};
43
31
  for (const [key, raw] of Object.entries(value)) {
44
32
  const normalizedKey = normalizeString(key);
45
- if (!normalizedKey) {
33
+ if (!normalizedKey || excluded.has(normalizedKey)) {
46
34
  continue;
47
35
  }
48
36
  const converted = toTemplateValue(raw);
@@ -53,22 +41,6 @@ function parseArgs(value: unknown): Record<string, TemplateValue> {
53
41
  return args;
54
42
  }
55
43
 
56
- function parseBind(value: unknown): Record<string, TemplateBindingSource> {
57
- if (!isRecord(value)) {
58
- return {};
59
- }
60
- const bind: Record<string, TemplateBindingSource> = {};
61
- for (const [key, raw] of Object.entries(value)) {
62
- const normalizedKey = normalizeString(key);
63
- const source = normalizeString(raw);
64
- if (!normalizedKey || !source || !isTemplateBindingSource(source)) {
65
- continue;
66
- }
67
- bind[normalizedKey] = source;
68
- }
69
- return bind;
70
- }
71
-
72
44
  function toTemplateValue(value: unknown): TemplateValue | undefined {
73
45
  if (value === null) {
74
46
  return null;
@@ -85,15 +57,6 @@ function toTemplateValue(value: unknown): TemplateValue | undefined {
85
57
  return undefined;
86
58
  }
87
59
 
88
- function isTemplateBindingSource(value: string): value is TemplateBindingSource {
89
- return value === 'context.member'
90
- || value === 'context.ontology'
91
- || value === 'context.modelUri'
92
- || value === 'context.selection[*]'
93
- || value === 'user'
94
- || /^context\.selection\[\d+]$/.test(value);
95
- }
96
-
97
60
  function normalizeString(value: unknown): string | undefined {
98
61
  if (typeof value !== 'string') {
99
62
  return undefined;
@@ -117,8 +117,6 @@ function parseTemplateParameters(raw: unknown): TemplateParameterDefinition[] {
117
117
  continue;
118
118
  }
119
119
  const required = typeof entry.required === 'boolean' ? entry.required : undefined;
120
- const fromValue = typeof entry.from === 'string' ? entry.from.trim() : '';
121
- const from = isSupportedBindingSource(fromValue) ? fromValue : undefined;
122
120
  const description = typeof entry.description === 'string' && entry.description.trim().length > 0
123
121
  ? entry.description.trim()
124
122
  : undefined;
@@ -126,7 +124,6 @@ function parseTemplateParameters(raw: unknown): TemplateParameterDefinition[] {
126
124
  id,
127
125
  type,
128
126
  required,
129
- from,
130
127
  defaultValue: toTemplateValue(entry.defaultValue),
131
128
  description,
132
129
  });
@@ -143,15 +140,6 @@ function isSupportedParameterType(value: string): value is TemplateParameterDefi
143
140
  || value === 'json';
144
141
  }
145
142
 
146
- function isSupportedBindingSource(value: string): value is NonNullable<TemplateParameterDefinition['from']> {
147
- return value === 'context.member'
148
- || value === 'context.ontology'
149
- || value === 'context.modelUri'
150
- || value === 'context.selection[*]'
151
- || /^context\.selection\[\d+]$/.test(value)
152
- || value === 'user';
153
- }
154
-
155
143
  function toTemplateValue(value: unknown): TemplateValue | undefined {
156
144
  if (value === null) {
157
145
  return null;
@@ -10,19 +10,10 @@ export type TemplateParameterType =
10
10
  | 'iri[]'
11
11
  | 'json';
12
12
 
13
- export type TemplateBindingSource =
14
- | 'context.member'
15
- | 'context.ontology'
16
- | 'context.modelUri'
17
- | `context.selection[${number}]`
18
- | 'context.selection[*]'
19
- | 'user';
20
-
21
13
  export interface TemplateParameterDefinition {
22
14
  id: string;
23
15
  type: TemplateParameterType;
24
16
  required?: boolean;
25
- from?: TemplateBindingSource;
26
17
  defaultValue?: TemplateValue;
27
18
  description?: string;
28
19
  }