@dzbot/dzstudio-mcp 0.0.0-stage → 0.1.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/LICENSE +661 -0
- package/README.md +162 -2
- package/dist/config/config.js +172 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/sessions.js +67 -0
- package/dist/config/sessions.js.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/agent.js +1148 -0
- package/dist/mcp/agent.js.map +1 -0
- package/dist/mcp/server.js +263 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/protocol/client.js +134 -0
- package/dist/protocol/client.js.map +1 -0
- package/dist/protocol/session.js +837 -0
- package/dist/protocol/session.js.map +1 -0
- package/dist/protocol/transport.js +66 -0
- package/dist/protocol/transport.js.map +1 -0
- package/dist/scene/chunks.js +30 -0
- package/dist/scene/chunks.js.map +1 -0
- package/dist/scene/edits.js +183 -0
- package/dist/scene/edits.js.map +1 -0
- package/dist/scene/float32.js +167 -0
- package/dist/scene/float32.js.map +1 -0
- package/dist/scene/ids.js +43 -0
- package/dist/scene/ids.js.map +1 -0
- package/dist/scene/index.js +9 -0
- package/dist/scene/index.js.map +1 -0
- package/dist/scene/json.js +294 -0
- package/dist/scene/json.js.map +1 -0
- package/dist/scene/projectload.js +663 -0
- package/dist/scene/projectload.js.map +1 -0
- package/dist/scene/scene.js +506 -0
- package/dist/scene/scene.js.map +1 -0
- package/dist/scene/srcjson.js +297 -0
- package/dist/scene/srcjson.js.map +1 -0
- package/dist/scene/textform.js +257 -0
- package/dist/scene/textform.js.map +1 -0
- package/dist/scene/types.js +35 -0
- package/dist/scene/types.js.map +1 -0
- package/dist/world/data.js +604 -0
- package/dist/world/data.js.map +1 -0
- package/dist/world/format.js +205 -0
- package/dist/world/format.js.map +1 -0
- package/dist/world/source.js +267 -0
- package/dist/world/source.js.map +1 -0
- package/dist/world/tools.js +530 -0
- package/dist/world/tools.js.map +1 -0
- package/package.json +48 -4
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The strict JSON reader dzStudio uses for project files: it keeps the exact source text of every value and key,
|
|
3
|
+
* duplicate keys in their order (the last one counts), and numbers as their source text. Reading a file the way the
|
|
4
|
+
* editor does needs exactly its notion of what is valid, so this is not the lenient text-form reader in json.ts.
|
|
5
|
+
*/
|
|
6
|
+
export class SrcNode {
|
|
7
|
+
type;
|
|
8
|
+
str = '';
|
|
9
|
+
bool = false;
|
|
10
|
+
start = 0;
|
|
11
|
+
end = 0;
|
|
12
|
+
keyStart = -1;
|
|
13
|
+
keyEnd = -1;
|
|
14
|
+
items = [];
|
|
15
|
+
keys = [];
|
|
16
|
+
constructor(type) {
|
|
17
|
+
this.type = type;
|
|
18
|
+
}
|
|
19
|
+
/** The last occurrence of a key. */
|
|
20
|
+
get(key) {
|
|
21
|
+
if (this.type !== 'obj')
|
|
22
|
+
return undefined;
|
|
23
|
+
for (let i = this.keys.length - 1; i >= 0; i--)
|
|
24
|
+
if (this.keys[i] === key)
|
|
25
|
+
return this.items[i];
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
countKey(key) {
|
|
29
|
+
return this.type === 'obj' ? this.keys.filter((k) => k === key).length : 0;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** Text the editor would read differently from any JSON reader (a null character, a broken surrogate escape). */
|
|
33
|
+
export class SrcUnsupported extends Error {
|
|
34
|
+
}
|
|
35
|
+
const MAX_DEPTH = 200;
|
|
36
|
+
class Fail extends Error {
|
|
37
|
+
}
|
|
38
|
+
class Reader {
|
|
39
|
+
s;
|
|
40
|
+
i = 0;
|
|
41
|
+
constructor(s) {
|
|
42
|
+
this.s = s;
|
|
43
|
+
}
|
|
44
|
+
code() {
|
|
45
|
+
return this.i < this.s.length ? this.s.charCodeAt(this.i) : -1;
|
|
46
|
+
}
|
|
47
|
+
fail(msg) {
|
|
48
|
+
throw new Fail(msg);
|
|
49
|
+
}
|
|
50
|
+
ws() {
|
|
51
|
+
for (;;) {
|
|
52
|
+
const c = this.code();
|
|
53
|
+
if (c === 32 || c === 9 || c === 10 || c === 13)
|
|
54
|
+
this.i++;
|
|
55
|
+
else
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
value(depth) {
|
|
60
|
+
if (depth > MAX_DEPTH)
|
|
61
|
+
this.fail('nested too deeply');
|
|
62
|
+
this.ws();
|
|
63
|
+
if (this.i >= this.s.length)
|
|
64
|
+
this.fail('unexpected end of file');
|
|
65
|
+
const start = this.i;
|
|
66
|
+
const c = this.code();
|
|
67
|
+
let n;
|
|
68
|
+
if (c === 0x7b) {
|
|
69
|
+
n = new SrcNode('obj');
|
|
70
|
+
this.i++;
|
|
71
|
+
this.ws();
|
|
72
|
+
if (this.code() === 0x7d)
|
|
73
|
+
this.i++;
|
|
74
|
+
else {
|
|
75
|
+
for (;;) {
|
|
76
|
+
this.ws();
|
|
77
|
+
if (this.code() !== 0x22)
|
|
78
|
+
this.fail('field name expected');
|
|
79
|
+
const keyStart = this.i;
|
|
80
|
+
const key = this.string();
|
|
81
|
+
const keyEnd = this.i;
|
|
82
|
+
this.ws();
|
|
83
|
+
if (this.code() !== 0x3a)
|
|
84
|
+
this.fail('":" expected');
|
|
85
|
+
this.i++;
|
|
86
|
+
const v = this.value(depth + 1);
|
|
87
|
+
v.keyStart = keyStart;
|
|
88
|
+
v.keyEnd = keyEnd;
|
|
89
|
+
n.keys.push(key);
|
|
90
|
+
n.items.push(v);
|
|
91
|
+
this.ws();
|
|
92
|
+
const sep = this.code();
|
|
93
|
+
this.i++;
|
|
94
|
+
if (sep === 0x2c)
|
|
95
|
+
continue;
|
|
96
|
+
if (sep === 0x7d)
|
|
97
|
+
break;
|
|
98
|
+
this.i--;
|
|
99
|
+
this.fail('"," or "}" expected');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else if (c === 0x5b) {
|
|
104
|
+
n = new SrcNode('arr');
|
|
105
|
+
this.i++;
|
|
106
|
+
this.ws();
|
|
107
|
+
if (this.code() === 0x5d)
|
|
108
|
+
this.i++;
|
|
109
|
+
else {
|
|
110
|
+
for (;;) {
|
|
111
|
+
n.items.push(this.value(depth + 1));
|
|
112
|
+
this.ws();
|
|
113
|
+
const sep = this.code();
|
|
114
|
+
this.i++;
|
|
115
|
+
if (sep === 0x2c)
|
|
116
|
+
continue;
|
|
117
|
+
if (sep === 0x5d)
|
|
118
|
+
break;
|
|
119
|
+
this.i--;
|
|
120
|
+
this.fail('"," or "]" expected');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else if (c === 0x22) {
|
|
125
|
+
n = new SrcNode('str');
|
|
126
|
+
n.str = this.string();
|
|
127
|
+
}
|
|
128
|
+
else if (c === 0x74 || c === 0x66 || c === 0x6e) {
|
|
129
|
+
let word = '';
|
|
130
|
+
for (let b = this.code(); b >= 97 && b <= 122; b = this.code()) {
|
|
131
|
+
word += this.s[this.i];
|
|
132
|
+
this.i++;
|
|
133
|
+
}
|
|
134
|
+
if (word === 'true') {
|
|
135
|
+
n = new SrcNode('bool');
|
|
136
|
+
n.bool = true;
|
|
137
|
+
}
|
|
138
|
+
else if (word === 'false')
|
|
139
|
+
n = new SrcNode('bool');
|
|
140
|
+
else if (word === 'null')
|
|
141
|
+
n = new SrcNode('null');
|
|
142
|
+
else
|
|
143
|
+
this.fail(`unknown word ${word}`);
|
|
144
|
+
}
|
|
145
|
+
else if (c === 0x2d || (c >= 0x30 && c <= 0x39)) {
|
|
146
|
+
n = new SrcNode('num');
|
|
147
|
+
n.str = this.number();
|
|
148
|
+
}
|
|
149
|
+
else
|
|
150
|
+
this.fail('unexpected character');
|
|
151
|
+
n.start = start;
|
|
152
|
+
n.end = this.i;
|
|
153
|
+
return n;
|
|
154
|
+
}
|
|
155
|
+
digits() {
|
|
156
|
+
const from = this.i;
|
|
157
|
+
while (this.code() >= 0x30 && this.code() <= 0x39)
|
|
158
|
+
this.i++;
|
|
159
|
+
return this.s.slice(from, this.i);
|
|
160
|
+
}
|
|
161
|
+
number() {
|
|
162
|
+
const from = this.i;
|
|
163
|
+
if (this.code() === 0x2d)
|
|
164
|
+
this.i++;
|
|
165
|
+
if (this.code() === 0x30) {
|
|
166
|
+
this.i++;
|
|
167
|
+
const nb = this.code();
|
|
168
|
+
if (nb >= 0x30 && nb <= 0x39)
|
|
169
|
+
this.fail('leading zero');
|
|
170
|
+
}
|
|
171
|
+
else if (!this.digits())
|
|
172
|
+
this.fail('number expected');
|
|
173
|
+
if (this.code() === 0x2e) {
|
|
174
|
+
this.i++;
|
|
175
|
+
if (!this.digits())
|
|
176
|
+
this.fail('digit after "." expected');
|
|
177
|
+
}
|
|
178
|
+
if (this.code() === 0x65 || this.code() === 0x45) {
|
|
179
|
+
this.i++;
|
|
180
|
+
if (this.code() === 0x2b || this.code() === 0x2d)
|
|
181
|
+
this.i++;
|
|
182
|
+
if (!this.digits())
|
|
183
|
+
this.fail('digit in the exponent expected');
|
|
184
|
+
}
|
|
185
|
+
const after = this.code();
|
|
186
|
+
if ((after >= 97 && after <= 122) || (after >= 65 && after <= 90))
|
|
187
|
+
this.fail('invalid number');
|
|
188
|
+
return this.s.slice(from, this.i);
|
|
189
|
+
}
|
|
190
|
+
hex4() {
|
|
191
|
+
const h = this.s.slice(this.i, this.i + 4);
|
|
192
|
+
if (!/^[0-9a-fA-F]{4}$/.test(h))
|
|
193
|
+
this.fail('invalid \\u sequence');
|
|
194
|
+
this.i += 4;
|
|
195
|
+
return parseInt(h, 16);
|
|
196
|
+
}
|
|
197
|
+
string() {
|
|
198
|
+
this.i++;
|
|
199
|
+
let out = '';
|
|
200
|
+
for (;;) {
|
|
201
|
+
if (this.i >= this.s.length)
|
|
202
|
+
this.fail('text without end');
|
|
203
|
+
const from = this.i;
|
|
204
|
+
let c = this.code();
|
|
205
|
+
while (c !== -1 && c !== 0x22 && c !== 0x5c && c >= 0x20) {
|
|
206
|
+
this.i++;
|
|
207
|
+
c = this.code();
|
|
208
|
+
}
|
|
209
|
+
out += this.s.slice(from, this.i);
|
|
210
|
+
if (c === -1)
|
|
211
|
+
continue;
|
|
212
|
+
if (c === 0x22) {
|
|
213
|
+
this.i++;
|
|
214
|
+
return out;
|
|
215
|
+
}
|
|
216
|
+
if (c < 0x20)
|
|
217
|
+
this.fail('control character in text');
|
|
218
|
+
this.i++;
|
|
219
|
+
const e = this.code();
|
|
220
|
+
this.i++;
|
|
221
|
+
switch (e) {
|
|
222
|
+
case 0x22:
|
|
223
|
+
out += '"';
|
|
224
|
+
break;
|
|
225
|
+
case 0x5c:
|
|
226
|
+
out += '\\';
|
|
227
|
+
break;
|
|
228
|
+
case 0x2f:
|
|
229
|
+
out += '/';
|
|
230
|
+
break;
|
|
231
|
+
case 0x62:
|
|
232
|
+
out += '\b';
|
|
233
|
+
break;
|
|
234
|
+
case 0x66:
|
|
235
|
+
out += '\f';
|
|
236
|
+
break;
|
|
237
|
+
case 0x6e:
|
|
238
|
+
out += '\n';
|
|
239
|
+
break;
|
|
240
|
+
case 0x72:
|
|
241
|
+
out += '\r';
|
|
242
|
+
break;
|
|
243
|
+
case 0x74:
|
|
244
|
+
out += '\t';
|
|
245
|
+
break;
|
|
246
|
+
case 0x75: {
|
|
247
|
+
let cp = this.hex4();
|
|
248
|
+
if (cp >= 0xd800 && cp <= 0xdbff && this.code() === 0x5c && this.s.charCodeAt(this.i + 1) === 0x75) {
|
|
249
|
+
this.i += 2;
|
|
250
|
+
const lo = this.hex4();
|
|
251
|
+
if (lo < 0xdc00 || lo > 0xdfff)
|
|
252
|
+
throw new SrcUnsupported('a \\u escape with a broken surrogate pair');
|
|
253
|
+
cp = 0x10000 + ((cp - 0xd800) << 10) + (lo - 0xdc00);
|
|
254
|
+
}
|
|
255
|
+
if (cp === 0)
|
|
256
|
+
throw new SrcUnsupported('a \\u0000 escape');
|
|
257
|
+
if (cp >= 0xd800 && cp <= 0xdfff)
|
|
258
|
+
throw new SrcUnsupported('a \\u escape with a lone surrogate');
|
|
259
|
+
out += String.fromCodePoint(cp);
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
default:
|
|
263
|
+
this.i--;
|
|
264
|
+
this.fail('invalid escape sequence');
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Reads a whole file. A byte order mark at the start is skipped. Throws SrcUnsupported for text the editor holds
|
|
271
|
+
* differently from its content (it cuts strings at a null character).
|
|
272
|
+
*/
|
|
273
|
+
export function parseSrc(text) {
|
|
274
|
+
if (text.includes('\u0000'))
|
|
275
|
+
throw new SrcUnsupported('a null character');
|
|
276
|
+
const doc = {
|
|
277
|
+
slice: (a, b) => (b <= a ? '' : text.slice(a, b)),
|
|
278
|
+
raw: (n) => (n.end <= n.start ? '' : text.slice(n.start, n.end)),
|
|
279
|
+
};
|
|
280
|
+
const r = new Reader(text);
|
|
281
|
+
if (text.charCodeAt(0) === 0xfeff)
|
|
282
|
+
r.i = 1;
|
|
283
|
+
try {
|
|
284
|
+
const root = r.value(0);
|
|
285
|
+
r.ws();
|
|
286
|
+
if (r.i < text.length)
|
|
287
|
+
r.fail('characters after the end');
|
|
288
|
+
doc.root = root;
|
|
289
|
+
}
|
|
290
|
+
catch (e) {
|
|
291
|
+
if (!(e instanceof Fail))
|
|
292
|
+
throw e;
|
|
293
|
+
doc.error = e.message;
|
|
294
|
+
}
|
|
295
|
+
return doc;
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=srcjson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"srcjson.js","sourceRoot":"","sources":["../../src/scene/srcjson.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { isObject, parseJson, writeInt, writeString, writeStringMap, sortedKeys, } from './json.js';
|
|
2
|
+
import { TEXTFORM } from './types.js';
|
|
3
|
+
/** The text could not be read or does not have the structure of text form 1 (stages 1 and 2). */
|
|
4
|
+
export class TextFormError extends Error {
|
|
5
|
+
newerTextForm;
|
|
6
|
+
constructor(message, newerTextForm) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.newerTextForm = newerTextForm;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
// ---------------------------------------------------------------- writing
|
|
12
|
+
function writeComp(c) {
|
|
13
|
+
return `{"v":${writeInt(c.v)},"d":${writeString(c.d)}}`;
|
|
14
|
+
}
|
|
15
|
+
function writeElementBody(e) {
|
|
16
|
+
const comp = sortedKeys(e.comp.keys())
|
|
17
|
+
.map((k) => writeString(k) + ':' + writeComp(e.comp.get(k)))
|
|
18
|
+
.join(',');
|
|
19
|
+
return (`"id":${writeString(e.id)},"kind":${writeString(e.kind)},"parent":${writeString(e.parent)},` +
|
|
20
|
+
`"after":${writeString(e.after)},"hidden":${e.hidden},"locked":${e.locked},` +
|
|
21
|
+
`"fields":${writeStringMap(e.fields)},"comp":{${comp}}`);
|
|
22
|
+
}
|
|
23
|
+
export function writeElement(e) {
|
|
24
|
+
return '{' + writeElementBody(e) + '}';
|
|
25
|
+
}
|
|
26
|
+
export function writeChange(c) {
|
|
27
|
+
switch (c.k) {
|
|
28
|
+
case 'create':
|
|
29
|
+
case 'delete':
|
|
30
|
+
return '{' + writeElementBody(c.el) + `,"k":"${c.k}"}`;
|
|
31
|
+
case 'field': {
|
|
32
|
+
let s = `{"id":${writeString(c.id)},"k":"field","key":${writeString(c.key)}`;
|
|
33
|
+
if (c.old !== undefined)
|
|
34
|
+
s += `,"old":${writeString(c.old)}`;
|
|
35
|
+
if (c.new !== undefined)
|
|
36
|
+
s += `,"new":${writeString(c.new)}`;
|
|
37
|
+
return s + '}';
|
|
38
|
+
}
|
|
39
|
+
case 'hidden':
|
|
40
|
+
case 'locked':
|
|
41
|
+
return `{"id":${writeString(c.id)},"k":"${c.k}","old":${c.old},"new":${c.new}}`;
|
|
42
|
+
case 'move':
|
|
43
|
+
return (`{"id":${writeString(c.id)},"k":"move","from":${writeString(c.from)},"fromAfter":${writeString(c.fromAfter)},` +
|
|
44
|
+
`"to":${writeString(c.to)},"toAfter":${writeString(c.toAfter)}}`);
|
|
45
|
+
case 'comp': {
|
|
46
|
+
let s = `{"id":${writeString(c.id)},"k":"comp","type":${writeString(c.type)}`;
|
|
47
|
+
if (c.old !== undefined)
|
|
48
|
+
s += `,"old":${writeComp(c.old)}`;
|
|
49
|
+
if (c.new !== undefined)
|
|
50
|
+
s += `,"new":${writeComp(c.new)}`;
|
|
51
|
+
return s + '}';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function writeOperation(op) {
|
|
56
|
+
return (`{"textform":${TEXTFORM},"op":{"id":${writeString(op.id)},"type":${writeString(op.type)},"tv":${writeInt(op.tv)},` +
|
|
57
|
+
`"author":${writeString(op.author)},"authorName":${writeString(op.authorName)},"origin":${writeString(op.origin)},` +
|
|
58
|
+
`"changes":[${op.changes.map(writeChange).join(',')}]}}`);
|
|
59
|
+
}
|
|
60
|
+
export function writeState(state) {
|
|
61
|
+
const kinds = sortedKeys(state.kinds.keys())
|
|
62
|
+
.map((k) => writeString(k) + ':' + writeInt(state.kinds.get(k)))
|
|
63
|
+
.join(',');
|
|
64
|
+
return `{"textform":${TEXTFORM},"state":{"kinds":{${kinds}},"elements":[${state.elements.map(writeElement).join(',')}]}}`;
|
|
65
|
+
}
|
|
66
|
+
// ---------------------------------------------------------------- reading
|
|
67
|
+
function str(v) {
|
|
68
|
+
return typeof v === 'string' ? v : '';
|
|
69
|
+
}
|
|
70
|
+
function bool(v) {
|
|
71
|
+
return typeof v === 'boolean' ? v : false;
|
|
72
|
+
}
|
|
73
|
+
function isVersion(v) {
|
|
74
|
+
return typeof v === 'number' && Number.isSafeInteger(v) && v >= 1;
|
|
75
|
+
}
|
|
76
|
+
/** A companion entry of an element: without a valid `v` the element is invalid. */
|
|
77
|
+
function readElementComp(v) {
|
|
78
|
+
if (!isObject(v) || !isVersion(v.get('v')))
|
|
79
|
+
return undefined;
|
|
80
|
+
return { v: v.get('v'), d: str(v.get('d')) };
|
|
81
|
+
}
|
|
82
|
+
/** `old`/`new` of a `comp` change: anything but an object with a valid `v` counts as absent. */
|
|
83
|
+
function readChangeComp(v) {
|
|
84
|
+
return readElementComp(v);
|
|
85
|
+
}
|
|
86
|
+
export function readElement(o) {
|
|
87
|
+
if (!o.has('id') || !o.has('kind'))
|
|
88
|
+
throw new TextFormError('element without id or kind');
|
|
89
|
+
const fields = new Map();
|
|
90
|
+
const f = o.get('fields');
|
|
91
|
+
if (isObject(f)) {
|
|
92
|
+
for (const [k, v] of f) {
|
|
93
|
+
if (typeof v !== 'string')
|
|
94
|
+
throw new TextFormError(`field ${k} is not a string`);
|
|
95
|
+
fields.set(k, v);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const comp = new Map();
|
|
99
|
+
const c = o.get('comp');
|
|
100
|
+
if (isObject(c)) {
|
|
101
|
+
for (const [k, v] of c) {
|
|
102
|
+
const entry = readElementComp(v);
|
|
103
|
+
if (!entry)
|
|
104
|
+
throw new TextFormError(`companion data ${k} without a version`);
|
|
105
|
+
comp.set(k, entry);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
id: str(o.get('id')),
|
|
110
|
+
kind: str(o.get('kind')),
|
|
111
|
+
parent: str(o.get('parent')),
|
|
112
|
+
after: str(o.get('after')),
|
|
113
|
+
hidden: bool(o.get('hidden')),
|
|
114
|
+
locked: bool(o.get('locked')),
|
|
115
|
+
fields,
|
|
116
|
+
comp,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
export function readChange(v) {
|
|
120
|
+
if (!isObject(v))
|
|
121
|
+
throw new TextFormError('a change is not an object');
|
|
122
|
+
const k = v.get('k');
|
|
123
|
+
const id = str(v.get('id'));
|
|
124
|
+
switch (k) {
|
|
125
|
+
case 'create':
|
|
126
|
+
case 'delete':
|
|
127
|
+
return { k, el: readElement(v) };
|
|
128
|
+
case 'field': {
|
|
129
|
+
const c = { k, id, key: str(v.get('key')) };
|
|
130
|
+
if (v.has('old'))
|
|
131
|
+
c.old = str(v.get('old'));
|
|
132
|
+
if (v.has('new'))
|
|
133
|
+
c.new = str(v.get('new'));
|
|
134
|
+
return c;
|
|
135
|
+
}
|
|
136
|
+
case 'hidden':
|
|
137
|
+
case 'locked':
|
|
138
|
+
return { k, id, old: bool(v.get('old')), new: bool(v.get('new')) };
|
|
139
|
+
case 'move':
|
|
140
|
+
return {
|
|
141
|
+
k,
|
|
142
|
+
id,
|
|
143
|
+
from: str(v.get('from')),
|
|
144
|
+
fromAfter: str(v.get('fromAfter')),
|
|
145
|
+
to: str(v.get('to')),
|
|
146
|
+
toAfter: str(v.get('toAfter')),
|
|
147
|
+
};
|
|
148
|
+
case 'comp': {
|
|
149
|
+
const c = { k, id, type: str(v.get('type')) };
|
|
150
|
+
const o = readChangeComp(v.get('old'));
|
|
151
|
+
const n = readChangeComp(v.get('new'));
|
|
152
|
+
if (o)
|
|
153
|
+
c.old = o;
|
|
154
|
+
if (n)
|
|
155
|
+
c.new = n;
|
|
156
|
+
return c;
|
|
157
|
+
}
|
|
158
|
+
default:
|
|
159
|
+
throw new TextFormError(`unknown change kind ${JSON.stringify(k)}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
function parseEnvelope(text) {
|
|
163
|
+
let root;
|
|
164
|
+
try {
|
|
165
|
+
root = parseJson(text);
|
|
166
|
+
}
|
|
167
|
+
catch (e) {
|
|
168
|
+
throw new TextFormError(`not valid JSON: ${e.message}`);
|
|
169
|
+
}
|
|
170
|
+
if (!isObject(root))
|
|
171
|
+
throw new TextFormError('not a JSON object');
|
|
172
|
+
if (!root.has('textform'))
|
|
173
|
+
throw new TextFormError('no textform');
|
|
174
|
+
const tf = root.get('textform');
|
|
175
|
+
if (typeof tf !== 'number' || !Number.isSafeInteger(tf) || tf < 1)
|
|
176
|
+
throw new TextFormError('invalid textform');
|
|
177
|
+
if (tf > TEXTFORM)
|
|
178
|
+
throw new TextFormError(`text form ${tf} is newer than ${TEXTFORM}`, tf);
|
|
179
|
+
return root;
|
|
180
|
+
}
|
|
181
|
+
/** Stages 1 and 2 of applying: read and check the structure. Throws TextFormError when the text is invalid. */
|
|
182
|
+
export function readOperation(text) {
|
|
183
|
+
const root = parseEnvelope(text);
|
|
184
|
+
const op = root.get('op');
|
|
185
|
+
if (!isObject(op))
|
|
186
|
+
throw new TextFormError('op missing or not an object');
|
|
187
|
+
const origin = op.get('origin');
|
|
188
|
+
if (origin !== 'local' && origin !== 'system' && origin !== 'remote')
|
|
189
|
+
throw new TextFormError('invalid origin');
|
|
190
|
+
const changes = op.get('changes');
|
|
191
|
+
if (!Array.isArray(changes))
|
|
192
|
+
throw new TextFormError('changes is not a list');
|
|
193
|
+
const tv = op.get('tv');
|
|
194
|
+
return {
|
|
195
|
+
id: str(op.get('id')),
|
|
196
|
+
type: str(op.get('type')),
|
|
197
|
+
tv: typeof tv === 'number' && Number.isSafeInteger(tv) && tv >= 1 ? tv : 1,
|
|
198
|
+
author: str(op.get('author')),
|
|
199
|
+
authorName: str(op.get('authorName')),
|
|
200
|
+
origin,
|
|
201
|
+
changes: changes.map(readChange),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
export function readStateText(text) {
|
|
205
|
+
const root = parseEnvelope(text);
|
|
206
|
+
const st = root.get('state');
|
|
207
|
+
if (!isObject(st))
|
|
208
|
+
throw new TextFormError('state missing or not an object');
|
|
209
|
+
const kinds = new Map();
|
|
210
|
+
const k = st.get('kinds');
|
|
211
|
+
if (isObject(k))
|
|
212
|
+
for (const [name, v] of k)
|
|
213
|
+
kinds.set(name, typeof v === 'number' ? v : 0);
|
|
214
|
+
const list = st.get('elements');
|
|
215
|
+
const elements = [];
|
|
216
|
+
if (Array.isArray(list)) {
|
|
217
|
+
for (const e of list) {
|
|
218
|
+
if (!isObject(e))
|
|
219
|
+
throw new TextFormError('an element is not an object');
|
|
220
|
+
elements.push(readElement(e));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return { kinds, elements };
|
|
224
|
+
}
|
|
225
|
+
export function cloneElement(e) {
|
|
226
|
+
return { ...e, fields: new Map(e.fields), comp: new Map([...e.comp].map(([k, c]) => [k, { ...c }])) };
|
|
227
|
+
}
|
|
228
|
+
export function inverseChange(c) {
|
|
229
|
+
switch (c.k) {
|
|
230
|
+
case 'create':
|
|
231
|
+
return { k: 'delete', el: cloneElement(c.el) };
|
|
232
|
+
case 'delete':
|
|
233
|
+
return { k: 'create', el: cloneElement(c.el) };
|
|
234
|
+
case 'field': {
|
|
235
|
+
const r = { k: 'field', id: c.id, key: c.key };
|
|
236
|
+
if (c.new !== undefined)
|
|
237
|
+
r.old = c.new;
|
|
238
|
+
if (c.old !== undefined)
|
|
239
|
+
r.new = c.old;
|
|
240
|
+
return r;
|
|
241
|
+
}
|
|
242
|
+
case 'hidden':
|
|
243
|
+
case 'locked':
|
|
244
|
+
return { k: c.k, id: c.id, old: c.new, new: c.old };
|
|
245
|
+
case 'move':
|
|
246
|
+
return { k: 'move', id: c.id, from: c.to, fromAfter: c.toAfter, to: c.from, toAfter: c.fromAfter };
|
|
247
|
+
case 'comp': {
|
|
248
|
+
const r = { k: 'comp', id: c.id, type: c.type };
|
|
249
|
+
if (c.new)
|
|
250
|
+
r.old = { ...c.new };
|
|
251
|
+
if (c.old)
|
|
252
|
+
r.new = { ...c.old };
|
|
253
|
+
return r;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=textform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textform.js","sourceRoot":"","sources":["../../src/scene/textform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The types every participant of a session registers, in exactly these versions. A participant without the game
|
|
3
|
+
* knows the same list as a dzStudio build, so that all of them accept and reject the same operations.
|
|
4
|
+
*/
|
|
5
|
+
export const TEXTFORM = 1;
|
|
6
|
+
export const ELEMENT_TYPES = new Map([
|
|
7
|
+
['core:project', { version: 1, parents: [] }],
|
|
8
|
+
['core:group', { version: 1, parents: ['core:project'] }],
|
|
9
|
+
['core:object', { version: 1, parents: ['core:group'] }],
|
|
10
|
+
['loot:entry', { version: 1, parents: ['core:project'] }],
|
|
11
|
+
]);
|
|
12
|
+
export const OPERATION_TYPES = new Map([
|
|
13
|
+
['core:load', 1],
|
|
14
|
+
['core:undo', 1],
|
|
15
|
+
['core:redo', 1],
|
|
16
|
+
['core:revert', 1],
|
|
17
|
+
['projects:edit', 1],
|
|
18
|
+
['placement:edit', 1],
|
|
19
|
+
['properties:edit', 1],
|
|
20
|
+
['brush:edit', 1],
|
|
21
|
+
['spawner:edit', 1],
|
|
22
|
+
['loot:edit', 1],
|
|
23
|
+
]);
|
|
24
|
+
export const COMPANION_TYPES = new Map([
|
|
25
|
+
['projects:plugins', 1],
|
|
26
|
+
['projects:entry', 1],
|
|
27
|
+
['spawner:root', 1],
|
|
28
|
+
['spawner:read', 1],
|
|
29
|
+
['loot:setting', 1],
|
|
30
|
+
]);
|
|
31
|
+
export function pluginOf(type) {
|
|
32
|
+
const i = type.indexOf(':');
|
|
33
|
+
return i < 0 ? type : type.slice(0, i);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/scene/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC;AAO1B,MAAM,CAAC,MAAM,aAAa,GAAqC,IAAI,GAAG,CAAC;IACrE,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC7C,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;IACzD,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;IACxD,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;CAC1D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAgC,IAAI,GAAG,CAAC;IAClE,CAAC,WAAW,EAAE,CAAC,CAAC;IAChB,CAAC,WAAW,EAAE,CAAC,CAAC;IAChB,CAAC,WAAW,EAAE,CAAC,CAAC;IAChB,CAAC,aAAa,EAAE,CAAC,CAAC;IAClB,CAAC,eAAe,EAAE,CAAC,CAAC;IACpB,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACrB,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtB,CAAC,YAAY,EAAE,CAAC,CAAC;IACjB,CAAC,cAAc,EAAE,CAAC,CAAC;IACnB,CAAC,WAAW,EAAE,CAAC,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAgC,IAAI,GAAG,CAAC;IAClE,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACvB,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACrB,CAAC,cAAc,EAAE,CAAC,CAAC;IACnB,CAAC,cAAc,EAAE,CAAC,CAAC;IACnB,CAAC,cAAc,EAAE,CAAC,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC"}
|