@stocksharp/diagram 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +30 -0
- package/NOTICE +21 -0
- package/README.md +346 -0
- package/dist/esm/canvas-renderer.js +3226 -0
- package/dist/esm/canvas-renderer.js.map +1 -0
- package/dist/esm/core/action-registry.js +35 -0
- package/dist/esm/core/action-registry.js.map +1 -0
- package/dist/esm/core/document.js +350 -0
- package/dist/esm/core/document.js.map +1 -0
- package/dist/esm/core/history.js +136 -0
- package/dist/esm/core/history.js.map +1 -0
- package/dist/esm/core/model.js +2 -0
- package/dist/esm/core/model.js.map +1 -0
- package/dist/esm/core/state.js +73 -0
- package/dist/esm/core/state.js.map +1 -0
- package/dist/esm/core/view-state.js +70 -0
- package/dist/esm/core/view-state.js.map +1 -0
- package/dist/esm/diagram/api.js +2 -0
- package/dist/esm/diagram/api.js.map +1 -0
- package/dist/esm/diagram/catalog.js +45 -0
- package/dist/esm/diagram/catalog.js.map +1 -0
- package/dist/esm/diagram/event-emitter.js +42 -0
- package/dist/esm/diagram/event-emitter.js.map +1 -0
- package/dist/esm/diagram/palette.js +269 -0
- package/dist/esm/diagram/palette.js.map +1 -0
- package/dist/esm/diagram/stocksharp-diagram.js +784 -0
- package/dist/esm/diagram/stocksharp-diagram.js.map +1 -0
- package/dist/esm/diagram/types.js +105 -0
- package/dist/esm/diagram/types.js.map +1 -0
- package/dist/esm/embed.js +398 -0
- package/dist/esm/embed.js.map +1 -0
- package/dist/esm/i18n.js +12 -0
- package/dist/esm/i18n.js.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/ssdiagram.js +5141 -0
- package/dist/ssdiagram.js.map +7 -0
- package/dist/types/canvas-renderer.d.ts +512 -0
- package/dist/types/canvas-renderer.d.ts.map +1 -0
- package/dist/types/core/action-registry.d.ts +18 -0
- package/dist/types/core/action-registry.d.ts.map +1 -0
- package/dist/types/core/document.d.ts +12 -0
- package/dist/types/core/document.d.ts.map +1 -0
- package/dist/types/core/history.d.ts +33 -0
- package/dist/types/core/history.d.ts.map +1 -0
- package/dist/types/core/model.d.ts +85 -0
- package/dist/types/core/model.d.ts.map +1 -0
- package/dist/types/core/state.d.ts +68 -0
- package/dist/types/core/state.d.ts.map +1 -0
- package/dist/types/core/view-state.d.ts +14 -0
- package/dist/types/core/view-state.d.ts.map +1 -0
- package/dist/types/diagram/api.d.ts +213 -0
- package/dist/types/diagram/api.d.ts.map +1 -0
- package/dist/types/diagram/catalog.d.ts +19 -0
- package/dist/types/diagram/catalog.d.ts.map +1 -0
- package/dist/types/diagram/event-emitter.d.ts +9 -0
- package/dist/types/diagram/event-emitter.d.ts.map +1 -0
- package/dist/types/diagram/palette.d.ts +63 -0
- package/dist/types/diagram/palette.d.ts.map +1 -0
- package/dist/types/diagram/stocksharp-diagram.d.ts +157 -0
- package/dist/types/diagram/stocksharp-diagram.d.ts.map +1 -0
- package/dist/types/diagram/types.d.ts +171 -0
- package/dist/types/diagram/types.d.ts.map +1 -0
- package/dist/types/embed.d.ts +35 -0
- package/dist/types/embed.d.ts.map +1 -0
- package/dist/types/i18n.d.ts +167 -0
- package/dist/types/i18n.d.ts.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +126 -0
- package/sample.png +0 -0
- package/src/canvas-renderer.ts +3249 -0
- package/src/core/action-registry.ts +46 -0
- package/src/core/document.ts +387 -0
- package/src/core/history.ts +154 -0
- package/src/core/model.ts +99 -0
- package/src/core/state.ts +148 -0
- package/src/core/view-state.ts +82 -0
- package/src/diagram/api.ts +257 -0
- package/src/diagram/catalog.ts +55 -0
- package/src/diagram/event-emitter.ts +44 -0
- package/src/diagram/palette.ts +312 -0
- package/src/diagram/stocksharp-diagram.ts +945 -0
- package/src/diagram/types.ts +332 -0
- package/src/embed.ts +508 -0
- package/src/i18n.ts +210 -0
- package/src/index.ts +171 -0
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import { DIAGRAM_DOCUMENT_VERSION, } from './model.js';
|
|
2
|
+
export { DIAGRAM_DOCUMENT_VERSION } from './model.js';
|
|
3
|
+
export class DiagramDocumentError extends Error {
|
|
4
|
+
constructor(message, path = '$') {
|
|
5
|
+
super(`${path}: ${message}`);
|
|
6
|
+
this.path = path;
|
|
7
|
+
this.name = 'DiagramDocumentError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function createDiagramDocument(input = {}) {
|
|
11
|
+
const nodes = (input.nodes ?? []).map((node, index) => normalizeNode(node, `$.nodes[${index}]`));
|
|
12
|
+
const usedLinkIds = new Set();
|
|
13
|
+
for (let index = 0; index < (input.links ?? []).length; index++) {
|
|
14
|
+
const id = input.links?.[index].id;
|
|
15
|
+
if (id === undefined)
|
|
16
|
+
continue;
|
|
17
|
+
requireIdentifier(id, `$.links[${index}].id`);
|
|
18
|
+
if (usedLinkIds.has(id)) {
|
|
19
|
+
throw new DiagramDocumentError(`duplicate link id "${id}"`, `$.links[${index}].id`);
|
|
20
|
+
}
|
|
21
|
+
usedLinkIds.add(id);
|
|
22
|
+
}
|
|
23
|
+
let sequence = 1;
|
|
24
|
+
const links = (input.links ?? []).map((link, index) => {
|
|
25
|
+
let id = link.id;
|
|
26
|
+
if (id === undefined) {
|
|
27
|
+
do
|
|
28
|
+
id = `link_${sequence++}`;
|
|
29
|
+
while (usedLinkIds.has(id));
|
|
30
|
+
usedLinkIds.add(id);
|
|
31
|
+
}
|
|
32
|
+
return normalizeLink({ ...link, id }, `$.links[${index}]`);
|
|
33
|
+
});
|
|
34
|
+
const document = {
|
|
35
|
+
version: DIAGRAM_DOCUMENT_VERSION,
|
|
36
|
+
nodes,
|
|
37
|
+
links,
|
|
38
|
+
metadata: cloneJsonObject(input.metadata ?? {}, '$.metadata'),
|
|
39
|
+
};
|
|
40
|
+
validateDocument(document);
|
|
41
|
+
return document;
|
|
42
|
+
}
|
|
43
|
+
export function cloneDiagramDocument(document) {
|
|
44
|
+
return parseDiagramDocument(document);
|
|
45
|
+
}
|
|
46
|
+
export function serializeDiagramDocument(document, space) {
|
|
47
|
+
return JSON.stringify(parseDiagramDocument(document), null, space);
|
|
48
|
+
}
|
|
49
|
+
export function parseDiagramDocument(source) {
|
|
50
|
+
let value = source;
|
|
51
|
+
if (typeof source === 'string') {
|
|
52
|
+
try {
|
|
53
|
+
value = JSON.parse(source);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
const reason = error instanceof Error ? error.message : 'invalid JSON';
|
|
57
|
+
throw new DiagramDocumentError(reason);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const root = requireObject(value, '$');
|
|
61
|
+
const version = requireNumber(root.version, '$.version');
|
|
62
|
+
if (version !== DIAGRAM_DOCUMENT_VERSION) {
|
|
63
|
+
throw new DiagramDocumentError(`unsupported document version ${version}`, '$.version');
|
|
64
|
+
}
|
|
65
|
+
const document = {
|
|
66
|
+
version: DIAGRAM_DOCUMENT_VERSION,
|
|
67
|
+
nodes: requireArray(root.nodes, '$.nodes').map((node, index) => parseNode(node, `$.nodes[${index}]`)),
|
|
68
|
+
links: requireArray(root.links, '$.links').map((link, index) => parseLink(link, `$.links[${index}]`)),
|
|
69
|
+
metadata: cloneJsonObject(root.metadata, '$.metadata'),
|
|
70
|
+
};
|
|
71
|
+
validateDocument(document);
|
|
72
|
+
return document;
|
|
73
|
+
}
|
|
74
|
+
function normalizeNode(input, path) {
|
|
75
|
+
const id = requireIdentifier(input.id, `${path}.id`);
|
|
76
|
+
return {
|
|
77
|
+
id,
|
|
78
|
+
typeId: requireIdentifier(input.typeId ?? id, `${path}.typeId`),
|
|
79
|
+
name: requireString(input.name, `${path}.name`),
|
|
80
|
+
description: requireString(input.description ?? '', `${path}.description`),
|
|
81
|
+
groupName: requireString(input.groupName ?? 'Common', `${path}.groupName`),
|
|
82
|
+
x: requireFiniteNumber(input.x ?? 0, `${path}.x`),
|
|
83
|
+
y: requireFiniteNumber(input.y ?? 0, `${path}.y`),
|
|
84
|
+
color: requireString(input.color ?? '#d7d7d7', `${path}.color`),
|
|
85
|
+
border: requireString(input.border ?? '#8c8c8c', `${path}.border`),
|
|
86
|
+
icon: requireString(input.icon ?? '', `${path}.icon`),
|
|
87
|
+
message: requireString(input.message ?? '', `${path}.message`),
|
|
88
|
+
openAction: requireString(input.openAction ?? '', `${path}.openAction`),
|
|
89
|
+
inPorts: (input.inPorts ?? []).map((port, index) => normalizePort(port, `${path}.inPorts[${index}]`)),
|
|
90
|
+
outPorts: (input.outPorts ?? []).map((port, index) => normalizePort(port, `${path}.outPorts[${index}]`)),
|
|
91
|
+
parameters: (input.parameters ?? []).map((parameter, index) => normalizeParameter(parameter, `${path}.parameters[${index}]`)),
|
|
92
|
+
paramValues: cloneStringRecord(input.paramValues ?? {}, `${path}.paramValues`),
|
|
93
|
+
metadata: cloneJsonObject(input.metadata ?? {}, `${path}.metadata`),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function normalizePort(input, path) {
|
|
97
|
+
return {
|
|
98
|
+
id: requireIdentifier(input.id, `${path}.id`),
|
|
99
|
+
name: requireString(input.name, `${path}.name`),
|
|
100
|
+
description: requireString(input.description ?? '', `${path}.description`),
|
|
101
|
+
type: requireString(input.type ?? '', `${path}.type`),
|
|
102
|
+
maxLinks: requireNonNegativeInteger(input.maxLinks ?? 0, `${path}.maxLinks`),
|
|
103
|
+
availableTypes: (input.availableTypes ?? []).map((type, index) => requireString(type, `${path}.availableTypes[${index}]`)),
|
|
104
|
+
isDynamic: requireBoolean(input.isDynamic ?? false, `${path}.isDynamic`),
|
|
105
|
+
dynamicMode: requireString(input.dynamicMode ?? '', `${path}.dynamicMode`),
|
|
106
|
+
isSibling: requireBoolean(input.isSibling ?? false, `${path}.isSibling`),
|
|
107
|
+
metadata: cloneJsonObject(input.metadata ?? {}, `${path}.metadata`),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function normalizeParameter(input, path) {
|
|
111
|
+
return {
|
|
112
|
+
name: requireIdentifier(input.name, `${path}.name`),
|
|
113
|
+
displayName: requireString(input.displayName, `${path}.displayName`),
|
|
114
|
+
description: requireString(input.description, `${path}.description`),
|
|
115
|
+
type: requireString(input.type, `${path}.type`),
|
|
116
|
+
defaultValue: requireString(input.defaultValue, `${path}.defaultValue`),
|
|
117
|
+
options: requireArray(input.options, `${path}.options`).map((option, index) => requireString(option, `${path}.options[${index}]`)),
|
|
118
|
+
min: requireNullableFiniteNumber(input.min, `${path}.min`),
|
|
119
|
+
max: requireNullableFiniteNumber(input.max, `${path}.max`),
|
|
120
|
+
displayOrder: requireFiniteNumber(input.displayOrder, `${path}.displayOrder`),
|
|
121
|
+
category: requireString(input.category, `${path}.category`),
|
|
122
|
+
isBasic: requireBoolean(input.isBasic, `${path}.isBasic`),
|
|
123
|
+
editorType: requireString(input.editorType, `${path}.editorType`),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function normalizeLink(input, path) {
|
|
127
|
+
return {
|
|
128
|
+
id: requireIdentifier(input.id, `${path}.id`),
|
|
129
|
+
from: normalizeEndpoint(input.from, `${path}.from`),
|
|
130
|
+
to: normalizeEndpoint(input.to, `${path}.to`),
|
|
131
|
+
metadata: cloneJsonObject(input.metadata ?? {}, `${path}.metadata`),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function normalizeEndpoint(input, path) {
|
|
135
|
+
return {
|
|
136
|
+
nodeId: requireIdentifier(input.nodeId, `${path}.nodeId`),
|
|
137
|
+
portId: requireIdentifier(input.portId, `${path}.portId`),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function parseNode(value, path) {
|
|
141
|
+
const node = requireObject(value, path);
|
|
142
|
+
return normalizeNode({
|
|
143
|
+
id: requireString(node.id, `${path}.id`),
|
|
144
|
+
typeId: requireString(node.typeId, `${path}.typeId`),
|
|
145
|
+
name: requireString(node.name, `${path}.name`),
|
|
146
|
+
description: requireString(node.description, `${path}.description`),
|
|
147
|
+
groupName: requireString(node.groupName, `${path}.groupName`),
|
|
148
|
+
x: requireNumber(node.x, `${path}.x`),
|
|
149
|
+
y: requireNumber(node.y, `${path}.y`),
|
|
150
|
+
color: requireString(node.color, `${path}.color`),
|
|
151
|
+
border: requireString(node.border, `${path}.border`),
|
|
152
|
+
icon: requireString(node.icon, `${path}.icon`),
|
|
153
|
+
message: requireString(node.message, `${path}.message`),
|
|
154
|
+
openAction: requireString(node.openAction, `${path}.openAction`),
|
|
155
|
+
inPorts: requireArray(node.inPorts, `${path}.inPorts`).map((port, index) => parsePort(port, `${path}.inPorts[${index}]`)),
|
|
156
|
+
outPorts: requireArray(node.outPorts, `${path}.outPorts`).map((port, index) => parsePort(port, `${path}.outPorts[${index}]`)),
|
|
157
|
+
parameters: requireArray(node.parameters, `${path}.parameters`).map((parameter, index) => parseParameter(parameter, `${path}.parameters[${index}]`)),
|
|
158
|
+
paramValues: cloneStringRecord(node.paramValues, `${path}.paramValues`),
|
|
159
|
+
metadata: cloneJsonObject(node.metadata, `${path}.metadata`),
|
|
160
|
+
}, path);
|
|
161
|
+
}
|
|
162
|
+
function parsePort(value, path) {
|
|
163
|
+
const port = requireObject(value, path);
|
|
164
|
+
return normalizePort({
|
|
165
|
+
id: requireString(port.id, `${path}.id`),
|
|
166
|
+
name: requireString(port.name, `${path}.name`),
|
|
167
|
+
description: requireString(port.description, `${path}.description`),
|
|
168
|
+
type: requireString(port.type, `${path}.type`),
|
|
169
|
+
maxLinks: requireNumber(port.maxLinks, `${path}.maxLinks`),
|
|
170
|
+
availableTypes: requireArray(port.availableTypes, `${path}.availableTypes`).map((type, index) => requireString(type, `${path}.availableTypes[${index}]`)),
|
|
171
|
+
isDynamic: requireBoolean(port.isDynamic, `${path}.isDynamic`),
|
|
172
|
+
dynamicMode: requireString(port.dynamicMode, `${path}.dynamicMode`),
|
|
173
|
+
isSibling: requireBoolean(port.isSibling, `${path}.isSibling`),
|
|
174
|
+
metadata: cloneJsonObject(port.metadata, `${path}.metadata`),
|
|
175
|
+
}, path);
|
|
176
|
+
}
|
|
177
|
+
function parseParameter(value, path) {
|
|
178
|
+
const parameter = requireObject(value, path);
|
|
179
|
+
return normalizeParameter({
|
|
180
|
+
name: requireString(parameter.name, `${path}.name`),
|
|
181
|
+
displayName: requireString(parameter.displayName, `${path}.displayName`),
|
|
182
|
+
description: requireString(parameter.description, `${path}.description`),
|
|
183
|
+
type: requireString(parameter.type, `${path}.type`),
|
|
184
|
+
defaultValue: requireString(parameter.defaultValue, `${path}.defaultValue`),
|
|
185
|
+
options: requireArray(parameter.options, `${path}.options`).map((option, index) => requireString(option, `${path}.options[${index}]`)),
|
|
186
|
+
min: requireNullableFiniteNumber(parameter.min, `${path}.min`),
|
|
187
|
+
max: requireNullableFiniteNumber(parameter.max, `${path}.max`),
|
|
188
|
+
displayOrder: requireNumber(parameter.displayOrder, `${path}.displayOrder`),
|
|
189
|
+
category: requireString(parameter.category, `${path}.category`),
|
|
190
|
+
isBasic: requireBoolean(parameter.isBasic, `${path}.isBasic`),
|
|
191
|
+
editorType: requireString(parameter.editorType, `${path}.editorType`),
|
|
192
|
+
}, path);
|
|
193
|
+
}
|
|
194
|
+
function parseLink(value, path) {
|
|
195
|
+
const link = requireObject(value, path);
|
|
196
|
+
return normalizeLink({
|
|
197
|
+
id: requireString(link.id, `${path}.id`),
|
|
198
|
+
from: parseEndpoint(link.from, `${path}.from`),
|
|
199
|
+
to: parseEndpoint(link.to, `${path}.to`),
|
|
200
|
+
metadata: cloneJsonObject(link.metadata, `${path}.metadata`),
|
|
201
|
+
}, path);
|
|
202
|
+
}
|
|
203
|
+
function parseEndpoint(value, path) {
|
|
204
|
+
const endpoint = requireObject(value, path);
|
|
205
|
+
return {
|
|
206
|
+
nodeId: requireIdentifier(endpoint.nodeId, `${path}.nodeId`),
|
|
207
|
+
portId: requireIdentifier(endpoint.portId, `${path}.portId`),
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
function validateDocument(document) {
|
|
211
|
+
const nodes = new Map();
|
|
212
|
+
for (let index = 0; index < document.nodes.length; index++) {
|
|
213
|
+
const node = document.nodes[index];
|
|
214
|
+
if (nodes.has(node.id))
|
|
215
|
+
throw new DiagramDocumentError(`duplicate node id "${node.id}"`, `$.nodes[${index}].id`);
|
|
216
|
+
validateUniquePorts(node.inPorts, `$.nodes[${index}].inPorts`);
|
|
217
|
+
validateUniquePorts(node.outPorts, `$.nodes[${index}].outPorts`);
|
|
218
|
+
nodes.set(node.id, node);
|
|
219
|
+
}
|
|
220
|
+
const linkIds = new Set();
|
|
221
|
+
const endpoints = new Set();
|
|
222
|
+
for (let index = 0; index < document.links.length; index++) {
|
|
223
|
+
const link = document.links[index];
|
|
224
|
+
const path = `$.links[${index}]`;
|
|
225
|
+
if (linkIds.has(link.id))
|
|
226
|
+
throw new DiagramDocumentError(`duplicate link id "${link.id}"`, `${path}.id`);
|
|
227
|
+
linkIds.add(link.id);
|
|
228
|
+
const fromNode = nodes.get(link.from.nodeId);
|
|
229
|
+
const toNode = nodes.get(link.to.nodeId);
|
|
230
|
+
if (fromNode === undefined)
|
|
231
|
+
throw new DiagramDocumentError(`unknown source node "${link.from.nodeId}"`, `${path}.from.nodeId`);
|
|
232
|
+
if (toNode === undefined)
|
|
233
|
+
throw new DiagramDocumentError(`unknown target node "${link.to.nodeId}"`, `${path}.to.nodeId`);
|
|
234
|
+
if (!fromNode.outPorts.some((port) => port.id === link.from.portId)) {
|
|
235
|
+
throw new DiagramDocumentError(`unknown output port "${link.from.portId}"`, `${path}.from.portId`);
|
|
236
|
+
}
|
|
237
|
+
if (!toNode.inPorts.some((port) => port.id === link.to.portId)) {
|
|
238
|
+
throw new DiagramDocumentError(`unknown input port "${link.to.portId}"`, `${path}.to.portId`);
|
|
239
|
+
}
|
|
240
|
+
const key = `${link.from.nodeId}\u0000${link.from.portId}\u0000${link.to.nodeId}\u0000${link.to.portId}`;
|
|
241
|
+
if (endpoints.has(key))
|
|
242
|
+
throw new DiagramDocumentError('duplicate link endpoints', path);
|
|
243
|
+
endpoints.add(key);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
function validateUniquePorts(ports, path) {
|
|
247
|
+
const ids = new Set();
|
|
248
|
+
for (let index = 0; index < ports.length; index++) {
|
|
249
|
+
const id = ports[index].id;
|
|
250
|
+
if (ids.has(id))
|
|
251
|
+
throw new DiagramDocumentError(`duplicate port id "${id}"`, `${path}[${index}].id`);
|
|
252
|
+
ids.add(id);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
function cloneStringRecord(value, path) {
|
|
256
|
+
const object = requireObject(value, path);
|
|
257
|
+
const result = {};
|
|
258
|
+
for (const [key, item] of Object.entries(object))
|
|
259
|
+
result[key] = requireString(item, `${path}.${key}`);
|
|
260
|
+
return result;
|
|
261
|
+
}
|
|
262
|
+
function cloneJsonObject(value, path, ancestors = new WeakSet()) {
|
|
263
|
+
const object = requireObject(value, path);
|
|
264
|
+
if (ancestors.has(object))
|
|
265
|
+
throw new DiagramDocumentError('circular JSON value', path);
|
|
266
|
+
ancestors.add(object);
|
|
267
|
+
const result = {};
|
|
268
|
+
try {
|
|
269
|
+
for (const [key, item] of Object.entries(object)) {
|
|
270
|
+
result[key] = cloneJsonValue(item, `${path}.${key}`, ancestors);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
finally {
|
|
274
|
+
ancestors.delete(object);
|
|
275
|
+
}
|
|
276
|
+
return result;
|
|
277
|
+
}
|
|
278
|
+
function cloneJsonValue(value, path, ancestors) {
|
|
279
|
+
if (value === null || typeof value === 'string' || typeof value === 'boolean')
|
|
280
|
+
return value;
|
|
281
|
+
if (typeof value === 'number')
|
|
282
|
+
return requireFiniteNumber(value, path);
|
|
283
|
+
if (Array.isArray(value)) {
|
|
284
|
+
if (ancestors.has(value))
|
|
285
|
+
throw new DiagramDocumentError('circular JSON value', path);
|
|
286
|
+
ancestors.add(value);
|
|
287
|
+
try {
|
|
288
|
+
return value.map((item, index) => cloneJsonValue(item, `${path}[${index}]`, ancestors));
|
|
289
|
+
}
|
|
290
|
+
finally {
|
|
291
|
+
ancestors.delete(value);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
if (isObject(value))
|
|
295
|
+
return cloneJsonObject(value, path, ancestors);
|
|
296
|
+
throw new DiagramDocumentError('expected a JSON value', path);
|
|
297
|
+
}
|
|
298
|
+
function requireObject(value, path) {
|
|
299
|
+
if (!isObject(value))
|
|
300
|
+
throw new DiagramDocumentError('expected an object', path);
|
|
301
|
+
return value;
|
|
302
|
+
}
|
|
303
|
+
function isObject(value) {
|
|
304
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
305
|
+
return false;
|
|
306
|
+
const prototype = Object.getPrototypeOf(value);
|
|
307
|
+
return prototype === Object.prototype || prototype === null;
|
|
308
|
+
}
|
|
309
|
+
function requireArray(value, path) {
|
|
310
|
+
if (!Array.isArray(value))
|
|
311
|
+
throw new DiagramDocumentError('expected an array', path);
|
|
312
|
+
return value;
|
|
313
|
+
}
|
|
314
|
+
function requireString(value, path) {
|
|
315
|
+
if (typeof value !== 'string')
|
|
316
|
+
throw new DiagramDocumentError('expected a string', path);
|
|
317
|
+
return value;
|
|
318
|
+
}
|
|
319
|
+
function requireIdentifier(value, path) {
|
|
320
|
+
const id = requireString(value, path);
|
|
321
|
+
if (id.trim().length === 0)
|
|
322
|
+
throw new DiagramDocumentError('identifier cannot be empty', path);
|
|
323
|
+
return id;
|
|
324
|
+
}
|
|
325
|
+
function requireNumber(value, path) {
|
|
326
|
+
if (typeof value !== 'number')
|
|
327
|
+
throw new DiagramDocumentError('expected a number', path);
|
|
328
|
+
return value;
|
|
329
|
+
}
|
|
330
|
+
function requireFiniteNumber(value, path) {
|
|
331
|
+
const number = requireNumber(value, path);
|
|
332
|
+
if (!Number.isFinite(number))
|
|
333
|
+
throw new DiagramDocumentError('expected a finite number', path);
|
|
334
|
+
return number;
|
|
335
|
+
}
|
|
336
|
+
function requireNullableFiniteNumber(value, path) {
|
|
337
|
+
return value === null ? null : requireFiniteNumber(value, path);
|
|
338
|
+
}
|
|
339
|
+
function requireNonNegativeInteger(value, path) {
|
|
340
|
+
const number = requireFiniteNumber(value, path);
|
|
341
|
+
if (!Number.isInteger(number) || number < 0)
|
|
342
|
+
throw new DiagramDocumentError('expected a non-negative integer', path);
|
|
343
|
+
return number;
|
|
344
|
+
}
|
|
345
|
+
function requireBoolean(value, path) {
|
|
346
|
+
if (typeof value !== 'boolean')
|
|
347
|
+
throw new DiagramDocumentError('expected a boolean', path);
|
|
348
|
+
return value;
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../../src/core/document.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
export class DiagramCommandHistory {
|
|
2
|
+
constructor(listener) {
|
|
3
|
+
this.listener = listener;
|
|
4
|
+
this.undoCommands = [];
|
|
5
|
+
this.redoCommands = [];
|
|
6
|
+
this.transactions = [];
|
|
7
|
+
this.replaying = false;
|
|
8
|
+
}
|
|
9
|
+
get state() {
|
|
10
|
+
return {
|
|
11
|
+
canUndo: this.undoCommands.length > 0,
|
|
12
|
+
canRedo: this.redoCommands.length > 0,
|
|
13
|
+
undoDepth: this.undoCommands.length,
|
|
14
|
+
redoDepth: this.redoCommands.length,
|
|
15
|
+
undoLabel: this.undoCommands[this.undoCommands.length - 1]?.label ?? null,
|
|
16
|
+
redoLabel: this.redoCommands[this.redoCommands.length - 1]?.label ?? null,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
execute(command) {
|
|
20
|
+
if (this.replaying) {
|
|
21
|
+
command.execute();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
command.execute();
|
|
25
|
+
this.recordApplied(command);
|
|
26
|
+
}
|
|
27
|
+
/** Records a gesture that already changed the document, such as pointer drag. */
|
|
28
|
+
recordApplied(command) {
|
|
29
|
+
if (this.replaying)
|
|
30
|
+
return;
|
|
31
|
+
const transaction = this.transactions[this.transactions.length - 1];
|
|
32
|
+
if (transaction !== undefined) {
|
|
33
|
+
transaction.commands.push(command);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
this.undoCommands.push(command);
|
|
37
|
+
this.redoCommands.length = 0;
|
|
38
|
+
this.notify();
|
|
39
|
+
}
|
|
40
|
+
transaction(label, action) {
|
|
41
|
+
const frame = { label, commands: [] };
|
|
42
|
+
this.transactions.push(frame);
|
|
43
|
+
try {
|
|
44
|
+
const result = action();
|
|
45
|
+
this.transactions.pop();
|
|
46
|
+
const command = compose(frame);
|
|
47
|
+
if (command !== null)
|
|
48
|
+
this.recordApplied(command);
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
this.transactions.pop();
|
|
53
|
+
this.replay(() => {
|
|
54
|
+
for (const command of frame.commands.slice().reverse())
|
|
55
|
+
command.undo();
|
|
56
|
+
});
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
undo() {
|
|
61
|
+
const command = this.undoCommands.pop();
|
|
62
|
+
if (command === undefined)
|
|
63
|
+
return false;
|
|
64
|
+
try {
|
|
65
|
+
this.replay(() => command.undo());
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
this.undoCommands.push(command);
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
this.redoCommands.push(command);
|
|
72
|
+
this.notify();
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
redo() {
|
|
76
|
+
const command = this.redoCommands.pop();
|
|
77
|
+
if (command === undefined)
|
|
78
|
+
return false;
|
|
79
|
+
try {
|
|
80
|
+
this.replay(() => command.execute());
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
this.redoCommands.push(command);
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
this.undoCommands.push(command);
|
|
87
|
+
this.notify();
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
clear() {
|
|
91
|
+
if (this.transactions.length > 0) {
|
|
92
|
+
throw new Error('Cannot clear command history inside a transaction.');
|
|
93
|
+
}
|
|
94
|
+
this.undoCommands.length = 0;
|
|
95
|
+
this.redoCommands.length = 0;
|
|
96
|
+
this.notify();
|
|
97
|
+
}
|
|
98
|
+
replay(action) {
|
|
99
|
+
const previous = this.replaying;
|
|
100
|
+
this.replaying = true;
|
|
101
|
+
try {
|
|
102
|
+
action();
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
this.replaying = previous;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
notify() {
|
|
109
|
+
this.listener?.(this.state);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function compose(frame) {
|
|
113
|
+
if (frame.commands.length === 0)
|
|
114
|
+
return null;
|
|
115
|
+
if (frame.commands.length === 1) {
|
|
116
|
+
const command = frame.commands[0];
|
|
117
|
+
return frame.label === command.label ? command : {
|
|
118
|
+
label: frame.label,
|
|
119
|
+
execute: () => command.execute(),
|
|
120
|
+
undo: () => command.undo(),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
const commands = [...frame.commands];
|
|
124
|
+
return {
|
|
125
|
+
label: frame.label,
|
|
126
|
+
execute: () => {
|
|
127
|
+
for (const command of commands)
|
|
128
|
+
command.execute();
|
|
129
|
+
},
|
|
130
|
+
undo: () => {
|
|
131
|
+
for (const command of commands.slice().reverse())
|
|
132
|
+
command.undo();
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/core/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/core/model.ts"],"names":[],"mappings":"AAqEA,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAU,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export function createDiagramRuntimeState() {
|
|
2
|
+
return { activeNodeId: null, nodes: {}, globalError: null };
|
|
3
|
+
}
|
|
4
|
+
export function cloneDiagramRuntimeState(state) {
|
|
5
|
+
return {
|
|
6
|
+
activeNodeId: state.activeNodeId,
|
|
7
|
+
globalError: state.globalError === null ? null : { ...state.globalError },
|
|
8
|
+
nodes: Object.fromEntries(Object.entries(state.nodes).map(([nodeId, node]) => [nodeId, {
|
|
9
|
+
active: node.active,
|
|
10
|
+
error: node.error === null ? null : { ...node.error },
|
|
11
|
+
ports: {
|
|
12
|
+
in: Object.fromEntries(Object.entries(node.ports.in)
|
|
13
|
+
.map(([portId, port]) => [portId, { ...port }])),
|
|
14
|
+
out: Object.fromEntries(Object.entries(node.ports.out)
|
|
15
|
+
.map(([portId, port]) => [portId, { ...port }])),
|
|
16
|
+
},
|
|
17
|
+
}])),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function createDiagramViewState() {
|
|
21
|
+
return { zoom: 1, panX: 0, panY: 0, overviewVisible: true };
|
|
22
|
+
}
|
|
23
|
+
export function createDiagramSelection() {
|
|
24
|
+
return {
|
|
25
|
+
nodeIds: [],
|
|
26
|
+
linkIds: [],
|
|
27
|
+
port: null,
|
|
28
|
+
primaryNodeId: null,
|
|
29
|
+
primaryLinkId: null,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function createDiagramPortRuntimeState() {
|
|
33
|
+
return {
|
|
34
|
+
active: false,
|
|
35
|
+
selected: false,
|
|
36
|
+
breakpoint: false,
|
|
37
|
+
breakpointActive: false,
|
|
38
|
+
value: null,
|
|
39
|
+
error: null,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export function createEditableDiagramPermissions() {
|
|
43
|
+
return {
|
|
44
|
+
select: true,
|
|
45
|
+
inspect: true,
|
|
46
|
+
copy: true,
|
|
47
|
+
moveNodes: true,
|
|
48
|
+
createLinks: true,
|
|
49
|
+
deleteSelection: true,
|
|
50
|
+
paste: true,
|
|
51
|
+
history: true,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export function createReadOnlyDiagramPermissions() {
|
|
55
|
+
return {
|
|
56
|
+
select: true,
|
|
57
|
+
inspect: true,
|
|
58
|
+
copy: true,
|
|
59
|
+
moveNodes: false,
|
|
60
|
+
createLinks: false,
|
|
61
|
+
deleteSelection: false,
|
|
62
|
+
paste: false,
|
|
63
|
+
history: false,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export function createDiagramNodeRuntimeState() {
|
|
67
|
+
return {
|
|
68
|
+
active: false,
|
|
69
|
+
error: null,
|
|
70
|
+
ports: { in: {}, out: {} },
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/core/state.ts"],"names":[],"mappings":"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"}
|