@atmaticai/agent-tools-core 1.0.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.
- package/README.md +742 -0
- package/dist/archive/index.d.mts +1 -0
- package/dist/archive/index.d.ts +1 -0
- package/dist/archive/index.js +90 -0
- package/dist/archive/index.js.map +1 -0
- package/dist/archive/index.mjs +80 -0
- package/dist/archive/index.mjs.map +1 -0
- package/dist/color/index.d.mts +1 -0
- package/dist/color/index.d.ts +1 -0
- package/dist/color/index.js +347 -0
- package/dist/color/index.js.map +1 -0
- package/dist/color/index.mjs +336 -0
- package/dist/color/index.mjs.map +1 -0
- package/dist/crypto/index.d.mts +1 -0
- package/dist/crypto/index.d.ts +1 -0
- package/dist/crypto/index.js +116 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/index.mjs +108 -0
- package/dist/crypto/index.mjs.map +1 -0
- package/dist/csv/index.d.mts +1 -0
- package/dist/csv/index.d.ts +1 -0
- package/dist/csv/index.js +371 -0
- package/dist/csv/index.js.map +1 -0
- package/dist/csv/index.mjs +348 -0
- package/dist/csv/index.mjs.map +1 -0
- package/dist/datetime/index.d.mts +1 -0
- package/dist/datetime/index.d.ts +1 -0
- package/dist/datetime/index.js +234 -0
- package/dist/datetime/index.js.map +1 -0
- package/dist/datetime/index.mjs +224 -0
- package/dist/datetime/index.mjs.map +1 -0
- package/dist/diff/index.d.mts +2 -0
- package/dist/diff/index.d.ts +2 -0
- package/dist/diff/index.js +84 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/diff/index.mjs +78 -0
- package/dist/diff/index.mjs.map +1 -0
- package/dist/excel/index.d.mts +1 -0
- package/dist/excel/index.d.ts +1 -0
- package/dist/excel/index.js +163 -0
- package/dist/excel/index.js.map +1 -0
- package/dist/excel/index.mjs +153 -0
- package/dist/excel/index.mjs.map +1 -0
- package/dist/image/index.d.mts +1 -0
- package/dist/image/index.d.ts +1 -0
- package/dist/image/index.js +123 -0
- package/dist/image/index.js.map +1 -0
- package/dist/image/index.mjs +107 -0
- package/dist/image/index.mjs.map +1 -0
- package/dist/index--vbnYfdE.d.mts +142 -0
- package/dist/index--vbnYfdE.d.ts +142 -0
- package/dist/index-7FZQloN-.d.mts +62 -0
- package/dist/index-7FZQloN-.d.ts +62 -0
- package/dist/index-7XgaTVH5.d.mts +93 -0
- package/dist/index-7XgaTVH5.d.ts +93 -0
- package/dist/index-7bvFmh45.d.mts +87 -0
- package/dist/index-7bvFmh45.d.ts +87 -0
- package/dist/index-BDZcIVCU.d.mts +53 -0
- package/dist/index-BDZcIVCU.d.ts +53 -0
- package/dist/index-BN00EnUU.d.mts +55 -0
- package/dist/index-BN00EnUU.d.ts +55 -0
- package/dist/index-CQ1EukC4.d.mts +59 -0
- package/dist/index-CQ1EukC4.d.ts +59 -0
- package/dist/index-CgRVnFOt.d.mts +91 -0
- package/dist/index-CgRVnFOt.d.ts +91 -0
- package/dist/index-DjBDZzuj.d.mts +54 -0
- package/dist/index-DjBDZzuj.d.ts +54 -0
- package/dist/index-FFrvmr-n.d.mts +50 -0
- package/dist/index-FFrvmr-n.d.ts +50 -0
- package/dist/index-QWC8yIgW.d.mts +106 -0
- package/dist/index-QWC8yIgW.d.ts +106 -0
- package/dist/index-RVqNunxE.d.mts +193 -0
- package/dist/index-RVqNunxE.d.ts +193 -0
- package/dist/index-fJD8SORm.d.mts +61 -0
- package/dist/index-fJD8SORm.d.ts +61 -0
- package/dist/index-pPy_XDQU.d.mts +56 -0
- package/dist/index-pPy_XDQU.d.ts +56 -0
- package/dist/index-rwh9hdD9.d.mts +68 -0
- package/dist/index-rwh9hdD9.d.ts +68 -0
- package/dist/index-uXdkAfea.d.mts +93 -0
- package/dist/index-uXdkAfea.d.ts +93 -0
- package/dist/index.d.mts +17 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +3744 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3694 -0
- package/dist/index.mjs.map +1 -0
- package/dist/json/index.d.mts +1 -0
- package/dist/json/index.d.ts +1 -0
- package/dist/json/index.js +599 -0
- package/dist/json/index.js.map +1 -0
- package/dist/json/index.mjs +552 -0
- package/dist/json/index.mjs.map +1 -0
- package/dist/markdown/index.d.mts +1 -0
- package/dist/markdown/index.d.ts +1 -0
- package/dist/markdown/index.js +151 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/markdown/index.mjs +139 -0
- package/dist/markdown/index.mjs.map +1 -0
- package/dist/math/index.d.mts +1 -0
- package/dist/math/index.d.ts +1 -0
- package/dist/math/index.js +247 -0
- package/dist/math/index.js.map +1 -0
- package/dist/math/index.mjs +240 -0
- package/dist/math/index.mjs.map +1 -0
- package/dist/pdf/index.d.mts +1 -0
- package/dist/pdf/index.d.ts +1 -0
- package/dist/pdf/index.js +546 -0
- package/dist/pdf/index.js.map +1 -0
- package/dist/pdf/index.mjs +518 -0
- package/dist/pdf/index.mjs.map +1 -0
- package/dist/regex/index.d.mts +1 -0
- package/dist/regex/index.d.ts +1 -0
- package/dist/regex/index.js +93 -0
- package/dist/regex/index.js.map +1 -0
- package/dist/regex/index.mjs +88 -0
- package/dist/regex/index.mjs.map +1 -0
- package/dist/settings/index.d.mts +41 -0
- package/dist/settings/index.d.ts +41 -0
- package/dist/settings/index.js +146 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/index.mjs +139 -0
- package/dist/settings/index.mjs.map +1 -0
- package/dist/sql/index.d.mts +1 -0
- package/dist/sql/index.d.ts +1 -0
- package/dist/sql/index.js +146 -0
- package/dist/sql/index.js.map +1 -0
- package/dist/sql/index.mjs +139 -0
- package/dist/sql/index.mjs.map +1 -0
- package/dist/text/index.d.mts +1 -0
- package/dist/text/index.d.ts +1 -0
- package/dist/text/index.js +250 -0
- package/dist/text/index.js.map +1 -0
- package/dist/text/index.mjs +242 -0
- package/dist/text/index.mjs.map +1 -0
- package/dist/xml/index.d.mts +1 -0
- package/dist/xml/index.d.ts +1 -0
- package/dist/xml/index.js +188 -0
- package/dist/xml/index.js.map +1 -0
- package/dist/xml/index.mjs +180 -0
- package/dist/xml/index.mjs.map +1 -0
- package/package.json +150 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
// src/text/case.ts
|
|
2
|
+
function splitWords(input) {
|
|
3
|
+
return input.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2").replace(/[-_]/g, " ").split(/\s+/).filter((word) => word.length > 0);
|
|
4
|
+
}
|
|
5
|
+
function capitalize(word) {
|
|
6
|
+
return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
|
|
7
|
+
}
|
|
8
|
+
function convertCase(input, to) {
|
|
9
|
+
const words = splitWords(input);
|
|
10
|
+
if (words.length === 0) {
|
|
11
|
+
return "";
|
|
12
|
+
}
|
|
13
|
+
switch (to) {
|
|
14
|
+
case "camel":
|
|
15
|
+
return words.map((word, index) => index === 0 ? word.toLowerCase() : capitalize(word)).join("");
|
|
16
|
+
case "pascal":
|
|
17
|
+
return words.map((word) => capitalize(word)).join("");
|
|
18
|
+
case "snake":
|
|
19
|
+
return words.map((word) => word.toLowerCase()).join("_");
|
|
20
|
+
case "kebab":
|
|
21
|
+
return words.map((word) => word.toLowerCase()).join("-");
|
|
22
|
+
case "constant":
|
|
23
|
+
return words.map((word) => word.toUpperCase()).join("_");
|
|
24
|
+
case "title":
|
|
25
|
+
return words.map((word) => capitalize(word)).join(" ");
|
|
26
|
+
case "sentence":
|
|
27
|
+
return words.map((word, index) => index === 0 ? capitalize(word) : word.toLowerCase()).join(" ");
|
|
28
|
+
case "upper":
|
|
29
|
+
return words.map((word) => word.toUpperCase()).join(" ");
|
|
30
|
+
case "lower":
|
|
31
|
+
return words.map((word) => word.toLowerCase()).join(" ");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// src/text/slug.ts
|
|
36
|
+
function slugify(input, separator = "-") {
|
|
37
|
+
return input.toLowerCase().replace(/[^a-z0-9]+/g, separator).replace(new RegExp(`${escapeRegExp(separator)}+`, "g"), separator).replace(new RegExp(`^${escapeRegExp(separator)}|${escapeRegExp(separator)}$`, "g"), "");
|
|
38
|
+
}
|
|
39
|
+
function escapeRegExp(str) {
|
|
40
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// src/text/stats.ts
|
|
44
|
+
function getTextStats(input) {
|
|
45
|
+
const characters = input.length;
|
|
46
|
+
const words = input.split(/\s+/).filter((word) => word.length > 0);
|
|
47
|
+
const sentences = input.split(/[.!?](?:\s|$)/).filter((sentence) => sentence.trim().length > 0);
|
|
48
|
+
const paragraphs = input.split(/\n\n+/).filter((paragraph) => paragraph.trim().length > 0);
|
|
49
|
+
const lines = input.split(/\n/);
|
|
50
|
+
const readingTimeMs = words.length / 200 * 60 * 1e3;
|
|
51
|
+
return {
|
|
52
|
+
characters,
|
|
53
|
+
words: words.length,
|
|
54
|
+
sentences: sentences.length,
|
|
55
|
+
paragraphs: paragraphs.length,
|
|
56
|
+
lines: lines.length,
|
|
57
|
+
readingTimeMs
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// src/text/truncate.ts
|
|
62
|
+
function truncate(input, options) {
|
|
63
|
+
const { length, boundary = "word", suffix = "..." } = options;
|
|
64
|
+
if (input.length <= length) {
|
|
65
|
+
return input;
|
|
66
|
+
}
|
|
67
|
+
const maxContentLength = length - suffix.length;
|
|
68
|
+
if (maxContentLength <= 0) {
|
|
69
|
+
return suffix.slice(0, length);
|
|
70
|
+
}
|
|
71
|
+
if (boundary === "character") {
|
|
72
|
+
return input.slice(0, maxContentLength) + suffix;
|
|
73
|
+
}
|
|
74
|
+
const truncated = input.slice(0, maxContentLength);
|
|
75
|
+
const lastSpaceIndex = truncated.lastIndexOf(" ");
|
|
76
|
+
if (lastSpaceIndex === -1) {
|
|
77
|
+
return truncated + suffix;
|
|
78
|
+
}
|
|
79
|
+
return input.slice(0, lastSpaceIndex) + suffix;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// src/text/lorem.ts
|
|
83
|
+
var LOREM_WORDS = [
|
|
84
|
+
"lorem",
|
|
85
|
+
"ipsum",
|
|
86
|
+
"dolor",
|
|
87
|
+
"sit",
|
|
88
|
+
"amet",
|
|
89
|
+
"consectetur",
|
|
90
|
+
"adipiscing",
|
|
91
|
+
"elit",
|
|
92
|
+
"sed",
|
|
93
|
+
"do",
|
|
94
|
+
"eiusmod",
|
|
95
|
+
"tempor",
|
|
96
|
+
"incididunt",
|
|
97
|
+
"ut",
|
|
98
|
+
"labore",
|
|
99
|
+
"et",
|
|
100
|
+
"dolore",
|
|
101
|
+
"magna",
|
|
102
|
+
"aliqua",
|
|
103
|
+
"enim",
|
|
104
|
+
"ad",
|
|
105
|
+
"minim",
|
|
106
|
+
"veniam",
|
|
107
|
+
"quis",
|
|
108
|
+
"nostrud",
|
|
109
|
+
"exercitation",
|
|
110
|
+
"ullamco",
|
|
111
|
+
"laboris",
|
|
112
|
+
"nisi",
|
|
113
|
+
"aliquip",
|
|
114
|
+
"ex",
|
|
115
|
+
"ea",
|
|
116
|
+
"commodo",
|
|
117
|
+
"consequat",
|
|
118
|
+
"duis",
|
|
119
|
+
"aute",
|
|
120
|
+
"irure",
|
|
121
|
+
"in",
|
|
122
|
+
"reprehenderit",
|
|
123
|
+
"voluptate",
|
|
124
|
+
"velit",
|
|
125
|
+
"esse",
|
|
126
|
+
"cillum",
|
|
127
|
+
"fugiat",
|
|
128
|
+
"nulla",
|
|
129
|
+
"pariatur",
|
|
130
|
+
"excepteur",
|
|
131
|
+
"sint",
|
|
132
|
+
"occaecat",
|
|
133
|
+
"cupidatat"
|
|
134
|
+
];
|
|
135
|
+
function getWord(index) {
|
|
136
|
+
return LOREM_WORDS[index % LOREM_WORDS.length];
|
|
137
|
+
}
|
|
138
|
+
function generateSentence(wordOffset) {
|
|
139
|
+
const wordCount = 8 + wordOffset % 8;
|
|
140
|
+
const words = [];
|
|
141
|
+
for (let i = 0; i < wordCount; i++) {
|
|
142
|
+
words.push(getWord(wordOffset + i));
|
|
143
|
+
}
|
|
144
|
+
words[0] = words[0].charAt(0).toUpperCase() + words[0].slice(1);
|
|
145
|
+
return {
|
|
146
|
+
sentence: words.join(" ") + ".",
|
|
147
|
+
nextOffset: wordOffset + wordCount
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function generateLorem(count, unit = "words") {
|
|
151
|
+
if (count <= 0) {
|
|
152
|
+
return "";
|
|
153
|
+
}
|
|
154
|
+
if (unit === "words") {
|
|
155
|
+
const words = [];
|
|
156
|
+
for (let i = 0; i < count; i++) {
|
|
157
|
+
words.push(getWord(i));
|
|
158
|
+
}
|
|
159
|
+
return words.join(" ");
|
|
160
|
+
}
|
|
161
|
+
if (unit === "sentences") {
|
|
162
|
+
const sentences = [];
|
|
163
|
+
let offset2 = 0;
|
|
164
|
+
for (let i = 0; i < count; i++) {
|
|
165
|
+
const { sentence, nextOffset } = generateSentence(offset2);
|
|
166
|
+
sentences.push(sentence);
|
|
167
|
+
offset2 = nextOffset;
|
|
168
|
+
}
|
|
169
|
+
return sentences.join(" ");
|
|
170
|
+
}
|
|
171
|
+
const paragraphs = [];
|
|
172
|
+
let offset = 0;
|
|
173
|
+
for (let i = 0; i < count; i++) {
|
|
174
|
+
const sentenceCount = 3 + i % 4;
|
|
175
|
+
const sentences = [];
|
|
176
|
+
for (let j = 0; j < sentenceCount; j++) {
|
|
177
|
+
const { sentence, nextOffset } = generateSentence(offset);
|
|
178
|
+
sentences.push(sentence);
|
|
179
|
+
offset = nextOffset;
|
|
180
|
+
}
|
|
181
|
+
paragraphs.push(sentences.join(" "));
|
|
182
|
+
}
|
|
183
|
+
return paragraphs.join("\n\n");
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// src/text/similarity.ts
|
|
187
|
+
function similarity(a, b) {
|
|
188
|
+
if (a === b) {
|
|
189
|
+
return { distance: 0, similarity: 1 };
|
|
190
|
+
}
|
|
191
|
+
if (a.length === 0) {
|
|
192
|
+
return { distance: b.length, similarity: 0 };
|
|
193
|
+
}
|
|
194
|
+
if (b.length === 0) {
|
|
195
|
+
return { distance: a.length, similarity: 0 };
|
|
196
|
+
}
|
|
197
|
+
const m = a.length;
|
|
198
|
+
const n = b.length;
|
|
199
|
+
const dp = [];
|
|
200
|
+
for (let i = 0; i <= m; i++) {
|
|
201
|
+
dp[i] = new Array(n + 1);
|
|
202
|
+
dp[i][0] = i;
|
|
203
|
+
}
|
|
204
|
+
for (let j = 0; j <= n; j++) {
|
|
205
|
+
dp[0][j] = j;
|
|
206
|
+
}
|
|
207
|
+
for (let i = 1; i <= m; i++) {
|
|
208
|
+
for (let j = 1; j <= n; j++) {
|
|
209
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
210
|
+
dp[i][j] = Math.min(
|
|
211
|
+
dp[i - 1][j] + 1,
|
|
212
|
+
// deletion
|
|
213
|
+
dp[i][j - 1] + 1,
|
|
214
|
+
// insertion
|
|
215
|
+
dp[i - 1][j - 1] + cost
|
|
216
|
+
// substitution
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
const distance = dp[m][n];
|
|
221
|
+
const maxLength = Math.max(m, n);
|
|
222
|
+
const sim = 1 - distance / maxLength;
|
|
223
|
+
return { distance, similarity: sim };
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// src/text/template.ts
|
|
227
|
+
function interpolate(template, variables) {
|
|
228
|
+
const missingKeys = [];
|
|
229
|
+
const result = template.replace(/\{\{\s*(\w+)\s*\}\}/g, (match, key) => {
|
|
230
|
+
if (key in variables) {
|
|
231
|
+
return variables[key];
|
|
232
|
+
}
|
|
233
|
+
missingKeys.push(key);
|
|
234
|
+
return match;
|
|
235
|
+
});
|
|
236
|
+
const uniqueMissingKeys = [...new Set(missingKeys)];
|
|
237
|
+
return { result, missingKeys: uniqueMissingKeys };
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
export { convertCase, generateLorem, getTextStats, interpolate, similarity, slugify, truncate };
|
|
241
|
+
//# sourceMappingURL=index.mjs.map
|
|
242
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/text/case.ts","../../src/text/slug.ts","../../src/text/stats.ts","../../src/text/truncate.ts","../../src/text/lorem.ts","../../src/text/similarity.ts","../../src/text/template.ts"],"names":["offset"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { CaseType } from './types';\n\nfunction splitWords(input: string): string[] {\n // Split by camelCase boundaries, spaces, hyphens, underscores\n return input\n // Insert separator before uppercase letters that follow lowercase letters (camelCase boundary)\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n // Insert separator before uppercase letters followed by lowercase (e.g. \"HTMLParser\" -> \"HTML Parser\")\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n // Replace hyphens and underscores with spaces\n .replace(/[-_]/g, ' ')\n // Split on whitespace\n .split(/\\s+/)\n // Filter out empty strings\n .filter((word) => word.length > 0);\n}\n\nfunction capitalize(word: string): string {\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n}\n\nexport function convertCase(input: string, to: CaseType): string {\n const words = splitWords(input);\n\n if (words.length === 0) {\n return '';\n }\n\n switch (to) {\n case 'camel':\n return words\n .map((word, index) => (index === 0 ? word.toLowerCase() : capitalize(word)))\n .join('');\n\n case 'pascal':\n return words.map((word) => capitalize(word)).join('');\n\n case 'snake':\n return words.map((word) => word.toLowerCase()).join('_');\n\n case 'kebab':\n return words.map((word) => word.toLowerCase()).join('-');\n\n case 'constant':\n return words.map((word) => word.toUpperCase()).join('_');\n\n case 'title':\n return words.map((word) => capitalize(word)).join(' ');\n\n case 'sentence':\n return words\n .map((word, index) => (index === 0 ? capitalize(word) : word.toLowerCase()))\n .join(' ');\n\n case 'upper':\n return words.map((word) => word.toUpperCase()).join(' ');\n\n case 'lower':\n return words.map((word) => word.toLowerCase()).join(' ');\n }\n}\n","export function slugify(input: string, separator: string = '-'): string {\n return input\n // Convert to lowercase\n .toLowerCase()\n // Replace non-alphanumeric chars with separator\n .replace(/[^a-z0-9]+/g, separator)\n // Collapse multiple separators\n .replace(new RegExp(`${escapeRegExp(separator)}+`, 'g'), separator)\n // Trim separators from ends\n .replace(new RegExp(`^${escapeRegExp(separator)}|${escapeRegExp(separator)}$`, 'g'), '');\n}\n\nfunction escapeRegExp(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import type { TextStats } from './types';\n\nexport function getTextStats(input: string): TextStats {\n const characters = input.length;\n\n const words = input\n .split(/\\s+/)\n .filter((word) => word.length > 0);\n\n const sentences = input\n .split(/[.!?](?:\\s|$)/)\n .filter((sentence) => sentence.trim().length > 0);\n\n const paragraphs = input\n .split(/\\n\\n+/)\n .filter((paragraph) => paragraph.trim().length > 0);\n\n const lines = input.split(/\\n/);\n\n // 200 words per minute average reading speed\n const readingTimeMs = (words.length / 200) * 60 * 1000;\n\n return {\n characters,\n words: words.length,\n sentences: sentences.length,\n paragraphs: paragraphs.length,\n lines: lines.length,\n readingTimeMs,\n };\n}\n","import type { TruncateOptions } from './types';\n\nexport function truncate(input: string, options: TruncateOptions): string {\n const { length, boundary = 'word', suffix = '...' } = options;\n\n if (input.length <= length) {\n return input;\n }\n\n const maxContentLength = length - suffix.length;\n\n if (maxContentLength <= 0) {\n return suffix.slice(0, length);\n }\n\n if (boundary === 'character') {\n return input.slice(0, maxContentLength) + suffix;\n }\n\n // Word boundary: find last space before maxContentLength\n const truncated = input.slice(0, maxContentLength);\n const lastSpaceIndex = truncated.lastIndexOf(' ');\n\n if (lastSpaceIndex === -1) {\n // No space found, fall back to character boundary\n return truncated + suffix;\n }\n\n return input.slice(0, lastSpaceIndex) + suffix;\n}\n","const LOREM_WORDS = [\n 'lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit',\n 'sed', 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore',\n 'magna', 'aliqua', 'enim', 'ad', 'minim', 'veniam', 'quis', 'nostrud',\n 'exercitation', 'ullamco', 'laboris', 'nisi', 'aliquip', 'ex', 'ea', 'commodo',\n 'consequat', 'duis', 'aute', 'irure', 'in', 'reprehenderit', 'voluptate',\n 'velit', 'esse', 'cillum', 'fugiat', 'nulla', 'pariatur', 'excepteur', 'sint',\n 'occaecat', 'cupidatat',\n];\n\nfunction getWord(index: number): string {\n return LOREM_WORDS[index % LOREM_WORDS.length];\n}\n\nfunction generateSentence(wordOffset: number): { sentence: string; nextOffset: number } {\n // Generate a sentence with 8-15 words\n const wordCount = 8 + (wordOffset % 8); // Deterministic 8-15 range\n const words: string[] = [];\n\n for (let i = 0; i < wordCount; i++) {\n words.push(getWord(wordOffset + i));\n }\n\n // Capitalize first word\n words[0] = words[0].charAt(0).toUpperCase() + words[0].slice(1);\n\n return {\n sentence: words.join(' ') + '.',\n nextOffset: wordOffset + wordCount,\n };\n}\n\nexport function generateLorem(\n count: number,\n unit: 'words' | 'sentences' | 'paragraphs' = 'words',\n): string {\n if (count <= 0) {\n return '';\n }\n\n if (unit === 'words') {\n const words: string[] = [];\n for (let i = 0; i < count; i++) {\n words.push(getWord(i));\n }\n return words.join(' ');\n }\n\n if (unit === 'sentences') {\n const sentences: string[] = [];\n let offset = 0;\n for (let i = 0; i < count; i++) {\n const { sentence, nextOffset } = generateSentence(offset);\n sentences.push(sentence);\n offset = nextOffset;\n }\n return sentences.join(' ');\n }\n\n // paragraphs\n const paragraphs: string[] = [];\n let offset = 0;\n\n for (let i = 0; i < count; i++) {\n const sentenceCount = 3 + (i % 4); // Deterministic 3-6 range\n const sentences: string[] = [];\n\n for (let j = 0; j < sentenceCount; j++) {\n const { sentence, nextOffset } = generateSentence(offset);\n sentences.push(sentence);\n offset = nextOffset;\n }\n\n paragraphs.push(sentences.join(' '));\n }\n\n return paragraphs.join('\\n\\n');\n}\n","import type { SimilarityResult } from './types';\n\nexport function similarity(a: string, b: string): SimilarityResult {\n // Handle edge cases\n if (a === b) {\n return { distance: 0, similarity: 1.0 };\n }\n\n if (a.length === 0) {\n return { distance: b.length, similarity: 0 };\n }\n\n if (b.length === 0) {\n return { distance: a.length, similarity: 0 };\n }\n\n // Wagner-Fischer algorithm for Levenshtein distance\n const m = a.length;\n const n = b.length;\n\n // Create a 2D matrix (m+1) x (n+1)\n const dp: number[][] = [];\n\n for (let i = 0; i <= m; i++) {\n dp[i] = new Array(n + 1);\n dp[i][0] = i;\n }\n\n for (let j = 0; j <= n; j++) {\n dp[0][j] = j;\n }\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n dp[i][j] = Math.min(\n dp[i - 1][j] + 1, // deletion\n dp[i][j - 1] + 1, // insertion\n dp[i - 1][j - 1] + cost, // substitution\n );\n }\n }\n\n const distance = dp[m][n];\n const maxLength = Math.max(m, n);\n const sim = 1 - distance / maxLength;\n\n return { distance, similarity: sim };\n}\n","import type { TemplateResult } from './types';\n\nexport function interpolate(\n template: string,\n variables: Record<string, string>,\n): TemplateResult {\n const missingKeys: string[] = [];\n\n const result = template.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (match, key: string) => {\n if (key in variables) {\n return variables[key];\n }\n missingKeys.push(key);\n return match;\n });\n\n // Deduplicate missing keys while preserving order\n const uniqueMissingKeys = [...new Set(missingKeys)];\n\n return { result, missingKeys: uniqueMissingKeys };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { X as XmlConvertFormat, a as XmlFormatOptions, b as XmlParseOptions, c as XmlQueryResult, d as XmlStats, e as XmlValidationError, f as XmlValidationResult, g as convert, h as format, j as getStats, m as minify, p as parse, q as query, v as validate } from '../index-7FZQloN-.mjs';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { X as XmlConvertFormat, a as XmlFormatOptions, b as XmlParseOptions, c as XmlQueryResult, d as XmlStats, e as XmlValidationError, f as XmlValidationResult, g as convert, h as format, j as getStats, m as minify, p as parse, q as query, v as validate } from '../index-7FZQloN-.js';
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fastXmlParser = require('fast-xml-parser');
|
|
4
|
+
|
|
5
|
+
// src/xml/parse.ts
|
|
6
|
+
function parse(input, options = {}) {
|
|
7
|
+
const parser = new fastXmlParser.XMLParser({
|
|
8
|
+
preserveOrder: options.preserveOrder ?? false,
|
|
9
|
+
ignoreAttributes: options.ignoreAttributes ?? false,
|
|
10
|
+
trimValues: options.trimValues ?? true,
|
|
11
|
+
parseAttributeValue: true,
|
|
12
|
+
parseTagValue: true
|
|
13
|
+
});
|
|
14
|
+
return parser.parse(input);
|
|
15
|
+
}
|
|
16
|
+
function format(input, options = {}) {
|
|
17
|
+
const indent = options.indent ?? 2;
|
|
18
|
+
const parser = new fastXmlParser.XMLParser({
|
|
19
|
+
preserveOrder: true,
|
|
20
|
+
ignoreAttributes: false,
|
|
21
|
+
trimValues: true,
|
|
22
|
+
parseAttributeValue: true,
|
|
23
|
+
parseTagValue: true
|
|
24
|
+
});
|
|
25
|
+
const parsed = parser.parse(input);
|
|
26
|
+
const builder = new fastXmlParser.XMLBuilder({
|
|
27
|
+
preserveOrder: true,
|
|
28
|
+
ignoreAttributes: false,
|
|
29
|
+
format: true,
|
|
30
|
+
indentBy: " ".repeat(indent),
|
|
31
|
+
suppressEmptyNode: false
|
|
32
|
+
});
|
|
33
|
+
return builder.build(parsed);
|
|
34
|
+
}
|
|
35
|
+
function minify(input) {
|
|
36
|
+
const parser = new fastXmlParser.XMLParser({
|
|
37
|
+
preserveOrder: true,
|
|
38
|
+
ignoreAttributes: false,
|
|
39
|
+
trimValues: true,
|
|
40
|
+
parseAttributeValue: true,
|
|
41
|
+
parseTagValue: true
|
|
42
|
+
});
|
|
43
|
+
const parsed = parser.parse(input);
|
|
44
|
+
const builder = new fastXmlParser.XMLBuilder({
|
|
45
|
+
preserveOrder: true,
|
|
46
|
+
ignoreAttributes: false,
|
|
47
|
+
format: false,
|
|
48
|
+
suppressEmptyNode: false
|
|
49
|
+
});
|
|
50
|
+
return builder.build(parsed);
|
|
51
|
+
}
|
|
52
|
+
function validate(input) {
|
|
53
|
+
const result = fastXmlParser.XMLValidator.validate(input, {
|
|
54
|
+
allowBooleanAttributes: true
|
|
55
|
+
});
|
|
56
|
+
if (result === true) {
|
|
57
|
+
return { valid: true, errors: [] };
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
valid: false,
|
|
61
|
+
errors: [
|
|
62
|
+
{
|
|
63
|
+
line: result.err.line,
|
|
64
|
+
message: result.err.msg
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function query(input, path) {
|
|
70
|
+
const parser = new fastXmlParser.XMLParser({
|
|
71
|
+
ignoreAttributes: false,
|
|
72
|
+
trimValues: true,
|
|
73
|
+
parseAttributeValue: true,
|
|
74
|
+
parseTagValue: true
|
|
75
|
+
});
|
|
76
|
+
const parsed = parser.parse(input);
|
|
77
|
+
const segments = path.replace(/^\/+/, "").split("/");
|
|
78
|
+
const matches = resolvePath(parsed, segments);
|
|
79
|
+
return {
|
|
80
|
+
matches,
|
|
81
|
+
count: matches.length
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function resolvePath(obj, segments) {
|
|
85
|
+
if (segments.length === 0) {
|
|
86
|
+
return obj !== void 0 ? [obj] : [];
|
|
87
|
+
}
|
|
88
|
+
if (obj === null || obj === void 0 || typeof obj !== "object") {
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
const [current, ...rest] = segments;
|
|
92
|
+
if (current === "*") {
|
|
93
|
+
const results = [];
|
|
94
|
+
for (const value of Object.values(obj)) {
|
|
95
|
+
results.push(...resolvePath(value, rest));
|
|
96
|
+
}
|
|
97
|
+
return results;
|
|
98
|
+
}
|
|
99
|
+
const record = obj;
|
|
100
|
+
if (current in record) {
|
|
101
|
+
const value = record[current];
|
|
102
|
+
if (Array.isArray(value)) {
|
|
103
|
+
if (rest.length === 0) return value;
|
|
104
|
+
const results = [];
|
|
105
|
+
for (const item of value) {
|
|
106
|
+
results.push(...resolvePath(item, rest));
|
|
107
|
+
}
|
|
108
|
+
return results;
|
|
109
|
+
}
|
|
110
|
+
return resolvePath(value, rest);
|
|
111
|
+
}
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
function convert(input, from, to) {
|
|
115
|
+
if (from === to) return input;
|
|
116
|
+
if (from === "xml" && to === "json") {
|
|
117
|
+
const parser = new fastXmlParser.XMLParser({
|
|
118
|
+
ignoreAttributes: false,
|
|
119
|
+
trimValues: true,
|
|
120
|
+
parseAttributeValue: true,
|
|
121
|
+
parseTagValue: true
|
|
122
|
+
});
|
|
123
|
+
return JSON.stringify(parser.parse(input), null, 2);
|
|
124
|
+
}
|
|
125
|
+
if (from === "json" && to === "xml") {
|
|
126
|
+
const data = JSON.parse(input);
|
|
127
|
+
const builder = new fastXmlParser.XMLBuilder({
|
|
128
|
+
ignoreAttributes: false,
|
|
129
|
+
format: true,
|
|
130
|
+
indentBy: " ",
|
|
131
|
+
suppressEmptyNode: false
|
|
132
|
+
});
|
|
133
|
+
return builder.build(data);
|
|
134
|
+
}
|
|
135
|
+
throw new Error(`Unsupported conversion: ${from} -> ${to}`);
|
|
136
|
+
}
|
|
137
|
+
function getStats(input) {
|
|
138
|
+
const parser = new fastXmlParser.XMLParser({
|
|
139
|
+
ignoreAttributes: false,
|
|
140
|
+
trimValues: true,
|
|
141
|
+
parseAttributeValue: true,
|
|
142
|
+
parseTagValue: true
|
|
143
|
+
});
|
|
144
|
+
const parsed = parser.parse(input);
|
|
145
|
+
const stats = {
|
|
146
|
+
elements: 0,
|
|
147
|
+
attributes: 0,
|
|
148
|
+
textNodes: 0,
|
|
149
|
+
depth: 0,
|
|
150
|
+
sizeBytes: Buffer.byteLength(input, "utf8")
|
|
151
|
+
};
|
|
152
|
+
countNodes(parsed, 0, stats);
|
|
153
|
+
return stats;
|
|
154
|
+
}
|
|
155
|
+
function countNodes(obj, depth, stats) {
|
|
156
|
+
if (obj === null || obj === void 0) return;
|
|
157
|
+
if (typeof obj !== "object") {
|
|
158
|
+
stats.textNodes++;
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (Array.isArray(obj)) {
|
|
162
|
+
for (const item of obj) {
|
|
163
|
+
countNodes(item, depth, stats);
|
|
164
|
+
}
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
168
|
+
if (key.startsWith("@_")) {
|
|
169
|
+
stats.attributes++;
|
|
170
|
+
} else if (key === "#text") {
|
|
171
|
+
stats.textNodes++;
|
|
172
|
+
} else {
|
|
173
|
+
stats.elements++;
|
|
174
|
+
stats.depth = Math.max(stats.depth, depth + 1);
|
|
175
|
+
countNodes(value, depth + 1, stats);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
exports.convert = convert;
|
|
181
|
+
exports.format = format;
|
|
182
|
+
exports.getStats = getStats;
|
|
183
|
+
exports.minify = minify;
|
|
184
|
+
exports.parse = parse;
|
|
185
|
+
exports.query = query;
|
|
186
|
+
exports.validate = validate;
|
|
187
|
+
//# sourceMappingURL=index.js.map
|
|
188
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/xml/parse.ts","../../src/xml/format.ts","../../src/xml/validate.ts","../../src/xml/query.ts","../../src/xml/convert.ts","../../src/xml/stats.ts"],"names":["XMLParser","XMLBuilder","XMLValidator"],"mappings":"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","file":"index.js","sourcesContent":["import { XMLParser } from 'fast-xml-parser';\nimport type { XmlParseOptions } from './types';\n\nexport function parse(\n input: string,\n options: XmlParseOptions = {}\n): Record<string, unknown> {\n const parser = new XMLParser({\n preserveOrder: options.preserveOrder ?? false,\n ignoreAttributes: options.ignoreAttributes ?? false,\n trimValues: options.trimValues ?? true,\n parseAttributeValue: true,\n parseTagValue: true,\n });\n\n return parser.parse(input) as Record<string, unknown>;\n}\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\nimport type { XmlFormatOptions } from './types';\n\nexport function format(input: string, options: XmlFormatOptions = {}): string {\n const indent = options.indent ?? 2;\n\n const parser = new XMLParser({\n preserveOrder: true,\n ignoreAttributes: false,\n trimValues: true,\n parseAttributeValue: true,\n parseTagValue: true,\n });\n\n const parsed = parser.parse(input);\n\n const builder = new XMLBuilder({\n preserveOrder: true,\n ignoreAttributes: false,\n format: true,\n indentBy: ' '.repeat(indent),\n suppressEmptyNode: false,\n });\n\n return builder.build(parsed) as string;\n}\n\nexport function minify(input: string): string {\n const parser = new XMLParser({\n preserveOrder: true,\n ignoreAttributes: false,\n trimValues: true,\n parseAttributeValue: true,\n parseTagValue: true,\n });\n\n const parsed = parser.parse(input);\n\n const builder = new XMLBuilder({\n preserveOrder: true,\n ignoreAttributes: false,\n format: false,\n suppressEmptyNode: false,\n });\n\n return builder.build(parsed) as string;\n}\n","import { XMLValidator } from 'fast-xml-parser';\nimport type { XmlValidationResult } from './types';\n\nexport function validate(input: string): XmlValidationResult {\n const result = XMLValidator.validate(input, {\n allowBooleanAttributes: true,\n });\n\n if (result === true) {\n return { valid: true, errors: [] };\n }\n\n return {\n valid: false,\n errors: [\n {\n line: (result as { err: { line: number; msg: string } }).err.line,\n message: (result as { err: { line: number; msg: string } }).err.msg,\n },\n ],\n };\n}\n","import { XMLParser } from 'fast-xml-parser';\nimport type { XmlQueryResult } from './types';\n\nexport function query(input: string, path: string): XmlQueryResult {\n const parser = new XMLParser({\n ignoreAttributes: false,\n trimValues: true,\n parseAttributeValue: true,\n parseTagValue: true,\n });\n\n const parsed = parser.parse(input);\n const segments = path.replace(/^\\/+/, '').split('/');\n const matches = resolvePath(parsed, segments);\n\n return {\n matches,\n count: matches.length,\n };\n}\n\nfunction resolvePath(obj: unknown, segments: string[]): unknown[] {\n if (segments.length === 0) {\n return obj !== undefined ? [obj] : [];\n }\n\n if (obj === null || obj === undefined || typeof obj !== 'object') {\n return [];\n }\n\n const [current, ...rest] = segments;\n\n if (current === '*') {\n const results: unknown[] = [];\n for (const value of Object.values(obj as Record<string, unknown>)) {\n results.push(...resolvePath(value, rest));\n }\n return results;\n }\n\n const record = obj as Record<string, unknown>;\n if (current in record) {\n const value = record[current];\n if (Array.isArray(value)) {\n if (rest.length === 0) return value;\n const results: unknown[] = [];\n for (const item of value) {\n results.push(...resolvePath(item, rest));\n }\n return results;\n }\n return resolvePath(value, rest);\n }\n\n return [];\n}\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\nimport type { XmlConvertFormat } from './types';\n\nexport function convert(\n input: string,\n from: XmlConvertFormat,\n to: XmlConvertFormat\n): string {\n if (from === to) return input;\n\n if (from === 'xml' && to === 'json') {\n const parser = new XMLParser({\n ignoreAttributes: false,\n trimValues: true,\n parseAttributeValue: true,\n parseTagValue: true,\n });\n return JSON.stringify(parser.parse(input), null, 2);\n }\n\n if (from === 'json' && to === 'xml') {\n const data = JSON.parse(input);\n const builder = new XMLBuilder({\n ignoreAttributes: false,\n format: true,\n indentBy: ' ',\n suppressEmptyNode: false,\n });\n return builder.build(data) as string;\n }\n\n throw new Error(`Unsupported conversion: ${from} -> ${to}`);\n}\n","import { XMLParser } from 'fast-xml-parser';\nimport type { XmlStats } from './types';\n\nexport function getStats(input: string): XmlStats {\n const parser = new XMLParser({\n ignoreAttributes: false,\n trimValues: true,\n parseAttributeValue: true,\n parseTagValue: true,\n });\n\n const parsed = parser.parse(input);\n const stats: XmlStats = {\n elements: 0,\n attributes: 0,\n textNodes: 0,\n depth: 0,\n sizeBytes: Buffer.byteLength(input, 'utf8'),\n };\n\n countNodes(parsed, 0, stats);\n return stats;\n}\n\nfunction countNodes(\n obj: unknown,\n depth: number,\n stats: XmlStats\n): void {\n if (obj === null || obj === undefined) return;\n\n if (typeof obj !== 'object') {\n stats.textNodes++;\n return;\n }\n\n if (Array.isArray(obj)) {\n for (const item of obj) {\n countNodes(item, depth, stats);\n }\n return;\n }\n\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n if (key.startsWith('@_')) {\n stats.attributes++;\n } else if (key === '#text') {\n stats.textNodes++;\n } else {\n stats.elements++;\n stats.depth = Math.max(stats.depth, depth + 1);\n countNodes(value, depth + 1, stats);\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { XMLParser, XMLBuilder, XMLValidator } from 'fast-xml-parser';
|
|
2
|
+
|
|
3
|
+
// src/xml/parse.ts
|
|
4
|
+
function parse(input, options = {}) {
|
|
5
|
+
const parser = new XMLParser({
|
|
6
|
+
preserveOrder: options.preserveOrder ?? false,
|
|
7
|
+
ignoreAttributes: options.ignoreAttributes ?? false,
|
|
8
|
+
trimValues: options.trimValues ?? true,
|
|
9
|
+
parseAttributeValue: true,
|
|
10
|
+
parseTagValue: true
|
|
11
|
+
});
|
|
12
|
+
return parser.parse(input);
|
|
13
|
+
}
|
|
14
|
+
function format(input, options = {}) {
|
|
15
|
+
const indent = options.indent ?? 2;
|
|
16
|
+
const parser = new XMLParser({
|
|
17
|
+
preserveOrder: true,
|
|
18
|
+
ignoreAttributes: false,
|
|
19
|
+
trimValues: true,
|
|
20
|
+
parseAttributeValue: true,
|
|
21
|
+
parseTagValue: true
|
|
22
|
+
});
|
|
23
|
+
const parsed = parser.parse(input);
|
|
24
|
+
const builder = new XMLBuilder({
|
|
25
|
+
preserveOrder: true,
|
|
26
|
+
ignoreAttributes: false,
|
|
27
|
+
format: true,
|
|
28
|
+
indentBy: " ".repeat(indent),
|
|
29
|
+
suppressEmptyNode: false
|
|
30
|
+
});
|
|
31
|
+
return builder.build(parsed);
|
|
32
|
+
}
|
|
33
|
+
function minify(input) {
|
|
34
|
+
const parser = new XMLParser({
|
|
35
|
+
preserveOrder: true,
|
|
36
|
+
ignoreAttributes: false,
|
|
37
|
+
trimValues: true,
|
|
38
|
+
parseAttributeValue: true,
|
|
39
|
+
parseTagValue: true
|
|
40
|
+
});
|
|
41
|
+
const parsed = parser.parse(input);
|
|
42
|
+
const builder = new XMLBuilder({
|
|
43
|
+
preserveOrder: true,
|
|
44
|
+
ignoreAttributes: false,
|
|
45
|
+
format: false,
|
|
46
|
+
suppressEmptyNode: false
|
|
47
|
+
});
|
|
48
|
+
return builder.build(parsed);
|
|
49
|
+
}
|
|
50
|
+
function validate(input) {
|
|
51
|
+
const result = XMLValidator.validate(input, {
|
|
52
|
+
allowBooleanAttributes: true
|
|
53
|
+
});
|
|
54
|
+
if (result === true) {
|
|
55
|
+
return { valid: true, errors: [] };
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
valid: false,
|
|
59
|
+
errors: [
|
|
60
|
+
{
|
|
61
|
+
line: result.err.line,
|
|
62
|
+
message: result.err.msg
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function query(input, path) {
|
|
68
|
+
const parser = new XMLParser({
|
|
69
|
+
ignoreAttributes: false,
|
|
70
|
+
trimValues: true,
|
|
71
|
+
parseAttributeValue: true,
|
|
72
|
+
parseTagValue: true
|
|
73
|
+
});
|
|
74
|
+
const parsed = parser.parse(input);
|
|
75
|
+
const segments = path.replace(/^\/+/, "").split("/");
|
|
76
|
+
const matches = resolvePath(parsed, segments);
|
|
77
|
+
return {
|
|
78
|
+
matches,
|
|
79
|
+
count: matches.length
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function resolvePath(obj, segments) {
|
|
83
|
+
if (segments.length === 0) {
|
|
84
|
+
return obj !== void 0 ? [obj] : [];
|
|
85
|
+
}
|
|
86
|
+
if (obj === null || obj === void 0 || typeof obj !== "object") {
|
|
87
|
+
return [];
|
|
88
|
+
}
|
|
89
|
+
const [current, ...rest] = segments;
|
|
90
|
+
if (current === "*") {
|
|
91
|
+
const results = [];
|
|
92
|
+
for (const value of Object.values(obj)) {
|
|
93
|
+
results.push(...resolvePath(value, rest));
|
|
94
|
+
}
|
|
95
|
+
return results;
|
|
96
|
+
}
|
|
97
|
+
const record = obj;
|
|
98
|
+
if (current in record) {
|
|
99
|
+
const value = record[current];
|
|
100
|
+
if (Array.isArray(value)) {
|
|
101
|
+
if (rest.length === 0) return value;
|
|
102
|
+
const results = [];
|
|
103
|
+
for (const item of value) {
|
|
104
|
+
results.push(...resolvePath(item, rest));
|
|
105
|
+
}
|
|
106
|
+
return results;
|
|
107
|
+
}
|
|
108
|
+
return resolvePath(value, rest);
|
|
109
|
+
}
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
function convert(input, from, to) {
|
|
113
|
+
if (from === to) return input;
|
|
114
|
+
if (from === "xml" && to === "json") {
|
|
115
|
+
const parser = new XMLParser({
|
|
116
|
+
ignoreAttributes: false,
|
|
117
|
+
trimValues: true,
|
|
118
|
+
parseAttributeValue: true,
|
|
119
|
+
parseTagValue: true
|
|
120
|
+
});
|
|
121
|
+
return JSON.stringify(parser.parse(input), null, 2);
|
|
122
|
+
}
|
|
123
|
+
if (from === "json" && to === "xml") {
|
|
124
|
+
const data = JSON.parse(input);
|
|
125
|
+
const builder = new XMLBuilder({
|
|
126
|
+
ignoreAttributes: false,
|
|
127
|
+
format: true,
|
|
128
|
+
indentBy: " ",
|
|
129
|
+
suppressEmptyNode: false
|
|
130
|
+
});
|
|
131
|
+
return builder.build(data);
|
|
132
|
+
}
|
|
133
|
+
throw new Error(`Unsupported conversion: ${from} -> ${to}`);
|
|
134
|
+
}
|
|
135
|
+
function getStats(input) {
|
|
136
|
+
const parser = new XMLParser({
|
|
137
|
+
ignoreAttributes: false,
|
|
138
|
+
trimValues: true,
|
|
139
|
+
parseAttributeValue: true,
|
|
140
|
+
parseTagValue: true
|
|
141
|
+
});
|
|
142
|
+
const parsed = parser.parse(input);
|
|
143
|
+
const stats = {
|
|
144
|
+
elements: 0,
|
|
145
|
+
attributes: 0,
|
|
146
|
+
textNodes: 0,
|
|
147
|
+
depth: 0,
|
|
148
|
+
sizeBytes: Buffer.byteLength(input, "utf8")
|
|
149
|
+
};
|
|
150
|
+
countNodes(parsed, 0, stats);
|
|
151
|
+
return stats;
|
|
152
|
+
}
|
|
153
|
+
function countNodes(obj, depth, stats) {
|
|
154
|
+
if (obj === null || obj === void 0) return;
|
|
155
|
+
if (typeof obj !== "object") {
|
|
156
|
+
stats.textNodes++;
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (Array.isArray(obj)) {
|
|
160
|
+
for (const item of obj) {
|
|
161
|
+
countNodes(item, depth, stats);
|
|
162
|
+
}
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
166
|
+
if (key.startsWith("@_")) {
|
|
167
|
+
stats.attributes++;
|
|
168
|
+
} else if (key === "#text") {
|
|
169
|
+
stats.textNodes++;
|
|
170
|
+
} else {
|
|
171
|
+
stats.elements++;
|
|
172
|
+
stats.depth = Math.max(stats.depth, depth + 1);
|
|
173
|
+
countNodes(value, depth + 1, stats);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export { convert, format, getStats, minify, parse, query, validate };
|
|
179
|
+
//# sourceMappingURL=index.mjs.map
|
|
180
|
+
//# sourceMappingURL=index.mjs.map
|