@sswroom/sswr 1.6.13 → 1.6.15

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/text.d.ts CHANGED
@@ -12,6 +12,25 @@ export enum LineBreakType
12
12
  CRLF
13
13
  }
14
14
 
15
+ export enum HAlignment
16
+ {
17
+ Unknown,
18
+ Left,
19
+ Center,
20
+ Right,
21
+ Justify,
22
+ Fill
23
+ }
24
+
25
+ export enum VAlignment
26
+ {
27
+ Unknown,
28
+ Top,
29
+ Center,
30
+ Bottom,
31
+ Justify
32
+ }
33
+
15
34
  export function zeroPad(val: string | number, ndigits: number): string;
16
35
  export function isInteger(s: string): boolean;
17
36
  export function isUInteger(s: string): boolean;
package/text.js CHANGED
@@ -13,6 +13,23 @@ export const LineBreakType = {
13
13
  CRLF: "\r\n"
14
14
  };
15
15
 
16
+ export const HAlignment = {
17
+ Unknown: 0,
18
+ Left: 1,
19
+ Center: 2,
20
+ Right: 3,
21
+ Justify: 4,
22
+ Fill: 5
23
+ }
24
+
25
+ export const VAlignment = {
26
+ Unknown: 0,
27
+ Top: 1,
28
+ Center: 2,
29
+ Bottom: 3,
30
+ Justify: 4
31
+ }
32
+
16
33
  export function zeroPad(val, ndigits)
17
34
  {
18
35
  let s = "" + val;
package/web.d.ts CHANGED
@@ -115,6 +115,8 @@ export function getSelectElement(id: string): HTMLSelectElement;
115
115
  export function getButtonElement(id: string): HTMLButtonElement;
116
116
  export function getDivElement(id: string): HTMLDivElement;
117
117
  export function getSpanElement(id: string): HTMLSpanElement;
118
+ export function getCanvasElement(id: string): HTMLCanvasElement;
119
+ export function getImgElement(id: string): HTMLImageElement;
118
120
  export function getBrowserInfo(): Promise<BrowserInfo>;
119
121
  export function parseUserAgent(userAgent: string): BrowserInfo;
120
122
 
package/web.js CHANGED
@@ -1006,6 +1006,34 @@ export function getSpanElement(id)
1006
1006
  throw new Error("Element with id \""+id+"\" is not a span");
1007
1007
  }
1008
1008
 
1009
+ /**
1010
+ * @param {string} id
1011
+ * @returns {HTMLCanvasElement}
1012
+ */
1013
+ export function getCanvasElement(id)
1014
+ {
1015
+ let ele = document.getElementById(id);
1016
+ if (ele == null)
1017
+ throw new Error("Element with id \""+id+"\" not found");
1018
+ if (ele instanceof HTMLCanvasElement)
1019
+ return ele;
1020
+ throw new Error("Element with id \""+id+"\" is not a canvas");
1021
+ }
1022
+
1023
+ /**
1024
+ * @param {string} id
1025
+ * @returns {HTMLImageElement}
1026
+ */
1027
+ export function getImgElement(id)
1028
+ {
1029
+ let ele = document.getElementById(id);
1030
+ if (ele == null)
1031
+ throw new Error("Element with id \""+id+"\" not found");
1032
+ if (ele instanceof HTMLImageElement)
1033
+ return ele;
1034
+ throw new Error("Element with id \""+id+"\" is not an img");
1035
+ }
1036
+
1009
1037
  /**
1010
1038
  * @returns {Promise<{os: String,osVer?:string,browser: String,browserVer?: string,devName?:string}>}
1011
1039
  */
package/zip.d.ts ADDED
@@ -0,0 +1,57 @@
1
+ import * as data from "./data";
2
+ import * as hash from "./hash";
3
+
4
+ export enum ZIPOS
5
+ {
6
+ MSDOS,
7
+ Amiga,
8
+ OpenVMS,
9
+ UNIX,
10
+ VM_CMS,
11
+ Atari_ST,
12
+ OS2_HPFS,
13
+ Macintosh,
14
+ ZSystem,
15
+ CP_M,
16
+ NTFS,
17
+ MVS,
18
+ VSE,
19
+ AcornRisc,
20
+ VFAT,
21
+ AlternateMVS,
22
+ BeOS,
23
+ Tandem,
24
+ OS400,
25
+ OSX
26
+ };
27
+
28
+ declare class FileInfo
29
+ {
30
+ fileName: string;
31
+ fileOfst: number;
32
+ fileModTime: data.Timestamp;
33
+ fileCreateTime: data.Timestamp;
34
+ fileAccessTime: data.Timestamp;
35
+ crcVal: number;
36
+ uncompSize: number;
37
+ compSize: number;
38
+ compMeth: number;
39
+ fileAttr: number;
40
+ }
41
+
42
+ export class ZIPBuilder
43
+ {
44
+ crc: hash.CRC32RIEEE;
45
+ builder: data.ByteBuilder;
46
+ baseOfst: number;
47
+ currOfst: number;
48
+ files: FileInfo[];
49
+ osType: ZIPOS;
50
+
51
+ constructor(os: ZIPOS);
52
+
53
+ addFile(fileName: string, fileContent: Uint8Array, lastModTime: data.Timestamp, lastAccessTime: data.Timestamp, createTime: data.Timestamp, unixAttr: number): boolean;
54
+ addDir(dirName: string, lastModTime: data.Timestamp, lastAccessTime: data.Timestamp, createTime: data.Timestamp, unixAttr: number): boolean;
55
+ addDeflate(fileName: string, buff: Uint8Array, decSize: number, crcVal: number, lastModTime: data.Timestamp, lastAccessTime: data.Timestamp, createTime: data.Timestamp, unixAttr: number): boolean;
56
+ finalize(): Uint8Array;
57
+ };
package/zip.js ADDED
@@ -0,0 +1,474 @@
1
+ import * as data from "./data.js";
2
+ import * as hash from "./hash.js"
3
+ import pako from "../../pako/dist/pako.esm.mjs";
4
+
5
+ const VERBOSE = true;
6
+ const ZIPVER = 63;
7
+
8
+
9
+ export const ZIPOS = {
10
+ MSDOS: 0,
11
+ Amiga: 1,
12
+ OpenVMS: 2,
13
+ UNIX: 3,
14
+ VM_CMS: 4,
15
+ Atari_ST: 5,
16
+ OS2_HPFS: 6,
17
+ Macintosh: 7,
18
+ ZSystem: 8,
19
+ CP_M: 9,
20
+ NTFS: 10,
21
+ MVS: 11,
22
+ VSE: 12,
23
+ AcornRisc: 13,
24
+ VFAT: 14,
25
+ AlternateMVS: 15,
26
+ BeOS: 16,
27
+ Tandem: 17,
28
+ OS400: 18,
29
+ OSX: 19
30
+ };
31
+
32
+ class FileInfo
33
+ {
34
+ /**
35
+ * @param {string} fileName
36
+ * @param {data.Timestamp} fileModTime
37
+ */
38
+ constructor(fileName, fileModTime)
39
+ {
40
+ this.fileName = fileName;
41
+ this.fileOfst = 0;
42
+ this.fileModTime = fileModTime;
43
+ /** @type {data.Timestamp|null} */
44
+ this.fileCreateTime = null;
45
+ /** @type {data.Timestamp|null} */
46
+ this.fileAccessTime = null;
47
+ this.crcVal = 0;
48
+ this.uncompSize = 0;
49
+ this.compSize = 0;
50
+ this.compMeth = 0;
51
+ this.fileAttr = 0;
52
+ }
53
+ }
54
+
55
+ export class ZIPBuilder
56
+ {
57
+ /**
58
+ * @param {number} os
59
+ */
60
+ constructor(os)
61
+ {
62
+ this.builder = new data.ByteBuilder();
63
+ this.currOfst = 0;
64
+ this.osType = os;
65
+ /** @type {FileInfo[]} */
66
+ this.files = [];
67
+ this.finalized = false;
68
+ this.crc = new hash.CRC32R(null);
69
+ }
70
+
71
+ /**
72
+ * @param {string} fileName
73
+ * @param {Uint8Array} fileContent
74
+ * @param {data.Timestamp} lastModTime
75
+ * @param {data.Timestamp} lastAccessTime
76
+ * @param {data.Timestamp} createTime
77
+ * @param {number} unixAttr
78
+ */
79
+ addFile(fileName, fileContent, lastModTime, lastAccessTime, createTime, unixAttr)
80
+ {
81
+ if (this.finalized)
82
+ return false;
83
+ let hdrLen;
84
+ let compSize;
85
+ let compData = pako.deflateRaw(fileContent);
86
+ let compress;
87
+ if (compData == null || compData.length >= fileContent.length)
88
+ {
89
+ compSize = fileContent.length;
90
+ compress = false;
91
+
92
+ }
93
+ else
94
+ {
95
+ compSize = compData.length;
96
+ compress = true;
97
+ }
98
+ let crcVal = this.crc.calcDirect(fileContent.buffer);
99
+ //Data::DateTime dt(lastModTime.inst, lastModTime.tzQhr);
100
+ let fileNameLen = this.builder.writeUTF8(this.currOfst + 30, fileName);
101
+ this.builder.writeInt32(this.currOfst + 0, 0x04034b50, true);
102
+ this.builder.writeInt8(this.currOfst + 4, 20); //Verison (2.0)
103
+ this.builder.writeInt8(this.currOfst + 5, this.osType);
104
+ this.builder.writeInt16(this.currOfst + 6, 0, true);
105
+ this.builder.writeInt16(this.currOfst + 8, 0x8, true);
106
+ this.builder.writeInt16(this.currOfst + 10, lastModTime.toMSDOSTime(), true);
107
+ this.builder.writeInt16(this.currOfst + 12, lastModTime.toMSDOSDate(), true);
108
+ this.builder.writeInt32(this.currOfst + 14, crcVal, true);
109
+ this.builder.writeInt32(this.currOfst + 18, compSize, true);
110
+ this.builder.writeInt32(this.currOfst + 22, fileContent.length, true);
111
+ this.builder.writeInt16(this.currOfst + 26, fileNameLen, true);
112
+ this.builder.writeInt16(this.currOfst + 28, 0, true);
113
+ hdrLen = 30 + fileNameLen;
114
+ if (compSize >= 0xFFFFFFFF || fileContent.length >= 0xFFFFFFFF)
115
+ {
116
+ let len = 4;
117
+ this.builder.writeInt16(this.currOfst + hdrLen, 1, true);
118
+ if (fileContent.length >= 0xffffffff)
119
+ {
120
+ this.builder.writeInt64(this.currOfst + hdrLen + len, BigInt(fileContent.length), true);
121
+ this.builder.writeInt32(this.currOfst + 22, 0xffffffff, true);
122
+ len += 8;
123
+ }
124
+ if (compSize >= 0xffffffff)
125
+ {
126
+ if (compSize >= fileContent.length)
127
+ {
128
+ this.builder.writeInt64(this.currOfst + hdrLen + len, BigInt(fileContent.length), true);
129
+ }
130
+ else
131
+ {
132
+ this.builder.writeInt64(this.currOfst + hdrLen + len, BigInt(compSize), true);
133
+ }
134
+ this.builder.writeInt32(this.currOfst + 18, 0xffffffff, true);
135
+ len += 8;
136
+ }
137
+ this.builder.writeInt16(this.currOfst + 28, len, true);
138
+ this.builder.writeInt16(this.currOfst + hdrLen + 2, len - 4, true);
139
+ hdrLen += len;
140
+ }
141
+
142
+ let file = new FileInfo(fileName, lastModTime);
143
+ file.fileCreateTime = createTime;
144
+ file.fileAccessTime = lastAccessTime;
145
+ file.crcVal = crcVal;
146
+ file.uncompSize = fileContent.length;
147
+ file.compMeth = 8;
148
+ file.compSize = compSize;
149
+ if (this.osType == ZIPOS.UNIX)
150
+ {
151
+ file.fileAttr = unixAttr << 16;
152
+ }
153
+ else if (unixAttr == 0)
154
+ {
155
+ file.fileAttr = 0;
156
+ }
157
+ else
158
+ {
159
+ if (unixAttr & 0x200)
160
+ {
161
+ file.fileAttr = 0;
162
+ }
163
+ else
164
+ {
165
+ file.fileAttr = 1;
166
+ }
167
+ }
168
+ file.fileOfst = this.currOfst;
169
+ this.files.push(file);
170
+ if (compress == false || compData == null || !(compData instanceof Uint8Array))
171
+ {
172
+ this.builder.writeInt16(this.currOfst + 8, 0x0, true);
173
+ this.builder.writeInt32(this.currOfst + 18, fileContent.length, true);
174
+ file.compMeth = 0;
175
+ file.compSize = fileContent.length;
176
+ this.currOfst += hdrLen;
177
+ this.builder.writeUInt8Array(this.currOfst, fileContent);
178
+ this.currOfst += fileContent.length;
179
+ }
180
+ else
181
+ {
182
+ this.currOfst += hdrLen;
183
+ this.builder.writeUInt8Array(this.currOfst, compData);
184
+ this.currOfst += compData.length;
185
+ }
186
+ return true;
187
+ }
188
+
189
+ /**
190
+ * @param {string} dirName
191
+ * @param {data.Timestamp} lastModTime
192
+ * @param {data.Timestamp} lastAccessTime
193
+ * @param {data.Timestamp} createTime
194
+ * @param {number} unixAttr
195
+ */
196
+ addDir(dirName, lastModTime, lastAccessTime, createTime, unixAttr)
197
+ {
198
+ if (this.finalized)
199
+ return false;
200
+ if (!dirName.endsWith('/'))
201
+ return false;
202
+
203
+ let hdrLen;
204
+ let dirNameLen = this.builder.writeUTF8(this.currOfst + 30, dirName);
205
+ this.builder.writeInt32(this.currOfst + 0, 0x04034b50, true);
206
+ this.builder.writeInt8(this.currOfst + 4, 45);
207
+ this.builder.writeInt8(this.currOfst + 5, this.osType);
208
+ this.builder.writeInt16(this.currOfst + 6, 0, true);
209
+ this.builder.writeInt16(this.currOfst + 8, 0, true);
210
+ this.builder.writeInt16(this.currOfst + 10, lastModTime.toMSDOSTime(), true);
211
+ this.builder.writeInt16(this.currOfst + 12, lastModTime.toMSDOSDate(), true);
212
+ this.builder.writeInt32(this.currOfst + 14, 0, true);
213
+ this.builder.writeInt32(this.currOfst + 18, 0, true);
214
+ this.builder.writeInt32(this.currOfst + 22, 0, true);
215
+ this.builder.writeInt16(this.currOfst + 26, dirNameLen, true);
216
+ this.builder.writeInt16(this.currOfst + 28, 0, true);
217
+ hdrLen = 30 + dirNameLen;
218
+
219
+ let file = new FileInfo(dirName, lastModTime);
220
+ file.fileCreateTime = createTime;
221
+ file.fileAccessTime = lastAccessTime;
222
+ file.crcVal = 0;
223
+ file.uncompSize = 0;
224
+ file.compMeth = 0;
225
+ file.compSize = 0;
226
+ if (this.osType == ZIPOS.UNIX)
227
+ {
228
+ file.fileAttr = (unixAttr << 16) | 0x10;
229
+ }
230
+ else if (unixAttr == 0)
231
+ {
232
+ file.fileAttr = 0x10;
233
+ }
234
+ else
235
+ {
236
+ if (unixAttr & 0x200)
237
+ {
238
+ file.fileAttr = 0x10;
239
+ }
240
+ else
241
+ {
242
+ file.fileAttr = 0x11;
243
+ }
244
+ }
245
+ file.fileOfst = this.currOfst;
246
+ this.files.push(file);
247
+ this.currOfst += hdrLen;
248
+ return true;
249
+ }
250
+
251
+ /**
252
+ * @param {string} fileName
253
+ * @param {Uint8Array} buff
254
+ * @param {number} decSize
255
+ * @param {number} crcVal
256
+ * @param {data.Timestamp} lastModTime
257
+ * @param {data.Timestamp} lastAccessTime
258
+ * @param {data.Timestamp} createTime
259
+ * @param {number} unixAttr
260
+ */
261
+ addDeflate(fileName, buff, decSize, crcVal, lastModTime, lastAccessTime, createTime, unixAttr)
262
+ {
263
+ if (this.finalized)
264
+ return false;
265
+ let hdrLen;
266
+ //Data::DateTime dt(lastModTime.inst, lastModTime.tzQhr);
267
+ let fileNameLen = this.builder.writeUTF8(this.currOfst + 30, fileName);
268
+ this.builder.writeInt32(this.currOfst + 0, 0x04034b50, true);
269
+ this.builder.writeInt8(this.currOfst + 4, 20); //Verison (2.0)
270
+ this.builder.writeInt8(this.currOfst + 5, this.osType);
271
+ this.builder.writeInt16(this.currOfst + 6, 0, true);
272
+ this.builder.writeInt16(this.currOfst + 8, 0x8, true);
273
+ this.builder.writeInt16(this.currOfst + 10, lastModTime.toMSDOSTime(), true);
274
+ this.builder.writeInt16(this.currOfst + 12, lastModTime.toMSDOSDate(), true);
275
+ this.builder.writeInt32(this.currOfst + 14, crcVal, true);
276
+ this.builder.writeInt32(this.currOfst + 18, buff.length, true);
277
+ this.builder.writeInt32(this.currOfst + 22, decSize, true);
278
+ this.builder.writeInt16(this.currOfst + 26, fileNameLen, true);
279
+ this.builder.writeInt16(this.currOfst + 28, 0, true);
280
+ hdrLen = 30 + fileNameLen;
281
+ if (buff.length >= 0xFFFFFFFF || decSize >= 0xFFFFFFFF)
282
+ {
283
+ let len = 4;
284
+ this.builder.writeInt16(this.currOfst + hdrLen, 1, true);
285
+ if (decSize >= 0xffffffff)
286
+ {
287
+ this.builder.writeInt64(this.currOfst + hdrLen + len, BigInt(decSize), true);
288
+ this.builder.writeInt32(this.currOfst + 22, 0xffffffff, true);
289
+ len += 8;
290
+ }
291
+ if (buff.length >= 0xffffffff)
292
+ {
293
+ this.builder.writeInt64(this.currOfst + hdrLen + len, BigInt(buff.length), true);
294
+ this.builder.writeInt32(this.currOfst + 18, 0xffffffff, true);
295
+ len += 8;
296
+ }
297
+ this.builder.writeInt16(this.currOfst + 28, len, true);
298
+ this.builder.writeInt16(this.currOfst + hdrLen + 2, len - 4, true);
299
+ hdrLen += len;
300
+ }
301
+
302
+ let file = new FileInfo(fileName, lastModTime);
303
+ file.fileCreateTime = createTime;
304
+ file.fileAccessTime = lastAccessTime;
305
+ file.crcVal = crcVal;
306
+ file.uncompSize = decSize;
307
+ file.compMeth = 8;
308
+ file.compSize = buff.length;
309
+ if (this.osType == ZIPOS.UNIX)
310
+ {
311
+ file.fileAttr = unixAttr << 16;
312
+ }
313
+ else if (unixAttr == 0)
314
+ {
315
+ file.fileAttr = 0;
316
+ }
317
+ else
318
+ {
319
+ if (unixAttr & 0x200)
320
+ {
321
+ file.fileAttr = 0;
322
+ }
323
+ else
324
+ {
325
+ file.fileAttr = 1;
326
+ }
327
+ }
328
+ file.fileOfst = this.currOfst;
329
+ this.files.push(file);
330
+ this.currOfst += hdrLen;
331
+ this.builder.writeUInt8Array(this.currOfst, buff);
332
+ this.currOfst += buff.length;
333
+ return true;
334
+ }
335
+
336
+ finalize()
337
+ {
338
+ if (!this.finalized)
339
+ {
340
+ this.finalized = true;
341
+
342
+ let cdStart = this.currOfst;
343
+ let file;
344
+ let hdrLen;
345
+ let cdLen = 0;
346
+ let i = 0;
347
+ let j = this.files.length;
348
+ let minVer;
349
+ while (i < j)
350
+ {
351
+ file = this.files[i];
352
+ minVer = 20;
353
+ let fileNameLen = this.builder.writeUTF8(this.currOfst + 46, file.fileName);
354
+ this.builder.writeInt32(this.currOfst + 0, 0x02014b50, true);
355
+ this.builder.writeInt8(this.currOfst + 4, ZIPVER);
356
+ this.builder.writeInt8(this.currOfst + 5, this.osType);
357
+ this.builder.writeInt8(this.currOfst + 7, this.osType);
358
+ this.builder.writeInt16(this.currOfst + 8, 0, true); //General purpose flag
359
+ this.builder.writeInt16(this.currOfst + 10, file.compMeth, true);
360
+ this.builder.writeInt16(this.currOfst + 12, file.fileModTime.toMSDOSTime(), true);
361
+ this.builder.writeInt16(this.currOfst + 14, file.fileModTime.toMSDOSDate(), true);
362
+ this.builder.writeInt32(this.currOfst + 16, file.crcVal, true);
363
+ this.builder.writeInt32(this.currOfst + 20, file.compSize, true);
364
+ this.builder.writeInt32(this.currOfst + 24, file.uncompSize, true);
365
+ this.builder.writeInt16(this.currOfst + 28, fileNameLen, true);
366
+ this.builder.writeInt16(this.currOfst + 30, 0, true); //extra field length
367
+ this.builder.writeInt16(this.currOfst + 32, 0, true); //File comment length
368
+ this.builder.writeInt16(this.currOfst + 34, 0, true); //Disk number where file starts
369
+ this.builder.writeInt16(this.currOfst + 36, 0, true); //Internal file attributes
370
+ this.builder.writeInt32(this.currOfst + 38, file.fileAttr, true); //External file attributes
371
+ this.builder.writeInt32(this.currOfst + 42, file.fileOfst, true);
372
+ hdrLen = 46 + fileNameLen;
373
+ if (file.compSize >= 0xFFFFFFFF || file.fileOfst >= 0xFFFFFFFF || file.uncompSize >= 0xFFFFFFFF)
374
+ {
375
+ let len = 0;
376
+ this.builder.writeInt16(this.currOfst + hdrLen, 1, true);
377
+ if (file.uncompSize >= 0xFFFFFFFFn)
378
+ {
379
+ this.builder.writeInt64(this.currOfst + hdrLen + 4 + len, BigInt(file.uncompSize), true);
380
+ this.builder.writeInt32(this.currOfst + 24, 0xffffffff, true);
381
+ len += 8;
382
+ }
383
+ if (file.compSize >= 0xFFFFFFFFn)
384
+ {
385
+ this.builder.writeInt64(this.currOfst + hdrLen + 4 + len, BigInt(file.compSize), true);
386
+ this.builder.writeInt32(this.currOfst + 20, 0xffffffff, true);
387
+ len += 8;
388
+ }
389
+ if (file.fileOfst >= 0xFFFFFFFFn)
390
+ {
391
+ this.builder.writeInt64(this.currOfst + hdrLen + 4 + len, BigInt(file.fileOfst), true);
392
+ this.builder.writeInt32(this.currOfst + 42, 0xffffffff, true);
393
+ len += 8;
394
+ }
395
+ this.builder.writeInt16(this.currOfst + hdrLen + 2, len, true);
396
+ hdrLen += 4 + len;
397
+ }
398
+ if (file.fileModTime != null && file.fileAccessTime != null && file.fileCreateTime != null)
399
+ {
400
+ if (minVer < 45)
401
+ minVer = 45;
402
+ this.builder.writeInt16(this.currOfst + hdrLen, 10, true);
403
+ this.builder.writeInt16(this.currOfst + hdrLen + 2, 32, true);
404
+ this.builder.writeInt32(this.currOfst + hdrLen + 4, 0, true);
405
+ this.builder.writeInt16(this.currOfst + hdrLen + 8, 1, true);
406
+ this.builder.writeInt16(this.currOfst + hdrLen + 10, 24, true);
407
+ this.builder.writeInt64(this.currOfst + hdrLen + 12, file.fileModTime.toFILETIME(), true);
408
+ this.builder.writeInt64(this.currOfst + hdrLen + 20, file.fileAccessTime.toFILETIME(), true);
409
+ this.builder.writeInt64(this.currOfst + hdrLen + 28, file.fileCreateTime.toFILETIME(), true);
410
+ hdrLen += 36;
411
+ }
412
+ this.builder.writeInt16(this.currOfst + 30, hdrLen - 46 - fileNameLen, true);
413
+ this.builder.writeInt8(this.currOfst + 6, minVer);
414
+
415
+ this.currOfst += hdrLen;
416
+ cdLen += hdrLen;
417
+
418
+ i++;
419
+ }
420
+ if (this.currOfst >= 0xffffffff || j >= 0xffff)
421
+ {
422
+ let cdOfst = this.currOfst;
423
+ this.builder.writeInt32(this.currOfst + 0, 0x06064b50, true); //Record Type (Zip64 End of central directory record)
424
+ this.builder.writeInt64(this.currOfst + 4, 44n, true); //Size of zip64 end of central directory record
425
+ this.builder.writeInt16(this.currOfst + 12, ZIPVER, true); //Version made by
426
+ this.builder.writeInt16(this.currOfst + 14, 45, true); //Version needed to extract
427
+ this.builder.writeInt32(this.currOfst + 16, 0, true); //Number of this disk
428
+ this.builder.writeInt32(this.currOfst + 20, 0, true); //Number of the disk with the start of the central directory
429
+ this.builder.writeInt64(this.currOfst + 24, BigInt(j), true); //Total number of entries in the central directory on this disk
430
+ this.builder.writeInt64(this.currOfst + 32, BigInt(j), true); //Total number of entries in the central directory
431
+ this.builder.writeInt64(this.currOfst + 40, BigInt(cdLen), true); //Size of central directory
432
+ this.builder.writeInt64(this.currOfst + 48, BigInt(cdStart), true); //Offset of start of central directory with respect to the starting disk number
433
+ this.currOfst += 56;
434
+
435
+ this.builder.writeInt32(this.currOfst + 0, 0x07064b50, true); //Record Type (Zip64 end of central directory locator)
436
+ this.builder.writeInt32(this.currOfst + 4, 0, true); //Number of the disk with the start of the zip64 end of central directory
437
+ this.builder.writeInt64(this.currOfst + 8, BigInt(cdOfst), true); //Relative offset of the zip64 end of central directory record
438
+ this.builder.writeInt32(this.currOfst + 16, 1, true); //Total number of disks
439
+ this.currOfst += 20;
440
+
441
+ this.builder.writeInt32(this.currOfst + 0, 0x06054b50, true); //Record Type (End of central directory record)
442
+ this.builder.writeInt16(this.currOfst + 4, 0, true); //Number of this disk
443
+ this.builder.writeInt16(this.currOfst + 6, 0, true); //Disk where central directory starts
444
+ if (j >= 0xffff)
445
+ {
446
+ this.builder.writeInt16(this.currOfst + 8, 0xffff, true); //Number of central directory of this disk
447
+ this.builder.writeInt16(this.currOfst + 10, 0xffff, true); //Total number of central directory records
448
+ }
449
+ else
450
+ {
451
+ this.builder.writeInt16(this.currOfst + 8, j, true); //Number of central directory of this disk
452
+ this.builder.writeInt16(this.currOfst + 10, j, true); //Total number of central directory records
453
+ }
454
+ this.builder.writeInt32(this.currOfst + 12, cdLen, true); //Size of central directory
455
+ this.builder.writeInt32(this.currOfst + 16, 0xffffffff, true); //Offset of start of central directory
456
+ this.builder.writeInt16(this.currOfst + 20, 0, true); //Comment Length
457
+ this.currOfst += 22;
458
+ }
459
+ else
460
+ {
461
+ this.builder.writeInt32(this.currOfst + 0, 0x06054b50, true); //Record Type (End of central directory record)
462
+ this.builder.writeInt16(this.currOfst + 4, 0, true); //Number of this disk
463
+ this.builder.writeInt16(this.currOfst + 6, 0, true); //Disk where central directory starts
464
+ this.builder.writeInt16(this.currOfst + 8, j, true); //Number of central directory of this disk
465
+ this.builder.writeInt16(this.currOfst + 10, j, true); //Total number of central directory records
466
+ this.builder.writeInt32(this.currOfst + 12, cdLen, true); //Size of central directory
467
+ this.builder.writeInt32(this.currOfst + 16, cdStart, true); //Offset of start of central directory
468
+ this.builder.writeInt16(this.currOfst + 20, 0, true); //Comment Length
469
+ this.currOfst += 22;
470
+ }
471
+ }
472
+ return this.builder.build();
473
+ }
474
+ }