@microsoft/connected-workbooks 3.3.2-beta → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/utils/constants.js +87 -49
- package/dist/utils/documentUtils.js +1 -1
- package/dist/utils/gridUtils.js +8 -8
- package/dist/utils/mashupDocumentParser.js +1 -1
- package/dist/utils/pqUtils.js +3 -3
- package/dist/utils/tableUtils.js +11 -4
- package/dist/utils/xmlInnerPartsUtils.js +245 -13
- package/dist/utils/xmlPartsUtils.js +74 -4
- package/dist/workbookManager.js +3 -3
- package/package.json +7 -3
- package/dist/src/generators.js +0 -15
- package/dist/src/types.js +0 -28
- package/dist/src/utils/arrayUtils.js +0 -51
- package/dist/src/utils/constants.js +0 -175
- package/dist/src/utils/documentUtils.js +0 -167
- package/dist/src/utils/gridUtils.js +0 -103
- package/dist/src/utils/htmlUtils.js +0 -19
- package/dist/src/utils/index.js +0 -24
- package/dist/src/utils/mashupDocumentParser.js +0 -188
- package/dist/src/utils/pqUtils.js +0 -194
- package/dist/src/utils/tableUtils.js +0 -233
- package/dist/src/utils/xmlInnerPartsUtils.js +0 -431
- package/dist/src/utils/xmlPartsUtils.js +0 -178
- package/dist/src/workbookTemplate.js +0 -9
- package/dist/tests/arrayUtils.test.js +0 -66
- package/dist/tests/documentUtils.test.js +0 -70
- package/dist/tests/gridUtils.test.js +0 -214
- package/dist/tests/htmlUtils.test.js +0 -111
- package/dist/tests/mashupDocumentParser.test.js +0 -113
- package/dist/tests/mocks/PqMock.js +0 -7
- package/dist/tests/mocks/index.js +0 -24
- package/dist/tests/mocks/section1mSimpleQueryMock.js +0 -8
- package/dist/tests/mocks/xmlMocks.js +0 -14
- package/dist/tests/tableUtils.test.js +0 -70
- package/dist/tests/workbookQueryTemplate.test.js +0 -218
- package/dist/tests/workbookTableTemplate.test.js +0 -126
- package/dist/tests/xmlInnerPartsUtils.test.js +0 -273
|
@@ -1,431 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright (c) Microsoft Corporation.
|
|
3
|
-
// Licensed under the MIT license.
|
|
4
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
5
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
8
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
9
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
10
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
|
-
});
|
|
12
|
-
};
|
|
13
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
14
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
15
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
16
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
17
|
-
function step(op) {
|
|
18
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
19
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
20
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
21
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
22
|
-
switch (op[0]) {
|
|
23
|
-
case 0: case 1: t = op; break;
|
|
24
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
25
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
26
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
27
|
-
default:
|
|
28
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
29
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
30
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
31
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
32
|
-
if (t[2]) _.ops.pop();
|
|
33
|
-
_.trys.pop(); continue;
|
|
34
|
-
}
|
|
35
|
-
op = body.call(thisArg, _);
|
|
36
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
37
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
41
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
42
|
-
};
|
|
43
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
-
var types_1 = require("../types");
|
|
45
|
-
var constants_1 = require("./constants");
|
|
46
|
-
var documentUtils_1 = __importDefault(require("./documentUtils"));
|
|
47
|
-
var xmldom_qsa_1 = require("xmldom-qsa");
|
|
48
|
-
var updateDocProps = function (zip, docProps) {
|
|
49
|
-
if (docProps === void 0) { docProps = {}; }
|
|
50
|
-
return __awaiter(void 0, void 0, void 0, function () {
|
|
51
|
-
var _a, doc, properties, docPropsAutoUpdatedElementsArr, nowTime, docPropsModifiableElementsArr, serializer, newDoc;
|
|
52
|
-
return __generator(this, function (_b) {
|
|
53
|
-
switch (_b.label) {
|
|
54
|
-
case 0: return [4 /*yield*/, documentUtils_1.default.getDocPropsProperties(zip)];
|
|
55
|
-
case 1:
|
|
56
|
-
_a = _b.sent(), doc = _a.doc, properties = _a.properties;
|
|
57
|
-
docPropsAutoUpdatedElementsArr = Object.keys(types_1.DocPropsAutoUpdatedElements);
|
|
58
|
-
nowTime = new Date().toISOString();
|
|
59
|
-
docPropsAutoUpdatedElementsArr.forEach(function (tag) {
|
|
60
|
-
documentUtils_1.default.createOrUpdateProperty(doc, properties, types_1.DocPropsAutoUpdatedElements[tag], nowTime);
|
|
61
|
-
});
|
|
62
|
-
docPropsModifiableElementsArr = Object.keys(types_1.DocPropsModifiableElements);
|
|
63
|
-
docPropsModifiableElementsArr
|
|
64
|
-
.map(function (key) { return ({
|
|
65
|
-
name: types_1.DocPropsModifiableElements[key],
|
|
66
|
-
value: docProps[key],
|
|
67
|
-
}); })
|
|
68
|
-
.forEach(function (kvp) {
|
|
69
|
-
documentUtils_1.default.createOrUpdateProperty(doc, properties, kvp.name, kvp.value);
|
|
70
|
-
});
|
|
71
|
-
serializer = new xmldom_qsa_1.XMLSerializer();
|
|
72
|
-
newDoc = serializer.serializeToString(doc);
|
|
73
|
-
zip.file(constants_1.docPropsCoreXmlPath, newDoc);
|
|
74
|
-
return [2 /*return*/];
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
};
|
|
79
|
-
var removeLabelInfoRelationship = function (doc, relationships) {
|
|
80
|
-
// Find and remove LabelInfo.xml relationship
|
|
81
|
-
var relationshipElements = doc.getElementsByTagName(constants_1.element.relationship);
|
|
82
|
-
for (var i = 0; i < relationshipElements.length; i++) {
|
|
83
|
-
var rel = relationshipElements[i];
|
|
84
|
-
if (rel.getAttribute(constants_1.elementAttributes.target) === constants_1.labelInfoXmlPath) {
|
|
85
|
-
relationships.removeChild(rel);
|
|
86
|
-
break;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
var updateRelationshipIds = function (doc) {
|
|
91
|
-
// Update relationship IDs
|
|
92
|
-
var relationshipElements = doc.getElementsByTagName(constants_1.element.relationship);
|
|
93
|
-
for (var i = 0; i < relationshipElements.length; i++) {
|
|
94
|
-
var rel = relationshipElements[i];
|
|
95
|
-
var target = rel.getAttribute(constants_1.elementAttributes.target);
|
|
96
|
-
if (target === constants_1.workbookXmlPath) {
|
|
97
|
-
rel.setAttribute(constants_1.elementAttributes.Id, constants_1.elementAttributes.relationId1);
|
|
98
|
-
}
|
|
99
|
-
else if (target === constants_1.docPropsCoreXmlPath) {
|
|
100
|
-
rel.setAttribute(constants_1.elementAttributes.Id, constants_1.elementAttributes.relationId2);
|
|
101
|
-
}
|
|
102
|
-
else if (target === constants_1.docPropsAppXmlPath) {
|
|
103
|
-
rel.setAttribute(constants_1.elementAttributes.Id, constants_1.elementAttributes.relationId3);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
var clearLabelInfo = function (zip) { return __awaiter(void 0, void 0, void 0, function () {
|
|
108
|
-
var relsString, parser, doc, relationshipsList, relationships, serializer, newDoc;
|
|
109
|
-
var _a;
|
|
110
|
-
return __generator(this, function (_b) {
|
|
111
|
-
switch (_b.label) {
|
|
112
|
-
case 0:
|
|
113
|
-
// remove docMetadata folder that contains only LabelInfo.xml in template file.
|
|
114
|
-
zip.remove(constants_1.docMetadataXmlPath);
|
|
115
|
-
return [4 /*yield*/, ((_a = zip.file(constants_1.relsXmlPath)) === null || _a === void 0 ? void 0 : _a.async(constants_1.textResultType))];
|
|
116
|
-
case 1:
|
|
117
|
-
relsString = _b.sent();
|
|
118
|
-
if (relsString === undefined) {
|
|
119
|
-
throw new Error(constants_1.relsNotFoundErr);
|
|
120
|
-
}
|
|
121
|
-
parser = new xmldom_qsa_1.DOMParser();
|
|
122
|
-
doc = parser.parseFromString(relsString, constants_1.xmlTextResultType);
|
|
123
|
-
relationshipsList = doc.getElementsByTagName(constants_1.element.relationships);
|
|
124
|
-
if (!relationshipsList || relationshipsList.length === 0) {
|
|
125
|
-
throw new Error(constants_1.relationshipErr);
|
|
126
|
-
}
|
|
127
|
-
relationships = relationshipsList[0];
|
|
128
|
-
if (!relationships) {
|
|
129
|
-
throw new Error(constants_1.relationshipErr);
|
|
130
|
-
}
|
|
131
|
-
removeLabelInfoRelationship(doc, relationships);
|
|
132
|
-
updateRelationshipIds(doc);
|
|
133
|
-
serializer = new xmldom_qsa_1.XMLSerializer();
|
|
134
|
-
newDoc = serializer.serializeToString(doc);
|
|
135
|
-
zip.file(constants_1.relsXmlPath, newDoc);
|
|
136
|
-
return [2 /*return*/];
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
}); };
|
|
140
|
-
var updateConnections = function (connectionsXmlString, queryName, refreshOnOpen) {
|
|
141
|
-
var _a, _b, _c;
|
|
142
|
-
var parser = new xmldom_qsa_1.DOMParser();
|
|
143
|
-
var serializer = new xmldom_qsa_1.XMLSerializer();
|
|
144
|
-
var refreshOnLoadValue = refreshOnOpen ? constants_1.trueValue : constants_1.falseValue;
|
|
145
|
-
var connectionsDoc = parser.parseFromString(connectionsXmlString, constants_1.xmlTextResultType);
|
|
146
|
-
var connectionsProperties = connectionsDoc.getElementsByTagName(constants_1.element.databaseProperties);
|
|
147
|
-
var dbPr = connectionsProperties[0];
|
|
148
|
-
dbPr.setAttribute(constants_1.elementAttributes.refreshOnLoad, refreshOnLoadValue);
|
|
149
|
-
// Update query details to match queryName
|
|
150
|
-
(_a = dbPr.parentNode) === null || _a === void 0 ? void 0 : _a.setAttribute(constants_1.elementAttributes.name, constants_1.elementAttributesValues.connectionName(queryName));
|
|
151
|
-
(_b = dbPr.parentNode) === null || _b === void 0 ? void 0 : _b.setAttribute(constants_1.elementAttributes.description, constants_1.elementAttributesValues.connectionDescription(queryName));
|
|
152
|
-
dbPr.setAttribute(constants_1.elementAttributes.connection, constants_1.elementAttributesValues.connection(queryName));
|
|
153
|
-
dbPr.setAttribute(constants_1.elementAttributes.command, constants_1.elementAttributesValues.connectionCommand(queryName));
|
|
154
|
-
var connectionId = (_c = dbPr.parentNode) === null || _c === void 0 ? void 0 : _c.getAttribute(constants_1.elementAttributes.id);
|
|
155
|
-
var connectionXmlFileString = serializer.serializeToString(connectionsDoc);
|
|
156
|
-
if (connectionId === null) {
|
|
157
|
-
throw new Error(constants_1.connectionsNotFoundErr);
|
|
158
|
-
}
|
|
159
|
-
return { connectionId: connectionId, connectionXmlFileString: connectionXmlFileString };
|
|
160
|
-
};
|
|
161
|
-
var updateSharedStrings = function (sharedStringsXmlString, queryName) {
|
|
162
|
-
var parser = new xmldom_qsa_1.DOMParser();
|
|
163
|
-
var serializer = new xmldom_qsa_1.XMLSerializer();
|
|
164
|
-
var sharedStringsDoc = parser.parseFromString(sharedStringsXmlString, constants_1.xmlTextResultType);
|
|
165
|
-
var sharedStringsTable = sharedStringsDoc.getElementsByTagName(constants_1.element.sharedStringTable)[0];
|
|
166
|
-
if (!sharedStringsTable) {
|
|
167
|
-
throw new Error(constants_1.sharedStringsNotFoundErr);
|
|
168
|
-
}
|
|
169
|
-
var textElementCollection = sharedStringsDoc.getElementsByTagName(constants_1.element.text);
|
|
170
|
-
var textElement = null;
|
|
171
|
-
var sharedStringIndex = textElementCollection.length;
|
|
172
|
-
if (textElementCollection && textElementCollection.length) {
|
|
173
|
-
for (var i = 0; i < textElementCollection.length; i++) {
|
|
174
|
-
if (textElementCollection[i].textContent === queryName) {
|
|
175
|
-
textElement = textElementCollection[i];
|
|
176
|
-
sharedStringIndex = i + 1;
|
|
177
|
-
break;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
if (textElement === null) {
|
|
182
|
-
if (sharedStringsDoc.documentElement.namespaceURI) {
|
|
183
|
-
textElement = sharedStringsDoc.createElementNS(sharedStringsDoc.documentElement.namespaceURI, constants_1.element.text);
|
|
184
|
-
textElement.textContent = queryName;
|
|
185
|
-
var siElement = sharedStringsDoc.createElementNS(sharedStringsDoc.documentElement.namespaceURI, constants_1.element.sharedStringItem);
|
|
186
|
-
siElement.appendChild(textElement);
|
|
187
|
-
sharedStringsDoc.getElementsByTagName(constants_1.element.sharedStringTable)[0].appendChild(siElement);
|
|
188
|
-
}
|
|
189
|
-
var value = sharedStringsTable.getAttribute(constants_1.elementAttributes.count);
|
|
190
|
-
if (value) {
|
|
191
|
-
sharedStringsTable.setAttribute(constants_1.elementAttributes.count, (parseInt(value) + 1).toString());
|
|
192
|
-
}
|
|
193
|
-
var uniqueValue = sharedStringsTable.getAttribute(constants_1.elementAttributes.uniqueCount);
|
|
194
|
-
if (uniqueValue) {
|
|
195
|
-
sharedStringsTable.setAttribute(constants_1.elementAttributes.uniqueCount, (parseInt(uniqueValue) + 1).toString());
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
var newSharedStrings = serializer.serializeToString(sharedStringsDoc);
|
|
199
|
-
return { sharedStringIndex: sharedStringIndex, newSharedStrings: newSharedStrings };
|
|
200
|
-
};
|
|
201
|
-
var updateWorksheet = function (sheetsXmlString, sharedStringIndex) {
|
|
202
|
-
var parser = new xmldom_qsa_1.DOMParser();
|
|
203
|
-
var serializer = new xmldom_qsa_1.XMLSerializer();
|
|
204
|
-
var sheetsDoc = parser.parseFromString(sheetsXmlString, constants_1.xmlTextResultType);
|
|
205
|
-
sheetsDoc.getElementsByTagName(constants_1.element.cellValue)[0].innerHTML = sharedStringIndex.toString();
|
|
206
|
-
var newSheet = serializer.serializeToString(sheetsDoc);
|
|
207
|
-
return newSheet;
|
|
208
|
-
};
|
|
209
|
-
var updatePivotTablesandQueryTables = function (zip, queryName, refreshOnOpen, connectionId) { return __awaiter(void 0, void 0, void 0, function () {
|
|
210
|
-
var found, queryTablePromises, pivotCachePromises;
|
|
211
|
-
var _a, _b;
|
|
212
|
-
return __generator(this, function (_c) {
|
|
213
|
-
switch (_c.label) {
|
|
214
|
-
case 0:
|
|
215
|
-
found = false;
|
|
216
|
-
queryTablePromises = [];
|
|
217
|
-
(_a = zip.folder(constants_1.queryTablesPath)) === null || _a === void 0 ? void 0 : _a.forEach(function (relativePath, queryTableFile) { return __awaiter(void 0, void 0, void 0, function () {
|
|
218
|
-
return __generator(this, function (_a) {
|
|
219
|
-
queryTablePromises.push((function () {
|
|
220
|
-
return queryTableFile.async(constants_1.textResultType).then(function (queryTableString) {
|
|
221
|
-
return {
|
|
222
|
-
path: relativePath,
|
|
223
|
-
queryTableXmlString: queryTableString,
|
|
224
|
-
};
|
|
225
|
-
});
|
|
226
|
-
})());
|
|
227
|
-
return [2 /*return*/];
|
|
228
|
-
});
|
|
229
|
-
}); });
|
|
230
|
-
return [4 /*yield*/, Promise.all(queryTablePromises)];
|
|
231
|
-
case 1:
|
|
232
|
-
(_c.sent()).forEach(function (_a) {
|
|
233
|
-
var path = _a.path, queryTableXmlString = _a.queryTableXmlString;
|
|
234
|
-
var _b = updateQueryTable(queryTableXmlString, connectionId, refreshOnOpen), isQueryTableUpdated = _b.isQueryTableUpdated, newQueryTable = _b.newQueryTable;
|
|
235
|
-
zip.file(constants_1.queryTablesPath + path, newQueryTable);
|
|
236
|
-
if (isQueryTableUpdated) {
|
|
237
|
-
found = true;
|
|
238
|
-
}
|
|
239
|
-
});
|
|
240
|
-
if (found) {
|
|
241
|
-
return [2 /*return*/];
|
|
242
|
-
}
|
|
243
|
-
pivotCachePromises = [];
|
|
244
|
-
(_b = zip.folder(constants_1.pivotCachesPath)) === null || _b === void 0 ? void 0 : _b.forEach(function (relativePath, pivotCacheFile) { return __awaiter(void 0, void 0, void 0, function () {
|
|
245
|
-
return __generator(this, function (_a) {
|
|
246
|
-
if (relativePath.startsWith(constants_1.pivotCachesPathPrefix)) {
|
|
247
|
-
pivotCachePromises.push((function () {
|
|
248
|
-
return pivotCacheFile.async(constants_1.textResultType).then(function (pivotCacheString) {
|
|
249
|
-
return {
|
|
250
|
-
path: relativePath,
|
|
251
|
-
pivotCacheXmlString: pivotCacheString,
|
|
252
|
-
};
|
|
253
|
-
});
|
|
254
|
-
})());
|
|
255
|
-
}
|
|
256
|
-
return [2 /*return*/];
|
|
257
|
-
});
|
|
258
|
-
}); });
|
|
259
|
-
return [4 /*yield*/, Promise.all(pivotCachePromises)];
|
|
260
|
-
case 2:
|
|
261
|
-
(_c.sent()).forEach(function (_a) {
|
|
262
|
-
var path = _a.path, pivotCacheXmlString = _a.pivotCacheXmlString;
|
|
263
|
-
var _b = updatePivotTable(pivotCacheXmlString, connectionId, refreshOnOpen), isPivotTableUpdated = _b.isPivotTableUpdated, newPivotTable = _b.newPivotTable;
|
|
264
|
-
zip.file(constants_1.pivotCachesPath + path, newPivotTable);
|
|
265
|
-
if (isPivotTableUpdated) {
|
|
266
|
-
found = true;
|
|
267
|
-
}
|
|
268
|
-
});
|
|
269
|
-
if (!found) {
|
|
270
|
-
throw new Error(constants_1.queryAndPivotTableNotFoundErr);
|
|
271
|
-
}
|
|
272
|
-
return [2 /*return*/];
|
|
273
|
-
}
|
|
274
|
-
});
|
|
275
|
-
}); };
|
|
276
|
-
var updateQueryTable = function (tableXmlString, connectionId, refreshOnOpen) {
|
|
277
|
-
var refreshOnLoadValue = refreshOnOpen ? constants_1.trueValue : constants_1.falseValue;
|
|
278
|
-
var isQueryTableUpdated = false;
|
|
279
|
-
var parser = new xmldom_qsa_1.DOMParser();
|
|
280
|
-
var serializer = new xmldom_qsa_1.XMLSerializer();
|
|
281
|
-
var queryTableDoc = parser.parseFromString(tableXmlString, constants_1.xmlTextResultType);
|
|
282
|
-
var queryTable = queryTableDoc.getElementsByTagName(constants_1.element.queryTable)[0];
|
|
283
|
-
var newQueryTable = constants_1.emptyValue;
|
|
284
|
-
if (queryTable.getAttribute(constants_1.elementAttributes.connectionId) == connectionId) {
|
|
285
|
-
queryTable.setAttribute(constants_1.elementAttributes.refreshOnLoad, refreshOnLoadValue);
|
|
286
|
-
newQueryTable = serializer.serializeToString(queryTableDoc);
|
|
287
|
-
isQueryTableUpdated = true;
|
|
288
|
-
}
|
|
289
|
-
return { isQueryTableUpdated: isQueryTableUpdated, newQueryTable: newQueryTable };
|
|
290
|
-
};
|
|
291
|
-
var updatePivotTable = function (tableXmlString, connectionId, refreshOnOpen) {
|
|
292
|
-
var refreshOnLoadValue = refreshOnOpen ? constants_1.trueValue : constants_1.falseValue;
|
|
293
|
-
var isPivotTableUpdated = false;
|
|
294
|
-
var parser = new xmldom_qsa_1.DOMParser();
|
|
295
|
-
var serializer = new xmldom_qsa_1.XMLSerializer();
|
|
296
|
-
var pivotCacheDoc = parser.parseFromString(tableXmlString, constants_1.xmlTextResultType);
|
|
297
|
-
var cacheSource = pivotCacheDoc.getElementsByTagName(constants_1.element.cacheSource)[0];
|
|
298
|
-
var newPivotTable = constants_1.emptyValue;
|
|
299
|
-
if (cacheSource.getAttribute(constants_1.elementAttributes.connectionId) == connectionId) {
|
|
300
|
-
cacheSource = cacheSource.parentElement;
|
|
301
|
-
cacheSource.setAttribute(constants_1.elementAttributes.refreshOnLoad, refreshOnLoadValue);
|
|
302
|
-
newPivotTable = serializer.serializeToString(pivotCacheDoc);
|
|
303
|
-
isPivotTableUpdated = true;
|
|
304
|
-
}
|
|
305
|
-
return { isPivotTableUpdated: isPivotTableUpdated, newPivotTable: newPivotTable };
|
|
306
|
-
};
|
|
307
|
-
/**
|
|
308
|
-
* Retrieves the target path of a sheet from workbook relationships by its relationship ID.
|
|
309
|
-
*/
|
|
310
|
-
function getSheetPathFromXlRelId(zip, rId) {
|
|
311
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
312
|
-
var relsFile, relsString, relsDoc, relationships, target, i, el;
|
|
313
|
-
return __generator(this, function (_a) {
|
|
314
|
-
switch (_a.label) {
|
|
315
|
-
case 0:
|
|
316
|
-
relsFile = zip.file(constants_1.workbookRelsXmlPath);
|
|
317
|
-
if (!relsFile) {
|
|
318
|
-
throw new Error(constants_1.xlRelsNotFoundErr);
|
|
319
|
-
}
|
|
320
|
-
return [4 /*yield*/, relsFile.async(constants_1.textResultType)];
|
|
321
|
-
case 1:
|
|
322
|
-
relsString = _a.sent();
|
|
323
|
-
relsDoc = new xmldom_qsa_1.DOMParser().parseFromString(relsString, constants_1.xmlTextResultType);
|
|
324
|
-
relationships = relsDoc.getElementsByTagName("Relationship");
|
|
325
|
-
target = null;
|
|
326
|
-
for (i = 0; i < relationships.length; i++) {
|
|
327
|
-
el = relationships[i];
|
|
328
|
-
if (el && el.getAttribute && el.getAttribute("Id") === rId) {
|
|
329
|
-
target = el.getAttribute(constants_1.elementAttributes.target);
|
|
330
|
-
break;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
if (!target) {
|
|
334
|
-
throw new Error("Relationship not found or missing Target for Id: ".concat(rId));
|
|
335
|
-
}
|
|
336
|
-
return [2 /*return*/, target];
|
|
337
|
-
}
|
|
338
|
-
});
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
// get sheet name from workbook
|
|
342
|
-
var getSheetPathByNameFromZip = function (zip, sheetName) { return __awaiter(void 0, void 0, void 0, function () {
|
|
343
|
-
var workbookXmlString, parser, doc, sheetElements, i, rId;
|
|
344
|
-
var _a;
|
|
345
|
-
return __generator(this, function (_b) {
|
|
346
|
-
switch (_b.label) {
|
|
347
|
-
case 0: return [4 /*yield*/, ((_a = zip.file(constants_1.workbookXmlPath)) === null || _a === void 0 ? void 0 : _a.async("text"))];
|
|
348
|
-
case 1:
|
|
349
|
-
workbookXmlString = _b.sent();
|
|
350
|
-
if (!workbookXmlString) {
|
|
351
|
-
throw new Error(constants_1.WorkbookNotFoundERR);
|
|
352
|
-
}
|
|
353
|
-
parser = new xmldom_qsa_1.DOMParser();
|
|
354
|
-
doc = parser.parseFromString(workbookXmlString, constants_1.xmlTextResultType);
|
|
355
|
-
sheetElements = doc.getElementsByTagName(constants_1.element.sheet);
|
|
356
|
-
for (i = 0; i < sheetElements.length; i++) {
|
|
357
|
-
if (sheetElements[i].getAttribute(constants_1.elementAttributes.name) === sheetName) {
|
|
358
|
-
rId = sheetElements[i].getAttribute(constants_1.elementAttributes.relationId);
|
|
359
|
-
if (rId) {
|
|
360
|
-
return [2 /*return*/, getSheetPathFromXlRelId(zip, rId)];
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
throw new Error("Sheet with name ".concat(sheetName, " not found"));
|
|
365
|
-
}
|
|
366
|
-
});
|
|
367
|
-
}); };
|
|
368
|
-
// get definedName
|
|
369
|
-
var getReferenceFromTable = function (zip, tablePath) { return __awaiter(void 0, void 0, void 0, function () {
|
|
370
|
-
var tableXmlString, parser, doc, tableElements, reference;
|
|
371
|
-
var _a, _b;
|
|
372
|
-
return __generator(this, function (_c) {
|
|
373
|
-
switch (_c.label) {
|
|
374
|
-
case 0: return [4 /*yield*/, ((_a = zip.file(tablePath)) === null || _a === void 0 ? void 0 : _a.async("text"))];
|
|
375
|
-
case 1:
|
|
376
|
-
tableXmlString = _c.sent();
|
|
377
|
-
if (!tableXmlString) {
|
|
378
|
-
throw new Error(constants_1.WorkbookNotFoundERR);
|
|
379
|
-
}
|
|
380
|
-
parser = new xmldom_qsa_1.DOMParser();
|
|
381
|
-
doc = parser.parseFromString(tableXmlString, constants_1.xmlTextResultType);
|
|
382
|
-
tableElements = doc.getElementsByTagName(constants_1.element.table);
|
|
383
|
-
reference = (_b = tableElements[0]) === null || _b === void 0 ? void 0 : _b.getAttribute(constants_1.elementAttributes.reference);
|
|
384
|
-
if (!reference) {
|
|
385
|
-
throw new Error(constants_1.tableReferenceNotFoundErr);
|
|
386
|
-
}
|
|
387
|
-
return [2 /*return*/, reference.split(":")[0]]; // Return the start cell reference (e.g., "A1" from "A1:B10")
|
|
388
|
-
}
|
|
389
|
-
});
|
|
390
|
-
}); };
|
|
391
|
-
var findTablePathFromZip = function (zip, targetTableName) { return __awaiter(void 0, void 0, void 0, function () {
|
|
392
|
-
var tablesFolder, tableFilePromises, tableFiles, parser, _i, tableFiles_1, _a, path, content, doc, tableElem;
|
|
393
|
-
return __generator(this, function (_b) {
|
|
394
|
-
switch (_b.label) {
|
|
395
|
-
case 0:
|
|
396
|
-
tablesFolder = zip.folder("xl/tables");
|
|
397
|
-
if (!tablesFolder)
|
|
398
|
-
return [2 /*return*/, ""];
|
|
399
|
-
tableFilePromises = [];
|
|
400
|
-
tablesFolder.forEach(function (relativePath, file) {
|
|
401
|
-
tableFilePromises.push(file.async(constants_1.textResultType).then(function (content) { return ({ path: relativePath, content: content }); }));
|
|
402
|
-
});
|
|
403
|
-
return [4 /*yield*/, Promise.all(tableFilePromises)];
|
|
404
|
-
case 1:
|
|
405
|
-
tableFiles = _b.sent();
|
|
406
|
-
parser = new xmldom_qsa_1.DOMParser();
|
|
407
|
-
for (_i = 0, tableFiles_1 = tableFiles; _i < tableFiles_1.length; _i++) {
|
|
408
|
-
_a = tableFiles_1[_i], path = _a.path, content = _a.content;
|
|
409
|
-
doc = parser.parseFromString(content, constants_1.xmlTextResultType);
|
|
410
|
-
tableElem = doc.getElementsByTagName(constants_1.element.table)[0];
|
|
411
|
-
if (tableElem && tableElem.getAttribute(constants_1.elementAttributes.name) === targetTableName) {
|
|
412
|
-
return [2 /*return*/, path];
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
throw new Error(constants_1.tableNotFoundErr);
|
|
416
|
-
}
|
|
417
|
-
});
|
|
418
|
-
}); };
|
|
419
|
-
exports.default = {
|
|
420
|
-
updateDocProps: updateDocProps,
|
|
421
|
-
clearLabelInfo: clearLabelInfo,
|
|
422
|
-
updateConnections: updateConnections,
|
|
423
|
-
updateSharedStrings: updateSharedStrings,
|
|
424
|
-
updateWorksheet: updateWorksheet,
|
|
425
|
-
updatePivotTablesandQueryTables: updatePivotTablesandQueryTables,
|
|
426
|
-
updateQueryTable: updateQueryTable,
|
|
427
|
-
updatePivotTable: updatePivotTable,
|
|
428
|
-
getSheetPathByNameFromZip: getSheetPathByNameFromZip,
|
|
429
|
-
getReferenceFromTable: getReferenceFromTable,
|
|
430
|
-
findTablePathFromZip: findTablePathFromZip,
|
|
431
|
-
};
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright (c) Microsoft Corporation.
|
|
3
|
-
// Licensed under the MIT license.
|
|
4
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
5
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
8
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
9
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
10
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
|
-
});
|
|
12
|
-
};
|
|
13
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
14
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
15
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
16
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
17
|
-
function step(op) {
|
|
18
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
19
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
20
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
21
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
22
|
-
switch (op[0]) {
|
|
23
|
-
case 0: case 1: t = op; break;
|
|
24
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
25
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
26
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
27
|
-
default:
|
|
28
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
29
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
30
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
31
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
32
|
-
if (t[2]) _.ops.pop();
|
|
33
|
-
_.trys.pop(); continue;
|
|
34
|
-
}
|
|
35
|
-
op = body.call(thisArg, _);
|
|
36
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
37
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
41
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
42
|
-
};
|
|
43
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
-
var constants_1 = require("./constants");
|
|
45
|
-
var mashupDocumentParser_1 = require("./mashupDocumentParser");
|
|
46
|
-
var pqUtils_1 = __importDefault(require("./pqUtils"));
|
|
47
|
-
var tableUtils_1 = __importDefault(require("./tableUtils"));
|
|
48
|
-
var xmlInnerPartsUtils_1 = __importDefault(require("./xmlInnerPartsUtils"));
|
|
49
|
-
var documentUtils_1 = __importDefault(require("./documentUtils"));
|
|
50
|
-
var updateWorkbookDataAndConfigurations = function (zip, fileConfigs, tableData, updateQueryTable) {
|
|
51
|
-
if (updateQueryTable === void 0) { updateQueryTable = false; }
|
|
52
|
-
return __awaiter(void 0, void 0, void 0, function () {
|
|
53
|
-
var sheetName, tablePath, sheetPath, templateSettings, sheetLocation, _a, cellRangeRef, _b, row, column, endColumn, endRow;
|
|
54
|
-
return __generator(this, function (_c) {
|
|
55
|
-
switch (_c.label) {
|
|
56
|
-
case 0:
|
|
57
|
-
sheetName = constants_1.defaults.sheetName;
|
|
58
|
-
tablePath = constants_1.tableXmlPath;
|
|
59
|
-
sheetPath = constants_1.sheetsXmlPath;
|
|
60
|
-
if (!((fileConfigs === null || fileConfigs === void 0 ? void 0 : fileConfigs.templateFile) !== undefined)) return [3 /*break*/, 4];
|
|
61
|
-
templateSettings = fileConfigs === null || fileConfigs === void 0 ? void 0 : fileConfigs.templateSettings;
|
|
62
|
-
if (!((templateSettings === null || templateSettings === void 0 ? void 0 : templateSettings.sheetName) !== undefined)) return [3 /*break*/, 2];
|
|
63
|
-
return [4 /*yield*/, xmlInnerPartsUtils_1.default.getSheetPathByNameFromZip(zip, templateSettings.sheetName)];
|
|
64
|
-
case 1:
|
|
65
|
-
sheetLocation = _c.sent();
|
|
66
|
-
sheetName = templateSettings.sheetName;
|
|
67
|
-
sheetPath = "xl/" + sheetLocation;
|
|
68
|
-
_c.label = 2;
|
|
69
|
-
case 2:
|
|
70
|
-
if (!((templateSettings === null || templateSettings === void 0 ? void 0 : templateSettings.tableName) !== undefined)) return [3 /*break*/, 4];
|
|
71
|
-
_a = constants_1.tablesFolderPath;
|
|
72
|
-
return [4 /*yield*/, xmlInnerPartsUtils_1.default.findTablePathFromZip(zip, templateSettings === null || templateSettings === void 0 ? void 0 : templateSettings.tableName)];
|
|
73
|
-
case 3:
|
|
74
|
-
tablePath = _a + (_c.sent());
|
|
75
|
-
_c.label = 4;
|
|
76
|
-
case 4:
|
|
77
|
-
cellRangeRef = "A1";
|
|
78
|
-
if (!((fileConfigs === null || fileConfigs === void 0 ? void 0 : fileConfigs.templateFile) !== undefined)) return [3 /*break*/, 6];
|
|
79
|
-
return [4 /*yield*/, xmlInnerPartsUtils_1.default.getReferenceFromTable(zip, tablePath)];
|
|
80
|
-
case 5:
|
|
81
|
-
cellRangeRef = _c.sent();
|
|
82
|
-
_c.label = 6;
|
|
83
|
-
case 6:
|
|
84
|
-
if (tableData) {
|
|
85
|
-
_b = documentUtils_1.default.GetStartPosition(cellRangeRef), row = _b.row, column = _b.column;
|
|
86
|
-
endColumn = column - 1 + tableData.columnNames.length;
|
|
87
|
-
endRow = row - 1 + tableData.rows.length;
|
|
88
|
-
// Extend the cell range to include the entire table span
|
|
89
|
-
cellRangeRef += ":".concat(documentUtils_1.default.getCellReferenceRelative(endColumn - 1, endRow + 1));
|
|
90
|
-
}
|
|
91
|
-
return [4 /*yield*/, xmlInnerPartsUtils_1.default.updateDocProps(zip, fileConfigs === null || fileConfigs === void 0 ? void 0 : fileConfigs.docProps)];
|
|
92
|
-
case 7:
|
|
93
|
-
_c.sent();
|
|
94
|
-
if (!((fileConfigs === null || fileConfigs === void 0 ? void 0 : fileConfigs.templateFile) === undefined)) return [3 /*break*/, 9];
|
|
95
|
-
// If we are using our base template, we need to clear label info
|
|
96
|
-
return [4 /*yield*/, xmlInnerPartsUtils_1.default.clearLabelInfo(zip)];
|
|
97
|
-
case 8:
|
|
98
|
-
// If we are using our base template, we need to clear label info
|
|
99
|
-
_c.sent();
|
|
100
|
-
_c.label = 9;
|
|
101
|
-
case 9: return [4 /*yield*/, tableUtils_1.default.updateTableInitialDataIfNeeded(zip, cellRangeRef, sheetPath, tablePath, sheetPath, tableData, updateQueryTable)];
|
|
102
|
-
case 10:
|
|
103
|
-
_c.sent();
|
|
104
|
-
return [2 /*return*/];
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
};
|
|
109
|
-
var updateWorkbookPowerQueryDocument = function (zip, queryName, queryMashupDoc) { return __awaiter(void 0, void 0, void 0, function () {
|
|
110
|
-
var old_base64, new_base64;
|
|
111
|
-
return __generator(this, function (_a) {
|
|
112
|
-
switch (_a.label) {
|
|
113
|
-
case 0: return [4 /*yield*/, pqUtils_1.default.getBase64(zip)];
|
|
114
|
-
case 1:
|
|
115
|
-
old_base64 = _a.sent();
|
|
116
|
-
if (!old_base64) {
|
|
117
|
-
throw new Error(constants_1.base64NotFoundErr);
|
|
118
|
-
}
|
|
119
|
-
return [4 /*yield*/, (0, mashupDocumentParser_1.replaceSingleQuery)(old_base64, queryName, queryMashupDoc)];
|
|
120
|
-
case 2:
|
|
121
|
-
new_base64 = _a.sent();
|
|
122
|
-
return [4 /*yield*/, pqUtils_1.default.setBase64(zip, new_base64)];
|
|
123
|
-
case 3:
|
|
124
|
-
_a.sent();
|
|
125
|
-
return [2 /*return*/];
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
}); };
|
|
129
|
-
var updateWorkbookSingleQueryAttributes = function (zip, queryName, refreshOnOpen, sheetName) { return __awaiter(void 0, void 0, void 0, function () {
|
|
130
|
-
var connectionsXmlString, _a, connectionId, connectionXmlFileString, sharedStringsXmlString, _b, sharedStringIndex, newSharedStrings, sheetPath, sheetLocation, sheetsXmlString, worksheetString;
|
|
131
|
-
var _c, _d, _e;
|
|
132
|
-
return __generator(this, function (_f) {
|
|
133
|
-
switch (_f.label) {
|
|
134
|
-
case 0: return [4 /*yield*/, ((_c = zip.file(constants_1.connectionsXmlPath)) === null || _c === void 0 ? void 0 : _c.async(constants_1.textResultType))];
|
|
135
|
-
case 1:
|
|
136
|
-
connectionsXmlString = _f.sent();
|
|
137
|
-
if (connectionsXmlString === undefined) {
|
|
138
|
-
throw new Error(constants_1.connectionsNotFoundErr);
|
|
139
|
-
}
|
|
140
|
-
_a = xmlInnerPartsUtils_1.default.updateConnections(connectionsXmlString, queryName, refreshOnOpen), connectionId = _a.connectionId, connectionXmlFileString = _a.connectionXmlFileString;
|
|
141
|
-
zip.file(constants_1.connectionsXmlPath, connectionXmlFileString);
|
|
142
|
-
return [4 /*yield*/, ((_d = zip.file(constants_1.sharedStringsXmlPath)) === null || _d === void 0 ? void 0 : _d.async(constants_1.textResultType))];
|
|
143
|
-
case 2:
|
|
144
|
-
sharedStringsXmlString = _f.sent();
|
|
145
|
-
if (sharedStringsXmlString === undefined) {
|
|
146
|
-
throw new Error(constants_1.sharedStringsNotFoundErr);
|
|
147
|
-
}
|
|
148
|
-
_b = xmlInnerPartsUtils_1.default.updateSharedStrings(sharedStringsXmlString, queryName), sharedStringIndex = _b.sharedStringIndex, newSharedStrings = _b.newSharedStrings;
|
|
149
|
-
zip.file(constants_1.sharedStringsXmlPath, newSharedStrings);
|
|
150
|
-
sheetPath = constants_1.sheetsXmlPath;
|
|
151
|
-
if (!(sheetName !== undefined)) return [3 /*break*/, 4];
|
|
152
|
-
return [4 /*yield*/, xmlInnerPartsUtils_1.default.getSheetPathByNameFromZip(zip, sheetName)];
|
|
153
|
-
case 3:
|
|
154
|
-
sheetLocation = _f.sent();
|
|
155
|
-
sheetPath = "xl/" + sheetLocation;
|
|
156
|
-
_f.label = 4;
|
|
157
|
-
case 4: return [4 /*yield*/, ((_e = zip.file(sheetPath)) === null || _e === void 0 ? void 0 : _e.async(constants_1.textResultType))];
|
|
158
|
-
case 5:
|
|
159
|
-
sheetsXmlString = _f.sent();
|
|
160
|
-
if (sheetsXmlString === undefined) {
|
|
161
|
-
throw new Error(constants_1.sheetsNotFoundErr);
|
|
162
|
-
}
|
|
163
|
-
worksheetString = xmlInnerPartsUtils_1.default.updateWorksheet(sheetsXmlString, sharedStringIndex.toString());
|
|
164
|
-
zip.file(sheetPath, worksheetString);
|
|
165
|
-
// Update tables
|
|
166
|
-
return [4 /*yield*/, xmlInnerPartsUtils_1.default.updatePivotTablesandQueryTables(zip, queryName, refreshOnOpen, connectionId)];
|
|
167
|
-
case 6:
|
|
168
|
-
// Update tables
|
|
169
|
-
_f.sent();
|
|
170
|
-
return [2 /*return*/];
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
}); };
|
|
174
|
-
exports.default = {
|
|
175
|
-
updateWorkbookDataAndConfigurations: updateWorkbookDataAndConfigurations,
|
|
176
|
-
updateWorkbookPowerQueryDocument: updateWorkbookPowerQueryDocument,
|
|
177
|
-
updateWorkbookSingleQueryAttributes: updateWorkbookSingleQueryAttributes,
|
|
178
|
-
};
|