@pnp/cli-microsoft365 6.10.0-beta.81a81c0 → 6.10.0-beta.bd0bd83
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/README.md +7 -5
- package/dist/m365/search/commands/externalconnection/externalconnection-remove.js +35 -34
- package/dist/m365/spfx/commands/project/project-doctor/doctor-1.18.0-beta.1.js +23 -0
- package/dist/m365/spfx/commands/project/project-doctor.js +2 -1
- package/dist/m365/spfx/commands/project/project-externalize/rules/DynamicRule.js +59 -51
- package/dist/m365/spfx/commands/project/project-upgrade/rules/FN001022_DEP_office_ui_fabric_react.js +2 -2
- package/dist/m365/spfx/commands/project/project-upgrade/upgrade-1.18.0-beta.1.js +61 -0
- package/dist/m365/spfx/commands/project/project-upgrade.js +16 -13
- package/dist/m365/spfx/commands/spfx-doctor.js +15 -0
- package/dist/m365/spo/commands/folder/folder-remove.js +30 -28
- package/dist/m365/spo/commands/tenant/tenant-appcatalog-add.js +12 -15
- package/dist/m365/spo/commands/tenant/tenant-applicationcustomizer-set.js +80 -2
- package/dist/m365/spo/commands/tenant/tenant-recyclebinitem-remove.js +48 -48
- package/dist/m365/teams/commands/chat/chat-get.js +4 -4
- package/dist/m365/teams/commands/chat/chat-message-send.js +4 -4
- package/docs/docs/_clisettings.mdx +17 -0
- package/docs/docs/cmd/pa/app/app-get.mdx +1 -1
- package/docs/docs/cmd/pa/app/app-list.mdx +1 -1
- package/docs/docs/cmd/pp/aibuildermodel/aibuildermodel-get.mdx +1 -1
- package/docs/docs/cmd/pp/aibuildermodel/aibuildermodel-list.mdx +1 -1
- package/docs/docs/cmd/pp/card/card-clone.mdx +1 -1
- package/docs/docs/cmd/pp/card/card-get.mdx +1 -1
- package/docs/docs/cmd/pp/card/card-list.mdx +1 -1
- package/docs/docs/cmd/pp/chatbot/chatbot-get.mdx +1 -1
- package/docs/docs/cmd/pp/chatbot/chatbot-list.mdx +1 -1
- package/docs/docs/cmd/pp/dataverse/dataverse-table-get.mdx +1 -1
- package/docs/docs/cmd/pp/dataverse/dataverse-table-list.mdx +1 -1
- package/docs/docs/cmd/pp/dataverse/dataverse-table-remove.mdx +1 -1
- package/docs/docs/cmd/pp/dataverse/dataverse-table-row-list.mdx +1 -1
- package/docs/docs/cmd/pp/dataverse/dataverse-table-row-remove.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-applicationcustomizer-get.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-applicationcustomizer-list.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-applicationcustomizer-remove.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-applicationcustomizer-set.mdx +12 -3
- package/docs/docs/cmd/spo/tenant/tenant-commandset-get.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-commandset-list.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-commandset-remove.mdx +1 -1
- package/docs/docs/cmd/spo/tenant/tenant-commandset-set.mdx +1 -1
- package/docs/docs/cmd/spo/userprofile/userprofile-get.mdx +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -49,11 +49,13 @@
|
|
|
49
49
|
<a href="#contribute">Contribute</a>
|
|
50
50
|
</p>
|
|
51
51
|
<p align="center">
|
|
52
|
-
<a href="
|
|
53
|
-
<a href="#
|
|
52
|
+
<a href="https://github.com/pnp/cli-microsoft365/blob/main/CODE_OF_CONDUCT.md">Code of Conduct</a> |
|
|
53
|
+
<a href="#need-help">Need help?</a> |
|
|
54
54
|
<a href="#disclaimer">Disclaimer</a>
|
|
55
55
|
</p>
|
|
56
|
-
|
|
56
|
+
<p align="center">
|
|
57
|
+
<a href="#microsoft-365--power-platform-community">Microsoft 365 & Power Platform Community</a>
|
|
58
|
+
</p>
|
|
57
59
|
<p align="center">
|
|
58
60
|
<img alt="CLI for Microsoft 365" src="./docs/docs/images/cli-microsoft365.gif" height="500" />
|
|
59
61
|
</p>
|
|
@@ -229,9 +231,9 @@ Checkout our [Wiki](https://github.com/pnp/cli-microsoft365/wiki) for guides on
|
|
|
229
231
|
</a>
|
|
230
232
|
</p>
|
|
231
233
|
|
|
232
|
-
## Microsoft 365 Platform Community
|
|
234
|
+
## Microsoft 365 & Power Platform Community
|
|
233
235
|
|
|
234
|
-
CLI for Microsoft 365 is a [Microsoft 365 Platform Community](https://pnp.github.io) (PnP) project. Microsoft 365 Platform Community is a virtual team consisting of Microsoft employees and community members focused on helping the community make the best use of Microsoft products. CLI for Microsoft 365 is an open-source project not affiliated with Microsoft and not covered by Microsoft support. If you experience any issues using the CLI, please submit an issue in the [issues list](https://github.com/pnp/cli-microsoft365/issues).
|
|
236
|
+
CLI for Microsoft 365 is a [Microsoft 365 & Power Platform Community](https://pnp.github.io) (PnP) project. Microsoft 365 & Power Platform Community is a virtual team consisting of Microsoft employees and community members focused on helping the community make the best use of Microsoft products. CLI for Microsoft 365 is an open-source project not affiliated with Microsoft and not covered by Microsoft support. If you experience any issues using the CLI, please submit an issue in the [issues list](https://github.com/pnp/cli-microsoft365/issues).
|
|
235
237
|
|
|
236
238
|
## Disclaimer
|
|
237
239
|
|
|
@@ -35,48 +35,31 @@ class SearchExternalConnectionRemoveCommand extends GraphCommand_1.default {
|
|
|
35
35
|
__classPrivateFieldGet(this, _SearchExternalConnectionRemoveCommand_instances, "m", _SearchExternalConnectionRemoveCommand_initOptionSets).call(this);
|
|
36
36
|
}
|
|
37
37
|
getExternalConnectionId(args) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
.get(requestOptions)
|
|
50
|
-
.then((res) => {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
if (args.options.id) {
|
|
40
|
+
return args.options.id;
|
|
41
|
+
}
|
|
42
|
+
const requestOptions = {
|
|
43
|
+
url: `${this.resource}/v1.0/external/connections?$filter=name eq '${formatting_1.formatting.encodeQueryParameter(args.options.name)}'&$select=id`,
|
|
44
|
+
headers: {
|
|
45
|
+
accept: 'application/json;odata.metadata=none'
|
|
46
|
+
},
|
|
47
|
+
responseType: 'json'
|
|
48
|
+
};
|
|
49
|
+
const res = yield request_1.default.get(requestOptions);
|
|
51
50
|
if (res.value.length === 1) {
|
|
52
|
-
return
|
|
51
|
+
return res.value[0].id;
|
|
53
52
|
}
|
|
54
53
|
if (res.value.length === 0) {
|
|
55
|
-
|
|
54
|
+
throw `The specified connection does not exist in Microsoft Search`;
|
|
56
55
|
}
|
|
57
|
-
|
|
56
|
+
throw `Multiple external connections with name ${args.options.name} found. Please disambiguate (IDs): ${res.value.map(x => x.id).join(', ')}`;
|
|
58
57
|
});
|
|
59
58
|
}
|
|
60
59
|
commandAction(logger, args) {
|
|
61
60
|
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
-
const removeExternalConnection = () => __awaiter(this, void 0, void 0, function* () {
|
|
63
|
-
try {
|
|
64
|
-
const externalConnectionId = yield this.getExternalConnectionId(args);
|
|
65
|
-
const requestOptions = {
|
|
66
|
-
url: `${this.resource}/v1.0/external/connections/${formatting_1.formatting.encodeQueryParameter(externalConnectionId)}`,
|
|
67
|
-
headers: {
|
|
68
|
-
accept: 'application/json;odata.metadata=none'
|
|
69
|
-
},
|
|
70
|
-
responseType: 'json'
|
|
71
|
-
};
|
|
72
|
-
yield request_1.default.delete(requestOptions);
|
|
73
|
-
}
|
|
74
|
-
catch (err) {
|
|
75
|
-
this.handleRejectedODataJsonPromise(err);
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
61
|
if (args.options.confirm) {
|
|
79
|
-
yield removeExternalConnection();
|
|
62
|
+
yield this.removeExternalConnection(args);
|
|
80
63
|
}
|
|
81
64
|
else {
|
|
82
65
|
const result = yield Cli_1.Cli.prompt({
|
|
@@ -86,11 +69,29 @@ class SearchExternalConnectionRemoveCommand extends GraphCommand_1.default {
|
|
|
86
69
|
message: `Are you sure you want to remove the external connection '${args.options.id || args.options.name}'?`
|
|
87
70
|
});
|
|
88
71
|
if (result.continue) {
|
|
89
|
-
yield removeExternalConnection();
|
|
72
|
+
yield this.removeExternalConnection(args);
|
|
90
73
|
}
|
|
91
74
|
}
|
|
92
75
|
});
|
|
93
76
|
}
|
|
77
|
+
removeExternalConnection(args) {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
try {
|
|
80
|
+
const externalConnectionId = yield this.getExternalConnectionId(args);
|
|
81
|
+
const requestOptions = {
|
|
82
|
+
url: `${this.resource}/v1.0/external/connections/${formatting_1.formatting.encodeQueryParameter(externalConnectionId)}`,
|
|
83
|
+
headers: {
|
|
84
|
+
accept: 'application/json;odata.metadata=none'
|
|
85
|
+
},
|
|
86
|
+
responseType: 'json'
|
|
87
|
+
};
|
|
88
|
+
yield request_1.default.delete(requestOptions);
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
this.handleRejectedODataJsonPromise(err);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
94
95
|
}
|
|
95
96
|
_SearchExternalConnectionRemoveCommand_instances = new WeakSet(), _SearchExternalConnectionRemoveCommand_initTelemetry = function _SearchExternalConnectionRemoveCommand_initTelemetry() {
|
|
96
97
|
this.telemetry.push((args) => {
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const FN001008_DEP_react_1 = require("./rules/FN001008_DEP_react");
|
|
4
|
+
const FN001009_DEP_react_dom_1 = require("./rules/FN001009_DEP_react_dom");
|
|
5
|
+
const FN001035_DEP_fluentui_react_1 = require("./rules/FN001035_DEP_fluentui_react");
|
|
6
|
+
const FN002004_DEVDEP_gulp_1 = require("./rules/FN002004_DEVDEP_gulp");
|
|
7
|
+
const FN002007_DEVDEP_ajv_1 = require("./rules/FN002007_DEVDEP_ajv");
|
|
8
|
+
const FN002013_DEVDEP_types_webpack_env_1 = require("./rules/FN002013_DEVDEP_types_webpack_env");
|
|
9
|
+
const FN002015_DEVDEP_types_react_1 = require("./rules/FN002015_DEVDEP_types_react");
|
|
10
|
+
const FN002016_DEVDEP_types_react_dom_1 = require("./rules/FN002016_DEVDEP_types_react_dom");
|
|
11
|
+
const FN002019_DEVDEP_microsoft_rush_stack_compiler_1 = require("./rules/FN002019_DEVDEP_microsoft_rush_stack_compiler");
|
|
12
|
+
module.exports = [
|
|
13
|
+
new FN001008_DEP_react_1.FN001008_DEP_react('17'),
|
|
14
|
+
new FN001009_DEP_react_dom_1.FN001009_DEP_react_dom('17'),
|
|
15
|
+
new FN001035_DEP_fluentui_react_1.FN001035_DEP_fluentui_react('^8.106.4'),
|
|
16
|
+
new FN002004_DEVDEP_gulp_1.FN002004_DEVDEP_gulp('4.0.2'),
|
|
17
|
+
new FN002007_DEVDEP_ajv_1.FN002007_DEVDEP_ajv('^6.12.5'),
|
|
18
|
+
new FN002013_DEVDEP_types_webpack_env_1.FN002013_DEVDEP_types_webpack_env('~1.15.2'),
|
|
19
|
+
new FN002015_DEVDEP_types_react_1.FN002015_DEVDEP_types_react('17'),
|
|
20
|
+
new FN002016_DEVDEP_types_react_dom_1.FN002016_DEVDEP_types_react_dom('17'),
|
|
21
|
+
new FN002019_DEVDEP_microsoft_rush_stack_compiler_1.FN002019_DEVDEP_microsoft_rush_stack_compiler(['4.5'])
|
|
22
|
+
];
|
|
23
|
+
//# sourceMappingURL=doctor-1.18.0-beta.1.js.map
|
|
@@ -77,7 +77,8 @@ class SpfxProjectDoctorCommand extends base_project_command_1.BaseProjectCommand
|
|
|
77
77
|
'1.17.1',
|
|
78
78
|
'1.17.2',
|
|
79
79
|
'1.17.3',
|
|
80
|
-
'1.17.4'
|
|
80
|
+
'1.17.4',
|
|
81
|
+
'1.18.0-beta.1'
|
|
81
82
|
];
|
|
82
83
|
__classPrivateFieldGet(this, _SpfxProjectDoctorCommand_instances, "m", _SpfxProjectDoctorCommand_initTelemetry).call(this);
|
|
83
84
|
__classPrivateFieldGet(this, _SpfxProjectDoctorCommand_instances, "m", _SpfxProjectDoctorCommand_initOptions).call(this);
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
12
|
exports.DynamicRule = void 0;
|
|
4
13
|
const fs = require("fs");
|
|
@@ -12,36 +21,32 @@ class DynamicRule extends BasicDependencyRule_1.BasicDependencyRule {
|
|
|
12
21
|
this.fileVariationSuffixes = ['.min', '.bundle', '-min', '.bundle.min'];
|
|
13
22
|
}
|
|
14
23
|
visit(project) {
|
|
15
|
-
|
|
16
|
-
!project.packageJson.dependencies) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
.all(validPackageNames.map((x) => this.getExternalEntryForPackage(x, project)))
|
|
24
|
-
.then((res) => {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
if (!project.packageJson || !project.packageJson.dependencies) {
|
|
26
|
+
return { entries: [], suggestions: [] };
|
|
27
|
+
}
|
|
28
|
+
const validPackageNames = Object.getOwnPropertyNames(project.packageJson.dependencies)
|
|
29
|
+
.filter(x => this.restrictedNamespaces.map(y => x.indexOf(y) === -1).reduce((y, z) => y && z))
|
|
30
|
+
.filter(x => this.restrictedModules.indexOf(x) === -1);
|
|
31
|
+
const res = yield Promise.all(validPackageNames.map((x) => this.getExternalEntryForPackage(x, project)));
|
|
25
32
|
return {
|
|
26
|
-
entries: res
|
|
27
|
-
.filter(x => x !== undefined)
|
|
28
|
-
.map(x => x),
|
|
33
|
+
entries: res.filter(x => x !== undefined),
|
|
29
34
|
suggestions: []
|
|
30
35
|
};
|
|
31
36
|
});
|
|
32
37
|
}
|
|
33
38
|
getExternalEntryForPackage(packageName, project) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
.
|
|
39
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
const version = project.packageJson.dependencies[packageName];
|
|
41
|
+
const filesPaths = this.getFilePath(packageName).map(x => this.cleanFilePath(x));
|
|
42
|
+
if (!version || filesPaths.length === 0) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
const filesPathsVariations = filesPaths
|
|
46
|
+
.map(x => this.fileVariationSuffixes.map(y => x.indexOf(y) === -1 ? x.replace('.js', `${y}.js`) : x))
|
|
47
|
+
.reduce((x, y) => [...x, ...y]);
|
|
48
|
+
const pathsAndVariations = [...filesPaths, ...filesPathsVariations];
|
|
49
|
+
const externalizeEntryCandidates = yield Promise.all(pathsAndVariations.map(x => this.getExternalEntryForFilePath(x, packageName, version)));
|
|
45
50
|
const dExternalizeEntryCandidates = externalizeEntryCandidates.filter(x => x !== undefined);
|
|
46
51
|
const minifiedModule = dExternalizeEntryCandidates.find(x => !x.globalName && this.pathContainsMinifySuffix(x.path));
|
|
47
52
|
const minifiedNonModule = dExternalizeEntryCandidates.find(x => x.globalName && this.pathContainsMinifySuffix(x.path));
|
|
@@ -57,31 +62,29 @@ class DynamicRule extends BasicDependencyRule_1.BasicDependencyRule {
|
|
|
57
62
|
.filter(y => y > -1).length > 0;
|
|
58
63
|
}
|
|
59
64
|
getExternalEntryForFilePath(filePath, packageName, version) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
.testUrl(url)
|
|
63
|
-
.then((testResult) => {
|
|
65
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
const url = this.getFileUrl(packageName, version, filePath);
|
|
67
|
+
const testResult = yield this.testUrl(url);
|
|
64
68
|
if (!testResult) {
|
|
65
|
-
return
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
const moduleInfo = yield this.getModuleType(url);
|
|
72
|
+
if (moduleInfo.scriptType === 'CommonJs') {
|
|
73
|
+
return undefined; //browsers don't support those module types without an additional library
|
|
74
|
+
}
|
|
75
|
+
else if (moduleInfo.scriptType === 'ES2015' || moduleInfo.scriptType === 'AMD') {
|
|
76
|
+
return {
|
|
77
|
+
key: packageName,
|
|
78
|
+
path: url
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
else { //TODO for non-module and UMD we should technically add dependencies as well
|
|
82
|
+
return {
|
|
83
|
+
key: packageName,
|
|
84
|
+
path: url,
|
|
85
|
+
globalName: moduleInfo.exports && moduleInfo.exports.length > 0 ? moduleInfo.exports[0] : packageName // examples where this is not good https://unpkg.com/@pnp/polyfill-ie11@^1.0.2/dist/index.js https://unpkg.com/moment-timezone@^0.5.27/builds/moment-timezone-with-data.js
|
|
86
|
+
};
|
|
66
87
|
}
|
|
67
|
-
return this.getModuleType(url).then((moduleInfo) => {
|
|
68
|
-
if (moduleInfo.scriptType === 'CommonJs') {
|
|
69
|
-
return Promise.resolve(undefined); //browsers don't support those module types without an additional library
|
|
70
|
-
}
|
|
71
|
-
else if (moduleInfo.scriptType === 'ES2015' || moduleInfo.scriptType === 'AMD') {
|
|
72
|
-
return {
|
|
73
|
-
key: packageName,
|
|
74
|
-
path: url
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
else { //TODO for non-module and UMD we should technically add dependencies as well
|
|
78
|
-
return {
|
|
79
|
-
key: packageName,
|
|
80
|
-
path: url,
|
|
81
|
-
globalName: moduleInfo.exports && moduleInfo.exports.length > 0 ? moduleInfo.exports[0] : packageName // examples where this is not good https://unpkg.com/@pnp/polyfill-ie11@^1.0.2/dist/index.js https://unpkg.com/moment-timezone@^0.5.27/builds/moment-timezone-with-data.js
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
88
|
});
|
|
86
89
|
}
|
|
87
90
|
getModuleType(url) {
|
|
@@ -101,10 +104,15 @@ class DynamicRule extends BasicDependencyRule_1.BasicDependencyRule {
|
|
|
101
104
|
return `https://unpkg.com/${packageName}@${version}/${filePath}`;
|
|
102
105
|
}
|
|
103
106
|
testUrl(url) {
|
|
104
|
-
return
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
107
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
108
|
+
try {
|
|
109
|
+
yield request_1.default.head({ url: url, headers: { 'x-anonymous': 'true' } });
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
catch (_a) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
});
|
|
108
116
|
}
|
|
109
117
|
getFilePath(packageName) {
|
|
110
118
|
const packageJsonFilePath = `node_modules/${packageName}/package.json`;
|
package/dist/m365/spfx/commands/project/project-upgrade/rules/FN001022_DEP_office_ui_fabric_react.js
CHANGED
|
@@ -4,8 +4,8 @@ exports.FN001022_DEP_office_ui_fabric_react = void 0;
|
|
|
4
4
|
const spfx_1 = require("../../../../../../utils/spfx");
|
|
5
5
|
const DependencyRule_1 = require("./DependencyRule");
|
|
6
6
|
class FN001022_DEP_office_ui_fabric_react extends DependencyRule_1.DependencyRule {
|
|
7
|
-
constructor(packageVersion) {
|
|
8
|
-
super('office-ui-fabric-react', packageVersion, false,
|
|
7
|
+
constructor(packageVersion, add = true) {
|
|
8
|
+
super('office-ui-fabric-react', packageVersion, false, add);
|
|
9
9
|
}
|
|
10
10
|
get id() {
|
|
11
11
|
return 'FN001022';
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const FN001001_DEP_microsoft_sp_core_library_1 = require("./rules/FN001001_DEP_microsoft_sp_core_library");
|
|
4
|
+
const FN001002_DEP_microsoft_sp_lodash_subset_1 = require("./rules/FN001002_DEP_microsoft_sp_lodash_subset");
|
|
5
|
+
const FN001003_DEP_microsoft_sp_office_ui_fabric_core_1 = require("./rules/FN001003_DEP_microsoft_sp_office_ui_fabric_core");
|
|
6
|
+
const FN001004_DEP_microsoft_sp_webpart_base_1 = require("./rules/FN001004_DEP_microsoft_sp_webpart_base");
|
|
7
|
+
const FN001011_DEP_microsoft_sp_dialog_1 = require("./rules/FN001011_DEP_microsoft_sp_dialog");
|
|
8
|
+
const FN001012_DEP_microsoft_sp_application_base_1 = require("./rules/FN001012_DEP_microsoft_sp_application_base");
|
|
9
|
+
const FN001013_DEP_microsoft_decorators_1 = require("./rules/FN001013_DEP_microsoft_decorators");
|
|
10
|
+
const FN001014_DEP_microsoft_sp_listview_extensibility_1 = require("./rules/FN001014_DEP_microsoft_sp_listview_extensibility");
|
|
11
|
+
const FN001021_DEP_microsoft_sp_property_pane_1 = require("./rules/FN001021_DEP_microsoft_sp_property_pane");
|
|
12
|
+
const FN001022_DEP_office_ui_fabric_react_1 = require("./rules/FN001022_DEP_office_ui_fabric_react");
|
|
13
|
+
const FN001023_DEP_microsoft_sp_component_base_1 = require("./rules/FN001023_DEP_microsoft_sp_component_base");
|
|
14
|
+
const FN001024_DEP_microsoft_sp_diagnostics_1 = require("./rules/FN001024_DEP_microsoft_sp_diagnostics");
|
|
15
|
+
const FN001025_DEP_microsoft_sp_dynamic_data_1 = require("./rules/FN001025_DEP_microsoft_sp_dynamic_data");
|
|
16
|
+
const FN001026_DEP_microsoft_sp_extension_base_1 = require("./rules/FN001026_DEP_microsoft_sp_extension_base");
|
|
17
|
+
const FN001027_DEP_microsoft_sp_http_1 = require("./rules/FN001027_DEP_microsoft_sp_http");
|
|
18
|
+
const FN001028_DEP_microsoft_sp_list_subscription_1 = require("./rules/FN001028_DEP_microsoft_sp_list_subscription");
|
|
19
|
+
const FN001029_DEP_microsoft_sp_loader_1 = require("./rules/FN001029_DEP_microsoft_sp_loader");
|
|
20
|
+
const FN001030_DEP_microsoft_sp_module_interfaces_1 = require("./rules/FN001030_DEP_microsoft_sp_module_interfaces");
|
|
21
|
+
const FN001031_DEP_microsoft_sp_odata_types_1 = require("./rules/FN001031_DEP_microsoft_sp_odata_types");
|
|
22
|
+
const FN001032_DEP_microsoft_sp_page_context_1 = require("./rules/FN001032_DEP_microsoft_sp_page_context");
|
|
23
|
+
const FN001034_DEP_microsoft_sp_adaptive_card_extension_base_1 = require("./rules/FN001034_DEP_microsoft_sp_adaptive_card_extension_base");
|
|
24
|
+
const FN001035_DEP_fluentui_react_1 = require("./rules/FN001035_DEP_fluentui_react");
|
|
25
|
+
const FN002001_DEVDEP_microsoft_sp_build_web_1 = require("./rules/FN002001_DEVDEP_microsoft_sp_build_web");
|
|
26
|
+
const FN002002_DEVDEP_microsoft_sp_module_interfaces_1 = require("./rules/FN002002_DEVDEP_microsoft_sp_module_interfaces");
|
|
27
|
+
const FN002022_DEVDEP_microsoft_eslint_plugin_spfx_1 = require("./rules/FN002022_DEVDEP_microsoft_eslint_plugin_spfx");
|
|
28
|
+
const FN002023_DEVDEP_microsoft_eslint_config_spfx_1 = require("./rules/FN002023_DEVDEP_microsoft_eslint_config_spfx");
|
|
29
|
+
const FN010001_YORC_version_1 = require("./rules/FN010001_YORC_version");
|
|
30
|
+
const FN010010_YORC_sdkVersions_teams_js_1 = require("./rules/FN010010_YORC_sdkVersions_teams_js");
|
|
31
|
+
module.exports = [
|
|
32
|
+
new FN001001_DEP_microsoft_sp_core_library_1.FN001001_DEP_microsoft_sp_core_library('1.18.0-beta.1'),
|
|
33
|
+
new FN001002_DEP_microsoft_sp_lodash_subset_1.FN001002_DEP_microsoft_sp_lodash_subset('1.18.0-beta.1'),
|
|
34
|
+
new FN001003_DEP_microsoft_sp_office_ui_fabric_core_1.FN001003_DEP_microsoft_sp_office_ui_fabric_core('1.18.0-beta.1'),
|
|
35
|
+
new FN001004_DEP_microsoft_sp_webpart_base_1.FN001004_DEP_microsoft_sp_webpart_base('1.18.0-beta.1'),
|
|
36
|
+
new FN001011_DEP_microsoft_sp_dialog_1.FN001011_DEP_microsoft_sp_dialog('1.18.0-beta.1'),
|
|
37
|
+
new FN001012_DEP_microsoft_sp_application_base_1.FN001012_DEP_microsoft_sp_application_base('1.18.0-beta.1'),
|
|
38
|
+
new FN001014_DEP_microsoft_sp_listview_extensibility_1.FN001014_DEP_microsoft_sp_listview_extensibility('1.18.0-beta.1'),
|
|
39
|
+
new FN001021_DEP_microsoft_sp_property_pane_1.FN001021_DEP_microsoft_sp_property_pane('1.18.0-beta.1'),
|
|
40
|
+
new FN001022_DEP_office_ui_fabric_react_1.FN001022_DEP_office_ui_fabric_react('', false),
|
|
41
|
+
new FN001023_DEP_microsoft_sp_component_base_1.FN001023_DEP_microsoft_sp_component_base('1.18.0-beta.1'),
|
|
42
|
+
new FN001024_DEP_microsoft_sp_diagnostics_1.FN001024_DEP_microsoft_sp_diagnostics('1.18.0-beta.1'),
|
|
43
|
+
new FN001025_DEP_microsoft_sp_dynamic_data_1.FN001025_DEP_microsoft_sp_dynamic_data('1.18.0-beta.1'),
|
|
44
|
+
new FN001026_DEP_microsoft_sp_extension_base_1.FN001026_DEP_microsoft_sp_extension_base('1.18.0-beta.1'),
|
|
45
|
+
new FN001027_DEP_microsoft_sp_http_1.FN001027_DEP_microsoft_sp_http('1.18.0-beta.1'),
|
|
46
|
+
new FN001028_DEP_microsoft_sp_list_subscription_1.FN001028_DEP_microsoft_sp_list_subscription('1.18.0-beta.1'),
|
|
47
|
+
new FN001029_DEP_microsoft_sp_loader_1.FN001029_DEP_microsoft_sp_loader('1.18.0-beta.1'),
|
|
48
|
+
new FN001030_DEP_microsoft_sp_module_interfaces_1.FN001030_DEP_microsoft_sp_module_interfaces('1.18.0-beta.1'),
|
|
49
|
+
new FN001031_DEP_microsoft_sp_odata_types_1.FN001031_DEP_microsoft_sp_odata_types('1.18.0-beta.1'),
|
|
50
|
+
new FN001032_DEP_microsoft_sp_page_context_1.FN001032_DEP_microsoft_sp_page_context('1.18.0-beta.1'),
|
|
51
|
+
new FN001035_DEP_fluentui_react_1.FN001035_DEP_fluentui_react('8.106.4'),
|
|
52
|
+
new FN001013_DEP_microsoft_decorators_1.FN001013_DEP_microsoft_decorators('1.18.0-beta.1'),
|
|
53
|
+
new FN001034_DEP_microsoft_sp_adaptive_card_extension_base_1.FN001034_DEP_microsoft_sp_adaptive_card_extension_base('1.18.0-beta.1'),
|
|
54
|
+
new FN002022_DEVDEP_microsoft_eslint_plugin_spfx_1.FN002022_DEVDEP_microsoft_eslint_plugin_spfx('1.18.0-beta.1'),
|
|
55
|
+
new FN002023_DEVDEP_microsoft_eslint_config_spfx_1.FN002023_DEVDEP_microsoft_eslint_config_spfx('1.18.0-beta.1'),
|
|
56
|
+
new FN002001_DEVDEP_microsoft_sp_build_web_1.FN002001_DEVDEP_microsoft_sp_build_web('1.18.0-beta.1'),
|
|
57
|
+
new FN002002_DEVDEP_microsoft_sp_module_interfaces_1.FN002002_DEVDEP_microsoft_sp_module_interfaces('1.18.0-beta.1'),
|
|
58
|
+
new FN010001_YORC_version_1.FN010001_YORC_version('1.18.0-beta.1'),
|
|
59
|
+
new FN010010_YORC_sdkVersions_teams_js_1.FN010010_YORC_sdkVersions_teams_js('2.12.0')
|
|
60
|
+
];
|
|
61
|
+
//# sourceMappingURL=upgrade-1.18.0-beta.1.js.map
|
|
@@ -18,6 +18,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
18
18
|
const fs = require("fs");
|
|
19
19
|
const os = require("os");
|
|
20
20
|
const path = require("path");
|
|
21
|
+
// uncomment to support upgrading to preview releases
|
|
22
|
+
const semver_1 = require("semver");
|
|
21
23
|
const Command_1 = require("../../../../Command");
|
|
22
24
|
const fsUtil_1 = require("../../../../utils/fsUtil");
|
|
23
25
|
const packageManager_1 = require("../../../../utils/packageManager");
|
|
@@ -79,7 +81,8 @@ class SpfxProjectUpgradeCommand extends base_project_command_1.BaseProjectComman
|
|
|
79
81
|
'1.17.1',
|
|
80
82
|
'1.17.2',
|
|
81
83
|
'1.17.3',
|
|
82
|
-
'1.17.4'
|
|
84
|
+
'1.17.4',
|
|
85
|
+
'1.18.0-beta.1'
|
|
83
86
|
];
|
|
84
87
|
__classPrivateFieldGet(this, _SpfxProjectUpgradeCommand_instances, "m", _SpfxProjectUpgradeCommand_initTelemetry).call(this);
|
|
85
88
|
__classPrivateFieldGet(this, _SpfxProjectUpgradeCommand_instances, "m", _SpfxProjectUpgradeCommand_initOptions).call(this);
|
|
@@ -93,15 +96,15 @@ class SpfxProjectUpgradeCommand extends base_project_command_1.BaseProjectComman
|
|
|
93
96
|
}
|
|
94
97
|
this.toVersion = args.options.toVersion ? args.options.toVersion : this.supportedVersions[this.supportedVersions.length - 1];
|
|
95
98
|
// uncomment to support upgrading to preview releases
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
99
|
+
if (!args.options.toVersion &&
|
|
100
|
+
!args.options.preview &&
|
|
101
|
+
(0, semver_1.prerelease)(this.toVersion)) {
|
|
102
|
+
// no version and no preview specified while the current version to
|
|
103
|
+
// upgrade to is a prerelease so let's grab the first non-preview version
|
|
104
|
+
// since we're supporting only one preview version, it's sufficient for
|
|
105
|
+
// us to take second to last version
|
|
106
|
+
this.toVersion = this.supportedVersions[this.supportedVersions.length - 2];
|
|
107
|
+
}
|
|
105
108
|
this.packageManager = args.options.packageManager || 'npm';
|
|
106
109
|
this.shell = args.options.shell || 'bash';
|
|
107
110
|
if (this.supportedVersions.indexOf(this.toVersion) < 0) {
|
|
@@ -488,9 +491,9 @@ _SpfxProjectUpgradeCommand_instances = new WeakSet(), _SpfxProjectUpgradeCommand
|
|
|
488
491
|
preview: args.options.preview
|
|
489
492
|
});
|
|
490
493
|
// uncomment to support upgrading to preview releases
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
+
if ((0, semver_1.prerelease)(this.telemetryProperties.toVersion) && !args.options.preview) {
|
|
495
|
+
this.telemetryProperties.toVersion = this.supportedVersions[this.supportedVersions.length - 2];
|
|
496
|
+
}
|
|
494
497
|
});
|
|
495
498
|
}, _SpfxProjectUpgradeCommand_initOptions = function _SpfxProjectUpgradeCommand_initOptions() {
|
|
496
499
|
this.options.unshift({
|
|
@@ -534,6 +534,21 @@ class SpfxDoctorCommand extends base_project_command_1.BaseProjectCommand {
|
|
|
534
534
|
range: '^4',
|
|
535
535
|
fix: 'npm i -g yo@4'
|
|
536
536
|
}
|
|
537
|
+
},
|
|
538
|
+
'1.18.0-beta.1': {
|
|
539
|
+
gulpCli: {
|
|
540
|
+
range: '^1 || ^2',
|
|
541
|
+
fix: 'npm i -g gulp-cli@2'
|
|
542
|
+
},
|
|
543
|
+
node: {
|
|
544
|
+
range: '>=16.13.0 <17.0.0',
|
|
545
|
+
fix: 'Install Node.js >=16.13.0 <17.0.0'
|
|
546
|
+
},
|
|
547
|
+
sp: SharePointVersion.SPO,
|
|
548
|
+
yo: {
|
|
549
|
+
range: '^4',
|
|
550
|
+
fix: 'npm i -g yo@4'
|
|
551
|
+
}
|
|
537
552
|
}
|
|
538
553
|
};
|
|
539
554
|
__classPrivateFieldGet(this, _SpfxDoctorCommand_instances, "m", _SpfxDoctorCommand_initTelemetry).call(this);
|
|
@@ -38,34 +38,8 @@ class SpoFolderRemoveCommand extends SpoCommand_1.default {
|
|
|
38
38
|
}
|
|
39
39
|
commandAction(logger, args) {
|
|
40
40
|
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
-
const removeFolder = () => __awaiter(this, void 0, void 0, function* () {
|
|
42
|
-
if (this.verbose) {
|
|
43
|
-
logger.logToStderr(`Removing folder in site at ${args.options.webUrl}...`);
|
|
44
|
-
}
|
|
45
|
-
const serverRelativeUrl = urlUtil_1.urlUtil.getServerRelativePath(args.options.webUrl, args.options.url);
|
|
46
|
-
let requestUrl = `${args.options.webUrl}/_api/web/GetFolderByServerRelativeUrl('${formatting_1.formatting.encodeQueryParameter(serverRelativeUrl)}')`;
|
|
47
|
-
if (args.options.recycle) {
|
|
48
|
-
requestUrl += `/recycle()`;
|
|
49
|
-
}
|
|
50
|
-
const requestOptions = {
|
|
51
|
-
url: requestUrl,
|
|
52
|
-
method: 'POST',
|
|
53
|
-
headers: {
|
|
54
|
-
'X-HTTP-Method': 'DELETE',
|
|
55
|
-
'If-Match': '*',
|
|
56
|
-
'accept': 'application/json;odata=nometadata'
|
|
57
|
-
},
|
|
58
|
-
responseType: 'json'
|
|
59
|
-
};
|
|
60
|
-
try {
|
|
61
|
-
yield request_1.default.post(requestOptions);
|
|
62
|
-
}
|
|
63
|
-
catch (err) {
|
|
64
|
-
this.handleRejectedODataJsonPromise(err);
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
41
|
if (args.options.confirm) {
|
|
68
|
-
yield removeFolder();
|
|
42
|
+
yield this.removeFolder(logger, args.options);
|
|
69
43
|
}
|
|
70
44
|
else {
|
|
71
45
|
const result = yield Cli_1.Cli.prompt({
|
|
@@ -75,11 +49,39 @@ class SpoFolderRemoveCommand extends SpoCommand_1.default {
|
|
|
75
49
|
message: `Are you sure you want to ${args.options.recycle ? "recycle" : "remove"} the folder ${args.options.url} located in site ${args.options.webUrl}?`
|
|
76
50
|
});
|
|
77
51
|
if (result.continue) {
|
|
78
|
-
yield removeFolder();
|
|
52
|
+
yield this.removeFolder(logger, args.options);
|
|
79
53
|
}
|
|
80
54
|
}
|
|
81
55
|
});
|
|
82
56
|
}
|
|
57
|
+
removeFolder(logger, options) {
|
|
58
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
if (this.verbose) {
|
|
60
|
+
logger.logToStderr(`Removing folder in site at ${options.webUrl}...`);
|
|
61
|
+
}
|
|
62
|
+
const serverRelativeUrl = urlUtil_1.urlUtil.getServerRelativePath(options.webUrl, options.url);
|
|
63
|
+
let requestUrl = `${options.webUrl}/_api/web/GetFolderByServerRelativeUrl('${formatting_1.formatting.encodeQueryParameter(serverRelativeUrl)}')`;
|
|
64
|
+
if (options.recycle) {
|
|
65
|
+
requestUrl += `/recycle()`;
|
|
66
|
+
}
|
|
67
|
+
const requestOptions = {
|
|
68
|
+
url: requestUrl,
|
|
69
|
+
method: 'POST',
|
|
70
|
+
headers: {
|
|
71
|
+
'X-HTTP-Method': 'DELETE',
|
|
72
|
+
'If-Match': '*',
|
|
73
|
+
'accept': 'application/json;odata=nometadata'
|
|
74
|
+
},
|
|
75
|
+
responseType: 'json'
|
|
76
|
+
};
|
|
77
|
+
try {
|
|
78
|
+
yield request_1.default.post(requestOptions);
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
this.handleRejectedODataJsonPromise(err);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
83
85
|
}
|
|
84
86
|
_SpoFolderRemoveCommand_instances = new WeakSet(), _SpoFolderRemoveCommand_initTelemetry = function _SpoFolderRemoveCommand_initTelemetry() {
|
|
85
87
|
this.telemetry.push((args) => {
|
|
@@ -62,7 +62,8 @@ class SpoTenantAppCatalogAddCommand extends SpoCommand_1.default {
|
|
|
62
62
|
});
|
|
63
63
|
}
|
|
64
64
|
ensureNoExistingSite(url, force, logger) {
|
|
65
|
-
|
|
65
|
+
var _a, _b;
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
66
67
|
if (this.verbose) {
|
|
67
68
|
logger.logToStderr(`Checking if site ${url} exists...`);
|
|
68
69
|
}
|
|
@@ -74,14 +75,13 @@ class SpoTenantAppCatalogAddCommand extends SpoCommand_1.default {
|
|
|
74
75
|
_: []
|
|
75
76
|
}
|
|
76
77
|
};
|
|
77
|
-
|
|
78
|
-
.executeCommandWithOutput(spoSiteGetCommand, siteGetOptions)
|
|
79
|
-
.then(() => {
|
|
78
|
+
try {
|
|
79
|
+
yield Cli_1.Cli.executeCommandWithOutput(spoSiteGetCommand, siteGetOptions);
|
|
80
80
|
if (this.verbose) {
|
|
81
81
|
logger.logToStderr(`Found site ${url}`);
|
|
82
82
|
}
|
|
83
83
|
if (!force) {
|
|
84
|
-
|
|
84
|
+
throw new Command_1.CommandError(`Another site exists at ${url}`);
|
|
85
85
|
}
|
|
86
86
|
if (this.verbose) {
|
|
87
87
|
logger.logToStderr(`Deleting site ${url}...`);
|
|
@@ -94,20 +94,17 @@ class SpoTenantAppCatalogAddCommand extends SpoCommand_1.default {
|
|
|
94
94
|
verbose: this.verbose,
|
|
95
95
|
debug: this.debug
|
|
96
96
|
};
|
|
97
|
-
Cli_1.Cli
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
// some other error occurred
|
|
103
|
-
return reject(err.error);
|
|
97
|
+
yield Cli_1.Cli.executeCommand(spoSiteRemoveCommand, { options: Object.assign(Object.assign({}, siteRemoveOptions), { _: [] }) });
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
if (((_a = err.error) === null || _a === void 0 ? void 0 : _a.message) !== 'File not Found' && ((_b = err.error) === null || _b === void 0 ? void 0 : _b.message) !== '404 FILE NOT FOUND') {
|
|
101
|
+
throw err.error || err;
|
|
104
102
|
}
|
|
105
103
|
if (this.verbose) {
|
|
106
104
|
logger.logToStderr(`No site found at ${url}`);
|
|
107
105
|
}
|
|
108
|
-
//
|
|
109
|
-
|
|
110
|
-
});
|
|
106
|
+
// Site not found. Continue
|
|
107
|
+
}
|
|
111
108
|
});
|
|
112
109
|
}
|
|
113
110
|
createAppCatalog(options, logger) {
|
|
@@ -23,6 +23,8 @@ const validation_1 = require("../../../../utils/validation");
|
|
|
23
23
|
const SpoCommand_1 = require("../../../base/SpoCommand");
|
|
24
24
|
const commands_1 = require("../../commands");
|
|
25
25
|
const os = require("os");
|
|
26
|
+
const Cli_1 = require("../../../../cli/Cli");
|
|
27
|
+
const spoListItemListCommand = require("../listitem/listitem-list");
|
|
26
28
|
const request_1 = require("../../../../request");
|
|
27
29
|
class SpoTenantApplicationCustomizerSetCommand extends SpoCommand_1.default {
|
|
28
30
|
get name() {
|
|
@@ -46,6 +48,20 @@ class SpoTenantApplicationCustomizerSetCommand extends SpoCommand_1.default {
|
|
|
46
48
|
if (!appCatalogUrl) {
|
|
47
49
|
throw 'No app catalog URL found';
|
|
48
50
|
}
|
|
51
|
+
if (args.options.newClientSideComponentId !== undefined) {
|
|
52
|
+
const componentManifest = yield this.getComponentManifest(appCatalogUrl, args.options.newClientSideComponentId, logger);
|
|
53
|
+
const clientComponentManifest = JSON.parse(componentManifest.ClientComponentManifest);
|
|
54
|
+
if (clientComponentManifest.extensionType !== "ApplicationCustomizer") {
|
|
55
|
+
throw `The extension type of this component is not of type 'ApplicationCustomizer' but of type '${clientComponentManifest.extensionType}'`;
|
|
56
|
+
}
|
|
57
|
+
const solution = yield this.getSolutionFromAppCatalog(appCatalogUrl, componentManifest.SolutionId, logger);
|
|
58
|
+
if (!solution.ContainsTenantWideExtension) {
|
|
59
|
+
throw `The solution does not contain an extension that can be deployed to all sites. Make sure that you've entered the correct component Id.`;
|
|
60
|
+
}
|
|
61
|
+
else if (!solution.SkipFeatureDeployment) {
|
|
62
|
+
throw 'The solution has not been deployed to all sites. Make sure to deploy this solution to all sites.';
|
|
63
|
+
}
|
|
64
|
+
}
|
|
49
65
|
const listServerRelativeUrl = urlUtil_1.urlUtil.getServerRelativePath(appCatalogUrl, '/lists/TenantWideExtensions');
|
|
50
66
|
const listItemId = yield this.getListItemId(appCatalogUrl, args.options, listServerRelativeUrl, logger);
|
|
51
67
|
yield this.updateTenantWideExtension(appCatalogUrl, args.options, listServerRelativeUrl, listItemId, logger);
|
|
@@ -72,9 +88,59 @@ class SpoTenantApplicationCustomizerSetCommand extends SpoCommand_1.default {
|
|
|
72
88
|
return listItemInstances[0].Id;
|
|
73
89
|
});
|
|
74
90
|
}
|
|
91
|
+
getComponentManifest(appCatalogUrl, clientSideComponentId, logger) {
|
|
92
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
+
if (this.verbose) {
|
|
94
|
+
logger.logToStderr('Retrieving component manifest item from the ComponentManifests list on the app catalog site so that we get the solution id');
|
|
95
|
+
}
|
|
96
|
+
const camlQuery = `<View><ViewFields><FieldRef Name='ClientComponentId'></FieldRef><FieldRef Name='SolutionId'></FieldRef><FieldRef Name='ClientComponentManifest'></FieldRef></ViewFields><Query><Where><Eq><FieldRef Name='ClientComponentId' /><Value Type='Guid'>${clientSideComponentId}</Value></Eq></Where></Query></View>`;
|
|
97
|
+
const commandOptions = {
|
|
98
|
+
webUrl: appCatalogUrl,
|
|
99
|
+
listUrl: `${urlUtil_1.urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`,
|
|
100
|
+
camlQuery: camlQuery,
|
|
101
|
+
verbose: this.verbose,
|
|
102
|
+
debug: this.debug,
|
|
103
|
+
output: 'json'
|
|
104
|
+
};
|
|
105
|
+
const output = yield Cli_1.Cli.executeCommandWithOutput(spoListItemListCommand, { options: Object.assign(Object.assign({}, commandOptions), { _: [] }) });
|
|
106
|
+
if (this.verbose) {
|
|
107
|
+
logger.logToStderr(output.stderr);
|
|
108
|
+
}
|
|
109
|
+
const outputParsed = JSON.parse(output.stdout);
|
|
110
|
+
if (outputParsed.length === 0) {
|
|
111
|
+
throw 'No component found with the specified clientSideComponentId found in the component manifest list. Make sure that the application is added to the application catalog';
|
|
112
|
+
}
|
|
113
|
+
return outputParsed[0];
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
getSolutionFromAppCatalog(appCatalogUrl, solutionId, logger) {
|
|
117
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
118
|
+
if (this.verbose) {
|
|
119
|
+
logger.logToStderr(`Retrieving solution with id ${solutionId} from the application catalog`);
|
|
120
|
+
}
|
|
121
|
+
const camlQuery = `<View><ViewFields><FieldRef Name='SkipFeatureDeployment'></FieldRef><FieldRef Name='ContainsTenantWideExtension'></FieldRef></ViewFields><Query><Where><Eq><FieldRef Name='AppProductID' /><Value Type='Guid'>${solutionId}</Value></Eq></Where></Query></View>`;
|
|
122
|
+
const commandOptions = {
|
|
123
|
+
webUrl: appCatalogUrl,
|
|
124
|
+
listUrl: `${urlUtil_1.urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/AppCatalog`,
|
|
125
|
+
camlQuery: camlQuery,
|
|
126
|
+
verbose: this.verbose,
|
|
127
|
+
debug: this.debug,
|
|
128
|
+
output: 'json'
|
|
129
|
+
};
|
|
130
|
+
const output = yield Cli_1.Cli.executeCommandWithOutput(spoListItemListCommand, { options: Object.assign(Object.assign({}, commandOptions), { _: [] }) });
|
|
131
|
+
if (this.verbose) {
|
|
132
|
+
logger.logToStderr(output.stderr);
|
|
133
|
+
}
|
|
134
|
+
const outputParsed = JSON.parse(output.stdout);
|
|
135
|
+
if (outputParsed.length === 0) {
|
|
136
|
+
throw `No component found with the solution id ${solutionId}. Make sure that the solution is available in the app catalog`;
|
|
137
|
+
}
|
|
138
|
+
return outputParsed[0];
|
|
139
|
+
});
|
|
140
|
+
}
|
|
75
141
|
updateTenantWideExtension(appCatalogUrl, options, listServerRelativeUrl, itemId, logger) {
|
|
76
142
|
return __awaiter(this, void 0, void 0, function* () {
|
|
77
|
-
const { title, id, clientSideComponentId, newTitle, clientSideComponentProperties, webTemplate } = options;
|
|
143
|
+
const { title, id, clientSideComponentId, newTitle, newClientSideComponentId, clientSideComponentProperties, webTemplate } = options;
|
|
78
144
|
if (this.verbose) {
|
|
79
145
|
logger.logToStderr(`Updating tenant-wide application customizer: "${title || id || clientSideComponentId}"...`);
|
|
80
146
|
}
|
|
@@ -85,6 +151,12 @@ class SpoTenantApplicationCustomizerSetCommand extends SpoCommand_1.default {
|
|
|
85
151
|
FieldValue: newTitle
|
|
86
152
|
});
|
|
87
153
|
}
|
|
154
|
+
if (newClientSideComponentId !== undefined) {
|
|
155
|
+
formValues.push({
|
|
156
|
+
FieldName: 'TenantWideExtensionComponentId',
|
|
157
|
+
FieldValue: newClientSideComponentId
|
|
158
|
+
});
|
|
159
|
+
}
|
|
88
160
|
if (clientSideComponentProperties !== undefined) {
|
|
89
161
|
formValues.push({
|
|
90
162
|
FieldName: 'TenantWideExtensionComponentProperties',
|
|
@@ -118,6 +190,7 @@ _SpoTenantApplicationCustomizerSetCommand_instances = new WeakSet(), _SpoTenantA
|
|
|
118
190
|
id: typeof args.options.id !== 'undefined',
|
|
119
191
|
clientSideComponentId: typeof args.options.clientSideComponentId !== 'undefined',
|
|
120
192
|
newTitle: typeof args.options.newTitle !== 'undefined',
|
|
193
|
+
newClientSideComponentId: typeof args.options.newClientSideComponentId !== 'undefined',
|
|
121
194
|
clientSideComponentProperties: typeof args.options.clientSideComponentProperties !== 'undefined',
|
|
122
195
|
webTemplate: typeof args.options.webTemplate !== 'undefined'
|
|
123
196
|
});
|
|
@@ -131,6 +204,8 @@ _SpoTenantApplicationCustomizerSetCommand_instances = new WeakSet(), _SpoTenantA
|
|
|
131
204
|
option: '-c, --clientSideComponentId [clientSideComponentId]'
|
|
132
205
|
}, {
|
|
133
206
|
option: '--newTitle [newTitle]'
|
|
207
|
+
}, {
|
|
208
|
+
option: '--newClientSideComponentId [newClientSideComponentId]'
|
|
134
209
|
}, {
|
|
135
210
|
option: '-p, --clientSideComponentProperties [clientSideComponentProperties]'
|
|
136
211
|
}, {
|
|
@@ -144,7 +219,10 @@ _SpoTenantApplicationCustomizerSetCommand_instances = new WeakSet(), _SpoTenantA
|
|
|
144
219
|
if (args.options.clientSideComponentId && !validation_1.validation.isValidGuid(args.options.clientSideComponentId)) {
|
|
145
220
|
return `${args.options.clientSideComponentId} is not a valid GUID`;
|
|
146
221
|
}
|
|
147
|
-
if (
|
|
222
|
+
if (args.options.newClientSideComponentId && !validation_1.validation.isValidGuid(args.options.newClientSideComponentId)) {
|
|
223
|
+
return `${args.options.newClientSideComponentId} is not a valid GUID`;
|
|
224
|
+
}
|
|
225
|
+
if (!args.options.newTitle && !args.options.newClientSideComponentId && !args.options.clientSideComponentProperties && !args.options.webTemplate) {
|
|
148
226
|
return `Please specify an option to be updated`;
|
|
149
227
|
}
|
|
150
228
|
return true;
|
|
@@ -39,54 +39,8 @@ class SpoTenantRecycleBinItemRemoveCommand extends SpoCommand_1.default {
|
|
|
39
39
|
}
|
|
40
40
|
commandAction(logger, args) {
|
|
41
41
|
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
-
const removeDeletedSite = () => __awaiter(this, void 0, void 0, function* () {
|
|
43
|
-
try {
|
|
44
|
-
this.spoAdminUrl = yield spo_1.spo.getSpoAdminUrl(logger, this.debug);
|
|
45
|
-
const res = yield spo_1.spo.ensureFormDigest(this.spoAdminUrl, logger, this.context, this.debug);
|
|
46
|
-
if (this.verbose) {
|
|
47
|
-
logger.logToStderr(`Removing deleted site collection ${args.options.siteUrl}...`);
|
|
48
|
-
}
|
|
49
|
-
const requestOptions = {
|
|
50
|
-
url: `${this.spoAdminUrl}/_vti_bin/client.svc/ProcessQuery`,
|
|
51
|
-
headers: {
|
|
52
|
-
'X-RequestDigest': res.FormDigestValue
|
|
53
|
-
},
|
|
54
|
-
data: `<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="15.0.0.0" LibraryVersion="16.0.0.0" ApplicationName="${config_1.default.applicationName}" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009"><Actions><ObjectPath Id="16" ObjectPathId="15" /><Query Id="17" ObjectPathId="15"><Query SelectAllProperties="false"><Properties><Property Name="PollingInterval" ScalarProperty="true" /><Property Name="IsComplete" ScalarProperty="true" /></Properties></Query></Query></Actions><ObjectPaths><Method Id="15" ParentId="1" Name="RemoveDeletedSite"><Parameters><Parameter Type="String">${formatting_1.formatting.escapeXml(args.options.siteUrl)}</Parameter></Parameters></Method><Constructor Id="1" TypeId="{268004ae-ef6b-4e9b-8425-127220d84719}" /></ObjectPaths></Request>`
|
|
55
|
-
};
|
|
56
|
-
const processQuery = yield request_1.default.post(requestOptions);
|
|
57
|
-
const json = JSON.parse(processQuery);
|
|
58
|
-
const response = json[0];
|
|
59
|
-
if (response.ErrorInfo) {
|
|
60
|
-
throw response.ErrorInfo.ErrorMessage;
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
const operation = json[json.length - 1];
|
|
64
|
-
const isComplete = operation.IsComplete;
|
|
65
|
-
if (!args.options.wait || isComplete) {
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
yield new Promise((resolve, reject) => {
|
|
69
|
-
setTimeout(() => {
|
|
70
|
-
spo_1.spo.waitUntilFinished({
|
|
71
|
-
operationId: JSON.stringify(operation._ObjectIdentity_),
|
|
72
|
-
siteUrl: this.spoAdminUrl,
|
|
73
|
-
resolve,
|
|
74
|
-
reject,
|
|
75
|
-
logger,
|
|
76
|
-
currentContext: this.context,
|
|
77
|
-
debug: this.debug,
|
|
78
|
-
verbose: this.verbose
|
|
79
|
-
});
|
|
80
|
-
}, operation.PollingInterval);
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
catch (err) {
|
|
85
|
-
this.handleRejectedODataJsonPromise(err);
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
42
|
if (args.options.confirm) {
|
|
89
|
-
yield removeDeletedSite();
|
|
43
|
+
yield this.removeDeletedSite(logger, args);
|
|
90
44
|
}
|
|
91
45
|
else {
|
|
92
46
|
const result = yield Cli_1.Cli.prompt({
|
|
@@ -96,11 +50,57 @@ class SpoTenantRecycleBinItemRemoveCommand extends SpoCommand_1.default {
|
|
|
96
50
|
message: `Are you sure you want to remove the deleted site collection ${args.options.siteUrl} from tenant recycle bin?`
|
|
97
51
|
});
|
|
98
52
|
if (result.continue) {
|
|
99
|
-
yield removeDeletedSite();
|
|
53
|
+
yield this.removeDeletedSite(logger, args);
|
|
100
54
|
}
|
|
101
55
|
}
|
|
102
56
|
});
|
|
103
57
|
}
|
|
58
|
+
removeDeletedSite(logger, args) {
|
|
59
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
try {
|
|
61
|
+
const spoAdminUrl = yield spo_1.spo.getSpoAdminUrl(logger, this.debug);
|
|
62
|
+
const res = yield spo_1.spo.ensureFormDigest(spoAdminUrl, logger, this.context, this.debug);
|
|
63
|
+
if (this.verbose) {
|
|
64
|
+
logger.logToStderr(`Removing deleted site collection ${args.options.siteUrl}...`);
|
|
65
|
+
}
|
|
66
|
+
const requestOptions = {
|
|
67
|
+
url: `${spoAdminUrl}/_vti_bin/client.svc/ProcessQuery`,
|
|
68
|
+
headers: {
|
|
69
|
+
'X-RequestDigest': res.FormDigestValue
|
|
70
|
+
},
|
|
71
|
+
data: `<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="15.0.0.0" LibraryVersion="16.0.0.0" ApplicationName="${config_1.default.applicationName}" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009"><Actions><ObjectPath Id="16" ObjectPathId="15" /><Query Id="17" ObjectPathId="15"><Query SelectAllProperties="false"><Properties><Property Name="PollingInterval" ScalarProperty="true" /><Property Name="IsComplete" ScalarProperty="true" /></Properties></Query></Query></Actions><ObjectPaths><Method Id="15" ParentId="1" Name="RemoveDeletedSite"><Parameters><Parameter Type="String">${formatting_1.formatting.escapeXml(args.options.siteUrl)}</Parameter></Parameters></Method><Constructor Id="1" TypeId="{268004ae-ef6b-4e9b-8425-127220d84719}" /></ObjectPaths></Request>`
|
|
72
|
+
};
|
|
73
|
+
const processQuery = yield request_1.default.post(requestOptions);
|
|
74
|
+
const json = JSON.parse(processQuery);
|
|
75
|
+
const response = json[0];
|
|
76
|
+
if (response.ErrorInfo) {
|
|
77
|
+
throw response.ErrorInfo.ErrorMessage;
|
|
78
|
+
}
|
|
79
|
+
const operation = json[json.length - 1];
|
|
80
|
+
const isComplete = operation.IsComplete;
|
|
81
|
+
if (!args.options.wait || isComplete) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
yield new Promise((resolve, reject) => {
|
|
85
|
+
setTimeout(() => {
|
|
86
|
+
spo_1.spo.waitUntilFinished({
|
|
87
|
+
operationId: JSON.stringify(operation._ObjectIdentity_),
|
|
88
|
+
siteUrl: spoAdminUrl,
|
|
89
|
+
resolve,
|
|
90
|
+
reject,
|
|
91
|
+
logger,
|
|
92
|
+
currentContext: this.context,
|
|
93
|
+
debug: this.debug,
|
|
94
|
+
verbose: this.verbose
|
|
95
|
+
});
|
|
96
|
+
}, operation.PollingInterval);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
this.handleRejectedODataJsonPromise(err);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
104
|
}
|
|
105
105
|
_SpoTenantRecycleBinItemRemoveCommand_instances = new WeakSet(), _SpoTenantRecycleBinItemRemoveCommand_initTelemetry = function _SpoTenantRecycleBinItemRemoveCommand_initTelemetry() {
|
|
106
106
|
this.telemetry.push((args) => {
|
|
@@ -79,7 +79,7 @@ class TeamsChatGetCommand extends GraphCommand_1.default {
|
|
|
79
79
|
const currentUserEmail = accessToken_1.accessToken.getUserNameFromAccessToken(Auth_1.default.service.accessTokens[this.resource].accessToken).toLowerCase();
|
|
80
80
|
const existingChats = yield chatUtil_1.chatUtil.findExistingChatsByParticipants([currentUserEmail, ...participants]);
|
|
81
81
|
if (!existingChats || existingChats.length === 0) {
|
|
82
|
-
throw
|
|
82
|
+
throw 'No chat conversation was found with these participants.';
|
|
83
83
|
}
|
|
84
84
|
if (existingChats.length === 1) {
|
|
85
85
|
return existingChats[0].id;
|
|
@@ -87,14 +87,14 @@ class TeamsChatGetCommand extends GraphCommand_1.default {
|
|
|
87
87
|
const disambiguationText = existingChats.map(c => {
|
|
88
88
|
return `- ${c.id}${c.topic && ' - '}${c.topic} - ${c.createdDateTime && new Date(c.createdDateTime).toLocaleString()}`;
|
|
89
89
|
}).join(os.EOL);
|
|
90
|
-
throw
|
|
90
|
+
throw `Multiple chat conversations with these participants found. Please disambiguate:${os.EOL}${disambiguationText}`;
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
93
|
getChatIdByName(name) {
|
|
94
94
|
return __awaiter(this, void 0, void 0, function* () {
|
|
95
95
|
const existingChats = yield chatUtil_1.chatUtil.findExistingGroupChatsByName(name);
|
|
96
96
|
if (!existingChats || existingChats.length === 0) {
|
|
97
|
-
throw
|
|
97
|
+
throw 'No chat conversation was found with this name.';
|
|
98
98
|
}
|
|
99
99
|
if (existingChats.length === 1) {
|
|
100
100
|
return existingChats[0].id;
|
|
@@ -103,7 +103,7 @@ class TeamsChatGetCommand extends GraphCommand_1.default {
|
|
|
103
103
|
const memberstring = c.members.map(m => m.email).join(', ');
|
|
104
104
|
return `- ${c.id} - ${c.createdDateTime && new Date(c.createdDateTime).toLocaleString()} - ${memberstring}`;
|
|
105
105
|
}).join(os.EOL);
|
|
106
|
-
throw
|
|
106
|
+
throw `Multiple chat conversations with this name found. Please disambiguate:${os.EOL}${disambiguationText}`;
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
109
|
}
|
|
@@ -74,14 +74,14 @@ class TeamsChatMessageSendCommand extends GraphCommand_1.default {
|
|
|
74
74
|
const disambiguationText = existingChats.map(c => {
|
|
75
75
|
return `- ${c.id}${c.topic && ' - '}${c.topic} - ${c.createdDateTime && new Date(c.createdDateTime).toLocaleString()}`;
|
|
76
76
|
}).join(os.EOL);
|
|
77
|
-
throw
|
|
77
|
+
throw `Multiple chat conversations with this name found. Please disambiguate:${os.EOL}${disambiguationText}`;
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
getChatIdByName(chatName) {
|
|
81
81
|
return __awaiter(this, void 0, void 0, function* () {
|
|
82
82
|
const existingChats = yield chatUtil_1.chatUtil.findExistingGroupChatsByName(chatName);
|
|
83
83
|
if (!existingChats || existingChats.length === 0) {
|
|
84
|
-
throw
|
|
84
|
+
throw 'No chat conversation was found with this name.';
|
|
85
85
|
}
|
|
86
86
|
if (existingChats.length === 1) {
|
|
87
87
|
return existingChats[0].id;
|
|
@@ -90,7 +90,7 @@ class TeamsChatMessageSendCommand extends GraphCommand_1.default {
|
|
|
90
90
|
const memberstring = c.members.map(m => m.email).join(', ');
|
|
91
91
|
return `- ${c.id} - ${c.createdDateTime && new Date(c.createdDateTime).toLocaleString()} - ${memberstring}`;
|
|
92
92
|
}).join(os.EOL);
|
|
93
|
-
throw
|
|
93
|
+
throw `Multiple chat conversations with this name found. Please disambiguate:${os.EOL}${disambiguationText}`;
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
96
|
// This Microsoft Graph API request throws an intermittent 404 exception, saying that it cannot find the principal.
|
|
@@ -146,7 +146,7 @@ class TeamsChatMessageSendCommand extends GraphCommand_1.default {
|
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
};
|
|
149
|
-
|
|
149
|
+
return request_1.default.post(requestOptions);
|
|
150
150
|
});
|
|
151
151
|
}
|
|
152
152
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Setting name|Definition|Default value
|
|
2
|
+
------------|----------|-------------
|
|
3
|
+
`autoOpenLinksInBrowser`|Automatically open the browser for all commands which return a url and expect the user to copy paste this to the browser. For example when logging in, using `m365 login` in device code mode.|`false`
|
|
4
|
+
`copyDeviceCodeToClipboard`|Automatically copy the device code to the clipboard when running `m365 login` command in device code mode|`false`
|
|
5
|
+
`csvEscape`|Single character used for escaping; only apply to characters matching the quote and the escape options|`"`
|
|
6
|
+
`csvHeader`|Display the column names on the first line|`true`
|
|
7
|
+
`csvQuote`|The quote characters surrounding a field. An empty quote value will preserve the original field, whether it contains quotation marks or not.|` `
|
|
8
|
+
`csvQuoted`|Quote all the non-empty fields even if not required|`false`
|
|
9
|
+
`csvQuotedEmpty`|Quote empty strings and overrides quoted_string on empty strings when defined|`false`
|
|
10
|
+
`disableTelemetry`|Disables sending of telemetry data|`false`
|
|
11
|
+
`errorOutput`|Defines if errors should be written to `stdout` or `stderr`|`stderr`
|
|
12
|
+
`helpMode`|Defines what part of command's help to display. Allowed values are `options`, `examples`, `remarks`, `response`, `full`|`full`
|
|
13
|
+
`output`|Defines the default output when issuing a command|`json`
|
|
14
|
+
`printErrorsAsPlainText`|When output mode is set to `json`, print error messages as plain-text rather than JSON|`true`
|
|
15
|
+
`prompt`|Prompts for missing values in required options and enables interactive selection when multiple values are available for a command that requires a specific value to be retrieved.|`false`
|
|
16
|
+
`showHelpOnFailure`|Automatically display help when executing a command failed|`true`
|
|
17
|
+
`showSpinner`|Display spinner when executing commands|`true`
|
|
@@ -25,6 +25,9 @@ m365 spo tenant applicationcustomizer set [options]
|
|
|
25
25
|
`--newTitle [newTitle]`
|
|
26
26
|
: The updated title of the Application Customizer.
|
|
27
27
|
|
|
28
|
+
`--newClientSideComponentId [newClientSideComponentId]`
|
|
29
|
+
: The new Client Side Component Id (GUID) of the Application Customizer.
|
|
30
|
+
|
|
28
31
|
`-p, --clientSideComponentProperties [clientSideComponentProperties]`
|
|
29
32
|
: The Client Side Component properties of the Application Customizer.
|
|
30
33
|
|
|
@@ -55,7 +58,13 @@ When using the `--clientSideComponentProperties` option it's possible to enter a
|
|
|
55
58
|
Updates the title of an Application Customizer that is deployed as a tenant-wide extension by its id
|
|
56
59
|
|
|
57
60
|
```sh
|
|
58
|
-
m365 spo tenant applicationcustomizer set --id 3 --newTitle
|
|
61
|
+
m365 spo tenant applicationcustomizer set --id 3 --newTitle "Some customizer"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Updates the Client Side Component Id of an Application Customizer that is deployed as a tenant-wide extension by its id
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
m365 spo tenant applicationcustomizer set --id 3 --newClientSideComponentId "b44a5182-9877-4029-baec-0181c70dacbc"
|
|
59
68
|
```
|
|
60
69
|
|
|
61
70
|
Updates the properties of an Application Customizer that is deployed as a tenant-wide extension by its id
|
|
@@ -67,13 +76,13 @@ m365 spo tenant applicationcustomizer set --id 3 --clientSideComponentProperties
|
|
|
67
76
|
Updates the title of an Application Customizer that is deployed as a tenant-wide extension by its title
|
|
68
77
|
|
|
69
78
|
```sh
|
|
70
|
-
m365 spo tenant applicationcustomizer set --title "Some customizer" --newTitle
|
|
79
|
+
m365 spo tenant applicationcustomizer set --title "Some customizer" --newTitle "Updated customizer"
|
|
71
80
|
```
|
|
72
81
|
|
|
73
82
|
Updates the title of an Application Customizer that is deployed as a tenant-wide extension by its clientSideComponentId
|
|
74
83
|
|
|
75
84
|
```sh
|
|
76
|
-
m365 spo tenant applicationcustomizer set --clientSideComponentId "7f8fd1f2-9d26-4a4a-a607-bf4622d7ec11" --newTitle
|
|
85
|
+
m365 spo tenant applicationcustomizer set --clientSideComponentId "7f8fd1f2-9d26-4a4a-a607-bf4622d7ec11" --newTitle "Some customizer"
|
|
77
86
|
```
|
|
78
87
|
|
|
79
88
|
## Response
|
package/package.json
CHANGED