@origostudio/core 0.0.40
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/CHANGELOG.md +365 -0
- package/README.md +11 -0
- package/package.json +25 -0
- package/package.json.bak +25 -0
- package/src/extension-api/extension-manager.d.ts +35 -0
- package/src/extension-api/extension-manager.js +300 -0
- package/src/extension-api/extension-manager.js.map +1 -0
- package/src/extension-api/index.d.ts +2 -0
- package/src/extension-api/index.js +6 -0
- package/src/extension-api/index.js.map +1 -0
- package/src/extension-api/types.d.ts +34 -0
- package/src/extension-api/types.js +3 -0
- package/src/extension-api/types.js.map +1 -0
- package/src/index.d.ts +3 -0
- package/src/index.js +7 -0
- package/src/index.js.map +1 -0
- package/src/schemas/capability.schema.json +104 -0
- package/src/schemas/contract.schema.json +52 -0
- package/src/schemas/domain.schema.json +47 -0
- package/src/schemas/entity.schema.json +72 -0
- package/src/schemas/extension.schema.json +39 -0
- package/src/schemas/permission.schema.json +21 -0
- package/src/types/ast.d.ts +17 -0
- package/src/types/ast.js +3 -0
- package/src/types/ast.js.map +1 -0
- package/src/types/domain.d.ts +101 -0
- package/src/types/domain.js +8 -0
- package/src/types/domain.js.map +1 -0
- package/src/types/validation.d.ts +12 -0
- package/src/types/validation.js +16 -0
- package/src/types/validation.js.map +1 -0
- package/src/validator/ast-validator.d.ts +11 -0
- package/src/validator/ast-validator.js +388 -0
- package/src/validator/ast-validator.js.map +1 -0
- package/src/validator/index.d.ts +23 -0
- package/src/validator/index.js +143 -0
- package/src/validator/index.js.map +1 -0
- package/src/validator/serializer.d.ts +11 -0
- package/src/validator/serializer.js +99 -0
- package/src/validator/serializer.js.map +1 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.serializeAST = serializeAST;
|
|
4
|
+
const ast_validator_1 = require("./ast-validator");
|
|
5
|
+
/**
|
|
6
|
+
* Deep clones and canonically sorts an object/array.
|
|
7
|
+
* Also detects circular references and unsupported types.
|
|
8
|
+
*/
|
|
9
|
+
function canonicalize(obj, seen = new WeakSet(), errors = [], depth = 1) {
|
|
10
|
+
if (depth > ast_validator_1.MAX_AST_DEPTH) {
|
|
11
|
+
errors.push({
|
|
12
|
+
type: 'MAX_DEPTH_EXCEEDED',
|
|
13
|
+
message: `Maximum AST depth exceeded (${ast_validator_1.MAX_AST_DEPTH}) during canonicalization`,
|
|
14
|
+
});
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
if (obj === null || typeof obj !== 'object') {
|
|
18
|
+
return obj;
|
|
19
|
+
}
|
|
20
|
+
if (seen.has(obj)) {
|
|
21
|
+
errors.push({
|
|
22
|
+
type: 'CIRCULAR_REFERENCE',
|
|
23
|
+
message: 'Invalid AST: Circular reference detected during canonicalization',
|
|
24
|
+
});
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
if (Object.prototype.toString.call(obj) !== '[object Object]' && !Array.isArray(obj)) {
|
|
28
|
+
errors.push({
|
|
29
|
+
type: 'INVALID_TYPE',
|
|
30
|
+
message: `Invalid AST: Unsupported type ${obj.constructor?.name || typeof obj}`,
|
|
31
|
+
});
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
seen.add(obj);
|
|
35
|
+
if (Array.isArray(obj)) {
|
|
36
|
+
// Process children first
|
|
37
|
+
const mapped = obj.map(item => canonicalize(item, seen, errors, depth + 1));
|
|
38
|
+
// Sort deterministically
|
|
39
|
+
mapped.sort((a, b) => {
|
|
40
|
+
const aIsObj = typeof a === 'object' && a !== null;
|
|
41
|
+
const bIsObj = typeof b === 'object' && b !== null;
|
|
42
|
+
if (aIsObj && bIsObj) {
|
|
43
|
+
if ('id' in a && 'id' in b) {
|
|
44
|
+
const idA = String(a.id);
|
|
45
|
+
const idB = String(b.id);
|
|
46
|
+
return idA < idB ? -1 : idA > idB ? 1 : 0;
|
|
47
|
+
}
|
|
48
|
+
if ('name' in a && 'name' in b) {
|
|
49
|
+
const nameA = String(a.name);
|
|
50
|
+
const nameB = String(b.name);
|
|
51
|
+
return nameA < nameB ? -1 : nameA > nameB ? 1 : 0;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Fallback for primitives, heterogeneous objects, or objects without id/name
|
|
55
|
+
const strA = JSON.stringify(a);
|
|
56
|
+
const strB = JSON.stringify(b);
|
|
57
|
+
return strA < strB ? -1 : strA > strB ? 1 : 0;
|
|
58
|
+
});
|
|
59
|
+
seen.delete(obj);
|
|
60
|
+
return mapped;
|
|
61
|
+
}
|
|
62
|
+
// It is an object, sort its keys
|
|
63
|
+
const objAsRecord = obj;
|
|
64
|
+
const sortedKeys = Object.keys(objAsRecord).sort();
|
|
65
|
+
const result = {};
|
|
66
|
+
for (const key of sortedKeys) {
|
|
67
|
+
result[key] = canonicalize(objAsRecord[key], seen, errors, depth + 1);
|
|
68
|
+
}
|
|
69
|
+
seen.delete(obj);
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Serializes the parsed memory model into a canonical JSON AST.
|
|
74
|
+
* Enforces `schemaVersion`, stable key ordering, and stable array ordering.
|
|
75
|
+
*
|
|
76
|
+
* @param ast The canonical AST to serialize
|
|
77
|
+
* @returns Byte-for-byte deterministic JSON string
|
|
78
|
+
* @throws {ASTValidationError} If validation or canonicalization fails
|
|
79
|
+
*/
|
|
80
|
+
function serializeAST(ast) {
|
|
81
|
+
if (!ast || !ast.schemaVersion) {
|
|
82
|
+
return [null, [{ type: 'INVALID_FORMAT', message: 'Invalid AST: Missing schemaVersion' }]];
|
|
83
|
+
}
|
|
84
|
+
if (!Array.isArray(ast.domains)) {
|
|
85
|
+
return [null, [{ type: 'INVALID_FORMAT', message: 'Invalid AST: domains must be an array' }]];
|
|
86
|
+
}
|
|
87
|
+
// Validate semantics before serializing
|
|
88
|
+
const errors = (0, ast_validator_1.validateAST)(ast);
|
|
89
|
+
if (errors.length > 0) {
|
|
90
|
+
return [null, errors];
|
|
91
|
+
}
|
|
92
|
+
const canonicalErrors = [];
|
|
93
|
+
const canonical = canonicalize(ast, new WeakSet(), canonicalErrors, 1);
|
|
94
|
+
if (canonicalErrors.length > 0) {
|
|
95
|
+
return [null, canonicalErrors];
|
|
96
|
+
}
|
|
97
|
+
return [JSON.stringify(canonical), []];
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../../../../packages/core/src/validator/serializer.ts"],"names":[],"mappings":"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"}
|