@opengeni/artifact-tool 0.2.8 → 0.3.4-canary.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/dist/{chunk-ZCJYRJGB.js → chunk-4XJE7NRA.js} +2 -2
- package/dist/{chunk-N2IHNWBS.js → chunk-4YYYUZQH.js} +15 -6
- package/dist/chunk-4YYYUZQH.js.map +1 -0
- package/dist/{chunk-U5G2BKM2.js → chunk-LMLPFF3S.js} +12 -6
- package/dist/{chunk-U5G2BKM2.js.map → chunk-LMLPFF3S.js.map} +1 -1
- package/dist/{chunk-B2ZJRZDA.js → chunk-LVPFJH2Z.js} +7 -5
- package/dist/chunk-LVPFJH2Z.js.map +1 -0
- package/dist/{chunk-QZI5POCC.js → chunk-OVXX4G35.js} +2 -2
- package/dist/{chunk-6PBM7FKI.js → chunk-QA3NXBAG.js} +8 -7
- package/dist/chunk-QA3NXBAG.js.map +1 -0
- package/dist/{chunk-XT2EJFCU.js → chunk-SYFNJGH5.js} +30 -8
- package/dist/chunk-SYFNJGH5.js.map +1 -0
- package/dist/{chunk-RU5G3HNF.js → chunk-XAZTHG6W.js} +20 -9
- package/dist/chunk-XAZTHG6W.js.map +1 -0
- package/dist/index.js +4 -4
- package/dist/kernel.d.ts +0 -19
- package/dist/materializer-cli-entry.js +7 -7
- package/dist/materializer-cli.d.ts +4 -3
- package/dist/materializer-cli.js +7 -7
- package/dist/native.d.ts +1 -1
- package/dist/native.js +2 -2
- package/dist/office-import.d.ts +15 -5
- package/dist/office-import.js +25 -8
- package/dist/office-import.js.map +1 -1
- package/dist/production-document.js +4 -4
- package/dist/production-presentation.js +4 -4
- package/dist/production-spreadsheet.js +4 -4
- package/dist/reference.js +1 -365
- package/dist/reference.js.map +1 -1
- package/dist/runtime-cli-entry.js +3 -3
- package/dist/runtime-cli.js +2 -2
- package/dist/runtime-development.js +3 -3
- package/dist/runtime-receipt.d.ts +3 -2
- package/dist/runtime.d.ts +8 -6
- package/dist/runtime.js +1 -1
- package/dist/snapshot.d.ts +13 -6
- package/dist/snapshot.js +23 -11
- package/dist/snapshot.js.map +1 -1
- package/dist/spreadsheet-xlsx-codec.js +2 -2
- package/dist/spreadsheet.js +1 -1
- package/package.json +5 -5
- package/src/kernel.ts +1 -397
- package/src/materializer-cli.ts +20 -9
- package/src/native.ts +7 -5
- package/src/office-import.ts +47 -18
- package/src/production-spreadsheet-native.ts +4 -3
- package/src/runtime-receipt.ts +16 -5
- package/src/runtime.ts +22 -10
- package/src/snapshot.ts +39 -17
- package/src/spreadsheet-formula.ts +35 -7
- package/dist/chunk-6PBM7FKI.js.map +0 -1
- package/dist/chunk-B2ZJRZDA.js.map +0 -1
- package/dist/chunk-N2IHNWBS.js.map +0 -1
- package/dist/chunk-RU5G3HNF.js.map +0 -1
- package/dist/chunk-XT2EJFCU.js.map +0 -1
- /package/dist/{chunk-ZCJYRJGB.js.map → chunk-4XJE7NRA.js.map} +0 -0
- /package/dist/{chunk-QZI5POCC.js.map → chunk-OVXX4G35.js.map} +0 -0
package/dist/reference.js
CHANGED
|
@@ -80,14 +80,13 @@ import {
|
|
|
80
80
|
Worksheet,
|
|
81
81
|
WorksheetCollection,
|
|
82
82
|
validateSerializedWorkbook
|
|
83
|
-
} from "./chunk-
|
|
83
|
+
} from "./chunk-SYFNJGH5.js";
|
|
84
84
|
import {
|
|
85
85
|
InvalidSpreadsheetImageError
|
|
86
86
|
} from "./chunk-4FRFNNBM.js";
|
|
87
87
|
import "./chunk-FGZM4FQ6.js";
|
|
88
88
|
import "./chunk-Q2FFHEY7.js";
|
|
89
89
|
import {
|
|
90
|
-
ArtifactLimitError,
|
|
91
90
|
UnsupportedArtifactFeatureError
|
|
92
91
|
} from "./chunk-O24KTEGP.js";
|
|
93
92
|
import "./chunk-4BSENMAE.js";
|
|
@@ -124,373 +123,10 @@ var ArtifactKernelRegistry = class {
|
|
|
124
123
|
return [...this.kernels.values()];
|
|
125
124
|
}
|
|
126
125
|
};
|
|
127
|
-
var ARTIFACT_OPERATION_MAX_BYTES = 1024 * 1024;
|
|
128
|
-
var ARTIFACT_OPERATION_MAX_COMMANDS = 1e4;
|
|
129
|
-
var ARTIFACT_OPERATION_MAX_VECTOR_ACTORS = 1024;
|
|
130
|
-
var ARTIFACT_OPERATION_MAX_STRING_BYTES = 256 * 1024;
|
|
131
|
-
var ARTIFACT_OPERATION_MAX_JSON_DEPTH = 64;
|
|
132
|
-
var ARTIFACT_OPERATION_MAX_JSON_NODES = 1e5;
|
|
133
|
-
var OPERATION_MAGIC = new Uint8Array([79, 71, 65, 82]);
|
|
134
|
-
var textEncoder = new TextEncoder();
|
|
135
|
-
var textDecoder = new TextDecoder("utf-8", { fatal: true });
|
|
136
|
-
var ArtifactCommandBatchCodec = {
|
|
137
|
-
encode(batch) {
|
|
138
|
-
validateBatch(batch);
|
|
139
|
-
const writer = new BinaryWriter(ARTIFACT_OPERATION_MAX_BYTES);
|
|
140
|
-
writer.bytes(OPERATION_MAGIC);
|
|
141
|
-
writer.varint(batch.schemaVersion);
|
|
142
|
-
writer.varint(modalityCode(batch.modality));
|
|
143
|
-
writer.string(batch.artifactId);
|
|
144
|
-
writer.string(batch.transactionId);
|
|
145
|
-
writer.string(batch.actorId);
|
|
146
|
-
writer.varint(batch.baseSequence);
|
|
147
|
-
const vector = Object.entries(batch.baseVector).sort(
|
|
148
|
-
([left], [right]) => left < right ? -1 : left > right ? 1 : 0
|
|
149
|
-
);
|
|
150
|
-
writer.varint(vector.length);
|
|
151
|
-
for (const [actor, counter] of vector) {
|
|
152
|
-
writer.string(actor);
|
|
153
|
-
writer.varint(counter);
|
|
154
|
-
}
|
|
155
|
-
writer.varint(batch.commands.length);
|
|
156
|
-
for (const command of batch.commands) {
|
|
157
|
-
writer.string(command.code);
|
|
158
|
-
writer.string(command.targetId ?? "");
|
|
159
|
-
let flags = 0;
|
|
160
|
-
if (command.precondition?.objectRevision !== void 0) flags |= 1;
|
|
161
|
-
if (command.precondition?.exists !== void 0) flags |= 2;
|
|
162
|
-
if (command.payload !== void 0) flags |= 4;
|
|
163
|
-
writer.byte(flags);
|
|
164
|
-
if ((flags & 1) !== 0) writer.varint(command.precondition.objectRevision);
|
|
165
|
-
if ((flags & 2) !== 0) writer.byte(command.precondition.exists ? 1 : 0);
|
|
166
|
-
if ((flags & 4) !== 0) writer.string(canonicalJson(command.payload));
|
|
167
|
-
}
|
|
168
|
-
return writer.finish();
|
|
169
|
-
},
|
|
170
|
-
decode(bytes) {
|
|
171
|
-
if (bytes.byteLength > ARTIFACT_OPERATION_MAX_BYTES) {
|
|
172
|
-
throw new ArtifactLimitError(
|
|
173
|
-
"operation bytes",
|
|
174
|
-
bytes.byteLength,
|
|
175
|
-
ARTIFACT_OPERATION_MAX_BYTES
|
|
176
|
-
);
|
|
177
|
-
}
|
|
178
|
-
const reader = new BinaryReader(bytes);
|
|
179
|
-
const magic = reader.bytes(OPERATION_MAGIC.length);
|
|
180
|
-
if (!magic.every((value, index) => value === OPERATION_MAGIC[index])) {
|
|
181
|
-
throw new Error("Invalid artifact operation magic");
|
|
182
|
-
}
|
|
183
|
-
const schemaVersion = reader.varint();
|
|
184
|
-
if (schemaVersion !== 1)
|
|
185
|
-
throw new Error(`Unsupported artifact operation schema: ${schemaVersion}`);
|
|
186
|
-
const modality = modalityFromCode(reader.varint());
|
|
187
|
-
const artifactId = reader.string();
|
|
188
|
-
const transactionId = reader.string();
|
|
189
|
-
const actorId = reader.string();
|
|
190
|
-
const baseSequence = reader.varint();
|
|
191
|
-
const vectorCount = reader.varint();
|
|
192
|
-
if (vectorCount > ARTIFACT_OPERATION_MAX_VECTOR_ACTORS) {
|
|
193
|
-
throw new ArtifactLimitError(
|
|
194
|
-
"causal vector actors",
|
|
195
|
-
vectorCount,
|
|
196
|
-
ARTIFACT_OPERATION_MAX_VECTOR_ACTORS
|
|
197
|
-
);
|
|
198
|
-
}
|
|
199
|
-
const vectorEntries = [];
|
|
200
|
-
let previousActor = "";
|
|
201
|
-
for (let index = 0; index < vectorCount; index += 1) {
|
|
202
|
-
const actor = reader.string();
|
|
203
|
-
if (actor <= previousActor) {
|
|
204
|
-
throw new Error("Causal vector actors must be unique and sorted");
|
|
205
|
-
}
|
|
206
|
-
previousActor = actor;
|
|
207
|
-
vectorEntries.push([actor, reader.varint()]);
|
|
208
|
-
}
|
|
209
|
-
const baseVector = Object.fromEntries(vectorEntries);
|
|
210
|
-
const commandCount = reader.varint();
|
|
211
|
-
if (commandCount > ARTIFACT_OPERATION_MAX_COMMANDS) {
|
|
212
|
-
throw new ArtifactLimitError(
|
|
213
|
-
"operation commands",
|
|
214
|
-
commandCount,
|
|
215
|
-
ARTIFACT_OPERATION_MAX_COMMANDS
|
|
216
|
-
);
|
|
217
|
-
}
|
|
218
|
-
const commands = [];
|
|
219
|
-
for (let index = 0; index < commandCount; index += 1) {
|
|
220
|
-
const code = reader.string();
|
|
221
|
-
const targetId = reader.string();
|
|
222
|
-
const flags = reader.byte();
|
|
223
|
-
if ((flags & ~7) !== 0) throw new Error("Unknown artifact command flags");
|
|
224
|
-
const objectRevision = (flags & 1) !== 0 ? reader.varint() : void 0;
|
|
225
|
-
let exists;
|
|
226
|
-
if ((flags & 2) !== 0) {
|
|
227
|
-
const encodedExists = reader.byte();
|
|
228
|
-
if (encodedExists > 1) {
|
|
229
|
-
throw new Error("Artifact command boolean uses a non-canonical encoding");
|
|
230
|
-
}
|
|
231
|
-
exists = encodedExists === 1;
|
|
232
|
-
}
|
|
233
|
-
const payload = (flags & 4) !== 0 ? parseCanonicalJson(reader.string()) : void 0;
|
|
234
|
-
commands.push({
|
|
235
|
-
code,
|
|
236
|
-
...targetId ? { targetId } : {},
|
|
237
|
-
...objectRevision !== void 0 || exists !== void 0 ? {
|
|
238
|
-
precondition: {
|
|
239
|
-
...objectRevision !== void 0 ? { objectRevision } : {},
|
|
240
|
-
...exists !== void 0 ? { exists } : {}
|
|
241
|
-
}
|
|
242
|
-
} : {},
|
|
243
|
-
...payload !== void 0 ? { payload } : {}
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
reader.done();
|
|
247
|
-
const batch = {
|
|
248
|
-
schemaVersion: 1,
|
|
249
|
-
artifactId,
|
|
250
|
-
modality,
|
|
251
|
-
transactionId,
|
|
252
|
-
actorId,
|
|
253
|
-
baseSequence,
|
|
254
|
-
baseVector,
|
|
255
|
-
commands
|
|
256
|
-
};
|
|
257
|
-
validateBatch(batch);
|
|
258
|
-
return batch;
|
|
259
|
-
}
|
|
260
|
-
};
|
|
261
|
-
function validateBatch(batch) {
|
|
262
|
-
if (batch.schemaVersion !== 1) throw new Error("Artifact operation schema must be 1");
|
|
263
|
-
for (const [label, value] of [
|
|
264
|
-
["artifactId", batch.artifactId],
|
|
265
|
-
["transactionId", batch.transactionId],
|
|
266
|
-
["actorId", batch.actorId]
|
|
267
|
-
]) {
|
|
268
|
-
if (!value || value.length > 512) throw new Error(`${label} must contain 1-512 characters`);
|
|
269
|
-
}
|
|
270
|
-
assertSafeInteger(batch.baseSequence, "baseSequence");
|
|
271
|
-
const vector = Object.entries(batch.baseVector);
|
|
272
|
-
if (vector.length > ARTIFACT_OPERATION_MAX_VECTOR_ACTORS) {
|
|
273
|
-
throw new ArtifactLimitError(
|
|
274
|
-
"causal vector actors",
|
|
275
|
-
vector.length,
|
|
276
|
-
ARTIFACT_OPERATION_MAX_VECTOR_ACTORS
|
|
277
|
-
);
|
|
278
|
-
}
|
|
279
|
-
for (const [actor, counter] of vector) {
|
|
280
|
-
if (!actor || actor.length > 512)
|
|
281
|
-
throw new Error("Causal vector actor must contain 1-512 characters");
|
|
282
|
-
assertSafeInteger(counter, `baseVector.${actor}`);
|
|
283
|
-
}
|
|
284
|
-
if (batch.commands.length > ARTIFACT_OPERATION_MAX_COMMANDS) {
|
|
285
|
-
throw new ArtifactLimitError(
|
|
286
|
-
"operation commands",
|
|
287
|
-
batch.commands.length,
|
|
288
|
-
ARTIFACT_OPERATION_MAX_COMMANDS
|
|
289
|
-
);
|
|
290
|
-
}
|
|
291
|
-
if (batch.commands.length === 0) throw new Error("Artifact command batch must not be empty");
|
|
292
|
-
for (const command of batch.commands) {
|
|
293
|
-
if (!/^[a-z][a-z0-9_.-]{0,127}$/.test(command.code))
|
|
294
|
-
throw new Error(`Invalid artifact command code: ${command.code}`);
|
|
295
|
-
if (command.targetId !== void 0 && (command.targetId.length === 0 || command.targetId.length > 512)) {
|
|
296
|
-
throw new Error("Artifact command target id must contain 1-512 characters");
|
|
297
|
-
}
|
|
298
|
-
if (command.precondition?.objectRevision !== void 0) {
|
|
299
|
-
assertSafeInteger(command.precondition.objectRevision, "objectRevision");
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
126
|
function defaultKernelOrder() {
|
|
304
127
|
return typeof window === "undefined" ? ["native"] : [];
|
|
305
128
|
}
|
|
306
|
-
function modalityCode(modality) {
|
|
307
|
-
return { spreadsheet: 1, presentation: 2, document: 3 }[modality];
|
|
308
|
-
}
|
|
309
|
-
function modalityFromCode(value) {
|
|
310
|
-
if (value === 1) return "spreadsheet";
|
|
311
|
-
if (value === 2) return "presentation";
|
|
312
|
-
if (value === 3) return "document";
|
|
313
|
-
throw new Error(`Unknown artifact modality code: ${value}`);
|
|
314
|
-
}
|
|
315
|
-
function assertSafeInteger(value, label) {
|
|
316
|
-
if (!Number.isSafeInteger(value) || value < 0)
|
|
317
|
-
throw new Error(`${label} must be a non-negative safe integer`);
|
|
318
|
-
}
|
|
319
|
-
function canonicalJson(value) {
|
|
320
|
-
return JSON.stringify(canonicalValue(value, { nodes: 0 }, 0));
|
|
321
|
-
}
|
|
322
|
-
function canonicalValue(value, state, depth) {
|
|
323
|
-
state.nodes += 1;
|
|
324
|
-
if (state.nodes > ARTIFACT_OPERATION_MAX_JSON_NODES) {
|
|
325
|
-
throw new ArtifactLimitError(
|
|
326
|
-
"operation JSON nodes",
|
|
327
|
-
state.nodes,
|
|
328
|
-
ARTIFACT_OPERATION_MAX_JSON_NODES
|
|
329
|
-
);
|
|
330
|
-
}
|
|
331
|
-
if (depth > ARTIFACT_OPERATION_MAX_JSON_DEPTH) {
|
|
332
|
-
throw new ArtifactLimitError("operation JSON depth", depth, ARTIFACT_OPERATION_MAX_JSON_DEPTH);
|
|
333
|
-
}
|
|
334
|
-
if (value === null || typeof value === "string" || typeof value === "boolean") return value;
|
|
335
|
-
if (typeof value === "number") {
|
|
336
|
-
if (!Number.isFinite(value))
|
|
337
|
-
throw new Error("Artifact command JSON cannot contain non-finite numbers");
|
|
338
|
-
return Object.is(value, -0) ? 0 : value;
|
|
339
|
-
}
|
|
340
|
-
if (Array.isArray(value)) {
|
|
341
|
-
if (Object.keys(value).length !== value.length || Object.getOwnPropertySymbols(value).length) {
|
|
342
|
-
throw new Error("Artifact command payload arrays must be dense JSON arrays");
|
|
343
|
-
}
|
|
344
|
-
const output = [];
|
|
345
|
-
for (let index = 0; index < value.length; index += 1) {
|
|
346
|
-
const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
|
|
347
|
-
if (!descriptor || !("value" in descriptor) || !descriptor.enumerable) {
|
|
348
|
-
throw new Error("Artifact command payload arrays must contain data properties");
|
|
349
|
-
}
|
|
350
|
-
output.push(canonicalValue(descriptor.value, state, depth + 1));
|
|
351
|
-
}
|
|
352
|
-
return output;
|
|
353
|
-
}
|
|
354
|
-
if (typeof value === "object") {
|
|
355
|
-
if (Object.getPrototypeOf(value) !== Object.prototype)
|
|
356
|
-
throw new Error("Artifact command payload must be plain JSON");
|
|
357
|
-
const record = value;
|
|
358
|
-
const keys = Reflect.ownKeys(record);
|
|
359
|
-
if (keys.some((key) => typeof key !== "string")) {
|
|
360
|
-
throw new Error("Artifact command payload cannot contain symbol properties");
|
|
361
|
-
}
|
|
362
|
-
return Object.fromEntries(
|
|
363
|
-
keys.sort().map((key) => {
|
|
364
|
-
const descriptor = Object.getOwnPropertyDescriptor(record, key);
|
|
365
|
-
if (!descriptor || !("value" in descriptor) || !descriptor.enumerable) {
|
|
366
|
-
throw new Error("Artifact command payload properties must be enumerable data properties");
|
|
367
|
-
}
|
|
368
|
-
return [key, canonicalValue(descriptor.value, state, depth + 1)];
|
|
369
|
-
})
|
|
370
|
-
);
|
|
371
|
-
}
|
|
372
|
-
throw new Error(`Artifact command payload contains unsupported ${typeof value}`);
|
|
373
|
-
}
|
|
374
|
-
function parseCanonicalJson(value) {
|
|
375
|
-
const parsed = JSON.parse(value);
|
|
376
|
-
if (canonicalJson(parsed) !== value)
|
|
377
|
-
throw new Error("Artifact command payload is not canonical JSON");
|
|
378
|
-
return parsed;
|
|
379
|
-
}
|
|
380
|
-
var BinaryWriter = class {
|
|
381
|
-
constructor(maximum) {
|
|
382
|
-
this.maximum = maximum;
|
|
383
|
-
}
|
|
384
|
-
buffer = new Uint8Array(1024);
|
|
385
|
-
length = 0;
|
|
386
|
-
byte(value) {
|
|
387
|
-
this.ensure(1);
|
|
388
|
-
this.buffer[this.length++] = value;
|
|
389
|
-
}
|
|
390
|
-
bytes(value) {
|
|
391
|
-
this.ensure(value.byteLength);
|
|
392
|
-
this.buffer.set(value, this.length);
|
|
393
|
-
this.length += value.byteLength;
|
|
394
|
-
}
|
|
395
|
-
varint(value) {
|
|
396
|
-
assertSafeInteger(value, "varint");
|
|
397
|
-
let remaining = BigInt(value);
|
|
398
|
-
do {
|
|
399
|
-
let byte = Number(remaining & 0x7fn);
|
|
400
|
-
remaining >>= 7n;
|
|
401
|
-
if (remaining > 0n) byte |= 128;
|
|
402
|
-
this.byte(byte);
|
|
403
|
-
} while (remaining > 0n);
|
|
404
|
-
}
|
|
405
|
-
string(value) {
|
|
406
|
-
const bytes = textEncoder.encode(value);
|
|
407
|
-
if (bytes.byteLength > ARTIFACT_OPERATION_MAX_STRING_BYTES) {
|
|
408
|
-
throw new ArtifactLimitError(
|
|
409
|
-
"operation string bytes",
|
|
410
|
-
bytes.byteLength,
|
|
411
|
-
ARTIFACT_OPERATION_MAX_STRING_BYTES
|
|
412
|
-
);
|
|
413
|
-
}
|
|
414
|
-
this.varint(bytes.byteLength);
|
|
415
|
-
this.bytes(bytes);
|
|
416
|
-
}
|
|
417
|
-
finish() {
|
|
418
|
-
return this.buffer.slice(0, this.length);
|
|
419
|
-
}
|
|
420
|
-
ensure(extra) {
|
|
421
|
-
const required = this.length + extra;
|
|
422
|
-
if (required > this.maximum)
|
|
423
|
-
throw new ArtifactLimitError("operation bytes", required, this.maximum);
|
|
424
|
-
if (required <= this.buffer.byteLength) return;
|
|
425
|
-
let nextSize = this.buffer.byteLength;
|
|
426
|
-
while (nextSize < required) nextSize = Math.min(this.maximum, nextSize * 2);
|
|
427
|
-
const next = new Uint8Array(nextSize);
|
|
428
|
-
next.set(this.buffer);
|
|
429
|
-
this.buffer = next;
|
|
430
|
-
}
|
|
431
|
-
};
|
|
432
|
-
var BinaryReader = class {
|
|
433
|
-
constructor(input) {
|
|
434
|
-
this.input = input;
|
|
435
|
-
}
|
|
436
|
-
offset = 0;
|
|
437
|
-
byte() {
|
|
438
|
-
const value = this.input[this.offset];
|
|
439
|
-
if (value === void 0) throw new Error("Truncated artifact operation");
|
|
440
|
-
this.offset += 1;
|
|
441
|
-
return value;
|
|
442
|
-
}
|
|
443
|
-
bytes(length) {
|
|
444
|
-
if (!Number.isSafeInteger(length) || length < 0 || this.offset + length > this.input.byteLength) {
|
|
445
|
-
throw new Error("Truncated artifact operation bytes");
|
|
446
|
-
}
|
|
447
|
-
const value = this.input.subarray(this.offset, this.offset + length);
|
|
448
|
-
this.offset += length;
|
|
449
|
-
return value;
|
|
450
|
-
}
|
|
451
|
-
varint() {
|
|
452
|
-
let value = 0n;
|
|
453
|
-
let shift = 0n;
|
|
454
|
-
for (let index = 0; index < 10; index += 1) {
|
|
455
|
-
const byte = this.byte();
|
|
456
|
-
value |= BigInt(byte & 127) << shift;
|
|
457
|
-
if ((byte & 128) === 0) {
|
|
458
|
-
if (index > 0 && byte === 0) {
|
|
459
|
-
throw new Error("Artifact operation varint is non-canonical");
|
|
460
|
-
}
|
|
461
|
-
const number = Number(value);
|
|
462
|
-
if (!Number.isSafeInteger(number))
|
|
463
|
-
throw new Error("Artifact operation varint exceeds safe integer");
|
|
464
|
-
return number;
|
|
465
|
-
}
|
|
466
|
-
shift += 7n;
|
|
467
|
-
}
|
|
468
|
-
throw new Error("Invalid artifact operation varint");
|
|
469
|
-
}
|
|
470
|
-
string() {
|
|
471
|
-
const length = this.varint();
|
|
472
|
-
if (length > ARTIFACT_OPERATION_MAX_STRING_BYTES) {
|
|
473
|
-
throw new ArtifactLimitError(
|
|
474
|
-
"operation string bytes",
|
|
475
|
-
length,
|
|
476
|
-
ARTIFACT_OPERATION_MAX_STRING_BYTES
|
|
477
|
-
);
|
|
478
|
-
}
|
|
479
|
-
return textDecoder.decode(this.bytes(length));
|
|
480
|
-
}
|
|
481
|
-
done() {
|
|
482
|
-
if (this.offset !== this.input.byteLength)
|
|
483
|
-
throw new Error("Artifact operation has trailing bytes");
|
|
484
|
-
}
|
|
485
|
-
};
|
|
486
129
|
export {
|
|
487
|
-
ARTIFACT_OPERATION_MAX_BYTES,
|
|
488
|
-
ARTIFACT_OPERATION_MAX_COMMANDS,
|
|
489
|
-
ARTIFACT_OPERATION_MAX_JSON_DEPTH,
|
|
490
|
-
ARTIFACT_OPERATION_MAX_JSON_NODES,
|
|
491
|
-
ARTIFACT_OPERATION_MAX_STRING_BYTES,
|
|
492
|
-
ARTIFACT_OPERATION_MAX_VECTOR_ACTORS,
|
|
493
|
-
ArtifactCommandBatchCodec,
|
|
494
130
|
ArtifactKernelRegistry,
|
|
495
131
|
ChartCollection,
|
|
496
132
|
ChartSeriesCollection,
|
package/dist/reference.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/kernel.ts"],"sourcesContent":["import { ArtifactLimitError, UnsupportedArtifactFeatureError } from \"./errors\";\nimport { FileBlob } from \"./file-blob\";\n\nexport type ArtifactModality = \"spreadsheet\" | \"presentation\" | \"document\";\nexport type ArtifactKernelKind = \"native\" | \"wasm\" | \"reference\";\nexport type ArtifactObjectId = string & { readonly __artifactObjectId: unique symbol };\n\nexport type ArtifactKernelCapabilities = {\n modality: ArtifactModality;\n modelSchemaVersion: number;\n operationSchemaVersion: number;\n inspect: boolean;\n calculate: boolean;\n layout: boolean;\n renderFormats: readonly string[];\n importFormats: readonly string[];\n exportFormats: readonly string[];\n collaboration: boolean;\n};\n\nexport type ArtifactCausalVector = Readonly<Record<string, number>>;\n\nexport type ArtifactCommand = {\n code: string;\n targetId?: string;\n precondition?: {\n objectRevision?: number;\n exists?: boolean;\n };\n payload?: unknown;\n};\n\nexport type ArtifactCommandBatch = {\n schemaVersion: 1;\n artifactId: string;\n modality: ArtifactModality;\n transactionId: string;\n actorId: string;\n baseSequence: number;\n baseVector: ArtifactCausalVector;\n commands: readonly ArtifactCommand[];\n};\n\nexport type ArtifactApplyResult = {\n sequence: number;\n vector: ArtifactCausalVector;\n changedObjectIds: readonly string[];\n inverse?: ArtifactCommandBatch;\n};\n\nexport type ArtifactKernelOpenInput = {\n modality: ArtifactModality;\n snapshot?: Uint8Array;\n operationTail?: readonly Uint8Array[];\n};\n\nexport type ArtifactKernelDocument = {\n readonly modality: ArtifactModality;\n readonly revision: number;\n apply(batch: ArtifactCommandBatch): ArtifactApplyResult;\n snapshot(): Uint8Array;\n inspect(options: Record<string, unknown>): Promise<readonly Record<string, unknown>[]>;\n render(options: Record<string, unknown>): Promise<FileBlob>;\n materialize(format: string, options?: Record<string, unknown>): Promise<FileBlob>;\n close(): void;\n};\n\nexport interface ArtifactKernel {\n readonly kind: ArtifactKernelKind;\n readonly version: string;\n capabilities(modality: ArtifactModality): ArtifactKernelCapabilities;\n open(input: ArtifactKernelOpenInput): Promise<ArtifactKernelDocument>;\n}\n\nexport type ArtifactKernelSelection = {\n kernel: ArtifactKernel;\n capabilities: ArtifactKernelCapabilities;\n};\n\n/**\n * Kernel registry used by the universal facade. Hosts register loaders without\n * making application code depend on platform packages. Production selection is\n * deliberately fail-closed: Node/Bun selects only native. Browser editing goes\n * through the SDK's dedicated Worker/WASM session, and the reference backend is\n * selected only when a development/conformance caller explicitly asks for it.\n */\nexport class ArtifactKernelRegistry {\n private readonly kernels = new Map<ArtifactKernelKind, ArtifactKernel>();\n\n register(kernel: ArtifactKernel): () => void {\n if (this.kernels.has(kernel.kind))\n throw new Error(`Artifact ${kernel.kind} kernel already registered`);\n this.kernels.set(kernel.kind, kernel);\n return () => {\n if (this.kernels.get(kernel.kind) === kernel) this.kernels.delete(kernel.kind);\n };\n }\n\n select(\n modality: ArtifactModality,\n required: Partial<\n Pick<ArtifactKernelCapabilities, \"calculate\" | \"layout\" | \"collaboration\">\n > = {},\n order: readonly ArtifactKernelKind[] = defaultKernelOrder(),\n ): ArtifactKernelSelection {\n for (const kind of order) {\n const kernel = this.kernels.get(kind);\n if (!kernel) continue;\n const capabilities = kernel.capabilities(modality);\n if (required.calculate === true && !capabilities.calculate) continue;\n if (required.layout === true && !capabilities.layout) continue;\n if (required.collaboration === true && !capabilities.collaboration) continue;\n return { kernel, capabilities };\n }\n throw new UnsupportedArtifactFeatureError(\n modality,\n \"required kernel capabilities\",\n \"available\",\n );\n }\n\n available(): readonly ArtifactKernel[] {\n return [...this.kernels.values()];\n }\n}\n\nexport const ARTIFACT_OPERATION_MAX_BYTES = 1024 * 1024;\nexport const ARTIFACT_OPERATION_MAX_COMMANDS = 10_000;\nexport const ARTIFACT_OPERATION_MAX_VECTOR_ACTORS = 1_024;\nexport const ARTIFACT_OPERATION_MAX_STRING_BYTES = 256 * 1024;\nexport const ARTIFACT_OPERATION_MAX_JSON_DEPTH = 64;\nexport const ARTIFACT_OPERATION_MAX_JSON_NODES = 100_000;\nconst OPERATION_MAGIC = new Uint8Array([0x4f, 0x47, 0x41, 0x52]); // OGAR\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\n\n/**\n * Deterministic codec retained only for historical TypeScript conformance\n * fixtures.\n *\n * @deprecated OGAR duplicates authored identity/causality and must never be\n * persisted, submitted, or lowered by a production runtime. Use the canonical\n * OGATX001 envelope with an identity-free OGASC001 command payload from\n * `@opengeni/contracts/editable-artifacts`.\n */\nexport const ArtifactCommandBatchCodec = {\n encode(batch: ArtifactCommandBatch): Uint8Array {\n validateBatch(batch);\n const writer = new BinaryWriter(ARTIFACT_OPERATION_MAX_BYTES);\n writer.bytes(OPERATION_MAGIC);\n writer.varint(batch.schemaVersion);\n writer.varint(modalityCode(batch.modality));\n writer.string(batch.artifactId);\n writer.string(batch.transactionId);\n writer.string(batch.actorId);\n writer.varint(batch.baseSequence);\n const vector = Object.entries(batch.baseVector).sort(([left], [right]) =>\n left < right ? -1 : left > right ? 1 : 0,\n );\n writer.varint(vector.length);\n for (const [actor, counter] of vector) {\n writer.string(actor);\n writer.varint(counter);\n }\n writer.varint(batch.commands.length);\n for (const command of batch.commands) {\n writer.string(command.code);\n writer.string(command.targetId ?? \"\");\n let flags = 0;\n if (command.precondition?.objectRevision !== undefined) flags |= 1;\n if (command.precondition?.exists !== undefined) flags |= 2;\n if (command.payload !== undefined) flags |= 4;\n writer.byte(flags);\n if ((flags & 1) !== 0) writer.varint(command.precondition!.objectRevision!);\n if ((flags & 2) !== 0) writer.byte(command.precondition!.exists ? 1 : 0);\n if ((flags & 4) !== 0) writer.string(canonicalJson(command.payload));\n }\n return writer.finish();\n },\n\n decode(bytes: Uint8Array): ArtifactCommandBatch {\n if (bytes.byteLength > ARTIFACT_OPERATION_MAX_BYTES) {\n throw new ArtifactLimitError(\n \"operation bytes\",\n bytes.byteLength,\n ARTIFACT_OPERATION_MAX_BYTES,\n );\n }\n const reader = new BinaryReader(bytes);\n const magic = reader.bytes(OPERATION_MAGIC.length);\n if (!magic.every((value, index) => value === OPERATION_MAGIC[index])) {\n throw new Error(\"Invalid artifact operation magic\");\n }\n const schemaVersion = reader.varint();\n if (schemaVersion !== 1)\n throw new Error(`Unsupported artifact operation schema: ${schemaVersion}`);\n const modality = modalityFromCode(reader.varint());\n const artifactId = reader.string();\n const transactionId = reader.string();\n const actorId = reader.string();\n const baseSequence = reader.varint();\n const vectorCount = reader.varint();\n if (vectorCount > ARTIFACT_OPERATION_MAX_VECTOR_ACTORS) {\n throw new ArtifactLimitError(\n \"causal vector actors\",\n vectorCount,\n ARTIFACT_OPERATION_MAX_VECTOR_ACTORS,\n );\n }\n const vectorEntries: Array<readonly [string, number]> = [];\n let previousActor = \"\";\n for (let index = 0; index < vectorCount; index += 1) {\n const actor = reader.string();\n if (actor <= previousActor) {\n throw new Error(\"Causal vector actors must be unique and sorted\");\n }\n previousActor = actor;\n vectorEntries.push([actor, reader.varint()]);\n }\n // Object.fromEntries defines data properties instead of invoking the legacy\n // `__proto__` setter. Actor identifiers therefore round-trip without\n // mutating the vector object's prototype or silently losing an entry.\n const baseVector = Object.fromEntries(vectorEntries);\n const commandCount = reader.varint();\n if (commandCount > ARTIFACT_OPERATION_MAX_COMMANDS) {\n throw new ArtifactLimitError(\n \"operation commands\",\n commandCount,\n ARTIFACT_OPERATION_MAX_COMMANDS,\n );\n }\n const commands: ArtifactCommand[] = [];\n for (let index = 0; index < commandCount; index += 1) {\n const code = reader.string();\n const targetId = reader.string();\n const flags = reader.byte();\n if ((flags & ~7) !== 0) throw new Error(\"Unknown artifact command flags\");\n const objectRevision = (flags & 1) !== 0 ? reader.varint() : undefined;\n let exists: boolean | undefined;\n if ((flags & 2) !== 0) {\n const encodedExists = reader.byte();\n if (encodedExists > 1) {\n throw new Error(\"Artifact command boolean uses a non-canonical encoding\");\n }\n exists = encodedExists === 1;\n }\n const payload = (flags & 4) !== 0 ? parseCanonicalJson(reader.string()) : undefined;\n commands.push({\n code,\n ...(targetId ? { targetId } : {}),\n ...(objectRevision !== undefined || exists !== undefined\n ? {\n precondition: {\n ...(objectRevision !== undefined ? { objectRevision } : {}),\n ...(exists !== undefined ? { exists } : {}),\n },\n }\n : {}),\n ...(payload !== undefined ? { payload } : {}),\n });\n }\n reader.done();\n const batch: ArtifactCommandBatch = {\n schemaVersion: 1,\n artifactId,\n modality,\n transactionId,\n actorId,\n baseSequence,\n baseVector,\n commands,\n };\n validateBatch(batch);\n return batch;\n },\n};\n\nfunction validateBatch(batch: ArtifactCommandBatch): void {\n if (batch.schemaVersion !== 1) throw new Error(\"Artifact operation schema must be 1\");\n for (const [label, value] of [\n [\"artifactId\", batch.artifactId],\n [\"transactionId\", batch.transactionId],\n [\"actorId\", batch.actorId],\n ] as const) {\n if (!value || value.length > 512) throw new Error(`${label} must contain 1-512 characters`);\n }\n assertSafeInteger(batch.baseSequence, \"baseSequence\");\n const vector = Object.entries(batch.baseVector);\n if (vector.length > ARTIFACT_OPERATION_MAX_VECTOR_ACTORS) {\n throw new ArtifactLimitError(\n \"causal vector actors\",\n vector.length,\n ARTIFACT_OPERATION_MAX_VECTOR_ACTORS,\n );\n }\n for (const [actor, counter] of vector) {\n if (!actor || actor.length > 512)\n throw new Error(\"Causal vector actor must contain 1-512 characters\");\n assertSafeInteger(counter, `baseVector.${actor}`);\n }\n if (batch.commands.length > ARTIFACT_OPERATION_MAX_COMMANDS) {\n throw new ArtifactLimitError(\n \"operation commands\",\n batch.commands.length,\n ARTIFACT_OPERATION_MAX_COMMANDS,\n );\n }\n if (batch.commands.length === 0) throw new Error(\"Artifact command batch must not be empty\");\n for (const command of batch.commands) {\n if (!/^[a-z][a-z0-9_.-]{0,127}$/.test(command.code))\n throw new Error(`Invalid artifact command code: ${command.code}`);\n if (\n command.targetId !== undefined &&\n (command.targetId.length === 0 || command.targetId.length > 512)\n ) {\n throw new Error(\"Artifact command target id must contain 1-512 characters\");\n }\n if (command.precondition?.objectRevision !== undefined) {\n assertSafeInteger(command.precondition.objectRevision, \"objectRevision\");\n }\n }\n}\n\nfunction defaultKernelOrder(): readonly ArtifactKernelKind[] {\n return typeof window === \"undefined\" ? [\"native\"] : [];\n}\n\nfunction modalityCode(modality: ArtifactModality): number {\n return { spreadsheet: 1, presentation: 2, document: 3 }[modality];\n}\n\nfunction modalityFromCode(value: number): ArtifactModality {\n if (value === 1) return \"spreadsheet\";\n if (value === 2) return \"presentation\";\n if (value === 3) return \"document\";\n throw new Error(`Unknown artifact modality code: ${value}`);\n}\n\nfunction assertSafeInteger(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value < 0)\n throw new Error(`${label} must be a non-negative safe integer`);\n}\n\nfunction canonicalJson(value: unknown): string {\n return JSON.stringify(canonicalValue(value, { nodes: 0 }, 0));\n}\n\nfunction canonicalValue(value: unknown, state: { nodes: number }, depth: number): unknown {\n state.nodes += 1;\n if (state.nodes > ARTIFACT_OPERATION_MAX_JSON_NODES) {\n throw new ArtifactLimitError(\n \"operation JSON nodes\",\n state.nodes,\n ARTIFACT_OPERATION_MAX_JSON_NODES,\n );\n }\n if (depth > ARTIFACT_OPERATION_MAX_JSON_DEPTH) {\n throw new ArtifactLimitError(\"operation JSON depth\", depth, ARTIFACT_OPERATION_MAX_JSON_DEPTH);\n }\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return value;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value))\n throw new Error(\"Artifact command JSON cannot contain non-finite numbers\");\n return Object.is(value, -0) ? 0 : value;\n }\n if (Array.isArray(value)) {\n if (Object.keys(value).length !== value.length || Object.getOwnPropertySymbols(value).length) {\n throw new Error(\"Artifact command payload arrays must be dense JSON arrays\");\n }\n const output: unknown[] = [];\n for (let index = 0; index < value.length; index += 1) {\n const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) {\n throw new Error(\"Artifact command payload arrays must contain data properties\");\n }\n output.push(canonicalValue(descriptor.value, state, depth + 1));\n }\n return output;\n }\n if (typeof value === \"object\") {\n if (Object.getPrototypeOf(value) !== Object.prototype)\n throw new Error(\"Artifact command payload must be plain JSON\");\n const record = value as Record<string, unknown>;\n const keys = Reflect.ownKeys(record);\n if (keys.some((key) => typeof key !== \"string\")) {\n throw new Error(\"Artifact command payload cannot contain symbol properties\");\n }\n return Object.fromEntries(\n (keys as string[]).sort().map((key) => {\n const descriptor = Object.getOwnPropertyDescriptor(record, key);\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) {\n throw new Error(\"Artifact command payload properties must be enumerable data properties\");\n }\n return [key, canonicalValue(descriptor.value, state, depth + 1)];\n }),\n );\n }\n throw new Error(`Artifact command payload contains unsupported ${typeof value}`);\n}\n\nfunction parseCanonicalJson(value: string): unknown {\n const parsed: unknown = JSON.parse(value);\n if (canonicalJson(parsed) !== value)\n throw new Error(\"Artifact command payload is not canonical JSON\");\n return parsed;\n}\n\nclass BinaryWriter {\n private buffer = new Uint8Array(1_024);\n private length = 0;\n constructor(private readonly maximum: number) {}\n\n byte(value: number): void {\n this.ensure(1);\n this.buffer[this.length++] = value;\n }\n\n bytes(value: Uint8Array): void {\n this.ensure(value.byteLength);\n this.buffer.set(value, this.length);\n this.length += value.byteLength;\n }\n\n varint(value: number): void {\n assertSafeInteger(value, \"varint\");\n let remaining = BigInt(value);\n do {\n let byte = Number(remaining & 0x7fn);\n remaining >>= 7n;\n if (remaining > 0n) byte |= 0x80;\n this.byte(byte);\n } while (remaining > 0n);\n }\n\n string(value: string): void {\n const bytes = textEncoder.encode(value);\n if (bytes.byteLength > ARTIFACT_OPERATION_MAX_STRING_BYTES) {\n throw new ArtifactLimitError(\n \"operation string bytes\",\n bytes.byteLength,\n ARTIFACT_OPERATION_MAX_STRING_BYTES,\n );\n }\n this.varint(bytes.byteLength);\n this.bytes(bytes);\n }\n\n finish(): Uint8Array {\n return this.buffer.slice(0, this.length);\n }\n\n private ensure(extra: number): void {\n const required = this.length + extra;\n if (required > this.maximum)\n throw new ArtifactLimitError(\"operation bytes\", required, this.maximum);\n if (required <= this.buffer.byteLength) return;\n let nextSize = this.buffer.byteLength;\n while (nextSize < required) nextSize = Math.min(this.maximum, nextSize * 2);\n const next = new Uint8Array(nextSize);\n next.set(this.buffer);\n this.buffer = next;\n }\n}\n\nclass BinaryReader {\n private offset = 0;\n constructor(private readonly input: Uint8Array) {}\n\n byte(): number {\n const value = this.input[this.offset];\n if (value === undefined) throw new Error(\"Truncated artifact operation\");\n this.offset += 1;\n return value;\n }\n\n bytes(length: number): Uint8Array {\n if (\n !Number.isSafeInteger(length) ||\n length < 0 ||\n this.offset + length > this.input.byteLength\n ) {\n throw new Error(\"Truncated artifact operation bytes\");\n }\n const value = this.input.subarray(this.offset, this.offset + length);\n this.offset += length;\n return value;\n }\n\n varint(): number {\n let value = 0n;\n let shift = 0n;\n for (let index = 0; index < 10; index += 1) {\n const byte = this.byte();\n value |= BigInt(byte & 0x7f) << shift;\n if ((byte & 0x80) === 0) {\n if (index > 0 && byte === 0) {\n throw new Error(\"Artifact operation varint is non-canonical\");\n }\n const number = Number(value);\n if (!Number.isSafeInteger(number))\n throw new Error(\"Artifact operation varint exceeds safe integer\");\n return number;\n }\n shift += 7n;\n }\n throw new Error(\"Invalid artifact operation varint\");\n }\n\n string(): string {\n const length = this.varint();\n if (length > ARTIFACT_OPERATION_MAX_STRING_BYTES) {\n throw new ArtifactLimitError(\n \"operation string bytes\",\n length,\n ARTIFACT_OPERATION_MAX_STRING_BYTES,\n );\n }\n return textDecoder.decode(this.bytes(length));\n }\n\n done(): void {\n if (this.offset !== this.input.byteLength)\n throw new Error(\"Artifact operation has trailing bytes\");\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/kernel.ts"],"sourcesContent":["import { UnsupportedArtifactFeatureError } from \"./errors\";\nimport { FileBlob } from \"./file-blob\";\n\nexport type ArtifactModality = \"spreadsheet\" | \"presentation\" | \"document\";\nexport type ArtifactKernelKind = \"native\" | \"wasm\" | \"reference\";\nexport type ArtifactObjectId = string & { readonly __artifactObjectId: unique symbol };\n\nexport type ArtifactKernelCapabilities = {\n modality: ArtifactModality;\n modelSchemaVersion: number;\n operationSchemaVersion: number;\n inspect: boolean;\n calculate: boolean;\n layout: boolean;\n renderFormats: readonly string[];\n importFormats: readonly string[];\n exportFormats: readonly string[];\n collaboration: boolean;\n};\n\nexport type ArtifactCausalVector = Readonly<Record<string, number>>;\n\nexport type ArtifactCommand = {\n code: string;\n targetId?: string;\n precondition?: {\n objectRevision?: number;\n exists?: boolean;\n };\n payload?: unknown;\n};\n\nexport type ArtifactCommandBatch = {\n schemaVersion: 1;\n artifactId: string;\n modality: ArtifactModality;\n transactionId: string;\n actorId: string;\n baseSequence: number;\n baseVector: ArtifactCausalVector;\n commands: readonly ArtifactCommand[];\n};\n\nexport type ArtifactApplyResult = {\n sequence: number;\n vector: ArtifactCausalVector;\n changedObjectIds: readonly string[];\n inverse?: ArtifactCommandBatch;\n};\n\nexport type ArtifactKernelOpenInput = {\n modality: ArtifactModality;\n snapshot?: Uint8Array;\n operationTail?: readonly Uint8Array[];\n};\n\nexport type ArtifactKernelDocument = {\n readonly modality: ArtifactModality;\n readonly revision: number;\n apply(batch: ArtifactCommandBatch): ArtifactApplyResult;\n snapshot(): Uint8Array;\n inspect(options: Record<string, unknown>): Promise<readonly Record<string, unknown>[]>;\n render(options: Record<string, unknown>): Promise<FileBlob>;\n materialize(format: string, options?: Record<string, unknown>): Promise<FileBlob>;\n close(): void;\n};\n\nexport interface ArtifactKernel {\n readonly kind: ArtifactKernelKind;\n readonly version: string;\n capabilities(modality: ArtifactModality): ArtifactKernelCapabilities;\n open(input: ArtifactKernelOpenInput): Promise<ArtifactKernelDocument>;\n}\n\nexport type ArtifactKernelSelection = {\n kernel: ArtifactKernel;\n capabilities: ArtifactKernelCapabilities;\n};\n\n/**\n * Kernel registry used by the universal facade. Hosts register loaders without\n * making application code depend on platform packages. Production selection is\n * deliberately fail-closed: Node/Bun selects only native. Browser editing goes\n * through the SDK's dedicated Worker/WASM session, and the reference backend is\n * selected only when a development/conformance caller explicitly asks for it.\n */\nexport class ArtifactKernelRegistry {\n private readonly kernels = new Map<ArtifactKernelKind, ArtifactKernel>();\n\n register(kernel: ArtifactKernel): () => void {\n if (this.kernels.has(kernel.kind))\n throw new Error(`Artifact ${kernel.kind} kernel already registered`);\n this.kernels.set(kernel.kind, kernel);\n return () => {\n if (this.kernels.get(kernel.kind) === kernel) this.kernels.delete(kernel.kind);\n };\n }\n\n select(\n modality: ArtifactModality,\n required: Partial<\n Pick<ArtifactKernelCapabilities, \"calculate\" | \"layout\" | \"collaboration\">\n > = {},\n order: readonly ArtifactKernelKind[] = defaultKernelOrder(),\n ): ArtifactKernelSelection {\n for (const kind of order) {\n const kernel = this.kernels.get(kind);\n if (!kernel) continue;\n const capabilities = kernel.capabilities(modality);\n if (required.calculate === true && !capabilities.calculate) continue;\n if (required.layout === true && !capabilities.layout) continue;\n if (required.collaboration === true && !capabilities.collaboration) continue;\n return { kernel, capabilities };\n }\n throw new UnsupportedArtifactFeatureError(\n modality,\n \"required kernel capabilities\",\n \"available\",\n );\n }\n\n available(): readonly ArtifactKernel[] {\n return [...this.kernels.values()];\n }\n}\n\nfunction defaultKernelOrder(): readonly ArtifactKernelKind[] {\n return typeof window === \"undefined\" ? [\"native\"] : [];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsFO,IAAM,yBAAN,MAA6B;AAAA,EACjB,UAAU,oBAAI,IAAwC;AAAA,EAEvE,SAAS,QAAoC;AAC3C,QAAI,KAAK,QAAQ,IAAI,OAAO,IAAI;AAC9B,YAAM,IAAI,MAAM,YAAY,OAAO,IAAI,4BAA4B;AACrE,SAAK,QAAQ,IAAI,OAAO,MAAM,MAAM;AACpC,WAAO,MAAM;AACX,UAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,MAAM,OAAQ,MAAK,QAAQ,OAAO,OAAO,IAAI;AAAA,IAC/E;AAAA,EACF;AAAA,EAEA,OACE,UACA,WAEI,CAAC,GACL,QAAuC,mBAAmB,GACjC;AACzB,eAAW,QAAQ,OAAO;AACxB,YAAM,SAAS,KAAK,QAAQ,IAAI,IAAI;AACpC,UAAI,CAAC,OAAQ;AACb,YAAM,eAAe,OAAO,aAAa,QAAQ;AACjD,UAAI,SAAS,cAAc,QAAQ,CAAC,aAAa,UAAW;AAC5D,UAAI,SAAS,WAAW,QAAQ,CAAC,aAAa,OAAQ;AACtD,UAAI,SAAS,kBAAkB,QAAQ,CAAC,aAAa,cAAe;AACpE,aAAO,EAAE,QAAQ,aAAa;AAAA,IAChC;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,YAAuC;AACrC,WAAO,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC;AAAA,EAClC;AACF;AAEA,SAAS,qBAAoD;AAC3D,SAAO,OAAO,WAAW,cAAc,CAAC,QAAQ,IAAI,CAAC;AACvD;","names":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runConfiguredArtifactRuntimeCli
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-LMLPFF3S.js";
|
|
5
|
+
import "./chunk-4XJE7NRA.js";
|
|
6
6
|
import {
|
|
7
7
|
ArtifactRuntimeError
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-4YYYUZQH.js";
|
|
9
9
|
import "./chunk-VUNV25KB.js";
|
|
10
10
|
|
|
11
11
|
// src/runtime-cli-entry.ts
|
package/dist/runtime-cli.js
CHANGED
|
@@ -9,8 +9,8 @@ import {
|
|
|
9
9
|
resolveCurrentArtifactRuntimeTarget,
|
|
10
10
|
resolveLinuxLibcFromRuntimeEvidence,
|
|
11
11
|
runArtifactRuntimeCli
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-4XJE7NRA.js";
|
|
13
|
+
import "./chunk-4YYYUZQH.js";
|
|
14
14
|
import "./chunk-VUNV25KB.js";
|
|
15
15
|
export {
|
|
16
16
|
canonicalArtifactRuntimeInstallationManifestBytes,
|
|
@@ -10,9 +10,9 @@ import {
|
|
|
10
10
|
locateVerifiedDevelopmentArtifactRuntime,
|
|
11
11
|
runConfiguredArtifactRuntimeCli,
|
|
12
12
|
validateDevelopmentArtifactRuntimeManifest
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
13
|
+
} from "./chunk-LMLPFF3S.js";
|
|
14
|
+
import "./chunk-4XJE7NRA.js";
|
|
15
|
+
import "./chunk-4YYYUZQH.js";
|
|
16
16
|
import "./chunk-VUNV25KB.js";
|
|
17
17
|
export {
|
|
18
18
|
DEVELOPMENT_ARTIFACT_RUNTIME_ENVIRONMENT,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ArtifactRuntimeTarget } from "./runtime.js";
|
|
2
2
|
export type ArtifactKernelBuildReceipt = Readonly<{
|
|
3
|
-
schemaVersion:
|
|
4
|
-
producer: "opengeni-artifact-kernel-smoke-
|
|
3
|
+
schemaVersion: 2;
|
|
4
|
+
producer: "opengeni-artifact-kernel-smoke-v2";
|
|
5
5
|
target: ArtifactRuntimeTarget;
|
|
6
6
|
kind: "native" | "wasm";
|
|
7
7
|
buildIdentity: string;
|
|
@@ -9,6 +9,7 @@ export type ArtifactKernelBuildReceipt = Readonly<{
|
|
|
9
9
|
bytes: number;
|
|
10
10
|
sha256: `sha256:${string}`;
|
|
11
11
|
}>;
|
|
12
|
+
spreadsheetFormulaProjectionCorpusSha256: `sha256:${string}`;
|
|
12
13
|
runtimeFiles: readonly Readonly<{
|
|
13
14
|
path: string;
|
|
14
15
|
bytes: number;
|
package/dist/runtime.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { COMMITTED_TRANSACTION_PROTOCOL_VERSION, SPREADSHEET_ARTIFACT_COMMAND_VERSION, SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION, SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION, SPREADSHEET_KERNEL_COMMAND_VERSION, SPREADSHEET_KERNEL_SNAPSHOT_VERSION } from "@opengeni/contracts/editable-artifact-versions";
|
|
1
2
|
/**
|
|
2
3
|
* Exact artifact-kernel distribution and runtime boundary.
|
|
3
4
|
*
|
|
@@ -159,13 +160,14 @@ export type ArtifactRuntimeKernelDependencies = Pick<ArtifactRuntimeDependencies
|
|
|
159
160
|
export type ArtifactKernelCapabilities = {
|
|
160
161
|
readonly abiVersion: 1;
|
|
161
162
|
readonly buildIdentityFormat: "utf8";
|
|
162
|
-
readonly commandSchemaVersion:
|
|
163
|
-
readonly spreadsheetCommandVersion:
|
|
164
|
-
readonly
|
|
163
|
+
readonly commandSchemaVersion: typeof SPREADSHEET_KERNEL_COMMAND_VERSION;
|
|
164
|
+
readonly spreadsheetCommandVersion: typeof SPREADSHEET_ARTIFACT_COMMAND_VERSION;
|
|
165
|
+
readonly spreadsheetModelSchemaVersion: typeof SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION;
|
|
166
|
+
readonly kernelSnapshotVersion: typeof SPREADSHEET_KERNEL_SNAPSHOT_VERSION;
|
|
165
167
|
readonly receiptSchemaVersion: 1;
|
|
166
|
-
readonly collaborationSnapshotVersion:
|
|
168
|
+
readonly collaborationSnapshotVersion: typeof SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION;
|
|
167
169
|
readonly editableArtifactIntentVersion: 1;
|
|
168
|
-
readonly committedTransactionVersion:
|
|
170
|
+
readonly committedTransactionVersion: typeof COMMITTED_TRANSACTION_PROTOCOL_VERSION;
|
|
169
171
|
readonly queryVersion: 1;
|
|
170
172
|
readonly queryResponseVersion: 1;
|
|
171
173
|
readonly collaboration: true;
|
|
@@ -226,7 +228,7 @@ export type ArtifactKernelPackageModule = {
|
|
|
226
228
|
readonly loadArtifactKernelBinding: () => unknown | Promise<unknown>;
|
|
227
229
|
};
|
|
228
230
|
export type ArtifactRuntimeModuleImporter = (specifier: string) => unknown | Promise<unknown>;
|
|
229
|
-
export type ArtifactRuntimeErrorCode = "ARTIFACT_RUNTIME_INCOMPATIBLE" | "ARTIFACT_RUNTIME_INTEGRITY" | "ARTIFACT_RUNTIME_MANIFEST_INVALID" | "ARTIFACT_RUNTIME_UNAVAILABLE" | "ARTIFACT_RUNTIME_UNSUPPORTED_TARGET";
|
|
231
|
+
export type ArtifactRuntimeErrorCode = "ARTIFACT_RUNTIME_INCOMPATIBLE" | "ARTIFACT_RUNTIME_INTEGRITY" | "ARTIFACT_RUNTIME_MANIFEST_INVALID" | "ARTIFACT_RUNTIME_PROJECTION_PARITY" | "ARTIFACT_RUNTIME_UNAVAILABLE" | "ARTIFACT_RUNTIME_UNSUPPORTED_TARGET";
|
|
230
232
|
export declare class ArtifactRuntimeError extends Error {
|
|
231
233
|
readonly code: ArtifactRuntimeErrorCode;
|
|
232
234
|
constructor(code: ArtifactRuntimeErrorCode, message: string, options?: ErrorOptions);
|
package/dist/runtime.js
CHANGED
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
validateArtifactKernelPackageManifest,
|
|
18
18
|
validateArtifactRuntimeInstallationManifest,
|
|
19
19
|
validateCompleteArtifactRuntimeReleaseManifest
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-4YYYUZQH.js";
|
|
21
21
|
import "./chunk-VUNV25KB.js";
|
|
22
22
|
export {
|
|
23
23
|
ARTIFACT_RUNTIME_ENVIRONMENT,
|
package/dist/snapshot.d.ts
CHANGED
|
@@ -1,24 +1,31 @@
|
|
|
1
|
+
import { COMMITTED_TRANSACTION_PROTOCOL_VERSION, DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION, DOCUMENT_ARTIFACT_SNAPSHOT_VERSION, PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION, PRESENTATION_ARTIFACT_SNAPSHOT_VERSION, SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION, SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION } from "@opengeni/contracts/editable-artifact-versions";
|
|
1
2
|
import type { Document } from "./document.js";
|
|
2
3
|
import type { Presentation } from "./presentation.js";
|
|
3
4
|
import type { Workbook } from "./spreadsheet.js";
|
|
4
5
|
type ArtifactSnapshotCommon = Readonly<{
|
|
5
6
|
schemaVersion: 1;
|
|
6
|
-
modality: "spreadsheet" | "document" | "presentation";
|
|
7
7
|
runtimeTarget: string;
|
|
8
8
|
kernelVersion: string;
|
|
9
|
-
modelSchemaVersion: 1;
|
|
10
|
-
snapshotVersion: 1;
|
|
11
9
|
stateHash: string;
|
|
12
10
|
snapshotBytes: Uint8Array;
|
|
13
11
|
}>;
|
|
14
12
|
/** Exact native-canonical state at one durable artifact boundary. */
|
|
15
13
|
export type ArtifactSnapshot = (ArtifactSnapshotCommon & Readonly<{
|
|
16
14
|
modality: "spreadsheet";
|
|
15
|
+
modelSchemaVersion: typeof SPREADSHEET_ARTIFACT_MODEL_SCHEMA_VERSION;
|
|
16
|
+
snapshotVersion: typeof SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION;
|
|
17
17
|
coveredCausalFrontierBytes: Uint8Array;
|
|
18
|
-
operationProtocolVersion:
|
|
19
|
-
crdtStateVersion:
|
|
18
|
+
operationProtocolVersion: typeof COMMITTED_TRANSACTION_PROTOCOL_VERSION;
|
|
19
|
+
crdtStateVersion: typeof SPREADSHEET_COLLABORATION_SNAPSHOT_VERSION;
|
|
20
20
|
}>) | (ArtifactSnapshotCommon & Readonly<{
|
|
21
|
-
modality: "document"
|
|
21
|
+
modality: "document";
|
|
22
|
+
modelSchemaVersion: typeof DOCUMENT_ARTIFACT_MODEL_SCHEMA_VERSION;
|
|
23
|
+
snapshotVersion: typeof DOCUMENT_ARTIFACT_SNAPSHOT_VERSION;
|
|
24
|
+
nativeRevision: number;
|
|
25
|
+
}>) | (ArtifactSnapshotCommon & Readonly<{
|
|
26
|
+
modality: "presentation";
|
|
27
|
+
modelSchemaVersion: typeof PRESENTATION_ARTIFACT_MODEL_SCHEMA_VERSION;
|
|
28
|
+
snapshotVersion: typeof PRESENTATION_ARTIFACT_SNAPSHOT_VERSION;
|
|
22
29
|
nativeRevision: number;
|
|
23
30
|
}>);
|
|
24
31
|
/** Capture one immutable native snapshot from an open artifact object. */
|