sp-js-provisioning 1.0.4 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.husky/commit-msg +4 -0
- package/README.md +11 -31
- package/lib/handlers/clientsidepages.d.ts +13 -13
- package/lib/handlers/clientsidepages.js +77 -60
- package/lib/handlers/clientsidepages.js.map +1 -0
- package/lib/handlers/composedlook.d.ts +6 -6
- package/lib/handlers/composedlook.js +24 -17
- package/lib/handlers/composedlook.js.map +1 -0
- package/lib/handlers/contenttypes.d.ts +20 -20
- package/lib/handlers/contenttypes.js +77 -59
- package/lib/handlers/contenttypes.js.map +1 -0
- package/lib/handlers/customactions.d.ts +7 -7
- package/lib/handlers/customactions.js +24 -17
- package/lib/handlers/customactions.js.map +1 -0
- package/lib/handlers/exports.d.ts +3 -3
- package/lib/handlers/exports.js +15 -11
- package/lib/handlers/exports.js.map +1 -0
- package/lib/handlers/features.d.ts +7 -7
- package/lib/handlers/features.js +24 -22
- package/lib/handlers/features.js.map +1 -0
- package/lib/handlers/files.d.ts +44 -44
- package/lib/handlers/files.js +229 -159
- package/lib/handlers/files.js.map +1 -0
- package/lib/handlers/handlerbase.d.ts +21 -11
- package/lib/handlers/handlerbase.js +51 -16
- package/lib/handlers/handlerbase.js.map +1 -0
- package/lib/handlers/hooks.d.ts +22 -0
- package/lib/handlers/hooks.js +230 -0
- package/lib/handlers/hooks.js.map +1 -0
- package/lib/handlers/lists.d.ts +45 -45
- package/lib/handlers/lists.js +184 -150
- package/lib/handlers/lists.js.map +1 -0
- package/lib/handlers/navigation.d.ts +10 -10
- package/lib/handlers/navigation.js +40 -31
- package/lib/handlers/navigation.js.map +1 -0
- package/lib/handlers/propertybagentries.d.ts +7 -7
- package/lib/handlers/propertybagentries.js +30 -25
- package/lib/handlers/propertybagentries.js.map +1 -0
- package/lib/handlers/sitefields.d.ts +11 -11
- package/lib/handlers/sitefields.js +40 -29
- package/lib/handlers/sitefields.js.map +1 -0
- package/lib/handlers/websettings.d.ts +7 -7
- package/lib/handlers/websettings.js +36 -33
- package/lib/handlers/websettings.js.map +1 -0
- package/lib/index.d.ts +3 -3
- package/lib/index.js +3 -2
- package/lib/index.js.map +1 -0
- package/lib/provisioningconfig.d.ts +2 -2
- package/lib/provisioningconfig.js +2 -0
- package/lib/provisioningconfig.js.map +1 -0
- package/lib/provisioningcontext.d.ts +1 -5
- package/lib/provisioningcontext.js +2 -4
- package/lib/provisioningcontext.js.map +1 -0
- package/lib/schema.d.ts +18 -4
- package/lib/schema.js +2 -0
- package/lib/schema.js.map +1 -0
- package/lib/util/index.d.ts +3 -6
- package/lib/util/index.js +20 -29
- package/lib/util/index.js.map +1 -0
- package/lib/util/tokenhelper.d.ts +3 -3
- package/lib/util/tokenhelper.js +30 -29
- package/lib/util/tokenhelper.js.map +1 -0
- package/lib/webprovisioner.d.ts +16 -16
- package/lib/webprovisioner.js +42 -29
- package/lib/webprovisioner.js.map +1 -0
- package/package.json +118 -36
- package/sample-schemas/all-simple.ts +85 -76
- package/AUTHORS +0 -3
- package/LICENSE +0 -25
- package/debug/debug.ts +0 -68
- package/debug/example.ts +0 -42
- package/gulptasks/@configuration.js +0 -58
- package/gulptasks/build.js +0 -84
- package/gulptasks/clean.js +0 -23
- package/gulptasks/docs.js +0 -11
- package/gulptasks/index.js +0 -8
- package/gulptasks/lint.js +0 -18
- package/gulptasks/package.js +0 -44
- package/gulptasks/publish.js +0 -232
- package/gulptasks/test.js +0 -40
- package/gulptasks/watch.js +0 -15
- package/jsdoc.json +0 -26
- package/pnpm-lock.yaml +0 -6582
- package/shrinkwrap.yaml +0 -6513
- package/webpack.config.js +0 -58
package/lib/handlers/files.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
var __extends = (this && this.__extends) || (function () {
|
|
2
|
-
var extendStatics =
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
var extendStatics = function (d, b) {
|
|
3
|
+
extendStatics = Object.setPrototypeOf ||
|
|
4
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
5
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
6
|
+
return extendStatics(d, b);
|
|
7
|
+
};
|
|
5
8
|
return function (d, b) {
|
|
6
9
|
extendStatics(d, b);
|
|
7
10
|
function __() { this.constructor = d; }
|
|
@@ -9,10 +12,11 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
9
12
|
};
|
|
10
13
|
})();
|
|
11
14
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
12
16
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
17
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
18
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
-
function step(result) { result.done ? resolve(result.value) :
|
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
16
20
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
21
|
});
|
|
18
22
|
};
|
|
@@ -23,8 +27,8 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
23
27
|
function step(op) {
|
|
24
28
|
if (f) throw new TypeError("Generator is already executing.");
|
|
25
29
|
while (_) try {
|
|
26
|
-
if (f = 1, y && (t =
|
|
27
|
-
if (y = 0, t) op = [0, t.value];
|
|
30
|
+
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;
|
|
31
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
28
32
|
switch (op[0]) {
|
|
29
33
|
case 0: case 1: t = op; break;
|
|
30
34
|
case 4: _.label++; return { value: op[1], done: false };
|
|
@@ -43,79 +47,98 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
43
47
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
44
48
|
}
|
|
45
49
|
};
|
|
46
|
-
|
|
47
|
-
import
|
|
48
|
-
import {
|
|
49
|
-
import {
|
|
50
|
-
import {
|
|
51
|
-
import {
|
|
50
|
+
/* eslint-disable unicorn/prevent-abbreviations */
|
|
51
|
+
import * as xmljs from 'xml-js';
|
|
52
|
+
import { HandlerBase } from './handlerbase';
|
|
53
|
+
import { combine, isArray } from '@pnp/common';
|
|
54
|
+
import { Logger } from '@pnp/logging';
|
|
55
|
+
import { replaceUrlTokens } from '../util';
|
|
56
|
+
import { TokenHelper } from '../util/tokenhelper';
|
|
52
57
|
/**
|
|
53
58
|
* Describes the Features Object Handler
|
|
54
59
|
*/
|
|
55
|
-
var Files = (function (_super) {
|
|
60
|
+
var Files = /** @class */ (function (_super) {
|
|
56
61
|
__extends(Files, _super);
|
|
57
62
|
/**
|
|
58
63
|
* Creates a new instance of the Files class
|
|
59
64
|
*
|
|
60
|
-
* @param
|
|
65
|
+
* @param config - Provisioning config
|
|
61
66
|
*/
|
|
62
67
|
function Files(config) {
|
|
63
|
-
var _this = _super.call(this,
|
|
68
|
+
var _this = _super.call(this, Files.name, config) || this;
|
|
64
69
|
/**
|
|
65
70
|
* Fetches web part contents
|
|
66
71
|
*
|
|
67
|
-
* @param
|
|
68
|
-
* @param
|
|
72
|
+
* @param webParts - Web parts
|
|
73
|
+
* @param callbackFunc - Callback function that takes index of the the webpart and the retrieved XML
|
|
69
74
|
*/
|
|
70
|
-
_this.fetchWebPartContents = function (webParts,
|
|
75
|
+
_this.fetchWebPartContents = function (webParts, callbackFunction) {
|
|
71
76
|
return new Promise(function (resolve, reject) {
|
|
72
77
|
var fileFetchPromises = webParts.map(function (wp, index) {
|
|
73
78
|
return (function () {
|
|
74
|
-
return new Promise(function (_res
|
|
75
|
-
var
|
|
79
|
+
return new Promise(function (_res) { return __awaiter(_this, void 0, void 0, function () {
|
|
80
|
+
var fileSource, response, xml, object, existingProperties, updatedProperties_1, _loop_1, _i, existingProperties_1, property;
|
|
76
81
|
return __generator(this, function (_a) {
|
|
77
82
|
switch (_a.label) {
|
|
78
83
|
case 0:
|
|
79
84
|
if (!wp.Contents.FileSrc) return [3 /*break*/, 3];
|
|
80
|
-
|
|
81
|
-
Logger.log({
|
|
82
|
-
|
|
85
|
+
fileSource = replaceUrlTokens(this.tokenHelper.replaceTokens(wp.Contents.FileSrc), this.config);
|
|
86
|
+
Logger.log({
|
|
87
|
+
data: null,
|
|
88
|
+
level: 1 /* Info */,
|
|
89
|
+
message: "Retrieving contents from file '" + fileSource + "'."
|
|
90
|
+
});
|
|
91
|
+
return [4 /*yield*/, fetch(fileSource, {
|
|
92
|
+
credentials: 'include',
|
|
93
|
+
method: 'GET'
|
|
94
|
+
})];
|
|
83
95
|
case 1:
|
|
84
96
|
response = _a.sent();
|
|
85
97
|
return [4 /*yield*/, response.text()];
|
|
86
98
|
case 2:
|
|
87
99
|
xml = _a.sent();
|
|
88
100
|
if (isArray(wp.PropertyOverrides)) {
|
|
89
|
-
|
|
90
|
-
if (
|
|
91
|
-
existingProperties =
|
|
101
|
+
object = xmljs.xml2js(xml);
|
|
102
|
+
if (object.elements[0].name === 'webParts') {
|
|
103
|
+
existingProperties = object.elements[0].elements[0].elements[1].elements[0]
|
|
104
|
+
.elements;
|
|
92
105
|
updatedProperties_1 = [];
|
|
93
|
-
|
|
94
|
-
var hasOverride = wp.PropertyOverrides.filter(function (po) { return po.name ===
|
|
106
|
+
_loop_1 = function (property) {
|
|
107
|
+
var hasOverride = wp.PropertyOverrides.filter(function (po) { return po.name === property.attributes.name; }).length > 0;
|
|
95
108
|
if (!hasOverride) {
|
|
96
|
-
updatedProperties_1.push(
|
|
109
|
+
updatedProperties_1.push(property);
|
|
97
110
|
}
|
|
98
|
-
}
|
|
111
|
+
};
|
|
112
|
+
for (_i = 0, existingProperties_1 = existingProperties; _i < existingProperties_1.length; _i++) {
|
|
113
|
+
property = existingProperties_1[_i];
|
|
114
|
+
_loop_1(property);
|
|
115
|
+
}
|
|
116
|
+
// eslint-disable-next-line unicorn/no-array-for-each
|
|
99
117
|
wp.PropertyOverrides.forEach(function (_a) {
|
|
100
118
|
var name = _a.name, type = _a.type, value = _a.value;
|
|
101
|
-
updatedProperties_1.push({
|
|
119
|
+
updatedProperties_1.push({
|
|
120
|
+
attributes: { name: name, type: type },
|
|
121
|
+
elements: [{ text: value, type: 'text' }],
|
|
122
|
+
name: 'property',
|
|
123
|
+
type: 'element'
|
|
124
|
+
});
|
|
102
125
|
});
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
_res();
|
|
126
|
+
object.elements[0].elements[0].elements[1].elements[0].elements = updatedProperties_1;
|
|
127
|
+
callbackFunction(index, xmljs.js2xml(object));
|
|
128
|
+
_res(true);
|
|
106
129
|
}
|
|
107
130
|
else {
|
|
108
|
-
|
|
109
|
-
_res();
|
|
131
|
+
callbackFunction(index, xml);
|
|
132
|
+
_res(true);
|
|
110
133
|
}
|
|
111
134
|
}
|
|
112
135
|
else {
|
|
113
|
-
|
|
114
|
-
_res();
|
|
136
|
+
callbackFunction(index, xml);
|
|
137
|
+
_res(true);
|
|
115
138
|
}
|
|
116
139
|
return [3 /*break*/, 4];
|
|
117
140
|
case 3:
|
|
118
|
-
_res();
|
|
141
|
+
_res(true);
|
|
119
142
|
_a.label = 4;
|
|
120
143
|
case 4: return [2 /*return*/];
|
|
121
144
|
}
|
|
@@ -123,9 +146,7 @@ var Files = (function (_super) {
|
|
|
123
146
|
}); });
|
|
124
147
|
})();
|
|
125
148
|
});
|
|
126
|
-
Promise.all(fileFetchPromises)
|
|
127
|
-
.then(resolve)
|
|
128
|
-
.catch(reject);
|
|
149
|
+
Promise.all(fileFetchPromises).then(resolve).catch(reject);
|
|
129
150
|
});
|
|
130
151
|
};
|
|
131
152
|
return _this;
|
|
@@ -133,24 +154,21 @@ var Files = (function (_super) {
|
|
|
133
154
|
/**
|
|
134
155
|
* Provisioning Files
|
|
135
156
|
*
|
|
136
|
-
* @param
|
|
137
|
-
* @param
|
|
138
|
-
* @param
|
|
157
|
+
* @param web - The web
|
|
158
|
+
* @param files - The files to provision
|
|
159
|
+
* @param context - Provisioning context
|
|
139
160
|
*/
|
|
140
161
|
Files.prototype.ProvisionObjects = function (web, files, context) {
|
|
141
162
|
return __awaiter(this, void 0, void 0, function () {
|
|
163
|
+
var ServerRelativeUrl, error_1;
|
|
142
164
|
var _this = this;
|
|
143
|
-
var ServerRelativeUrl, err_1;
|
|
144
165
|
return __generator(this, function (_a) {
|
|
145
166
|
switch (_a.label) {
|
|
146
167
|
case 0:
|
|
147
168
|
this.tokenHelper = new TokenHelper(context, this.config);
|
|
148
169
|
_super.prototype.scope_started.call(this);
|
|
149
|
-
if (typeof window === "undefined") {
|
|
150
|
-
throw "Files Handler not supported in Node.";
|
|
151
|
-
}
|
|
152
170
|
if (this.config.spfxContext) {
|
|
153
|
-
throw
|
|
171
|
+
throw 'Files Handler not supported in SPFx.';
|
|
154
172
|
}
|
|
155
173
|
return [4 /*yield*/, web.get()];
|
|
156
174
|
case 1:
|
|
@@ -158,14 +176,16 @@ var Files = (function (_super) {
|
|
|
158
176
|
_a.label = 2;
|
|
159
177
|
case 2:
|
|
160
178
|
_a.trys.push([2, 4, , 5]);
|
|
161
|
-
return [4 /*yield*/, files.reduce(function (chain, file) {
|
|
179
|
+
return [4 /*yield*/, files.reduce(function (chain, file) {
|
|
180
|
+
return chain.then(function () { return _this.processFile(web, file, ServerRelativeUrl); });
|
|
181
|
+
}, Promise.resolve())];
|
|
162
182
|
case 3:
|
|
163
183
|
_a.sent();
|
|
164
184
|
_super.prototype.scope_ended.call(this);
|
|
165
185
|
return [3 /*break*/, 5];
|
|
166
186
|
case 4:
|
|
167
|
-
|
|
168
|
-
_super.prototype.scope_ended.call(this);
|
|
187
|
+
error_1 = _a.sent();
|
|
188
|
+
_super.prototype.scope_ended.call(this, error_1);
|
|
169
189
|
return [3 /*break*/, 5];
|
|
170
190
|
case 5: return [2 /*return*/];
|
|
171
191
|
}
|
|
@@ -175,22 +195,25 @@ var Files = (function (_super) {
|
|
|
175
195
|
/**
|
|
176
196
|
* Get blob for a file
|
|
177
197
|
*
|
|
178
|
-
* @param
|
|
198
|
+
* @param file - The file
|
|
179
199
|
*/
|
|
180
200
|
Files.prototype.getFileBlob = function (file) {
|
|
181
201
|
return __awaiter(this, void 0, void 0, function () {
|
|
182
|
-
var
|
|
202
|
+
var fileSourceWithoutTokens, response, fileContents, blob;
|
|
183
203
|
return __generator(this, function (_a) {
|
|
184
204
|
switch (_a.label) {
|
|
185
205
|
case 0:
|
|
186
|
-
|
|
187
|
-
return [4 /*yield*/, fetch(
|
|
206
|
+
fileSourceWithoutTokens = replaceUrlTokens(this.tokenHelper.replaceTokens(file.Src), this.config);
|
|
207
|
+
return [4 /*yield*/, fetch(fileSourceWithoutTokens, {
|
|
208
|
+
credentials: 'include',
|
|
209
|
+
method: 'GET'
|
|
210
|
+
})];
|
|
188
211
|
case 1:
|
|
189
212
|
response = _a.sent();
|
|
190
213
|
return [4 /*yield*/, response.text()];
|
|
191
214
|
case 2:
|
|
192
215
|
fileContents = _a.sent();
|
|
193
|
-
blob = new Blob([fileContents], { type:
|
|
216
|
+
blob = new Blob([fileContents], { type: 'text/plain' });
|
|
194
217
|
return [2 /*return*/, blob];
|
|
195
218
|
}
|
|
196
219
|
});
|
|
@@ -199,54 +222,57 @@ var Files = (function (_super) {
|
|
|
199
222
|
/**
|
|
200
223
|
* Procceses a file
|
|
201
224
|
*
|
|
202
|
-
* @param
|
|
203
|
-
* @param
|
|
204
|
-
* @param
|
|
225
|
+
* @param web - The web
|
|
226
|
+
* @param file - The file
|
|
227
|
+
* @param webServerRelativeUrl - ServerRelativeUrl for the web
|
|
205
228
|
*/
|
|
206
229
|
Files.prototype.processFile = function (web, file, webServerRelativeUrl) {
|
|
207
230
|
return __awaiter(this, void 0, void 0, function () {
|
|
208
|
-
var blob, folderServerRelativeUrl, pnpFolder, fileServerRelativeUrl, fileAddResult, pnpFile,
|
|
209
|
-
return __generator(this, function (
|
|
210
|
-
switch (
|
|
231
|
+
var blob, folderServerRelativeUrl, pnpFolder, fileServerRelativeUrl, fileAddResult, pnpFile, _a, error_2;
|
|
232
|
+
return __generator(this, function (_b) {
|
|
233
|
+
switch (_b.label) {
|
|
211
234
|
case 0:
|
|
212
|
-
Logger.log({
|
|
213
|
-
|
|
235
|
+
Logger.log({
|
|
236
|
+
level: 1 /* Info */,
|
|
237
|
+
message: "Processing file " + file.Folder + "/" + file.Url
|
|
238
|
+
});
|
|
239
|
+
_b.label = 1;
|
|
214
240
|
case 1:
|
|
215
|
-
|
|
241
|
+
_b.trys.push([1, 10, , 11]);
|
|
216
242
|
return [4 /*yield*/, this.getFileBlob(file)];
|
|
217
243
|
case 2:
|
|
218
|
-
blob =
|
|
219
|
-
folderServerRelativeUrl = combine(
|
|
244
|
+
blob = _b.sent();
|
|
245
|
+
folderServerRelativeUrl = combine('/', webServerRelativeUrl, file.Folder);
|
|
220
246
|
pnpFolder = web.getFolderByServerRelativeUrl(folderServerRelativeUrl);
|
|
221
|
-
fileServerRelativeUrl = combine(
|
|
247
|
+
fileServerRelativeUrl = combine('/', folderServerRelativeUrl, file.Url);
|
|
222
248
|
fileAddResult = void 0;
|
|
223
249
|
pnpFile = void 0;
|
|
224
|
-
|
|
250
|
+
_b.label = 3;
|
|
225
251
|
case 3:
|
|
226
|
-
|
|
252
|
+
_b.trys.push([3, 5, , 6]);
|
|
227
253
|
return [4 /*yield*/, pnpFolder.files.add(file.Url, blob, file.Overwrite)];
|
|
228
254
|
case 4:
|
|
229
|
-
fileAddResult =
|
|
255
|
+
fileAddResult = _b.sent();
|
|
230
256
|
pnpFile = fileAddResult.file;
|
|
231
257
|
fileServerRelativeUrl = fileAddResult.data.ServerRelativeUrl;
|
|
232
258
|
return [3 /*break*/, 6];
|
|
233
259
|
case 5:
|
|
234
|
-
|
|
260
|
+
_a = _b.sent();
|
|
235
261
|
pnpFile = web.getFileByServerRelativePath(fileServerRelativeUrl);
|
|
236
262
|
return [3 /*break*/, 6];
|
|
237
263
|
case 6: return [4 /*yield*/, this.processProperties(web, pnpFile, file)];
|
|
238
264
|
case 7:
|
|
239
|
-
|
|
265
|
+
_b.sent();
|
|
240
266
|
return [4 /*yield*/, this.processWebParts(file, webServerRelativeUrl, fileServerRelativeUrl)];
|
|
241
267
|
case 8:
|
|
242
|
-
|
|
268
|
+
_b.sent();
|
|
243
269
|
return [4 /*yield*/, this.processPageListViews(web, file.WebParts, fileServerRelativeUrl)];
|
|
244
270
|
case 9:
|
|
245
|
-
|
|
271
|
+
_b.sent();
|
|
246
272
|
return [3 /*break*/, 11];
|
|
247
273
|
case 10:
|
|
248
|
-
|
|
249
|
-
throw
|
|
274
|
+
error_2 = _b.sent();
|
|
275
|
+
throw error_2;
|
|
250
276
|
case 11: return [2 /*return*/];
|
|
251
277
|
}
|
|
252
278
|
});
|
|
@@ -255,74 +281,96 @@ var Files = (function (_super) {
|
|
|
255
281
|
/**
|
|
256
282
|
* Remove exisiting webparts if specified
|
|
257
283
|
*
|
|
258
|
-
* @param
|
|
259
|
-
* @param
|
|
260
|
-
* @param
|
|
284
|
+
* @param webServerRelativeUrl - ServerRelativeUrl for the web
|
|
285
|
+
* @param fileServerRelativeUrl - ServerRelativeUrl for the file
|
|
286
|
+
* @param shouldRemove - Should web parts be removed
|
|
261
287
|
*/
|
|
262
288
|
Files.prototype.removeExistingWebParts = function (webServerRelativeUrl, fileServerRelativeUrl, shouldRemove) {
|
|
263
289
|
return new Promise(function (resolve, reject) {
|
|
264
290
|
if (shouldRemove) {
|
|
265
|
-
Logger.log({
|
|
291
|
+
Logger.log({
|
|
292
|
+
level: 1 /* Info */,
|
|
293
|
+
message: "Deleting existing webpart from file " + fileServerRelativeUrl
|
|
294
|
+
});
|
|
266
295
|
var clientContext_1 = new SP.ClientContext(webServerRelativeUrl);
|
|
267
|
-
var spFile = clientContext_1
|
|
296
|
+
var spFile = clientContext_1
|
|
297
|
+
.get_web()
|
|
298
|
+
.getFileByServerRelativeUrl(fileServerRelativeUrl);
|
|
268
299
|
var webPartManager = spFile.getLimitedWebPartManager(SP.WebParts.PersonalizationScope.shared);
|
|
269
300
|
var webParts_1 = webPartManager.get_webParts();
|
|
270
301
|
clientContext_1.load(webParts_1);
|
|
271
302
|
clientContext_1.executeQueryAsync(function () {
|
|
272
|
-
webParts_1.get_data()
|
|
303
|
+
for (var _i = 0, _a = webParts_1.get_data(); _i < _a.length; _i++) {
|
|
304
|
+
var wp = _a[_i];
|
|
305
|
+
wp.deleteWebPart();
|
|
306
|
+
}
|
|
273
307
|
clientContext_1.executeQueryAsync(resolve, reject);
|
|
274
308
|
}, reject);
|
|
275
309
|
}
|
|
276
310
|
else {
|
|
277
|
-
Logger.log({
|
|
278
|
-
|
|
311
|
+
Logger.log({
|
|
312
|
+
level: 1 /* Info */,
|
|
313
|
+
message: "Web parts should not be removed from file " + fileServerRelativeUrl + "."
|
|
314
|
+
});
|
|
315
|
+
resolve(true);
|
|
279
316
|
}
|
|
280
317
|
});
|
|
281
318
|
};
|
|
282
319
|
/**
|
|
283
320
|
* Processes web parts
|
|
284
321
|
*
|
|
285
|
-
* @param
|
|
286
|
-
* @param
|
|
287
|
-
* @param
|
|
322
|
+
* @param file - The file
|
|
323
|
+
* @param webServerRelativeUrl - ServerRelativeUrl for the web
|
|
324
|
+
* @param fileServerRelativeUrl - ServerRelativeUrl for the file
|
|
288
325
|
*/
|
|
289
326
|
Files.prototype.processWebParts = function (file, webServerRelativeUrl, fileServerRelativeUrl) {
|
|
290
327
|
var _this = this;
|
|
291
328
|
return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
292
|
-
var
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
switch (_a.label) {
|
|
329
|
+
var clientContext, spFile, webPartManager, _i, _a, wp, webPartXml, webPartDef, webPartInstance;
|
|
330
|
+
return __generator(this, function (_b) {
|
|
331
|
+
switch (_b.label) {
|
|
296
332
|
case 0:
|
|
297
|
-
Logger.log({
|
|
333
|
+
Logger.log({
|
|
334
|
+
level: 1 /* Info */,
|
|
335
|
+
message: "Processing webparts for file " + file.Folder + "/" + file.Url
|
|
336
|
+
});
|
|
298
337
|
return [4 /*yield*/, this.removeExistingWebParts(webServerRelativeUrl, fileServerRelativeUrl, file.RemoveExistingWebParts)];
|
|
299
338
|
case 1:
|
|
300
|
-
|
|
339
|
+
_b.sent();
|
|
301
340
|
if (!(file.WebParts && file.WebParts.length > 0)) return [3 /*break*/, 3];
|
|
302
|
-
|
|
303
|
-
|
|
341
|
+
clientContext = new SP.ClientContext(webServerRelativeUrl), spFile = clientContext
|
|
342
|
+
.get_web()
|
|
343
|
+
.getFileByServerRelativeUrl(fileServerRelativeUrl), webPartManager = spFile.getLimitedWebPartManager(SP.WebParts.PersonalizationScope.shared);
|
|
344
|
+
return [4 /*yield*/, this.fetchWebPartContents(file.WebParts, function (index, xml) {
|
|
345
|
+
file.WebParts[index].Contents.Xml = xml;
|
|
346
|
+
})];
|
|
304
347
|
case 2:
|
|
305
|
-
|
|
306
|
-
file.WebParts.
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
348
|
+
_b.sent();
|
|
349
|
+
for (_i = 0, _a = file.WebParts; _i < _a.length; _i++) {
|
|
350
|
+
wp = _a[_i];
|
|
351
|
+
webPartXml = this.tokenHelper.replaceTokens(this.replaceWebPartXmlTokens(wp.Contents.Xml, clientContext));
|
|
352
|
+
webPartDef = webPartManager.importWebPart(webPartXml);
|
|
353
|
+
webPartInstance = webPartDef.get_webPart();
|
|
354
|
+
Logger.log({
|
|
355
|
+
data: { webPartXml: webPartXml },
|
|
356
|
+
level: 1 /* Info */,
|
|
357
|
+
message: "Processing webpart " + wp.Title + " for file " + file.Folder + "/" + file.Url
|
|
358
|
+
});
|
|
359
|
+
webPartManager.addWebPart(webPartInstance, wp.Zone, wp.Order);
|
|
360
|
+
clientContext.load(webPartInstance);
|
|
361
|
+
}
|
|
362
|
+
clientContext.executeQueryAsync(resolve, function (sender, args) {
|
|
315
363
|
Logger.log({
|
|
316
364
|
data: { error: args.get_message() },
|
|
317
365
|
level: 3 /* Error */,
|
|
318
|
-
message: "Failed to process webparts for file " + file.Folder + "/" + file.Url
|
|
366
|
+
message: "Failed to process webparts for file " + file.Folder + "/" + file.Url
|
|
319
367
|
});
|
|
320
368
|
reject({ sender: sender, args: args });
|
|
321
369
|
});
|
|
322
370
|
return [3 /*break*/, 4];
|
|
323
371
|
case 3:
|
|
324
|
-
resolve();
|
|
325
|
-
|
|
372
|
+
resolve(true);
|
|
373
|
+
_b.label = 4;
|
|
326
374
|
case 4: return [2 /*return*/];
|
|
327
375
|
}
|
|
328
376
|
});
|
|
@@ -331,9 +379,9 @@ var Files = (function (_super) {
|
|
|
331
379
|
/**
|
|
332
380
|
* Processes page list views
|
|
333
381
|
*
|
|
334
|
-
* @param
|
|
335
|
-
* @param
|
|
336
|
-
* @param
|
|
382
|
+
* @param web - The web
|
|
383
|
+
* @param webParts - Web parts
|
|
384
|
+
* @param fileServerRelativeUrl - ServerRelativeUrl for the file
|
|
337
385
|
*/
|
|
338
386
|
Files.prototype.processPageListViews = function (web, webParts, fileServerRelativeUrl) {
|
|
339
387
|
var _this = this;
|
|
@@ -342,27 +390,31 @@ var Files = (function (_super) {
|
|
|
342
390
|
Logger.log({
|
|
343
391
|
data: { webParts: webParts, fileServerRelativeUrl: fileServerRelativeUrl },
|
|
344
392
|
level: 1 /* Info */,
|
|
345
|
-
message: "Processing page list views for file " + fileServerRelativeUrl
|
|
393
|
+
message: "Processing page list views for file " + fileServerRelativeUrl
|
|
346
394
|
});
|
|
347
395
|
var listViewWebParts = webParts.filter(function (wp) { return wp.ListView; });
|
|
348
396
|
if (listViewWebParts.length > 0) {
|
|
349
397
|
listViewWebParts
|
|
350
|
-
.reduce(function (chain, wp) {
|
|
398
|
+
.reduce(function (chain, wp) {
|
|
399
|
+
return chain.then(function () {
|
|
400
|
+
return _this.processPageListView(web, wp.ListView, fileServerRelativeUrl);
|
|
401
|
+
});
|
|
402
|
+
}, Promise.resolve())
|
|
351
403
|
.then(function () {
|
|
352
404
|
Logger.log({
|
|
353
405
|
data: {},
|
|
354
406
|
level: 1 /* Info */,
|
|
355
|
-
message: "Successfully processed page list views for file " + fileServerRelativeUrl
|
|
407
|
+
message: "Successfully processed page list views for file " + fileServerRelativeUrl
|
|
356
408
|
});
|
|
357
409
|
resolve();
|
|
358
410
|
})
|
|
359
|
-
.catch(function (
|
|
411
|
+
.catch(function (error) {
|
|
360
412
|
Logger.log({
|
|
361
|
-
data: { err:
|
|
413
|
+
data: { err: error, fileServerRelativeUrl: fileServerRelativeUrl },
|
|
362
414
|
level: 3 /* Error */,
|
|
363
|
-
message: "Failed to process page list views for file " + fileServerRelativeUrl
|
|
415
|
+
message: "Failed to process page list views for file " + fileServerRelativeUrl
|
|
364
416
|
});
|
|
365
|
-
reject(
|
|
417
|
+
reject(error);
|
|
366
418
|
});
|
|
367
419
|
}
|
|
368
420
|
else {
|
|
@@ -377,72 +429,77 @@ var Files = (function (_super) {
|
|
|
377
429
|
/**
|
|
378
430
|
* Processes page list view
|
|
379
431
|
*
|
|
380
|
-
* @param
|
|
381
|
-
* @param
|
|
382
|
-
* @param
|
|
432
|
+
* @param web - The web
|
|
433
|
+
* @param listView - List view
|
|
434
|
+
* @param fileServerRelativeUrl - ServerRelativeUrl for the file
|
|
383
435
|
*/
|
|
384
436
|
Files.prototype.processPageListView = function (web, listView, fileServerRelativeUrl) {
|
|
385
437
|
return new Promise(function (resolve, reject) {
|
|
386
438
|
var views = web.lists.getByTitle(listView.List).views;
|
|
387
|
-
views
|
|
439
|
+
views
|
|
440
|
+
.get()
|
|
388
441
|
.then(function (listViews) {
|
|
389
442
|
var wpView = listViews.filter(function (v) { return v.ServerRelativeUrl === fileServerRelativeUrl; });
|
|
390
443
|
if (wpView.length === 1) {
|
|
391
444
|
var view_1 = views.getById(wpView[0].Id);
|
|
392
445
|
var settings = listView.View.AdditionalSettings || {};
|
|
393
|
-
view_1
|
|
446
|
+
view_1
|
|
447
|
+
.update(settings)
|
|
394
448
|
.then(function () {
|
|
395
|
-
view_1.fields
|
|
449
|
+
view_1.fields
|
|
450
|
+
.removeAll()
|
|
396
451
|
.then(function () {
|
|
397
|
-
listView.View.ViewFields.reduce(function (chain, viewField) {
|
|
452
|
+
listView.View.ViewFields.reduce(function (chain, viewField) {
|
|
453
|
+
return chain.then(function () { return view_1.fields.add(viewField); });
|
|
454
|
+
}, Promise.resolve())
|
|
398
455
|
.then(resolve)
|
|
399
|
-
.catch(function (
|
|
456
|
+
.catch(function (error) {
|
|
400
457
|
Logger.log({
|
|
401
|
-
data: { fileServerRelativeUrl: fileServerRelativeUrl, listView: listView, err:
|
|
458
|
+
data: { fileServerRelativeUrl: fileServerRelativeUrl, listView: listView, err: error },
|
|
402
459
|
level: 3 /* Error */,
|
|
403
|
-
message: "Failed to process page list view for file " + fileServerRelativeUrl
|
|
460
|
+
message: "Failed to process page list view for file " + fileServerRelativeUrl
|
|
404
461
|
});
|
|
405
|
-
reject(
|
|
462
|
+
reject(error);
|
|
406
463
|
});
|
|
407
464
|
})
|
|
408
|
-
.catch(function (
|
|
465
|
+
.catch(function (error) {
|
|
409
466
|
Logger.log({
|
|
410
|
-
data: { fileServerRelativeUrl: fileServerRelativeUrl, listView: listView, err:
|
|
467
|
+
data: { fileServerRelativeUrl: fileServerRelativeUrl, listView: listView, err: error },
|
|
411
468
|
level: 3 /* Error */,
|
|
412
|
-
message: "Failed to process page list view for file " + fileServerRelativeUrl
|
|
469
|
+
message: "Failed to process page list view for file " + fileServerRelativeUrl
|
|
413
470
|
});
|
|
414
|
-
reject(
|
|
471
|
+
reject(error);
|
|
415
472
|
});
|
|
416
473
|
})
|
|
417
|
-
.catch(function (
|
|
474
|
+
.catch(function (error) {
|
|
418
475
|
Logger.log({
|
|
419
|
-
data: { fileServerRelativeUrl: fileServerRelativeUrl, listView: listView, err:
|
|
476
|
+
data: { fileServerRelativeUrl: fileServerRelativeUrl, listView: listView, err: error },
|
|
420
477
|
level: 3 /* Error */,
|
|
421
|
-
message: "Failed to process page list view for file " + fileServerRelativeUrl
|
|
478
|
+
message: "Failed to process page list view for file " + fileServerRelativeUrl
|
|
422
479
|
});
|
|
423
|
-
reject(
|
|
480
|
+
reject(error);
|
|
424
481
|
});
|
|
425
482
|
}
|
|
426
483
|
else {
|
|
427
484
|
resolve();
|
|
428
485
|
}
|
|
429
486
|
})
|
|
430
|
-
.catch(function (
|
|
487
|
+
.catch(function (error) {
|
|
431
488
|
Logger.log({
|
|
432
|
-
data: { fileServerRelativeUrl: fileServerRelativeUrl, listView: listView, err:
|
|
489
|
+
data: { fileServerRelativeUrl: fileServerRelativeUrl, listView: listView, err: error },
|
|
433
490
|
level: 3 /* Error */,
|
|
434
|
-
message: "Failed to process page list view for file " + fileServerRelativeUrl
|
|
491
|
+
message: "Failed to process page list view for file " + fileServerRelativeUrl
|
|
435
492
|
});
|
|
436
|
-
reject(
|
|
493
|
+
reject(error);
|
|
437
494
|
});
|
|
438
495
|
});
|
|
439
496
|
};
|
|
440
497
|
/**
|
|
441
498
|
* Process list item properties for the file
|
|
442
499
|
*
|
|
443
|
-
* @param
|
|
444
|
-
* @param
|
|
445
|
-
* @param
|
|
500
|
+
* @param web - The web
|
|
501
|
+
* @param pnpFile - The PnP file
|
|
502
|
+
* @param properties - The properties to set
|
|
446
503
|
*/
|
|
447
504
|
Files.prototype.processProperties = function (web, pnpFile, file) {
|
|
448
505
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -452,14 +509,26 @@ var Files = (function (_super) {
|
|
|
452
509
|
case 0:
|
|
453
510
|
hasProperties = file.Properties && Object.keys(file.Properties).length > 0;
|
|
454
511
|
if (!hasProperties) return [3 /*break*/, 3];
|
|
455
|
-
Logger.log({
|
|
456
|
-
|
|
512
|
+
Logger.log({
|
|
513
|
+
level: 1 /* Info */,
|
|
514
|
+
message: "Processing properties for " + file.Folder + "/" + file.Url
|
|
515
|
+
});
|
|
516
|
+
return [4 /*yield*/, pnpFile.listItemAllFields
|
|
517
|
+
.select('ID', 'ParentList/ID', 'ParentList/Title')
|
|
518
|
+
.expand('ParentList')
|
|
519
|
+
.get()];
|
|
457
520
|
case 1:
|
|
458
521
|
listItemAllFields = _a.sent();
|
|
459
|
-
return [4 /*yield*/, web.lists
|
|
522
|
+
return [4 /*yield*/, web.lists
|
|
523
|
+
.getById(listItemAllFields.ParentList.Id)
|
|
524
|
+
.items.getById(listItemAllFields.ID)
|
|
525
|
+
.update(file.Properties)];
|
|
460
526
|
case 2:
|
|
461
527
|
_a.sent();
|
|
462
|
-
Logger.log({
|
|
528
|
+
Logger.log({
|
|
529
|
+
level: 1 /* Info */,
|
|
530
|
+
message: "Successfully processed properties for " + file.Folder + "/" + file.Url
|
|
531
|
+
});
|
|
463
532
|
_a.label = 3;
|
|
464
533
|
case 3: return [2 /*return*/];
|
|
465
534
|
}
|
|
@@ -467,15 +536,16 @@ var Files = (function (_super) {
|
|
|
467
536
|
});
|
|
468
537
|
};
|
|
469
538
|
/**
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
Files.prototype.replaceWebPartXmlTokens = function (
|
|
476
|
-
var site = combine(document.location.protocol,
|
|
477
|
-
return
|
|
539
|
+
* Replaces tokens in a string, e.g. `{site}`
|
|
540
|
+
*
|
|
541
|
+
* @param str - The string
|
|
542
|
+
* @param ctx - Client context
|
|
543
|
+
*/
|
|
544
|
+
Files.prototype.replaceWebPartXmlTokens = function (string, context) {
|
|
545
|
+
var site = combine(document.location.protocol, '//', document.location.host, context.get_url());
|
|
546
|
+
return string.replace(/{site}/g, site);
|
|
478
547
|
};
|
|
479
548
|
return Files;
|
|
480
549
|
}(HandlerBase));
|
|
481
550
|
export { Files };
|
|
551
|
+
//# sourceMappingURL=files.js.map
|