@memoarchitect/tools 0.11.2 → 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.
@@ -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
- const usage = generateUsage({
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
- updated = spliceIndented(content, located.start, located.end, usage);
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, `${usage}\n`);
132
+ updated = insertIntoBody(content, target, `${buildUsage()}\n`);
119
133
  }
120
134
  else {
121
- updated = appendToLastPackage(content, usage);
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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"}