@oml/server 0.14.17 → 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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shacl-index.js","sourceRoot":"","sources":["../../src/rest/shacl-index.ts"],"names":[],"mappings":"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"}
@@ -83,7 +83,7 @@ export async function expandTemplateComposeBlocks(markdown, templateCatalog, con
83
83
  const maxExpansionPasses = 12;
84
84
  let current = markdown;
85
85
  for (let pass = 0; pass < maxExpansionPasses; pass++) {
86
- const composeBlockPattern = /```template[^\n]*\r?\n([\s\S]*?)\r?\n```/g;
86
+ const composeBlockPattern = /```compose[^\n]*\r?\n([\s\S]*?)\r?\n```/g;
87
87
  let replaced = '';
88
88
  let lastIndex = 0;
89
89
  let expandedAny = false;
@@ -102,14 +102,8 @@ export async function expandTemplateComposeBlocks(markdown, templateCatalog, con
102
102
  if (!template) {
103
103
  throw new Error(`No markdown template found for id '${directive.id}' in ${context.sourceMarkdownPath}.`);
104
104
  }
105
- const invocationArgs = { ...directive.args };
106
- for (const [parameterId, source] of Object.entries(directive.bind)) {
107
- const value = resolveTemplateBindingValue(source, context);
108
- if (value !== undefined) {
109
- invocationArgs[parameterId] = value;
110
- }
111
- }
112
- const selection = context.contextMemberIri ? [context.contextMemberIri.trim()] : [];
105
+ const invocationVars = buildComposeInvocationVars(current, context.contextOntologyIri);
106
+ const invocationArgs = resolveComposeDirectiveArgs(directive.args, invocationVars);
113
107
  const invocation = {
114
108
  templateId: template.definition.id,
115
109
  mode: 'compose',
@@ -123,12 +117,7 @@ export async function expandTemplateComposeBlocks(markdown, templateCatalog, con
123
117
  ontologyIri: context.contextOntologyIri,
124
118
  modelUri: context.contextModelUri,
125
119
  },
126
- focus: {
127
- memberIri: context.contextMemberIri,
128
- },
129
- selection: {
130
- iris: selection,
131
- },
120
+ vars: invocationVars,
132
121
  },
133
122
  args: invocationArgs,
134
123
  };
@@ -155,35 +144,59 @@ function selectTemplateDefinition(templateCatalog, templateId) {
155
144
  const candidates = templateCatalog.get(normalized);
156
145
  return candidates?.[0];
157
146
  }
158
- function resolveTemplateBindingValue(source, context) {
159
- const member = context.contextMemberIri?.trim();
160
- const ontology = context.contextOntologyIri?.trim();
161
- const modelUri = context.contextModelUri?.trim();
162
- const selection = member ? [member] : [];
163
- if (source === 'context.member') {
164
- return member || undefined;
147
+ function resolveComposeDirectiveArgs(args, variables) {
148
+ const resolved = {};
149
+ for (const [key, raw] of Object.entries(args)) {
150
+ resolved[key] = resolveComposeArgumentValue(raw, variables);
165
151
  }
166
- if (source === 'context.ontology') {
167
- return ontology || undefined;
168
- }
169
- if (source === 'context.modelUri') {
170
- return modelUri || undefined;
152
+ return resolved;
153
+ }
154
+ function resolveComposeArgumentValue(value, variables) {
155
+ if (typeof value !== 'string') {
156
+ return value;
157
+ }
158
+ return value.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g, (_match, key) => {
159
+ const replacement = variables[key];
160
+ if (replacement === undefined || replacement === null) {
161
+ return '';
162
+ }
163
+ if (Array.isArray(replacement)) {
164
+ return replacement.map((entry) => String(entry)).join(', ');
165
+ }
166
+ if (typeof replacement === 'object') {
167
+ return JSON.stringify(replacement);
168
+ }
169
+ return String(replacement);
170
+ });
171
+ }
172
+ function buildComposeInvocationVars(markdown, contextOntologyIri) {
173
+ const vars = {};
174
+ const frontMatterData = extractLeadingFrontMatter(markdown)?.data;
175
+ if (frontMatterData) {
176
+ for (const [key, raw] of Object.entries(frontMatterData)) {
177
+ const converted = toTemplateValue(raw);
178
+ if (converted !== undefined) {
179
+ vars[key] = converted;
180
+ }
181
+ }
171
182
  }
172
- if (source === 'context.selection[*]') {
173
- return selection;
183
+ vars.ontology = contextOntologyIri?.trim() || (typeof vars.ontology === 'string' ? vars.ontology.trim() : '');
184
+ return vars;
185
+ }
186
+ function toTemplateValue(value) {
187
+ if (value === null) {
188
+ return null;
174
189
  }
175
- if (source === 'user') {
176
- return undefined;
190
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
191
+ return value;
177
192
  }
178
- const indexedSelection = /^context\.selection\[(\d+)]$/.exec(source);
179
- if (!indexedSelection) {
180
- return undefined;
193
+ if (Array.isArray(value)) {
194
+ return value.every((entry) => typeof entry === 'string') ? value : undefined;
181
195
  }
182
- const index = Number.parseInt(indexedSelection[1] ?? '', 10);
183
- if (!Number.isFinite(index) || index < 0 || index >= selection.length) {
184
- return undefined;
196
+ if (isRecord(value)) {
197
+ return value;
185
198
  }
186
- return selection[index];
199
+ return undefined;
187
200
  }
188
201
  function normalizeTemplateId(value) {
189
202
  let normalized = value.trim();
@@ -193,6 +206,9 @@ function normalizeTemplateId(value) {
193
206
  }
194
207
  return normalized.replace(/^<|>$/g, '');
195
208
  }
209
+ function isRecord(value) {
210
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
211
+ }
196
212
  function absolutizeTemplateHrefValues(markdown, templateSourcePath, referenceMarkdownPath, workspaceRoot) {
197
213
  const templateDir = path.dirname(templateSourcePath);
198
214
  return markdown.replace(/(\bhref\s*:\s*)(["']?)([^"'\r\n]+)\2/g, (_m, prefix, quote, raw) => {
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/rest/template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/rest/template.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACH,yBAAyB,EACzB,6BAA6B,EAC7B,uBAAuB,EACvB,cAAc,GAIjB,MAAM,eAAe,CAAC;AAevB,MAAM,UAAU,sBAAsB,CAAC,OAAe;IAClD,MAAM,WAAW,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAChG,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAyC,EAAE,GAAW;IACpF,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAyB;IACjE,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY,EAAE,SAAiB;IACtE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAChF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACtB,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9D,SAAS;YACb,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;YAC/D,SAAS;QACb,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC7E,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,aAAqB;IAC5D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkC,CAAC;IACvD,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACvE,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;QACrD,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,SAAS;QACb,CAAC;QACD,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC;IACD,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1F,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7F,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO,SAAS,GAAG,QAAQ,CAAC;YAChC,CAAC;YACD,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CACxB,KAA0C,EAC1C,UAAkB,EAClB,UAA8B;IAE9B,MAAM,EAAE,GAAG,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE,EAAE,CAAC;QACN,OAAO;IACX,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,GAAG,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC7C,QAAgB,EAChB,eAA4D,EAC5D,OAA8B;IAE9B,MAAM,kBAAkB,GAAG,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAG,QAAQ,CAAC;IACvB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,kBAAkB,EAAE,IAAI,EAAE,EAAE,CAAC;QACnD,MAAM,mBAAmB,GAAG,0CAA0C,CAAC;QACvE,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1D,WAAW,GAAG,IAAI,CAAC;YACnB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;YAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC/C,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACjD,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,6BAA6B,CAAC,eAAe,CAAC,CAAC;YACjE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,qCAAqC,OAAO,CAAC,kBAAkB,GAAG,CAAC,CAAC;YACxF,CAAC;YACD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YACzE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,sCAAsC,SAAS,CAAC,EAAE,QAAQ,OAAO,CAAC,kBAAkB,GAAG,CAAC,CAAC;YAC7G,CAAC;YACD,MAAM,cAAc,GAAG,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACvF,MAAM,cAAc,GAAG,2BAA2B,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YACnF,MAAM,UAAU,GAAuB;gBACnC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE;gBAClC,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE;oBACL,UAAU,EAAE;wBACR,IAAI,EAAE,SAAS;wBACf,iBAAiB,EAAE,aAAa,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE;wBACvE,oBAAoB,EAAE,aAAa,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE;qBAC7E;oBACD,KAAK,EAAE;wBACH,WAAW,EAAE,OAAO,CAAC,kBAAkB;wBACvC,QAAQ,EAAE,OAAO,CAAC,eAAe;qBACpC;oBACD,IAAI,EAAE,cAAc;iBACvB;gBACD,IAAI,EAAE,cAAc;aACvB,CAAC;YACF,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACjE,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CACX,aAAa,QAAQ,CAAC,UAAU,CAAC,EAAE,uCAAuC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnH,CAAC;YACN,CAAC;YACD,QAAQ,IAAI,4BAA4B,CACpC,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,UAAU,EACnB,OAAO,CAAC,kBAAkB,EAC1B,OAAO,CAAC,aAAa,CACxB,CAAC;YACF,SAAS,GAAG,QAAQ,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO,OAAO,CAAC;QACnB,CAAC;QACD,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACrC,OAAO,GAAG,QAAQ,CAAC;IACvB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,kBAAkB,cAAc,OAAO,CAAC,kBAAkB,GAAG,CAAC,CAAC;AAC1H,CAAC;AAED,SAAS,wBAAwB,CAC7B,eAA4D,EAC5D,UAAkB;IAElB,MAAM,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnD,OAAO,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,2BAA2B,CAChC,IAA6C,EAC7C,SAAkD;IAElD,MAAM,QAAQ,GAAkC,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,QAAQ,CAAC,GAAG,CAAC,GAAG,2BAA2B,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAoB,EAAE,SAAkD;IACzG,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,iCAAiC,EAAE,CAAC,MAAM,EAAE,GAAW,EAAE,EAAE;QAC5E,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACpD,OAAO,EAAE,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,0BAA0B,CAAC,QAAgB,EAAE,kBAAsC;IACxF,MAAM,IAAI,GAAkC,EAAE,CAAC;IAC/C,MAAM,eAAe,GAAG,yBAAyB,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IAClE,IAAI,eAAe,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;YAC1B,CAAC;QACL,CAAC;IACL,CAAC;IACD,IAAI,CAAC,QAAQ,GAAG,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9G,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,mBAAmB,CAAC,KAAa;IACtC,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,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,4BAA4B,CACjC,QAAgB,EAChB,kBAA0B,EAC1B,qBAA6B,EAC7B,aAAqB;IAErB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrD,OAAO,QAAQ,CAAC,OAAO,CAAC,uCAAuC,EAAE,CAAC,EAAE,EAAE,MAAc,EAAE,KAAa,EAAE,GAAW,EAAE,EAAE;QAChH,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC;QAC/C,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACxD,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzD,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC;QAC/C,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtF,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;QACxF,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -24,7 +24,8 @@ export type RestValidationContext = {
24
24
  };
25
25
  ensureInitialized: () => Promise<void>;
26
26
  ensureWorkspaceCurrent: () => Promise<void>;
27
+ waitForValidated: () => Promise<void>;
27
28
  getWorkspaceOmlDocuments: () => any[];
28
29
  };
29
- export declare function lintWorkspace(client: RestValidationContext): Promise<RestLintResult>;
30
+ export declare function lintWorkspace(client: RestValidationContext, params?: Record<string, unknown>): Promise<RestLintResult>;
30
31
  export declare function validateWorkspace(client: RestValidationContext, params: Record<string, unknown>): Promise<Record<string, unknown>>;
@@ -1,13 +1,94 @@
1
1
  // Copyright (c) 2026 Modelware. All rights reserved.
2
- import * as fs from 'node:fs/promises';
3
- import * as path from 'node:path';
4
- import { pathToFileURL } from 'node:url';
5
2
  import { createHash } from 'node:crypto';
6
- import { extractLeadingFrontMatter, MarkdownHandlerRegistry, MarkdownPreviewRuntime } from '@oml/markdown';
7
3
  import { createDefaultShaclService } from '@oml/owl';
8
- import { getOntologyModelIndex, normalizeNamespace } from '@oml/language';
9
- import { buildTemplateCatalog, expandTemplateComposeBlocks, findFilesByExtension, frontMatterString, isTemplateMarkdownFile, normalizeContextOntologyIri, } from './template.js';
4
+ import { normalizeNamespace } from '@oml/language';
5
+ import { getIndexedShaclBlocks } from './shacl-index.js';
10
6
  const validationRuntimeCaches = new WeakMap();
7
+ function collectDocumentVersions(client) {
8
+ const versions = new Map();
9
+ for (const doc of client.getWorkspaceOmlDocuments()) {
10
+ const uri = String(doc?.uri ?? '').trim();
11
+ if (!uri) {
12
+ continue;
13
+ }
14
+ versions.set(uri, Number(doc?.textDocument?.version ?? -1));
15
+ }
16
+ return versions;
17
+ }
18
+ function areDocumentVersionsEqual(left, right) {
19
+ if (left.size !== right.size) {
20
+ return false;
21
+ }
22
+ for (const [uri, version] of left.entries()) {
23
+ if ((right.get(uri) ?? Number.NaN) !== version) {
24
+ return false;
25
+ }
26
+ }
27
+ return true;
28
+ }
29
+ function diagnosticsFingerprint(doc) {
30
+ const diagnostics = Array.isArray(doc?.diagnostics) ? doc.diagnostics : [];
31
+ return diagnostics
32
+ .map((diagnostic) => [
33
+ Number(diagnostic?.severity ?? 0),
34
+ Number(diagnostic?.range?.start?.line ?? -1),
35
+ Number(diagnostic?.range?.start?.character ?? -1),
36
+ String(diagnostic?.message ?? ''),
37
+ String(diagnostic?.source ?? ''),
38
+ String(diagnostic?.code ?? ''),
39
+ ].join('|'))
40
+ .sort()
41
+ .join('\n');
42
+ }
43
+ function collectDiagnosticsSnapshot(client) {
44
+ const snapshot = new Map();
45
+ for (const doc of client.getWorkspaceOmlDocuments()) {
46
+ const uri = String(doc?.uri ?? '').trim();
47
+ if (!uri) {
48
+ continue;
49
+ }
50
+ const version = Number(doc?.textDocument?.version ?? -1);
51
+ snapshot.set(uri, `${version}::${diagnosticsFingerprint(doc)}`);
52
+ }
53
+ return snapshot;
54
+ }
55
+ function areSnapshotsEqual(left, right) {
56
+ if (left.size !== right.size) {
57
+ return false;
58
+ }
59
+ for (const [uri, fingerprint] of left.entries()) {
60
+ if ((right.get(uri) ?? '') !== fingerprint) {
61
+ return false;
62
+ }
63
+ }
64
+ return true;
65
+ }
66
+ async function waitForStableValidatedSnapshot(client) {
67
+ await client.waitForValidated();
68
+ let previous = collectDocumentVersions(client);
69
+ for (let i = 0; i < 3; i += 1) {
70
+ await Promise.resolve();
71
+ await client.waitForValidated();
72
+ const current = collectDocumentVersions(client);
73
+ if (areDocumentVersionsEqual(previous, current)) {
74
+ return;
75
+ }
76
+ previous = current;
77
+ }
78
+ }
79
+ async function waitForStableDiagnosticsSnapshot(client) {
80
+ await client.waitForValidated();
81
+ let previous = collectDiagnosticsSnapshot(client);
82
+ for (let i = 0; i < 4; i += 1) {
83
+ await Promise.resolve();
84
+ await client.waitForValidated();
85
+ const current = collectDiagnosticsSnapshot(client);
86
+ if (areSnapshotsEqual(previous, current)) {
87
+ return;
88
+ }
89
+ previous = current;
90
+ }
91
+ }
11
92
  function diagnosticKindFromSeverity(severity) {
12
93
  if (severity === 1)
13
94
  return 'error';
@@ -49,11 +130,54 @@ function getModelContentFingerprints(client) {
49
130
  }
50
131
  return fingerprints;
51
132
  }
52
- export async function lintWorkspace(client) {
133
+ function resolveFilterModelUris(client, ontologies) {
134
+ if (!Array.isArray(ontologies))
135
+ return new Set();
136
+ const ontologyIndex = client.runtime.shared.indexes?.OntologyModelIndex;
137
+ if (!ontologyIndex)
138
+ return new Set();
139
+ const modelUris = new Set();
140
+ for (const ontology of ontologies) {
141
+ const trimmed = String(ontology ?? '').trim();
142
+ if (!trimmed.startsWith('http://') && !trimmed.startsWith('https://'))
143
+ continue;
144
+ const modelUri = ontologyIndex.resolveModelUri?.(trimmed);
145
+ if (modelUri)
146
+ modelUris.add(modelUri);
147
+ }
148
+ return modelUris;
149
+ }
150
+ function resolveFilterOntologyIris(_client, ontologies) {
151
+ if (!Array.isArray(ontologies))
152
+ return new Set();
153
+ const ontologyIris = new Set();
154
+ for (const ontology of ontologies) {
155
+ const trimmed = String(ontology ?? '').trim();
156
+ if (trimmed.startsWith('http://') || trimmed.startsWith('https://')) {
157
+ ontologyIris.add(trimmed);
158
+ }
159
+ }
160
+ return ontologyIris;
161
+ }
162
+ function resolveIndexedShaclBlockModelUri(client, block) {
163
+ if (block.modelUri) {
164
+ return block.modelUri;
165
+ }
166
+ const ontologyIndex = client.runtime.shared.indexes?.OntologyModelIndex;
167
+ return ontologyIndex?.resolveModelUri?.(block.ontologyIri, block.markdownUri);
168
+ }
169
+ export async function lintWorkspace(client, params = {}) {
53
170
  const startedAt = Date.now();
54
171
  await client.ensureInitialized();
55
172
  await client.ensureWorkspaceCurrent();
56
- const docs = client.getWorkspaceOmlDocuments();
173
+ await waitForStableValidatedSnapshot(client);
174
+ await waitForStableDiagnosticsSnapshot(client);
175
+ const allDocs = client.getWorkspaceOmlDocuments();
176
+ // Filter by ontologies if specified
177
+ const filterUris = resolveFilterModelUris(client, params.ontologies);
178
+ const docs = filterUris.size > 0
179
+ ? allDocs.filter((doc) => filterUris.has(String(doc?.uri ?? '')))
180
+ : allDocs;
57
181
  const allProblems = [];
58
182
  let errors = 0;
59
183
  let warnings = 0;
@@ -100,7 +224,8 @@ export async function validateWorkspace(client, params) {
100
224
  const startedAt = Date.now();
101
225
  await client.ensureInitialized();
102
226
  await client.ensureWorkspaceCurrent();
103
- const lint = await lintWorkspace(client);
227
+ await waitForStableValidatedSnapshot(client);
228
+ const lint = await lintWorkspace(client, params);
104
229
  if (lint.errors > 0 || lint.warnings > 0) {
105
230
  return {
106
231
  success: false,
@@ -112,15 +237,16 @@ export async function validateWorkspace(client, params) {
112
237
  error: `lint failed with ${lint.errors} error(s) and ${lint.warnings} warning(s)`,
113
238
  };
114
239
  }
115
- const workspaceRoot = path.resolve(client.workspaceRoot);
116
- const markdownFiles = await findFilesByExtension(workspaceRoot, '.md');
117
- const templateCatalog = await buildTemplateCatalog(workspaceRoot);
118
- const runtime = new MarkdownPreviewRuntime(new MarkdownHandlerRegistry());
119
- const ontologyIndex = getOntologyModelIndex(client.runtime.shared);
120
240
  const reasoningService = client.runtime.Oml.reasoning.ReasoningService;
121
241
  const shaclService = createDefaultShaclService(reasoningService.getSparqlService(), (uri) => reasoningService.ensureQueryContext(uri), (uri) => reasoningService.getContextIri(uri));
122
242
  const runtimeCache = getValidationRuntimeCache(client);
123
243
  const modelFingerprints = getModelContentFingerprints(client);
244
+ const allBlocks = getIndexedShaclBlocks(client.runtime.shared);
245
+ // Filter by ontologies if specified
246
+ const filterOntologyIris = resolveFilterOntologyIris(client, params.ontologies);
247
+ const indexedShaclBlocks = filterOntologyIris.size > 0
248
+ ? allBlocks.filter((block) => filterOntologyIris.has(block.ontologyIri))
249
+ : allBlocks;
124
250
  const seenValidateKeys = new Set();
125
251
  let filesChecked = 0;
126
252
  let errors = 0;
@@ -128,144 +254,80 @@ export async function validateWorkspace(client, params) {
128
254
  let failingItems = 0;
129
255
  const details = [];
130
256
  const validationProblems = [];
131
- for (const markdownPath of markdownFiles) {
132
- const markdown = await fs.readFile(markdownPath, 'utf-8');
133
- if (isTemplateMarkdownFile(markdown)) {
257
+ for (const block of indexedShaclBlocks) {
258
+ const modelUri = resolveIndexedShaclBlockModelUri(client, block);
259
+ if (!modelUri) {
134
260
  continue;
135
261
  }
136
- const frontMatter = extractLeadingFrontMatter(markdown);
137
- const contextOntologyIri = normalizeContextOntologyIri(frontMatter?.contextOntologyIri
138
- ?? frontMatterString(frontMatter?.data, 'ontologyIri')
139
- ?? frontMatterString(frontMatter?.data, 'ontology'));
140
- const contextMemberIri = frontMatterString(frontMatter?.data, 'memberIri')
141
- ?? frontMatterString(frontMatter?.data, 'contextMemberIri');
142
- const markdownUri = pathToFileURL(markdownPath).toString();
143
- const modelUri = contextOntologyIri
144
- ? ontologyIndex.resolveModelUri(contextOntologyIri, markdownUri)
145
- : undefined;
146
- const expanded = await expandTemplateComposeBlocks(markdown, templateCatalog, {
147
- workspaceRoot,
148
- sourceMarkdownPath: markdownPath,
149
- contextOntologyIri,
150
- contextModelUri: modelUri,
151
- contextMemberIri,
152
- });
153
- const prepared = runtime.prepare(expanded);
154
- const executableBlocks = prepared.codeBlocks
155
- .filter((block) => block.language === 'table-editor')
156
- .map((block) => ({ id: block.id, source: block.content, lineStart: block.lineStart, lineEnd: block.lineEnd }));
157
- if (executableBlocks.length === 0) {
262
+ filesChecked += 1;
263
+ const blockLocation = `${block.markdownPath}:${Math.max(1, block.lineStart)}`;
264
+ const cacheKey = `${block.markdownUri}::${block.blockId}`;
265
+ const modelFingerprint = modelFingerprints.get(modelUri) ?? '';
266
+ const validateFingerprint = hashText([modelUri, modelFingerprint, block.sourceHash].join('\n'));
267
+ seenValidateKeys.add(cacheKey);
268
+ const cached = runtimeCache.validateBlockCache.get(cacheKey);
269
+ if (cached?.fingerprint === validateFingerprint) {
270
+ errors += cached.result.errors;
271
+ warnings += cached.result.warnings;
158
272
  continue;
159
273
  }
160
- const relativeMarkdown = path.relative(workspaceRoot, markdownPath) || path.basename(markdownPath);
161
- for (const block of executableBlocks) {
162
- filesChecked += 1;
163
- const blockLocation = `${relativeMarkdown}:${Math.max(1, Number(block.lineStart ?? 1))}`;
164
- const shacl = block.source.trim();
165
- if (!contextOntologyIri) {
166
- errors += 1;
167
- failingItems += 1;
168
- details.push(`Violation: ${blockLocation}: missing contextOntologyIri front-matter.`);
169
- validationProblems.push({
170
- modelUri: modelUri ?? '<unknown>',
171
- element: '-',
172
- property: '-',
173
- message: 'Missing contextOntologyIri front-matter.',
174
- });
175
- continue;
176
- }
177
- if (!modelUri) {
178
- errors += 1;
179
- failingItems += 1;
180
- details.push(`Violation: ${blockLocation}: could not resolve context model URI for ${contextOntologyIri}.`);
181
- validationProblems.push({
182
- modelUri: '<unknown>',
183
- element: '-',
184
- property: '-',
185
- message: `Could not resolve context model URI for ${contextOntologyIri}.`,
186
- });
187
- continue;
188
- }
189
- if (!shacl) {
190
- errors += 1;
191
- failingItems += 1;
192
- details.push(`Violation: ${blockLocation}: empty table-editor block.`);
274
+ const result = await shaclService.validateShacl(modelUri, block.source);
275
+ let blockErrors = 0;
276
+ let blockWarnings = 0;
277
+ if (result.error) {
278
+ blockErrors += 1;
279
+ details.push(`Violation: ${blockLocation}: ${result.error}`);
280
+ validationProblems.push({
281
+ modelUri,
282
+ element: '-',
283
+ property: '-',
284
+ message: String(result.error),
285
+ });
286
+ }
287
+ else if (!result.conforms) {
288
+ for (const issue of result.issues) {
289
+ const severityText = String(issue.severity ?? '').toLowerCase();
290
+ const focusNode = issue.focusNode ? shortIri(issue.focusNode) : '-';
291
+ const propertyName = issue.propertyName ?? (issue.path ? shortIri(issue.path) : '-');
292
+ const severityLabel = shortIri(issue.severity || 'Violation');
293
+ if (severityText.includes('warning')) {
294
+ blockWarnings += 1;
295
+ details.push(`${severityLabel}: ${blockLocation} element=${focusNode} property=${propertyName}: ${describeIssue(issue)}`);
296
+ }
297
+ else {
298
+ blockErrors += 1;
299
+ details.push(`${severityLabel}: ${blockLocation} element=${focusNode} property=${propertyName}: ${describeIssue(issue)}`);
300
+ }
193
301
  validationProblems.push({
194
302
  modelUri,
195
- element: '-',
196
- property: '-',
197
- message: 'Empty table-editor block.',
303
+ element: focusNode,
304
+ property: propertyName,
305
+ message: describeIssue(issue),
198
306
  });
199
- continue;
200
307
  }
201
- const modelFingerprint = modelFingerprints.get(modelUri) ?? '';
202
- const cacheKey = `${markdownUri}::${block.id}`;
203
- const validateFingerprint = hashText([modelUri, modelFingerprint, shacl].join('\n'));
204
- seenValidateKeys.add(cacheKey);
205
- const cached = runtimeCache.validateBlockCache.get(cacheKey);
206
- if (cached?.fingerprint === validateFingerprint) {
207
- errors += cached.result.errors;
208
- warnings += cached.result.warnings;
209
- continue;
210
- }
211
- const result = await shaclService.validateShacl(modelUri, shacl);
212
- let blockErrors = 0;
213
- let blockWarnings = 0;
214
- if (result.error) {
308
+ if (result.issues.length === 0) {
215
309
  blockErrors += 1;
216
- details.push(`Violation: ${blockLocation}: ${result.error}`);
310
+ details.push(`Violation: ${blockLocation}: SHACL validation failed without detailed issues.`);
217
311
  validationProblems.push({
218
312
  modelUri,
219
313
  element: '-',
220
314
  property: '-',
221
- message: String(result.error),
315
+ message: 'SHACL validation failed without detailed issues.',
222
316
  });
223
317
  }
224
- else if (!result.conforms) {
225
- for (const issue of result.issues) {
226
- const severityText = String(issue.severity ?? '').toLowerCase();
227
- const focusNode = issue.focusNode ? shortIri(issue.focusNode) : '-';
228
- const propertyName = issue.propertyName ?? (issue.path ? shortIri(issue.path) : '-');
229
- const severityLabel = shortIri(issue.severity || 'Violation');
230
- if (severityText.includes('warning')) {
231
- blockWarnings += 1;
232
- details.push(`${severityLabel}: ${blockLocation} element=${focusNode} property=${propertyName}: ${describeIssue(issue)}`);
233
- }
234
- else {
235
- blockErrors += 1;
236
- details.push(`${severityLabel}: ${blockLocation} element=${focusNode} property=${propertyName}: ${describeIssue(issue)}`);
237
- }
238
- validationProblems.push({
239
- modelUri,
240
- element: focusNode,
241
- property: propertyName,
242
- message: describeIssue(issue),
243
- });
244
- }
245
- if (result.issues.length === 0) {
246
- blockErrors += 1;
247
- details.push(`Violation: ${blockLocation}: SHACL validation failed without detailed issues.`);
248
- validationProblems.push({
249
- modelUri,
250
- element: '-',
251
- property: '-',
252
- message: 'SHACL validation failed without detailed issues.',
253
- });
254
- }
255
- }
256
- errors += blockErrors;
257
- warnings += blockWarnings;
258
- if (blockErrors > 0 || blockWarnings > 0) {
259
- failingItems += 1;
260
- }
261
- runtimeCache.validateBlockCache.set(cacheKey, {
262
- fingerprint: validateFingerprint,
263
- result: {
264
- errors: blockErrors,
265
- warnings: blockWarnings,
266
- },
267
- });
268
318
  }
319
+ errors += blockErrors;
320
+ warnings += blockWarnings;
321
+ if (blockErrors > 0 || blockWarnings > 0) {
322
+ failingItems += 1;
323
+ }
324
+ runtimeCache.validateBlockCache.set(cacheKey, {
325
+ fingerprint: validateFingerprint,
326
+ result: {
327
+ errors: blockErrors,
328
+ warnings: blockWarnings,
329
+ },
330
+ });
269
331
  }
270
332
  for (const key of runtimeCache.validateBlockCache.keys()) {
271
333
  if (!seenValidateKeys.has(key)) {