@memoarchitect/tools 0.11.0 → 0.11.3
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 +1 -1
- package/package.json +2 -2
- package/packages/tools/lib/commands/dev.d.ts.map +1 -1
- package/packages/tools/lib/commands/dev.js +23 -1
- package/packages/tools/lib/commands/dev.js.map +1 -1
- package/packages/tools/lib/model/builder.d.ts.map +1 -1
- package/packages/tools/lib/model/builder.js +97 -0
- package/packages/tools/lib/model/builder.js.map +1 -1
- package/packages/tools/lib/model/parser-utils.d.ts +2 -0
- package/packages/tools/lib/model/parser-utils.d.ts.map +1 -1
- package/packages/tools/lib/model/parser-utils.js +30 -4
- package/packages/tools/lib/model/parser-utils.js.map +1 -1
- package/packages/tools/lib/model/semantic.d.ts +12 -0
- package/packages/tools/lib/model/semantic.d.ts.map +1 -1
- package/packages/tools/lib/model/semantic.js.map +1 -1
- package/packages/tools/lib/server/dev-server.d.ts +1 -1
- package/packages/tools/lib/server/dev-server.d.ts.map +1 -1
- package/packages/tools/lib/server/dev-server.js +123 -45
- package/packages/tools/lib/server/dev-server.js.map +1 -1
- package/packages/tools/lib/server/persistor.d.ts.map +1 -1
- package/packages/tools/lib/server/persistor.js +156 -6
- package/packages/tools/lib/server/persistor.js.map +1 -1
- package/packages/tools/lib/server/view-writer.d.ts +34 -0
- package/packages/tools/lib/server/view-writer.d.ts.map +1 -0
- package/packages/tools/lib/server/view-writer.js +269 -0
- package/packages/tools/lib/server/view-writer.js.map +1 -0
- package/packages/tools/lib/validator/builtin-rules.d.ts.map +1 -1
- package/packages/tools/lib/validator/builtin-rules.js +5 -0
- package/packages/tools/lib/validator/builtin-rules.js.map +1 -1
- package/packages/tools/lib/validator/rule-engine.d.ts.map +1 -1
- package/packages/tools/lib/validator/rule-engine.js +9 -2
- package/packages/tools/lib/validator/rule-engine.js.map +1 -1
|
@@ -62,7 +62,13 @@ export async function saveElementToFile(cwd, element, index) {
|
|
|
62
62
|
writeFileSync(filePath, `package ${pkgName || 'generated'} {\n}\n`, 'utf8');
|
|
63
63
|
}
|
|
64
64
|
const content = readFileSync(filePath, 'utf8');
|
|
65
|
-
|
|
65
|
+
// The generator writes the flat attribute map back out verbatim, so a key
|
|
66
|
+
// the BUILDER derived rather than read would be materialised into source on
|
|
67
|
+
// the next save: `usageType` is the declaration's own `: Kind` and
|
|
68
|
+
// `elementPackage` is the package it sits in. Writing them states in the
|
|
69
|
+
// body what the declaration already says, and the copy then outlives
|
|
70
|
+
// whatever it was derived from.
|
|
71
|
+
const buildUsage = (omit = DERIVED_ATTRIBUTES) => generateUsage({
|
|
66
72
|
id: element.id,
|
|
67
73
|
name: element.name,
|
|
68
74
|
kind: element.kind,
|
|
@@ -71,7 +77,7 @@ export async function saveElementToFile(cwd, element, index) {
|
|
|
71
77
|
construct: usageKeyword(element.construct),
|
|
72
78
|
layer: element.layer || '',
|
|
73
79
|
doc: element.doc || '',
|
|
74
|
-
attributes: element.attributes || {},
|
|
80
|
+
attributes: withoutKeys(element.attributes || {}, omit),
|
|
75
81
|
});
|
|
76
82
|
let updated;
|
|
77
83
|
let replaced = false;
|
|
@@ -104,7 +110,15 @@ export async function saveElementToFile(cwd, element, index) {
|
|
|
104
110
|
if (located.declaredName && element.id !== located.declaredName) {
|
|
105
111
|
warnings.push({ code: 'rename-is-text-only', message: RENAME_IS_TEXT_ONLY });
|
|
106
112
|
}
|
|
107
|
-
|
|
113
|
+
// An update replaces the declaration's whole source range with text
|
|
114
|
+
// generated from a FLAT attribute map, so everything in the body that is
|
|
115
|
+
// not a scalar attribute — nested usages, `@Foo { … }` annotations,
|
|
116
|
+
// connections — has no representation in the replacement and is deleted
|
|
117
|
+
// by the edit. Editing one screen's description used to remove the four
|
|
118
|
+
// UI elements declared inside it. Those members are lifted out of the
|
|
119
|
+
// original text and put back verbatim.
|
|
120
|
+
const carried = carriedMembers(content, located.node, element.attributes || {});
|
|
121
|
+
updated = spliceIndented(content, located.start, located.end, withCarriedMembers(buildUsage([...DERIVED_ATTRIBUTES, ...carried.suppliedKeys]), carried.text));
|
|
108
122
|
replaced = true;
|
|
109
123
|
}
|
|
110
124
|
else if (element.package) {
|
|
@@ -115,10 +129,10 @@ export async function saveElementToFile(cwd, element, index) {
|
|
|
115
129
|
error: `${relativePath} does not declare package "${element.package}"; nothing was written.`,
|
|
116
130
|
};
|
|
117
131
|
}
|
|
118
|
-
updated = insertIntoBody(content, target, `${
|
|
132
|
+
updated = insertIntoBody(content, target, `${buildUsage()}\n`);
|
|
119
133
|
}
|
|
120
134
|
else {
|
|
121
|
-
updated = appendToLastPackage(content,
|
|
135
|
+
updated = appendToLastPackage(content, buildUsage());
|
|
122
136
|
}
|
|
123
137
|
const committed = await commitSource(filePath, relativePath, updated);
|
|
124
138
|
if (!committed.success)
|
|
@@ -148,6 +162,142 @@ export async function commitSource(absolutePath, relativePath, updated) {
|
|
|
148
162
|
}
|
|
149
163
|
return { success: true };
|
|
150
164
|
}
|
|
165
|
+
// ─── Carried members ─────────────────────────────────────────────────────────
|
|
166
|
+
//
|
|
167
|
+
// `generateUsage` writes a declaration out of a FLAT attribute map, and an
|
|
168
|
+
// update splices its output over the declaration's whole source range. That is
|
|
169
|
+
// sound for the CSV import it was written for, where the map IS the element. It
|
|
170
|
+
// is not sound for an edit: a SysML body also holds nested usages, `@Foo { … }`
|
|
171
|
+
// annotations and connections, none of which the map represents — so
|
|
172
|
+
// regenerating from the map alone deletes them.
|
|
173
|
+
//
|
|
174
|
+
// The members the generator can express (scalar and structured attributes, the
|
|
175
|
+
// doc comment) are regenerated. Every other member is carried across verbatim,
|
|
176
|
+
// and any flat key such a member supplied is dropped from the regenerated
|
|
177
|
+
// attributes so the same fact is not stated twice in two notations.
|
|
178
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
179
|
+
/**
|
|
180
|
+
* Attributes the BUILDER derives from the declaration rather than reading from
|
|
181
|
+
* its body. Writing them back materialises a copy that outlives the thing it
|
|
182
|
+
* was derived from — a `usageType` left behind after the kind changed, an
|
|
183
|
+
* `elementPackage` after the element moved.
|
|
184
|
+
*/
|
|
185
|
+
const DERIVED_ATTRIBUTES = ['usageType', 'elementPackage'];
|
|
186
|
+
/** Drop `keys`, and anything nested under them (`bounds.x` under `bounds`). */
|
|
187
|
+
function withoutKeys(attributes, keys) {
|
|
188
|
+
if (!keys.length)
|
|
189
|
+
return attributes;
|
|
190
|
+
const kept = {};
|
|
191
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
192
|
+
if (keys.some(omit => key === omit || key.startsWith(`${omit}.`)))
|
|
193
|
+
continue;
|
|
194
|
+
kept[key] = value;
|
|
195
|
+
}
|
|
196
|
+
return kept;
|
|
197
|
+
}
|
|
198
|
+
/** Members the generator regenerates from the element; everything else carries. */
|
|
199
|
+
const REGENERATED_MEMBERS = new Set(['AttributeMember', 'DocComment']);
|
|
200
|
+
/** Flat attribute keys a carried member already states in its own notation. */
|
|
201
|
+
function keysSuppliedBy(member) {
|
|
202
|
+
if (member.$type === 'MetadataApplication') {
|
|
203
|
+
return (member.body ?? []).map((field) => field.name).filter(Boolean);
|
|
204
|
+
}
|
|
205
|
+
if (member.$type === 'ExposeMember')
|
|
206
|
+
return ['expose'];
|
|
207
|
+
if (member.boundRef && member.name)
|
|
208
|
+
return [member.subsetValue ? member.boundRef : member.name];
|
|
209
|
+
if (member.name)
|
|
210
|
+
return [member.name];
|
|
211
|
+
return [];
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Re-point an annotation's field at an edited value.
|
|
215
|
+
*
|
|
216
|
+
* A `@MemoIdentity { :>> providedId = "…"; }` field lifts into the flat
|
|
217
|
+
* attribute map, and `extractAttributes` applies annotations LAST — so an
|
|
218
|
+
* attribute written beside the annotation would be read back overridden by it.
|
|
219
|
+
* An edit to such a field therefore has to land inside the annotation.
|
|
220
|
+
*/
|
|
221
|
+
function retargetAnnotationField(text, field, value) {
|
|
222
|
+
const escaped = field.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
223
|
+
const pattern = new RegExp(`((?::>>|redefines)\\s+${escaped}\\s*=\\s*)"([^"]*)"`, 'g');
|
|
224
|
+
const occurrences = [...text.matchAll(pattern)];
|
|
225
|
+
if (!occurrences.length)
|
|
226
|
+
return text;
|
|
227
|
+
// `extractAttributes` keeps the LAST assignment, so that is the one the
|
|
228
|
+
// edited value is an edit OF. Leaving earlier ones alone matters: a body may
|
|
229
|
+
// state a field twice — imported screens carry two `providedId`s — and
|
|
230
|
+
// rewriting every occurrence would overwrite history with whichever value
|
|
231
|
+
// the reader happened to settle on.
|
|
232
|
+
const target = occurrences[occurrences.length - 1];
|
|
233
|
+
if (target[2] === String(value))
|
|
234
|
+
return text;
|
|
235
|
+
const quoted = `"${String(value).replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
236
|
+
return text.slice(0, target.index) + target[1] + quoted + text.slice(target.index + target[0].length);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Normalise a lifted member to the one indentation level a usage body uses.
|
|
240
|
+
*
|
|
241
|
+
* `column` is where the member began in the original file, so subtracting it
|
|
242
|
+
* makes the member's text self-relative and `spliceIndented` can re-indent it to
|
|
243
|
+
* wherever the declaration now sits. Lines starting left of that column are
|
|
244
|
+
* taken as already flush and only trimmed — generated declarations in this
|
|
245
|
+
* codebase put some attributes at column 0, and treating that as negative
|
|
246
|
+
* indentation is what made nested bodies drift right on every save.
|
|
247
|
+
*/
|
|
248
|
+
function reindent(text, column) {
|
|
249
|
+
return text
|
|
250
|
+
.split('\n')
|
|
251
|
+
.map((line, i) => {
|
|
252
|
+
if (i === 0)
|
|
253
|
+
return ` ${line.trim()}`;
|
|
254
|
+
if (!line.trim())
|
|
255
|
+
return '';
|
|
256
|
+
const lead = line.length - line.trimStart().length;
|
|
257
|
+
return ` ${line.slice(Math.min(lead, column))}`;
|
|
258
|
+
})
|
|
259
|
+
.join('\n');
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Lift the members of `node` that the generator cannot express out of `source`.
|
|
263
|
+
*
|
|
264
|
+
* Returns them as one already-indented block plus the flat keys they supply, so
|
|
265
|
+
* the caller can regenerate the attributes without them.
|
|
266
|
+
*/
|
|
267
|
+
function carriedMembers(source, node, attributes = {}) {
|
|
268
|
+
const carried = [];
|
|
269
|
+
const suppliedKeys = [];
|
|
270
|
+
for (const member of node?.body ?? []) {
|
|
271
|
+
if (REGENERATED_MEMBERS.has(member.$type))
|
|
272
|
+
continue;
|
|
273
|
+
const cst = member.$cstNode;
|
|
274
|
+
if (!cst)
|
|
275
|
+
continue;
|
|
276
|
+
let text = source.slice(cst.offset, cst.offset + cst.length);
|
|
277
|
+
const keys = keysSuppliedBy(member);
|
|
278
|
+
if (member.$type === 'MetadataApplication') {
|
|
279
|
+
for (const field of keys) {
|
|
280
|
+
const edited = attributes[field];
|
|
281
|
+
if (edited !== undefined)
|
|
282
|
+
text = retargetAnnotationField(text, field, edited);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
suppliedKeys.push(...keys);
|
|
286
|
+
const column = cst.offset - (source.lastIndexOf('\n', cst.offset - 1) + 1);
|
|
287
|
+
carried.push(reindent(text, column));
|
|
288
|
+
}
|
|
289
|
+
return { text: carried.join('\n'), suppliedKeys };
|
|
290
|
+
}
|
|
291
|
+
/** Put the carried members back inside the regenerated usage's body. */
|
|
292
|
+
function withCarriedMembers(usage, carried) {
|
|
293
|
+
if (!carried)
|
|
294
|
+
return usage;
|
|
295
|
+
const close = usage.lastIndexOf('}');
|
|
296
|
+
if (close === -1)
|
|
297
|
+
return usage;
|
|
298
|
+
const before = usage.slice(0, close);
|
|
299
|
+
return `${before.endsWith('\n') ? before : `${before}\n`}${carried}\n${usage.slice(close)}`;
|
|
300
|
+
}
|
|
151
301
|
/** Source range of the declaration an identity names, in this file's text. */
|
|
152
302
|
async function locateDeclaration(source, index, identityId, memoElementId) {
|
|
153
303
|
const record = requireIrIdentity(index, identityId, memoElementId);
|
|
@@ -159,7 +309,7 @@ async function locateDeclaration(source, index, identityId, memoElementId) {
|
|
|
159
309
|
const cst = node.$cstNode;
|
|
160
310
|
if (!cst)
|
|
161
311
|
throw new StaleIrIdentityError(identityId, 'the resolved declaration has no source range');
|
|
162
|
-
return { start: cst.offset, end: cst.offset + cst.length, declaredName: node.name };
|
|
312
|
+
return { start: cst.offset, end: cst.offset + cst.length, declaredName: node.name, node };
|
|
163
313
|
}
|
|
164
314
|
/** Replace a range, re-indenting the replacement to the line it starts on. */
|
|
165
315
|
function spliceIndented(source, start, end, replacement) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistor.js","sourceRoot":"","sources":["../../src/server/persistor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"persistor.js","sourceRoot":"","sources":["../../src/server/persistor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { DiagramDTO, MemoModelDTO } from '../types/index.js';
|
|
2
|
+
export interface ViewWriteResult {
|
|
3
|
+
success: boolean;
|
|
4
|
+
/** Why the view could not be declared. Never a reason to write it elsewhere. */
|
|
5
|
+
reason?: string;
|
|
6
|
+
filePath?: string;
|
|
7
|
+
identifier?: string;
|
|
8
|
+
/** True when the declaration seeded a new file. */
|
|
9
|
+
created?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Write one view declaration into the project's own home for views of its kind.
|
|
13
|
+
*
|
|
14
|
+
* Returns `{ success: false, reason }` when the project declares no view at all,
|
|
15
|
+
* which is the only case with no convention to infer. There is deliberately no
|
|
16
|
+
* sidecar fallback: a view that cannot be declared is not created.
|
|
17
|
+
*/
|
|
18
|
+
export declare function writeViewDeclaration(projectRoot: string, model: MemoModelDTO, diagram: DiagramDTO): Promise<ViewWriteResult>;
|
|
19
|
+
/**
|
|
20
|
+
* Change WHAT a declared view shows, by editing its `expose` members.
|
|
21
|
+
*
|
|
22
|
+
* `diagram:update` carries the element ids a view should contain. A declared
|
|
23
|
+
* view holds no list of ids — it holds `expose` paths, and
|
|
24
|
+
* `resolveViewElementIds` derives the ids from them. So the update is applied
|
|
25
|
+
* where the view actually says what it shows.
|
|
26
|
+
*
|
|
27
|
+
* Exposing the PACKAGE rather than each element is the convention every
|
|
28
|
+
* authored view follows, and it is what makes a screen layout pick up a region
|
|
29
|
+
* added later without another edit.
|
|
30
|
+
*/
|
|
31
|
+
export declare function updateViewExpose(projectRoot: string, model: MemoModelDTO, diagram: DiagramDTO, elementIds: string[] | undefined): Promise<ViewWriteResult & {
|
|
32
|
+
exposed?: string[];
|
|
33
|
+
}>;
|
|
34
|
+
//# sourceMappingURL=view-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-writer.d.ts","sourceRoot":"","sources":["../../src/server/view-writer.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,UAAU,EAAe,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAI/E,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAuFD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACtC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,GAC9D,OAAO,CAAC,eAAe,CAAC,CA6E1B;AAiBD;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAClC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,GAChG,OAAO,CAAC,eAAe,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAqCnD"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
// ─── View write-back ─────────────────────────────────────────────────────────
|
|
2
|
+
//
|
|
3
|
+
// Declaring a view in SysML, instead of recording it in a JSON sidecar.
|
|
4
|
+
//
|
|
5
|
+
// A view IS model content, and MEMO says so everywhere else: `view … :
|
|
6
|
+
// MemoDiagramView { … }` is an ontology construct, `view-deriver.ts` turns one
|
|
7
|
+
// into a diagram, and `viewLayoutPath()` keeps a view's layout in a
|
|
8
|
+
// `.viewlayout` companion BESIDE the .sysml file that declares it — falling
|
|
9
|
+
// back to the hidden `.memo/views/` directory only for a diagram with no
|
|
10
|
+
// `sourceFile`, which is to say only for a diagram that was never declared.
|
|
11
|
+
//
|
|
12
|
+
// `diagram:create` was the one path that produced such a diagram. It appended a
|
|
13
|
+
// row to `.memo/user-diagrams.json`, so a view authored in the app was invisible
|
|
14
|
+
// to `memo validate` and to `syside check`, absent from review, untracked by git
|
|
15
|
+
// wherever `.memo/` is ignored, and — having no source file — dragged its layout
|
|
16
|
+
// into the hidden store as well. Two mechanisms for one concept, and the
|
|
17
|
+
// authored half was the one the toolchain could not see.
|
|
18
|
+
//
|
|
19
|
+
// So creation writes the declaration, and everything downstream follows on its
|
|
20
|
+
// own: the file watcher recompiles, `view-deriver` produces the diagram with
|
|
21
|
+
// `sourceFile` set, and the layout companion lands next to the source.
|
|
22
|
+
//
|
|
23
|
+
// WHERE the declaration goes is not configured, it is learned. A project that
|
|
24
|
+
// already declares views of this kind has answered the question — same file,
|
|
25
|
+
// same package, same view definition, same `expose` and viewpoint conventions as
|
|
26
|
+
// its siblings. That is the rule `relationship-writer.ts` already applies to
|
|
27
|
+
// connections ("a package that already collects its links in one file keeps
|
|
28
|
+
// collecting them there"), applied to views. With no same-kind sibling, a file
|
|
29
|
+
// is created beside wherever the project keeps its other views, carrying that
|
|
30
|
+
// exemplar's imports. A project with no views at all is genuinely unanswerable
|
|
31
|
+
// and is refused — there is no sidecar to fall back to.
|
|
32
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
33
|
+
import { existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
34
|
+
import { dirname, resolve } from 'node:path';
|
|
35
|
+
import { parseText } from '../model/parser-utils.js';
|
|
36
|
+
import { insertIntoBody, locatePackages } from './package-source.js';
|
|
37
|
+
import { commitSource } from './persistor.js';
|
|
38
|
+
/**
|
|
39
|
+
* The ontology's view definition for a kind, used only when no sibling exists to
|
|
40
|
+
* copy one from. `geometry` has a dedicated definition that fixes the kind;
|
|
41
|
+
* everything else is a `MemoDiagramView` that declares its own `viewKind`.
|
|
42
|
+
*/
|
|
43
|
+
const VIEW_DEFINITION_FOR_KIND = {
|
|
44
|
+
geometry: { def: 'MemoScreenLayoutView', declaresKind: false },
|
|
45
|
+
};
|
|
46
|
+
const viewDefinitionFor = (viewKind) => VIEW_DEFINITION_FOR_KIND[viewKind] ?? { def: 'MemoDiagramView', declaresKind: true };
|
|
47
|
+
/** `IMS Login Screen` -> `ims_login_screen`, for a file name. */
|
|
48
|
+
const slug = (value) => String(value).toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_+|_+$/g, '') || 'view';
|
|
49
|
+
const escape = (value) => String(value).replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
50
|
+
/** A SysML identifier not already taken in this model. */
|
|
51
|
+
function freeIdentifier(base, model) {
|
|
52
|
+
const cleaned = base.replace(/[^A-Za-z0-9_]/g, '') || 'view';
|
|
53
|
+
const start = /^[A-Za-z_]/.test(cleaned) ? cleaned : `view${cleaned}`;
|
|
54
|
+
if (!model.elements[start])
|
|
55
|
+
return start;
|
|
56
|
+
let n = 2;
|
|
57
|
+
while (model.elements[`${start}_${n}`])
|
|
58
|
+
n++;
|
|
59
|
+
return `${start}_${n}`;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The views this project already declares for a kind.
|
|
63
|
+
*
|
|
64
|
+
* Keyed on the DERIVED view kind rather than the definition's name, so a screen
|
|
65
|
+
* layout finds its siblings whether they were declared as
|
|
66
|
+
* `MemoScreenLayoutView` or as a `MemoDiagramView` with an explicit `viewKind`.
|
|
67
|
+
* `null` asks for views of ANY kind — used when bootstrapping the first view of
|
|
68
|
+
* a kind, where the question is only "where do views live".
|
|
69
|
+
*/
|
|
70
|
+
function siblingViews(model, viewKind) {
|
|
71
|
+
const siblings = [];
|
|
72
|
+
for (const diagram of model.diagrams ?? []) {
|
|
73
|
+
if ((viewKind !== null && diagram.viewKind !== viewKind) || !diagram.sourceFile || !diagram.elementId)
|
|
74
|
+
continue;
|
|
75
|
+
const element = model.elements[diagram.elementId];
|
|
76
|
+
if (element?.file)
|
|
77
|
+
siblings.push(element);
|
|
78
|
+
}
|
|
79
|
+
return siblings;
|
|
80
|
+
}
|
|
81
|
+
/** The sibling file holding the most of them — the project's own answer. */
|
|
82
|
+
function conventionalHome(siblings) {
|
|
83
|
+
const byFile = new Map();
|
|
84
|
+
for (const sibling of siblings)
|
|
85
|
+
byFile.set(sibling.file, [...(byFile.get(sibling.file) ?? []), sibling]);
|
|
86
|
+
let best;
|
|
87
|
+
for (const [file, members] of byFile) {
|
|
88
|
+
if (!best || members.length > best.members.length)
|
|
89
|
+
best = { file, members };
|
|
90
|
+
}
|
|
91
|
+
return best;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Bootstrap a home for the FIRST view of a kind.
|
|
95
|
+
*
|
|
96
|
+
* With no same-kind sibling there is no file to join, but the project still
|
|
97
|
+
* answers most of the question: views of other kinds show which directory holds
|
|
98
|
+
* views, which package naming they use, and which imports a view needs for its
|
|
99
|
+
* definition and viewpoint to resolve. Imports are copied verbatim rather than
|
|
100
|
+
* guessed — guessing them is how a generated file ends up not compiling.
|
|
101
|
+
*/
|
|
102
|
+
function bootstrapHome(projectRoot, model, diagram) {
|
|
103
|
+
const anyView = siblingViews(model, null);
|
|
104
|
+
if (anyView.length === 0)
|
|
105
|
+
return undefined;
|
|
106
|
+
const home = conventionalHome(anyView);
|
|
107
|
+
const exemplar = home.members[0];
|
|
108
|
+
const file = `${dirname(home.file)}/view_${slug(diagram.name)}.sysml`;
|
|
109
|
+
// Package name follows the exemplar's, swapping its trailing segment: these
|
|
110
|
+
// are `<project>_views_<area>`, and an unrelated name would break that.
|
|
111
|
+
const parts = String(exemplar.package ?? 'views').split('::');
|
|
112
|
+
const base = parts[parts.length - 1].replace(/[^A-Za-z0-9_]/g, '_');
|
|
113
|
+
const pkg = `${base.replace(/_[^_]*$/, '')}_${slug(diagram.viewKind ?? 'view')}`;
|
|
114
|
+
const imports = readFileSync(resolve(projectRoot, home.file), 'utf8')
|
|
115
|
+
.split('\n')
|
|
116
|
+
.filter(line => /^\s*(private\s+)?import\s/.test(line))
|
|
117
|
+
.map(line => line.trim());
|
|
118
|
+
return { file, pkg, imports, exemplar };
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Write one view declaration into the project's own home for views of its kind.
|
|
122
|
+
*
|
|
123
|
+
* Returns `{ success: false, reason }` when the project declares no view at all,
|
|
124
|
+
* which is the only case with no convention to infer. There is deliberately no
|
|
125
|
+
* sidecar fallback: a view that cannot be declared is not created.
|
|
126
|
+
*/
|
|
127
|
+
export async function writeViewDeclaration(projectRoot, model, diagram) {
|
|
128
|
+
const home = conventionalHome(siblingViews(model, diagram.viewKind ?? null));
|
|
129
|
+
const bootstrap = home ? undefined : bootstrapHome(projectRoot, model, diagram);
|
|
130
|
+
if (!home && !bootstrap) {
|
|
131
|
+
return { success: false, reason: 'this project declares no view at all, so there is no convention to place one by' };
|
|
132
|
+
}
|
|
133
|
+
const exemplar = home ? home.members[0] : bootstrap.exemplar;
|
|
134
|
+
const targetFile = home ? home.file : bootstrap.file;
|
|
135
|
+
const absolute = resolve(projectRoot, targetFile);
|
|
136
|
+
if (bootstrap && !existsSync(absolute)) {
|
|
137
|
+
mkdirSync(dirname(absolute), { recursive: true });
|
|
138
|
+
const header = [
|
|
139
|
+
`// ${diagram.viewKind} views. Declared here rather than recorded outside the model.`,
|
|
140
|
+
`package ${bootstrap.pkg} {`,
|
|
141
|
+
...bootstrap.imports.map(line => ` ${line}`),
|
|
142
|
+
'}',
|
|
143
|
+
'',
|
|
144
|
+
].join('\n');
|
|
145
|
+
const seeded = await commitSource(absolute, targetFile, header);
|
|
146
|
+
if (!seeded.success)
|
|
147
|
+
return { success: false, reason: seeded.error };
|
|
148
|
+
}
|
|
149
|
+
else if (!existsSync(absolute)) {
|
|
150
|
+
return { success: false, reason: `${targetFile} does not exist` };
|
|
151
|
+
}
|
|
152
|
+
const source = readFileSync(absolute, 'utf8');
|
|
153
|
+
const packages = await locatePackages(source);
|
|
154
|
+
const wanted = bootstrap ? bootstrap.pkg : exemplar.package;
|
|
155
|
+
const target = packages.find(pkg => pkg.qualifiedName === wanted) ?? packages[0];
|
|
156
|
+
if (!target)
|
|
157
|
+
return { success: false, reason: `${targetFile} declares no package to hold the view` };
|
|
158
|
+
// The primary element the view shows decides what it exposes. Siblings
|
|
159
|
+
// expose their subject's whole package, which is what lets a screen view
|
|
160
|
+
// pick up a region added later without another edit.
|
|
161
|
+
const primary = model.elements[(diagram.elementIds ?? [])[0] ?? ''];
|
|
162
|
+
const exposePackage = primary?.package
|
|
163
|
+
?? exemplar.attributes?.expose?.split(',')[0]?.replace(/::\*$/, '');
|
|
164
|
+
if (!exposePackage) {
|
|
165
|
+
return { success: false, reason: 'the view has no element whose package it could expose' };
|
|
166
|
+
}
|
|
167
|
+
// A sibling's definition is authoritative; without one, derive it from the
|
|
168
|
+
// kind so the declaration still states what it is.
|
|
169
|
+
const derived = viewDefinitionFor(diagram.viewKind ?? '');
|
|
170
|
+
const viewDef = home ? (exemplar.attributes?.usageType || derived.def) : derived.def;
|
|
171
|
+
const viewpoint = diagram.viewpointId && diagram.viewpointId !== '__model'
|
|
172
|
+
? diagram.viewpointId
|
|
173
|
+
: exemplar.attributes?.viewpointDefinition;
|
|
174
|
+
const group = exemplar.attributes?.group;
|
|
175
|
+
// A screen layout is named for the screen it depicts — the existing
|
|
176
|
+
// convention, and it reads well because there is one per screen. Any other
|
|
177
|
+
// kind is named for the view; calling a sequence view `…ScreenLayout` would
|
|
178
|
+
// simply be wrong.
|
|
179
|
+
const camel = String(diagram.name).replace(/[^A-Za-z0-9]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));
|
|
180
|
+
const preferred = derived.def === 'MemoScreenLayoutView' && primary
|
|
181
|
+
? `${primary.id}Layout`
|
|
182
|
+
: camel.charAt(0).toLowerCase() + camel.slice(1);
|
|
183
|
+
const identifier = freeIdentifier(preferred, model);
|
|
184
|
+
// Emitted at column 0: `insertIntoBody` indents the block one level into the
|
|
185
|
+
// package body it is placed in.
|
|
186
|
+
const body = [
|
|
187
|
+
`view ${identifier} : ${viewDef} {`,
|
|
188
|
+
` expose ${exposePackage}::*;`,
|
|
189
|
+
` @MemoIdentity { :>> providedId = "${escape(diagram.id)}"; }`,
|
|
190
|
+
` attribute :>> name = "${escape(diagram.name)}";`,
|
|
191
|
+
...(!home && derived.declaresKind ? [` attribute :>> viewKind = DiagramViewKind::${diagram.viewKind};`] : []),
|
|
192
|
+
...(group ? [` attribute group = "${escape(group)}";`] : []),
|
|
193
|
+
...(viewpoint ? [` ref :>> viewpointDefinition = ${viewpoint};`] : []),
|
|
194
|
+
'}',
|
|
195
|
+
].join('\n');
|
|
196
|
+
const updated = insertIntoBody(readFileSync(absolute, 'utf8'), target, `${body}\n`);
|
|
197
|
+
const committed = await commitSource(absolute, targetFile, updated);
|
|
198
|
+
if (!committed.success)
|
|
199
|
+
return { success: false, reason: committed.error };
|
|
200
|
+
return { success: true, filePath: targetFile, identifier, created: !!bootstrap };
|
|
201
|
+
}
|
|
202
|
+
/** Every node in a parsed document, so a declaration can be found by name. */
|
|
203
|
+
function allNodes(root) {
|
|
204
|
+
const found = [];
|
|
205
|
+
const stack = [...(root.members ?? [])];
|
|
206
|
+
while (stack.length) {
|
|
207
|
+
const node = stack.pop();
|
|
208
|
+
if (!node || typeof node !== 'object')
|
|
209
|
+
continue;
|
|
210
|
+
found.push(node);
|
|
211
|
+
for (const key of ['members', 'body']) {
|
|
212
|
+
if (Array.isArray(node[key]))
|
|
213
|
+
stack.push(...node[key]);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return found;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Change WHAT a declared view shows, by editing its `expose` members.
|
|
220
|
+
*
|
|
221
|
+
* `diagram:update` carries the element ids a view should contain. A declared
|
|
222
|
+
* view holds no list of ids — it holds `expose` paths, and
|
|
223
|
+
* `resolveViewElementIds` derives the ids from them. So the update is applied
|
|
224
|
+
* where the view actually says what it shows.
|
|
225
|
+
*
|
|
226
|
+
* Exposing the PACKAGE rather than each element is the convention every
|
|
227
|
+
* authored view follows, and it is what makes a screen layout pick up a region
|
|
228
|
+
* added later without another edit.
|
|
229
|
+
*/
|
|
230
|
+
export async function updateViewExpose(projectRoot, model, diagram, elementIds) {
|
|
231
|
+
const view = model.elements[diagram?.elementId ?? ''];
|
|
232
|
+
if (!view?.file)
|
|
233
|
+
return { success: false, reason: 'the view has no source file to edit' };
|
|
234
|
+
const packages = [...new Set((elementIds ?? [])
|
|
235
|
+
.map(id => model.elements[id]?.package)
|
|
236
|
+
.filter((pkg) => !!pkg))];
|
|
237
|
+
if (packages.length === 0) {
|
|
238
|
+
return { success: false, reason: 'none of those elements belongs to a package that could be exposed' };
|
|
239
|
+
}
|
|
240
|
+
const absolute = resolve(projectRoot, view.file);
|
|
241
|
+
if (!existsSync(absolute))
|
|
242
|
+
return { success: false, reason: `${view.file} does not exist` };
|
|
243
|
+
const source = readFileSync(absolute, 'utf8');
|
|
244
|
+
const parsed = await parseText(source);
|
|
245
|
+
if (parsed.errors.length) {
|
|
246
|
+
return { success: false, reason: `${view.file} does not parse (${parsed.errors[0].message})` };
|
|
247
|
+
}
|
|
248
|
+
const node = allNodes(parsed.document.parseResult.value)
|
|
249
|
+
.find(candidate => candidate.name === view.id && candidate.$cstNode);
|
|
250
|
+
if (!node)
|
|
251
|
+
return { success: false, reason: `${view.id} was not found in ${view.file}` };
|
|
252
|
+
const cst = node.$cstNode;
|
|
253
|
+
const declaration = source.slice(cst.offset, cst.offset + cst.length);
|
|
254
|
+
const indent = ' '.repeat((cst.offset - (source.lastIndexOf('\n', cst.offset - 1) + 1)) + 4);
|
|
255
|
+
const exposeLines = packages.map(pkg => `${indent}expose ${pkg}::*;`).join('\n');
|
|
256
|
+
// Drop the existing expose members, then re-state the set just inside the
|
|
257
|
+
// opening brace, where every authored view puts them.
|
|
258
|
+
const withoutExpose = declaration.replace(/^[ \t]*expose\s+[^;]+;[ \t]*\r?\n/gm, '');
|
|
259
|
+
const brace = withoutExpose.indexOf('{');
|
|
260
|
+
if (brace < 0)
|
|
261
|
+
return { success: false, reason: `${view.id} has no body to expose into` };
|
|
262
|
+
const rewritten = `${withoutExpose.slice(0, brace + 1)}\n${exposeLines}${withoutExpose.slice(brace + 1)}`;
|
|
263
|
+
const updated = source.slice(0, cst.offset) + rewritten + source.slice(cst.offset + cst.length);
|
|
264
|
+
const committed = await commitSource(absolute, view.file, updated);
|
|
265
|
+
if (!committed.success)
|
|
266
|
+
return { success: false, reason: committed.error };
|
|
267
|
+
return { success: true, filePath: view.file, exposed: packages };
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=view-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-writer.js","sourceRoot":"","sources":["../../src/server/view-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtin-rules.d.ts","sourceRoot":"","sources":["../../src/validator/builtin-rules.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,8CAA8C;IAC9C,SAAS,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC;IACjD,2EAA2E;IAC3E,UAAU,EAAE,KAAK,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,
|
|
1
|
+
{"version":3,"file":"builtin-rules.d.ts","sourceRoot":"","sources":["../../src/validator/builtin-rules.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,8CAA8C;IAC9C,SAAS,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC;IACjD,2EAA2E;IAC3E,UAAU,EAAE,KAAK,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAoC/C,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAAuC,CAAC"}
|
|
@@ -41,6 +41,11 @@ export const BUILTIN_RULES = [
|
|
|
41
41
|
// relationship in the first place.
|
|
42
42
|
description: 'A flow\u2019s payload matches an output parameter at its source and an input parameter at its target.',
|
|
43
43
|
},
|
|
44
|
+
{
|
|
45
|
+
id: 'XR-001', name: 'ReferenceResolvesRule', validator: 'behavior', severity: 'error',
|
|
46
|
+
tailorable: false,
|
|
47
|
+
description: 'A qualified reference resolves to an element the named package declares or re-exports.',
|
|
48
|
+
},
|
|
44
49
|
{
|
|
45
50
|
id: 'VW-001', name: 'ViewExposesContentRule', validator: 'views', severity: 'warning',
|
|
46
51
|
tailorable: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtin-rules.js","sourceRoot":"","sources":["../../src/validator/builtin-rules.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,EAAE;AACF,gFAAgF;AAChF,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,uCAAuC;AACvC,EAAE;AACF,qEAAqE;AACrE,+EAA+E;AAC/E,wEAAwE;AACxE,2DAA2D;AAC3D,EAAE;AACF,6EAA6E;AAC7E,yEAAyE;AACzE,gFAAgF;AAChF,8DAA8D;AAC9D,EAAE;AACF,+EAA+E;AAC/E,yEAAyE;AACzE,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,+DAA+D;AAC/D,gFAAgF;AAgBhF,MAAM,CAAC,MAAM,aAAa,GAA2B;IACjD,2EAA2E;IAC3E,mEAAmE;IACnE,uEAAuE;IACvE,yEAAyE;IACzE,0EAA0E;IAC1E,yCAAyC;IACzC;QACI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,kCAAkC,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO;QAChG,UAAU,EAAE,KAAK;QACjB,uEAAuE;QACvE,wEAAwE;QACxE,wEAAwE;QACxE,mCAAmC;QACnC,WAAW,EAAE,uGAAuG;KACvH;IACD;QACI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS;QACrF,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,4CAA4C;KAC5D;IACD;QACI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS;QACjF,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,yDAAyD;KACzE;IACD;QACI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,6BAA6B,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;QACxF,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,wEAAwE;KACxF;CACJ,CAAC;AAEF,kDAAkD;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAsB,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"builtin-rules.js","sourceRoot":"","sources":["../../src/validator/builtin-rules.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,EAAE;AACF,gFAAgF;AAChF,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,uCAAuC;AACvC,EAAE;AACF,qEAAqE;AACrE,+EAA+E;AAC/E,wEAAwE;AACxE,2DAA2D;AAC3D,EAAE;AACF,6EAA6E;AAC7E,yEAAyE;AACzE,gFAAgF;AAChF,8DAA8D;AAC9D,EAAE;AACF,+EAA+E;AAC/E,yEAAyE;AACzE,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,+DAA+D;AAC/D,gFAAgF;AAgBhF,MAAM,CAAC,MAAM,aAAa,GAA2B;IACjD,2EAA2E;IAC3E,mEAAmE;IACnE,uEAAuE;IACvE,yEAAyE;IACzE,0EAA0E;IAC1E,yCAAyC;IACzC;QACI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,kCAAkC,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO;QAChG,UAAU,EAAE,KAAK;QACjB,uEAAuE;QACvE,wEAAwE;QACxE,wEAAwE;QACxE,mCAAmC;QACnC,WAAW,EAAE,uGAAuG;KACvH;IACD;QACI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO;QACrF,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,wFAAwF;KACxG;IACD;QACI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS;QACrF,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,4CAA4C;KAC5D;IACD;QACI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS;QACjF,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,yDAAyD;KACzE;IACD;QACI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,6BAA6B,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;QACxF,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,wEAAwE;KACxF;CACJ,CAAC;AAEF,kDAAkD;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAsB,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-engine.d.ts","sourceRoot":"","sources":["../../src/validator/rule-engine.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAa,gBAAgB,EAA2B,MAAM,YAAY,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAK/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D;;;;;;;GAOG;AACH,wBAAgB,aAAa,CACzB,KAAK,EAAE,SAAS,EAChB,iBAAiB,GAAE,kBAAkB,EAAO,EAC5C,YAAY,CAAC,EAAE,YAAY,EAC3B,cAAc,CAAC,EAAE,aAAa,EAAE;AAChC,oEAAoE;AACpE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,sBAAsB,EAAE,WAAW,KAAK,OAAO,GAC3E,gBAAgB,
|
|
1
|
+
{"version":3,"file":"rule-engine.d.ts","sourceRoot":"","sources":["../../src/validator/rule-engine.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAa,gBAAgB,EAA2B,MAAM,YAAY,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAK/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D;;;;;;;GAOG;AACH,wBAAgB,aAAa,CACzB,KAAK,EAAE,SAAS,EAChB,iBAAiB,GAAE,kBAAkB,EAAO,EAC5C,YAAY,CAAC,EAAE,YAAY,EAC3B,cAAc,CAAC,EAAE,aAAa,EAAE;AAChC,oEAAoE;AACpE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,sBAAsB,EAAE,WAAW,KAAK,OAAO,GAC3E,gBAAgB,CAgFlB"}
|