@kumwe/studio-core 0.1.0-alpha.2

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.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -0
  3. package/dist/canonical.d.ts +20 -0
  4. package/dist/canonical.d.ts.map +1 -0
  5. package/dist/canonical.js +100 -0
  6. package/dist/canonical.js.map +1 -0
  7. package/dist/clone.d.ts +2 -0
  8. package/dist/clone.d.ts.map +1 -0
  9. package/dist/clone.js +4 -0
  10. package/dist/clone.js.map +1 -0
  11. package/dist/commands.d.ts +12 -0
  12. package/dist/commands.d.ts.map +1 -0
  13. package/dist/commands.js +679 -0
  14. package/dist/commands.js.map +1 -0
  15. package/dist/contributions.d.ts +65 -0
  16. package/dist/contributions.d.ts.map +1 -0
  17. package/dist/contributions.js +302 -0
  18. package/dist/contributions.js.map +1 -0
  19. package/dist/entry-commands.d.ts +3 -0
  20. package/dist/entry-commands.d.ts.map +1 -0
  21. package/dist/entry-commands.js +36 -0
  22. package/dist/entry-commands.js.map +1 -0
  23. package/dist/history.d.ts +13 -0
  24. package/dist/history.d.ts.map +1 -0
  25. package/dist/history.js +63 -0
  26. package/dist/history.js.map +1 -0
  27. package/dist/index.d.ts +15 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +15 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/migrations.d.ts +47 -0
  32. package/dist/migrations.d.ts.map +1 -0
  33. package/dist/migrations.js +83 -0
  34. package/dist/migrations.js.map +1 -0
  35. package/dist/model-commands.d.ts +3 -0
  36. package/dist/model-commands.d.ts.map +1 -0
  37. package/dist/model-commands.js +21 -0
  38. package/dist/model-commands.js.map +1 -0
  39. package/dist/negotiation.d.ts +23 -0
  40. package/dist/negotiation.d.ts.map +1 -0
  41. package/dist/negotiation.js +65 -0
  42. package/dist/negotiation.js.map +1 -0
  43. package/dist/recipes.d.ts +15 -0
  44. package/dist/recipes.d.ts.map +1 -0
  45. package/dist/recipes.js +34 -0
  46. package/dist/recipes.js.map +1 -0
  47. package/dist/registry.d.ts +17 -0
  48. package/dist/registry.d.ts.map +1 -0
  49. package/dist/registry.js +56 -0
  50. package/dist/registry.js.map +1 -0
  51. package/dist/schema-profile.d.ts +9 -0
  52. package/dist/schema-profile.d.ts.map +1 -0
  53. package/dist/schema-profile.js +387 -0
  54. package/dist/schema-profile.js.map +1 -0
  55. package/dist/semver.d.ts +20 -0
  56. package/dist/semver.d.ts.map +1 -0
  57. package/dist/semver.js +128 -0
  58. package/dist/semver.js.map +1 -0
  59. package/dist/session.d.ts +33 -0
  60. package/dist/session.d.ts.map +1 -0
  61. package/dist/session.js +113 -0
  62. package/dist/session.js.map +1 -0
  63. package/dist/validation.d.ts +13 -0
  64. package/dist/validation.d.ts.map +1 -0
  65. package/dist/validation.js +398 -0
  66. package/dist/validation.js.map +1 -0
  67. package/package.json +40 -0
@@ -0,0 +1,387 @@
1
+ import { Ajv2020 } from 'ajv/dist/2020.js';
2
+ const DRAFT_2020_12 = 'https://json-schema.org/draft/2020-12/schema';
3
+ const MAX_ALTERNATIVES = 64;
4
+ const MAX_ENUM_MEMBERS = 1_024;
5
+ const MAX_JSON_DEPTH = 64;
6
+ const MAX_JSON_ITEMS = 10_000;
7
+ const MAX_JSON_PROPERTIES = 1_000;
8
+ const MAX_REFERENCES = 128;
9
+ const MAX_SCHEMA_BYTES = 262_144;
10
+ const MAX_SCHEMA_DEPTH = 32;
11
+ const MAX_SCHEMA_MAP_PROPERTIES = 512;
12
+ const MAX_SCHEMA_NODES = 1_024;
13
+ const MAX_OBJECT_KEY_LENGTH = 200;
14
+ /**
15
+ * The published complexity limits of the Studio Schema Profile. The
16
+ * machine-readable meta-schema (`schema-profile.schema.json`) carries the
17
+ * same values; a parity test keeps the two from drifting.
18
+ */
19
+ export const STUDIO_SCHEMA_PROFILE_LIMITS = Object.freeze({
20
+ maxAlternatives: MAX_ALTERNATIVES,
21
+ maxEnumMembers: MAX_ENUM_MEMBERS,
22
+ maxJsonDepth: MAX_JSON_DEPTH,
23
+ maxJsonItems: MAX_JSON_ITEMS,
24
+ maxJsonProperties: MAX_JSON_PROPERTIES,
25
+ maxObjectKeyLength: MAX_OBJECT_KEY_LENGTH,
26
+ maxReferences: MAX_REFERENCES,
27
+ maxSchemaBytes: MAX_SCHEMA_BYTES,
28
+ maxSchemaDepth: MAX_SCHEMA_DEPTH,
29
+ maxSchemaMapProperties: MAX_SCHEMA_MAP_PROPERTIES,
30
+ maxSchemaNodes: MAX_SCHEMA_NODES,
31
+ });
32
+ const allowedKeywords = new Set([
33
+ '$defs',
34
+ '$ref',
35
+ '$schema',
36
+ 'additionalProperties',
37
+ 'allOf',
38
+ 'anyOf',
39
+ 'const',
40
+ 'default',
41
+ 'dependentRequired',
42
+ 'description',
43
+ 'else',
44
+ 'enum',
45
+ 'examples',
46
+ 'exclusiveMaximum',
47
+ 'exclusiveMinimum',
48
+ 'if',
49
+ 'items',
50
+ 'maxItems',
51
+ 'maxLength',
52
+ 'maxProperties',
53
+ 'maximum',
54
+ 'minItems',
55
+ 'minLength',
56
+ 'minProperties',
57
+ 'minimum',
58
+ 'multipleOf',
59
+ 'not',
60
+ 'oneOf',
61
+ 'prefixItems',
62
+ 'properties',
63
+ 'propertyNames',
64
+ 'readOnly',
65
+ 'required',
66
+ 'then',
67
+ 'title',
68
+ 'type',
69
+ 'uniqueItems',
70
+ 'writeOnly',
71
+ ]);
72
+ export function assertStudioPropertySchema(schema) {
73
+ const state = { references: 0, schemaNodes: 0, seen: new WeakSet() };
74
+ visitSchema(schema, '$', 1, state);
75
+ assertNonRecursiveSchema(schema);
76
+ let serialized;
77
+ try {
78
+ serialized = JSON.stringify(schema);
79
+ }
80
+ catch (error) {
81
+ throw new TypeError('Studio property schema must be an acyclic JSON document.', {
82
+ cause: error,
83
+ });
84
+ }
85
+ if (utf8ByteLength(serialized) > MAX_SCHEMA_BYTES) {
86
+ throw new RangeError(`Studio property schema exceeds ${MAX_SCHEMA_BYTES} bytes.`);
87
+ }
88
+ try {
89
+ new Ajv2020({ addUsedSchema: false, allErrors: true, strict: true }).compile(schema);
90
+ }
91
+ catch (error) {
92
+ throw new TypeError('Studio property schema does not compile under the strict profile.', {
93
+ cause: error,
94
+ });
95
+ }
96
+ }
97
+ function visitSchema(value, path, depth, state) {
98
+ if (!isRecord(value)) {
99
+ throw new TypeError(`${path} must be a JSON Schema object.`);
100
+ }
101
+ trackObject(value, path, state);
102
+ if (depth > MAX_SCHEMA_DEPTH) {
103
+ throw new RangeError(`${path} exceeds the Studio Schema Profile depth limit.`);
104
+ }
105
+ state.schemaNodes += 1;
106
+ if (state.schemaNodes > MAX_SCHEMA_NODES) {
107
+ throw new RangeError(`Studio property schema exceeds ${MAX_SCHEMA_NODES} schema nodes.`);
108
+ }
109
+ for (const [keyword, keywordValue] of Object.entries(value)) {
110
+ assertSafeObjectKey(keyword, path);
111
+ if (!allowedKeywords.has(keyword)) {
112
+ throw new TypeError(`${path}.${keyword} is not allowed by the Studio Schema Profile.`);
113
+ }
114
+ switch (keyword) {
115
+ case '$defs':
116
+ case 'properties':
117
+ visitSchemaMap(keywordValue, `${path}.${keyword}`, depth + 1, state);
118
+ break;
119
+ case 'additionalProperties':
120
+ case 'else':
121
+ case 'if':
122
+ case 'items':
123
+ case 'not':
124
+ case 'propertyNames':
125
+ case 'then':
126
+ visitSubschema(keywordValue, `${path}.${keyword}`, depth + 1, state);
127
+ break;
128
+ case 'allOf':
129
+ case 'anyOf':
130
+ case 'oneOf':
131
+ case 'prefixItems':
132
+ visitSchemaArray(keywordValue, `${path}.${keyword}`, depth + 1, state);
133
+ break;
134
+ case '$ref':
135
+ visitReference(keywordValue, `${path}.${keyword}`, state);
136
+ break;
137
+ case '$schema':
138
+ if (keywordValue !== DRAFT_2020_12) {
139
+ throw new TypeError(`${path} must declare JSON Schema Draft 2020-12.`);
140
+ }
141
+ break;
142
+ case 'enum':
143
+ if (!Array.isArray(keywordValue) || keywordValue.length > MAX_ENUM_MEMBERS) {
144
+ throw new RangeError(`${path}.enum exceeds ${MAX_ENUM_MEMBERS} members.`);
145
+ }
146
+ visitJsonValue(keywordValue, `${path}.enum`, depth + 1, state);
147
+ break;
148
+ default:
149
+ visitJsonValue(keywordValue, `${path}.${keyword}`, depth + 1, state);
150
+ }
151
+ }
152
+ }
153
+ function visitSchemaMap(value, path, depth, state) {
154
+ if (!isRecord(value)) {
155
+ throw new TypeError(`${path} must be an object of schemas.`);
156
+ }
157
+ trackObject(value, path, state);
158
+ const entries = Object.entries(value);
159
+ if (entries.length > MAX_SCHEMA_MAP_PROPERTIES) {
160
+ throw new RangeError(`${path} exceeds ${MAX_SCHEMA_MAP_PROPERTIES} schema entries.`);
161
+ }
162
+ for (const [name, schema] of entries) {
163
+ assertSafeObjectKey(name, path);
164
+ visitSchema(schema, `${path}.${name}`, depth, state);
165
+ }
166
+ }
167
+ function visitSchemaArray(value, path, depth, state) {
168
+ if (!Array.isArray(value) || value.length > MAX_ALTERNATIVES) {
169
+ throw new RangeError(`${path} must contain at most ${MAX_ALTERNATIVES} schemas.`);
170
+ }
171
+ trackObject(value, path, state);
172
+ assertDenseArray(value, path);
173
+ for (const [index, schema] of value.entries()) {
174
+ visitSubschema(schema, `${path}[${index}]`, depth, state);
175
+ }
176
+ }
177
+ function visitSubschema(value, path, depth, state) {
178
+ if (typeof value === 'boolean') {
179
+ return;
180
+ }
181
+ visitSchema(value, path, depth, state);
182
+ }
183
+ function visitReference(value, path, state) {
184
+ if (typeof value !== 'string' ||
185
+ (value !== '#' && !value.startsWith('#/')) ||
186
+ value.length > 500) {
187
+ throw new TypeError(`${path} must be a bounded local JSON Pointer reference.`);
188
+ }
189
+ state.references += 1;
190
+ if (state.references > MAX_REFERENCES) {
191
+ throw new RangeError(`Studio property schema exceeds ${MAX_REFERENCES} references.`);
192
+ }
193
+ }
194
+ function visitJsonValue(value, path, depth, state) {
195
+ if (value === null ||
196
+ typeof value === 'boolean' ||
197
+ typeof value === 'string' ||
198
+ (typeof value === 'number' && Number.isFinite(value))) {
199
+ return;
200
+ }
201
+ if (depth > MAX_JSON_DEPTH) {
202
+ throw new RangeError(`${path} exceeds the Studio Schema Profile JSON depth limit.`);
203
+ }
204
+ if (Array.isArray(value)) {
205
+ trackObject(value, path, state);
206
+ assertDenseArray(value, path);
207
+ if (value.length > MAX_JSON_ITEMS) {
208
+ throw new RangeError(`${path} exceeds ${MAX_JSON_ITEMS} JSON items.`);
209
+ }
210
+ for (const [index, entry] of value.entries()) {
211
+ visitJsonValue(entry, `${path}[${index}]`, depth + 1, state);
212
+ }
213
+ return;
214
+ }
215
+ if (isRecord(value)) {
216
+ trackObject(value, path, state);
217
+ const entries = Object.entries(value);
218
+ if (entries.length > MAX_JSON_PROPERTIES) {
219
+ throw new RangeError(`${path} exceeds ${MAX_JSON_PROPERTIES} JSON properties.`);
220
+ }
221
+ for (const [key, entry] of entries) {
222
+ assertSafeObjectKey(key, path);
223
+ visitJsonValue(entry, `${path}.${key}`, depth + 1, state);
224
+ }
225
+ return;
226
+ }
227
+ throw new TypeError(`${path} is not JSON-compatible.`);
228
+ }
229
+ function assertSafeObjectKey(key, path) {
230
+ if (key.length === 0 ||
231
+ key.length > MAX_OBJECT_KEY_LENGTH ||
232
+ key === '__proto__' ||
233
+ key === 'constructor' ||
234
+ key === 'prototype' ||
235
+ containsControlCharacter(key)) {
236
+ throw new TypeError(`${path} contains forbidden object member name ${JSON.stringify(key)}.`);
237
+ }
238
+ }
239
+ function assertNonRecursiveSchema(root) {
240
+ const active = new WeakSet();
241
+ const finished = new WeakSet();
242
+ const stack = [{ entered: false, node: root }];
243
+ while (stack.length > 0) {
244
+ const frame = stack.pop();
245
+ if (frame === undefined || finished.has(frame.node)) {
246
+ continue;
247
+ }
248
+ if (frame.entered) {
249
+ active.delete(frame.node);
250
+ finished.add(frame.node);
251
+ continue;
252
+ }
253
+ if (active.has(frame.node)) {
254
+ throw new TypeError('Recursive contributed schemas are not admitted by the alpha profile.');
255
+ }
256
+ active.add(frame.node);
257
+ stack.push({ entered: true, node: frame.node });
258
+ const dependencies = schemaDependencies(frame.node, root);
259
+ for (let index = dependencies.length - 1; index >= 0; index -= 1) {
260
+ const dependency = dependencies[index];
261
+ if (dependency === undefined || finished.has(dependency)) {
262
+ continue;
263
+ }
264
+ if (active.has(dependency)) {
265
+ throw new TypeError('Recursive contributed schemas are not admitted by the alpha profile.');
266
+ }
267
+ stack.push({ entered: false, node: dependency });
268
+ }
269
+ }
270
+ }
271
+ function schemaDependencies(schema, root) {
272
+ const dependencies = [];
273
+ for (const keyword of [
274
+ 'additionalProperties',
275
+ 'else',
276
+ 'if',
277
+ 'items',
278
+ 'not',
279
+ 'propertyNames',
280
+ 'then',
281
+ ]) {
282
+ appendSchemaDependency(dependencies, schema[keyword]);
283
+ }
284
+ for (const keyword of ['allOf', 'anyOf', 'oneOf', 'prefixItems']) {
285
+ const candidates = schema[keyword];
286
+ if (Array.isArray(candidates)) {
287
+ for (const candidate of candidates) {
288
+ appendSchemaDependency(dependencies, candidate);
289
+ }
290
+ }
291
+ }
292
+ for (const keyword of ['$defs', 'properties']) {
293
+ const schemaMap = schema[keyword];
294
+ if (isRecord(schemaMap)) {
295
+ for (const candidate of Object.values(schemaMap)) {
296
+ appendSchemaDependency(dependencies, candidate);
297
+ }
298
+ }
299
+ }
300
+ if (typeof schema.$ref === 'string') {
301
+ appendSchemaDependency(dependencies, resolveLocalReference(root, schema.$ref));
302
+ }
303
+ return dependencies;
304
+ }
305
+ function appendSchemaDependency(dependencies, value) {
306
+ if (isRecord(value)) {
307
+ dependencies.push(value);
308
+ }
309
+ }
310
+ function resolveLocalReference(root, reference) {
311
+ if (reference === '#') {
312
+ return root;
313
+ }
314
+ let current = root;
315
+ for (const encodedToken of reference.slice(2).split('/')) {
316
+ if (/(?:~[^01]|~$)/u.test(encodedToken)) {
317
+ throw new TypeError(`Local schema reference ${reference} is not a valid JSON Pointer.`);
318
+ }
319
+ const token = encodedToken.replaceAll('~1', '/').replaceAll('~0', '~');
320
+ if (!isRecord(current) && !Array.isArray(current)) {
321
+ throw new TypeError(`Local schema reference ${reference} does not resolve to a schema.`);
322
+ }
323
+ if (!Object.hasOwn(current, token)) {
324
+ throw new TypeError(`Local schema reference ${reference} does not resolve to a schema.`);
325
+ }
326
+ current = current[token];
327
+ }
328
+ if (typeof current !== 'boolean' && !isRecord(current)) {
329
+ throw new TypeError(`Local schema reference ${reference} does not resolve to a schema.`);
330
+ }
331
+ return current;
332
+ }
333
+ function containsControlCharacter(value) {
334
+ for (let index = 0; index < value.length; index += 1) {
335
+ const code = value.charCodeAt(index);
336
+ if (code <= 0x1f || code === 0x7f) {
337
+ return true;
338
+ }
339
+ }
340
+ return false;
341
+ }
342
+ function assertDenseArray(value, path) {
343
+ const keys = Object.keys(value);
344
+ if (keys.length !== value.length || keys.some((key, index) => key !== String(index))) {
345
+ throw new TypeError(`${path} must be a dense JSON array without extra properties.`);
346
+ }
347
+ }
348
+ function trackObject(value, path, state) {
349
+ if (state.seen.has(value)) {
350
+ throw new TypeError(`${path} reuses or cycles a JSON object.`);
351
+ }
352
+ state.seen.add(value);
353
+ }
354
+ function isRecord(value) {
355
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
356
+ return false;
357
+ }
358
+ const prototype = Object.getPrototypeOf(value);
359
+ return prototype === Object.prototype || prototype === null;
360
+ }
361
+ function utf8ByteLength(value) {
362
+ let bytes = 0;
363
+ for (let index = 0; index < value.length; index += 1) {
364
+ const code = value.charCodeAt(index);
365
+ if (code <= 0x7f) {
366
+ bytes += 1;
367
+ }
368
+ else if (code <= 0x7ff) {
369
+ bytes += 2;
370
+ }
371
+ else if (code >= 0xd800 && code <= 0xdbff) {
372
+ const next = value.charCodeAt(index + 1);
373
+ if (next >= 0xdc00 && next <= 0xdfff) {
374
+ bytes += 4;
375
+ index += 1;
376
+ }
377
+ else {
378
+ bytes += 3;
379
+ }
380
+ }
381
+ else {
382
+ bytes += 3;
383
+ }
384
+ }
385
+ return bytes;
386
+ }
387
+ //# sourceMappingURL=schema-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-profile.js","sourceRoot":"","sources":["../src/schema-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface ParsedSemanticVersion {
2
+ major: number;
3
+ minor: number;
4
+ patch: number;
5
+ prerelease: readonly (number | string)[];
6
+ }
7
+ export declare function parseSemanticVersion(value: string): ParsedSemanticVersion;
8
+ /** SemVer 2.0 precedence; build metadata never participates. */
9
+ export declare function compareSemanticVersions(left: string, right: string): -1 | 0 | 1;
10
+ /**
11
+ * Expand caret and tilde shorthands into their conventional comparator
12
+ * conjunctions. The supported grammar is deliberately small and
13
+ * deterministic: exact versions, `^`/`~` shorthands, and space-joined
14
+ * comparators; disjunctions are unsupported until the compatibility
15
+ * contract ratifies them.
16
+ */
17
+ export declare function normalizeVersionRange(range: string): string;
18
+ /** Whether a version satisfies every comparator of the supported range grammar. */
19
+ export declare function satisfiesVersionRange(version: string, range: string): boolean;
20
+ //# sourceMappingURL=semver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semver.d.ts","sourceRoot":"","sources":["../src/semver.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CAC1C;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAgBzE;AAED,gEAAgE;AAChE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CA0C/E;AAOD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA4B3D;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAkB7E"}
package/dist/semver.js ADDED
@@ -0,0 +1,128 @@
1
+ const VERSION_PATTERN = /^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(?:-((?:0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/u;
2
+ export function parseSemanticVersion(value) {
3
+ const match = value.length <= 100 ? VERSION_PATTERN.exec(value) : null;
4
+ if (match === null) {
5
+ throw new TypeError(`${value} is not a canonical semantic version.`);
6
+ }
7
+ return {
8
+ major: Number(match[1]),
9
+ minor: Number(match[2]),
10
+ patch: Number(match[3]),
11
+ prerelease: match[4] === undefined
12
+ ? []
13
+ : match[4]
14
+ .split('.')
15
+ .map((part) => (/^(0|[1-9][0-9]*)$/u.test(part) ? Number(part) : part)),
16
+ };
17
+ }
18
+ /** SemVer 2.0 precedence; build metadata never participates. */
19
+ export function compareSemanticVersions(left, right) {
20
+ const a = parseSemanticVersion(left);
21
+ const b = parseSemanticVersion(right);
22
+ for (const member of ['major', 'minor', 'patch']) {
23
+ if (a[member] !== b[member]) {
24
+ return a[member] < b[member] ? -1 : 1;
25
+ }
26
+ }
27
+ if (a.prerelease.length === 0 && b.prerelease.length === 0) {
28
+ return 0;
29
+ }
30
+ if (a.prerelease.length === 0) {
31
+ return 1;
32
+ }
33
+ if (b.prerelease.length === 0) {
34
+ return -1;
35
+ }
36
+ const length = Math.max(a.prerelease.length, b.prerelease.length);
37
+ for (let index = 0; index < length; index += 1) {
38
+ const first = a.prerelease[index];
39
+ const second = b.prerelease[index];
40
+ if (first === undefined) {
41
+ return -1;
42
+ }
43
+ if (second === undefined) {
44
+ return 1;
45
+ }
46
+ if (first === second) {
47
+ continue;
48
+ }
49
+ if (typeof first === 'number' && typeof second === 'number') {
50
+ return first < second ? -1 : 1;
51
+ }
52
+ if (typeof first === 'number') {
53
+ return -1;
54
+ }
55
+ if (typeof second === 'number') {
56
+ return 1;
57
+ }
58
+ return first < second ? -1 : 1;
59
+ }
60
+ return 0;
61
+ }
62
+ /**
63
+ * Expand caret and tilde shorthands into their conventional comparator
64
+ * conjunctions. The supported grammar is deliberately small and
65
+ * deterministic: exact versions, `^`/`~` shorthands, and space-joined
66
+ * comparators; disjunctions are unsupported until the compatibility
67
+ * contract ratifies them.
68
+ */
69
+ export function normalizeVersionRange(range) {
70
+ const trimmed = range.trim();
71
+ if (trimmed.length === 0 || trimmed.length > 120 || trimmed.includes('||')) {
72
+ throw new TypeError(`${range} is not a supported version range.`);
73
+ }
74
+ return trimmed
75
+ .split(/\s+/u)
76
+ .map((part) => {
77
+ if (part.startsWith('^')) {
78
+ const source = part.slice(1);
79
+ const version = parseSemanticVersion(source);
80
+ const upper = version.major > 0
81
+ ? `${version.major + 1}.0.0-0`
82
+ : version.minor > 0
83
+ ? `0.${version.minor + 1}.0-0`
84
+ : `0.0.${version.patch + 1}-0`;
85
+ return `>=${source} <${upper}`;
86
+ }
87
+ if (part.startsWith('~')) {
88
+ const source = part.slice(1);
89
+ const version = parseSemanticVersion(source);
90
+ return `>=${source} <${version.major}.${version.minor + 1}.0-0`;
91
+ }
92
+ parseComparator(part);
93
+ return part;
94
+ })
95
+ .join(' ');
96
+ }
97
+ /** Whether a version satisfies every comparator of the supported range grammar. */
98
+ export function satisfiesVersionRange(version, range) {
99
+ parseSemanticVersion(version);
100
+ const comparators = normalizeVersionRange(range).split(/\s+/u).map(parseComparator);
101
+ return comparators.every((comparator) => {
102
+ const comparison = compareSemanticVersions(version, comparator.version);
103
+ switch (comparator.operator) {
104
+ case '<':
105
+ return comparison < 0;
106
+ case '<=':
107
+ return comparison <= 0;
108
+ case '=':
109
+ return comparison === 0;
110
+ case '>':
111
+ return comparison > 0;
112
+ default:
113
+ return comparison >= 0;
114
+ }
115
+ });
116
+ }
117
+ function parseComparator(part) {
118
+ const match = /^(>=|<=|>|<|=)?([^<>=].*)$/u.exec(part);
119
+ if (match?.[2] === undefined) {
120
+ throw new TypeError(`${part} is not a supported version comparator.`);
121
+ }
122
+ parseSemanticVersion(match[2]);
123
+ return {
124
+ operator: (match[1] ?? '='),
125
+ version: match[2],
126
+ };
127
+ }
128
+ //# sourceMappingURL=semver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semver.js","sourceRoot":"","sources":["../src/semver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { BlueprintCommand, BlueprintDocument, NodeId, Revision } from '@kumwe/studio-protocol';
2
+ export interface StudioSessionOptions {
3
+ document: BlueprintDocument;
4
+ maximumHistoryEntries?: number;
5
+ sessionGeneration: Revision;
6
+ sessionState: 'editable' | 'read-only';
7
+ }
8
+ /**
9
+ * A deterministic editing session over one Blueprint document: bounded
10
+ * history, an explicit selection model, and the session-level guards the
11
+ * command contract requires before any reducer runs. Session generation,
12
+ * read-only state, and expected-revision checks fail closed; a rejected
13
+ * command changes neither the document nor the selection.
14
+ */
15
+ export declare class StudioSession {
16
+ #private;
17
+ constructor(options: Readonly<StudioSessionOptions>);
18
+ get canRedo(): boolean;
19
+ get canUndo(): boolean;
20
+ get dirty(): boolean;
21
+ get document(): BlueprintDocument;
22
+ get selection(): readonly NodeId[];
23
+ get sessionState(): 'editable' | 'read-only';
24
+ get stateVersion(): number;
25
+ execute(command: BlueprintCommand): BlueprintDocument;
26
+ markSaved(revision: Revision): void;
27
+ get savedRevision(): Revision;
28
+ select(nodeIds: readonly NodeId[]): readonly NodeId[];
29
+ clearSelection(): void;
30
+ undo(): BlueprintDocument;
31
+ redo(): BlueprintDocument;
32
+ }
33
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAEjB,MAAM,EACN,QAAQ,EACT,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,YAAY,EAAE,UAAU,GAAG,WAAW,CAAC;CACxC;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;;gBAQL,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC;IAO1D,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED,IAAW,QAAQ,IAAI,iBAAiB,CAEvC;IAED,IAAW,SAAS,IAAI,SAAS,MAAM,EAAE,CAExC;IAED,IAAW,YAAY,IAAI,UAAU,GAAG,WAAW,CAElD;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAEM,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,iBAAiB;IA2BrD,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAK1C,IAAW,aAAa,IAAI,QAAQ,CAEnC;IAEM,MAAM,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE;IAmBrD,cAAc,IAAI,IAAI;IAItB,IAAI,IAAI,iBAAiB;IAMzB,IAAI,IAAI,iBAAiB;CAWjC"}