json-as-xlsx 2.5.1 → 2.5.3
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/LICENSE +21 -0
- package/README.md +104 -0
- package/package.json +1 -1
- package/dist/__tests__/contentProperty.test.d.ts +0 -1
- package/dist/__tests__/contentProperty.test.js +0 -44
- package/dist/__tests__/getJsonSheetRow.test.d.ts +0 -1
- package/dist/__tests__/getJsonSheetRow.test.js +0 -52
- package/dist/__tests__/getWorksheetColumWidths.test.d.ts +0 -1
- package/dist/__tests__/getWorksheetColumWidths.test.js +0 -28
- package/dist/__tests__/index.test.d.ts +0 -1
- package/dist/__tests__/index.test.js +0 -171
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022, LuisEnMarroquin <xlsx@marroquin.dev>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# json-as-xlsx
|
|
2
|
+
|
|
3
|
+
This is a tool that helps to build an excel from a json and it depends only on `xlsx` library
|
|
4
|
+
|
|
5
|
+
You can see a live example of it working on any of this sites (there are many just in case):
|
|
6
|
+
|
|
7
|
+
- [xlsx.pages.dev](https://xlsx.pages.dev)
|
|
8
|
+
- [xlsx.marroquin.dev](https://xlsx.marroquin.dev)
|
|
9
|
+
- [xlsx.luismarroquin.com](https://xlsx.luismarroquin.com)
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
import xlsx from "json-as-xlsx"
|
|
15
|
+
// or require
|
|
16
|
+
let xlsx = require("json-as-xlsx")
|
|
17
|
+
|
|
18
|
+
let data = [
|
|
19
|
+
{
|
|
20
|
+
sheet: "Adults",
|
|
21
|
+
columns: [
|
|
22
|
+
{ label: "User", value: "user" }, // Top level data
|
|
23
|
+
{ label: "Age", value: (row) => row.age + " years" }, // Custom format
|
|
24
|
+
{ label: "Phone", value: (row) => (row.more ? row.more.phone || "" : "") }, // Run functions
|
|
25
|
+
],
|
|
26
|
+
content: [
|
|
27
|
+
{ user: "Andrea", age: 20, more: { phone: "11111111" } },
|
|
28
|
+
{ user: "Luis", age: 21, more: { phone: "12345678" } },
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
sheet: "Children",
|
|
33
|
+
columns: [
|
|
34
|
+
{ label: "User", value: "user" }, // Top level data
|
|
35
|
+
{ label: "Age", value: "age", format: '# "years"' }, // Column format
|
|
36
|
+
{ label: "Phone", value: "more.phone", format: "(###) ###-####" }, // Deep props and column format
|
|
37
|
+
],
|
|
38
|
+
content: [
|
|
39
|
+
{ user: "Manuel", age: 16, more: { phone: 9999999900 } },
|
|
40
|
+
{ user: "Ana", age: 17, more: { phone: 8765432135 } },
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
let settings = {
|
|
46
|
+
fileName: "MySpreadsheet", // Name of the resulting spreadsheet
|
|
47
|
+
extraLength: 3, // A bigger number means that columns will be wider
|
|
48
|
+
writeMode: "writeFile", // The available parameters are 'WriteFile' and 'write'. This setting is optional. Useful in such cases https://docs.sheetjs.com/docs/solutions/output#example-remote-file
|
|
49
|
+
writeOptions: {}, // Style options from https://docs.sheetjs.com/docs/api/write-options
|
|
50
|
+
RTL: true, // Display the columns from right-to-left (the default value is false)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
xlsx(data, settings) // Will download the excel file
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
If you want to trigger something after the file is downloaded, you can use the `callback` parameter:
|
|
57
|
+
|
|
58
|
+
```js
|
|
59
|
+
let callback = function (sheet) {
|
|
60
|
+
console.log("Download complete:", sheet)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
xlsx(data, settings, callback) // Will download the excel file
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Column formatting
|
|
67
|
+
|
|
68
|
+
> **Note:** Cell formatting is type based, i.e. the format type and value type must match.
|
|
69
|
+
>
|
|
70
|
+
> If you want to use a Date format, the value must be of type Date; if you want a number format, the value must be a Number.
|
|
71
|
+
|
|
72
|
+
Column formatting can be provided in the column object, i.e.
|
|
73
|
+
|
|
74
|
+
```js
|
|
75
|
+
columns: [{ label: "Income", value: "income", format: "€#,##0.00" }]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
- A list of SheetJS format examples can be found
|
|
79
|
+
here: [SSF library](https://github.com/SheetJS/sheetjs/blob/f443aa8475ebf051fc4e888cf0a6c3e5b751813c/bits/10_ssf.js#L42)
|
|
80
|
+
- ECMA-376 number formatting
|
|
81
|
+
specification: [Number formats](https://c-rex.net/projects/samples/ooxml/e1/Part4/OOXML_P4_DOCX_numFmts_topic_ID0E6KK6.html)
|
|
82
|
+
|
|
83
|
+
Examples
|
|
84
|
+
|
|
85
|
+
```js
|
|
86
|
+
// Number formats
|
|
87
|
+
"$0.00" // Basic
|
|
88
|
+
"\£#,##0.00" // Pound
|
|
89
|
+
"0%" // Percentage
|
|
90
|
+
'#.# "ft"' // Number and text
|
|
91
|
+
|
|
92
|
+
// Date formats
|
|
93
|
+
"d-mmm-yy" // 12-Mar-22
|
|
94
|
+
"ddd" // (eg. Sat)
|
|
95
|
+
"dddd" // (eg. Saturday)
|
|
96
|
+
"h:mm AM/PM" // 1:10 PM
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Examples
|
|
100
|
+
|
|
101
|
+
This are files used for development, please change imports from `../../src/index` to `json-as-xlsx`
|
|
102
|
+
|
|
103
|
+
- [Express with TypeScript](https://github.com/LuisEnMarroquin/json-as-xlsx/blob/main/packages/demo-express)
|
|
104
|
+
- [ReactJS with TypeScript](https://github.com/LuisEnMarroquin/json-as-xlsx/blob/main/packages/demo-reactjs)
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const index_1 = require("../index");
|
|
4
|
-
test("Should access first level property", () => {
|
|
5
|
-
const supportTicket = {
|
|
6
|
-
id: "e4te583nbt",
|
|
7
|
-
title: "Problem with server",
|
|
8
|
-
user: "daniel31",
|
|
9
|
-
};
|
|
10
|
-
expect((0, index_1.getContentProperty)(supportTicket, "user")).toBe("daniel31");
|
|
11
|
-
expect((0, index_1.getContentProperty)(supportTicket, "description")).toBe("");
|
|
12
|
-
});
|
|
13
|
-
test("Should access second level property", () => {
|
|
14
|
-
const employee = {
|
|
15
|
-
name: "Sophie",
|
|
16
|
-
age: "21",
|
|
17
|
-
email: {
|
|
18
|
-
work: "sophiedev@job.com",
|
|
19
|
-
personal: "sophie@email.com",
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
expect((0, index_1.getContentProperty)(employee, "email.work")).toBe("sophiedev@job.com");
|
|
23
|
-
expect((0, index_1.getContentProperty)(employee, "email.personal")).toBe("sophie@email.com");
|
|
24
|
-
expect((0, index_1.getContentProperty)(employee, "email.business")).toBe("");
|
|
25
|
-
});
|
|
26
|
-
test("Should access third level property", () => {
|
|
27
|
-
const purchase = {
|
|
28
|
-
id: "934as44951",
|
|
29
|
-
costumer: {
|
|
30
|
-
email: "jeniffer@email.com",
|
|
31
|
-
phoneNumber: "44444444",
|
|
32
|
-
billingAddress: {
|
|
33
|
-
line1: "123 Street",
|
|
34
|
-
city: "Montreal",
|
|
35
|
-
postalCode: 55555,
|
|
36
|
-
},
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
expect((0, index_1.getContentProperty)(purchase, "costumer.billingAddress.line1")).toBe("123 Street");
|
|
40
|
-
expect((0, index_1.getContentProperty)(purchase, "costumer.billingAddress.city")).toBe("Montreal");
|
|
41
|
-
expect((0, index_1.getContentProperty)(purchase, "costumer.billingAddress.postalCode")).toBe(55555);
|
|
42
|
-
expect((0, index_1.getContentProperty)(purchase, "costumer.billingAddress.countryCode")).toBe("");
|
|
43
|
-
});
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudFByb3BlcnR5LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2NvbnRlbnRQcm9wZXJ0eS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsb0NBQTZDO0FBRTdDLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUU7SUFDOUMsTUFBTSxhQUFhLEdBQUc7UUFDcEIsRUFBRSxFQUFFLFlBQVk7UUFDaEIsS0FBSyxFQUFFLHFCQUFxQjtRQUM1QixJQUFJLEVBQUUsVUFBVTtLQUNqQixDQUFBO0lBRUQsTUFBTSxDQUFDLElBQUEsMEJBQWtCLEVBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRWxFLE1BQU0sQ0FBQyxJQUFBLDBCQUFrQixFQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUNuRSxDQUFDLENBQUMsQ0FBQTtBQUVGLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLEVBQUU7SUFDL0MsTUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJLEVBQUUsUUFBUTtRQUNkLEdBQUcsRUFBRSxJQUFJO1FBQ1QsS0FBSyxFQUFFO1lBQ0wsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixRQUFRLEVBQUUsa0JBQWtCO1NBQzdCO0tBQ0YsQ0FBQTtJQUVELE1BQU0sQ0FBQyxJQUFBLDBCQUFrQixFQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBRTVFLE1BQU0sQ0FBQyxJQUFBLDBCQUFrQixFQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFFL0UsTUFBTSxDQUFDLElBQUEsMEJBQWtCLEVBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDakUsQ0FBQyxDQUFDLENBQUE7QUFFRixJQUFJLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO0lBQzlDLE1BQU0sUUFBUSxHQUFHO1FBQ2YsRUFBRSxFQUFFLFlBQVk7UUFDaEIsUUFBUSxFQUFFO1lBQ1IsS0FBSyxFQUFFLG9CQUFvQjtZQUMzQixXQUFXLEVBQUUsVUFBVTtZQUN2QixjQUFjLEVBQUU7Z0JBQ2QsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLElBQUksRUFBRSxVQUFVO2dCQUNoQixVQUFVLEVBQUUsS0FBSzthQUNsQjtTQUNGO0tBQ0YsQ0FBQTtJQUVELE1BQU0sQ0FBQyxJQUFBLDBCQUFrQixFQUFDLFFBQVEsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBRXhGLE1BQU0sQ0FBQyxJQUFBLDBCQUFrQixFQUFDLFFBQVEsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRXJGLE1BQU0sQ0FBQyxJQUFBLDBCQUFrQixFQUFDLFFBQVEsRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRXRGLE1BQU0sQ0FBQyxJQUFBLDBCQUFrQixFQUFDLFFBQVEsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ3RGLENBQUMsQ0FBQyxDQUFBIn0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const index_1 = require("../index");
|
|
4
|
-
test("", () => {
|
|
5
|
-
const track = {
|
|
6
|
-
id: "4ase432i",
|
|
7
|
-
name: "Help",
|
|
8
|
-
artist: "Galantis",
|
|
9
|
-
album: {
|
|
10
|
-
id: "532o48sn3",
|
|
11
|
-
name: "Help",
|
|
12
|
-
albumType: "single",
|
|
13
|
-
totalTracks: 1,
|
|
14
|
-
releaseDate: "2014-03-11",
|
|
15
|
-
},
|
|
16
|
-
explicit: false,
|
|
17
|
-
popularity: 21,
|
|
18
|
-
durationMs: 4010,
|
|
19
|
-
};
|
|
20
|
-
expect((0, index_1.getJsonSheetRow)(track, [{ label: "ID", value: "id" }])).toEqual({ ID: "4ase432i" });
|
|
21
|
-
expect((0, index_1.getJsonSheetRow)(track, [{ label: "Name", value: "name" }])).toEqual({ Name: "Help" });
|
|
22
|
-
expect((0, index_1.getJsonSheetRow)(track, [{ label: "Artist", value: "artist" }])).toEqual({ Artist: "Galantis" });
|
|
23
|
-
expect((0, index_1.getJsonSheetRow)(track, [{ label: "Album", value: "album.name" }])).toEqual({ Album: "Help" });
|
|
24
|
-
expect((0, index_1.getJsonSheetRow)(track, [
|
|
25
|
-
{
|
|
26
|
-
label: "Explicit content",
|
|
27
|
-
value: (content) => {
|
|
28
|
-
return content.explicit ? "Yes" : "No";
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
])).toEqual({ "Explicit content": "No" });
|
|
32
|
-
expect((0, index_1.getJsonSheetRow)(track, [{ label: "Popularity", value: "popularity" }])).toEqual({ Popularity: 21 });
|
|
33
|
-
expect((0, index_1.getJsonSheetRow)(track, [
|
|
34
|
-
{
|
|
35
|
-
label: "Duration",
|
|
36
|
-
value: (content) => {
|
|
37
|
-
return content.durationMs / 1000 + "s";
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
])).toEqual({ Duration: "4.01s" });
|
|
41
|
-
expect((0, index_1.getJsonSheetRow)(track, [{ label: "URI", value: "uri" }])).toEqual({ URI: "" });
|
|
42
|
-
expect((0, index_1.getJsonSheetRow)(track, [{ label: "Album", value: "album" }])).toEqual({
|
|
43
|
-
Album: {
|
|
44
|
-
id: "532o48sn3",
|
|
45
|
-
name: "Help",
|
|
46
|
-
albumType: "single",
|
|
47
|
-
totalTracks: 1,
|
|
48
|
-
releaseDate: "2014-03-11",
|
|
49
|
-
},
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0SnNvblNoZWV0Um93LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2dldEpzb25TaGVldFJvdy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsb0NBQW9EO0FBRXBELElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFO0lBQ1osTUFBTSxLQUFLLEdBQUc7UUFDWixFQUFFLEVBQUUsVUFBVTtRQUNkLElBQUksRUFBRSxNQUFNO1FBQ1osTUFBTSxFQUFFLFVBQVU7UUFDbEIsS0FBSyxFQUFFO1lBQ0wsRUFBRSxFQUFFLFdBQVc7WUFDZixJQUFJLEVBQUUsTUFBTTtZQUNaLFNBQVMsRUFBRSxRQUFRO1lBQ25CLFdBQVcsRUFBRSxDQUFDO1lBQ2QsV0FBVyxFQUFFLFlBQVk7U0FDMUI7UUFDRCxRQUFRLEVBQUUsS0FBSztRQUNmLFVBQVUsRUFBRSxFQUFFO1FBQ2QsVUFBVSxFQUFFLElBQUk7S0FDakIsQ0FBQTtJQUVELE1BQU0sQ0FBQyxJQUFBLHVCQUFlLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQTtJQUUxRixNQUFNLENBQUMsSUFBQSx1QkFBZSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFFNUYsTUFBTSxDQUFDLElBQUEsdUJBQWUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO0lBRXRHLE1BQU0sQ0FBQyxJQUFBLHVCQUFlLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUVwRyxNQUFNLENBQ0osSUFBQSx1QkFBZSxFQUFDLEtBQUssRUFBRTtRQUNyQjtZQUNFLEtBQUssRUFBRSxrQkFBa0I7WUFDekIsS0FBSyxFQUFFLENBQUMsT0FBaUIsRUFBRSxFQUFFO2dCQUMzQixPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO1lBQ3hDLENBQUM7U0FDRjtLQUNGLENBQUMsQ0FDSCxDQUFDLE9BQU8sQ0FBQyxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFFdkMsTUFBTSxDQUFDLElBQUEsdUJBQWUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRTFHLE1BQU0sQ0FDSixJQUFBLHVCQUFlLEVBQUMsS0FBSyxFQUFFO1FBQ3JCO1lBQ0UsS0FBSyxFQUFFLFVBQVU7WUFDakIsS0FBSyxFQUFFLENBQUMsT0FBaUIsRUFBRSxFQUFFO2dCQUMzQixPQUFRLE9BQU8sQ0FBQyxVQUFxQixHQUFHLElBQUksR0FBRyxHQUFHLENBQUE7WUFDcEQsQ0FBQztTQUNGO0tBQ0YsQ0FBQyxDQUNILENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFFaEMsTUFBTSxDQUFDLElBQUEsdUJBQWUsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRXJGLE1BQU0sQ0FBQyxJQUFBLHVCQUFlLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDM0UsS0FBSyxFQUFFO1lBQ0wsRUFBRSxFQUFFLFdBQVc7WUFDZixJQUFJLEVBQUUsTUFBTTtZQUNaLFNBQVMsRUFBRSxRQUFRO1lBQ25CLFdBQVcsRUFBRSxDQUFDO1lBQ2QsV0FBVyxFQUFFLFlBQVk7U0FDMUI7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSJ9
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const xlsx_1 = require("xlsx");
|
|
4
|
-
const index_1 = require("../index");
|
|
5
|
-
test("Should return only one column width", () => {
|
|
6
|
-
const content = { username: "art3mis" };
|
|
7
|
-
const columns = [{ label: "Username", value: "username" }];
|
|
8
|
-
const jsonSheetRow = (0, index_1.getJsonSheetRow)(content, columns);
|
|
9
|
-
const worksheet = xlsx_1.utils.json_to_sheet([jsonSheetRow]);
|
|
10
|
-
// Column label is larger than content
|
|
11
|
-
expect((0, index_1.getWorksheetColumnWidths)(worksheet)).toEqual([{ width: 9 }]);
|
|
12
|
-
expect((0, index_1.getWorksheetColumnWidths)(worksheet, 0)).toEqual([{ width: 8 }]);
|
|
13
|
-
expect((0, index_1.getWorksheetColumnWidths)(worksheet, 4)).toEqual([{ width: 12 }]);
|
|
14
|
-
});
|
|
15
|
-
test("Should return two column widths", () => {
|
|
16
|
-
const content = { name: "Interstellar", year: 2014 };
|
|
17
|
-
const columns = [
|
|
18
|
-
{ label: "Movie", value: "name" },
|
|
19
|
-
{ label: "Year", value: "year" },
|
|
20
|
-
];
|
|
21
|
-
const jsonSheetRow = (0, index_1.getJsonSheetRow)(content, columns);
|
|
22
|
-
const worksheet = xlsx_1.utils.json_to_sheet([jsonSheetRow]);
|
|
23
|
-
// Content is larger than column label
|
|
24
|
-
expect((0, index_1.getWorksheetColumnWidths)(worksheet)).toEqual([{ width: 13 }, { width: 5 }]);
|
|
25
|
-
expect((0, index_1.getWorksheetColumnWidths)(worksheet, 0)).toEqual([{ width: 12 }, { width: 4 }]);
|
|
26
|
-
expect((0, index_1.getWorksheetColumnWidths)(worksheet, 4)).toEqual([{ width: 16 }, { width: 8 }]);
|
|
27
|
-
});
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0V29ya3NoZWV0Q29sdW1XaWR0aHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vZ2V0V29ya3NoZWV0Q29sdW1XaWR0aHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtCQUE0QjtBQUM1QixvQ0FBb0U7QUFFcEUsSUFBSSxDQUFDLHFDQUFxQyxFQUFFLEdBQUcsRUFBRTtJQUMvQyxNQUFNLE9BQU8sR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQTtJQUN2QyxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQTtJQUUxRCxNQUFNLFlBQVksR0FBRyxJQUFBLHVCQUFlLEVBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3RELE1BQU0sU0FBUyxHQUFHLFlBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO0lBRXJELHNDQUFzQztJQUN0QyxNQUFNLENBQUMsSUFBQSxnQ0FBd0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUVuRSxNQUFNLENBQUMsSUFBQSxnQ0FBd0IsRUFBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFFdEUsTUFBTSxDQUFDLElBQUEsZ0NBQXdCLEVBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ3pFLENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtJQUMzQyxNQUFNLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ3BELE1BQU0sT0FBTyxHQUFHO1FBQ2QsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7UUFDakMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7S0FDakMsQ0FBQTtJQUVELE1BQU0sWUFBWSxHQUFHLElBQUEsdUJBQWUsRUFBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDdEQsTUFBTSxTQUFTLEdBQUcsWUFBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUE7SUFFckQsc0NBQXNDO0lBQ3RDLE1BQU0sQ0FBQyxJQUFBLGdDQUF3QixFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBRWxGLE1BQU0sQ0FBQyxJQUFBLGdDQUF3QixFQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUVyRixNQUFNLENBQUMsSUFBQSxnQ0FBd0IsRUFBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDdkYsQ0FBQyxDQUFDLENBQUEifQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const xlsx_1 = require("xlsx");
|
|
7
|
-
const index_1 = __importDefault(require("../index"));
|
|
8
|
-
describe("json-as-xlsx", () => {
|
|
9
|
-
it("should return undefined if sheets array is empty", () => {
|
|
10
|
-
const sheets = [];
|
|
11
|
-
const result = (0, index_1.default)(sheets);
|
|
12
|
-
expect(result).toBeUndefined();
|
|
13
|
-
});
|
|
14
|
-
describe("writeOptions.type is set to buffer", () => {
|
|
15
|
-
const settings = {
|
|
16
|
-
writeOptions: {
|
|
17
|
-
type: "buffer",
|
|
18
|
-
},
|
|
19
|
-
};
|
|
20
|
-
it("should return buffer", () => {
|
|
21
|
-
const sheets = [
|
|
22
|
-
{
|
|
23
|
-
columns: [{ label: "Name", value: "name" }],
|
|
24
|
-
content: [{ name: "Martin" }],
|
|
25
|
-
},
|
|
26
|
-
];
|
|
27
|
-
const buffer = (0, index_1.default)(sheets, settings);
|
|
28
|
-
expect(buffer).toBeInstanceOf(Buffer);
|
|
29
|
-
});
|
|
30
|
-
it("should return parsable xlsx buffer", () => {
|
|
31
|
-
const sheets = [
|
|
32
|
-
{
|
|
33
|
-
columns: [{ label: "Name", value: "name" }],
|
|
34
|
-
content: [{ name: "Martin" }],
|
|
35
|
-
},
|
|
36
|
-
];
|
|
37
|
-
const buffer = (0, index_1.default)(sheets, settings);
|
|
38
|
-
const workBook = (0, xlsx_1.read)(buffer);
|
|
39
|
-
expect(workBook).toBeDefined();
|
|
40
|
-
});
|
|
41
|
-
it("should return one column filled cells", () => {
|
|
42
|
-
const sheets = [
|
|
43
|
-
{
|
|
44
|
-
sheet: "Authors",
|
|
45
|
-
columns: [{ label: "Name", value: "name" }],
|
|
46
|
-
content: [{ name: "Martin" }, { name: "Kent" }],
|
|
47
|
-
},
|
|
48
|
-
];
|
|
49
|
-
const buffer = (0, index_1.default)(sheets, settings);
|
|
50
|
-
const workBook = (0, xlsx_1.read)(buffer);
|
|
51
|
-
const workSheet = workBook.Sheets.Authors;
|
|
52
|
-
expect(workSheet["!ref"]).toBe("A1:A3");
|
|
53
|
-
expect(workSheet.A1.v).toBe("Name");
|
|
54
|
-
expect(workSheet.A2.v).toBe("Martin");
|
|
55
|
-
expect(workSheet.A3.v).toBe("Kent");
|
|
56
|
-
});
|
|
57
|
-
it("should return only the column headers if there is no content", () => {
|
|
58
|
-
const sheetName = "Authors";
|
|
59
|
-
const sheets = [
|
|
60
|
-
{
|
|
61
|
-
sheet: sheetName,
|
|
62
|
-
columns: [
|
|
63
|
-
{ label: "Name", value: "name" },
|
|
64
|
-
{ label: "Age", value: "age" },
|
|
65
|
-
],
|
|
66
|
-
content: [],
|
|
67
|
-
},
|
|
68
|
-
];
|
|
69
|
-
const buffer = (0, index_1.default)(sheets, settings);
|
|
70
|
-
const workBook = (0, xlsx_1.read)(buffer);
|
|
71
|
-
const workSheet = workBook.Sheets[sheetName];
|
|
72
|
-
expect(workSheet.A1.v).toBe("Name");
|
|
73
|
-
expect(workSheet.B1.v).toBe("Age");
|
|
74
|
-
});
|
|
75
|
-
it("should handle deep props", () => {
|
|
76
|
-
const sheets = [
|
|
77
|
-
{
|
|
78
|
-
sheet: "Users",
|
|
79
|
-
columns: [{ label: "IP", value: "metadata.ip" }],
|
|
80
|
-
content: [
|
|
81
|
-
{ name: "Martin", metadata: { ip: "0.0.0.0" } },
|
|
82
|
-
{ name: "Robert", metadata: { ip: "0.0.0.1" } },
|
|
83
|
-
],
|
|
84
|
-
},
|
|
85
|
-
];
|
|
86
|
-
const buffer = (0, index_1.default)(sheets, settings);
|
|
87
|
-
const workBook = (0, xlsx_1.read)(buffer);
|
|
88
|
-
const workSheet = workBook.Sheets.Users;
|
|
89
|
-
expect(workSheet.A1.v).toBe("IP");
|
|
90
|
-
expect(workSheet.A2.v).toBe("0.0.0.0");
|
|
91
|
-
expect(workSheet.A3.v).toBe("0.0.0.1");
|
|
92
|
-
});
|
|
93
|
-
it("should handle function column value", () => {
|
|
94
|
-
const maskPhoneNumber = (cell) => new String(cell.phone).replace(/^(\d{3})(\d{4}).*/, "$1-$2");
|
|
95
|
-
const sheets = [
|
|
96
|
-
{
|
|
97
|
-
sheet: "Users",
|
|
98
|
-
columns: [{ label: "Phone number", value: maskPhoneNumber }],
|
|
99
|
-
content: [
|
|
100
|
-
{ name: "Martin", phone: "1234567" },
|
|
101
|
-
{ name: "Robert", phone: "1234568" },
|
|
102
|
-
],
|
|
103
|
-
},
|
|
104
|
-
];
|
|
105
|
-
const buffer = (0, index_1.default)(sheets, settings);
|
|
106
|
-
const workBook = (0, xlsx_1.read)(buffer);
|
|
107
|
-
const workSheet = workBook.Sheets.Users;
|
|
108
|
-
expect(workSheet.A1.v).toBe("Phone number");
|
|
109
|
-
expect(workSheet.A2.v).toBe("123-4567");
|
|
110
|
-
expect(workSheet.A3.v).toBe("123-4568");
|
|
111
|
-
});
|
|
112
|
-
it("should call optional callback", () => {
|
|
113
|
-
const callback = jest.fn();
|
|
114
|
-
const sheets = [
|
|
115
|
-
{
|
|
116
|
-
columns: [{ label: "Name", value: "name" }],
|
|
117
|
-
content: [{ name: "Martin" }],
|
|
118
|
-
},
|
|
119
|
-
];
|
|
120
|
-
(0, index_1.default)(sheets, settings, callback);
|
|
121
|
-
expect(callback).toBeCalledTimes(1);
|
|
122
|
-
});
|
|
123
|
-
it("should handle multiple sheets", () => {
|
|
124
|
-
const sheets = [
|
|
125
|
-
{
|
|
126
|
-
sheet: "Authors",
|
|
127
|
-
columns: [
|
|
128
|
-
{ label: "Name", value: "name" },
|
|
129
|
-
{ label: "Age", value: "age" },
|
|
130
|
-
],
|
|
131
|
-
content: [
|
|
132
|
-
{ name: "Martin", age: 50 },
|
|
133
|
-
{ name: "Robert", age: 20 },
|
|
134
|
-
{ name: "Andrea", age: 35 },
|
|
135
|
-
],
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
sheet: "Books",
|
|
139
|
-
columns: [
|
|
140
|
-
{ label: "Title", value: "title" },
|
|
141
|
-
{ label: "Author", value: "author" },
|
|
142
|
-
],
|
|
143
|
-
content: [
|
|
144
|
-
{ title: "TDD", author: "Martin" },
|
|
145
|
-
{ title: "Git", author: "Robert" },
|
|
146
|
-
],
|
|
147
|
-
},
|
|
148
|
-
];
|
|
149
|
-
const buffer = (0, index_1.default)(sheets, settings);
|
|
150
|
-
const workBook = (0, xlsx_1.read)(buffer);
|
|
151
|
-
const authorsSheet = workBook.Sheets.Authors;
|
|
152
|
-
const booksSheet = workBook.Sheets.Books;
|
|
153
|
-
expect(workBook.SheetNames).toEqual(["Authors", "Books"]);
|
|
154
|
-
expect(authorsSheet.A1.v).toBe("Name");
|
|
155
|
-
expect(authorsSheet.B1.v).toBe("Age");
|
|
156
|
-
expect(authorsSheet.A2.v).toBe("Martin");
|
|
157
|
-
expect(authorsSheet.B2.v).toBe(50);
|
|
158
|
-
expect(authorsSheet.A3.v).toBe("Robert");
|
|
159
|
-
expect(authorsSheet.B3.v).toBe(20);
|
|
160
|
-
expect(authorsSheet.A4.v).toBe("Andrea");
|
|
161
|
-
expect(authorsSheet.B4.v).toBe(35);
|
|
162
|
-
expect(booksSheet.A1.v).toBe("Title");
|
|
163
|
-
expect(booksSheet.B1.v).toBe("Author");
|
|
164
|
-
expect(booksSheet.A2.v).toBe("TDD");
|
|
165
|
-
expect(booksSheet.B2.v).toBe("Martin");
|
|
166
|
-
expect(booksSheet.A3.v).toBe("Git");
|
|
167
|
-
expect(booksSheet.B3.v).toBe("Robert");
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtCQUFpRDtBQUNqRCxxREFBb0U7QUFFcEUsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7SUFDNUIsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtRQUMxRCxNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFBO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUEsZUFBUSxFQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtJQUNoQyxDQUFDLENBQUMsQ0FBQTtJQUVGLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUU7UUFDbEQsTUFBTSxRQUFRLEdBQWM7WUFDMUIsWUFBWSxFQUFFO2dCQUNaLElBQUksRUFBRSxRQUFRO2FBQ2Y7U0FDRixDQUFBO1FBRUQsRUFBRSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtZQUM5QixNQUFNLE1BQU0sR0FBRztnQkFDYjtvQkFDRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO29CQUMzQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztpQkFDOUI7YUFDRixDQUFBO1lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBQSxlQUFRLEVBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDdkMsQ0FBQyxDQUFDLENBQUE7UUFFRixFQUFFLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO1lBQzVDLE1BQU0sTUFBTSxHQUFHO2dCQUNiO29CQUNFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7b0JBQzNDLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO2lCQUM5QjthQUNGLENBQUE7WUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGVBQVEsRUFBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBQSxXQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFBO1lBRTNDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNoQyxDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7WUFDL0MsTUFBTSxNQUFNLEdBQUc7Z0JBQ2I7b0JBQ0UsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7b0JBQzNDLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO2lCQUNoRDthQUNGLENBQUE7WUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGVBQVEsRUFBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBQSxXQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzNDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFBO1lBRXpDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDdkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ25DLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUNyQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDckMsQ0FBQyxDQUFDLENBQUE7UUFFRixFQUFFLENBQUMsOERBQThELEVBQUUsR0FBRyxFQUFFO1lBQ3RFLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQTtZQUMzQixNQUFNLE1BQU0sR0FBRztnQkFDYjtvQkFDRSxLQUFLLEVBQUUsU0FBUztvQkFDaEIsT0FBTyxFQUFFO3dCQUNQLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO3dCQUNoQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtxQkFDL0I7b0JBQ0QsT0FBTyxFQUFFLEVBQUU7aUJBQ1o7YUFDRixDQUFBO1lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBQSxlQUFRLEVBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUEsV0FBa0IsRUFBQyxNQUFNLENBQUMsQ0FBQTtZQUMzQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBRTVDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNuQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEMsQ0FBQyxDQUFDLENBQUE7UUFFRixFQUFFLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1lBQ2xDLE1BQU0sTUFBTSxHQUFHO2dCQUNiO29CQUNFLEtBQUssRUFBRSxPQUFPO29CQUNkLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUM7b0JBQ2hELE9BQU8sRUFBRTt3QkFDUCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFO3dCQUMvQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFO3FCQUNoRDtpQkFDRjthQUNGLENBQUE7WUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGVBQVEsRUFBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBQSxXQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzNDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFBO1lBRXZDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNqQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDdEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3hDLENBQUMsQ0FBQyxDQUFBO1FBRUYsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLEdBQUcsRUFBRTtZQUM3QyxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQWMsRUFBVSxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUVoSCxNQUFNLE1BQU0sR0FBRztnQkFDYjtvQkFDRSxLQUFLLEVBQUUsT0FBTztvQkFDZCxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO29CQUM1RCxPQUFPLEVBQUU7d0JBQ1AsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7d0JBQ3BDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO3FCQUNyQztpQkFDRjthQUNGLENBQUE7WUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGVBQVEsRUFBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBQSxXQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzNDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFBO1lBRXZDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUMzQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDdkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3pDLENBQUMsQ0FBQyxDQUFBO1FBRUYsRUFBRSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtZQUN2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUE7WUFDMUIsTUFBTSxNQUFNLEdBQUc7Z0JBQ2I7b0JBQ0UsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztvQkFDM0MsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7aUJBQzlCO2FBQ0YsQ0FBQTtZQUNELElBQUEsZUFBUSxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFFcEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNyQyxDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7WUFDdkMsTUFBTSxNQUFNLEdBQUc7Z0JBQ2I7b0JBQ0UsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTt3QkFDaEMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7cUJBQy9CO29CQUNELE9BQU8sRUFBRTt3QkFDUCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTt3QkFDM0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7d0JBQzNCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO3FCQUM1QjtpQkFDRjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsT0FBTztvQkFDZCxPQUFPLEVBQUU7d0JBQ1AsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7d0JBQ2xDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO3FCQUNyQztvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7d0JBQ2xDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO3FCQUNuQztpQkFDRjthQUNGLENBQUE7WUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGVBQVEsRUFBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBQSxXQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFBO1lBRTNDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFBO1lBQzVDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFBO1lBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7WUFFekQsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ3RDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNyQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDeEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ2xDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUN4QyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDbEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3hDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUVsQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDckMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3RDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNuQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDdEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ25DLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN4QyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEifQ==
|