codebuff 1.0.323 → 1.0.325
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/checkpoints/file-manager.js +20 -12
- package/dist/checkpoints/file-manager.js.map +1 -1
- package/dist/code-map/test-langs/test.d.ts +12 -0
- package/dist/code-map/test-langs/test.d.ts.map +1 -0
- package/dist/code-map/test-langs/test.js +23 -0
- package/dist/code-map/test-langs/test.js.map +1 -0
- package/dist/common/actions.d.ts +58 -58
- package/dist/common/analytics.d.ts +1 -1
- package/dist/common/browser-actions.d.ts +277 -277
- package/dist/common/constants/tools.d.ts +1 -0
- package/dist/common/constants/tools.d.ts.map +1 -1
- package/dist/common/constants/tools.js +1 -0
- package/dist/common/constants/tools.js.map +1 -1
- package/dist/common/constants.js +3 -3
- package/dist/common/constants.js.map +1 -1
- package/dist/common/db/env.d.mts +4 -0
- package/dist/common/db/env.mjs +26 -0
- package/dist/common/db/env.mjs.map +1 -0
- package/dist/common/db/schema.d.ts +155 -0
- package/dist/common/db/schema.d.ts.map +1 -1
- package/dist/common/db/schema.js +15 -1
- package/dist/common/db/schema.js.map +1 -1
- package/dist/common/env.d.mts +13 -0
- package/dist/common/env.mjs +43 -0
- package/dist/common/env.mjs.map +1 -0
- package/dist/common/src/actions.d.ts +2673 -0
- package/dist/common/src/actions.d.ts.map +1 -0
- package/dist/common/src/actions.js +167 -0
- package/dist/common/src/actions.js.map +1 -0
- package/dist/common/src/analytics.d.ts +6 -0
- package/dist/common/src/analytics.d.ts.map +1 -0
- package/dist/common/src/analytics.js +60 -0
- package/dist/common/src/analytics.js.map +1 -0
- package/dist/common/src/api-keys/constants.d.ts +9 -0
- package/dist/common/src/api-keys/constants.d.ts.map +1 -0
- package/dist/common/src/api-keys/constants.js +26 -0
- package/dist/common/src/api-keys/constants.js.map +1 -0
- package/dist/common/src/api-keys/crypto.d.ts +25 -0
- package/dist/common/src/api-keys/crypto.d.ts.map +1 -0
- package/dist/common/src/api-keys/crypto.js +186 -0
- package/dist/common/src/api-keys/crypto.js.map +1 -0
- package/dist/common/src/browser-actions.d.ts +4416 -0
- package/dist/common/src/browser-actions.d.ts.map +1 -0
- package/dist/common/src/browser-actions.js +343 -0
- package/dist/common/src/browser-actions.js.map +1 -0
- package/dist/common/src/constants/analytics-events.d.ts +28 -0
- package/dist/common/src/constants/analytics-events.d.ts.map +1 -0
- package/dist/common/src/constants/analytics-events.js +36 -0
- package/dist/common/src/constants/analytics-events.js.map +1 -0
- package/dist/common/src/constants/grant-priorities.d.ts +3 -0
- package/dist/common/src/constants/grant-priorities.d.ts.map +1 -0
- package/dist/common/src/constants/grant-priorities.js +11 -0
- package/dist/common/src/constants/grant-priorities.js.map +1 -0
- package/dist/common/src/constants/tools.d.ts +20 -0
- package/dist/common/src/constants/tools.d.ts.map +1 -0
- package/dist/common/src/constants/tools.js +47 -0
- package/dist/common/src/constants/tools.js.map +1 -0
- package/dist/common/src/constants.d.ts +152 -0
- package/dist/common/src/constants.d.ts.map +1 -0
- package/dist/common/src/constants.js +222 -0
- package/dist/common/src/constants.js.map +1 -0
- package/dist/common/src/db/drizzle.config.d.ts +3 -0
- package/dist/common/src/db/drizzle.config.d.ts.map +1 -0
- package/dist/common/src/db/drizzle.config.js +17 -0
- package/dist/common/src/db/drizzle.config.js.map +1 -0
- package/dist/common/src/db/index.d.ts +7 -0
- package/dist/common/src/db/index.d.ts.map +1 -0
- package/dist/common/src/db/index.js +35 -0
- package/dist/common/src/db/index.js.map +1 -0
- package/dist/common/src/db/schema.d.ts +2289 -0
- package/dist/common/src/db/schema.d.ts.map +1 -0
- package/dist/common/src/db/schema.js +296 -0
- package/dist/common/src/db/schema.js.map +1 -0
- package/dist/common/src/db/transaction.d.ts +13 -0
- package/dist/common/src/db/transaction.d.ts.map +1 -0
- package/dist/common/src/db/transaction.js +36 -0
- package/dist/common/src/db/transaction.js.map +1 -0
- package/dist/common/src/json-config/__tests__/constants.test.d.ts +2 -0
- package/dist/common/src/json-config/__tests__/constants.test.d.ts.map +1 -0
- package/dist/common/src/json-config/__tests__/constants.test.js +273 -0
- package/dist/common/src/json-config/__tests__/constants.test.js.map +1 -0
- package/dist/common/src/json-config/__tests__/stringify-schema.test.d.ts +2 -0
- package/dist/common/src/json-config/__tests__/stringify-schema.test.d.ts.map +1 -0
- package/dist/common/src/json-config/__tests__/stringify-schema.test.js +66 -0
- package/dist/common/src/json-config/__tests__/stringify-schema.test.js.map +1 -0
- package/dist/common/src/json-config/constants.d.ts +138 -0
- package/dist/common/src/json-config/constants.d.ts.map +1 -0
- package/dist/common/src/json-config/constants.js +78 -0
- package/dist/common/src/json-config/constants.js.map +1 -0
- package/dist/common/src/json-config/stringify-schema.d.ts +10 -0
- package/dist/common/src/json-config/stringify-schema.d.ts.map +1 -0
- package/dist/common/src/json-config/stringify-schema.js +131 -0
- package/dist/common/src/json-config/stringify-schema.js.map +1 -0
- package/dist/common/src/project-file-tree.d.ts +12 -0
- package/dist/common/src/project-file-tree.d.ts.map +1 -0
- package/dist/common/src/project-file-tree.js +212 -0
- package/dist/common/src/project-file-tree.js.map +1 -0
- package/dist/common/src/types/agent-state.d.ts +227 -0
- package/dist/common/src/types/agent-state.d.ts.map +1 -0
- package/dist/common/src/types/agent-state.js +34 -0
- package/dist/common/src/types/agent-state.js.map +1 -0
- package/dist/common/src/types/grant.d.ts +3 -0
- package/dist/common/src/types/grant.d.ts.map +1 -0
- package/dist/common/src/types/grant.js +11 -0
- package/dist/common/src/types/grant.js.map +1 -0
- package/dist/common/src/types/message.d.ts +320 -0
- package/dist/common/src/types/message.d.ts.map +1 -0
- package/dist/common/src/types/message.js +60 -0
- package/dist/common/src/types/message.js.map +1 -0
- package/dist/common/src/types/organization.d.ts +106 -0
- package/dist/common/src/types/organization.d.ts.map +1 -0
- package/dist/common/src/types/organization.js +3 -0
- package/dist/common/src/types/organization.js.map +1 -0
- package/dist/common/src/types/referral.d.ts +3 -0
- package/dist/common/src/types/referral.d.ts.map +1 -0
- package/dist/common/src/types/referral.js +5 -0
- package/dist/common/src/types/referral.js.map +1 -0
- package/dist/common/src/types/tools.d.ts +6 -0
- package/dist/common/src/types/tools.d.ts.map +1 -0
- package/dist/common/src/types/tools.js +3 -0
- package/dist/common/src/types/tools.js.map +1 -0
- package/dist/common/src/types/usage.d.ts +41 -0
- package/dist/common/src/types/usage.d.ts.map +1 -0
- package/dist/common/src/types/usage.js +16 -0
- package/dist/common/src/types/usage.js.map +1 -0
- package/dist/common/src/util/__tests__/messages.test.d.ts +2 -0
- package/dist/common/src/util/__tests__/messages.test.d.ts.map +1 -0
- package/dist/common/src/util/__tests__/messages.test.js +70 -0
- package/dist/common/src/util/__tests__/messages.test.js.map +1 -0
- package/dist/common/src/util/__tests__/saxy.test.d.ts +2 -0
- package/dist/common/src/util/__tests__/saxy.test.d.ts.map +1 -0
- package/dist/common/src/util/__tests__/saxy.test.js +906 -0
- package/dist/common/src/util/__tests__/saxy.test.js.map +1 -0
- package/dist/common/src/util/__tests__/string.test.d.ts +2 -0
- package/dist/common/src/util/__tests__/string.test.d.ts.map +1 -0
- package/dist/common/src/util/__tests__/string.test.js +82 -0
- package/dist/common/src/util/__tests__/string.test.js.map +1 -0
- package/dist/common/src/util/array.d.ts +7 -0
- package/dist/common/src/util/array.d.ts.map +1 -0
- package/dist/common/src/util/array.js +32 -0
- package/dist/common/src/util/array.js.map +1 -0
- package/dist/common/src/util/changes.d.ts +9 -0
- package/dist/common/src/util/changes.d.ts.map +1 -0
- package/dist/common/src/util/changes.js +87 -0
- package/dist/common/src/util/changes.js.map +1 -0
- package/dist/common/src/util/credentials.d.ts +26 -0
- package/dist/common/src/util/credentials.d.ts.map +1 -0
- package/dist/common/src/util/credentials.js +24 -0
- package/dist/common/src/util/credentials.js.map +1 -0
- package/dist/common/src/util/currency.d.ts +15 -0
- package/dist/common/src/util/currency.d.ts.map +1 -0
- package/dist/common/src/util/currency.js +23 -0
- package/dist/common/src/util/currency.js.map +1 -0
- package/dist/common/src/util/dates.d.ts +11 -0
- package/dist/common/src/util/dates.d.ts.map +1 -0
- package/dist/common/src/util/dates.js +22 -0
- package/dist/common/src/util/dates.js.map +1 -0
- package/dist/common/src/util/file.d.ts +163 -0
- package/dist/common/src/util/file.d.ts.map +1 -0
- package/dist/common/src/util/file.js +192 -0
- package/dist/common/src/util/file.js.map +1 -0
- package/dist/common/src/util/git.d.ts +7 -0
- package/dist/common/src/util/git.d.ts.map +1 -0
- package/dist/common/src/util/git.js +81 -0
- package/dist/common/src/util/git.js.map +1 -0
- package/dist/common/src/util/logger.d.ts +9 -0
- package/dist/common/src/util/logger.d.ts.map +1 -0
- package/dist/common/src/util/logger.js +52 -0
- package/dist/common/src/util/logger.js.map +1 -0
- package/dist/common/src/util/lru-cache.d.ts +31 -0
- package/dist/common/src/util/lru-cache.d.ts.map +1 -0
- package/dist/common/src/util/lru-cache.js +68 -0
- package/dist/common/src/util/lru-cache.js.map +1 -0
- package/dist/common/src/util/messages.d.ts +12 -0
- package/dist/common/src/util/messages.d.ts.map +1 -0
- package/dist/common/src/util/messages.js +81 -0
- package/dist/common/src/util/messages.js.map +1 -0
- package/dist/common/src/util/min-heap.d.ts +16 -0
- package/dist/common/src/util/min-heap.d.ts.map +1 -0
- package/dist/common/src/util/min-heap.js +73 -0
- package/dist/common/src/util/min-heap.js.map +1 -0
- package/dist/common/src/util/object.d.ts +19 -0
- package/dist/common/src/util/object.d.ts.map +1 -0
- package/dist/common/src/util/object.js +91 -0
- package/dist/common/src/util/object.js.map +1 -0
- package/dist/common/src/util/patch.d.ts +2 -0
- package/dist/common/src/util/patch.d.ts.map +1 -0
- package/dist/common/src/util/patch.js +215 -0
- package/dist/common/src/util/patch.js.map +1 -0
- package/dist/common/src/util/promise.d.ts +17 -0
- package/dist/common/src/util/promise.d.ts.map +1 -0
- package/dist/common/src/util/promise.js +51 -0
- package/dist/common/src/util/promise.js.map +1 -0
- package/dist/common/src/util/random.d.ts +2 -0
- package/dist/common/src/util/random.d.ts.map +1 -0
- package/dist/common/src/util/random.js +17 -0
- package/dist/common/src/util/random.js.map +1 -0
- package/dist/common/src/util/referral.d.ts +2 -0
- package/dist/common/src/util/referral.d.ts.map +1 -0
- package/dist/common/src/util/referral.js +6 -0
- package/dist/common/src/util/referral.js.map +1 -0
- package/dist/common/src/util/saxy.d.ts +179 -0
- package/dist/common/src/util/saxy.d.ts.map +1 -0
- package/dist/common/src/util/saxy.js +548 -0
- package/dist/common/src/util/saxy.js.map +1 -0
- package/dist/common/src/util/string.d.ts +80 -0
- package/dist/common/src/util/string.d.ts.map +1 -0
- package/dist/common/src/util/string.js +264 -0
- package/dist/common/src/util/string.js.map +1 -0
- package/dist/common/src/util/stripe.d.ts +4 -0
- package/dist/common/src/util/stripe.d.ts.map +1 -0
- package/dist/common/src/util/stripe.js +22 -0
- package/dist/common/src/util/stripe.js.map +1 -0
- package/dist/common/src/util/sync-failure.d.ts +2 -0
- package/dist/common/src/util/sync-failure.d.ts.map +1 -0
- package/dist/common/src/util/sync-failure.js +57 -0
- package/dist/common/src/util/sync-failure.js.map +1 -0
- package/dist/common/src/websockets/websocket-client.d.ts +43 -0
- package/dist/common/src/websockets/websocket-client.d.ts.map +1 -0
- package/dist/common/src/websockets/websocket-client.js +216 -0
- package/dist/common/src/websockets/websocket-client.js.map +1 -0
- package/dist/common/src/websockets/websocket-schema.d.ts +5159 -0
- package/dist/common/src/websockets/websocket-schema.d.ts.map +1 -0
- package/dist/common/src/websockets/websocket-schema.js +55 -0
- package/dist/common/src/websockets/websocket-schema.js.map +1 -0
- package/dist/common/tsconfig.tsbuildinfo +1 -0
- package/dist/common/types/message.d.ts +16 -16
- package/dist/common/websockets/websocket-schema.d.ts +122 -122
- package/dist/index.js +5 -5
- package/dist/utils/tool-renderers.js +26 -0
- package/dist/utils/tool-renderers.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Saxy = exports.parseAttrs = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* This is a modified version of the Saxy library that emits text nodes immediately
|
|
6
|
+
*/
|
|
7
|
+
const string_decoder_1 = require("string_decoder");
|
|
8
|
+
const node_stream_1 = require("node:stream");
|
|
9
|
+
const string_1 = require("./string");
|
|
10
|
+
/**
|
|
11
|
+
* Nodes that can be found inside an XML stream.
|
|
12
|
+
*/
|
|
13
|
+
const Node = {
|
|
14
|
+
text: 'text',
|
|
15
|
+
cdata: 'cdata',
|
|
16
|
+
comment: 'comment',
|
|
17
|
+
processingInstruction: 'processinginstruction',
|
|
18
|
+
tagOpen: 'tagopen',
|
|
19
|
+
tagClose: 'tagclose',
|
|
20
|
+
// markupDeclaration: 'markupDeclaration',
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Expand a piece of XML text by replacing all XML entities by
|
|
24
|
+
* their canonical value. Ignore invalid and unknown entities.
|
|
25
|
+
*
|
|
26
|
+
* @param input A string of XML text
|
|
27
|
+
* @return The input string, expanded
|
|
28
|
+
*/
|
|
29
|
+
const parseEntities = (input) => {
|
|
30
|
+
let position = 0;
|
|
31
|
+
let next = 0;
|
|
32
|
+
const parts = [];
|
|
33
|
+
while ((next = input.indexOf('&', position)) !== -1) {
|
|
34
|
+
if (next > position) {
|
|
35
|
+
const beforeEntity = input.slice(position, next);
|
|
36
|
+
parts.push(beforeEntity);
|
|
37
|
+
}
|
|
38
|
+
const semiColonPos = input.indexOf(';', next);
|
|
39
|
+
if (semiColonPos === -1) {
|
|
40
|
+
const remaining = input.slice(next);
|
|
41
|
+
parts.push(remaining);
|
|
42
|
+
position = input.length;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
const entityName = input.slice(next + 1, semiColonPos);
|
|
46
|
+
// If entityName contains invalid characters (space, &, <, >) or is empty,
|
|
47
|
+
// treat the initial & as a literal character
|
|
48
|
+
if (/[ &<>]/.test(entityName) || entityName.length === 0) {
|
|
49
|
+
parts.push('&');
|
|
50
|
+
position = next + 1;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (entityName === 'quot') {
|
|
54
|
+
parts.push('"');
|
|
55
|
+
}
|
|
56
|
+
else if (entityName === 'amp') {
|
|
57
|
+
parts.push('&');
|
|
58
|
+
}
|
|
59
|
+
else if (entityName === 'apos') {
|
|
60
|
+
parts.push("'");
|
|
61
|
+
}
|
|
62
|
+
else if (entityName === 'lt') {
|
|
63
|
+
parts.push('<');
|
|
64
|
+
}
|
|
65
|
+
else if (entityName === 'gt') {
|
|
66
|
+
parts.push('>');
|
|
67
|
+
}
|
|
68
|
+
else if (entityName.startsWith('#')) {
|
|
69
|
+
let value;
|
|
70
|
+
if (entityName[1] === 'x' || entityName[1] === 'X') {
|
|
71
|
+
value = parseInt(entityName.slice(2), 16);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
value = parseInt(entityName.slice(1), 10);
|
|
75
|
+
}
|
|
76
|
+
if (isNaN(value)) {
|
|
77
|
+
parts.push('&' + entityName + ';');
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
parts.push(String.fromCharCode(value));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// Unrecognized named entity, pass through
|
|
85
|
+
parts.push('&' + entityName + ';');
|
|
86
|
+
}
|
|
87
|
+
position = semiColonPos + 1;
|
|
88
|
+
}
|
|
89
|
+
if (position < input.length) {
|
|
90
|
+
const remaining = input.slice(position);
|
|
91
|
+
parts.push(remaining);
|
|
92
|
+
}
|
|
93
|
+
const result = parts.join('');
|
|
94
|
+
return result;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Parse a string of XML attributes to a map of attribute names to their values.
|
|
98
|
+
*
|
|
99
|
+
* @param input A string of XML attributes
|
|
100
|
+
* @throws If the string is malformed
|
|
101
|
+
* @return A map of attribute names to their values
|
|
102
|
+
*/
|
|
103
|
+
const parseAttrs = (input) => {
|
|
104
|
+
const attrs = {};
|
|
105
|
+
const end = input.length;
|
|
106
|
+
let position = 0;
|
|
107
|
+
const errors = [];
|
|
108
|
+
const seekNextWhitespace = (pos) => {
|
|
109
|
+
pos += 1;
|
|
110
|
+
while (pos < end && !(0, string_1.isWhitespace)(input[pos])) {
|
|
111
|
+
pos += 1;
|
|
112
|
+
}
|
|
113
|
+
return pos;
|
|
114
|
+
};
|
|
115
|
+
attrLoop: while (position < end) {
|
|
116
|
+
// Skip all whitespace
|
|
117
|
+
if ((0, string_1.isWhitespace)(input[position])) {
|
|
118
|
+
position += 1;
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
// Check that the attribute name contains valid chars
|
|
122
|
+
let startName = position;
|
|
123
|
+
while (input[position] !== '=' && position < end) {
|
|
124
|
+
if ((0, string_1.isWhitespace)(input[position])) {
|
|
125
|
+
errors.push(`Attribute names may not contain whitespace: ${input.slice(startName, position)}`);
|
|
126
|
+
continue attrLoop;
|
|
127
|
+
}
|
|
128
|
+
position += 1;
|
|
129
|
+
}
|
|
130
|
+
// This is XML, so we need a value for the attribute
|
|
131
|
+
if (position === end) {
|
|
132
|
+
errors.push(`Expected a value for the attribute: ${input.slice(startName, position)}`);
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
const attrName = input.slice(startName, position);
|
|
136
|
+
position += 1;
|
|
137
|
+
const startQuote = input[position];
|
|
138
|
+
position += 1;
|
|
139
|
+
if (startQuote !== '"' && startQuote !== "'") {
|
|
140
|
+
position = seekNextWhitespace(position);
|
|
141
|
+
errors.push(`Attribute values should be quoted: ${input.slice(startName, position)}`);
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
const endQuote = input.indexOf(startQuote, position);
|
|
145
|
+
if (endQuote === -1) {
|
|
146
|
+
position = seekNextWhitespace(position);
|
|
147
|
+
errors.push(`Unclosed attribute value: ${input.slice(startName, position)}`);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
const attrValue = input.slice(position, endQuote);
|
|
151
|
+
attrs[attrName] = attrValue;
|
|
152
|
+
position = endQuote + 1;
|
|
153
|
+
}
|
|
154
|
+
return { attrs, errors };
|
|
155
|
+
};
|
|
156
|
+
exports.parseAttrs = parseAttrs;
|
|
157
|
+
/**
|
|
158
|
+
* Find the first character in a string that matches a predicate
|
|
159
|
+
* while being outside the given delimiters.
|
|
160
|
+
*
|
|
161
|
+
* @param haystack String to search in
|
|
162
|
+
* @param predicate Checks whether a character is permissible
|
|
163
|
+
* @param [delim=''] Delimiter inside which no match should be
|
|
164
|
+
* returned. If empty, all characters are considered.
|
|
165
|
+
* @param [fromIndex=0] Start the search from this index
|
|
166
|
+
* @return Index of the first match, or -1 if no match
|
|
167
|
+
*/
|
|
168
|
+
const findIndexOutside = (haystack, predicate, delim = '', fromIndex = 0) => {
|
|
169
|
+
const length = haystack.length;
|
|
170
|
+
let index = fromIndex;
|
|
171
|
+
let inDelim = false;
|
|
172
|
+
while (index < length && (inDelim || !predicate(haystack[index]))) {
|
|
173
|
+
if (haystack[index] === delim) {
|
|
174
|
+
inDelim = !inDelim;
|
|
175
|
+
}
|
|
176
|
+
++index;
|
|
177
|
+
}
|
|
178
|
+
return index === length ? -1 : index;
|
|
179
|
+
};
|
|
180
|
+
/**
|
|
181
|
+
* Parse an XML stream and emit events corresponding
|
|
182
|
+
* to the different tokens encountered.
|
|
183
|
+
*/
|
|
184
|
+
class Saxy extends node_stream_1.Transform {
|
|
185
|
+
_decoder;
|
|
186
|
+
_tagStack;
|
|
187
|
+
_waiting;
|
|
188
|
+
_schema;
|
|
189
|
+
_textBuffer; // NEW: Text buffer as class member
|
|
190
|
+
_shouldParseEntities;
|
|
191
|
+
/**
|
|
192
|
+
* Parse a string of XML attributes to a map of attribute names
|
|
193
|
+
* to their values
|
|
194
|
+
*
|
|
195
|
+
* @param input A string of XML attributes
|
|
196
|
+
* @throws If the string is malformed
|
|
197
|
+
* @return A map of attribute names to their values
|
|
198
|
+
*/
|
|
199
|
+
static parseAttrs = exports.parseAttrs;
|
|
200
|
+
/**
|
|
201
|
+
* Expand a piece of XML text by replacing all XML entities
|
|
202
|
+
* by their canonical value. Ignore invalid and unknown
|
|
203
|
+
* entities
|
|
204
|
+
*
|
|
205
|
+
* @param input A string of XML text
|
|
206
|
+
* @return The input string, expanded
|
|
207
|
+
*/
|
|
208
|
+
static parseEntities = parseEntities;
|
|
209
|
+
/**
|
|
210
|
+
* Create a new parser instance.
|
|
211
|
+
* @param schema Optional schema defining allowed top-level tags and their children
|
|
212
|
+
*/
|
|
213
|
+
constructor(schema, shouldParseEntities = true) {
|
|
214
|
+
super({ decodeStrings: false, defaultEncoding: 'utf8' });
|
|
215
|
+
this._decoder = new string_decoder_1.StringDecoder('utf8');
|
|
216
|
+
// Stack of tags that were opened up until the current cursor position
|
|
217
|
+
this._tagStack = [];
|
|
218
|
+
// Not waiting initially
|
|
219
|
+
this._waiting = null;
|
|
220
|
+
// Store schema if provided
|
|
221
|
+
this._schema = schema || null;
|
|
222
|
+
// Initialize text buffer
|
|
223
|
+
this._textBuffer = '';
|
|
224
|
+
this._shouldParseEntities = shouldParseEntities;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Handle a chunk of data written into the stream.
|
|
228
|
+
*
|
|
229
|
+
* @param chunk Chunk of data.
|
|
230
|
+
* @param encoding Encoding of the string, or 'buffer'.
|
|
231
|
+
* @param callback Called when the chunk has been parsed, with
|
|
232
|
+
* an optional error argument.
|
|
233
|
+
*/
|
|
234
|
+
_write(chunk, encoding, callback) {
|
|
235
|
+
const data = encoding === 'buffer'
|
|
236
|
+
? this._decoder.write(chunk)
|
|
237
|
+
: chunk;
|
|
238
|
+
this._parseChunk(data, callback);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Handle the end of incoming data.
|
|
242
|
+
*
|
|
243
|
+
* @param callback
|
|
244
|
+
*/
|
|
245
|
+
_final(callback) {
|
|
246
|
+
// Make sure all data has been extracted from the decoder
|
|
247
|
+
this._parseChunk(this._decoder.end(), (err) => {
|
|
248
|
+
if (err) {
|
|
249
|
+
callback(err);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
// Handle any remaining text buffer
|
|
253
|
+
if (this._textBuffer.length > 0) {
|
|
254
|
+
const parsedText = this._shouldParseEntities
|
|
255
|
+
? parseEntities(this._textBuffer)
|
|
256
|
+
: this._textBuffer;
|
|
257
|
+
this.emit(Node.text, { contents: parsedText });
|
|
258
|
+
this._textBuffer = '';
|
|
259
|
+
}
|
|
260
|
+
// Handle unclosed nodes
|
|
261
|
+
if (this._waiting !== null) {
|
|
262
|
+
switch (this._waiting.token) {
|
|
263
|
+
case Node.text:
|
|
264
|
+
// Text nodes are implicitly closed
|
|
265
|
+
this.emit('text', { contents: this._waiting.data });
|
|
266
|
+
break;
|
|
267
|
+
case Node.cdata:
|
|
268
|
+
callback(new Error('Unclosed CDATA section'));
|
|
269
|
+
return;
|
|
270
|
+
case Node.comment:
|
|
271
|
+
callback(new Error('Unclosed comment'));
|
|
272
|
+
return;
|
|
273
|
+
case Node.processingInstruction:
|
|
274
|
+
callback(new Error('Unclosed processing instruction'));
|
|
275
|
+
return;
|
|
276
|
+
case Node.tagOpen:
|
|
277
|
+
case Node.tagClose:
|
|
278
|
+
// We do not distinguish between unclosed opening
|
|
279
|
+
// or unclosed closing tags
|
|
280
|
+
// callback(new Error('Unclosed tag'))
|
|
281
|
+
return;
|
|
282
|
+
default:
|
|
283
|
+
// Pass
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (this._tagStack.length !== 0) {
|
|
287
|
+
// callback(new Error(`Unclosed tags: ${this._tagStack.join(',')}`))
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
callback();
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Immediately parse a complete chunk of XML and close the stream.
|
|
295
|
+
*
|
|
296
|
+
* @param input Input chunk.
|
|
297
|
+
*/
|
|
298
|
+
parse(input) {
|
|
299
|
+
this.end(input);
|
|
300
|
+
return this;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Put the stream into waiting mode, which means we need more data
|
|
304
|
+
* to finish parsing the current token.
|
|
305
|
+
*
|
|
306
|
+
* @param token Type of token that is being parsed.
|
|
307
|
+
* @param data Pending data.
|
|
308
|
+
*/
|
|
309
|
+
_wait(token, data) {
|
|
310
|
+
this._waiting = { token, data };
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Put the stream out of waiting mode.
|
|
314
|
+
*
|
|
315
|
+
* @return Any data that was pending.
|
|
316
|
+
*/
|
|
317
|
+
_unwait() {
|
|
318
|
+
if (this._waiting === null) {
|
|
319
|
+
return '';
|
|
320
|
+
}
|
|
321
|
+
const data = this._waiting.data;
|
|
322
|
+
this._waiting = null;
|
|
323
|
+
return data;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Handle the opening of a tag in the text stream.
|
|
327
|
+
*
|
|
328
|
+
* Push the tag into the opened tag stack and emit the
|
|
329
|
+
* corresponding event on the event emitter.
|
|
330
|
+
*
|
|
331
|
+
* @param node Information about the opened tag.
|
|
332
|
+
*/
|
|
333
|
+
_handleTagOpening(node) {
|
|
334
|
+
const { name } = node;
|
|
335
|
+
// If we have a schema, validate against it
|
|
336
|
+
if (this._schema) {
|
|
337
|
+
// For top-level tags
|
|
338
|
+
if (this._tagStack.length === 0) {
|
|
339
|
+
// Convert to text if not in schema
|
|
340
|
+
if (!this._schema[name]) {
|
|
341
|
+
this.emit(Node.text, { contents: node.rawTag });
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
// For nested tags
|
|
346
|
+
else {
|
|
347
|
+
const parentTag = this._tagStack[this._tagStack.length - 1];
|
|
348
|
+
// Convert to text if parent not in schema or this tag not allowed as child
|
|
349
|
+
if (!this._schema[parentTag] ||
|
|
350
|
+
!(0, string_1.includesMatch)(this._schema[parentTag], name)) {
|
|
351
|
+
this.emit(Node.text, { contents: node.rawTag });
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
if (!node.isSelfClosing) {
|
|
357
|
+
this._tagStack.push(node.name);
|
|
358
|
+
}
|
|
359
|
+
this.emit(Node.tagOpen, node);
|
|
360
|
+
if (node.isSelfClosing) {
|
|
361
|
+
this.emit(Node.tagClose, {
|
|
362
|
+
name: node.name,
|
|
363
|
+
rawTag: '',
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Parse a XML chunk.
|
|
369
|
+
*
|
|
370
|
+
* @private
|
|
371
|
+
* @param input A string with the chunk data.
|
|
372
|
+
* @param callback Called when the chunk has been parsed, with
|
|
373
|
+
* an optional error argument.
|
|
374
|
+
*/
|
|
375
|
+
_parseChunk(input, callback) {
|
|
376
|
+
// Use pending data if applicable and get out of waiting mode
|
|
377
|
+
const waitingData = this._unwait();
|
|
378
|
+
input = waitingData + input;
|
|
379
|
+
let chunkPos = 0;
|
|
380
|
+
const end = input.length;
|
|
381
|
+
while (chunkPos < end) {
|
|
382
|
+
if (input[chunkPos] !== '<' ||
|
|
383
|
+
(chunkPos + 1 < end && !this._isXMLTagStart(input, chunkPos + 1))) {
|
|
384
|
+
// Find next potential tag, but verify it's actually a tag
|
|
385
|
+
let nextTag = input.indexOf('<', chunkPos);
|
|
386
|
+
while (nextTag !== -1 &&
|
|
387
|
+
nextTag + 1 < end &&
|
|
388
|
+
!this._isXMLTagStart(input, nextTag + 1)) {
|
|
389
|
+
nextTag = input.indexOf('<', nextTag + 1);
|
|
390
|
+
}
|
|
391
|
+
// We read a TEXT node but there might be some
|
|
392
|
+
// more text data left, so we wait
|
|
393
|
+
if (nextTag === -1) {
|
|
394
|
+
let chunk = input.slice(chunkPos);
|
|
395
|
+
if (this._tagStack.length === 1 && !chunk.trim()) {
|
|
396
|
+
chunk = '';
|
|
397
|
+
}
|
|
398
|
+
// Check for incomplete entity at end
|
|
399
|
+
const lastAmp = chunk.lastIndexOf('&');
|
|
400
|
+
if (this._shouldParseEntities &&
|
|
401
|
+
lastAmp !== -1 &&
|
|
402
|
+
chunk.indexOf(';', lastAmp) === -1) {
|
|
403
|
+
// Only consider it a pending entity if it looks like the start of one
|
|
404
|
+
const postAmp = chunk.slice(lastAmp + 1);
|
|
405
|
+
const isPotentialEntity = /^(#\d*)?$/.test(postAmp) || // Numeric entity
|
|
406
|
+
/^[a-zA-Z]{0,6}$/.test(postAmp); // Named entity
|
|
407
|
+
if (isPotentialEntity) {
|
|
408
|
+
// Store incomplete entity for next chunk
|
|
409
|
+
this._wait(Node.text, chunk.slice(lastAmp));
|
|
410
|
+
chunk = chunk.slice(0, lastAmp);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
if (chunk.length > 0) {
|
|
414
|
+
this._textBuffer += chunk;
|
|
415
|
+
}
|
|
416
|
+
chunkPos = end;
|
|
417
|
+
break;
|
|
418
|
+
}
|
|
419
|
+
// A tag follows, so we can be confident that
|
|
420
|
+
// we have all the data needed for the TEXT node
|
|
421
|
+
let chunk = input.slice(chunkPos, nextTag);
|
|
422
|
+
if (this._tagStack.length === 1 && !chunk.trim()) {
|
|
423
|
+
chunk = '';
|
|
424
|
+
}
|
|
425
|
+
// Only emit non-whitespace text or text within a single tag (not between tags)
|
|
426
|
+
if (chunk.length > 0) {
|
|
427
|
+
this._textBuffer += chunk;
|
|
428
|
+
}
|
|
429
|
+
// We've reached a tag boundary, emit any buffered text
|
|
430
|
+
if (this._textBuffer.length > 0) {
|
|
431
|
+
const parsedText = this._shouldParseEntities
|
|
432
|
+
? parseEntities(this._textBuffer)
|
|
433
|
+
: this._textBuffer;
|
|
434
|
+
this.emit(Node.text, { contents: parsedText });
|
|
435
|
+
this._textBuffer = '';
|
|
436
|
+
}
|
|
437
|
+
chunkPos = nextTag;
|
|
438
|
+
}
|
|
439
|
+
// Invariant: the cursor now points on the name of a tag,
|
|
440
|
+
// after an opening angled bracket
|
|
441
|
+
chunkPos += 1;
|
|
442
|
+
// Recognize regular tags (< ... >)
|
|
443
|
+
const tagClose = findIndexOutside(input, (char) => char === '>', '"', chunkPos);
|
|
444
|
+
if (tagClose === -1) {
|
|
445
|
+
this._wait(Node.tagOpen, input.slice(chunkPos - 1));
|
|
446
|
+
break;
|
|
447
|
+
}
|
|
448
|
+
// Check if the tag is a closing tag
|
|
449
|
+
if (input[chunkPos] === '/') {
|
|
450
|
+
const tagName = input.slice(chunkPos + 1, tagClose);
|
|
451
|
+
const stackedTagName = this._tagStack[this._tagStack.length - 1];
|
|
452
|
+
// Convert closing tag to text if it doesn't match schema validation
|
|
453
|
+
if (this._schema) {
|
|
454
|
+
// For top-level tags
|
|
455
|
+
if (this._tagStack.length === 1) {
|
|
456
|
+
if (!this._schema[tagName]) {
|
|
457
|
+
const rawTag = input.slice(chunkPos - 1, tagClose + 1);
|
|
458
|
+
this.emit(Node.text, { contents: rawTag });
|
|
459
|
+
chunkPos = tagClose + 1;
|
|
460
|
+
continue;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
// For nested tags
|
|
464
|
+
else {
|
|
465
|
+
const parentTag = this._tagStack[this._tagStack.length - 2];
|
|
466
|
+
if (!this._schema[parentTag] ||
|
|
467
|
+
!(0, string_1.includesMatch)(this._schema[parentTag], tagName)) {
|
|
468
|
+
const rawTag = input.slice(chunkPos - 1, tagClose + 1);
|
|
469
|
+
this.emit(Node.text, { contents: rawTag });
|
|
470
|
+
chunkPos = tagClose + 1;
|
|
471
|
+
continue;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
if (tagName === stackedTagName) {
|
|
476
|
+
this._tagStack.pop();
|
|
477
|
+
}
|
|
478
|
+
// Only emit if the tag matches what we expect (or if there is no schema)
|
|
479
|
+
if (!this._schema || stackedTagName === tagName) {
|
|
480
|
+
this.emit(Node.tagClose, {
|
|
481
|
+
name: tagName,
|
|
482
|
+
rawTag: input.slice(chunkPos - 1, tagClose + 1),
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
// Emit as text if the tag doesn't match
|
|
487
|
+
const rawTag = input.slice(chunkPos - 1, tagClose + 1);
|
|
488
|
+
this.emit(Node.text, { contents: rawTag });
|
|
489
|
+
}
|
|
490
|
+
chunkPos = tagClose + 1;
|
|
491
|
+
continue;
|
|
492
|
+
}
|
|
493
|
+
// Check if the tag is self-closing
|
|
494
|
+
const isSelfClosing = input[tagClose - 1] === '/';
|
|
495
|
+
let realTagClose = isSelfClosing ? tagClose - 1 : tagClose;
|
|
496
|
+
// Extract the tag name and attributes
|
|
497
|
+
const whitespace = input.slice(chunkPos).search(/\s/);
|
|
498
|
+
// Get the raw tag text for potential text node conversion
|
|
499
|
+
const rawTag = input.slice(chunkPos - 1, tagClose + 1);
|
|
500
|
+
if (whitespace === -1 || whitespace >= tagClose - chunkPos) {
|
|
501
|
+
// Tag without any attribute
|
|
502
|
+
this._handleTagOpening({
|
|
503
|
+
name: input.slice(chunkPos, realTagClose),
|
|
504
|
+
attrs: '',
|
|
505
|
+
isSelfClosing,
|
|
506
|
+
rawTag,
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
else if (whitespace === 0) {
|
|
510
|
+
// Invalid tag starting with whitespace - emit as text
|
|
511
|
+
this.emit(Node.text, { contents: rawTag });
|
|
512
|
+
}
|
|
513
|
+
else {
|
|
514
|
+
// Tag with attributes
|
|
515
|
+
this._handleTagOpening({
|
|
516
|
+
name: input.slice(chunkPos, chunkPos + whitespace),
|
|
517
|
+
attrs: input.slice(chunkPos + whitespace, realTagClose),
|
|
518
|
+
isSelfClosing,
|
|
519
|
+
rawTag,
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
chunkPos = tagClose + 1;
|
|
523
|
+
}
|
|
524
|
+
// Emit any buffered text at the end of the chunk if there's no pending entity
|
|
525
|
+
if (this._textBuffer.length > 0) {
|
|
526
|
+
const parsedText = this._shouldParseEntities
|
|
527
|
+
? parseEntities(this._textBuffer)
|
|
528
|
+
: this._textBuffer;
|
|
529
|
+
this.emit(Node.text, { contents: parsedText });
|
|
530
|
+
this._textBuffer = '';
|
|
531
|
+
}
|
|
532
|
+
callback();
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* Check if a potential XML tag start is actually a valid tag
|
|
536
|
+
* @param input The input string
|
|
537
|
+
* @param pos Position after the < character
|
|
538
|
+
* @returns true if this is a valid XML tag start
|
|
539
|
+
*/
|
|
540
|
+
_isXMLTagStart(input, pos) {
|
|
541
|
+
// Valid XML tags must start with a letter, underscore or colon
|
|
542
|
+
// https://www.w3.org/TR/xml/#NT-NameStartChar
|
|
543
|
+
const firstChar = input[pos];
|
|
544
|
+
return /[A-Za-z_:]/.test(firstChar) || firstChar === '/';
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
exports.Saxy = Saxy;
|
|
548
|
+
//# sourceMappingURL=saxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"saxy.js","sourceRoot":"","sources":["../../../src/util/saxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export declare const truncateString: (str: string, maxLength: number) => string;
|
|
2
|
+
export declare const truncateStringWithMessage: ({ str, maxLength, message, remove, }: {
|
|
3
|
+
str: string;
|
|
4
|
+
maxLength: number;
|
|
5
|
+
message?: string;
|
|
6
|
+
remove?: "END" | "START" | "MIDDLE";
|
|
7
|
+
}) => string;
|
|
8
|
+
/**
|
|
9
|
+
* Check if a character is a whitespace character according
|
|
10
|
+
* to the XML spec (space, carriage return, line feed or tab)
|
|
11
|
+
*
|
|
12
|
+
* @param character Character to check
|
|
13
|
+
* @return Whether the character is whitespace or not
|
|
14
|
+
*/
|
|
15
|
+
export declare const isWhitespace: (character: string) => boolean;
|
|
16
|
+
export declare const replaceNonStandardPlaceholderComments: (content: string, replacement: string) => string;
|
|
17
|
+
export declare const randBoolFromStr: (str: string) => boolean;
|
|
18
|
+
export declare const pluralize: (count: number, word: string) => string;
|
|
19
|
+
/**
|
|
20
|
+
* Safely replaces all occurrences of a search string with a replacement string,
|
|
21
|
+
* escaping special replacement patterns (like $) in the replacement string.
|
|
22
|
+
*/
|
|
23
|
+
export declare const capitalize: (str: string) => string;
|
|
24
|
+
/**
|
|
25
|
+
* Converts a snake_case string to Title Case
|
|
26
|
+
* Example: "add_subgoal" -> "Add Subgoal"
|
|
27
|
+
*/
|
|
28
|
+
export declare const snakeToTitleCase: (str: string) => string;
|
|
29
|
+
/**
|
|
30
|
+
* Ensures a URL has the appropriate protocol (http:// or https://)
|
|
31
|
+
* Uses http:// for localhost and local IPs, https:// for all other domains
|
|
32
|
+
*/
|
|
33
|
+
export declare const ensureUrlProtocol: (url: string) => string;
|
|
34
|
+
export declare const safeReplace: (content: string, searchStr: string, replaceStr: string) => string;
|
|
35
|
+
export declare const hasLazyEdit: (content: string) => boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Extracts a JSON field from a string, transforms it, and puts it back.
|
|
38
|
+
* Handles both array and object JSON values.
|
|
39
|
+
* @param content The string containing JSON-like content
|
|
40
|
+
* @param field The field name to find and transform
|
|
41
|
+
* @param transform Function to transform the parsed JSON value
|
|
42
|
+
* @param fallback String to use if parsing fails
|
|
43
|
+
* @returns The content string with the transformed JSON field
|
|
44
|
+
*/
|
|
45
|
+
export declare const transformJsonInString: <T = unknown>(content: string, field: string, transform: (json: T) => unknown, fallback: string) => string;
|
|
46
|
+
/**
|
|
47
|
+
* Generates a compact unique identifier by combining timestamp bits with random bits.
|
|
48
|
+
* Takes last 24 bits of timestamp (enough for months) and 8 random bits.
|
|
49
|
+
* Encodes in base36 for very compact strings (~5-6 chars).
|
|
50
|
+
* @param prefix Optional prefix to add to the ID
|
|
51
|
+
* @returns A unique string ID
|
|
52
|
+
* @example
|
|
53
|
+
* generateCompactId() // => "1a2b3c"
|
|
54
|
+
* generateCompactId('msg-') // => "msg-1a2b3c"
|
|
55
|
+
*/
|
|
56
|
+
export declare const generateCompactId: (prefix?: string) => string;
|
|
57
|
+
/**
|
|
58
|
+
* Removes null characters from a string
|
|
59
|
+
*/
|
|
60
|
+
export declare const stripNullChars: (str: string) => string;
|
|
61
|
+
export declare function stripColors(str: string): string;
|
|
62
|
+
export declare function stripAnsi(str: string): string;
|
|
63
|
+
export declare function includesMatch(array: (string | RegExp)[], value: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Finds the longest substring that is **both** a suffix of `source`
|
|
66
|
+
* **and** a prefix of `next`.
|
|
67
|
+
* Useful when concatenating strings while avoiding duplicate overlap.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* suffixPrefixOverlap('foobar', 'barbaz'); // ➜ 'bar'
|
|
72
|
+
* suffixPrefixOverlap('abc', 'def'); // ➜ ''
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* @param source The string whose **suffix** is inspected.
|
|
76
|
+
* @param next The string whose **prefix** is inspected.
|
|
77
|
+
* @returns The longest overlapping edge, or an empty string if none exists.
|
|
78
|
+
*/
|
|
79
|
+
export declare function suffixPrefixOverlap(source: string, next: string): string;
|
|
80
|
+
//# sourceMappingURL=string.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../../src/util/string.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,QAAS,MAAM,aAAa,MAAM,WAK5D,CAAA;AAED,eAAO,MAAM,yBAAyB,yCAKnC;IACD,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;CACpC,WAiBA,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,cAAe,MAAM,YAAyB,CAAA;AAEvE,eAAO,MAAM,qCAAqC,YACvC,MAAM,eACF,MAAM,KAClB,MAoDF,CAAA;AAED,eAAO,MAAM,eAAe,QAAS,MAAM,YAE1C,CAAA;AAED,eAAO,MAAM,SAAS,UAAW,MAAM,QAAQ,MAAM,WAsBpD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,QAAS,MAAM,KAAG,MAGxC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAS,MAAM,KAAG,MAK9C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAS,MAAM,KAAG,MAkB/C,CAAA;AAED,eAAO,MAAM,WAAW,YACb,MAAM,aACJ,MAAM,cACL,MAAM,KACjB,MAGF,CAAA;AAED,eAAO,MAAM,WAAW,YAAa,MAAM,YA6B1C,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,qBAC5B,MAAM,SACR,MAAM,aACF,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,YACrB,MAAM,KACf,MAsBF,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,YAAa,MAAM,KAAG,MAKnD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,QAAS,MAAM,KAAG,MAE5C,CAAA;AAGD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAGD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAOT;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CASxE"}
|