@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.js
ADDED
@@ -0,0 +1,292 @@
|
|
1
|
+
// src/readNars.ts
|
2
|
+
import JSZip from "jszip";
|
3
|
+
import { z } from "zod";
|
4
|
+
var NarAttributeTypeSchema = z.enum(["writes", "reads"]);
|
5
|
+
var NarAttributeSchema = z.object({
|
6
|
+
narId: z.string(),
|
7
|
+
extensionId: z.string(),
|
8
|
+
type: NarAttributeTypeSchema,
|
9
|
+
id: z.string(),
|
10
|
+
name: z.string(),
|
11
|
+
description: z.string()
|
12
|
+
});
|
13
|
+
var NarAttributesSchema = z.array(NarAttributeSchema);
|
14
|
+
var NarExtensionRelationship = z.object({
|
15
|
+
name: z.string(),
|
16
|
+
description: z.string().optional(),
|
17
|
+
autoTerminated: z.boolean()
|
18
|
+
});
|
19
|
+
var NarExtensionProperty = z.object({
|
20
|
+
name: z.string(),
|
21
|
+
displayName: z.string(),
|
22
|
+
description: z.string().optional(),
|
23
|
+
required: z.boolean().optional(),
|
24
|
+
sensitive: z.boolean().optional(),
|
25
|
+
expressionLanguageSupported: z.boolean().optional(),
|
26
|
+
expressionLanguageScope: z.string().optional(),
|
27
|
+
dynamicallyModifiesClasspath: z.boolean().optional(),
|
28
|
+
dynamic: z.boolean().optional()
|
29
|
+
});
|
30
|
+
var NarExtensionSchema = z.object({
|
31
|
+
narId: z.string(),
|
32
|
+
name: z.string(),
|
33
|
+
type: z.string(),
|
34
|
+
description: z.string().optional(),
|
35
|
+
tags: z.array(z.string()),
|
36
|
+
relationships: z.array(NarExtensionRelationship),
|
37
|
+
properties: z.array(NarExtensionProperty),
|
38
|
+
// These might be properties of the Property
|
39
|
+
required: z.boolean().optional(),
|
40
|
+
sensitive: z.boolean().optional(),
|
41
|
+
expressionLanguageSupported: z.boolean().optional(),
|
42
|
+
expressionLanguageScope: z.string().optional(),
|
43
|
+
dynamicallyModifiesClasspath: z.boolean().optional(),
|
44
|
+
dynamic: z.boolean().optional()
|
45
|
+
});
|
46
|
+
var NarExtensionsSchema = z.array(NarExtensionSchema);
|
47
|
+
var ManifestSchema = z.record(z.string(), z.string());
|
48
|
+
var NarSchema = z.object({
|
49
|
+
manifest: ManifestSchema,
|
50
|
+
name: z.string(),
|
51
|
+
lastModified: z.number(),
|
52
|
+
size: z.number(),
|
53
|
+
systemApiVersion: z.string().optional(),
|
54
|
+
groupId: z.string().optional(),
|
55
|
+
artifactId: z.string().optional(),
|
56
|
+
version: z.string().optional(),
|
57
|
+
buildTag: z.string().optional(),
|
58
|
+
buildTimestamp: z.string().optional()
|
59
|
+
});
|
60
|
+
var NarsSchema = z.array(NarSchema);
|
61
|
+
var NarExportSchema = z.object({
|
62
|
+
nars: NarsSchema,
|
63
|
+
extensions: NarExtensionsSchema,
|
64
|
+
attributes: NarAttributesSchema
|
65
|
+
});
|
66
|
+
var attributesLut = [
|
67
|
+
{
|
68
|
+
type: "reads",
|
69
|
+
selectors: "readsAttributes > readsAttribute"
|
70
|
+
},
|
71
|
+
{
|
72
|
+
type: "writes",
|
73
|
+
selectors: "writesAttributes > writesAttribute"
|
74
|
+
}
|
75
|
+
];
|
76
|
+
function querySelectorString(element, selectors) {
|
77
|
+
return element.querySelector(selectors)?.textContent || void 0;
|
78
|
+
}
|
79
|
+
function querySelectorBoolean(element, selectors) {
|
80
|
+
const value = querySelectorString(element, selectors);
|
81
|
+
if (value === "true") {
|
82
|
+
return true;
|
83
|
+
} else if (value === "false") {
|
84
|
+
return true;
|
85
|
+
}
|
86
|
+
return void 0;
|
87
|
+
}
|
88
|
+
async function readExtensionManifest({ file, manifest, extensionManifest, parseNar, parseExtension, parseAttribute }) {
|
89
|
+
const rawNarInfo = {
|
90
|
+
manifest,
|
91
|
+
name: file.name,
|
92
|
+
lastModified: file.lastModified,
|
93
|
+
size: file.size,
|
94
|
+
systemApiVersion: querySelectorString(extensionManifest, "systemApiVersion"),
|
95
|
+
groupId: querySelectorString(extensionManifest, "groupId"),
|
96
|
+
artifactId: querySelectorString(extensionManifest, "artifactId"),
|
97
|
+
version: querySelectorString(extensionManifest, "version"),
|
98
|
+
buildTag: querySelectorString(extensionManifest, "buildInfo > tag"),
|
99
|
+
buildTimestamp: querySelectorString(extensionManifest, "buildInfo > timestamp")
|
100
|
+
};
|
101
|
+
const narResult = await NarSchema.safeParseAsync(rawNarInfo);
|
102
|
+
if (!narResult.success) {
|
103
|
+
console.error({
|
104
|
+
file: file.name,
|
105
|
+
type: "Unable to parse NarSchema",
|
106
|
+
error: narResult.error
|
107
|
+
});
|
108
|
+
return;
|
109
|
+
}
|
110
|
+
parseNar(narResult.data);
|
111
|
+
for (const extensionElement of extensionManifest.querySelectorAll("extensionManifest > extensions > extension")) {
|
112
|
+
const extensionResult = await NarExtensionSchema.safeParseAsync({
|
113
|
+
narId: narResult.data.name,
|
114
|
+
name: querySelectorString(extensionElement, "name"),
|
115
|
+
type: querySelectorString(extensionElement, "type"),
|
116
|
+
description: querySelectorString(extensionElement, "description"),
|
117
|
+
writesAttributes: [],
|
118
|
+
readsAttributes: [],
|
119
|
+
tags: [],
|
120
|
+
properties: [],
|
121
|
+
relationships: [],
|
122
|
+
required: querySelectorBoolean(extensionElement, "required"),
|
123
|
+
sensitive: querySelectorBoolean(extensionElement, "sensitive"),
|
124
|
+
expressionLanguageSupported: querySelectorBoolean(extensionElement, "expressionLanguageSupported"),
|
125
|
+
expressionLanguageScope: querySelectorString(extensionElement, "expressionLanguageScope"),
|
126
|
+
dynamicallyModifiesClasspath: querySelectorBoolean(extensionElement, "dynamicallyModifiesClasspath"),
|
127
|
+
dynamic: querySelectorBoolean(extensionElement, "dynamic")
|
128
|
+
});
|
129
|
+
if (!extensionResult.success) {
|
130
|
+
console.error({
|
131
|
+
file: file.name,
|
132
|
+
type: "Unable to parse NarExtensionSchema",
|
133
|
+
error: extensionResult.error
|
134
|
+
});
|
135
|
+
continue;
|
136
|
+
}
|
137
|
+
for (const tagElement of extensionElement.querySelectorAll("tags > tag")) {
|
138
|
+
if (tagElement.textContent) {
|
139
|
+
extensionResult.data.tags.push(tagElement.textContent);
|
140
|
+
}
|
141
|
+
}
|
142
|
+
for (const propertyElement of extensionElement.querySelectorAll("properties > property")) {
|
143
|
+
if (propertyElement.textContent) {
|
144
|
+
const raw = await NarExtensionProperty.parseAsync({
|
145
|
+
name: querySelectorString(propertyElement, "name"),
|
146
|
+
description: querySelectorString(propertyElement, "description"),
|
147
|
+
displayName: querySelectorString(propertyElement, "displayName")
|
148
|
+
});
|
149
|
+
extensionResult.data.properties.push(raw);
|
150
|
+
}
|
151
|
+
}
|
152
|
+
for (const relationshipElement of extensionElement.querySelectorAll("relationships > relationship")) {
|
153
|
+
if (relationshipElement.textContent) {
|
154
|
+
const raw = await NarExtensionRelationship.parseAsync({
|
155
|
+
name: querySelectorString(relationshipElement, "name"),
|
156
|
+
description: querySelectorString(relationshipElement, "description"),
|
157
|
+
autoTerminated: querySelectorBoolean(relationshipElement, "autoTerminated")
|
158
|
+
});
|
159
|
+
extensionResult.data.relationships.push(raw);
|
160
|
+
}
|
161
|
+
}
|
162
|
+
parseExtension(extensionResult.data);
|
163
|
+
for (const { type, selectors } of attributesLut) {
|
164
|
+
const queryResult = extensionElement.querySelectorAll(selectors);
|
165
|
+
for (const attributeElement of queryResult) {
|
166
|
+
const name = attributeElement.querySelector("name")?.textContent || void 0;
|
167
|
+
const rawAttribute = {
|
168
|
+
narId: narResult.data.name,
|
169
|
+
extensionId: extensionResult.data.name,
|
170
|
+
id: `${extensionResult.data.name}|${name}`,
|
171
|
+
type,
|
172
|
+
name,
|
173
|
+
description: attributeElement.querySelector("description")?.textContent || void 0
|
174
|
+
};
|
175
|
+
const attributeResult = await NarAttributeSchema.safeParseAsync(rawAttribute);
|
176
|
+
if (!attributeResult.success) {
|
177
|
+
console.error({
|
178
|
+
file: file.name,
|
179
|
+
type: "Unable to parse NarAttributeSchema",
|
180
|
+
error: attributeResult.error
|
181
|
+
});
|
182
|
+
continue;
|
183
|
+
}
|
184
|
+
parseAttribute(attributeResult.data);
|
185
|
+
}
|
186
|
+
}
|
187
|
+
}
|
188
|
+
return narResult;
|
189
|
+
}
|
190
|
+
async function readNars({ files, options, setCurrentProgress, parseNar, parseExtension, parseAttribute, DOMParser }) {
|
191
|
+
const result = {
|
192
|
+
filesLength: files.length,
|
193
|
+
filesCount: 0,
|
194
|
+
narCount: 0,
|
195
|
+
narSuccessCount: 0,
|
196
|
+
narErrorCount: 0
|
197
|
+
};
|
198
|
+
setCurrentProgress(0, result.filesLength);
|
199
|
+
for (let index = 0; index < result.filesLength; index++) {
|
200
|
+
result.filesCount += 1;
|
201
|
+
setCurrentProgress(index, result.filesLength);
|
202
|
+
const file = files[index];
|
203
|
+
if (file == null || file == void 0) {
|
204
|
+
console.error({
|
205
|
+
type: "Non-File object",
|
206
|
+
file
|
207
|
+
});
|
208
|
+
continue;
|
209
|
+
}
|
210
|
+
if (!(file instanceof File)) {
|
211
|
+
result.narErrorCount += 1;
|
212
|
+
console.error({
|
213
|
+
type: "Non-File object",
|
214
|
+
file
|
215
|
+
});
|
216
|
+
continue;
|
217
|
+
}
|
218
|
+
if (!file.name.endsWith(".nar")) {
|
219
|
+
continue;
|
220
|
+
}
|
221
|
+
result.narCount += 1;
|
222
|
+
await JSZip.loadAsync(await file.arrayBuffer(), options).then(async (zipFile) => {
|
223
|
+
const manifestFile = zipFile.files["META-INF/MANIFEST.MF"];
|
224
|
+
const manifestResult = await manifestFile.async("text").then((manifest) => {
|
225
|
+
return manifest.split("\n").map((line) => {
|
226
|
+
const index2 = line.indexOf(":");
|
227
|
+
return [line.substring(0, index2).trim(), line.substring(index2 + 1).trim()];
|
228
|
+
}).filter((x) => x[0].length > 0 || x[1].length > 0);
|
229
|
+
}).then(Object.fromEntries).then(ManifestSchema.safeParseAsync);
|
230
|
+
if (!manifestResult.success) {
|
231
|
+
result.narErrorCount += 1;
|
232
|
+
console.error({
|
233
|
+
file: file.name,
|
234
|
+
type: "Unable to parse ManifestSchema",
|
235
|
+
error: manifestResult.error
|
236
|
+
});
|
237
|
+
return null;
|
238
|
+
}
|
239
|
+
const extensionManifestFile = zipFile.files["META-INF/docs/extension-manifest.xml"];
|
240
|
+
if (extensionManifestFile == void 0) {
|
241
|
+
result.narErrorCount += 1;
|
242
|
+
console.error({
|
243
|
+
file: file.name,
|
244
|
+
type: "Manifest file does not exist"
|
245
|
+
});
|
246
|
+
return null;
|
247
|
+
}
|
248
|
+
return await extensionManifestFile.async("text").then(async (xml) => {
|
249
|
+
const extensionManifestFile2 = DOMParser.parseFromString(xml, "text/xml");
|
250
|
+
return await readExtensionManifest({
|
251
|
+
file,
|
252
|
+
parseNar,
|
253
|
+
parseExtension,
|
254
|
+
parseAttribute,
|
255
|
+
manifest: manifestResult.data,
|
256
|
+
extensionManifest: extensionManifestFile2
|
257
|
+
});
|
258
|
+
});
|
259
|
+
}).catch((e) => {
|
260
|
+
result.narErrorCount += 1;
|
261
|
+
console.error({
|
262
|
+
fileName: file.name,
|
263
|
+
file,
|
264
|
+
type: "Uncaught Error",
|
265
|
+
error: e
|
266
|
+
});
|
267
|
+
});
|
268
|
+
}
|
269
|
+
setCurrentProgress(files.length, files.length);
|
270
|
+
return result;
|
271
|
+
}
|
272
|
+
var WriteNarsSchema = z.object({
|
273
|
+
nars: NarsSchema,
|
274
|
+
extensions: NarExtensionsSchema,
|
275
|
+
attributes: NarAttributesSchema
|
276
|
+
});
|
277
|
+
export {
|
278
|
+
ManifestSchema,
|
279
|
+
NarAttributeSchema,
|
280
|
+
NarAttributeTypeSchema,
|
281
|
+
NarAttributesSchema,
|
282
|
+
NarExportSchema,
|
283
|
+
NarExtensionProperty,
|
284
|
+
NarExtensionRelationship,
|
285
|
+
NarExtensionSchema,
|
286
|
+
NarExtensionsSchema,
|
287
|
+
NarSchema,
|
288
|
+
NarsSchema,
|
289
|
+
WriteNarsSchema,
|
290
|
+
readNars
|
291
|
+
};
|
292
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/readNars.ts"],"sourcesContent":["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":"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","names":["index","extensionManifestFile"]}
|
package/package.json
CHANGED
@@ -1,14 +1,20 @@
|
|
1
1
|
{
|
2
2
|
"name": "@nf2t/nifitools-js",
|
3
3
|
"private": false,
|
4
|
-
"version": "0.0.
|
4
|
+
"version": "0.0.2",
|
5
5
|
"type": "module",
|
6
6
|
"main": "./dist/main.js",
|
7
7
|
"types": "./dist/main.d.ts",
|
8
|
+
"files": [
|
9
|
+
"./dist",
|
10
|
+
"./src",
|
11
|
+
"./tsconfig.json",
|
12
|
+
"./tsup.config.ts"
|
13
|
+
],
|
8
14
|
"dependencies": {
|
9
15
|
"jszip": "^3.10.1",
|
10
16
|
"zod": "^3.22.4",
|
11
|
-
"@nf2t/flowfiletools-js": "0.0.
|
17
|
+
"@nf2t/flowfiletools-js": "0.0.2"
|
12
18
|
},
|
13
19
|
"devDependencies": {
|
14
20
|
"@types/node": "^22.0.2",
|