@nf2t/nifitools-js 0.0.0 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.cjs +341 -0
- package/dist/main.cjs.map +1 -0
- package/dist/main.d.cts +958 -0
- package/dist/main.d.ts +958 -0
- package/dist/main.js +292 -0
- package/dist/main.js.map +1 -0
- package/package.json +8 -2
package/dist/main.cjs
ADDED
@@ -0,0 +1,341 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __create = Object.create;
|
3
|
+
var __defProp = Object.defineProperty;
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
8
|
+
var __export = (target, all) => {
|
9
|
+
for (var name in all)
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
11
|
+
};
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
14
|
+
for (let key of __getOwnPropNames(from))
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
17
|
+
}
|
18
|
+
return to;
|
19
|
+
};
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
26
|
+
mod
|
27
|
+
));
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
29
|
+
|
30
|
+
// src/main.ts
|
31
|
+
var main_exports = {};
|
32
|
+
__export(main_exports, {
|
33
|
+
ManifestSchema: () => ManifestSchema,
|
34
|
+
NarAttributeSchema: () => NarAttributeSchema,
|
35
|
+
NarAttributeTypeSchema: () => NarAttributeTypeSchema,
|
36
|
+
NarAttributesSchema: () => NarAttributesSchema,
|
37
|
+
NarExportSchema: () => NarExportSchema,
|
38
|
+
NarExtensionProperty: () => NarExtensionProperty,
|
39
|
+
NarExtensionRelationship: () => NarExtensionRelationship,
|
40
|
+
NarExtensionSchema: () => NarExtensionSchema,
|
41
|
+
NarExtensionsSchema: () => NarExtensionsSchema,
|
42
|
+
NarSchema: () => NarSchema,
|
43
|
+
NarsSchema: () => NarsSchema,
|
44
|
+
WriteNarsSchema: () => WriteNarsSchema,
|
45
|
+
readNars: () => readNars
|
46
|
+
});
|
47
|
+
module.exports = __toCommonJS(main_exports);
|
48
|
+
|
49
|
+
// src/readNars.ts
|
50
|
+
var import_jszip = __toESM(require("jszip"), 1);
|
51
|
+
var import_zod = require("zod");
|
52
|
+
var NarAttributeTypeSchema = import_zod.z.enum(["writes", "reads"]);
|
53
|
+
var NarAttributeSchema = import_zod.z.object({
|
54
|
+
narId: import_zod.z.string(),
|
55
|
+
extensionId: import_zod.z.string(),
|
56
|
+
type: NarAttributeTypeSchema,
|
57
|
+
id: import_zod.z.string(),
|
58
|
+
name: import_zod.z.string(),
|
59
|
+
description: import_zod.z.string()
|
60
|
+
});
|
61
|
+
var NarAttributesSchema = import_zod.z.array(NarAttributeSchema);
|
62
|
+
var NarExtensionRelationship = import_zod.z.object({
|
63
|
+
name: import_zod.z.string(),
|
64
|
+
description: import_zod.z.string().optional(),
|
65
|
+
autoTerminated: import_zod.z.boolean()
|
66
|
+
});
|
67
|
+
var NarExtensionProperty = import_zod.z.object({
|
68
|
+
name: import_zod.z.string(),
|
69
|
+
displayName: import_zod.z.string(),
|
70
|
+
description: import_zod.z.string().optional(),
|
71
|
+
required: import_zod.z.boolean().optional(),
|
72
|
+
sensitive: import_zod.z.boolean().optional(),
|
73
|
+
expressionLanguageSupported: import_zod.z.boolean().optional(),
|
74
|
+
expressionLanguageScope: import_zod.z.string().optional(),
|
75
|
+
dynamicallyModifiesClasspath: import_zod.z.boolean().optional(),
|
76
|
+
dynamic: import_zod.z.boolean().optional()
|
77
|
+
});
|
78
|
+
var NarExtensionSchema = import_zod.z.object({
|
79
|
+
narId: import_zod.z.string(),
|
80
|
+
name: import_zod.z.string(),
|
81
|
+
type: import_zod.z.string(),
|
82
|
+
description: import_zod.z.string().optional(),
|
83
|
+
tags: import_zod.z.array(import_zod.z.string()),
|
84
|
+
relationships: import_zod.z.array(NarExtensionRelationship),
|
85
|
+
properties: import_zod.z.array(NarExtensionProperty),
|
86
|
+
// These might be properties of the Property
|
87
|
+
required: import_zod.z.boolean().optional(),
|
88
|
+
sensitive: import_zod.z.boolean().optional(),
|
89
|
+
expressionLanguageSupported: import_zod.z.boolean().optional(),
|
90
|
+
expressionLanguageScope: import_zod.z.string().optional(),
|
91
|
+
dynamicallyModifiesClasspath: import_zod.z.boolean().optional(),
|
92
|
+
dynamic: import_zod.z.boolean().optional()
|
93
|
+
});
|
94
|
+
var NarExtensionsSchema = import_zod.z.array(NarExtensionSchema);
|
95
|
+
var ManifestSchema = import_zod.z.record(import_zod.z.string(), import_zod.z.string());
|
96
|
+
var NarSchema = import_zod.z.object({
|
97
|
+
manifest: ManifestSchema,
|
98
|
+
name: import_zod.z.string(),
|
99
|
+
lastModified: import_zod.z.number(),
|
100
|
+
size: import_zod.z.number(),
|
101
|
+
systemApiVersion: import_zod.z.string().optional(),
|
102
|
+
groupId: import_zod.z.string().optional(),
|
103
|
+
artifactId: import_zod.z.string().optional(),
|
104
|
+
version: import_zod.z.string().optional(),
|
105
|
+
buildTag: import_zod.z.string().optional(),
|
106
|
+
buildTimestamp: import_zod.z.string().optional()
|
107
|
+
});
|
108
|
+
var NarsSchema = import_zod.z.array(NarSchema);
|
109
|
+
var NarExportSchema = import_zod.z.object({
|
110
|
+
nars: NarsSchema,
|
111
|
+
extensions: NarExtensionsSchema,
|
112
|
+
attributes: NarAttributesSchema
|
113
|
+
});
|
114
|
+
var attributesLut = [
|
115
|
+
{
|
116
|
+
type: "reads",
|
117
|
+
selectors: "readsAttributes > readsAttribute"
|
118
|
+
},
|
119
|
+
{
|
120
|
+
type: "writes",
|
121
|
+
selectors: "writesAttributes > writesAttribute"
|
122
|
+
}
|
123
|
+
];
|
124
|
+
function querySelectorString(element, selectors) {
|
125
|
+
return element.querySelector(selectors)?.textContent || void 0;
|
126
|
+
}
|
127
|
+
function querySelectorBoolean(element, selectors) {
|
128
|
+
const value = querySelectorString(element, selectors);
|
129
|
+
if (value === "true") {
|
130
|
+
return true;
|
131
|
+
} else if (value === "false") {
|
132
|
+
return true;
|
133
|
+
}
|
134
|
+
return void 0;
|
135
|
+
}
|
136
|
+
async function readExtensionManifest({ file, manifest, extensionManifest, parseNar, parseExtension, parseAttribute }) {
|
137
|
+
const rawNarInfo = {
|
138
|
+
manifest,
|
139
|
+
name: file.name,
|
140
|
+
lastModified: file.lastModified,
|
141
|
+
size: file.size,
|
142
|
+
systemApiVersion: querySelectorString(extensionManifest, "systemApiVersion"),
|
143
|
+
groupId: querySelectorString(extensionManifest, "groupId"),
|
144
|
+
artifactId: querySelectorString(extensionManifest, "artifactId"),
|
145
|
+
version: querySelectorString(extensionManifest, "version"),
|
146
|
+
buildTag: querySelectorString(extensionManifest, "buildInfo > tag"),
|
147
|
+
buildTimestamp: querySelectorString(extensionManifest, "buildInfo > timestamp")
|
148
|
+
};
|
149
|
+
const narResult = await NarSchema.safeParseAsync(rawNarInfo);
|
150
|
+
if (!narResult.success) {
|
151
|
+
console.error({
|
152
|
+
file: file.name,
|
153
|
+
type: "Unable to parse NarSchema",
|
154
|
+
error: narResult.error
|
155
|
+
});
|
156
|
+
return;
|
157
|
+
}
|
158
|
+
parseNar(narResult.data);
|
159
|
+
for (const extensionElement of extensionManifest.querySelectorAll("extensionManifest > extensions > extension")) {
|
160
|
+
const extensionResult = await NarExtensionSchema.safeParseAsync({
|
161
|
+
narId: narResult.data.name,
|
162
|
+
name: querySelectorString(extensionElement, "name"),
|
163
|
+
type: querySelectorString(extensionElement, "type"),
|
164
|
+
description: querySelectorString(extensionElement, "description"),
|
165
|
+
writesAttributes: [],
|
166
|
+
readsAttributes: [],
|
167
|
+
tags: [],
|
168
|
+
properties: [],
|
169
|
+
relationships: [],
|
170
|
+
required: querySelectorBoolean(extensionElement, "required"),
|
171
|
+
sensitive: querySelectorBoolean(extensionElement, "sensitive"),
|
172
|
+
expressionLanguageSupported: querySelectorBoolean(extensionElement, "expressionLanguageSupported"),
|
173
|
+
expressionLanguageScope: querySelectorString(extensionElement, "expressionLanguageScope"),
|
174
|
+
dynamicallyModifiesClasspath: querySelectorBoolean(extensionElement, "dynamicallyModifiesClasspath"),
|
175
|
+
dynamic: querySelectorBoolean(extensionElement, "dynamic")
|
176
|
+
});
|
177
|
+
if (!extensionResult.success) {
|
178
|
+
console.error({
|
179
|
+
file: file.name,
|
180
|
+
type: "Unable to parse NarExtensionSchema",
|
181
|
+
error: extensionResult.error
|
182
|
+
});
|
183
|
+
continue;
|
184
|
+
}
|
185
|
+
for (const tagElement of extensionElement.querySelectorAll("tags > tag")) {
|
186
|
+
if (tagElement.textContent) {
|
187
|
+
extensionResult.data.tags.push(tagElement.textContent);
|
188
|
+
}
|
189
|
+
}
|
190
|
+
for (const propertyElement of extensionElement.querySelectorAll("properties > property")) {
|
191
|
+
if (propertyElement.textContent) {
|
192
|
+
const raw = await NarExtensionProperty.parseAsync({
|
193
|
+
name: querySelectorString(propertyElement, "name"),
|
194
|
+
description: querySelectorString(propertyElement, "description"),
|
195
|
+
displayName: querySelectorString(propertyElement, "displayName")
|
196
|
+
});
|
197
|
+
extensionResult.data.properties.push(raw);
|
198
|
+
}
|
199
|
+
}
|
200
|
+
for (const relationshipElement of extensionElement.querySelectorAll("relationships > relationship")) {
|
201
|
+
if (relationshipElement.textContent) {
|
202
|
+
const raw = await NarExtensionRelationship.parseAsync({
|
203
|
+
name: querySelectorString(relationshipElement, "name"),
|
204
|
+
description: querySelectorString(relationshipElement, "description"),
|
205
|
+
autoTerminated: querySelectorBoolean(relationshipElement, "autoTerminated")
|
206
|
+
});
|
207
|
+
extensionResult.data.relationships.push(raw);
|
208
|
+
}
|
209
|
+
}
|
210
|
+
parseExtension(extensionResult.data);
|
211
|
+
for (const { type, selectors } of attributesLut) {
|
212
|
+
const queryResult = extensionElement.querySelectorAll(selectors);
|
213
|
+
for (const attributeElement of queryResult) {
|
214
|
+
const name = attributeElement.querySelector("name")?.textContent || void 0;
|
215
|
+
const rawAttribute = {
|
216
|
+
narId: narResult.data.name,
|
217
|
+
extensionId: extensionResult.data.name,
|
218
|
+
id: `${extensionResult.data.name}|${name}`,
|
219
|
+
type,
|
220
|
+
name,
|
221
|
+
description: attributeElement.querySelector("description")?.textContent || void 0
|
222
|
+
};
|
223
|
+
const attributeResult = await NarAttributeSchema.safeParseAsync(rawAttribute);
|
224
|
+
if (!attributeResult.success) {
|
225
|
+
console.error({
|
226
|
+
file: file.name,
|
227
|
+
type: "Unable to parse NarAttributeSchema",
|
228
|
+
error: attributeResult.error
|
229
|
+
});
|
230
|
+
continue;
|
231
|
+
}
|
232
|
+
parseAttribute(attributeResult.data);
|
233
|
+
}
|
234
|
+
}
|
235
|
+
}
|
236
|
+
return narResult;
|
237
|
+
}
|
238
|
+
async function readNars({ files, options, setCurrentProgress, parseNar, parseExtension, parseAttribute, DOMParser }) {
|
239
|
+
const result = {
|
240
|
+
filesLength: files.length,
|
241
|
+
filesCount: 0,
|
242
|
+
narCount: 0,
|
243
|
+
narSuccessCount: 0,
|
244
|
+
narErrorCount: 0
|
245
|
+
};
|
246
|
+
setCurrentProgress(0, result.filesLength);
|
247
|
+
for (let index = 0; index < result.filesLength; index++) {
|
248
|
+
result.filesCount += 1;
|
249
|
+
setCurrentProgress(index, result.filesLength);
|
250
|
+
const file = files[index];
|
251
|
+
if (file == null || file == void 0) {
|
252
|
+
console.error({
|
253
|
+
type: "Non-File object",
|
254
|
+
file
|
255
|
+
});
|
256
|
+
continue;
|
257
|
+
}
|
258
|
+
if (!(file instanceof File)) {
|
259
|
+
result.narErrorCount += 1;
|
260
|
+
console.error({
|
261
|
+
type: "Non-File object",
|
262
|
+
file
|
263
|
+
});
|
264
|
+
continue;
|
265
|
+
}
|
266
|
+
if (!file.name.endsWith(".nar")) {
|
267
|
+
continue;
|
268
|
+
}
|
269
|
+
result.narCount += 1;
|
270
|
+
await import_jszip.default.loadAsync(await file.arrayBuffer(), options).then(async (zipFile) => {
|
271
|
+
const manifestFile = zipFile.files["META-INF/MANIFEST.MF"];
|
272
|
+
const manifestResult = await manifestFile.async("text").then((manifest) => {
|
273
|
+
return manifest.split("\n").map((line) => {
|
274
|
+
const index2 = line.indexOf(":");
|
275
|
+
return [line.substring(0, index2).trim(), line.substring(index2 + 1).trim()];
|
276
|
+
}).filter((x) => x[0].length > 0 || x[1].length > 0);
|
277
|
+
}).then(Object.fromEntries).then(ManifestSchema.safeParseAsync);
|
278
|
+
if (!manifestResult.success) {
|
279
|
+
result.narErrorCount += 1;
|
280
|
+
console.error({
|
281
|
+
file: file.name,
|
282
|
+
type: "Unable to parse ManifestSchema",
|
283
|
+
error: manifestResult.error
|
284
|
+
});
|
285
|
+
return null;
|
286
|
+
}
|
287
|
+
const extensionManifestFile = zipFile.files["META-INF/docs/extension-manifest.xml"];
|
288
|
+
if (extensionManifestFile == void 0) {
|
289
|
+
result.narErrorCount += 1;
|
290
|
+
console.error({
|
291
|
+
file: file.name,
|
292
|
+
type: "Manifest file does not exist"
|
293
|
+
});
|
294
|
+
return null;
|
295
|
+
}
|
296
|
+
return await extensionManifestFile.async("text").then(async (xml) => {
|
297
|
+
const extensionManifestFile2 = DOMParser.parseFromString(xml, "text/xml");
|
298
|
+
return await readExtensionManifest({
|
299
|
+
file,
|
300
|
+
parseNar,
|
301
|
+
parseExtension,
|
302
|
+
parseAttribute,
|
303
|
+
manifest: manifestResult.data,
|
304
|
+
extensionManifest: extensionManifestFile2
|
305
|
+
});
|
306
|
+
});
|
307
|
+
}).catch((e) => {
|
308
|
+
result.narErrorCount += 1;
|
309
|
+
console.error({
|
310
|
+
fileName: file.name,
|
311
|
+
file,
|
312
|
+
type: "Uncaught Error",
|
313
|
+
error: e
|
314
|
+
});
|
315
|
+
});
|
316
|
+
}
|
317
|
+
setCurrentProgress(files.length, files.length);
|
318
|
+
return result;
|
319
|
+
}
|
320
|
+
var WriteNarsSchema = import_zod.z.object({
|
321
|
+
nars: NarsSchema,
|
322
|
+
extensions: NarExtensionsSchema,
|
323
|
+
attributes: NarAttributesSchema
|
324
|
+
});
|
325
|
+
// Annotate the CommonJS export names for ESM import in node:
|
326
|
+
0 && (module.exports = {
|
327
|
+
ManifestSchema,
|
328
|
+
NarAttributeSchema,
|
329
|
+
NarAttributeTypeSchema,
|
330
|
+
NarAttributesSchema,
|
331
|
+
NarExportSchema,
|
332
|
+
NarExtensionProperty,
|
333
|
+
NarExtensionRelationship,
|
334
|
+
NarExtensionSchema,
|
335
|
+
NarExtensionsSchema,
|
336
|
+
NarSchema,
|
337
|
+
NarsSchema,
|
338
|
+
WriteNarsSchema,
|
339
|
+
readNars
|
340
|
+
});
|
341
|
+
//# sourceMappingURL=main.cjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/main.ts","../src/readNars.ts"],"sourcesContent":["\nexport {\n NarAttributeTypeSchema,\n NarAttributeSchema,\n NarAttributesSchema, \n NarExtensionRelationship ,\n NarExtensionProperty ,\n NarExtensionSchema,\n NarExtensionsSchema ,\n ManifestSchema ,\n NarSchema,\n NarsSchema ,\n NarExportSchema,\n WriteNarsSchema,\n readNars,\n} from \"./readNars\";\n\nexport type {\n NarAttributeType,\n NarAttribute,\n NarAttributes,\n NarExtension,\n NarExtensions,\n Manifest,\n Nar,\n Nars,\n IncomingFiles,\n ReadNarsParameters,\n ReadNarsResult,\n WriteNars,\n} from \"./readNars\";","import JSZip from \"jszip\";\nimport { z } from \"zod\";\n\nexport const NarAttributeTypeSchema = z.enum([\"writes\", \"reads\"]);\n\nexport type NarAttributeType = z.infer<typeof NarAttributeTypeSchema>;\n\nexport const NarAttributeSchema = z.object({\n narId: z.string(),\n extensionId: z.string(),\n type: NarAttributeTypeSchema,\n id: z.string(),\n name: z.string(),\n description: z.string(),\n})\n\nexport type NarAttribute = z.infer<typeof NarAttributeSchema>;\nexport const NarAttributesSchema = z.array(NarAttributeSchema);\nexport type NarAttributes = z.infer<typeof NarAttributesSchema>;\n\nexport const NarExtensionRelationship = z.object({\n name: z.string(),\n description: z.string().optional(),\n autoTerminated: z.boolean(),\n});\n\nexport const NarExtensionProperty = z.object({\n name: z.string(),\n displayName: z.string(),\n description: z.string().optional(),\n required: z.boolean().optional(),\n sensitive: z.boolean().optional(),\n expressionLanguageSupported: z.boolean().optional(),\n expressionLanguageScope: z.string().optional(),\n dynamicallyModifiesClasspath: z.boolean().optional(),\n dynamic: z.boolean().optional(),\n});\n\nexport const NarExtensionSchema = z.object({\n narId: z.string(),\n name: z.string(),\n type: z.string(),\n description: z.string().optional(),\n tags: z.array(z.string()),\n relationships: z.array(NarExtensionRelationship),\n properties: z.array(NarExtensionProperty),\n // These might be properties of the Property\n required: z.boolean().optional(),\n sensitive: z.boolean().optional(),\n expressionLanguageSupported: z.boolean().optional(),\n expressionLanguageScope: z.string().optional(),\n dynamicallyModifiesClasspath: z.boolean().optional(),\n dynamic: z.boolean().optional(),\n});\n\nexport type NarExtension = z.infer<typeof NarExtensionSchema>;\nexport const NarExtensionsSchema = z.array(NarExtensionSchema);\nexport type NarExtensions = z.infer<typeof NarExtensionsSchema>;\n\nexport const ManifestSchema = z.record(z.string(), z.string());\nexport type Manifest = z.infer<typeof ManifestSchema>;\n\nexport const NarSchema = z.object({\n manifest: ManifestSchema,\n name: z.string(),\n lastModified: z.number(),\n size: z.number(),\n systemApiVersion: z.string().optional(),\n groupId: z.string().optional(),\n artifactId: z.string().optional(),\n version: z.string().optional(),\n buildTag: z.string().optional(),\n buildTimestamp: z.string().optional(),\n});\n\nexport type Nar = z.infer<typeof NarSchema>;\nexport const NarsSchema = z.array(NarSchema);\nexport type Nars = z.infer<typeof NarsSchema>;\n\nexport const NarExportSchema = z.object({\n nars: NarsSchema,\n extensions: NarExtensionsSchema,\n attributes: NarAttributesSchema,\n})\n\nexport type IncomingFiles = File[];\n\nexport type ReadNarsParameters = {\n //TODO: Update implementation of processNars to consume File[] rather than a FileList\n files: IncomingFiles, \n options?: JSZip.JSZipLoadOptions\n\n DOMParser: DOMParser,\n setCurrentProgress: (current: number, total: number) => void,\n parseNar: (nar: Nar) => Promise<void>,\n parseExtension: (extension: NarExtension) => Promise<void>,\n parseAttribute: (extension: NarAttribute) => Promise<void>,\n}\n\ntype ReadExtensionManifestParameters = {\n file: File, \n extensionManifest: Document,\n manifest: Manifest,\n parseNar: (nar: Nar) => Promise<void>,\n parseExtension: (extension: NarExtension) => Promise<void>,\n parseAttribute: (extension: NarAttribute) => Promise<void>,\n}\n\ntype AttributesLuv = {\n type: NarAttributeType,\n selectors: string,\n}\n\nconst attributesLut: AttributesLuv[] = [\n {\n type: \"reads\",\n selectors: \"readsAttributes > readsAttribute\",\n },\n {\n type: \"writes\",\n selectors: \"writesAttributes > writesAttribute\",\n },\n]\n\nfunction querySelectorString(element: Document | Element, selectors: string) {\n return element.querySelector(selectors)?.textContent || undefined;\n}\n\nfunction querySelectorBoolean(element: Document | Element, selectors: string) {\n const value = querySelectorString(element, selectors);\n if(value === \"true\") {\n return true;\n }\n else if(value === \"false\") {\n return true;\n }\n return undefined;\n}\n\nasync function readExtensionManifest({file, manifest, extensionManifest, parseNar, parseExtension, parseAttribute }: ReadExtensionManifestParameters) {\n const rawNarInfo: Partial<Nar> = {\n manifest: manifest,\n name: file.name,\n lastModified: file.lastModified,\n size: file.size,\n systemApiVersion: querySelectorString(extensionManifest, \"systemApiVersion\"),\n groupId: querySelectorString(extensionManifest, \"groupId\"),\n artifactId: querySelectorString(extensionManifest, \"artifactId\"),\n version: querySelectorString(extensionManifest, \"version\"),\n buildTag: querySelectorString(extensionManifest, \"buildInfo > tag\"),\n buildTimestamp: querySelectorString(extensionManifest, \"buildInfo > timestamp\"),\n }\n\n const narResult = await NarSchema.safeParseAsync(rawNarInfo);\n\n if(!narResult.success) {\n console.error({\n file: file.name,\n type: \"Unable to parse NarSchema\",\n error: narResult.error,\n });\n return;\n }\n\n parseNar(narResult.data);\n\n for (const extensionElement of extensionManifest.querySelectorAll(\"extensionManifest > extensions > extension\")) {\n const extensionResult = await NarExtensionSchema.safeParseAsync({\n narId: narResult.data.name,\n name: querySelectorString(extensionElement, \"name\"),\n type: querySelectorString(extensionElement, \"type\"),\n description: querySelectorString(extensionElement, \"description\"),\n writesAttributes: [],\n readsAttributes: [],\n tags: [],\n properties: [],\n relationships: [],\n required: querySelectorBoolean(extensionElement, \"required\"),\n sensitive: querySelectorBoolean(extensionElement, \"sensitive\"),\n expressionLanguageSupported: querySelectorBoolean(extensionElement, \"expressionLanguageSupported\"),\n expressionLanguageScope: querySelectorString(extensionElement, \"expressionLanguageScope\"),\n dynamicallyModifiesClasspath: querySelectorBoolean(extensionElement, \"dynamicallyModifiesClasspath\"),\n dynamic: querySelectorBoolean(extensionElement, \"dynamic\"),\n }); \n\n if (!extensionResult.success) {\n console.error({\n file: file.name,\n type: \"Unable to parse NarExtensionSchema\",\n error: extensionResult.error,\n });\n continue;\n }\n\n for(const tagElement of extensionElement.querySelectorAll(\"tags > tag\")) {\n if(tagElement.textContent) {\n extensionResult.data.tags.push(tagElement.textContent);\n }\n }\n\n for(const propertyElement of extensionElement.querySelectorAll(\"properties > property\")) {\n if(propertyElement.textContent) {\n const raw = await NarExtensionProperty.parseAsync({\n name: querySelectorString(propertyElement, \"name\"),\n description: querySelectorString(propertyElement, \"description\"),\n displayName: querySelectorString(propertyElement, \"displayName\"),\n })\n\n extensionResult.data.properties.push(raw);\n }\n }\n\n for(const relationshipElement of extensionElement.querySelectorAll(\"relationships > relationship\")) {\n if(relationshipElement.textContent) {\n const raw = await NarExtensionRelationship.parseAsync({\n name: querySelectorString(relationshipElement, \"name\"),\n description: querySelectorString(relationshipElement, \"description\"),\n autoTerminated: querySelectorBoolean(relationshipElement, \"autoTerminated\"),\n })\n\n extensionResult.data.relationships.push(raw);\n }\n }\n\n parseExtension(extensionResult.data);\n\n for (const {type, selectors} of attributesLut) {\n const queryResult = extensionElement.querySelectorAll(selectors);\n\n for (const attributeElement of queryResult) {\n const name = attributeElement.querySelector(\"name\")?.textContent || undefined;\n\n const rawAttribute: Partial<NarAttribute> = {\n narId: narResult.data.name,\n extensionId: extensionResult.data.name,\n id: `${extensionResult.data.name}|${name}`,\n type: type,\n name: name,\n description: attributeElement.querySelector(\"description\")?.textContent || undefined,\n }\n\n const attributeResult = await NarAttributeSchema.safeParseAsync(rawAttribute)\n \n if(!attributeResult.success) {\n console.error({\n file: file.name,\n type: \"Unable to parse NarAttributeSchema\",\n error: attributeResult.error,\n });\n continue;\n }\n\n parseAttribute(attributeResult.data);\n }\n }\n }\n\n return narResult;\n}\n\nexport type ReadNarsResult = {\n readonly filesLength: number\n filesCount: number\n narCount: number\n narSuccessCount: number\n narErrorCount: number\n}\n\nexport async function readNars({files, options, setCurrentProgress, parseNar, parseExtension, parseAttribute, DOMParser}: ReadNarsParameters): Promise<ReadNarsResult> {\n const result: ReadNarsResult = {\n filesLength: files.length,\n filesCount: 0,\n narCount: 0,\n narSuccessCount: 0,\n narErrorCount: 0,\n }\n setCurrentProgress(0, result.filesLength);\n for (let index = 0; index < result.filesLength; index++) {\n result.filesCount += 1;\n setCurrentProgress(index, result.filesLength);\n\n const file = files[index];\n if (file == null || file == undefined) {\n console.error({\n type: \"Non-File object\",\n file: file,\n });\n continue;\n } \n if(! (file instanceof File)) {\n result.narErrorCount += 1;\n console.error({\n type: \"Non-File object\",\n file: file,\n });\n continue;\n }\n if (!file.name.endsWith(\".nar\")) {\n continue;\n }\n result.narCount += 1;\n\n await JSZip.loadAsync(await file.arrayBuffer(), options).then(async (zipFile) => {\n //TODO: Actually use manifestFile\n const manifestFile = zipFile.files[\"META-INF/MANIFEST.MF\"];\n const manifestResult = await manifestFile.async(\"text\").then(manifest => {\n return manifest.split(\"\\n\").map(line => {\n const index = line.indexOf(\":\");\n return [line.substring(0, index).trim(), line.substring(index + 1).trim()]\n }).filter(x => x[0].length > 0 || x[1].length > 0);\n }).then(Object.fromEntries).then(ManifestSchema.safeParseAsync);\n\n if(!manifestResult.success) {\n result.narErrorCount +=1;\n console.error({\n file: file.name,\n type: \"Unable to parse ManifestSchema\",\n error: manifestResult.error,\n });\n return null;\n }\n\n const extensionManifestFile = zipFile.files[\"META-INF/docs/extension-manifest.xml\"];\n if (extensionManifestFile == undefined) {\n result.narErrorCount +=1;\n console.error({\n file: file.name,\n type: \"Manifest file does not exist\",\n });\n return null;\n }\n\n return await extensionManifestFile.async(\"text\").then(async (xml) => {\n const extensionManifestFile = DOMParser.parseFromString(xml, \"text/xml\");\n return await readExtensionManifest({\n file, \n parseNar, \n parseExtension, \n parseAttribute,\n manifest: manifestResult.data,\n extensionManifest: extensionManifestFile,\n });\n })\n }).catch((e) => {\n result.narErrorCount +=1;\n console.error({\n fileName: file.name,\n file: file,\n type: \"Uncaught Error\",\n error: e,\n })\n });\n }\n\n setCurrentProgress(files.length, files.length);\n\n return result;\n}\n\nexport const WriteNarsSchema = z.object({\n nars: NarsSchema,\n extensions: NarExtensionsSchema,\n attributes: NarAttributesSchema,\n})\n\nexport type WriteNars = z.infer<typeof WriteNarsSchema>;"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAkB;AAClB,iBAAkB;AAEX,IAAM,yBAAyB,aAAE,KAAK,CAAC,UAAU,OAAO,CAAC;AAIzD,IAAM,qBAAqB,aAAE,OAAO;AAAA,EACvC,OAAO,aAAE,OAAO;AAAA,EAChB,aAAa,aAAE,OAAO;AAAA,EACtB,MAAM;AAAA,EACN,IAAI,aAAE,OAAO;AAAA,EACb,MAAM,aAAE,OAAO;AAAA,EACf,aAAa,aAAE,OAAO;AAC1B,CAAC;AAGM,IAAM,sBAAsB,aAAE,MAAM,kBAAkB;AAGtD,IAAM,2BAA2B,aAAE,OAAO;AAAA,EAC7C,MAAM,aAAE,OAAO;AAAA,EACf,aAAa,aAAE,OAAO,EAAE,SAAS;AAAA,EACjC,gBAAgB,aAAE,QAAQ;AAC9B,CAAC;AAEM,IAAM,uBAAuB,aAAE,OAAO;AAAA,EACzC,MAAM,aAAE,OAAO;AAAA,EACf,aAAa,aAAE,OAAO;AAAA,EACtB,aAAa,aAAE,OAAO,EAAE,SAAS;AAAA,EACjC,UAAU,aAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,WAAW,aAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,6BAA6B,aAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,yBAAyB,aAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,8BAA8B,aAAE,QAAQ,EAAE,SAAS;AAAA,EACnD,SAAS,aAAE,QAAQ,EAAE,SAAS;AAClC,CAAC;AAEM,IAAM,qBAAqB,aAAE,OAAO;AAAA,EACvC,OAAO,aAAE,OAAO;AAAA,EAChB,MAAM,aAAE,OAAO;AAAA,EACf,MAAM,aAAE,OAAO;AAAA,EACf,aAAa,aAAE,OAAO,EAAE,SAAS;AAAA,EACjC,MAAM,aAAE,MAAM,aAAE,OAAO,CAAC;AAAA,EACxB,eAAe,aAAE,MAAM,wBAAwB;AAAA,EAC/C,YAAY,aAAE,MAAM,oBAAoB;AAAA;AAAA,EAExC,UAAU,aAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,WAAW,aAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,6BAA6B,aAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,yBAAyB,aAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,8BAA8B,aAAE,QAAQ,EAAE,SAAS;AAAA,EACnD,SAAS,aAAE,QAAQ,EAAE,SAAS;AAClC,CAAC;AAGM,IAAM,sBAAsB,aAAE,MAAM,kBAAkB;AAGtD,IAAM,iBAAiB,aAAE,OAAO,aAAE,OAAO,GAAG,aAAE,OAAO,CAAC;AAGtD,IAAM,YAAY,aAAE,OAAO;AAAA,EAC9B,UAAU;AAAA,EACV,MAAM,aAAE,OAAO;AAAA,EACf,cAAc,aAAE,OAAO;AAAA,EACvB,MAAM,aAAE,OAAO;AAAA,EACf,kBAAkB,aAAE,OAAO,EAAE,SAAS;AAAA,EACtC,SAAS,aAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,YAAY,aAAE,OAAO,EAAE,SAAS;AAAA,EAChC,SAAS,aAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,UAAU,aAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,gBAAgB,aAAE,OAAO,EAAE,SAAS;AACxC,CAAC;AAGM,IAAM,aAAa,aAAE,MAAM,SAAS;AAGpC,IAAM,kBAAkB,aAAE,OAAO;AAAA,EACpC,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,YAAY;AAChB,CAAC;AA8BD,IAAM,gBAAiC;AAAA,EACnC;AAAA,IACI,MAAM;AAAA,IACN,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,MAAM;AAAA,IACN,WAAW;AAAA,EACf;AACJ;AAEA,SAAS,oBAAoB,SAA6B,WAAmB;AACzE,SAAO,QAAQ,cAAc,SAAS,GAAG,eAAe;AAC5D;AAEA,SAAS,qBAAqB,SAA6B,WAAmB;AAC1E,QAAM,QAAQ,oBAAoB,SAAS,SAAS;AACpD,MAAG,UAAU,QAAQ;AACjB,WAAO;AAAA,EACX,WACQ,UAAU,SAAS;AACvB,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAEA,eAAe,sBAAsB,EAAC,MAAM,UAAU,mBAAmB,UAAU,gBAAgB,eAAe,GAAoC;AAClJ,QAAM,aAA2B;AAAA,IAC7B;AAAA,IACA,MAAM,KAAK;AAAA,IACX,cAAc,KAAK;AAAA,IACnB,MAAM,KAAK;AAAA,IACX,kBAAkB,oBAAoB,mBAAmB,kBAAkB;AAAA,IAC3E,SAAS,oBAAoB,mBAAmB,SAAS;AAAA,IACzD,YAAY,oBAAoB,mBAAmB,YAAY;AAAA,IAC/D,SAAS,oBAAoB,mBAAmB,SAAS;AAAA,IACzD,UAAU,oBAAoB,mBAAmB,iBAAiB;AAAA,IAClE,gBAAgB,oBAAoB,mBAAmB,uBAAuB;AAAA,EAClF;AAEA,QAAM,YAAY,MAAM,UAAU,eAAe,UAAU;AAE3D,MAAG,CAAC,UAAU,SAAS;AACnB,YAAQ,MAAM;AAAA,MACV,MAAM,KAAK;AAAA,MACX,MAAM;AAAA,MACN,OAAO,UAAU;AAAA,IACrB,CAAC;AACD;AAAA,EACJ;AAEA,WAAS,UAAU,IAAI;AAEvB,aAAW,oBAAoB,kBAAkB,iBAAiB,4CAA4C,GAAG;AAC7G,UAAM,kBAAkB,MAAM,mBAAmB,eAAe;AAAA,MAC5D,OAAO,UAAU,KAAK;AAAA,MACtB,MAAM,oBAAoB,kBAAkB,MAAM;AAAA,MAClD,MAAM,oBAAoB,kBAAkB,MAAM;AAAA,MAClD,aAAa,oBAAoB,kBAAkB,aAAa;AAAA,MAChE,kBAAkB,CAAC;AAAA,MACnB,iBAAiB,CAAC;AAAA,MAClB,MAAM,CAAC;AAAA,MACP,YAAY,CAAC;AAAA,MACb,eAAe,CAAC;AAAA,MAChB,UAAU,qBAAqB,kBAAkB,UAAU;AAAA,MAC3D,WAAW,qBAAqB,kBAAkB,WAAW;AAAA,MAC7D,6BAA6B,qBAAqB,kBAAkB,6BAA6B;AAAA,MACjG,yBAAyB,oBAAoB,kBAAkB,yBAAyB;AAAA,MACxF,8BAA8B,qBAAqB,kBAAkB,8BAA8B;AAAA,MACnG,SAAS,qBAAqB,kBAAkB,SAAS;AAAA,IAC7D,CAAC;AAED,QAAI,CAAC,gBAAgB,SAAS;AAC1B,cAAQ,MAAM;AAAA,QACV,MAAM,KAAK;AAAA,QACX,MAAM;AAAA,QACN,OAAO,gBAAgB;AAAA,MAC3B,CAAC;AACD;AAAA,IACJ;AAEA,eAAU,cAAc,iBAAiB,iBAAiB,YAAY,GAAG;AACrE,UAAG,WAAW,aAAa;AACvB,wBAAgB,KAAK,KAAK,KAAK,WAAW,WAAW;AAAA,MACzD;AAAA,IACJ;AAEA,eAAU,mBAAmB,iBAAiB,iBAAiB,uBAAuB,GAAG;AACrF,UAAG,gBAAgB,aAAa;AAC5B,cAAM,MAAM,MAAM,qBAAqB,WAAW;AAAA,UAC9C,MAAM,oBAAoB,iBAAiB,MAAM;AAAA,UACjD,aAAa,oBAAoB,iBAAiB,aAAa;AAAA,UAC/D,aAAa,oBAAoB,iBAAiB,aAAa;AAAA,QACnE,CAAC;AAED,wBAAgB,KAAK,WAAW,KAAK,GAAG;AAAA,MAC5C;AAAA,IACJ;AAEA,eAAU,uBAAuB,iBAAiB,iBAAiB,8BAA8B,GAAG;AAChG,UAAG,oBAAoB,aAAa;AAChC,cAAM,MAAM,MAAM,yBAAyB,WAAW;AAAA,UAClD,MAAM,oBAAoB,qBAAqB,MAAM;AAAA,UACrD,aAAa,oBAAoB,qBAAqB,aAAa;AAAA,UACnE,gBAAgB,qBAAqB,qBAAqB,gBAAgB;AAAA,QAC9E,CAAC;AAED,wBAAgB,KAAK,cAAc,KAAK,GAAG;AAAA,MAC/C;AAAA,IACJ;AAEA,mBAAe,gBAAgB,IAAI;AAEnC,eAAW,EAAC,MAAM,UAAS,KAAK,eAAe;AAC3C,YAAM,cAAc,iBAAiB,iBAAiB,SAAS;AAE/D,iBAAW,oBAAoB,aAAa;AACxC,cAAM,OAAO,iBAAiB,cAAc,MAAM,GAAG,eAAe;AAEpE,cAAM,eAAsC;AAAA,UACxC,OAAO,UAAU,KAAK;AAAA,UACtB,aAAa,gBAAgB,KAAK;AAAA,UAClC,IAAI,GAAG,gBAAgB,KAAK,IAAI,IAAI,IAAI;AAAA,UACxC;AAAA,UACA;AAAA,UACA,aAAa,iBAAiB,cAAc,aAAa,GAAG,eAAe;AAAA,QAC/E;AAEA,cAAM,kBAAkB,MAAM,mBAAmB,eAAe,YAAY;AAE5E,YAAG,CAAC,gBAAgB,SAAS;AACzB,kBAAQ,MAAM;AAAA,YACV,MAAM,KAAK;AAAA,YACX,MAAM;AAAA,YACN,OAAO,gBAAgB;AAAA,UAC3B,CAAC;AACD;AAAA,QACJ;AAEA,uBAAe,gBAAgB,IAAI;AAAA,MACvC;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AACX;AAUA,eAAsB,SAAS,EAAC,OAAO,SAAS,oBAAoB,UAAU,gBAAgB,gBAAgB,UAAS,GAAgD;AACnK,QAAM,SAAyB;AAAA,IAC3B,aAAa,MAAM;AAAA,IACnB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,eAAe;AAAA,EACnB;AACA,qBAAmB,GAAG,OAAO,WAAW;AACxC,WAAS,QAAQ,GAAG,QAAQ,OAAO,aAAa,SAAS;AACrD,WAAO,cAAc;AACrB,uBAAmB,OAAO,OAAO,WAAW;AAE5C,UAAM,OAAO,MAAM,KAAK;AACxB,QAAI,QAAQ,QAAQ,QAAQ,QAAW;AACnC,cAAQ,MAAM;AAAA,QACV,MAAM;AAAA,QACN;AAAA,MACJ,CAAC;AACD;AAAA,IACJ;AACA,QAAG,EAAG,gBAAgB,OAAO;AACzB,aAAO,iBAAiB;AACxB,cAAQ,MAAM;AAAA,QACV,MAAM;AAAA,QACN;AAAA,MACJ,CAAC;AACD;AAAA,IACJ;AACA,QAAI,CAAC,KAAK,KAAK,SAAS,MAAM,GAAG;AAC7B;AAAA,IACJ;AACA,WAAO,YAAY;AAEnB,UAAM,aAAAA,QAAM,UAAU,MAAM,KAAK,YAAY,GAAG,OAAO,EAAE,KAAK,OAAO,YAAY;AAE7E,YAAM,eAAe,QAAQ,MAAM,sBAAsB;AACzD,YAAM,iBAAiB,MAAM,aAAa,MAAM,MAAM,EAAE,KAAK,cAAY;AACrE,eAAO,SAAS,MAAM,IAAI,EAAE,IAAI,UAAQ;AACpC,gBAAMC,SAAQ,KAAK,QAAQ,GAAG;AAC9B,iBAAO,CAAC,KAAK,UAAU,GAAGA,MAAK,EAAE,KAAK,GAAG,KAAK,UAAUA,SAAQ,CAAC,EAAE,KAAK,CAAC;AAAA,QAC7E,CAAC,EAAE,OAAO,OAAK,EAAE,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC;AAAA,MACrD,CAAC,EAAE,KAAK,OAAO,WAAW,EAAE,KAAK,eAAe,cAAc;AAE9D,UAAG,CAAC,eAAe,SAAS;AACxB,eAAO,iBAAgB;AACvB,gBAAQ,MAAM;AAAA,UACV,MAAM,KAAK;AAAA,UACX,MAAM;AAAA,UACN,OAAO,eAAe;AAAA,QAC1B,CAAC;AACD,eAAO;AAAA,MACX;AAEA,YAAM,wBAAwB,QAAQ,MAAM,sCAAsC;AAClF,UAAI,yBAAyB,QAAW;AACpC,eAAO,iBAAgB;AACvB,gBAAQ,MAAM;AAAA,UACV,MAAM,KAAK;AAAA,UACX,MAAM;AAAA,QACV,CAAC;AACD,eAAO;AAAA,MACX;AAEA,aAAO,MAAM,sBAAsB,MAAM,MAAM,EAAE,KAAK,OAAO,QAAQ;AACjE,cAAMC,yBAAwB,UAAU,gBAAgB,KAAK,UAAU;AACvE,eAAO,MAAM,sBAAsB;AAAA,UAC/B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU,eAAe;AAAA,UACzB,mBAAmBA;AAAA,QACvB,CAAC;AAAA,MACL,CAAC;AAAA,IACL,CAAC,EAAE,MAAM,CAAC,MAAM;AACZ,aAAO,iBAAgB;AACvB,cAAQ,MAAM;AAAA,QACV,UAAU,KAAK;AAAA,QACf;AAAA,QACA,MAAM;AAAA,QACN,OAAO;AAAA,MACX,CAAC;AAAA,IACL,CAAC;AAAA,EACL;AAEA,qBAAmB,MAAM,QAAQ,MAAM,MAAM;AAE7C,SAAO;AACX;AAEO,IAAM,kBAAkB,aAAE,OAAO;AAAA,EACpC,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,YAAY;AAChB,CAAC;","names":["JSZip","index","extensionManifestFile"]}
|