@memoarchitect/tools 0.4.6 → 0.6.1
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 +8 -5
- package/package.json +3 -3
- package/packages/tools/lib/bin/memo.js +3 -5
- package/packages/tools/lib/bin/memo.js.map +1 -1
- package/packages/tools/lib/browser/index.d.ts +2 -0
- package/packages/tools/lib/browser/index.d.ts.map +1 -1
- package/packages/tools/lib/browser/index.js +2 -0
- package/packages/tools/lib/browser/index.js.map +1 -1
- package/packages/tools/lib/commands/create-package.js +1 -1
- package/packages/tools/lib/commands/dev.d.ts.map +1 -1
- package/packages/tools/lib/commands/dev.js +40 -5
- package/packages/tools/lib/commands/dev.js.map +1 -1
- package/packages/tools/lib/commands/init.d.ts +7 -4
- package/packages/tools/lib/commands/init.d.ts.map +1 -1
- package/packages/tools/lib/commands/init.js +30 -37
- package/packages/tools/lib/commands/init.js.map +1 -1
- package/packages/tools/lib/commands/install.js +1 -1
- package/packages/tools/lib/commands/ontology.js +1 -1
- package/packages/tools/lib/commands/ontology.js.map +1 -1
- package/packages/tools/lib/dhf/document-registry.js +5 -5
- package/packages/tools/lib/dhf/document-registry.js.map +1 -1
- package/packages/tools/lib/dhf/template-engine.js +3 -3
- package/packages/tools/lib/dhf/template-engine.js.map +1 -1
- package/packages/tools/lib/importer/cameo-importer.d.ts.map +1 -1
- package/packages/tools/lib/importer/cameo-importer.js +5 -2
- package/packages/tools/lib/importer/cameo-importer.js.map +1 -1
- package/packages/tools/lib/importer/ea-importer.d.ts +1 -1
- package/packages/tools/lib/importer/ea-importer.d.ts.map +1 -1
- package/packages/tools/lib/importer/ea-importer.js +6 -4
- package/packages/tools/lib/importer/ea-importer.js.map +1 -1
- package/packages/tools/lib/index.d.ts +2 -0
- package/packages/tools/lib/index.d.ts.map +1 -1
- package/packages/tools/lib/index.js +2 -0
- package/packages/tools/lib/index.js.map +1 -1
- package/packages/tools/lib/language/generated/ast.d.ts +409 -42
- package/packages/tools/lib/language/generated/ast.d.ts.map +1 -1
- package/packages/tools/lib/language/generated/ast.js +318 -12
- package/packages/tools/lib/language/generated/ast.js.map +1 -1
- package/packages/tools/lib/language/generated/grammar.d.ts.map +1 -1
- package/packages/tools/lib/language/generated/grammar.js +1732 -513
- package/packages/tools/lib/language/generated/grammar.js.map +1 -1
- package/packages/tools/lib/model/builder.d.ts.map +1 -1
- package/packages/tools/lib/model/builder.js +38 -14
- package/packages/tools/lib/model/builder.js.map +1 -1
- package/packages/tools/lib/model/config.d.ts +11 -1
- package/packages/tools/lib/model/config.d.ts.map +1 -1
- package/packages/tools/lib/model/kind-registry.d.ts +11 -0
- package/packages/tools/lib/model/kind-registry.d.ts.map +1 -1
- package/packages/tools/lib/model/kind-registry.js +33 -7
- package/packages/tools/lib/model/kind-registry.js.map +1 -1
- package/packages/tools/lib/model/layer-resolver.d.ts +10 -0
- package/packages/tools/lib/model/layer-resolver.d.ts.map +1 -1
- package/packages/tools/lib/model/layer-resolver.js +49 -0
- package/packages/tools/lib/model/layer-resolver.js.map +1 -1
- package/packages/tools/lib/model/manifest.d.ts +2 -2
- package/packages/tools/lib/model/manifest.d.ts.map +1 -1
- package/packages/tools/lib/model/manifest.js +3 -2
- package/packages/tools/lib/model/manifest.js.map +1 -1
- package/packages/tools/lib/model/ontology-loader.d.ts +2 -0
- package/packages/tools/lib/model/ontology-loader.d.ts.map +1 -1
- package/packages/tools/lib/model/ontology-loader.js +92 -28
- package/packages/tools/lib/model/ontology-loader.js.map +1 -1
- package/packages/tools/lib/model/parser-utils.d.ts +9 -0
- package/packages/tools/lib/model/parser-utils.d.ts.map +1 -1
- package/packages/tools/lib/model/parser-utils.js +24 -0
- package/packages/tools/lib/model/parser-utils.js.map +1 -1
- package/packages/tools/lib/model/paths.d.ts +0 -2
- package/packages/tools/lib/model/paths.d.ts.map +1 -1
- package/packages/tools/lib/model/paths.js +0 -2
- package/packages/tools/lib/model/paths.js.map +1 -1
- package/packages/tools/lib/model/relationship-legality.d.ts +266 -0
- package/packages/tools/lib/model/relationship-legality.d.ts.map +1 -0
- package/packages/tools/lib/model/relationship-legality.js +391 -0
- package/packages/tools/lib/model/relationship-legality.js.map +1 -0
- package/packages/tools/lib/model/relationship-registry.d.ts +38 -4
- package/packages/tools/lib/model/relationship-registry.d.ts.map +1 -1
- package/packages/tools/lib/model/relationship-registry.js +109 -1
- package/packages/tools/lib/model/relationship-registry.js.map +1 -1
- package/packages/tools/lib/model/semantic.d.ts +42 -0
- package/packages/tools/lib/model/semantic.d.ts.map +1 -1
- package/packages/tools/lib/model/semantic.js +3 -0
- package/packages/tools/lib/model/semantic.js.map +1 -1
- package/packages/tools/lib/model/short-id.js +1 -1
- package/packages/tools/lib/model/short-id.js.map +1 -1
- package/packages/tools/lib/model/source-affinity.d.ts +21 -0
- package/packages/tools/lib/model/source-affinity.d.ts.map +1 -0
- package/packages/tools/lib/model/source-affinity.js +42 -0
- package/packages/tools/lib/model/source-affinity.js.map +1 -0
- package/packages/tools/lib/model/source-graph.d.ts +30 -0
- package/packages/tools/lib/model/source-graph.d.ts.map +1 -0
- package/packages/tools/lib/model/source-graph.js +154 -0
- package/packages/tools/lib/model/source-graph.js.map +1 -0
- package/packages/tools/lib/model/view-kinds.d.ts.map +1 -1
- package/packages/tools/lib/model/view-kinds.js +1 -0
- package/packages/tools/lib/model/view-kinds.js.map +1 -1
- package/packages/tools/lib/operations/project-snapshot.d.ts.map +1 -1
- package/packages/tools/lib/operations/project-snapshot.js +2 -15
- package/packages/tools/lib/operations/project-snapshot.js.map +1 -1
- package/packages/tools/lib/protocol/messages.d.ts +92 -8
- package/packages/tools/lib/protocol/messages.d.ts.map +1 -1
- package/packages/tools/lib/server/dev-server.d.ts +16 -0
- package/packages/tools/lib/server/dev-server.d.ts.map +1 -1
- package/packages/tools/lib/server/dev-server.js +190 -16
- package/packages/tools/lib/server/dev-server.js.map +1 -1
- package/packages/tools/lib/server/file-watcher.d.ts +21 -2
- package/packages/tools/lib/server/file-watcher.d.ts.map +1 -1
- package/packages/tools/lib/server/file-watcher.js +55 -23
- package/packages/tools/lib/server/file-watcher.js.map +1 -1
- package/packages/tools/lib/server/persistor.d.ts +0 -13
- package/packages/tools/lib/server/persistor.d.ts.map +1 -1
- package/packages/tools/lib/server/persistor.js +3 -31
- package/packages/tools/lib/server/persistor.js.map +1 -1
- package/packages/tools/lib/server/relationship-writer.d.ts +104 -0
- package/packages/tools/lib/server/relationship-writer.d.ts.map +1 -0
- package/packages/tools/lib/server/relationship-writer.js +402 -0
- package/packages/tools/lib/server/relationship-writer.js.map +1 -0
- package/packages/tools/lib/server/view-layout-store.d.ts +14 -1
- package/packages/tools/lib/server/view-layout-store.d.ts.map +1 -1
- package/packages/tools/lib/server/view-layout-store.js +63 -11
- package/packages/tools/lib/server/view-layout-store.js.map +1 -1
- package/packages/tools/src/grammar/memo-sysml.langium +102 -18
|
@@ -3,38 +3,72 @@
|
|
|
3
3
|
// Two-scope watchers: project files (hot reload) and ontology files (restart).
|
|
4
4
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
5
5
|
import chokidar from 'chokidar';
|
|
6
|
-
import { extname, relative, resolve, sep } from 'node:path';
|
|
6
|
+
import { extname, isAbsolute, relative, resolve, sep } from 'node:path';
|
|
7
7
|
import { existsSync } from 'node:fs';
|
|
8
8
|
const IGNORED_DIR_NAMES = new Set(['node_modules', '.memo', 'dist', 'lib']);
|
|
9
9
|
function isInIgnoredDir(filePath) {
|
|
10
10
|
return resolve(filePath).split(sep).some(part => IGNORED_DIR_NAMES.has(part));
|
|
11
11
|
}
|
|
12
|
+
/** True when `filePath` is inside `dir` (or is `dir` itself). */
|
|
13
|
+
function isWithin(dir, filePath) {
|
|
14
|
+
const rel = relative(dir, filePath);
|
|
15
|
+
return rel === '' || (rel !== '..' && !rel.startsWith(`..${sep}`) && !isAbsolute(rel));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Debounce a burst of file events into one call, keeping the set of paths seen
|
|
19
|
+
* during the burst. A single save can emit several events, and a branch switch
|
|
20
|
+
* emits hundreds — the caller wants one rebuild and the full list.
|
|
21
|
+
*/
|
|
12
22
|
function makeDebounced(onChange, debounceMs) {
|
|
13
23
|
let timer = null;
|
|
14
|
-
|
|
24
|
+
let pending = new Set();
|
|
25
|
+
return (filePath) => {
|
|
26
|
+
pending.add(filePath);
|
|
15
27
|
if (timer)
|
|
16
28
|
clearTimeout(timer);
|
|
17
29
|
timer = setTimeout(() => {
|
|
18
30
|
timer = null;
|
|
19
|
-
|
|
31
|
+
const files = [...pending].sort();
|
|
32
|
+
pending = new Set();
|
|
33
|
+
onChange(files);
|
|
20
34
|
}, debounceMs);
|
|
21
35
|
};
|
|
22
36
|
}
|
|
23
37
|
/**
|
|
24
38
|
* Watch project source files — triggers hot rebuild.
|
|
25
|
-
*
|
|
39
|
+
*
|
|
40
|
+
* The scope deliberately matches what the build ingests: every project-local
|
|
41
|
+
* `.sysml` file, wherever it sits, plus the per-project YAML config files. A
|
|
42
|
+
* narrower scope (model/ only) leaves views and catalogs outside that directory
|
|
43
|
+
* silently stale, which is exactly the class of bug this watcher exists to
|
|
44
|
+
* prevent.
|
|
45
|
+
*
|
|
46
|
+
* The callback receives the project-relative paths that changed, so callers can
|
|
47
|
+
* tell clients what moved rather than only that something did.
|
|
26
48
|
*/
|
|
27
|
-
export function createProjectWatcher(projectDir, onChange, debounceMs = 300, usePolling = false) {
|
|
28
|
-
const fire = makeDebounced(onChange, debounceMs);
|
|
49
|
+
export function createProjectWatcher(projectDir, onChange, debounceMs = 300, usePolling = false, options = {}) {
|
|
50
|
+
const fire = makeDebounced(onChange, options.debounceMs ?? debounceMs);
|
|
29
51
|
const root = resolve(projectDir);
|
|
30
|
-
const modelRoot = resolve(root, 'model');
|
|
31
52
|
const configFiles = [
|
|
32
53
|
resolve(root, 'memo.rendering.yaml'),
|
|
33
54
|
resolve(root, 'memo.rules.yaml'),
|
|
34
55
|
resolve(root, 'memo.viewpoints.yaml'),
|
|
35
56
|
];
|
|
36
|
-
|
|
37
|
-
|
|
57
|
+
const ontologyRoots = (options.ontologyRoots ?? []).map(dir => resolve(dir));
|
|
58
|
+
/** Whether a change to this path should rebuild the project model. */
|
|
59
|
+
const isProjectSource = (absolute) => {
|
|
60
|
+
if (configFiles.includes(absolute))
|
|
61
|
+
return true;
|
|
62
|
+
if (extname(absolute).toLowerCase() !== '.sysml')
|
|
63
|
+
return false;
|
|
64
|
+
if (isInIgnoredDir(absolute))
|
|
65
|
+
return false;
|
|
66
|
+
if (!isWithin(root, absolute))
|
|
67
|
+
return false;
|
|
68
|
+
return !ontologyRoots.some(ontologyRoot => isWithin(ontologyRoot, absolute));
|
|
69
|
+
};
|
|
70
|
+
// Chokidar 4 removed glob support. Watch the project root and filter events
|
|
71
|
+
// instead of passing model/**/*.sysml (which silently watches none).
|
|
38
72
|
const watcher = chokidar.watch(root, {
|
|
39
73
|
ignored: (filePath, stats) => {
|
|
40
74
|
const absolute = resolve(filePath);
|
|
@@ -42,25 +76,23 @@ export function createProjectWatcher(projectDir, onChange, debounceMs = 300, use
|
|
|
42
76
|
return false;
|
|
43
77
|
if (isInIgnoredDir(absolute))
|
|
44
78
|
return true;
|
|
45
|
-
|
|
79
|
+
// Directories must stay watchable — the files under them are what
|
|
80
|
+
// gets filtered, and a directory has no extension to judge by.
|
|
81
|
+
if (stats && !stats.isFile()) {
|
|
82
|
+
return ontologyRoots.some(ontologyRoot => isWithin(ontologyRoot, absolute));
|
|
83
|
+
}
|
|
84
|
+
if (!stats)
|
|
46
85
|
return false;
|
|
47
|
-
|
|
48
|
-
const inModel = relToModel !== '..' && !relToModel.startsWith(`..${sep}`);
|
|
49
|
-
if (!inModel)
|
|
50
|
-
return true;
|
|
51
|
-
return stats?.isFile() === true && extname(absolute).toLowerCase() !== '.sysml';
|
|
86
|
+
return !isProjectSource(absolute);
|
|
52
87
|
},
|
|
53
88
|
persistent: true,
|
|
54
89
|
ignoreInitial: true,
|
|
55
|
-
usePolling,
|
|
90
|
+
usePolling: options.usePolling ?? usePolling,
|
|
56
91
|
});
|
|
57
92
|
watcher.on('all', (_event, filePath) => {
|
|
58
93
|
const absolute = resolve(filePath);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if ((inModel && extname(absolute).toLowerCase() === '.sysml') || configFiles.includes(absolute)) {
|
|
62
|
-
fire();
|
|
63
|
-
}
|
|
94
|
+
if (isProjectSource(absolute))
|
|
95
|
+
fire(relative(root, absolute));
|
|
64
96
|
});
|
|
65
97
|
return {
|
|
66
98
|
close() { watcher.close(); },
|
|
@@ -118,7 +150,7 @@ export function createOntologyWatcher(projectDir, ontologyRoots, onChange, debou
|
|
|
118
150
|
* Kept for backward compatibility.
|
|
119
151
|
*/
|
|
120
152
|
export function createFileWatcher(projectDir, onChange, debounceMs = 300) {
|
|
121
|
-
const fire = makeDebounced(onChange, debounceMs);
|
|
153
|
+
const fire = makeDebounced(() => onChange(), debounceMs);
|
|
122
154
|
const watchedConfigNames = new Set([
|
|
123
155
|
'memo.config.yaml', 'memo.config.yml', 'memo.package.yaml',
|
|
124
156
|
'memo.rendering.yaml', 'memo.rules.yaml', 'memo.viewpoints.yaml',
|
|
@@ -131,7 +163,7 @@ export function createFileWatcher(projectDir, onChange, debounceMs = 300) {
|
|
|
131
163
|
watcher.on('all', (_event, filePath) => {
|
|
132
164
|
const name = filePath.split(sep).at(-1) ?? '';
|
|
133
165
|
if (extname(filePath).toLowerCase() === '.sysml' || watchedConfigNames.has(name))
|
|
134
|
-
fire();
|
|
166
|
+
fire(filePath);
|
|
135
167
|
});
|
|
136
168
|
return {
|
|
137
169
|
close() { watcher.close(); },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-watcher.js","sourceRoot":"","sources":["../../src/server/file-watcher.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAEhF,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"file-watcher.js","sourceRoot":"","sources":["../../src/server/file-watcher.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAEhF,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAkBrC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAE5E,SAAS,cAAc,CAAC,QAAgB;IACpC,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,iEAAiE;AACjE,SAAS,QAAQ,CAAC,GAAW,EAAE,QAAgB;IAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACpC,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAClB,QAA0D,EAC1D,UAAkB;IAElB,IAAI,KAAK,GAAyC,IAAI,CAAC;IACvD,IAAI,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,OAAO,CAAC,QAAgB,EAAE,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACpB,KAAK,GAAG,IAAI,CAAC;YACb,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;YACpB,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC,EAAE,UAAU,CAAC,CAAC;IACnB,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAChC,UAAkB,EAClB,QAA0D,EAC1D,aAAqB,GAAG,EACxB,aAAsB,KAAK,EAC3B,UAAiC,EAAE;IAEnC,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC;IAEvE,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,WAAW,GAAG;QAChB,OAAO,CAAC,IAAI,EAAE,qBAAqB,CAAC;QACpC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC;QAChC,OAAO,CAAC,IAAI,EAAE,sBAAsB,CAAC;KACxC,CAAC;IACF,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAE7E,sEAAsE;IACtE,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAW,EAAE;QAClD,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QAChD,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC/D,IAAI,cAAc,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5C,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC;IAEF,4EAA4E;IAC5E,qEAAqE;IACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE;QACjC,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YACpC,IAAI,cAAc,CAAC,QAAQ,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC1C,kEAAkE;YAClE,+DAA+D;YAC/D,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC3B,OAAO,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;YAChF,CAAC;YACD,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;YACzB,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QACD,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,UAAU;KAC/C,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;QACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,eAAe,CAAC,QAAQ,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,OAAO;QACH,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAC/B,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACjC,UAAkB,EAClB,aAAuB,EACvB,QAAuD,EACvD,aAAqB,GAAG;IAExB,IAAI,KAAK,GAAyC,IAAI,CAAC;IACvD,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,MAAM,IAAI,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC9B,IAAI,CAAC,WAAW;YAAE,WAAW,GAAG,QAAQ,CAAC;QACzC,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACpB,KAAK,GAAG,IAAI,CAAC;YACb,MAAM,CAAC,GAAG,WAAW,CAAC;YACtB,WAAW,GAAG,EAAE,CAAC;YACjB,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC,EAAE,UAAU,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAa;QACpB,wDAAwD;QACxD,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;YACtB,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC;YAClC,OAAO,CAAC,IAAI,EAAE,qBAAqB,CAAC;SACvC,CAAC;QACF,mCAAmC;QACnC,OAAO,CAAC,UAAU,EAAE,kBAAkB,CAAC;QACvC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC;QACtC,OAAO,CAAC,UAAU,EAAE,mBAAmB,CAAC;QACxC,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,0BAA0B,CAAC;KAC3D,CAAC;IAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;QACrD,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;QAC7C,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;KACtB,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAExD,OAAO;QACH,KAAK;YACD,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;KACJ,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC7B,UAAkB,EAClB,QAAoC,EACpC,aAAqB,GAAG;IAExB,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;IAEzD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;QAC/B,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB;QAC1D,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB;KACnE,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QAChD,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;QAC7C,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;KACtB,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;IAEH,OAAO;QACH,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAC/B,CAAC;AACN,CAAC"}
|
|
@@ -9,17 +9,4 @@ export declare function saveElementToFile(cwd: string, element: any): {
|
|
|
9
9
|
filePath: string;
|
|
10
10
|
error?: string;
|
|
11
11
|
};
|
|
12
|
-
/**
|
|
13
|
-
* Appends a typed relationship connection to model/relationships.sysml.
|
|
14
|
-
* Writes: connection : RelType connect sourceId to targetId;
|
|
15
|
-
*/
|
|
16
|
-
export declare function saveRelationshipToFile(cwd: string, rel: {
|
|
17
|
-
sourceId: string;
|
|
18
|
-
targetId: string;
|
|
19
|
-
type: string;
|
|
20
|
-
}): {
|
|
21
|
-
success: boolean;
|
|
22
|
-
filePath: string;
|
|
23
|
-
error?: string;
|
|
24
|
-
};
|
|
25
12
|
//# sourceMappingURL=persistor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistor.d.ts","sourceRoot":"","sources":["../../src/server/persistor.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAmEnH
|
|
1
|
+
{"version":3,"file":"persistor.d.ts","sourceRoot":"","sources":["../../src/server/persistor.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAmEnH"}
|
|
@@ -66,35 +66,7 @@ export function saveElementToFile(cwd, element) {
|
|
|
66
66
|
return { success: false, filePath: relativePath, error: String(e) };
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
*/
|
|
73
|
-
export function saveRelationshipToFile(cwd, rel) {
|
|
74
|
-
const relativePath = 'model/relationships.sysml';
|
|
75
|
-
const filePath = resolve(cwd, relativePath);
|
|
76
|
-
const dir = dirname(filePath);
|
|
77
|
-
if (!existsSync(dir))
|
|
78
|
-
mkdirSync(dir, { recursive: true });
|
|
79
|
-
const typeName = rel.type.charAt(0).toUpperCase() + rel.type.slice(1);
|
|
80
|
-
const line = ` connection : ${typeName} connect ${rel.sourceId} to ${rel.targetId};\n`;
|
|
81
|
-
try {
|
|
82
|
-
if (!existsSync(filePath)) {
|
|
83
|
-
writeFileSync(filePath, `package relationships {\n${line}}\n`, 'utf8');
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
// Insert before the last closing brace
|
|
87
|
-
const content = readFileSync(filePath, 'utf8');
|
|
88
|
-
const lastBrace = content.lastIndexOf('}');
|
|
89
|
-
const newContent = lastBrace !== -1
|
|
90
|
-
? content.slice(0, lastBrace) + line + content.slice(lastBrace)
|
|
91
|
-
: content + line;
|
|
92
|
-
writeFileSync(filePath, newContent, 'utf8');
|
|
93
|
-
}
|
|
94
|
-
return { success: true, filePath: relativePath };
|
|
95
|
-
}
|
|
96
|
-
catch (e) {
|
|
97
|
-
return { success: false, filePath: relativePath, error: String(e) };
|
|
98
|
-
}
|
|
99
|
-
}
|
|
69
|
+
// Relationship persistence lives in ./relationship-writer.ts. It replaces the
|
|
70
|
+
// blind append this module used to do: relationships now go through ontology
|
|
71
|
+
// validation, a deterministic ownership policy, and CST-aware source editing.
|
|
100
72
|
//# sourceMappingURL=persistor.js.map
|
|
@@ -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,104 @@
|
|
|
1
|
+
import type { MemoModelDTO, MemoRelationship } from '../model/semantic.js';
|
|
2
|
+
import type { RelationshipCreateRequest, RelationshipDefinitionDTO } from '../model/relationship-legality.js';
|
|
3
|
+
/** Default file used when the project has no better home for a relationship. */
|
|
4
|
+
export declare const CANONICAL_RELATIONSHIP_FILE = "model/relationships.sysml";
|
|
5
|
+
/** Directory segments holding view/presentation SysML — never a relationship home. */
|
|
6
|
+
export declare const DEFAULT_PRESENTATION_DIRS: string[];
|
|
7
|
+
/** Filenames a package uses to collect its relationships. */
|
|
8
|
+
export declare const DEFAULT_RELATIONSHIP_FILE_PATTERN: RegExp;
|
|
9
|
+
export interface RelationshipWriterOptions {
|
|
10
|
+
/** Absolute project root. Nothing outside it is ever written. */
|
|
11
|
+
projectRoot: string;
|
|
12
|
+
/**
|
|
13
|
+
* Per-package designated relationship files, project-relative.
|
|
14
|
+
* Keyed by package qualified name, from project configuration.
|
|
15
|
+
*/
|
|
16
|
+
designatedFiles?: Record<string, string>;
|
|
17
|
+
/** Configured canonical relationship file, project-relative. */
|
|
18
|
+
canonicalFile?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Absolute roots of installed ontology/library packages. Files under these
|
|
21
|
+
* are read-only content and are never modified.
|
|
22
|
+
*/
|
|
23
|
+
ontologyRoots?: string[];
|
|
24
|
+
/**
|
|
25
|
+
* Directory segments that hold view/presentation SysML. A relationship is a
|
|
26
|
+
* model fact and is never written into one.
|
|
27
|
+
*/
|
|
28
|
+
presentationDirs?: string[];
|
|
29
|
+
/** Filenames treated as a package's relationship collection. */
|
|
30
|
+
relationshipFilePattern?: RegExp;
|
|
31
|
+
}
|
|
32
|
+
/** Why a particular file was chosen, for logging and for the UI to show. */
|
|
33
|
+
export type PlacementReason = 'requested' | 'designated-package-file' | 'common-package-file' | 'source-element-file' | 'canonical-file' | 'canonical-file-created';
|
|
34
|
+
export interface RelationshipPlacement {
|
|
35
|
+
/** Project-relative .sysml path that will own the relationship. */
|
|
36
|
+
file: string;
|
|
37
|
+
reason: PlacementReason;
|
|
38
|
+
/** True when the file does not exist yet and will be created. */
|
|
39
|
+
willCreate: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface RelationshipWriteResult {
|
|
42
|
+
success: boolean;
|
|
43
|
+
/** Project-relative file actually written. */
|
|
44
|
+
sourceFile?: string;
|
|
45
|
+
/** Stable ID (the connection usage name) of the created relationship. */
|
|
46
|
+
relationshipId?: string;
|
|
47
|
+
/** The exact declaration text inserted. */
|
|
48
|
+
declaration?: string;
|
|
49
|
+
placementReason?: PlacementReason;
|
|
50
|
+
error?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface RelationshipRemoveResult {
|
|
53
|
+
success: boolean;
|
|
54
|
+
sourceFile?: string;
|
|
55
|
+
/** The declaration removed, so the caller can offer an exact undo. */
|
|
56
|
+
removedDeclaration?: string;
|
|
57
|
+
error?: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Whether a project-relative path is a legal home for a model relationship.
|
|
61
|
+
*
|
|
62
|
+
* Rejects anything outside the project, non-.sysml files, installed ontology
|
|
63
|
+
* content, and the diagram presentation section. Symlinks are resolved before
|
|
64
|
+
* the containment check so an in-tree link cannot escape the project.
|
|
65
|
+
*/
|
|
66
|
+
export declare function isWritableRelationshipFile(relativePath: string, options: RelationshipWriterOptions): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Choose the file that will own a new relationship, deterministically:
|
|
69
|
+
*
|
|
70
|
+
* 1. the file the request explicitly asked for
|
|
71
|
+
* 2. the designated relationship file of the active model package
|
|
72
|
+
* 3. an existing relationships file in the nearest common package of both
|
|
73
|
+
* endpoints, else the source element's own file within that package
|
|
74
|
+
* 4. the configured canonical relationship file, when it already exists
|
|
75
|
+
* 5. the canonical file, created only because nothing above was suitable
|
|
76
|
+
*
|
|
77
|
+
* Every candidate passes isWritableRelationshipFile before it is considered.
|
|
78
|
+
*/
|
|
79
|
+
export declare function resolveRelationshipPlacement(request: Pick<RelationshipCreateRequest, 'sourceId' | 'targetId' | 'owningFile'>, model: Pick<MemoModelDTO, 'elements'>, options: RelationshipWriterOptions): RelationshipPlacement;
|
|
80
|
+
/**
|
|
81
|
+
* A stable, explicit relationship ID. Named connection usages are what make a
|
|
82
|
+
* relationship addressable for inspection, deletion, and deep links, so every
|
|
83
|
+
* authored relationship gets one.
|
|
84
|
+
*/
|
|
85
|
+
export declare function generateRelationshipId(type: string, sourceId: string, targetId: string, taken: Iterable<string>): string;
|
|
86
|
+
/** Render the typed connection usage for a relationship. */
|
|
87
|
+
export declare function generateRelationshipDeclaration(id: string, definition: RelationshipDefinitionDTO, sourceId: string, targetId: string): string;
|
|
88
|
+
/**
|
|
89
|
+
* Write a relationship into project SysML.
|
|
90
|
+
*
|
|
91
|
+
* The declaration is inserted inside the target package by source offset, the
|
|
92
|
+
* whole updated file is reparsed, and the write is abandoned if the result does
|
|
93
|
+
* not parse or does not contain the new connection.
|
|
94
|
+
*/
|
|
95
|
+
export declare function writeRelationship(request: RelationshipCreateRequest, definition: RelationshipDefinitionDTO, model: Pick<MemoModelDTO, 'elements' | 'relationships'>, options: RelationshipWriterOptions): Promise<RelationshipWriteResult>;
|
|
96
|
+
/**
|
|
97
|
+
* Remove exactly one connection usage from its owning file.
|
|
98
|
+
*
|
|
99
|
+
* Only the declaration's own source range is cut — together with the whitespace
|
|
100
|
+
* on its line — so neighbouring comments and declarations are preserved. Both
|
|
101
|
+
* endpoint elements are left completely untouched.
|
|
102
|
+
*/
|
|
103
|
+
export declare function removeRelationship(relationship: Pick<MemoRelationship, 'id' | 'file' | 'named'>, options: RelationshipWriterOptions): Promise<RelationshipRemoveResult>;
|
|
104
|
+
//# sourceMappingURL=relationship-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationship-writer.d.ts","sourceRoot":"","sources":["../../src/server/relationship-writer.ts"],"names":[],"mappings":"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"}
|