@alienkarma/exceljs 4.4.0-fork.1 → 4.4.0-fork.11

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.
@@ -1,27 +1,27 @@
1
1
  "use strict";
2
2
 
3
- const fs = require('fs');
4
- const Archiver = require('archiver');
5
- const StreamBuf = require('../../utils/stream-buf');
6
- const RelType = require('../../xlsx/rel-type');
7
- const StylesXform = require('../../xlsx/xform/style/styles-xform');
8
- const SharedStrings = require('../../utils/shared-strings');
9
- const DefinedNames = require('../../doc/defined-names');
10
- const CoreXform = require('../../xlsx/xform/core/core-xform');
11
- const RelationshipsXform = require('../../xlsx/xform/core/relationships-xform');
12
- const ContentTypesXform = require('../../xlsx/xform/core/content-types-xform');
13
- const AppXform = require('../../xlsx/xform/core/app-xform');
14
- const WorkbookXform = require('../../xlsx/xform/book/workbook-xform');
15
- const SharedStringsXform = require('../../xlsx/xform/strings/shared-strings-xform');
16
- const WorksheetWriter = require('./worksheet-writer');
17
- const theme1Xml = require('../../xlsx/xml/theme1.js');
3
+ const fs = require("fs");
4
+ const Archiver = require("@alienkarma/archiver");
5
+ const StreamBuf = require("../../utils/stream-buf");
6
+ const RelType = require("../../xlsx/rel-type");
7
+ const StylesXform = require("../../xlsx/xform/style/styles-xform");
8
+ const SharedStrings = require("../../utils/shared-strings");
9
+ const DefinedNames = require("../../doc/defined-names");
10
+ const CoreXform = require("../../xlsx/xform/core/core-xform");
11
+ const RelationshipsXform = require("../../xlsx/xform/core/relationships-xform");
12
+ const ContentTypesXform = require("../../xlsx/xform/core/content-types-xform");
13
+ const AppXform = require("../../xlsx/xform/core/app-xform");
14
+ const WorkbookXform = require("../../xlsx/xform/book/workbook-xform");
15
+ const SharedStringsXform = require("../../xlsx/xform/strings/shared-strings-xform");
16
+ const WorksheetWriter = require("./worksheet-writer");
17
+ const theme1Xml = require("../../xlsx/xml/theme1.js");
18
18
  class WorkbookWriter {
19
19
  constructor(options) {
20
20
  options = options || {};
21
21
  this.created = options.created || new Date();
22
22
  this.modified = options.modified || this.created;
23
- this.creator = options.creator || 'ExcelJS';
24
- this.lastModifiedBy = options.lastModifiedBy || 'ExcelJS';
23
+ this.creator = options.creator || "ExcelJS";
24
+ this.lastModifiedBy = options.lastModifiedBy || "ExcelJS";
25
25
  this.lastPrinted = options.lastPrinted;
26
26
 
27
27
  // using shared strings creates a smaller xlsx file but may use more memory
@@ -38,7 +38,7 @@ class WorkbookWriter {
38
38
  this.zipOptions = options.zip;
39
39
  this.media = [];
40
40
  this.commentRefs = [];
41
- this.zip = Archiver('zip', this.zipOptions);
41
+ this.zip = Archiver("zip", this.zipOptions);
42
42
  if (options.stream) {
43
43
  this.stream = options.stream;
44
44
  } else if (options.filename) {
@@ -62,8 +62,8 @@ class WorkbookWriter {
62
62
  this.zip.append(stream, {
63
63
  name: path
64
64
  });
65
- stream.on('finish', () => {
66
- stream.emit('zipped');
65
+ stream.on("finish", () => {
66
+ stream.emit("zipped");
67
67
  });
68
68
  return stream;
69
69
  }
@@ -71,7 +71,7 @@ class WorkbookWriter {
71
71
  const commitWorksheet = function (worksheet) {
72
72
  if (!worksheet.committed) {
73
73
  return new Promise(resolve => {
74
- worksheet.stream.on('zipped', () => {
74
+ worksheet.stream.on("zipped", () => {
75
75
  resolve();
76
76
  });
77
77
  worksheet.commit();
@@ -108,7 +108,7 @@ class WorkbookWriter {
108
108
  addImage(image) {
109
109
  const id = this.media.length;
110
110
  const medium = Object.assign({}, image, {
111
- type: 'image',
111
+ type: "image",
112
112
  name: `image${id}.${image.extension}`
113
113
  });
114
114
  this.media.push(medium);
@@ -125,7 +125,7 @@ class WorkbookWriter {
125
125
  const useSharedStrings = options.useSharedStrings !== undefined ? options.useSharedStrings : this.useSharedStrings;
126
126
  if (options.tabColor) {
127
127
  // eslint-disable-next-line no-console
128
- console.trace('tabColor option has moved to { properties: tabColor: {...} }');
128
+ console.trace("tabColor option has moved to { properties: tabColor: {...} }");
129
129
  options.properties = Object.assign({
130
130
  tabColor: options.tabColor
131
131
  }, options.properties);
@@ -151,10 +151,10 @@ class WorkbookWriter {
151
151
  if (id === undefined) {
152
152
  return this._worksheets.find(() => true);
153
153
  }
154
- if (typeof id === 'number') {
154
+ if (typeof id === "number") {
155
155
  return this._worksheets[id];
156
156
  }
157
- if (typeof id === 'string') {
157
+ if (typeof id === "string") {
158
158
  return this._worksheets.find(worksheet => worksheet && worksheet.name === id);
159
159
  }
160
160
  return undefined;
@@ -162,7 +162,7 @@ class WorkbookWriter {
162
162
  addStyles() {
163
163
  return new Promise(resolve => {
164
164
  this.zip.append(this.styles.xml, {
165
- name: 'xl/styles.xml'
165
+ name: "xl/styles.xml"
166
166
  });
167
167
  resolve();
168
168
  });
@@ -170,7 +170,7 @@ class WorkbookWriter {
170
170
  addThemes() {
171
171
  return new Promise(resolve => {
172
172
  this.zip.append(theme1Xml, {
173
- name: 'xl/theme/theme1.xml'
173
+ name: "xl/theme/theme1.xml"
174
174
  });
175
175
  resolve();
176
176
  });
@@ -179,20 +179,20 @@ class WorkbookWriter {
179
179
  return new Promise(resolve => {
180
180
  const xform = new RelationshipsXform();
181
181
  const xml = xform.toXml([{
182
- Id: 'rId1',
182
+ Id: "rId1",
183
183
  Type: RelType.OfficeDocument,
184
- Target: 'xl/workbook.xml'
184
+ Target: "xl/workbook.xml"
185
185
  }, {
186
- Id: 'rId2',
186
+ Id: "rId2",
187
187
  Type: RelType.CoreProperties,
188
- Target: 'docProps/core.xml'
188
+ Target: "docProps/core.xml"
189
189
  }, {
190
- Id: 'rId3',
190
+ Id: "rId3",
191
191
  Type: RelType.ExtenderProperties,
192
- Target: 'docProps/app.xml'
192
+ Target: "docProps/app.xml"
193
193
  }]);
194
194
  this.zip.append(xml, {
195
- name: '/_rels/.rels'
195
+ name: "/_rels/.rels"
196
196
  });
197
197
  resolve();
198
198
  });
@@ -208,14 +208,14 @@ class WorkbookWriter {
208
208
  const xform = new ContentTypesXform();
209
209
  const xml = xform.toXml(model);
210
210
  this.zip.append(xml, {
211
- name: '[Content_Types].xml'
211
+ name: "[Content_Types].xml"
212
212
  });
213
213
  resolve();
214
214
  });
215
215
  }
216
216
  addMedia() {
217
217
  return Promise.all(this.media.map(medium => {
218
- if (medium.type === 'image') {
218
+ if (medium.type === "image") {
219
219
  const filename = `xl/media/${medium.name}`;
220
220
  if (medium.filename) {
221
221
  return this.zip.file(medium.filename, {
@@ -229,14 +229,14 @@ class WorkbookWriter {
229
229
  }
230
230
  if (medium.base64) {
231
231
  const dataimg64 = medium.base64;
232
- const content = dataimg64.substring(dataimg64.indexOf(',') + 1);
232
+ const content = dataimg64.substring(dataimg64.indexOf(",") + 1);
233
233
  return this.zip.append(content, {
234
234
  name: filename,
235
235
  base64: true
236
236
  });
237
237
  }
238
238
  }
239
- throw new Error('Unsupported media');
239
+ throw new Error("Unsupported media");
240
240
  }));
241
241
  }
242
242
  addApp() {
@@ -247,7 +247,7 @@ class WorkbookWriter {
247
247
  const xform = new AppXform();
248
248
  const xml = xform.toXml(model);
249
249
  this.zip.append(xml, {
250
- name: 'docProps/app.xml'
250
+ name: "docProps/app.xml"
251
251
  });
252
252
  resolve();
253
253
  });
@@ -257,7 +257,7 @@ class WorkbookWriter {
257
257
  const coreXform = new CoreXform();
258
258
  const xml = coreXform.toXml(this);
259
259
  this.zip.append(xml, {
260
- name: 'docProps/core.xml'
260
+ name: "docProps/core.xml"
261
261
  });
262
262
  resolve();
263
263
  });
@@ -268,7 +268,7 @@ class WorkbookWriter {
268
268
  const sharedStringsXform = new SharedStringsXform();
269
269
  const xml = sharedStringsXform.toXml(this.sharedStrings);
270
270
  this.zip.append(xml, {
271
- name: '/xl/sharedStrings.xml'
271
+ name: "/xl/sharedStrings.xml"
272
272
  });
273
273
  resolve();
274
274
  });
@@ -280,17 +280,17 @@ class WorkbookWriter {
280
280
  const relationships = [{
281
281
  Id: `rId${count++}`,
282
282
  Type: RelType.Styles,
283
- Target: 'styles.xml'
283
+ Target: "styles.xml"
284
284
  }, {
285
285
  Id: `rId${count++}`,
286
286
  Type: RelType.Theme,
287
- Target: 'theme/theme1.xml'
287
+ Target: "theme/theme1.xml"
288
288
  }];
289
289
  if (this.sharedStrings.count) {
290
290
  relationships.push({
291
291
  Id: `rId${count++}`,
292
292
  Type: RelType.SharedStrings,
293
- Target: 'sharedStrings.xml'
293
+ Target: "sharedStrings.xml"
294
294
  });
295
295
  }
296
296
  this._worksheets.forEach(worksheet => {
@@ -307,7 +307,7 @@ class WorkbookWriter {
307
307
  const xform = new RelationshipsXform();
308
308
  const xml = xform.toXml(relationships);
309
309
  this.zip.append(xml, {
310
- name: '/xl/_rels/workbook.xml.rels'
310
+ name: "/xl/_rels/workbook.xml.rels"
311
311
  });
312
312
  resolve();
313
313
  });
@@ -327,18 +327,18 @@ class WorkbookWriter {
327
327
  const xform = new WorkbookXform();
328
328
  xform.prepare(model);
329
329
  zip.append(xform.toXml(model), {
330
- name: '/xl/workbook.xml'
330
+ name: "/xl/workbook.xml"
331
331
  });
332
332
  resolve();
333
333
  });
334
334
  }
335
335
  _finalize() {
336
336
  return new Promise((resolve, reject) => {
337
- this.stream.on('error', reject);
338
- this.stream.on('finish', () => {
337
+ this.stream.on("error", reject);
338
+ this.stream.on("finish", () => {
339
339
  resolve(this);
340
340
  });
341
- this.zip.on('error', reject);
341
+ this.zip.on("error", reject);
342
342
  this.zip.finalize();
343
343
  });
344
344
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workbook-writer.js","names":["fs","require","Archiver","StreamBuf","RelType","StylesXform","SharedStrings","DefinedNames","CoreXform","RelationshipsXform","ContentTypesXform","AppXform","WorkbookXform","SharedStringsXform","WorksheetWriter","theme1Xml","WorkbookWriter","constructor","options","created","Date","modified","creator","lastModifiedBy","lastPrinted","useSharedStrings","sharedStrings","styles","useStyles","Mock","_definedNames","_worksheets","views","zipOptions","zip","media","commentRefs","stream","filename","createWriteStream","pipe","promise","Promise","all","addThemes","addOfficeRels","definedNames","_openStream","path","bufSize","batch","append","name","on","emit","_commitWorksheets","commitWorksheet","worksheet","committed","resolve","commit","promises","map","length","addMedia","addContentTypes","addApp","addCore","addSharedStrings","addStyles","addWorkbookRels","addWorkbook","_finalize","nextId","i","addImage","image","id","medium","Object","assign","type","extension","push","getImage","addWorksheet","undefined","tabColor","console","trace","properties","workbook","state","pageSetup","autoFilter","headerFooter","getWorksheet","find","xml","xform","toXml","Id","Type","OfficeDocument","Target","CoreProperties","ExtenderProperties","model","worksheets","filter","Boolean","file","buffer","base64","dataimg64","content","substring","indexOf","Error","coreXform","count","sharedStringsXform","relationships","Styles","Theme","forEach","rId","Worksheet","calcProperties","prepare","reject","finalize","module","exports"],"sources":["../../../../lib/stream/xlsx/workbook-writer.js"],"sourcesContent":["const fs = require('fs');\r\nconst Archiver = require('archiver');\r\n\r\nconst StreamBuf = require('../../utils/stream-buf');\r\n\r\nconst RelType = require('../../xlsx/rel-type');\r\nconst StylesXform = require('../../xlsx/xform/style/styles-xform');\r\nconst SharedStrings = require('../../utils/shared-strings');\r\nconst DefinedNames = require('../../doc/defined-names');\r\n\r\nconst CoreXform = require('../../xlsx/xform/core/core-xform');\r\nconst RelationshipsXform = require('../../xlsx/xform/core/relationships-xform');\r\nconst ContentTypesXform = require('../../xlsx/xform/core/content-types-xform');\r\nconst AppXform = require('../../xlsx/xform/core/app-xform');\r\nconst WorkbookXform = require('../../xlsx/xform/book/workbook-xform');\r\nconst SharedStringsXform = require('../../xlsx/xform/strings/shared-strings-xform');\r\n\r\nconst WorksheetWriter = require('./worksheet-writer');\r\n\r\nconst theme1Xml = require('../../xlsx/xml/theme1.js');\r\n\r\nclass WorkbookWriter {\r\n constructor(options) {\r\n options = options || {};\r\n\r\n this.created = options.created || new Date();\r\n this.modified = options.modified || this.created;\r\n this.creator = options.creator || 'ExcelJS';\r\n this.lastModifiedBy = options.lastModifiedBy || 'ExcelJS';\r\n this.lastPrinted = options.lastPrinted;\r\n\r\n // using shared strings creates a smaller xlsx file but may use more memory\r\n this.useSharedStrings = options.useSharedStrings || false;\r\n this.sharedStrings = new SharedStrings();\r\n\r\n // style manager\r\n this.styles = options.useStyles ? new StylesXform(true) : new StylesXform.Mock(true);\r\n\r\n // defined names\r\n this._definedNames = new DefinedNames();\r\n\r\n this._worksheets = [];\r\n this.views = [];\r\n\r\n this.zipOptions = options.zip;\r\n\r\n this.media = [];\r\n this.commentRefs = [];\r\n\r\n this.zip = Archiver('zip', this.zipOptions);\r\n if (options.stream) {\r\n this.stream = options.stream;\r\n } else if (options.filename) {\r\n this.stream = fs.createWriteStream(options.filename);\r\n } else {\r\n this.stream = new StreamBuf();\r\n }\r\n this.zip.pipe(this.stream);\r\n\r\n // these bits can be added right now\r\n this.promise = Promise.all([this.addThemes(), this.addOfficeRels()]);\r\n }\r\n\r\n get definedNames() {\r\n return this._definedNames;\r\n }\r\n\r\n _openStream(path) {\r\n const stream = new StreamBuf({bufSize: 65536, batch: true});\r\n this.zip.append(stream, {name: path});\r\n stream.on('finish', () => {\r\n stream.emit('zipped');\r\n });\r\n return stream;\r\n }\r\n\r\n _commitWorksheets() {\r\n const commitWorksheet = function(worksheet) {\r\n if (!worksheet.committed) {\r\n return new Promise(resolve => {\r\n worksheet.stream.on('zipped', () => {\r\n resolve();\r\n });\r\n worksheet.commit();\r\n });\r\n }\r\n return Promise.resolve();\r\n };\r\n // if there are any uncommitted worksheets, commit them now and wait\r\n const promises = this._worksheets.map(commitWorksheet);\r\n if (promises.length) {\r\n return Promise.all(promises);\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n async commit() {\r\n // commit all worksheets, then add suplimentary files\r\n await this.promise;\r\n await this.addMedia();\r\n await this._commitWorksheets();\r\n await Promise.all([\r\n this.addContentTypes(),\r\n this.addApp(),\r\n this.addCore(),\r\n this.addSharedStrings(),\r\n this.addStyles(),\r\n this.addWorkbookRels(),\r\n ]);\r\n await this.addWorkbook();\r\n return this._finalize();\r\n }\r\n\r\n get nextId() {\r\n // find the next unique spot to add worksheet\r\n let i;\r\n for (i = 1; i < this._worksheets.length; i++) {\r\n if (!this._worksheets[i]) {\r\n return i;\r\n }\r\n }\r\n return this._worksheets.length || 1;\r\n }\r\n\r\n addImage(image) {\r\n const id = this.media.length;\r\n const medium = Object.assign({}, image, {type: 'image', name: `image${id}.${image.extension}`});\r\n this.media.push(medium);\r\n return id;\r\n }\r\n\r\n getImage(id) {\r\n return this.media[id];\r\n }\r\n\r\n addWorksheet(name, options) {\r\n // it's possible to add a worksheet with different than default\r\n // shared string handling\r\n // in fact, it's even possible to switch it mid-sheet\r\n options = options || {};\r\n const useSharedStrings =\r\n options.useSharedStrings !== undefined ? options.useSharedStrings : this.useSharedStrings;\r\n\r\n if (options.tabColor) {\r\n // eslint-disable-next-line no-console\r\n console.trace('tabColor option has moved to { properties: tabColor: {...} }');\r\n options.properties = Object.assign(\r\n {\r\n tabColor: options.tabColor,\r\n },\r\n options.properties\r\n );\r\n }\r\n\r\n const id = this.nextId;\r\n name = name || `sheet${id}`;\r\n\r\n const worksheet = new WorksheetWriter({\r\n id,\r\n name,\r\n workbook: this,\r\n useSharedStrings,\r\n properties: options.properties,\r\n state: options.state,\r\n pageSetup: options.pageSetup,\r\n views: options.views,\r\n autoFilter: options.autoFilter,\r\n headerFooter: options.headerFooter,\r\n });\r\n\r\n this._worksheets[id] = worksheet;\r\n return worksheet;\r\n }\r\n\r\n getWorksheet(id) {\r\n if (id === undefined) {\r\n return this._worksheets.find(() => true);\r\n }\r\n if (typeof id === 'number') {\r\n return this._worksheets[id];\r\n }\r\n if (typeof id === 'string') {\r\n return this._worksheets.find(worksheet => worksheet && worksheet.name === id);\r\n }\r\n return undefined;\r\n }\r\n\r\n addStyles() {\r\n return new Promise(resolve => {\r\n this.zip.append(this.styles.xml, {name: 'xl/styles.xml'});\r\n resolve();\r\n });\r\n }\r\n\r\n addThemes() {\r\n return new Promise(resolve => {\r\n this.zip.append(theme1Xml, {name: 'xl/theme/theme1.xml'});\r\n resolve();\r\n });\r\n }\r\n\r\n addOfficeRels() {\r\n return new Promise(resolve => {\r\n const xform = new RelationshipsXform();\r\n const xml = xform.toXml([\r\n {Id: 'rId1', Type: RelType.OfficeDocument, Target: 'xl/workbook.xml'},\r\n {Id: 'rId2', Type: RelType.CoreProperties, Target: 'docProps/core.xml'},\r\n {Id: 'rId3', Type: RelType.ExtenderProperties, Target: 'docProps/app.xml'},\r\n ]);\r\n this.zip.append(xml, {name: '/_rels/.rels'});\r\n resolve();\r\n });\r\n }\r\n\r\n addContentTypes() {\r\n return new Promise(resolve => {\r\n const model = {\r\n worksheets: this._worksheets.filter(Boolean),\r\n sharedStrings: this.sharedStrings,\r\n commentRefs: this.commentRefs,\r\n media: this.media,\r\n };\r\n const xform = new ContentTypesXform();\r\n const xml = xform.toXml(model);\r\n this.zip.append(xml, {name: '[Content_Types].xml'});\r\n resolve();\r\n });\r\n }\r\n\r\n addMedia() {\r\n return Promise.all(\r\n this.media.map(medium => {\r\n if (medium.type === 'image') {\r\n const filename = `xl/media/${medium.name}`;\r\n if (medium.filename) {\r\n return this.zip.file(medium.filename, {name: filename});\r\n }\r\n if (medium.buffer) {\r\n return this.zip.append(medium.buffer, {name: filename});\r\n }\r\n if (medium.base64) {\r\n const dataimg64 = medium.base64;\r\n const content = dataimg64.substring(dataimg64.indexOf(',') + 1);\r\n return this.zip.append(content, {name: filename, base64: true});\r\n }\r\n }\r\n throw new Error('Unsupported media');\r\n })\r\n );\r\n }\r\n\r\n addApp() {\r\n return new Promise(resolve => {\r\n const model = {\r\n worksheets: this._worksheets.filter(Boolean),\r\n };\r\n const xform = new AppXform();\r\n const xml = xform.toXml(model);\r\n this.zip.append(xml, {name: 'docProps/app.xml'});\r\n resolve();\r\n });\r\n }\r\n\r\n addCore() {\r\n return new Promise(resolve => {\r\n const coreXform = new CoreXform();\r\n const xml = coreXform.toXml(this);\r\n this.zip.append(xml, {name: 'docProps/core.xml'});\r\n resolve();\r\n });\r\n }\r\n\r\n addSharedStrings() {\r\n if (this.sharedStrings.count) {\r\n return new Promise(resolve => {\r\n const sharedStringsXform = new SharedStringsXform();\r\n const xml = sharedStringsXform.toXml(this.sharedStrings);\r\n this.zip.append(xml, {name: '/xl/sharedStrings.xml'});\r\n resolve();\r\n });\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n addWorkbookRels() {\r\n let count = 1;\r\n const relationships = [\r\n {Id: `rId${count++}`, Type: RelType.Styles, Target: 'styles.xml'},\r\n {Id: `rId${count++}`, Type: RelType.Theme, Target: 'theme/theme1.xml'},\r\n ];\r\n if (this.sharedStrings.count) {\r\n relationships.push({\r\n Id: `rId${count++}`,\r\n Type: RelType.SharedStrings,\r\n Target: 'sharedStrings.xml',\r\n });\r\n }\r\n this._worksheets.forEach(worksheet => {\r\n if (worksheet) {\r\n worksheet.rId = `rId${count++}`;\r\n relationships.push({\r\n Id: worksheet.rId,\r\n Type: RelType.Worksheet,\r\n Target: `worksheets/sheet${worksheet.id}.xml`,\r\n });\r\n }\r\n });\r\n return new Promise(resolve => {\r\n const xform = new RelationshipsXform();\r\n const xml = xform.toXml(relationships);\r\n this.zip.append(xml, {name: '/xl/_rels/workbook.xml.rels'});\r\n resolve();\r\n });\r\n }\r\n\r\n addWorkbook() {\r\n const {zip} = this;\r\n const model = {\r\n worksheets: this._worksheets.filter(Boolean),\r\n definedNames: this._definedNames.model,\r\n views: this.views,\r\n properties: {},\r\n calcProperties: {},\r\n };\r\n\r\n return new Promise(resolve => {\r\n const xform = new WorkbookXform();\r\n xform.prepare(model);\r\n zip.append(xform.toXml(model), {name: '/xl/workbook.xml'});\r\n resolve();\r\n });\r\n }\r\n\r\n _finalize() {\r\n return new Promise((resolve, reject) => {\r\n this.stream.on('error', reject);\r\n this.stream.on('finish', () => {\r\n resolve(this);\r\n });\r\n this.zip.on('error', reject);\r\n\r\n this.zip.finalize();\r\n });\r\n }\r\n}\r\n\r\nmodule.exports = WorkbookWriter;\r\n"],"mappings":";;AAAA,MAAMA,EAAE,GAAGC,OAAO,CAAC,IAAI,CAAC;AACxB,MAAMC,QAAQ,GAAGD,OAAO,CAAC,UAAU,CAAC;AAEpC,MAAME,SAAS,GAAGF,OAAO,CAAC,wBAAwB,CAAC;AAEnD,MAAMG,OAAO,GAAGH,OAAO,CAAC,qBAAqB,CAAC;AAC9C,MAAMI,WAAW,GAAGJ,OAAO,CAAC,qCAAqC,CAAC;AAClE,MAAMK,aAAa,GAAGL,OAAO,CAAC,4BAA4B,CAAC;AAC3D,MAAMM,YAAY,GAAGN,OAAO,CAAC,yBAAyB,CAAC;AAEvD,MAAMO,SAAS,GAAGP,OAAO,CAAC,kCAAkC,CAAC;AAC7D,MAAMQ,kBAAkB,GAAGR,OAAO,CAAC,2CAA2C,CAAC;AAC/E,MAAMS,iBAAiB,GAAGT,OAAO,CAAC,2CAA2C,CAAC;AAC9E,MAAMU,QAAQ,GAAGV,OAAO,CAAC,iCAAiC,CAAC;AAC3D,MAAMW,aAAa,GAAGX,OAAO,CAAC,sCAAsC,CAAC;AACrE,MAAMY,kBAAkB,GAAGZ,OAAO,CAAC,+CAA+C,CAAC;AAEnF,MAAMa,eAAe,GAAGb,OAAO,CAAC,oBAAoB,CAAC;AAErD,MAAMc,SAAS,GAAGd,OAAO,CAAC,0BAA0B,CAAC;AAErD,MAAMe,cAAc,CAAC;EACnBC,WAAWA,CAACC,OAAO,EAAE;IACnBA,OAAO,GAAGA,OAAO,IAAI,CAAC,CAAC;IAEvB,IAAI,CAACC,OAAO,GAAGD,OAAO,CAACC,OAAO,IAAI,IAAIC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAACC,QAAQ,GAAGH,OAAO,CAACG,QAAQ,IAAI,IAAI,CAACF,OAAO;IAChD,IAAI,CAACG,OAAO,GAAGJ,OAAO,CAACI,OAAO,IAAI,SAAS;IAC3C,IAAI,CAACC,cAAc,GAAGL,OAAO,CAACK,cAAc,IAAI,SAAS;IACzD,IAAI,CAACC,WAAW,GAAGN,OAAO,CAACM,WAAW;;IAEtC;IACA,IAAI,CAACC,gBAAgB,GAAGP,OAAO,CAACO,gBAAgB,IAAI,KAAK;IACzD,IAAI,CAACC,aAAa,GAAG,IAAIpB,aAAa,CAAC,CAAC;;IAExC;IACA,IAAI,CAACqB,MAAM,GAAGT,OAAO,CAACU,SAAS,GAAG,IAAIvB,WAAW,CAAC,IAAI,CAAC,GAAG,IAAIA,WAAW,CAACwB,IAAI,CAAC,IAAI,CAAC;;IAEpF;IACA,IAAI,CAACC,aAAa,GAAG,IAAIvB,YAAY,CAAC,CAAC;IAEvC,IAAI,CAACwB,WAAW,GAAG,EAAE;IACrB,IAAI,CAACC,KAAK,GAAG,EAAE;IAEf,IAAI,CAACC,UAAU,GAAGf,OAAO,CAACgB,GAAG;IAE7B,IAAI,CAACC,KAAK,GAAG,EAAE;IACf,IAAI,CAACC,WAAW,GAAG,EAAE;IAErB,IAAI,CAACF,GAAG,GAAGhC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC+B,UAAU,CAAC;IAC3C,IAAIf,OAAO,CAACmB,MAAM,EAAE;MAClB,IAAI,CAACA,MAAM,GAAGnB,OAAO,CAACmB,MAAM;IAC9B,CAAC,MAAM,IAAInB,OAAO,CAACoB,QAAQ,EAAE;MAC3B,IAAI,CAACD,MAAM,GAAGrC,EAAE,CAACuC,iBAAiB,CAACrB,OAAO,CAACoB,QAAQ,CAAC;IACtD,CAAC,MAAM;MACL,IAAI,CAACD,MAAM,GAAG,IAAIlC,SAAS,CAAC,CAAC;IAC/B;IACA,IAAI,CAAC+B,GAAG,CAACM,IAAI,CAAC,IAAI,CAACH,MAAM,CAAC;;IAE1B;IACA,IAAI,CAACI,OAAO,GAAGC,OAAO,CAACC,GAAG,CAAC,CAAC,IAAI,CAACC,SAAS,CAAC,CAAC,EAAE,IAAI,CAACC,aAAa,CAAC,CAAC,CAAC,CAAC;EACtE;EAEA,IAAIC,YAAYA,CAAA,EAAG;IACjB,OAAO,IAAI,CAAChB,aAAa;EAC3B;EAEAiB,WAAWA,CAACC,IAAI,EAAE;IAChB,MAAMX,MAAM,GAAG,IAAIlC,SAAS,CAAC;MAAC8C,OAAO,EAAE,KAAK;MAAEC,KAAK,EAAE;IAAI,CAAC,CAAC;IAC3D,IAAI,CAAChB,GAAG,CAACiB,MAAM,CAACd,MAAM,EAAE;MAACe,IAAI,EAAEJ;IAAI,CAAC,CAAC;IACrCX,MAAM,CAACgB,EAAE,CAAC,QAAQ,EAAE,MAAM;MACxBhB,MAAM,CAACiB,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC,CAAC;IACF,OAAOjB,MAAM;EACf;EAEAkB,iBAAiBA,CAAA,EAAG;IAClB,MAAMC,eAAe,GAAG,SAAAA,CAASC,SAAS,EAAE;MAC1C,IAAI,CAACA,SAAS,CAACC,SAAS,EAAE;QACxB,OAAO,IAAIhB,OAAO,CAACiB,OAAO,IAAI;UAC5BF,SAAS,CAACpB,MAAM,CAACgB,EAAE,CAAC,QAAQ,EAAE,MAAM;YAClCM,OAAO,CAAC,CAAC;UACX,CAAC,CAAC;UACFF,SAAS,CAACG,MAAM,CAAC,CAAC;QACpB,CAAC,CAAC;MACJ;MACA,OAAOlB,OAAO,CAACiB,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD;IACA,MAAME,QAAQ,GAAG,IAAI,CAAC9B,WAAW,CAAC+B,GAAG,CAACN,eAAe,CAAC;IACtD,IAAIK,QAAQ,CAACE,MAAM,EAAE;MACnB,OAAOrB,OAAO,CAACC,GAAG,CAACkB,QAAQ,CAAC;IAC9B;IACA,OAAOnB,OAAO,CAACiB,OAAO,CAAC,CAAC;EAC1B;EAEA,MAAMC,MAAMA,CAAA,EAAG;IACb;IACA,MAAM,IAAI,CAACnB,OAAO;IAClB,MAAM,IAAI,CAACuB,QAAQ,CAAC,CAAC;IACrB,MAAM,IAAI,CAACT,iBAAiB,CAAC,CAAC;IAC9B,MAAMb,OAAO,CAACC,GAAG,CAAC,CAChB,IAAI,CAACsB,eAAe,CAAC,CAAC,EACtB,IAAI,CAACC,MAAM,CAAC,CAAC,EACb,IAAI,CAACC,OAAO,CAAC,CAAC,EACd,IAAI,CAACC,gBAAgB,CAAC,CAAC,EACvB,IAAI,CAACC,SAAS,CAAC,CAAC,EAChB,IAAI,CAACC,eAAe,CAAC,CAAC,CACvB,CAAC;IACF,MAAM,IAAI,CAACC,WAAW,CAAC,CAAC;IACxB,OAAO,IAAI,CAACC,SAAS,CAAC,CAAC;EACzB;EAEA,IAAIC,MAAMA,CAAA,EAAG;IACX;IACA,IAAIC,CAAC;IACL,KAAKA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC3C,WAAW,CAACgC,MAAM,EAAEW,CAAC,EAAE,EAAE;MAC5C,IAAI,CAAC,IAAI,CAAC3C,WAAW,CAAC2C,CAAC,CAAC,EAAE;QACxB,OAAOA,CAAC;MACV;IACF;IACA,OAAO,IAAI,CAAC3C,WAAW,CAACgC,MAAM,IAAI,CAAC;EACrC;EAEAY,QAAQA,CAACC,KAAK,EAAE;IACd,MAAMC,EAAE,GAAG,IAAI,CAAC1C,KAAK,CAAC4B,MAAM;IAC5B,MAAMe,MAAM,GAAGC,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,EAAEJ,KAAK,EAAE;MAACK,IAAI,EAAE,OAAO;MAAE7B,IAAI,EAAE,QAAQyB,EAAE,IAAID,KAAK,CAACM,SAAS;IAAE,CAAC,CAAC;IAC/F,IAAI,CAAC/C,KAAK,CAACgD,IAAI,CAACL,MAAM,CAAC;IACvB,OAAOD,EAAE;EACX;EAEAO,QAAQA,CAACP,EAAE,EAAE;IACX,OAAO,IAAI,CAAC1C,KAAK,CAAC0C,EAAE,CAAC;EACvB;EAEAQ,YAAYA,CAACjC,IAAI,EAAElC,OAAO,EAAE;IAC1B;IACA;IACA;IACAA,OAAO,GAAGA,OAAO,IAAI,CAAC,CAAC;IACvB,MAAMO,gBAAgB,GACpBP,OAAO,CAACO,gBAAgB,KAAK6D,SAAS,GAAGpE,OAAO,CAACO,gBAAgB,GAAG,IAAI,CAACA,gBAAgB;IAE3F,IAAIP,OAAO,CAACqE,QAAQ,EAAE;MACpB;MACAC,OAAO,CAACC,KAAK,CAAC,8DAA8D,CAAC;MAC7EvE,OAAO,CAACwE,UAAU,GAAGX,MAAM,CAACC,MAAM,CAChC;QACEO,QAAQ,EAAErE,OAAO,CAACqE;MACpB,CAAC,EACDrE,OAAO,CAACwE,UACV,CAAC;IACH;IAEA,MAAMb,EAAE,GAAG,IAAI,CAACJ,MAAM;IACtBrB,IAAI,GAAGA,IAAI,IAAI,QAAQyB,EAAE,EAAE;IAE3B,MAAMpB,SAAS,GAAG,IAAI3C,eAAe,CAAC;MACpC+D,EAAE;MACFzB,IAAI;MACJuC,QAAQ,EAAE,IAAI;MACdlE,gBAAgB;MAChBiE,UAAU,EAAExE,OAAO,CAACwE,UAAU;MAC9BE,KAAK,EAAE1E,OAAO,CAAC0E,KAAK;MACpBC,SAAS,EAAE3E,OAAO,CAAC2E,SAAS;MAC5B7D,KAAK,EAAEd,OAAO,CAACc,KAAK;MACpB8D,UAAU,EAAE5E,OAAO,CAAC4E,UAAU;MAC9BC,YAAY,EAAE7E,OAAO,CAAC6E;IACxB,CAAC,CAAC;IAEF,IAAI,CAAChE,WAAW,CAAC8C,EAAE,CAAC,GAAGpB,SAAS;IAChC,OAAOA,SAAS;EAClB;EAEAuC,YAAYA,CAACnB,EAAE,EAAE;IACf,IAAIA,EAAE,KAAKS,SAAS,EAAE;MACpB,OAAO,IAAI,CAACvD,WAAW,CAACkE,IAAI,CAAC,MAAM,IAAI,CAAC;IAC1C;IACA,IAAI,OAAOpB,EAAE,KAAK,QAAQ,EAAE;MAC1B,OAAO,IAAI,CAAC9C,WAAW,CAAC8C,EAAE,CAAC;IAC7B;IACA,IAAI,OAAOA,EAAE,KAAK,QAAQ,EAAE;MAC1B,OAAO,IAAI,CAAC9C,WAAW,CAACkE,IAAI,CAACxC,SAAS,IAAIA,SAAS,IAAIA,SAAS,CAACL,IAAI,KAAKyB,EAAE,CAAC;IAC/E;IACA,OAAOS,SAAS;EAClB;EAEAjB,SAASA,CAAA,EAAG;IACV,OAAO,IAAI3B,OAAO,CAACiB,OAAO,IAAI;MAC5B,IAAI,CAACzB,GAAG,CAACiB,MAAM,CAAC,IAAI,CAACxB,MAAM,CAACuE,GAAG,EAAE;QAAC9C,IAAI,EAAE;MAAe,CAAC,CAAC;MACzDO,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;EACJ;EAEAf,SAASA,CAAA,EAAG;IACV,OAAO,IAAIF,OAAO,CAACiB,OAAO,IAAI;MAC5B,IAAI,CAACzB,GAAG,CAACiB,MAAM,CAACpC,SAAS,EAAE;QAACqC,IAAI,EAAE;MAAqB,CAAC,CAAC;MACzDO,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;EACJ;EAEAd,aAAaA,CAAA,EAAG;IACd,OAAO,IAAIH,OAAO,CAACiB,OAAO,IAAI;MAC5B,MAAMwC,KAAK,GAAG,IAAI1F,kBAAkB,CAAC,CAAC;MACtC,MAAMyF,GAAG,GAAGC,KAAK,CAACC,KAAK,CAAC,CACtB;QAACC,EAAE,EAAE,MAAM;QAAEC,IAAI,EAAElG,OAAO,CAACmG,cAAc;QAAEC,MAAM,EAAE;MAAiB,CAAC,EACrE;QAACH,EAAE,EAAE,MAAM;QAAEC,IAAI,EAAElG,OAAO,CAACqG,cAAc;QAAED,MAAM,EAAE;MAAmB,CAAC,EACvE;QAACH,EAAE,EAAE,MAAM;QAAEC,IAAI,EAAElG,OAAO,CAACsG,kBAAkB;QAAEF,MAAM,EAAE;MAAkB,CAAC,CAC3E,CAAC;MACF,IAAI,CAACtE,GAAG,CAACiB,MAAM,CAAC+C,GAAG,EAAE;QAAC9C,IAAI,EAAE;MAAc,CAAC,CAAC;MAC5CO,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;EACJ;EAEAM,eAAeA,CAAA,EAAG;IAChB,OAAO,IAAIvB,OAAO,CAACiB,OAAO,IAAI;MAC5B,MAAMgD,KAAK,GAAG;QACZC,UAAU,EAAE,IAAI,CAAC7E,WAAW,CAAC8E,MAAM,CAACC,OAAO,CAAC;QAC5CpF,aAAa,EAAE,IAAI,CAACA,aAAa;QACjCU,WAAW,EAAE,IAAI,CAACA,WAAW;QAC7BD,KAAK,EAAE,IAAI,CAACA;MACd,CAAC;MACD,MAAMgE,KAAK,GAAG,IAAIzF,iBAAiB,CAAC,CAAC;MACrC,MAAMwF,GAAG,GAAGC,KAAK,CAACC,KAAK,CAACO,KAAK,CAAC;MAC9B,IAAI,CAACzE,GAAG,CAACiB,MAAM,CAAC+C,GAAG,EAAE;QAAC9C,IAAI,EAAE;MAAqB,CAAC,CAAC;MACnDO,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;EACJ;EAEAK,QAAQA,CAAA,EAAG;IACT,OAAOtB,OAAO,CAACC,GAAG,CAChB,IAAI,CAACR,KAAK,CAAC2B,GAAG,CAACgB,MAAM,IAAI;MACvB,IAAIA,MAAM,CAACG,IAAI,KAAK,OAAO,EAAE;QAC3B,MAAM3C,QAAQ,GAAG,YAAYwC,MAAM,CAAC1B,IAAI,EAAE;QAC1C,IAAI0B,MAAM,CAACxC,QAAQ,EAAE;UACnB,OAAO,IAAI,CAACJ,GAAG,CAAC6E,IAAI,CAACjC,MAAM,CAACxC,QAAQ,EAAE;YAACc,IAAI,EAAEd;UAAQ,CAAC,CAAC;QACzD;QACA,IAAIwC,MAAM,CAACkC,MAAM,EAAE;UACjB,OAAO,IAAI,CAAC9E,GAAG,CAACiB,MAAM,CAAC2B,MAAM,CAACkC,MAAM,EAAE;YAAC5D,IAAI,EAAEd;UAAQ,CAAC,CAAC;QACzD;QACA,IAAIwC,MAAM,CAACmC,MAAM,EAAE;UACjB,MAAMC,SAAS,GAAGpC,MAAM,CAACmC,MAAM;UAC/B,MAAME,OAAO,GAAGD,SAAS,CAACE,SAAS,CAACF,SAAS,CAACG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;UAC/D,OAAO,IAAI,CAACnF,GAAG,CAACiB,MAAM,CAACgE,OAAO,EAAE;YAAC/D,IAAI,EAAEd,QAAQ;YAAE2E,MAAM,EAAE;UAAI,CAAC,CAAC;QACjE;MACF;MACA,MAAM,IAAIK,KAAK,CAAC,mBAAmB,CAAC;IACtC,CAAC,CACH,CAAC;EACH;EAEApD,MAAMA,CAAA,EAAG;IACP,OAAO,IAAIxB,OAAO,CAACiB,OAAO,IAAI;MAC5B,MAAMgD,KAAK,GAAG;QACZC,UAAU,EAAE,IAAI,CAAC7E,WAAW,CAAC8E,MAAM,CAACC,OAAO;MAC7C,CAAC;MACD,MAAMX,KAAK,GAAG,IAAIxF,QAAQ,CAAC,CAAC;MAC5B,MAAMuF,GAAG,GAAGC,KAAK,CAACC,KAAK,CAACO,KAAK,CAAC;MAC9B,IAAI,CAACzE,GAAG,CAACiB,MAAM,CAAC+C,GAAG,EAAE;QAAC9C,IAAI,EAAE;MAAkB,CAAC,CAAC;MAChDO,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;EACJ;EAEAQ,OAAOA,CAAA,EAAG;IACR,OAAO,IAAIzB,OAAO,CAACiB,OAAO,IAAI;MAC5B,MAAM4D,SAAS,GAAG,IAAI/G,SAAS,CAAC,CAAC;MACjC,MAAM0F,GAAG,GAAGqB,SAAS,CAACnB,KAAK,CAAC,IAAI,CAAC;MACjC,IAAI,CAAClE,GAAG,CAACiB,MAAM,CAAC+C,GAAG,EAAE;QAAC9C,IAAI,EAAE;MAAmB,CAAC,CAAC;MACjDO,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;EACJ;EAEAS,gBAAgBA,CAAA,EAAG;IACjB,IAAI,IAAI,CAAC1C,aAAa,CAAC8F,KAAK,EAAE;MAC5B,OAAO,IAAI9E,OAAO,CAACiB,OAAO,IAAI;QAC5B,MAAM8D,kBAAkB,GAAG,IAAI5G,kBAAkB,CAAC,CAAC;QACnD,MAAMqF,GAAG,GAAGuB,kBAAkB,CAACrB,KAAK,CAAC,IAAI,CAAC1E,aAAa,CAAC;QACxD,IAAI,CAACQ,GAAG,CAACiB,MAAM,CAAC+C,GAAG,EAAE;UAAC9C,IAAI,EAAE;QAAuB,CAAC,CAAC;QACrDO,OAAO,CAAC,CAAC;MACX,CAAC,CAAC;IACJ;IACA,OAAOjB,OAAO,CAACiB,OAAO,CAAC,CAAC;EAC1B;EAEAW,eAAeA,CAAA,EAAG;IAChB,IAAIkD,KAAK,GAAG,CAAC;IACb,MAAME,aAAa,GAAG,CACpB;MAACrB,EAAE,EAAE,MAAMmB,KAAK,EAAE,EAAE;MAAElB,IAAI,EAAElG,OAAO,CAACuH,MAAM;MAAEnB,MAAM,EAAE;IAAY,CAAC,EACjE;MAACH,EAAE,EAAE,MAAMmB,KAAK,EAAE,EAAE;MAAElB,IAAI,EAAElG,OAAO,CAACwH,KAAK;MAAEpB,MAAM,EAAE;IAAkB,CAAC,CACvE;IACD,IAAI,IAAI,CAAC9E,aAAa,CAAC8F,KAAK,EAAE;MAC5BE,aAAa,CAACvC,IAAI,CAAC;QACjBkB,EAAE,EAAE,MAAMmB,KAAK,EAAE,EAAE;QACnBlB,IAAI,EAAElG,OAAO,CAACE,aAAa;QAC3BkG,MAAM,EAAE;MACV,CAAC,CAAC;IACJ;IACA,IAAI,CAACzE,WAAW,CAAC8F,OAAO,CAACpE,SAAS,IAAI;MACpC,IAAIA,SAAS,EAAE;QACbA,SAAS,CAACqE,GAAG,GAAG,MAAMN,KAAK,EAAE,EAAE;QAC/BE,aAAa,CAACvC,IAAI,CAAC;UACjBkB,EAAE,EAAE5C,SAAS,CAACqE,GAAG;UACjBxB,IAAI,EAAElG,OAAO,CAAC2H,SAAS;UACvBvB,MAAM,EAAE,mBAAmB/C,SAAS,CAACoB,EAAE;QACzC,CAAC,CAAC;MACJ;IACF,CAAC,CAAC;IACF,OAAO,IAAInC,OAAO,CAACiB,OAAO,IAAI;MAC5B,MAAMwC,KAAK,GAAG,IAAI1F,kBAAkB,CAAC,CAAC;MACtC,MAAMyF,GAAG,GAAGC,KAAK,CAACC,KAAK,CAACsB,aAAa,CAAC;MACtC,IAAI,CAACxF,GAAG,CAACiB,MAAM,CAAC+C,GAAG,EAAE;QAAC9C,IAAI,EAAE;MAA6B,CAAC,CAAC;MAC3DO,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;EACJ;EAEAY,WAAWA,CAAA,EAAG;IACZ,MAAM;MAACrC;IAAG,CAAC,GAAG,IAAI;IAClB,MAAMyE,KAAK,GAAG;MACZC,UAAU,EAAE,IAAI,CAAC7E,WAAW,CAAC8E,MAAM,CAACC,OAAO,CAAC;MAC5ChE,YAAY,EAAE,IAAI,CAAChB,aAAa,CAAC6E,KAAK;MACtC3E,KAAK,EAAE,IAAI,CAACA,KAAK;MACjB0D,UAAU,EAAE,CAAC,CAAC;MACdsC,cAAc,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,IAAItF,OAAO,CAACiB,OAAO,IAAI;MAC5B,MAAMwC,KAAK,GAAG,IAAIvF,aAAa,CAAC,CAAC;MACjCuF,KAAK,CAAC8B,OAAO,CAACtB,KAAK,CAAC;MACpBzE,GAAG,CAACiB,MAAM,CAACgD,KAAK,CAACC,KAAK,CAACO,KAAK,CAAC,EAAE;QAACvD,IAAI,EAAE;MAAkB,CAAC,CAAC;MAC1DO,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;EACJ;EAEAa,SAASA,CAAA,EAAG;IACV,OAAO,IAAI9B,OAAO,CAAC,CAACiB,OAAO,EAAEuE,MAAM,KAAK;MACtC,IAAI,CAAC7F,MAAM,CAACgB,EAAE,CAAC,OAAO,EAAE6E,MAAM,CAAC;MAC/B,IAAI,CAAC7F,MAAM,CAACgB,EAAE,CAAC,QAAQ,EAAE,MAAM;QAC7BM,OAAO,CAAC,IAAI,CAAC;MACf,CAAC,CAAC;MACF,IAAI,CAACzB,GAAG,CAACmB,EAAE,CAAC,OAAO,EAAE6E,MAAM,CAAC;MAE5B,IAAI,CAAChG,GAAG,CAACiG,QAAQ,CAAC,CAAC;IACrB,CAAC,CAAC;EACJ;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGrH,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"workbook-writer.js","names":["fs","require","Archiver","StreamBuf","RelType","StylesXform","SharedStrings","DefinedNames","CoreXform","RelationshipsXform","ContentTypesXform","AppXform","WorkbookXform","SharedStringsXform","WorksheetWriter","theme1Xml","WorkbookWriter","constructor","options","created","Date","modified","creator","lastModifiedBy","lastPrinted","useSharedStrings","sharedStrings","styles","useStyles","Mock","_definedNames","_worksheets","views","zipOptions","zip","media","commentRefs","stream","filename","createWriteStream","pipe","promise","Promise","all","addThemes","addOfficeRels","definedNames","_openStream","path","bufSize","batch","append","name","on","emit","_commitWorksheets","commitWorksheet","worksheet","committed","resolve","commit","promises","map","length","addMedia","addContentTypes","addApp","addCore","addSharedStrings","addStyles","addWorkbookRels","addWorkbook","_finalize","nextId","i","addImage","image","id","medium","Object","assign","type","extension","push","getImage","addWorksheet","undefined","tabColor","console","trace","properties","workbook","state","pageSetup","autoFilter","headerFooter","getWorksheet","find","xml","xform","toXml","Id","Type","OfficeDocument","Target","CoreProperties","ExtenderProperties","model","worksheets","filter","Boolean","file","buffer","base64","dataimg64","content","substring","indexOf","Error","coreXform","count","sharedStringsXform","relationships","Styles","Theme","forEach","rId","Worksheet","calcProperties","prepare","reject","finalize","module","exports"],"sources":["../../../../lib/stream/xlsx/workbook-writer.js"],"sourcesContent":["const fs = require(\"fs\");\r\nconst Archiver = require(\"@alienkarma/archiver\");\r\n\r\nconst StreamBuf = require(\"../../utils/stream-buf\");\r\n\r\nconst RelType = require(\"../../xlsx/rel-type\");\r\nconst StylesXform = require(\"../../xlsx/xform/style/styles-xform\");\r\nconst SharedStrings = require(\"../../utils/shared-strings\");\r\nconst DefinedNames = require(\"../../doc/defined-names\");\r\n\r\nconst CoreXform = require(\"../../xlsx/xform/core/core-xform\");\r\nconst RelationshipsXform = require(\"../../xlsx/xform/core/relationships-xform\");\r\nconst ContentTypesXform = require(\"../../xlsx/xform/core/content-types-xform\");\r\nconst AppXform = require(\"../../xlsx/xform/core/app-xform\");\r\nconst WorkbookXform = require(\"../../xlsx/xform/book/workbook-xform\");\r\nconst SharedStringsXform = require(\"../../xlsx/xform/strings/shared-strings-xform\");\r\n\r\nconst WorksheetWriter = require(\"./worksheet-writer\");\r\n\r\nconst theme1Xml = require(\"../../xlsx/xml/theme1.js\");\r\n\r\nclass WorkbookWriter {\r\n constructor(options) {\r\n options = options || {};\r\n\r\n this.created = options.created || new Date();\r\n this.modified = options.modified || this.created;\r\n this.creator = options.creator || \"ExcelJS\";\r\n this.lastModifiedBy = options.lastModifiedBy || \"ExcelJS\";\r\n this.lastPrinted = options.lastPrinted;\r\n\r\n // using shared strings creates a smaller xlsx file but may use more memory\r\n this.useSharedStrings = options.useSharedStrings || false;\r\n this.sharedStrings = new SharedStrings();\r\n\r\n // style manager\r\n this.styles = options.useStyles\r\n ? new StylesXform(true)\r\n : new StylesXform.Mock(true);\r\n\r\n // defined names\r\n this._definedNames = new DefinedNames();\r\n\r\n this._worksheets = [];\r\n this.views = [];\r\n\r\n this.zipOptions = options.zip;\r\n\r\n this.media = [];\r\n this.commentRefs = [];\r\n\r\n this.zip = Archiver(\"zip\", this.zipOptions);\r\n if (options.stream) {\r\n this.stream = options.stream;\r\n } else if (options.filename) {\r\n this.stream = fs.createWriteStream(options.filename);\r\n } else {\r\n this.stream = new StreamBuf();\r\n }\r\n this.zip.pipe(this.stream);\r\n\r\n // these bits can be added right now\r\n this.promise = Promise.all([this.addThemes(), this.addOfficeRels()]);\r\n }\r\n\r\n get definedNames() {\r\n return this._definedNames;\r\n }\r\n\r\n _openStream(path) {\r\n const stream = new StreamBuf({ bufSize: 65536, batch: true });\r\n this.zip.append(stream, { name: path });\r\n stream.on(\"finish\", () => {\r\n stream.emit(\"zipped\");\r\n });\r\n return stream;\r\n }\r\n\r\n _commitWorksheets() {\r\n const commitWorksheet = function (worksheet) {\r\n if (!worksheet.committed) {\r\n return new Promise((resolve) => {\r\n worksheet.stream.on(\"zipped\", () => {\r\n resolve();\r\n });\r\n worksheet.commit();\r\n });\r\n }\r\n return Promise.resolve();\r\n };\r\n // if there are any uncommitted worksheets, commit them now and wait\r\n const promises = this._worksheets.map(commitWorksheet);\r\n if (promises.length) {\r\n return Promise.all(promises);\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n async commit() {\r\n // commit all worksheets, then add suplimentary files\r\n await this.promise;\r\n await this.addMedia();\r\n await this._commitWorksheets();\r\n await Promise.all([\r\n this.addContentTypes(),\r\n this.addApp(),\r\n this.addCore(),\r\n this.addSharedStrings(),\r\n this.addStyles(),\r\n this.addWorkbookRels(),\r\n ]);\r\n await this.addWorkbook();\r\n return this._finalize();\r\n }\r\n\r\n get nextId() {\r\n // find the next unique spot to add worksheet\r\n let i;\r\n for (i = 1; i < this._worksheets.length; i++) {\r\n if (!this._worksheets[i]) {\r\n return i;\r\n }\r\n }\r\n return this._worksheets.length || 1;\r\n }\r\n\r\n addImage(image) {\r\n const id = this.media.length;\r\n const medium = Object.assign({}, image, {\r\n type: \"image\",\r\n name: `image${id}.${image.extension}`,\r\n });\r\n this.media.push(medium);\r\n return id;\r\n }\r\n\r\n getImage(id) {\r\n return this.media[id];\r\n }\r\n\r\n addWorksheet(name, options) {\r\n // it's possible to add a worksheet with different than default\r\n // shared string handling\r\n // in fact, it's even possible to switch it mid-sheet\r\n options = options || {};\r\n const useSharedStrings =\r\n options.useSharedStrings !== undefined\r\n ? options.useSharedStrings\r\n : this.useSharedStrings;\r\n\r\n if (options.tabColor) {\r\n // eslint-disable-next-line no-console\r\n console.trace(\r\n \"tabColor option has moved to { properties: tabColor: {...} }\",\r\n );\r\n options.properties = Object.assign(\r\n {\r\n tabColor: options.tabColor,\r\n },\r\n options.properties,\r\n );\r\n }\r\n\r\n const id = this.nextId;\r\n name = name || `sheet${id}`;\r\n\r\n const worksheet = new WorksheetWriter({\r\n id,\r\n name,\r\n workbook: this,\r\n useSharedStrings,\r\n properties: options.properties,\r\n state: options.state,\r\n pageSetup: options.pageSetup,\r\n views: options.views,\r\n autoFilter: options.autoFilter,\r\n headerFooter: options.headerFooter,\r\n });\r\n\r\n this._worksheets[id] = worksheet;\r\n return worksheet;\r\n }\r\n\r\n getWorksheet(id) {\r\n if (id === undefined) {\r\n return this._worksheets.find(() => true);\r\n }\r\n if (typeof id === \"number\") {\r\n return this._worksheets[id];\r\n }\r\n if (typeof id === \"string\") {\r\n return this._worksheets.find(\r\n (worksheet) => worksheet && worksheet.name === id,\r\n );\r\n }\r\n return undefined;\r\n }\r\n\r\n addStyles() {\r\n return new Promise((resolve) => {\r\n this.zip.append(this.styles.xml, { name: \"xl/styles.xml\" });\r\n resolve();\r\n });\r\n }\r\n\r\n addThemes() {\r\n return new Promise((resolve) => {\r\n this.zip.append(theme1Xml, { name: \"xl/theme/theme1.xml\" });\r\n resolve();\r\n });\r\n }\r\n\r\n addOfficeRels() {\r\n return new Promise((resolve) => {\r\n const xform = new RelationshipsXform();\r\n const xml = xform.toXml([\r\n { Id: \"rId1\", Type: RelType.OfficeDocument, Target: \"xl/workbook.xml\" },\r\n {\r\n Id: \"rId2\",\r\n Type: RelType.CoreProperties,\r\n Target: \"docProps/core.xml\",\r\n },\r\n {\r\n Id: \"rId3\",\r\n Type: RelType.ExtenderProperties,\r\n Target: \"docProps/app.xml\",\r\n },\r\n ]);\r\n this.zip.append(xml, { name: \"/_rels/.rels\" });\r\n resolve();\r\n });\r\n }\r\n\r\n addContentTypes() {\r\n return new Promise((resolve) => {\r\n const model = {\r\n worksheets: this._worksheets.filter(Boolean),\r\n sharedStrings: this.sharedStrings,\r\n commentRefs: this.commentRefs,\r\n media: this.media,\r\n };\r\n const xform = new ContentTypesXform();\r\n const xml = xform.toXml(model);\r\n this.zip.append(xml, { name: \"[Content_Types].xml\" });\r\n resolve();\r\n });\r\n }\r\n\r\n addMedia() {\r\n return Promise.all(\r\n this.media.map((medium) => {\r\n if (medium.type === \"image\") {\r\n const filename = `xl/media/${medium.name}`;\r\n if (medium.filename) {\r\n return this.zip.file(medium.filename, { name: filename });\r\n }\r\n if (medium.buffer) {\r\n return this.zip.append(medium.buffer, { name: filename });\r\n }\r\n if (medium.base64) {\r\n const dataimg64 = medium.base64;\r\n const content = dataimg64.substring(dataimg64.indexOf(\",\") + 1);\r\n return this.zip.append(content, { name: filename, base64: true });\r\n }\r\n }\r\n throw new Error(\"Unsupported media\");\r\n }),\r\n );\r\n }\r\n\r\n addApp() {\r\n return new Promise((resolve) => {\r\n const model = {\r\n worksheets: this._worksheets.filter(Boolean),\r\n };\r\n const xform = new AppXform();\r\n const xml = xform.toXml(model);\r\n this.zip.append(xml, { name: \"docProps/app.xml\" });\r\n resolve();\r\n });\r\n }\r\n\r\n addCore() {\r\n return new Promise((resolve) => {\r\n const coreXform = new CoreXform();\r\n const xml = coreXform.toXml(this);\r\n this.zip.append(xml, { name: \"docProps/core.xml\" });\r\n resolve();\r\n });\r\n }\r\n\r\n addSharedStrings() {\r\n if (this.sharedStrings.count) {\r\n return new Promise((resolve) => {\r\n const sharedStringsXform = new SharedStringsXform();\r\n const xml = sharedStringsXform.toXml(this.sharedStrings);\r\n this.zip.append(xml, { name: \"/xl/sharedStrings.xml\" });\r\n resolve();\r\n });\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n addWorkbookRels() {\r\n let count = 1;\r\n const relationships = [\r\n { Id: `rId${count++}`, Type: RelType.Styles, Target: \"styles.xml\" },\r\n { Id: `rId${count++}`, Type: RelType.Theme, Target: \"theme/theme1.xml\" },\r\n ];\r\n if (this.sharedStrings.count) {\r\n relationships.push({\r\n Id: `rId${count++}`,\r\n Type: RelType.SharedStrings,\r\n Target: \"sharedStrings.xml\",\r\n });\r\n }\r\n this._worksheets.forEach((worksheet) => {\r\n if (worksheet) {\r\n worksheet.rId = `rId${count++}`;\r\n relationships.push({\r\n Id: worksheet.rId,\r\n Type: RelType.Worksheet,\r\n Target: `worksheets/sheet${worksheet.id}.xml`,\r\n });\r\n }\r\n });\r\n return new Promise((resolve) => {\r\n const xform = new RelationshipsXform();\r\n const xml = xform.toXml(relationships);\r\n this.zip.append(xml, { name: \"/xl/_rels/workbook.xml.rels\" });\r\n resolve();\r\n });\r\n }\r\n\r\n addWorkbook() {\r\n const { zip } = this;\r\n const model = {\r\n worksheets: this._worksheets.filter(Boolean),\r\n definedNames: this._definedNames.model,\r\n views: this.views,\r\n properties: {},\r\n calcProperties: {},\r\n };\r\n\r\n return new Promise((resolve) => {\r\n const xform = new WorkbookXform();\r\n xform.prepare(model);\r\n zip.append(xform.toXml(model), { name: \"/xl/workbook.xml\" });\r\n resolve();\r\n });\r\n }\r\n\r\n _finalize() {\r\n return new Promise((resolve, reject) => {\r\n this.stream.on(\"error\", reject);\r\n this.stream.on(\"finish\", () => {\r\n resolve(this);\r\n });\r\n this.zip.on(\"error\", reject);\r\n\r\n this.zip.finalize();\r\n });\r\n }\r\n}\r\n\r\nmodule.exports = WorkbookWriter;\r\n"],"mappings":"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","ignoreList":[]}