@zyntax/extension-sdk 1.0.0 → 1.0.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.
- package/README.md +51 -8
- package/dist/contracts/manifest.d.ts +20 -2
- package/dist/contracts/manifest.d.ts.map +1 -1
- package/dist/contracts/persistentServices.d.ts +21 -4
- package/dist/contracts/persistentServices.d.ts.map +1 -1
- package/dist/contracts/terminalPackages.d.ts +3 -0
- package/dist/contracts/terminalPackages.d.ts.map +1 -1
- package/dist/extensionFirst.d.ts +9 -51
- package/dist/extensionFirst.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/runtimeLimits.d.ts +28 -0
- package/dist/runtimeLimits.d.ts.map +1 -0
- package/dist/runtimeLimits.js +155 -0
- package/dist/runtimeLimits.js.map +1 -0
- package/fixtures/manifest-conformance.json +1033 -0
- package/package.json +10 -8
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/** Canonical UTF-8 JSON message limit for one managed-tool protocol frame. */
|
|
2
|
+
export const EXTENSION_MANAGED_TOOL_MAX_FRAME_BYTES = 4 * 1024 * 1024;
|
|
3
|
+
const EXTENSION_RPC_ENVELOPE_BYTES = 4 * 1024;
|
|
4
|
+
/**
|
|
5
|
+
* Managed-tool payload limits reserve four KiB for the JSON-RPC envelope carried
|
|
6
|
+
* inside the full protocol frame.
|
|
7
|
+
*/
|
|
8
|
+
export const EXTENSION_MANAGED_TOOL_MAX_REQUEST_BYTES = EXTENSION_MANAGED_TOOL_MAX_FRAME_BYTES - EXTENSION_RPC_ENVELOPE_BYTES;
|
|
9
|
+
export const EXTENSION_MANAGED_TOOL_MAX_RESULT_BYTES = EXTENSION_MANAGED_TOOL_MAX_FRAME_BYTES - EXTENSION_RPC_ENVELOPE_BYTES;
|
|
10
|
+
/** Maximum diagnostics returned by one pull provider or one publish request. */
|
|
11
|
+
export const EXTENSION_DIAGNOSTICS_MAX_ITEMS = 16_384;
|
|
12
|
+
export const EXTENSION_DIAGNOSTICS_MAX_BYTES = EXTENSION_MANAGED_TOOL_MAX_FRAME_BYTES - EXTENSION_RPC_ENVELOPE_BYTES;
|
|
13
|
+
/** Aggregate diagnostics budget for one document across selected providers. */
|
|
14
|
+
export const EXTENSION_DIAGNOSTICS_MAX_TOTAL_ITEMS = 65_536;
|
|
15
|
+
export const EXTENSION_DIAGNOSTICS_MAX_TOTAL_BYTES = 16 * 1024 * 1024;
|
|
16
|
+
/** Maximum task descriptors returned by one task provider invocation. */
|
|
17
|
+
export const EXTENSION_TASK_PROVIDER_MAX_ITEMS = 4_096;
|
|
18
|
+
/** Canonical UTF-8 budgets for one text-preview request and validated result. */
|
|
19
|
+
export const EXTENSION_PREVIEW_MAX_INPUT_BYTES = 10 * 1024 * 1024;
|
|
20
|
+
/** Maximum decoded source bytes for one binary preview document. */
|
|
21
|
+
export const EXTENSION_PREVIEW_MAX_BINARY_INPUT_BYTES = 24 * 1024 * 1024;
|
|
22
|
+
export const EXTENSION_PREVIEW_MAX_RESULT_BYTES = 16 * 1024 * 1024;
|
|
23
|
+
/** Structural payload limits reserve room for host protocol envelopes. */
|
|
24
|
+
export const EXTENSION_JSON_MAX_DEPTH = 60;
|
|
25
|
+
export const EXTENSION_JSON_MAX_NODES = 1_000_000 - 16;
|
|
26
|
+
export const EXTENSION_JSON_MAX_KEY_CODE_UNITS = 256;
|
|
27
|
+
function utf8ByteLength(value) {
|
|
28
|
+
let bytes = 0;
|
|
29
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
30
|
+
const code = value.charCodeAt(index);
|
|
31
|
+
if (code <= 0x7f) {
|
|
32
|
+
bytes += 1;
|
|
33
|
+
}
|
|
34
|
+
else if (code <= 0x7ff) {
|
|
35
|
+
bytes += 2;
|
|
36
|
+
}
|
|
37
|
+
else if (code >= 0xd800
|
|
38
|
+
&& code <= 0xdbff
|
|
39
|
+
&& index + 1 < value.length
|
|
40
|
+
&& value.charCodeAt(index + 1) >= 0xdc00
|
|
41
|
+
&& value.charCodeAt(index + 1) <= 0xdfff) {
|
|
42
|
+
bytes += 4;
|
|
43
|
+
index += 1;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
bytes += 3;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return bytes;
|
|
50
|
+
}
|
|
51
|
+
function jsonStringByteLength(value) {
|
|
52
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
53
|
+
const code = value.charCodeAt(index);
|
|
54
|
+
if (code >= 0xd800 && code <= 0xdbff) {
|
|
55
|
+
if (index + 1 >= value.length
|
|
56
|
+
|| value.charCodeAt(index + 1) < 0xdc00
|
|
57
|
+
|| value.charCodeAt(index + 1) > 0xdfff) {
|
|
58
|
+
throw new TypeError("Extension JSON string contains invalid Unicode.");
|
|
59
|
+
}
|
|
60
|
+
index += 1;
|
|
61
|
+
}
|
|
62
|
+
else if (code >= 0xdc00 && code <= 0xdfff) {
|
|
63
|
+
throw new TypeError("Extension JSON string contains invalid Unicode.");
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return utf8ByteLength(JSON.stringify(value));
|
|
67
|
+
}
|
|
68
|
+
/** Returns the exact UTF-8 byte length of a valid extension JSON value. */
|
|
69
|
+
export function extensionJsonUtf8ByteLength(value) {
|
|
70
|
+
let bytes = 0;
|
|
71
|
+
let nodes = 0;
|
|
72
|
+
const active = new Set();
|
|
73
|
+
const tasks = [{ kind: "value", value, containerDepth: 0 }];
|
|
74
|
+
while (tasks.length) {
|
|
75
|
+
const task = tasks.pop();
|
|
76
|
+
if (task.kind === "leave") {
|
|
77
|
+
active.delete(task.value);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
nodes += 1;
|
|
81
|
+
if (nodes > EXTENSION_JSON_MAX_NODES) {
|
|
82
|
+
throw new RangeError("Extension JSON value exceeds its structural limit.");
|
|
83
|
+
}
|
|
84
|
+
const candidate = task.value;
|
|
85
|
+
if (candidate === null) {
|
|
86
|
+
bytes += 4;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (typeof candidate === "string") {
|
|
90
|
+
bytes += jsonStringByteLength(candidate);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (typeof candidate === "boolean") {
|
|
94
|
+
bytes += candidate ? 4 : 5;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (typeof candidate === "number") {
|
|
98
|
+
if (!Number.isFinite(candidate)) {
|
|
99
|
+
throw new TypeError("Extension JSON value is not serializable.");
|
|
100
|
+
}
|
|
101
|
+
bytes += String(candidate).length;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (!candidate || typeof candidate !== "object") {
|
|
105
|
+
throw new TypeError("Extension JSON value is not serializable.");
|
|
106
|
+
}
|
|
107
|
+
if (active.has(candidate)) {
|
|
108
|
+
throw new TypeError("Extension JSON value is not serializable.");
|
|
109
|
+
}
|
|
110
|
+
const containerDepth = task.containerDepth + 1;
|
|
111
|
+
if (containerDepth > EXTENSION_JSON_MAX_DEPTH) {
|
|
112
|
+
throw new RangeError("Extension JSON value exceeds its structural limit.");
|
|
113
|
+
}
|
|
114
|
+
active.add(candidate);
|
|
115
|
+
tasks.push({ kind: "leave", value: candidate });
|
|
116
|
+
if (Array.isArray(candidate)) {
|
|
117
|
+
bytes += 2;
|
|
118
|
+
if (candidate.length > 1)
|
|
119
|
+
bytes += candidate.length - 1;
|
|
120
|
+
for (let index = candidate.length - 1; index >= 0; index -= 1) {
|
|
121
|
+
if (!Object.prototype.hasOwnProperty.call(candidate, index)) {
|
|
122
|
+
throw new TypeError("Extension JSON value is not serializable.");
|
|
123
|
+
}
|
|
124
|
+
tasks.push({
|
|
125
|
+
kind: "value",
|
|
126
|
+
value: candidate[index],
|
|
127
|
+
containerDepth,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
const prototype = Object.getPrototypeOf(candidate);
|
|
133
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
134
|
+
throw new TypeError("Extension JSON value is not serializable.");
|
|
135
|
+
}
|
|
136
|
+
const keys = Object.keys(candidate);
|
|
137
|
+
bytes += 2;
|
|
138
|
+
if (keys.length > 1)
|
|
139
|
+
bytes += keys.length - 1;
|
|
140
|
+
for (let index = keys.length - 1; index >= 0; index -= 1) {
|
|
141
|
+
const key = keys[index];
|
|
142
|
+
if (key.length > EXTENSION_JSON_MAX_KEY_CODE_UNITS) {
|
|
143
|
+
throw new RangeError("Extension JSON object key exceeds its length limit.");
|
|
144
|
+
}
|
|
145
|
+
bytes += jsonStringByteLength(key) + 1;
|
|
146
|
+
tasks.push({
|
|
147
|
+
kind: "value",
|
|
148
|
+
value: candidate[key],
|
|
149
|
+
containerDepth,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return bytes;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=runtimeLimits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeLimits.js","sourceRoot":"","sources":["../src/runtimeLimits.ts"],"names":[],"mappings":"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"}
|