@cogitator-ai/wasm-tools 0.4.1 → 0.5.0

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 (70) hide show
  1. package/README.md +141 -6
  2. package/dist/index.d.ts +227 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +194 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/plugins/compression.d.ts +2 -0
  7. package/dist/plugins/compression.d.ts.map +1 -0
  8. package/dist/plugins/compression.js +530 -0
  9. package/dist/plugins/compression.js.map +1 -0
  10. package/dist/plugins/csv.d.ts +2 -0
  11. package/dist/plugins/csv.d.ts.map +1 -0
  12. package/dist/plugins/csv.js +138 -0
  13. package/dist/plugins/csv.js.map +1 -0
  14. package/dist/plugins/datetime.d.ts +2 -0
  15. package/dist/plugins/datetime.d.ts.map +1 -0
  16. package/dist/plugins/datetime.js +184 -0
  17. package/dist/plugins/datetime.js.map +1 -0
  18. package/dist/plugins/diff.d.ts +2 -0
  19. package/dist/plugins/diff.d.ts.map +1 -0
  20. package/dist/plugins/diff.js +187 -0
  21. package/dist/plugins/diff.js.map +1 -0
  22. package/dist/plugins/markdown.d.ts +2 -0
  23. package/dist/plugins/markdown.d.ts.map +1 -0
  24. package/dist/plugins/markdown.js +203 -0
  25. package/dist/plugins/markdown.js.map +1 -0
  26. package/dist/plugins/regex.d.ts +2 -0
  27. package/dist/plugins/regex.d.ts.map +1 -0
  28. package/dist/plugins/regex.js +119 -0
  29. package/dist/plugins/regex.js.map +1 -0
  30. package/dist/plugins/signing.d.ts +2 -0
  31. package/dist/plugins/signing.d.ts.map +1 -0
  32. package/dist/plugins/signing.js +565 -0
  33. package/dist/plugins/signing.js.map +1 -0
  34. package/dist/plugins/slug.d.ts +2 -0
  35. package/dist/plugins/slug.d.ts.map +1 -0
  36. package/dist/plugins/slug.js +180 -0
  37. package/dist/plugins/slug.js.map +1 -0
  38. package/dist/plugins/validation.d.ts +2 -0
  39. package/dist/plugins/validation.d.ts.map +1 -0
  40. package/dist/plugins/validation.js +105 -0
  41. package/dist/plugins/validation.js.map +1 -0
  42. package/dist/plugins/xml.d.ts +2 -0
  43. package/dist/plugins/xml.d.ts.map +1 -0
  44. package/dist/plugins/xml.js +293 -0
  45. package/dist/plugins/xml.js.map +1 -0
  46. package/dist/temp/compression.js +614 -0
  47. package/dist/temp/csv.js +154 -0
  48. package/dist/temp/datetime.js +196 -0
  49. package/dist/temp/diff.js +198 -0
  50. package/dist/temp/markdown.js +220 -0
  51. package/dist/temp/regex.js +140 -0
  52. package/dist/temp/signing.js +569 -0
  53. package/dist/temp/slug.js +198 -0
  54. package/dist/temp/validation.js +125 -0
  55. package/dist/temp/xml.js +289 -0
  56. package/dist/wasm/base64.wasm +0 -0
  57. package/dist/wasm/calc.wasm +0 -0
  58. package/dist/wasm/compression.wasm +0 -0
  59. package/dist/wasm/csv.wasm +0 -0
  60. package/dist/wasm/datetime.wasm +0 -0
  61. package/dist/wasm/diff.wasm +0 -0
  62. package/dist/wasm/hash.wasm +0 -0
  63. package/dist/wasm/json.wasm +0 -0
  64. package/dist/wasm/markdown.wasm +0 -0
  65. package/dist/wasm/regex.wasm +0 -0
  66. package/dist/wasm/signing.wasm +0 -0
  67. package/dist/wasm/slug.wasm +0 -0
  68. package/dist/wasm/validation.wasm +0 -0
  69. package/dist/wasm/xml.wasm +0 -0
  70. package/package.json +2 -2
@@ -0,0 +1,180 @@
1
+ const CHAR_MAP = {
2
+ à: 'a',
3
+ á: 'a',
4
+ â: 'a',
5
+ ã: 'a',
6
+ ä: 'a',
7
+ å: 'a',
8
+ æ: 'ae',
9
+ ç: 'c',
10
+ è: 'e',
11
+ é: 'e',
12
+ ê: 'e',
13
+ ë: 'e',
14
+ ì: 'i',
15
+ í: 'i',
16
+ î: 'i',
17
+ ï: 'i',
18
+ ð: 'd',
19
+ ñ: 'n',
20
+ ò: 'o',
21
+ ó: 'o',
22
+ ô: 'o',
23
+ õ: 'o',
24
+ ö: 'o',
25
+ ø: 'o',
26
+ ù: 'u',
27
+ ú: 'u',
28
+ û: 'u',
29
+ ü: 'u',
30
+ ý: 'y',
31
+ ÿ: 'y',
32
+ þ: 'th',
33
+ ß: 'ss',
34
+ ą: 'a',
35
+ ć: 'c',
36
+ ę: 'e',
37
+ ł: 'l',
38
+ ń: 'n',
39
+ ś: 's',
40
+ ź: 'z',
41
+ ż: 'z',
42
+ č: 'c',
43
+ ď: 'd',
44
+ ě: 'e',
45
+ ň: 'n',
46
+ ř: 'r',
47
+ š: 's',
48
+ ť: 't',
49
+ ů: 'u',
50
+ ž: 'z',
51
+ ā: 'a',
52
+ ē: 'e',
53
+ ģ: 'g',
54
+ ī: 'i',
55
+ ķ: 'k',
56
+ ļ: 'l',
57
+ ņ: 'n',
58
+ ū: 'u',
59
+ ő: 'o',
60
+ ű: 'u',
61
+ а: 'a',
62
+ б: 'b',
63
+ в: 'v',
64
+ г: 'g',
65
+ д: 'd',
66
+ е: 'e',
67
+ ё: 'yo',
68
+ ж: 'zh',
69
+ з: 'z',
70
+ и: 'i',
71
+ й: 'y',
72
+ к: 'k',
73
+ л: 'l',
74
+ м: 'm',
75
+ н: 'n',
76
+ о: 'o',
77
+ п: 'p',
78
+ р: 'r',
79
+ с: 's',
80
+ т: 't',
81
+ у: 'u',
82
+ ф: 'f',
83
+ х: 'h',
84
+ ц: 'ts',
85
+ ч: 'ch',
86
+ ш: 'sh',
87
+ щ: 'sch',
88
+ ъ: '',
89
+ ы: 'y',
90
+ ь: '',
91
+ э: 'e',
92
+ ю: 'yu',
93
+ я: 'ya',
94
+ α: 'a',
95
+ β: 'b',
96
+ γ: 'g',
97
+ δ: 'd',
98
+ ε: 'e',
99
+ ζ: 'z',
100
+ η: 'h',
101
+ θ: 'th',
102
+ ι: 'i',
103
+ κ: 'k',
104
+ λ: 'l',
105
+ μ: 'm',
106
+ ν: 'n',
107
+ ξ: 'x',
108
+ ο: 'o',
109
+ π: 'p',
110
+ ρ: 'r',
111
+ σ: 's',
112
+ τ: 't',
113
+ υ: 'y',
114
+ φ: 'ph',
115
+ χ: 'ch',
116
+ ψ: 'ps',
117
+ ω: 'o',
118
+ };
119
+ function transliterate(str) {
120
+ let result = '';
121
+ for (const char of str) {
122
+ const lower = char.toLowerCase();
123
+ if (CHAR_MAP[lower]) {
124
+ const mapped = CHAR_MAP[lower];
125
+ result += char === lower ? mapped : mapped.toUpperCase();
126
+ }
127
+ else {
128
+ result += char;
129
+ }
130
+ }
131
+ return result;
132
+ }
133
+ function generateSlug(text, separator, lowercase, maxLength) {
134
+ let slug = transliterate(text);
135
+ if (lowercase) {
136
+ slug = slug.toLowerCase();
137
+ }
138
+ slug = slug
139
+ .replace(/[^a-zA-Z0-9\s-]/g, '')
140
+ .replace(/\s+/g, separator)
141
+ .replace(new RegExp(`${escapeRegex(separator)}+`, 'g'), separator)
142
+ .replace(new RegExp(`^${escapeRegex(separator)}|${escapeRegex(separator)}$`, 'g'), '');
143
+ if (maxLength && slug.length > maxLength) {
144
+ slug = slug.substring(0, maxLength);
145
+ const lastSep = slug.lastIndexOf(separator);
146
+ if (lastSep > maxLength * 0.5) {
147
+ slug = slug.substring(0, lastSep);
148
+ }
149
+ slug = slug.replace(new RegExp(`${escapeRegex(separator)}$`), '');
150
+ }
151
+ return slug;
152
+ }
153
+ function escapeRegex(str) {
154
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
155
+ }
156
+ export function slug() {
157
+ try {
158
+ const inputStr = Host.inputString();
159
+ const input = JSON.parse(inputStr);
160
+ const separator = input.separator ?? '-';
161
+ const lowercase = input.lowercase ?? true;
162
+ const result = generateSlug(input.text, separator, lowercase, input.maxLength);
163
+ const output = {
164
+ slug: result,
165
+ original: input.text,
166
+ };
167
+ Host.outputString(JSON.stringify(output));
168
+ return 0;
169
+ }
170
+ catch (error) {
171
+ const output = {
172
+ slug: '',
173
+ original: '',
174
+ error: error instanceof Error ? error.message : String(error),
175
+ };
176
+ Host.outputString(JSON.stringify(output));
177
+ return 1;
178
+ }
179
+ }
180
+ //# sourceMappingURL=slug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/plugins/slug.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function validate(): number;
2
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/plugins/validation.ts"],"names":[],"mappings":"AAiGA,wBAAgB,QAAQ,IAAI,MAAM,CA8CjC"}
@@ -0,0 +1,105 @@
1
+ const EMAIL_REGEX = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
2
+ const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
3
+ const IPV4_REGEX = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
4
+ const IPV6_REGEX = /^(?:(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,7}:|(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,5}(?::[0-9a-fA-F]{1,4}){1,2}|(?:[0-9a-fA-F]{1,4}:){1,4}(?::[0-9a-fA-F]{1,4}){1,3}|(?:[0-9a-fA-F]{1,4}:){1,3}(?::[0-9a-fA-F]{1,4}){1,4}|(?:[0-9a-fA-F]{1,4}:){1,2}(?::[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:(?::[0-9a-fA-F]{1,4}){1,6}|:(?::[0-9a-fA-F]{1,4}){1,7}|::(?:[fF]{4}:)?(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:[0-9a-fA-F]{1,4}:){1,4}:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))$/;
5
+ function validateEmail(value) {
6
+ const trimmed = value.trim().toLowerCase();
7
+ const valid = EMAIL_REGEX.test(trimmed) && trimmed.length <= 254;
8
+ return { valid, normalized: valid ? trimmed : undefined };
9
+ }
10
+ function validateUrl(value) {
11
+ try {
12
+ const trimmed = value.trim();
13
+ const hasProtocol = /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(trimmed);
14
+ const urlStr = hasProtocol ? trimmed : `https://${trimmed}`;
15
+ const parts = urlStr.match(/^([a-zA-Z][a-zA-Z0-9+.-]*):\/\/([^/?#]+)(.*)$/);
16
+ if (!parts)
17
+ return { valid: false };
18
+ const [, protocol, host] = parts;
19
+ if (!['http', 'https', 'ftp', 'ftps'].includes(protocol.toLowerCase())) {
20
+ return { valid: false };
21
+ }
22
+ const hostParts = host.split(':');
23
+ const hostname = hostParts[0];
24
+ const port = hostParts[1];
25
+ if (port && (!/^\d+$/.test(port) || parseInt(port) > 65535)) {
26
+ return { valid: false };
27
+ }
28
+ if (!/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*$/.test(hostname)) {
29
+ if (!IPV4_REGEX.test(hostname) && !hostname.startsWith('[')) {
30
+ return { valid: false };
31
+ }
32
+ }
33
+ return { valid: true, normalized: urlStr };
34
+ }
35
+ catch {
36
+ return { valid: false };
37
+ }
38
+ }
39
+ function validateUuid(value) {
40
+ const trimmed = value.trim().toLowerCase();
41
+ const valid = UUID_REGEX.test(trimmed);
42
+ return { valid, normalized: valid ? trimmed : undefined };
43
+ }
44
+ function validateIpv4(value) {
45
+ const trimmed = value.trim();
46
+ const valid = IPV4_REGEX.test(trimmed);
47
+ if (valid) {
48
+ const normalized = trimmed
49
+ .split('.')
50
+ .map((n) => parseInt(n, 10).toString())
51
+ .join('.');
52
+ return { valid: true, normalized };
53
+ }
54
+ return { valid: false };
55
+ }
56
+ function validateIpv6(value) {
57
+ const trimmed = value.trim().toLowerCase();
58
+ const valid = IPV6_REGEX.test(trimmed);
59
+ return { valid, normalized: valid ? trimmed : undefined };
60
+ }
61
+ export function validate() {
62
+ try {
63
+ const inputStr = Host.inputString();
64
+ const input = JSON.parse(inputStr);
65
+ let result;
66
+ switch (input.type) {
67
+ case 'email':
68
+ result = validateEmail(input.value);
69
+ break;
70
+ case 'url':
71
+ result = validateUrl(input.value);
72
+ break;
73
+ case 'uuid':
74
+ result = validateUuid(input.value);
75
+ break;
76
+ case 'ipv4':
77
+ result = validateIpv4(input.value);
78
+ break;
79
+ case 'ipv6':
80
+ result = validateIpv6(input.value);
81
+ break;
82
+ default:
83
+ throw new Error(`Unknown validation type: ${input.type}`);
84
+ }
85
+ const output = {
86
+ valid: result.valid,
87
+ type: input.type,
88
+ value: input.value,
89
+ normalized: result.normalized,
90
+ };
91
+ Host.outputString(JSON.stringify(output));
92
+ return 0;
93
+ }
94
+ catch (error) {
95
+ const output = {
96
+ valid: false,
97
+ type: 'unknown',
98
+ value: '',
99
+ error: error instanceof Error ? error.message : String(error),
100
+ };
101
+ Host.outputString(JSON.stringify(output));
102
+ return 1;
103
+ }
104
+ }
105
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/plugins/validation.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,GACf,sIAAsI,CAAC;AAEzI,MAAM,UAAU,GAAG,4EAA4E,CAAC;AAEhG,MAAM,UAAU,GACd,6FAA6F,CAAC;AAEhG,MAAM,UAAU,GACd,knBAAknB,CAAC;AAErnB,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC;IACjE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAE7B,MAAM,WAAW,GAAG,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,OAAO,EAAE,CAAC;QAE5D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAEpC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;QAEjC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACvE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAE1B,IAAI,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YAC5D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;QAED,IACE,CAAC,qFAAqF,CAAC,IAAI,CACzF,QAAQ,CACT,EACD,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEvC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,UAAU,GAAG,OAAO;aACvB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;aACtC,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACrC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,KAAK,GAAoB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEpD,IAAI,MAA+C,CAAC;QAEpD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,OAAO;gBACV,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpC,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACnC,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,MAAM,GAAqB;YAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAqB;YAC/B,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function xml(): number;
2
+ //# sourceMappingURL=xml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../../src/plugins/xml.ts"],"names":[],"mappings":"AAiTA,wBAAgB,GAAG,IAAI,MAAM,CAwC5B"}
@@ -0,0 +1,293 @@
1
+ function parseXml(xml) {
2
+ let pos = 0;
3
+ const skipWhitespace = () => {
4
+ while (pos < xml.length && /\s/.test(xml[pos]))
5
+ pos++;
6
+ };
7
+ const parseAttributes = () => {
8
+ const attrs = {};
9
+ while (pos < xml.length) {
10
+ skipWhitespace();
11
+ if (xml[pos] === '>' || xml[pos] === '/' || xml[pos] === '?')
12
+ break;
13
+ let name = '';
14
+ while (pos < xml.length && /[a-zA-Z0-9_:-]/.test(xml[pos])) {
15
+ name += xml[pos++];
16
+ }
17
+ if (!name)
18
+ break;
19
+ skipWhitespace();
20
+ if (xml[pos] !== '=') {
21
+ attrs[name] = 'true';
22
+ continue;
23
+ }
24
+ pos++;
25
+ skipWhitespace();
26
+ const quote = xml[pos];
27
+ if (quote !== '"' && quote !== "'") {
28
+ throw new Error(`Expected quote at position ${pos}`);
29
+ }
30
+ pos++;
31
+ let value = '';
32
+ while (pos < xml.length && xml[pos] !== quote) {
33
+ if (xml[pos] === '&') {
34
+ const entity = parseEntity();
35
+ value += entity;
36
+ }
37
+ else {
38
+ value += xml[pos++];
39
+ }
40
+ }
41
+ pos++;
42
+ attrs[name] = value;
43
+ }
44
+ return attrs;
45
+ };
46
+ const parseEntity = () => {
47
+ let entity = '';
48
+ pos++;
49
+ while (pos < xml.length && xml[pos] !== ';') {
50
+ entity += xml[pos++];
51
+ }
52
+ pos++;
53
+ switch (entity) {
54
+ case 'lt':
55
+ return '<';
56
+ case 'gt':
57
+ return '>';
58
+ case 'amp':
59
+ return '&';
60
+ case 'quot':
61
+ return '"';
62
+ case 'apos':
63
+ return "'";
64
+ default:
65
+ if (entity.startsWith('#x')) {
66
+ return String.fromCharCode(parseInt(entity.slice(2), 16));
67
+ }
68
+ else if (entity.startsWith('#')) {
69
+ return String.fromCharCode(parseInt(entity.slice(1), 10));
70
+ }
71
+ return `&${entity};`;
72
+ }
73
+ };
74
+ const parseText = () => {
75
+ let text = '';
76
+ while (pos < xml.length && xml[pos] !== '<') {
77
+ if (xml[pos] === '&') {
78
+ text += parseEntity();
79
+ }
80
+ else {
81
+ text += xml[pos++];
82
+ }
83
+ }
84
+ return text;
85
+ };
86
+ const parseNode = () => {
87
+ skipWhitespace();
88
+ if (pos >= xml.length)
89
+ return null;
90
+ if (xml[pos] !== '<') {
91
+ const text = parseText().trim();
92
+ if (text) {
93
+ return { type: 'text', value: text };
94
+ }
95
+ return null;
96
+ }
97
+ pos++;
98
+ if (xml.slice(pos, pos + 3) === '!--') {
99
+ pos += 3;
100
+ const endPos = xml.indexOf('-->', pos);
101
+ if (endPos === -1)
102
+ throw new Error('Unclosed comment');
103
+ const value = xml.slice(pos, endPos);
104
+ pos = endPos + 3;
105
+ return { type: 'comment', value };
106
+ }
107
+ if (xml.slice(pos, pos + 8) === '![CDATA[') {
108
+ pos += 8;
109
+ const endPos = xml.indexOf(']]>', pos);
110
+ if (endPos === -1)
111
+ throw new Error('Unclosed CDATA');
112
+ const value = xml.slice(pos, endPos);
113
+ pos = endPos + 3;
114
+ return { type: 'cdata', value };
115
+ }
116
+ if (xml[pos] === '?') {
117
+ const endPos = xml.indexOf('?>', pos);
118
+ if (endPos === -1)
119
+ throw new Error('Unclosed processing instruction');
120
+ pos = endPos + 2;
121
+ return parseNode();
122
+ }
123
+ if (xml[pos] === '!') {
124
+ const endPos = xml.indexOf('>', pos);
125
+ if (endPos === -1)
126
+ throw new Error('Unclosed declaration');
127
+ pos = endPos + 1;
128
+ return parseNode();
129
+ }
130
+ if (xml[pos] === '/') {
131
+ return null;
132
+ }
133
+ let name = '';
134
+ while (pos < xml.length && /[a-zA-Z0-9_:-]/.test(xml[pos])) {
135
+ name += xml[pos++];
136
+ }
137
+ if (!name)
138
+ throw new Error(`Expected element name at position ${pos}`);
139
+ const attributes = parseAttributes();
140
+ skipWhitespace();
141
+ if (xml.slice(pos, pos + 2) === '/>') {
142
+ pos += 2;
143
+ return { type: 'element', name, attributes, children: [] };
144
+ }
145
+ if (xml[pos] !== '>') {
146
+ throw new Error(`Expected > at position ${pos}`);
147
+ }
148
+ pos++;
149
+ const children = [];
150
+ while (pos < xml.length) {
151
+ skipWhitespace();
152
+ if (xml.slice(pos, pos + 2) === '</') {
153
+ pos += 2;
154
+ let closeName = '';
155
+ while (pos < xml.length && /[a-zA-Z0-9_:-]/.test(xml[pos])) {
156
+ closeName += xml[pos++];
157
+ }
158
+ skipWhitespace();
159
+ if (xml[pos] !== '>')
160
+ throw new Error(`Expected > at position ${pos}`);
161
+ pos++;
162
+ if (closeName !== name) {
163
+ throw new Error(`Mismatched tags: ${name} vs ${closeName}`);
164
+ }
165
+ break;
166
+ }
167
+ const child = parseNode();
168
+ if (child) {
169
+ children.push(child);
170
+ }
171
+ else if (xml[pos] !== '<') {
172
+ break;
173
+ }
174
+ }
175
+ return { type: 'element', name, attributes, children };
176
+ };
177
+ const root = parseNode();
178
+ if (!root)
179
+ throw new Error('Empty document');
180
+ return root;
181
+ }
182
+ function queryXml(node, query) {
183
+ const parts = query.split('/').filter((p) => p);
184
+ if (parts.length === 0)
185
+ return node;
186
+ let current = node;
187
+ for (let i = 0; i < parts.length; i++) {
188
+ const part = parts[i];
189
+ if (part.startsWith('@')) {
190
+ const attrName = part.slice(1);
191
+ if (Array.isArray(current)) {
192
+ return current
193
+ .filter((n) => n.type === 'element' && n.attributes?.[attrName])
194
+ .map((n) => n.attributes[attrName]);
195
+ }
196
+ if (current.type === 'element' && current.attributes?.[attrName]) {
197
+ return current.attributes[attrName];
198
+ }
199
+ return null;
200
+ }
201
+ const isRecursive = part === '';
202
+ if (isRecursive) {
203
+ i++;
204
+ if (i >= parts.length)
205
+ return null;
206
+ const targetName = parts[i];
207
+ const results = [];
208
+ const findAll = (n) => {
209
+ if (n.type === 'element') {
210
+ if (n.name === targetName)
211
+ results.push(n);
212
+ if (n.children)
213
+ n.children.forEach(findAll);
214
+ }
215
+ };
216
+ if (Array.isArray(current)) {
217
+ current.forEach(findAll);
218
+ }
219
+ else {
220
+ findAll(current);
221
+ }
222
+ current = results;
223
+ continue;
224
+ }
225
+ if (Array.isArray(current)) {
226
+ const results = [];
227
+ for (const n of current) {
228
+ if (n.type === 'element' && n.children) {
229
+ for (const child of n.children) {
230
+ if (child.type === 'element' && child.name === part) {
231
+ results.push(child);
232
+ }
233
+ }
234
+ }
235
+ }
236
+ current = results;
237
+ }
238
+ else {
239
+ if (current.type !== 'element' || !current.children)
240
+ return null;
241
+ const matches = current.children.filter((c) => c.type === 'element' && c.name === part);
242
+ if (matches.length === 0)
243
+ return null;
244
+ if (matches.length === 1) {
245
+ current = matches[0];
246
+ }
247
+ else {
248
+ current = matches;
249
+ }
250
+ }
251
+ }
252
+ return current;
253
+ }
254
+ export function xml() {
255
+ try {
256
+ const inputStr = Host.inputString();
257
+ const input = JSON.parse(inputStr);
258
+ const parsed = parseXml(input.xml);
259
+ let result = parsed;
260
+ let type = 'document';
261
+ if (input.query) {
262
+ result = queryXml(parsed, input.query);
263
+ if (result === null) {
264
+ type = 'element';
265
+ }
266
+ else if (typeof result === 'string') {
267
+ type = 'text';
268
+ }
269
+ else if (Array.isArray(result)) {
270
+ type = 'array';
271
+ }
272
+ else {
273
+ type = 'element';
274
+ }
275
+ }
276
+ const output = {
277
+ result,
278
+ type,
279
+ };
280
+ Host.outputString(JSON.stringify(output));
281
+ return 0;
282
+ }
283
+ catch (error) {
284
+ const output = {
285
+ result: null,
286
+ type: 'document',
287
+ error: error instanceof Error ? error.message : String(error),
288
+ };
289
+ Host.outputString(JSON.stringify(output));
290
+ return 1;
291
+ }
292
+ }
293
+ //# sourceMappingURL=xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.js","sourceRoot":"","sources":["../../src/plugins/xml.ts"],"names":[],"mappings":"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"}