@pnp/cli-microsoft365 10.0.0-beta.1a88ed2 → 10.0.0-beta.303b62c

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.
@@ -29,9 +29,6 @@ class EntraM365GroupUserRemoveCommand extends GraphCommand {
29
29
  __classPrivateFieldGet(this, _EntraM365GroupUserRemoveCommand_instances, "m", _EntraM365GroupUserRemoveCommand_initTypes).call(this);
30
30
  }
31
31
  async commandAction(logger, args) {
32
- if (args.options.userName) {
33
- await this.warn(logger, `Option 'userName' is deprecated. Please use 'ids' or 'userNames' instead.`);
34
- }
35
32
  const removeUser = async () => {
36
33
  try {
37
34
  const groupId = await this.getGroupId(logger, args.options.groupId, args.options.teamId, args.options.groupName, args.options.teamName);
@@ -39,7 +36,7 @@ class EntraM365GroupUserRemoveCommand extends GraphCommand {
39
36
  if (!isUnifiedGroup) {
40
37
  throw Error(`Specified group with id '${groupId}' is not a Microsoft 365 group.`);
41
38
  }
42
- const userNames = args.options.userNames || args.options.userName;
39
+ const userNames = args.options.userNames;
43
40
  const userIds = await this.getUserIds(logger, args.options.ids, userNames);
44
41
  await this.removeUsersFromGroup(groupId, userIds, 'owners');
45
42
  await this.removeUsersFromGroup(groupId, userIds, 'members');
@@ -52,7 +49,7 @@ class EntraM365GroupUserRemoveCommand extends GraphCommand {
52
49
  await removeUser();
53
50
  }
54
51
  else {
55
- const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove ${args.options.userName || args.options.userNames || args.options.ids} from ${args.options.groupId || args.options.groupName || args.options.teamId || args.options.teamName}?` });
52
+ const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove ${args.options.userNames || args.options.ids} from ${args.options.groupId || args.options.groupName || args.options.teamId || args.options.teamName}?` });
56
53
  if (result) {
57
54
  await removeUser();
58
55
  }
@@ -105,7 +102,6 @@ _EntraM365GroupUserRemoveCommand_instances = new WeakSet(), _EntraM365GroupUserR
105
102
  groupId: typeof args.options.groupId !== 'undefined',
106
103
  teamName: typeof args.options.teamName !== 'undefined',
107
104
  groupName: typeof args.options.groupName !== 'undefined',
108
- userName: typeof args.options.userName !== 'undefined',
109
105
  ids: typeof args.options.ids !== 'undefined',
110
106
  userNames: typeof args.options.userNames !== 'undefined'
111
107
  });
@@ -119,8 +115,6 @@ _EntraM365GroupUserRemoveCommand_instances = new WeakSet(), _EntraM365GroupUserR
119
115
  option: '--teamId [teamId]'
120
116
  }, {
121
117
  option: '--teamName [teamName]'
122
- }, {
123
- option: '-n, --userName [userName]'
124
118
  }, {
125
119
  option: '--ids [ids]'
126
120
  }, {
@@ -148,19 +142,16 @@ _EntraM365GroupUserRemoveCommand_instances = new WeakSet(), _EntraM365GroupUserR
148
142
  return `The following user principal names are invalid for the option 'userNames': ${isValidUPNArrayResult}.`;
149
143
  }
150
144
  }
151
- if (args.options.userName && !validation.isValidUserPrincipalName(args.options.userName)) {
152
- return `The specified userName '${args.options.userName}' is not a valid user principal name.`;
153
- }
154
145
  return true;
155
146
  });
156
147
  }, _EntraM365GroupUserRemoveCommand_initOptionSets = function _EntraM365GroupUserRemoveCommand_initOptionSets() {
157
148
  this.optionSets.push({
158
149
  options: ['groupId', 'teamId', 'groupName', 'teamName']
159
150
  }, {
160
- options: ['userName', 'ids', 'userNames']
151
+ options: ['ids', 'userNames']
161
152
  });
162
153
  }, _EntraM365GroupUserRemoveCommand_initTypes = function _EntraM365GroupUserRemoveCommand_initTypes() {
163
- this.types.string.push('groupId', 'groupName', 'teamId', 'teamName', 'userName', 'ids', 'userNames');
154
+ this.types.string.push('groupId', 'groupName', 'teamId', 'teamName', 'ids', 'userNames');
164
155
  this.types.boolean.push('force');
165
156
  };
166
157
  export default new EntraM365GroupUserRemoveCommand();
@@ -5,6 +5,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
5
5
  };
6
6
  var _SpoFolderCopyCommand_instances, _SpoFolderCopyCommand_initTelemetry, _SpoFolderCopyCommand_initOptions, _SpoFolderCopyCommand_initValidators, _SpoFolderCopyCommand_initOptionSets, _SpoFolderCopyCommand_initTypes;
7
7
  import request from '../../../../request.js';
8
+ import { CreateFolderCopyJobsNameConflictBehavior, spo } from '../../../../utils/spo.js';
8
9
  import { urlUtil } from '../../../../utils/urlUtil.js';
9
10
  import { validation } from '../../../../utils/validation.js';
10
11
  import SpoCommand from '../../../base/SpoCommand.js';
@@ -31,45 +32,54 @@ class SpoFolderCopyCommand extends SpoCommand {
31
32
  }
32
33
  async commandAction(logger, args) {
33
34
  try {
34
- const sourcePath = await this.getSourcePath(logger, args.options);
35
+ const sourceServerRelativePath = await this.getSourcePath(logger, args.options);
36
+ const sourcePath = this.getAbsoluteUrl(args.options.webUrl, sourceServerRelativePath);
37
+ const destinationPath = this.getAbsoluteUrl(args.options.webUrl, args.options.targetUrl);
35
38
  if (this.verbose) {
36
- await logger.logToStderr(`Copying folder ${sourcePath} to ${args.options.targetUrl}...`);
39
+ await logger.logToStderr(`Copying folder '${sourcePath}' to '${destinationPath}'...`);
37
40
  }
38
- const absoluteSourcePath = this.getAbsoluteUrl(args.options.webUrl, sourcePath);
39
- let absoluteTargetPath = this.getAbsoluteUrl(args.options.webUrl, args.options.targetUrl) + '/';
40
- if (args.options.newName) {
41
- absoluteTargetPath += args.options.newName;
41
+ const copyJobResponse = await spo.createFolderCopyJob(args.options.webUrl, sourcePath, destinationPath, {
42
+ nameConflictBehavior: this.getNameConflictBehaviorValue(args.options.nameConflictBehavior),
43
+ newName: args.options.newName,
44
+ operation: 'copy'
45
+ });
46
+ if (args.options.skipWait) {
47
+ return;
42
48
  }
43
- else {
44
- // Keep the original folder name
45
- absoluteTargetPath += sourcePath.substring(sourcePath.lastIndexOf('/') + 1);
49
+ if (this.verbose) {
50
+ await logger.logToStderr('Waiting for the copy job to complete...');
51
+ }
52
+ const copyJobResult = await spo.getCopyJobResult(args.options.webUrl, copyJobResponse);
53
+ if (this.verbose) {
54
+ await logger.logToStderr('Getting information about the destination folder...');
46
55
  }
56
+ // Get destination folder data
57
+ const siteRelativeDestinationFolder = '/' + copyJobResult.TargetObjectSiteRelativeUrl.substring(0, copyJobResult.TargetObjectSiteRelativeUrl.lastIndexOf('/'));
58
+ const absoluteWebUrl = destinationPath.substring(0, destinationPath.toLowerCase().lastIndexOf(siteRelativeDestinationFolder.toLowerCase()));
47
59
  const requestOptions = {
48
- url: `${args.options.webUrl}/_api/SP.MoveCopyUtil.CopyFolderByPath`,
60
+ url: `${absoluteWebUrl}/_api/Web/GetFolderById('${copyJobResult.TargetObjectUniqueId}')`,
49
61
  headers: {
50
62
  accept: 'application/json;odata=nometadata'
51
63
  },
52
- responseType: 'json',
53
- data: {
54
- srcPath: {
55
- DecodedUrl: absoluteSourcePath
56
- },
57
- destPath: {
58
- DecodedUrl: absoluteTargetPath
59
- },
60
- options: {
61
- KeepBoth: args.options.nameConflictBehavior === 'rename',
62
- ShouldBypassSharedLocks: !!args.options.bypassSharedLock,
63
- ResetAuthorAndCreatedOnCopy: !!args.options.resetAuthorAndCreated
64
- }
65
- }
64
+ responseType: 'json'
66
65
  };
67
- await request.post(requestOptions);
66
+ const destinationFile = await request.get(requestOptions);
67
+ await logger.log(destinationFile);
68
68
  }
69
69
  catch (err) {
70
70
  this.handleRejectedODataJsonPromise(err);
71
71
  }
72
72
  }
73
+ getNameConflictBehaviorValue(nameConflictBehavior) {
74
+ switch (nameConflictBehavior?.toLowerCase()) {
75
+ case 'fail':
76
+ return CreateFolderCopyJobsNameConflictBehavior.Fail;
77
+ case 'rename':
78
+ return CreateFolderCopyJobsNameConflictBehavior.Rename;
79
+ default:
80
+ return CreateFolderCopyJobsNameConflictBehavior.Fail;
81
+ }
82
+ }
73
83
  async getSourcePath(logger, options) {
74
84
  if (options.sourceUrl) {
75
85
  return urlUtil.getServerRelativePath(options.webUrl, options.sourceUrl);
@@ -78,17 +88,18 @@ class SpoFolderCopyCommand extends SpoCommand {
78
88
  await logger.logToStderr(`Retrieving server-relative path for folder with ID '${options.sourceId}'...`);
79
89
  }
80
90
  const requestOptions = {
81
- url: `${options.webUrl}/_api/Web/GetFolderById('${options.sourceId}')?$select=ServerRelativePath`,
91
+ url: `${options.webUrl}/_api/Web/GetFolderById('${options.sourceId}')/ServerRelativePath`,
82
92
  headers: {
83
93
  accept: 'application/json;odata=nometadata'
84
94
  },
85
95
  responseType: 'json'
86
96
  };
87
- const file = await request.get(requestOptions);
88
- return file.ServerRelativePath.DecodedUrl;
97
+ const path = await request.get(requestOptions);
98
+ return path.DecodedUrl;
89
99
  }
90
100
  getAbsoluteUrl(webUrl, url) {
91
- return url.startsWith('https://') ? url : urlUtil.getAbsoluteUrl(webUrl, url);
101
+ const result = url.startsWith('https://') ? url : urlUtil.getAbsoluteUrl(webUrl, url);
102
+ return urlUtil.removeTrailingSlashes(result);
92
103
  }
93
104
  }
94
105
  _SpoFolderCopyCommand_instances = new WeakSet(), _SpoFolderCopyCommand_initTelemetry = function _SpoFolderCopyCommand_initTelemetry() {
@@ -98,8 +109,7 @@ _SpoFolderCopyCommand_instances = new WeakSet(), _SpoFolderCopyCommand_initTelem
98
109
  sourceId: typeof args.options.sourceId !== 'undefined',
99
110
  newName: typeof args.options.newName !== 'undefined',
100
111
  nameConflictBehavior: typeof args.options.nameConflictBehavior !== 'undefined',
101
- resetAuthorAndCreated: !!args.options.resetAuthorAndCreated,
102
- bypassSharedLock: !!args.options.bypassSharedLock
112
+ skipWait: !!args.options.skipWait
103
113
  });
104
114
  });
105
115
  }, _SpoFolderCopyCommand_initOptions = function _SpoFolderCopyCommand_initOptions() {
@@ -117,9 +127,7 @@ _SpoFolderCopyCommand_instances = new WeakSet(), _SpoFolderCopyCommand_initTelem
117
127
  option: '--nameConflictBehavior [nameConflictBehavior]',
118
128
  autocomplete: this.nameConflictBehaviorOptions
119
129
  }, {
120
- option: '--resetAuthorAndCreated'
121
- }, {
122
- option: '--bypassSharedLock'
130
+ option: '--skipWait'
123
131
  });
124
132
  }, _SpoFolderCopyCommand_initValidators = function _SpoFolderCopyCommand_initValidators() {
125
133
  this.validators.push(async (args) => {
@@ -139,7 +147,7 @@ _SpoFolderCopyCommand_instances = new WeakSet(), _SpoFolderCopyCommand_initTelem
139
147
  this.optionSets.push({ options: ['sourceUrl', 'sourceId'] });
140
148
  }, _SpoFolderCopyCommand_initTypes = function _SpoFolderCopyCommand_initTypes() {
141
149
  this.types.string.push('webUrl', 'sourceUrl', 'sourceId', 'targetUrl', 'newName', 'nameConflictBehavior');
142
- this.types.boolean.push('resetAuthorAndCreated', 'bypassSharedLock');
150
+ this.types.boolean.push('skipWait');
143
151
  };
144
152
  export default new SpoFolderCopyCommand();
145
153
  //# sourceMappingURL=folder-copy.js.map
@@ -0,0 +1,54 @@
1
+ import { z } from 'zod';
2
+ import { zod } from '../../../../utils/zod.js';
3
+ import { globalOptionsZod } from '../../../../Command.js';
4
+ import request from '../../../../request.js';
5
+ import { formatting } from '../../../../utils/formatting.js';
6
+ import { urlUtil } from '../../../../utils/urlUtil.js';
7
+ import { validation } from '../../../../utils/validation.js';
8
+ import SpoCommand from '../../../base/SpoCommand.js';
9
+ import commands from '../../commands.js';
10
+ const options = globalOptionsZod
11
+ .extend({
12
+ webUrl: zod.alias('u', z.string()
13
+ .refine(url => validation.isValidSharePointUrl(url) === true, url => ({
14
+ message: `'${url}' is not a valid SharePoint Online site URL.`
15
+ }))),
16
+ name: zod.alias('n', z.string())
17
+ })
18
+ .strict();
19
+ class SpoPagePublishCommand extends SpoCommand {
20
+ get name() {
21
+ return commands.PAGE_PUBLISH;
22
+ }
23
+ get description() {
24
+ return 'Publishes a modern page';
25
+ }
26
+ get schema() {
27
+ return options;
28
+ }
29
+ async commandAction(logger, args) {
30
+ try {
31
+ // Remove leading slashes from the page name (page can be nested in folders)
32
+ let pageName = urlUtil.removeLeadingSlashes(args.options.name);
33
+ if (!pageName.toLowerCase().endsWith('.aspx')) {
34
+ pageName += '.aspx';
35
+ }
36
+ if (this.verbose) {
37
+ await logger.logToStderr(`Publishing page ${pageName}...`);
38
+ }
39
+ const filePath = `${urlUtil.getServerRelativeSiteUrl(args.options.webUrl)}/SitePages/${pageName}`;
40
+ const requestOptions = {
41
+ url: `${args.options.webUrl}/_api/web/GetFileByServerRelativePath(DecodedUrl='${formatting.encodeQueryParameter(filePath)}')/Publish()`,
42
+ headers: {
43
+ accept: 'application/json;odata=nometadata'
44
+ }
45
+ };
46
+ await request.post(requestOptions);
47
+ }
48
+ catch (err) {
49
+ this.handleRejectedODataJsonPromise(err);
50
+ }
51
+ }
52
+ }
53
+ export default new SpoPagePublishCommand();
54
+ //# sourceMappingURL=page-publish.js.map
@@ -16,7 +16,7 @@ class SpoUserProfileGetCommand extends SpoCommand {
16
16
  return commands.USERPROFILE_GET;
17
17
  }
18
18
  get description() {
19
- return 'Sets user profile property for a SharePoint user';
19
+ return 'Gets user profile property for a SharePoint user';
20
20
  }
21
21
  constructor() {
22
22
  super();
@@ -202,6 +202,7 @@ export default {
202
202
  PAGE_COPY: `${prefix} page copy`,
203
203
  PAGE_GET: `${prefix} page get`,
204
204
  PAGE_LIST: `${prefix} page list`,
205
+ PAGE_PUBLISH: `${prefix} page publish`,
205
206
  PAGE_REMOVE: `${prefix} page remove`,
206
207
  PAGE_SET: `${prefix} page set`,
207
208
  PAGE_CLIENTSIDEWEBPART_ADD: `${prefix} page clientsidewebpart add`,
@@ -25,14 +25,11 @@ m365 entra m365group user remove [options]
25
25
  `--teamName [teamName]`
26
26
  : The display name of the Microsoft Teams team. Specify only one of the following: `groupId`, `groupName`, `teamId`, or `teamName`.
27
27
 
28
- `-n, --userName [userName]`
29
- : (deprecated) User's UPN (user principal name), eg. `johndoe@example.com`.. Specify only one of the following: `userName`, `ids` or `userNames`.
30
-
31
28
  `--ids [ids]`
32
- : Microsoft Entra IDs of users. You can also pass a comma-separated list of IDs. Specify only one of the following `userName`, `ids` or `userNames`.
29
+ : Microsoft Entra IDs of users. You can also pass a comma-separated list of IDs. Specify either `ids` or `userNames` but not both.
33
30
 
34
31
  `--userNames [userNames]`
35
- : The user principal names of users. You can also pass a comma-separated list of UPNs. Specify only one of the following `userName`, `ids` or `userNames`.
32
+ : The user principal names of users. You can also pass a comma-separated list of UPNs. Specify either `ids` or `userNames` but not both.
36
33
 
37
34
  `-f, --force`
38
35
  : Don't prompt for confirming removing the user from the specified Microsoft 365 Group or Microsoft Teams team.
@@ -1,4 +1,6 @@
1
1
  import Global from '/docs/cmd/_global.mdx';
2
+ import Tabs from '@theme/Tabs';
3
+ import TabItem from '@theme/TabItem';
2
4
 
3
5
  # spo folder copy
4
6
 
@@ -31,19 +33,14 @@ m365 spo folder copy [options]
31
33
  `--nameConflictBehavior [nameConflictBehavior]`
32
34
  : Behavior when a file or folder with the same name is already present at the destination. Allowed values: `fail`, `rename`. Defaults to `fail`.
33
35
 
34
- `--resetAuthorAndCreated`
35
- : Use this option to clear the author and created date. When not specified, the values from the source folder are used.
36
-
37
- `--bypassSharedLock`
38
- : This indicates whether a folder with a shared lock can still be moved. Use this option to copy a folder that is locked.
36
+ `--skipWait`
37
+ : Don't wait for the copy operation to complete.
39
38
  ```
40
39
 
41
40
  <Global />
42
41
 
43
42
  ## Remarks
44
43
 
45
- When you copy a folder with documents that have version history, only the latest document version is copied.
46
-
47
44
  When you specify a value for `nameConflictBehavior`, consider the following:
48
45
 
49
46
  - `fail` will throw an error when the destination folder already exists.
@@ -69,16 +66,90 @@ Copy a folder to another location and use new name on conflict
69
66
  m365 spo folder copy --webUrl https://contoso.sharepoint.com/sites/project-x --sourceUrl "/sites/project-x/Shared Documents/Reports" --targetUrl "/sites/project-y/Shared Documents/Project files" --nameConflictBehavior rename
70
67
  ```
71
68
 
72
- Copy a folder referenced by its ID to another document library and reset author and created date
69
+ Copy a folder referenced by its ID to another document library and don't wait for the copy operation to finish
73
70
 
74
71
  ```sh
75
- m365 spo folder copy --webUrl https://contoso.sharepoint.com/sites/project-x --sourceId b8cc341b-9c11-4f2d-aa2b-0ce9c18bcba2 --targetUrl "/sites/project-x/Project files" --retainEditorAndModified
72
+ m365 spo folder copy --webUrl https://contoso.sharepoint.com/sites/project-x --sourceId b8cc341b-9c11-4f2d-aa2b-0ce9c18bcba2 --targetUrl "/sites/project-x/Project files" --skipWait
76
73
  ```
77
74
 
78
75
  ## Response
79
76
 
80
- The command won't return a response on success.
77
+ ### Standard Response
78
+
79
+ <Tabs>
80
+ <TabItem value="JSON">
81
+
82
+ ```json
83
+ {
84
+ "Exists": true,
85
+ "ExistsAllowThrowForPolicyFailures": true,
86
+ "ExistsWithException": true,
87
+ "IsWOPIEnabled": false,
88
+ "ItemCount": 6,
89
+ "Name": "Company",
90
+ "ProgID": null,
91
+ "ServerRelativeUrl": "/sites/Sales/Icons/Company",
92
+ "TimeCreated": "2024-09-26T22:08:53Z",
93
+ "TimeLastModified": "2024-09-26T22:09:31Z",
94
+ "UniqueId": "d3a37396-ca16-467b-b968-48f5fc41f2b6",
95
+ "WelcomePage": ""
96
+ }
97
+ ```
98
+
99
+ </TabItem>
100
+ <TabItem value="Text">
101
+
102
+ ```text
103
+ Exists : true
104
+ ExistsAllowThrowForPolicyFailures: true
105
+ ExistsWithException : true
106
+ IsWOPIEnabled : false
107
+ ItemCount : 6
108
+ Name : Company
109
+ ProgID : null
110
+ ServerRelativeUrl : /sites/Sales/Icons/Company
111
+ TimeCreated : 2024-09-26T22:08:53Z
112
+ TimeLastModified : 2024-09-26T22:09:31Z
113
+ UniqueId : d3a37396-ca16-467b-b968-48f5fc41f2b6
114
+ WelcomePage :
115
+ ```
116
+
117
+ </TabItem>
118
+ <TabItem value="CSV">
119
+
120
+ ```csv
121
+ Exists,ExistsAllowThrowForPolicyFailures,ExistsWithException,IsWOPIEnabled,ItemCount,Name,ProgID,ServerRelativeUrl,TimeCreated,TimeLastModified,UniqueId,WelcomePage
122
+ 1,1,1,0,6,Company,,/sites/Sales/Icons/Company,2024-09-26T22:08:53Z,2024-09-26T22:09:31Z,d3a37396-ca16-467b-b968-48f5fc41f2b6,
123
+ ```
124
+
125
+ </TabItem>
126
+ <TabItem value="Markdown">
127
+
128
+ ```md
129
+ # spo folder copy --webUrl "https://contoso.sharepoint.com/sites/Marketing" --sourceUrl "/Logos/Contoso" --targetUrl "/sites/Sales/Logos"
130
+
131
+ Date: 18/10/2024
132
+
133
+ ## Company (d3a37396-ca16-467b-b968-48f5fc41f2b6)
134
+
135
+ Property | Value
136
+ ---------|-------
137
+ Exists | true
138
+ ExistsAllowThrowForPolicyFailures | true
139
+ ExistsWithException | true
140
+ IsWOPIEnabled | false
141
+ ItemCount | 6
142
+ Name | Company
143
+ ServerRelativeUrl | /sites/Sales/Icons/Company
144
+ TimeCreated | 2024-09-26T22:08:53Z
145
+ TimeLastModified | 2024-09-26T22:09:31Z
146
+ UniqueId | d3a37396-ca16-467b-b968-48f5fc41f2b6
147
+ WelcomePage |
148
+ ```
149
+
150
+ </TabItem>
151
+ </Tabs>
152
+
153
+ ### `skipWait` response
81
154
 
82
- ## More information
83
-
84
- - Copy items from a SharePoint document library: [https://support.office.com/en-us/article/move-or-copy-items-from-a-sharepoint-document-library-00e2f483-4df3-46be-a861-1f5f0c1a87bc](https://support.office.com/en-us/article/move-or-copy-items-from-a-sharepoint-document-library-00e2f483-4df3-46be-a861-1f5f0c1a87bc)
155
+ The command won't return a response on success.
@@ -0,0 +1,41 @@
1
+ import Global from '/docs/cmd/_global.mdx';
2
+
3
+ # spo page publish
4
+
5
+ Publishes a modern page
6
+
7
+ ## Usage
8
+
9
+ ```sh
10
+ m365 spo page publish [options]
11
+ ```
12
+
13
+ ## Options
14
+
15
+ ```md definition-list
16
+ `-u, --webUrl <webUrl>`
17
+ : URL of the site where the page is located.
18
+
19
+ `-n, --name <name>`
20
+ : Name of the page.
21
+ ```
22
+
23
+ <Global />
24
+
25
+ ## Examples
26
+
27
+ Publish a modern page
28
+
29
+ ```sh
30
+ m365 spo page publish --webUrl https://contoso.sharepoint.com/sites/Marketing --name "Style guide.aspx"
31
+ ```
32
+
33
+ Publish a modern page in a subfolder
34
+
35
+ ```sh
36
+ m365 spo page publish --webUrl https://contoso.sharepoint.com/sites/Marketing --name "/Styles/Guide.aspx"
37
+ ```
38
+
39
+ ## Response
40
+
41
+ The command won't return a response on success.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pnp/cli-microsoft365",
3
- "version": "10.0.0-beta.1a88ed2",
3
+ "version": "10.0.0-beta.303b62c",
4
4
  "description": "Manage Microsoft 365 and SharePoint Framework projects on any platform",
5
5
  "license": "MIT",
6
6
  "main": "./dist/api.js",