toon-parser 2.2.1 → 3.0.1

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/README.md +148 -62
  2. package/dist/core.cjs +630 -0
  3. package/dist/core.d.ts +73 -0
  4. package/dist/core.d.ts.map +1 -0
  5. package/dist/core.js +625 -0
  6. package/dist/core.js.map +1 -0
  7. package/dist/csv.cjs +16 -24
  8. package/dist/csv.d.ts +2 -1
  9. package/dist/csv.d.ts.map +1 -1
  10. package/dist/csv.js +8 -21
  11. package/dist/csv.js.map +1 -1
  12. package/dist/html.cjs +9 -7
  13. package/dist/html.d.ts +4 -2
  14. package/dist/html.d.ts.map +1 -1
  15. package/dist/html.js +7 -5
  16. package/dist/html.js.map +1 -1
  17. package/dist/index.cjs +5 -816
  18. package/dist/index.d.ts +2 -51
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +5 -875
  21. package/dist/index.js.map +1 -1
  22. package/dist/inferType.cjs +39 -0
  23. package/dist/inferType.d.ts +10 -0
  24. package/dist/inferType.d.ts.map +1 -0
  25. package/dist/inferType.js +21 -0
  26. package/dist/inferType.js.map +1 -0
  27. package/dist/internal/constants.cjs +52 -0
  28. package/dist/internal/constants.d.ts +9 -0
  29. package/dist/internal/constants.d.ts.map +1 -0
  30. package/dist/internal/constants.js +15 -0
  31. package/dist/internal/constants.js.map +1 -0
  32. package/dist/internal/errors.cjs +34 -0
  33. package/dist/internal/errors.d.ts +5 -0
  34. package/dist/internal/errors.d.ts.map +1 -0
  35. package/dist/internal/errors.js +8 -0
  36. package/dist/internal/errors.js.map +1 -0
  37. package/dist/internal/primitives.cjs +304 -0
  38. package/dist/internal/primitives.d.ts +23 -0
  39. package/dist/internal/primitives.d.ts.map +1 -0
  40. package/dist/internal/primitives.js +289 -0
  41. package/dist/internal/primitives.js.map +1 -0
  42. package/dist/internal/security.cjs +118 -0
  43. package/dist/internal/security.d.ts +31 -0
  44. package/dist/internal/security.d.ts.map +1 -0
  45. package/dist/internal/security.js +87 -0
  46. package/dist/internal/security.js.map +1 -0
  47. package/dist/internal/types.cjs +16 -0
  48. package/dist/internal/types.d.ts +37 -0
  49. package/dist/internal/types.d.ts.map +1 -0
  50. package/dist/internal/types.js +2 -0
  51. package/dist/internal/types.js.map +1 -0
  52. package/dist/log.cjs +43 -17
  53. package/dist/log.d.ts +4 -3
  54. package/dist/log.d.ts.map +1 -1
  55. package/dist/log.js +47 -19
  56. package/dist/log.js.map +1 -1
  57. package/dist/url.cjs +22 -21
  58. package/dist/url.d.ts +1 -1
  59. package/dist/url.d.ts.map +1 -1
  60. package/dist/url.js +23 -29
  61. package/dist/url.js.map +1 -1
  62. package/dist/xml.cjs +7 -5
  63. package/dist/xml.d.ts +1 -1
  64. package/dist/xml.d.ts.map +1 -1
  65. package/dist/xml.js +5 -3
  66. package/dist/xml.js.map +1 -1
  67. package/package.json +40 -10
@@ -0,0 +1,289 @@
1
+ import { DEFAULT_DELIMITER, LEADING_ZERO_RE, NUMERIC_LIKE_RE, NUMERIC_RE, SAFE_KEY_RE } from './constants.js';
2
+ import { ToonError } from './errors.js';
3
+ import { validateKeySafety } from './security.js';
4
+ import { DEFAULT_LIMITS } from './constants.js';
5
+ export function encodePrimitive(value, activeDelimiter, documentDelimiter) {
6
+ if (value === null)
7
+ return 'null';
8
+ if (typeof value === 'boolean')
9
+ return value ? 'true' : 'false';
10
+ if (typeof value === 'number') {
11
+ if (!Number.isFinite(value)) {
12
+ throw new ToonError('Numeric values must be finite.');
13
+ }
14
+ if (Object.is(value, -0))
15
+ return '-0';
16
+ return String(value);
17
+ }
18
+ return encodeString(value, activeDelimiter, documentDelimiter);
19
+ }
20
+ export function encodeString(value, activeDelimiter, documentDelimiter) {
21
+ const needsQuote = value.length === 0 ||
22
+ /^\s|\s$/.test(value) ||
23
+ value === 'true' ||
24
+ value === 'false' ||
25
+ value === 'null' ||
26
+ NUMERIC_LIKE_RE.test(value) ||
27
+ LEADING_ZERO_RE.test(value) ||
28
+ value.includes(':') ||
29
+ value.includes('"') ||
30
+ value.includes('\\') ||
31
+ /[\[\]{}]/.test(value) ||
32
+ /[\n\r\t]/.test(value) ||
33
+ value.includes(activeDelimiter) ||
34
+ value.includes(documentDelimiter) ||
35
+ value === '-' ||
36
+ value.startsWith('-');
37
+ if (!needsQuote) {
38
+ return value;
39
+ }
40
+ return `"${escapeString(value)}"`;
41
+ }
42
+ export function escapeString(value) {
43
+ return value
44
+ .replace(/\\/g, '\\\\')
45
+ .replace(/"/g, '\\"')
46
+ .replace(/\n/g, '\\n')
47
+ .replace(/\r/g, '\\r')
48
+ .replace(/\t/g, '\\t');
49
+ }
50
+ export function encodeKey(key, activeDelimiter) {
51
+ if (SAFE_KEY_RE.test(key) && !key.includes(activeDelimiter)) {
52
+ return key;
53
+ }
54
+ return `"${escapeString(key)}"`;
55
+ }
56
+ export function decodeKey(token, lineNo) {
57
+ const trimmed = token.trim();
58
+ if (trimmed.startsWith('"')) {
59
+ return decodeQuotedString(trimmed, lineNo);
60
+ }
61
+ if (!SAFE_KEY_RE.test(trimmed)) {
62
+ throw new ToonError('Invalid key token.', lineNo);
63
+ }
64
+ return trimmed;
65
+ }
66
+ export function decodeQuotedString(token, lineNo) {
67
+ if (!token.endsWith('"')) {
68
+ throw new ToonError('Unterminated string.', lineNo);
69
+ }
70
+ let result = '';
71
+ let escape = false;
72
+ for (let i = 1; i < token.length - 1; i++) {
73
+ const ch = token[i];
74
+ if (escape) {
75
+ if (ch === '"' || ch === '\\') {
76
+ result += ch;
77
+ }
78
+ else if (ch === 'n') {
79
+ result += '\n';
80
+ }
81
+ else if (ch === 'r') {
82
+ result += '\r';
83
+ }
84
+ else if (ch === 't') {
85
+ result += '\t';
86
+ }
87
+ else {
88
+ throw new ToonError(`Invalid escape sequence \\${ch}.`, lineNo);
89
+ }
90
+ escape = false;
91
+ continue;
92
+ }
93
+ if (ch === '\\') {
94
+ escape = true;
95
+ continue;
96
+ }
97
+ result += ch;
98
+ }
99
+ if (escape) {
100
+ throw new ToonError('Unterminated escape sequence.', lineNo);
101
+ }
102
+ return result;
103
+ }
104
+ export function parsePrimitiveToken(token, delimiter, lineNo, strict) {
105
+ if (token === '') {
106
+ return '';
107
+ }
108
+ const trimmed = token.trim();
109
+ if (trimmed !== token && strict) {
110
+ throw new ToonError('Unquoted values may not contain leading or trailing whitespace.', lineNo);
111
+ }
112
+ if (trimmed.startsWith('"')) {
113
+ return decodeQuotedString(trimmed, lineNo);
114
+ }
115
+ if (trimmed === 'true')
116
+ return true;
117
+ if (trimmed === 'false')
118
+ return false;
119
+ if (trimmed === 'null')
120
+ return null;
121
+ if (/^-?\d+$/.test(trimmed) && /^-?0\d+$/.test(trimmed)) {
122
+ throw new ToonError('Numbers with leading zeros must be quoted.', lineNo);
123
+ }
124
+ if (NUMERIC_RE.test(trimmed)) {
125
+ if (/^-?0\d+/.test(trimmed)) {
126
+ throw new ToonError('Numbers with leading zeros must be quoted.', lineNo);
127
+ }
128
+ const num = Number(trimmed);
129
+ if (!Number.isFinite(num)) {
130
+ throw new ToonError('Invalid numeric value.', lineNo);
131
+ }
132
+ return num;
133
+ }
134
+ if (strict && trimmed.includes(delimiter)) {
135
+ throw new ToonError('Unquoted value contains the active delimiter.', lineNo);
136
+ }
137
+ return trimmed;
138
+ }
139
+ export function primitiveLine(key, value, indent, activeDelimiter, limits = DEFAULT_LIMITS) {
140
+ const encodedValue = encodePrimitive(value, activeDelimiter, activeDelimiter);
141
+ if (key === null) {
142
+ return `${indent}${encodedValue}`;
143
+ }
144
+ validateKeySafety(key, limits);
145
+ return `${indent}${encodeKey(key, activeDelimiter)}: ${encodedValue}`;
146
+ }
147
+ export function splitDelimited(text, delimiter, lineNo) {
148
+ const tokens = [];
149
+ let current = '';
150
+ let inQuote = false;
151
+ let escape = false;
152
+ for (let i = 0; i < text.length; i++) {
153
+ const ch = text[i];
154
+ if (escape) {
155
+ current += ch;
156
+ escape = false;
157
+ continue;
158
+ }
159
+ if (ch === '\\') {
160
+ current += ch;
161
+ escape = true;
162
+ continue;
163
+ }
164
+ if (ch === '"') {
165
+ current += ch;
166
+ inQuote = !inQuote;
167
+ continue;
168
+ }
169
+ if (!inQuote && ch === delimiter) {
170
+ tokens.push(current);
171
+ current = '';
172
+ continue;
173
+ }
174
+ current += ch;
175
+ }
176
+ if (inQuote) {
177
+ throw new ToonError('Unterminated quoted value.', lineNo);
178
+ }
179
+ tokens.push(current);
180
+ return tokens;
181
+ }
182
+ export function findUnquotedColon(text) {
183
+ let inQuote = false;
184
+ let escape = false;
185
+ for (let i = 0; i < text.length; i++) {
186
+ const ch = text[i];
187
+ if (escape) {
188
+ escape = false;
189
+ continue;
190
+ }
191
+ if (ch === '\\') {
192
+ escape = true;
193
+ continue;
194
+ }
195
+ if (ch === '"') {
196
+ inQuote = !inQuote;
197
+ continue;
198
+ }
199
+ if (!inQuote && ch === ':') {
200
+ return i;
201
+ }
202
+ }
203
+ return -1;
204
+ }
205
+ export function countLeadingSpaces(text, lineNo) {
206
+ let count = 0;
207
+ for (const ch of text) {
208
+ if (ch === ' ') {
209
+ count++;
210
+ }
211
+ else if (ch === '\t') {
212
+ throw new ToonError('Tabs are not allowed for indentation.', lineNo);
213
+ }
214
+ else {
215
+ break;
216
+ }
217
+ }
218
+ return count;
219
+ }
220
+ export function splitKeyHeader(token) {
221
+ let inQuote = false;
222
+ let escape = false;
223
+ for (let i = 0; i < token.length; i++) {
224
+ const ch = token[i];
225
+ if (escape) {
226
+ escape = false;
227
+ continue;
228
+ }
229
+ if (ch === '\\') {
230
+ escape = true;
231
+ continue;
232
+ }
233
+ if (ch === '"') {
234
+ inQuote = !inQuote;
235
+ continue;
236
+ }
237
+ if (!inQuote && ch === '[') {
238
+ return {
239
+ rawKey: token.slice(0, i).trim(),
240
+ header: token.slice(i).trim()
241
+ };
242
+ }
243
+ }
244
+ return { rawKey: token.trim() };
245
+ }
246
+ export function parseArrayHeaderFromList(token, lineNo) {
247
+ const match = token.match(/^\[(\d+)([,\|\t])?\](\{(.+)\})?$/);
248
+ if (!match) {
249
+ throw new ToonError(`Invalid array header "${token}".`, lineNo);
250
+ }
251
+ const length = parseInt(match[1], 10);
252
+ const delimiter = match[2] ?? DEFAULT_DELIMITER;
253
+ const fieldsRaw = match[4];
254
+ const fields = fieldsRaw ? splitDelimited(fieldsRaw, delimiter, lineNo).map(f => decodeKey(f, lineNo)) : undefined;
255
+ return { length, delimiter, fields };
256
+ }
257
+ export function classifyTabularLine(line, delimiter) {
258
+ let inQuote = false;
259
+ let escape = false;
260
+ let firstColon = -1;
261
+ let firstDelim = -1;
262
+ for (let i = 0; i < line.length; i++) {
263
+ const ch = line[i];
264
+ if (escape) {
265
+ escape = false;
266
+ continue;
267
+ }
268
+ if (ch === '\\') {
269
+ escape = true;
270
+ continue;
271
+ }
272
+ if (ch === '"') {
273
+ inQuote = !inQuote;
274
+ continue;
275
+ }
276
+ if (inQuote)
277
+ continue;
278
+ if (ch === ':' && firstColon === -1)
279
+ firstColon = i;
280
+ if (ch === delimiter && firstDelim === -1)
281
+ firstDelim = i;
282
+ }
283
+ if (firstColon === -1)
284
+ return 'row';
285
+ if (firstDelim === -1)
286
+ return 'field';
287
+ return firstDelim < firstColon ? 'row' : 'field';
288
+ }
289
+ //# sourceMappingURL=primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/internal/primitives.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,UAAU,EACV,WAAW,EACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,UAAU,eAAe,CAC7B,KAAoB,EACpB,eAA0B,EAC1B,iBAA4B;IAE5B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,eAA0B,EAC1B,iBAA4B;IAE5B,MAAM,UAAU,GACd,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QACrB,KAAK,KAAK,MAAM;QAChB,KAAK,KAAK,OAAO;QACjB,KAAK,KAAK,MAAM;QAChB,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3B,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3B,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QACtB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC/B,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACjC,KAAK,KAAK,GAAG;QACb,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAExB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK;SACT,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,eAA0B;IAC/D,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5D,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,MAAc;IACrD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,SAAS,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,MAAc;IAC9D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC9B,MAAM,IAAI,EAAE,CAAC;YACf,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACtB,MAAM,IAAI,IAAI,CAAC;YACjB,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACtB,MAAM,IAAI,IAAI,CAAC;YACjB,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACtB,MAAM,IAAI,IAAI,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,SAAS,CAAC,6BAA6B,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,GAAG,KAAK,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,MAAM,GAAG,IAAI,CAAC;YACd,SAAS;QACX,CAAC;QACD,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,SAAS,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,SAAoB,EACpB,MAAc,EACd,MAAe;IAEf,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,KAAK,KAAK,IAAI,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,SAAS,CAAC,iEAAiE,EAAE,MAAM,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,SAAS,CAAC,4CAA4C,EAAE,MAAM,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,SAAS,CAAC,4CAA4C,EAAE,MAAM,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,SAAS,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,SAAS,CAAC,+CAA+C,EAAE,MAAM,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,GAAkB,EAClB,KAAoB,EACpB,MAAc,EACd,eAA0B,EAC1B,SAAiB,cAAc;IAE/B,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;IAC9E,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,GAAG,MAAM,GAAG,YAAY,EAAE,CAAC;IACpC,CAAC;IACD,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,eAAe,CAAC,KAAK,YAAY,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,SAAoB,EAAE,MAAc;IAC/E,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,EAAE,CAAC;YACd,MAAM,GAAG,KAAK,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,OAAO,IAAI,EAAE,CAAC;YACd,MAAM,GAAG,IAAI,CAAC;YACd,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,OAAO,IAAI,EAAE,CAAC;YACd,OAAO,GAAG,CAAC,OAAO,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,GAAG,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,SAAS,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,KAAK,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,MAAM,GAAG,IAAI,CAAC;YACd,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,OAAO,GAAG,CAAC,OAAO,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC3B,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,MAAc;IAC7D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,SAAS,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,KAAK,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,MAAM,GAAG,IAAI,CAAC;YACd,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,OAAO,GAAG,CAAC,OAAO,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC3B,OAAO;gBACL,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;gBAChC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;aAC9B,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAAa,EACb,MAAc;IAEd,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC9D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,SAAS,CAAC,yBAAyB,KAAK,IAAI,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;IACvC,MAAM,SAAS,GAAI,KAAK,CAAC,CAAC,CAA2B,IAAI,iBAAiB,CAAC;IAC3E,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,SAAoB;IACpE,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;IACpB,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,KAAK,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,MAAM,GAAG,IAAI,CAAC;YACd,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,OAAO,GAAG,CAAC,OAAO,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,OAAO;YAAE,SAAS;QACtB,IAAI,EAAE,KAAK,GAAG,IAAI,UAAU,KAAK,CAAC,CAAC;YAAE,UAAU,GAAG,CAAC,CAAC;QACpD,IAAI,EAAE,KAAK,SAAS,IAAI,UAAU,KAAK,CAAC,CAAC;YAAE,UAAU,GAAG,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IACtC,OAAO,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;AACnD,CAAC"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var security_exports = {};
20
+ __export(security_exports, {
21
+ applyLimits: () => applyLimits,
22
+ bumpNodes: () => bumpNodes,
23
+ createSafeObject: () => createSafeObject,
24
+ detectTabular: () => detectTabular,
25
+ enforceDepth: () => enforceDepth,
26
+ enforceInputLength: () => enforceInputLength,
27
+ enforceLimits: () => enforceLimits,
28
+ isPlainObject: () => isPlainObject,
29
+ isPrimitive: () => isPrimitive,
30
+ validateKeySafety: () => validateKeySafety
31
+ });
32
+ module.exports = __toCommonJS(security_exports);
33
+ var import_constants = require("./constants.cjs");
34
+ var import_errors = require("./errors.cjs");
35
+ function applyLimits(options) {
36
+ return {
37
+ maxDepth: options.maxDepth ?? import_constants.DEFAULT_LIMITS.maxDepth,
38
+ maxArrayLength: options.maxArrayLength ?? import_constants.DEFAULT_LIMITS.maxArrayLength,
39
+ maxTotalNodes: options.maxTotalNodes ?? import_constants.DEFAULT_LIMITS.maxTotalNodes,
40
+ disallowedKeys: options.disallowedKeys ?? import_constants.DEFAULT_LIMITS.disallowedKeys,
41
+ maxInputLength: options.maxInputLength ?? import_constants.DEFAULT_LIMITS.maxInputLength
42
+ };
43
+ }
44
+ function enforceInputLength(text, options = {}) {
45
+ const cap = options.maxInputLength ?? import_constants.DEFAULT_LIMITS.maxInputLength;
46
+ if (text.length > cap) {
47
+ throw new import_errors.ToonError(`Input length ${text.length} exceeds limit ${cap}.`);
48
+ }
49
+ }
50
+ function bumpNodes(state, limits, count, lineNo) {
51
+ state.nodes += count;
52
+ if (state.nodes > limits.maxTotalNodes) {
53
+ throw new import_errors.ToonError(`Node count ${state.nodes} exceeds limit ${limits.maxTotalNodes}.`, lineNo);
54
+ }
55
+ }
56
+ function enforceLimits(depth, limits, state) {
57
+ if (depth > limits.maxDepth) {
58
+ throw new import_errors.ToonError(`Maximum depth ${limits.maxDepth} exceeded.`);
59
+ }
60
+ bumpNodes(state, limits, 1);
61
+ }
62
+ function enforceDepth(depth, limits) {
63
+ if (depth > limits.maxDepth) {
64
+ throw new import_errors.ToonError(`Maximum depth ${limits.maxDepth} exceeded.`);
65
+ }
66
+ }
67
+ function validateKeySafety(key, limits = import_constants.DEFAULT_LIMITS, lineNo) {
68
+ if (limits.disallowedKeys.includes(key)) {
69
+ throw new import_errors.ToonError(`Disallowed key "${key}" to prevent prototype pollution.`, lineNo);
70
+ }
71
+ }
72
+ function createSafeObject() {
73
+ return /* @__PURE__ */ Object.create(null);
74
+ }
75
+ function isPrimitive(value) {
76
+ return value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean";
77
+ }
78
+ function isPlainObject(value) {
79
+ if (value === null || typeof value !== "object") return false;
80
+ const proto = Object.getPrototypeOf(value);
81
+ return proto === Object.prototype || proto === null;
82
+ }
83
+ function detectTabular(arr) {
84
+ if (arr.length === 0) return null;
85
+ if (!arr.every((item) => isPlainObject(item))) {
86
+ return null;
87
+ }
88
+ const first = arr[0];
89
+ const fields = Object.keys(first);
90
+ if (fields.length === 0) {
91
+ return null;
92
+ }
93
+ const rows = [];
94
+ for (const item of arr) {
95
+ const obj = item;
96
+ const objKeys = Object.keys(obj);
97
+ if (objKeys.length !== fields.length) return null;
98
+ for (const field of fields) {
99
+ if (!Object.prototype.hasOwnProperty.call(obj, field)) return null;
100
+ if (!isPrimitive(obj[field])) return null;
101
+ }
102
+ rows.push(obj);
103
+ }
104
+ return { fields, rows };
105
+ }
106
+ // Annotate the CommonJS export names for ESM import in node:
107
+ 0 && (module.exports = {
108
+ applyLimits,
109
+ bumpNodes,
110
+ createSafeObject,
111
+ detectTabular,
112
+ enforceDepth,
113
+ enforceInputLength,
114
+ enforceLimits,
115
+ isPlainObject,
116
+ isPrimitive,
117
+ validateKeySafety
118
+ });
@@ -0,0 +1,31 @@
1
+ import type { JsonPrimitive, Limits } from './types.js';
2
+ export interface SecurityOptionsLike {
3
+ maxDepth?: number;
4
+ maxArrayLength?: number;
5
+ maxTotalNodes?: number;
6
+ disallowedKeys?: string[];
7
+ maxInputLength?: number;
8
+ }
9
+ export declare function applyLimits(options: SecurityOptionsLike): Limits;
10
+ export declare function enforceInputLength(text: string, options?: SecurityOptionsLike): void;
11
+ export declare function bumpNodes(state: {
12
+ nodes: number;
13
+ }, limits: Limits, count: number, lineNo?: number): void;
14
+ export declare function enforceLimits(depth: number, limits: Limits, state: {
15
+ nodes: number;
16
+ }): void;
17
+ /**
18
+ * Depth-only guard. Use this in encoder helpers that have already been
19
+ * accounted for by their caller (e.g. `encodeArray`/`encodeObject` reached
20
+ * via `encodeValue`, which already bumped a node).
21
+ */
22
+ export declare function enforceDepth(depth: number, limits: Limits): void;
23
+ export declare function validateKeySafety(key: string, limits?: Limits, lineNo?: number): void;
24
+ export declare function createSafeObject(): Record<string, unknown>;
25
+ export declare function isPrimitive(value: unknown): value is JsonPrimitive;
26
+ export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
27
+ export declare function detectTabular(arr: unknown[]): {
28
+ fields: string[];
29
+ rows: Record<string, JsonPrimitive>[];
30
+ } | null;
31
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/internal/security.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAQhE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAKxF;AAED,wBAAgB,SAAS,CACvB,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAKN;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAK3F;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAIhE;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAuB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAIrG;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE1D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAOlE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI9E;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EAAE,GACb;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAA;CAAE,GAAG,IAAI,CAsBpE"}
@@ -0,0 +1,87 @@
1
+ import { DEFAULT_LIMITS } from './constants.js';
2
+ import { ToonError } from './errors.js';
3
+ export function applyLimits(options) {
4
+ return {
5
+ maxDepth: options.maxDepth ?? DEFAULT_LIMITS.maxDepth,
6
+ maxArrayLength: options.maxArrayLength ?? DEFAULT_LIMITS.maxArrayLength,
7
+ maxTotalNodes: options.maxTotalNodes ?? DEFAULT_LIMITS.maxTotalNodes,
8
+ disallowedKeys: options.disallowedKeys ?? DEFAULT_LIMITS.disallowedKeys,
9
+ maxInputLength: options.maxInputLength ?? DEFAULT_LIMITS.maxInputLength
10
+ };
11
+ }
12
+ export function enforceInputLength(text, options = {}) {
13
+ const cap = options.maxInputLength ?? DEFAULT_LIMITS.maxInputLength;
14
+ if (text.length > cap) {
15
+ throw new ToonError(`Input length ${text.length} exceeds limit ${cap}.`);
16
+ }
17
+ }
18
+ export function bumpNodes(state, limits, count, lineNo) {
19
+ state.nodes += count;
20
+ if (state.nodes > limits.maxTotalNodes) {
21
+ throw new ToonError(`Node count ${state.nodes} exceeds limit ${limits.maxTotalNodes}.`, lineNo);
22
+ }
23
+ }
24
+ export function enforceLimits(depth, limits, state) {
25
+ if (depth > limits.maxDepth) {
26
+ throw new ToonError(`Maximum depth ${limits.maxDepth} exceeded.`);
27
+ }
28
+ bumpNodes(state, limits, 1);
29
+ }
30
+ /**
31
+ * Depth-only guard. Use this in encoder helpers that have already been
32
+ * accounted for by their caller (e.g. `encodeArray`/`encodeObject` reached
33
+ * via `encodeValue`, which already bumped a node).
34
+ */
35
+ export function enforceDepth(depth, limits) {
36
+ if (depth > limits.maxDepth) {
37
+ throw new ToonError(`Maximum depth ${limits.maxDepth} exceeded.`);
38
+ }
39
+ }
40
+ export function validateKeySafety(key, limits = DEFAULT_LIMITS, lineNo) {
41
+ if (limits.disallowedKeys.includes(key)) {
42
+ throw new ToonError(`Disallowed key "${key}" to prevent prototype pollution.`, lineNo);
43
+ }
44
+ }
45
+ export function createSafeObject() {
46
+ return Object.create(null);
47
+ }
48
+ export function isPrimitive(value) {
49
+ return (value === null ||
50
+ typeof value === 'string' ||
51
+ typeof value === 'number' ||
52
+ typeof value === 'boolean');
53
+ }
54
+ export function isPlainObject(value) {
55
+ if (value === null || typeof value !== 'object')
56
+ return false;
57
+ const proto = Object.getPrototypeOf(value);
58
+ return proto === Object.prototype || proto === null;
59
+ }
60
+ export function detectTabular(arr) {
61
+ if (arr.length === 0)
62
+ return null;
63
+ if (!arr.every(item => isPlainObject(item))) {
64
+ return null;
65
+ }
66
+ const first = arr[0];
67
+ const fields = Object.keys(first);
68
+ if (fields.length === 0) {
69
+ return null;
70
+ }
71
+ const rows = [];
72
+ for (const item of arr) {
73
+ const obj = item;
74
+ const objKeys = Object.keys(obj);
75
+ if (objKeys.length !== fields.length)
76
+ return null;
77
+ for (const field of fields) {
78
+ if (!Object.prototype.hasOwnProperty.call(obj, field))
79
+ return null;
80
+ if (!isPrimitive(obj[field]))
81
+ return null;
82
+ }
83
+ rows.push(obj);
84
+ }
85
+ return { fields, rows };
86
+ }
87
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/internal/security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var types_exports = {};
16
+ module.exports = __toCommonJS(types_exports);
@@ -0,0 +1,37 @@
1
+ export type JsonPrimitive = string | number | boolean | null;
2
+ export type Delimiter = ',' | '|' | '\t';
3
+ export interface Limits {
4
+ maxDepth: number;
5
+ maxArrayLength: number;
6
+ maxTotalNodes: number;
7
+ disallowedKeys: string[];
8
+ maxInputLength: number;
9
+ }
10
+ export type Container = {
11
+ type: 'object';
12
+ value: Record<string, unknown>;
13
+ indent: number;
14
+ } | {
15
+ type: 'list';
16
+ value: unknown[];
17
+ indent: number;
18
+ expectedLength: number | null;
19
+ delimiter: Delimiter;
20
+ } | {
21
+ type: 'tabular';
22
+ value: Record<string, unknown>[];
23
+ indent: number;
24
+ expectedLength: number;
25
+ delimiter: Delimiter;
26
+ fields: string[];
27
+ } | {
28
+ type: 'placeholder';
29
+ indent: number;
30
+ filled: boolean;
31
+ current?: {
32
+ value: Record<string, unknown>;
33
+ indent: number;
34
+ };
35
+ assign: (value: unknown) => void;
36
+ };
37
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/internal/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;AAEzC,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClE;IACE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,SAAS,CAAC;CACtB,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/internal/types.ts"],"names":[],"mappings":""}