@pnp/cli-microsoft365 7.0.0-beta.99e75a7 → 7.0.0-beta.aa2d71e

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.
Files changed (139) hide show
  1. package/.eslintrc.cjs +0 -2
  2. package/dist/GlobalOptions.js +1 -7
  3. package/dist/cli/Cli.js +19 -2
  4. package/dist/m365/aad/commands/app/app-add.js +8 -8
  5. package/dist/m365/aad/commands/app/app-role-add.js +5 -5
  6. package/dist/m365/aad/commands/app/app-set.js +5 -5
  7. package/dist/m365/aad/commands/policy/policy-list.js +5 -5
  8. package/dist/m365/cli/commands/cli-issue.js +5 -5
  9. package/dist/m365/cli/commands/config/config-get.js +5 -5
  10. package/dist/m365/cli/commands/config/config-reset.js +5 -5
  11. package/dist/m365/cli/commands/config/config-set.js +5 -5
  12. package/dist/m365/commands/login.js +5 -5
  13. package/dist/m365/commands/request.js +1 -1
  14. package/dist/m365/flow/commands/owner/owner-ensure.js +5 -5
  15. package/dist/m365/pa/commands/app/app-owner-set.js +5 -5
  16. package/dist/m365/pa/commands/app/app-permission-ensure.js +5 -5
  17. package/dist/m365/pa/commands.js +1 -4
  18. package/dist/m365/planner/commands/task/task-add.js +17 -11
  19. package/dist/m365/planner/commands/task/task-get.js +35 -25
  20. package/dist/m365/planner/commands/task/task-list.js +26 -19
  21. package/dist/m365/planner/commands/task/task-remove.js +39 -34
  22. package/dist/m365/planner/commands/task/task-set.js +35 -23
  23. package/dist/m365/purview/commands/retentionlabel/retentionlabel-add.js +14 -14
  24. package/dist/m365/spfx/commands/package/package-generate.js +15 -15
  25. package/dist/m365/spfx/commands/project/DeployWorkflow.js +55 -0
  26. package/dist/m365/spfx/commands/project/project-doctor/{doctor-1.18.0-beta.1.js → doctor-1.18.0-beta.5.js} +1 -1
  27. package/dist/m365/spfx/commands/project/project-doctor.js +9 -9
  28. package/dist/m365/spfx/commands/project/project-github-workflow-add.js +157 -0
  29. package/dist/m365/spfx/commands/project/project-github-workflow-model.js +2 -0
  30. package/dist/m365/spfx/commands/project/project-upgrade/upgrade-1.15.2.js +1 -1
  31. package/dist/m365/spfx/commands/project/project-upgrade/{upgrade-1.18.0-beta.1.js → upgrade-1.18.0-beta.5.js} +26 -26
  32. package/dist/m365/spfx/commands/project/project-upgrade.js +14 -14
  33. package/dist/m365/spfx/commands/spfx-doctor.js +3 -3
  34. package/dist/m365/spfx/commands.js +1 -0
  35. package/dist/m365/spo/commands/app/SpoAppBaseCommand.js +27 -26
  36. package/dist/m365/spo/commands/app/app-add.js +9 -9
  37. package/dist/m365/spo/commands/applicationcustomizer/applicationcustomizer-add.js +5 -5
  38. package/dist/m365/spo/commands/applicationcustomizer/applicationcustomizer-list.js +5 -5
  39. package/dist/m365/spo/commands/commandset/commandset-add.js +11 -11
  40. package/dist/m365/spo/commands/commandset/commandset-get.js +8 -8
  41. package/dist/m365/spo/commands/commandset/commandset-list.js +5 -5
  42. package/dist/m365/spo/commands/commandset/commandset-remove.js +5 -5
  43. package/dist/m365/spo/commands/commandset/commandset-set.js +11 -11
  44. package/dist/m365/spo/commands/file/file-move.js +73 -97
  45. package/dist/m365/spo/commands/file/file-sharinglink-add.js +8 -8
  46. package/dist/m365/spo/commands/file/file-sharinglink-list.js +5 -5
  47. package/dist/m365/spo/commands/folder/folder-copy.js +89 -45
  48. package/dist/m365/spo/commands/folder/folder-move.js +89 -47
  49. package/dist/m365/spo/commands/list/list-add.js +4 -4
  50. package/dist/m365/spo/commands/list/list-set.js +4 -4
  51. package/dist/m365/spo/commands/orgassetslibrary/orgassetslibrary-add.js +34 -5
  52. package/dist/m365/spo/commands/page/clientsidepages.js +1 -81
  53. package/dist/m365/spo/commands/propertybag/propertybag-base.js +63 -59
  54. package/dist/m365/spo/commands/propertybag/propertybag-remove.js +28 -31
  55. package/dist/m365/spo/commands/serviceprincipal/serviceprincipal-set.js +30 -32
  56. package/dist/m365/spo/commands/site/FlowsPolicy.js +7 -0
  57. package/dist/m365/spo/commands/site/site-add.js +114 -161
  58. package/dist/m365/spo/commands/site/site-apppermission-add.js +15 -18
  59. package/dist/m365/spo/commands/site/site-apppermission-remove.js +34 -38
  60. package/dist/m365/spo/commands/site/site-apppermission-set.js +11 -14
  61. package/dist/m365/spo/commands/site/site-ensure.js +14 -67
  62. package/dist/m365/spo/commands/site/site-hubsite-disconnect.js +22 -22
  63. package/dist/m365/spo/commands/site/site-list.js +27 -43
  64. package/dist/m365/spo/commands/site/site-recyclebinitem-list.js +6 -6
  65. package/dist/m365/spo/commands/site/site-remove.js +166 -210
  66. package/dist/m365/spo/commands/site/site-set.js +177 -198
  67. package/dist/m365/spo/commands/tenant/tenant-commandset-add.js +8 -8
  68. package/dist/m365/spo/commands/tenant/tenant-commandset-set.js +8 -8
  69. package/dist/m365/spo/commands/tenant/tenant-settings-set.js +4 -4
  70. package/dist/m365/spo/commands/theme/theme-remove.js +24 -24
  71. package/dist/m365/spo/commands/theme/theme-set.js +0 -1
  72. package/dist/m365/spo/commands/user/user-remove.js +27 -27
  73. package/dist/m365/spo/commands/web/web-reindex.js +35 -42
  74. package/dist/m365/spo/commands/web/web-remove.js +21 -21
  75. package/dist/m365/spo/commands/web/web-roleassignment-add.js +16 -31
  76. package/dist/m365/spo/commands/web/web-roleassignment-remove.js +33 -44
  77. package/dist/m365/spo/commands/web/web-roleinheritance-break.js +18 -18
  78. package/dist/m365/spo/commands/web/web-roleinheritance-reset.js +19 -19
  79. package/dist/m365/spo/commands/web/web-set.js +5 -5
  80. package/dist/m365/teams/commands/app/app-list.js +5 -5
  81. package/dist/m365/teams/commands/chat/chat-member-add.js +5 -5
  82. package/dist/m365/teams/commands/funsettings/funsettings-set.js +4 -4
  83. package/dist/m365/teams/commands/guestsettings/guestsettings-set.js +4 -4
  84. package/dist/m365/teams/commands/membersettings/membersettings-set.js +4 -4
  85. package/dist/m365/teams/commands/messagingsettings/messagingsettings-set.js +5 -5
  86. package/dist/m365/teams/commands/team/team-set.js +3 -3
  87. package/dist/m365/todo/commands/task/task-add.js +6 -6
  88. package/dist/m365/yammer/commands/message/message-like-set.js +27 -28
  89. package/dist/m365/yammer/commands/message/message-list.js +67 -86
  90. package/dist/m365/yammer/commands/message/message-remove.js +18 -18
  91. package/dist/m365/yammer/commands/yammer-search.js +58 -74
  92. package/dist/utils/aadGroup.js +18 -0
  93. package/dist/utils/fsUtil.js +5 -0
  94. package/dist/utils/spo.js +594 -53
  95. package/dist/utils/validation.js +0 -3
  96. package/docs/docs/cmd/planner/task/task-add.mdx +22 -7
  97. package/docs/docs/cmd/planner/task/task-get.mdx +13 -4
  98. package/docs/docs/cmd/planner/task/task-list.mdx +22 -7
  99. package/docs/docs/cmd/planner/task/task-remove.mdx +25 -8
  100. package/docs/docs/cmd/planner/task/task-set.mdx +22 -7
  101. package/docs/docs/cmd/spfx/project/project-github-workflow-add.mdx +94 -0
  102. package/docs/docs/cmd/spo/file/file-move.mdx +36 -18
  103. package/docs/docs/cmd/spo/folder/folder-copy.mdx +39 -12
  104. package/docs/docs/cmd/spo/folder/folder-move.mdx +40 -13
  105. package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-add.mdx +14 -1
  106. package/docs/docs/cmd/spo/site/site-ensure.mdx +1 -1
  107. package/docs/docs/cmd/spo/site/site-list.mdx +3 -78
  108. package/npm-shrinkwrap.json +240 -1417
  109. package/package.json +6 -7
  110. package/dist/m365/pa/cds-project-mutator.js +0 -91
  111. package/dist/m365/pa/commands/pcf/pcf-init/assets/control/dataset-template/generated/ManifestTypes.d.ts +0 -11
  112. package/dist/m365/pa/commands/pcf/pcf-init/assets/control/dataset-template/template_ControlManifest.Input.xml +0 -31
  113. package/dist/m365/pa/commands/pcf/pcf-init/assets/control/dataset-template/template_index.ts +0 -51
  114. package/dist/m365/pa/commands/pcf/pcf-init/assets/control/field-template/generated/ManifestTypes.d.ts +0 -12
  115. package/dist/m365/pa/commands/pcf/pcf-init/assets/control/field-template/template_ControlManifest.Input.xml +0 -37
  116. package/dist/m365/pa/commands/pcf/pcf-init/assets/control/field-template/template_index.ts +0 -48
  117. package/dist/m365/pa/commands/pcf/pcf-init/assets/control/index.ts +0 -0
  118. package/dist/m365/pa/commands/pcf/pcf-init/assets/control/virtual-dataset-template/template_ControlManifest.Input.xml +0 -31
  119. package/dist/m365/pa/commands/pcf/pcf-init/assets/control/virtual-dataset-template/template_index.tsx +0 -58
  120. package/dist/m365/pa/commands/pcf/pcf-init/assets/control/virtual-field-template/template_ControlManifest.Input.xml +0 -37
  121. package/dist/m365/pa/commands/pcf/pcf-init/assets/control/virtual-field-template/template_index.tsx +0 -55
  122. package/dist/m365/pa/commands/pcf/pcf-init/assets/package.json +0 -19
  123. package/dist/m365/pa/commands/pcf/pcf-init/assets/pcfconfig.json +0 -3
  124. package/dist/m365/pa/commands/pcf/pcf-init/assets/template_.gitignore +0 -14
  125. package/dist/m365/pa/commands/pcf/pcf-init/assets/template_pcfprojecttype.pcfproj +0 -45
  126. package/dist/m365/pa/commands/pcf/pcf-init/pcf-init-variables.js +0 -2
  127. package/dist/m365/pa/commands/pcf/pcf-init.js +0 -120
  128. package/dist/m365/pa/commands/solution/solution-init/assets/Other/Customizations.xml +0 -18
  129. package/dist/m365/pa/commands/solution/solution-init/assets/Other/Relationships.xml +0 -2
  130. package/dist/m365/pa/commands/solution/solution-init/assets/Other/template_Solution.xml +0 -94
  131. package/dist/m365/pa/commands/solution/solution-init/assets/template_.gitignore +0 -2
  132. package/dist/m365/pa/commands/solution/solution-init/assets/template_solutionprojecttype.cdsproj +0 -44
  133. package/dist/m365/pa/commands/solution/solution-init/solution-init-variables.js +0 -2
  134. package/dist/m365/pa/commands/solution/solution-init.js +0 -126
  135. package/dist/m365/pa/commands/solution/solution-reference-add.js +0 -88
  136. package/dist/m365/pa/template-instantiator.js +0 -57
  137. package/docs/docs/cmd/pa/pcf/pcf-init.mdx +0 -56
  138. package/docs/docs/cmd/pa/solution/solution-init.mdx +0 -46
  139. package/docs/docs/cmd/pa/solution/solution-reference-add.mdx +0 -42
@@ -3,10 +3,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
3
3
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
4
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
5
  };
6
- var _SpoFolderCopyCommand_instances, _SpoFolderCopyCommand_initTelemetry, _SpoFolderCopyCommand_initOptions, _SpoFolderCopyCommand_initValidators;
7
- import url from 'url';
6
+ var _SpoFolderCopyCommand_instances, _SpoFolderCopyCommand_initTelemetry, _SpoFolderCopyCommand_initOptions, _SpoFolderCopyCommand_initValidators, _SpoFolderCopyCommand_initOptionSets;
8
7
  import request from '../../../../request.js';
9
- import { spo } from '../../../../utils/spo.js';
10
8
  import { urlUtil } from '../../../../utils/urlUtil.js';
11
9
  import { validation } from '../../../../utils/validation.js';
12
10
  import SpoCommand from '../../../base/SpoCommand.js';
@@ -21,77 +19,123 @@ class SpoFolderCopyCommand extends SpoCommand {
21
19
  constructor() {
22
20
  super();
23
21
  _SpoFolderCopyCommand_instances.add(this);
22
+ this.nameConflictBehaviorOptions = ['fail', 'rename'];
24
23
  __classPrivateFieldGet(this, _SpoFolderCopyCommand_instances, "m", _SpoFolderCopyCommand_initTelemetry).call(this);
25
24
  __classPrivateFieldGet(this, _SpoFolderCopyCommand_instances, "m", _SpoFolderCopyCommand_initOptions).call(this);
26
25
  __classPrivateFieldGet(this, _SpoFolderCopyCommand_instances, "m", _SpoFolderCopyCommand_initValidators).call(this);
26
+ __classPrivateFieldGet(this, _SpoFolderCopyCommand_instances, "m", _SpoFolderCopyCommand_initOptionSets).call(this);
27
27
  }
28
28
  getExcludedOptionsWithUrls() {
29
29
  return ['targetUrl', 'sourceUrl'];
30
30
  }
31
31
  async commandAction(logger, args) {
32
- const webUrl = args.options.webUrl;
33
- const parsedUrl = url.parse(webUrl);
34
- const tenantUrl = `${parsedUrl.protocol}//${parsedUrl.hostname}`;
35
- const serverRelativePath = urlUtil.getServerRelativePath(webUrl, args.options.sourceUrl);
36
- const sourceAbsoluteUrl = urlUtil.urlCombine(tenantUrl, serverRelativePath);
37
- const allowSchemaMismatch = args.options.allowSchemaMismatch || false;
38
- const requestOptions = {
39
- url: urlUtil.urlCombine(webUrl, '/_api/site/CreateCopyJobs'),
40
- headers: {
41
- 'accept': 'application/json;odata=nometadata'
42
- },
43
- data: {
44
- exportObjectUris: [sourceAbsoluteUrl],
45
- destinationUri: urlUtil.urlCombine(tenantUrl, args.options.targetUrl),
46
- options: {
47
- "AllowSchemaMismatch": allowSchemaMismatch,
48
- "IgnoreVersionHistory": true
49
- }
50
- },
51
- responseType: 'json'
52
- };
53
32
  try {
54
- const jobInfo = await request.post(requestOptions);
55
- const copyJobInfo = jobInfo.value[0];
56
- const progressPollInterval = 30 * 60; //used previously implemented interval. The API does not provide guidance on what value should be used.
57
- await new Promise((resolve, reject) => {
58
- setTimeout(() => {
59
- spo.waitUntilCopyJobFinished({
60
- copyJobInfo,
61
- siteUrl: webUrl,
62
- pollingInterval: progressPollInterval,
63
- resolve,
64
- reject,
65
- logger,
66
- debug: this.debug,
67
- verbose: this.verbose
68
- });
69
- }, progressPollInterval);
70
- });
33
+ const sourcePath = await this.getSourcePath(logger, args.options);
34
+ if (this.verbose) {
35
+ await logger.logToStderr(`Copying folder ${sourcePath} to ${args.options.targetUrl}...`);
36
+ }
37
+ const absoluteSourcePath = this.getAbsoluteUrl(args.options.webUrl, sourcePath);
38
+ let absoluteTargetPath = this.getAbsoluteUrl(args.options.webUrl, args.options.targetUrl) + '/';
39
+ if (args.options.newName) {
40
+ absoluteTargetPath += args.options.newName;
41
+ }
42
+ else {
43
+ // Keep the original folder name
44
+ absoluteTargetPath += sourcePath.substring(sourcePath.lastIndexOf('/') + 1);
45
+ }
46
+ const requestOptions = {
47
+ url: `${args.options.webUrl}/_api/SP.MoveCopyUtil.CopyFolderByPath`,
48
+ headers: {
49
+ accept: 'application/json;odata=nometadata'
50
+ },
51
+ responseType: 'json',
52
+ data: {
53
+ srcPath: {
54
+ DecodedUrl: absoluteSourcePath
55
+ },
56
+ destPath: {
57
+ DecodedUrl: absoluteTargetPath
58
+ },
59
+ options: {
60
+ KeepBoth: args.options.nameConflictBehavior === 'rename',
61
+ ShouldBypassSharedLocks: !!args.options.bypassSharedLock,
62
+ ResetAuthorAndCreatedOnCopy: !!args.options.resetAuthorAndCreated
63
+ }
64
+ }
65
+ };
66
+ await request.post(requestOptions);
71
67
  }
72
68
  catch (err) {
73
69
  this.handleRejectedODataJsonPromise(err);
74
70
  }
75
71
  }
72
+ async getSourcePath(logger, options) {
73
+ if (options.sourceUrl) {
74
+ return urlUtil.getServerRelativePath(options.webUrl, options.sourceUrl);
75
+ }
76
+ if (this.verbose) {
77
+ await logger.logToStderr(`Retrieving server-relative path for folder with ID '${options.sourceId}'...`);
78
+ }
79
+ const requestOptions = {
80
+ url: `${options.webUrl}/_api/Web/GetFolderById('${options.sourceId}')?$select=ServerRelativePath`,
81
+ headers: {
82
+ accept: 'application/json;odata=nometadata'
83
+ },
84
+ responseType: 'json'
85
+ };
86
+ const file = await request.get(requestOptions);
87
+ return file.ServerRelativePath.DecodedUrl;
88
+ }
89
+ getAbsoluteUrl(webUrl, url) {
90
+ return url.startsWith('https://') ? url : urlUtil.getAbsoluteUrl(webUrl, url);
91
+ }
76
92
  }
77
93
  _SpoFolderCopyCommand_instances = new WeakSet(), _SpoFolderCopyCommand_initTelemetry = function _SpoFolderCopyCommand_initTelemetry() {
78
94
  this.telemetry.push((args) => {
79
95
  Object.assign(this.telemetryProperties, {
80
- allowSchemaMismatch: args.options.allowSchemaMismatch || false
96
+ sourceUrl: typeof args.options.sourceUrl !== 'undefined',
97
+ sourceId: typeof args.options.sourceId !== 'undefined',
98
+ newName: typeof args.options.newName !== 'undefined',
99
+ nameConflictBehavior: typeof args.options.nameConflictBehavior !== 'undefined',
100
+ resetAuthorAndCreated: !!args.options.resetAuthorAndCreated,
101
+ bypassSharedLock: !!args.options.bypassSharedLock
81
102
  });
82
103
  });
83
104
  }, _SpoFolderCopyCommand_initOptions = function _SpoFolderCopyCommand_initOptions() {
84
105
  this.options.unshift({
85
106
  option: '-u, --webUrl <webUrl>'
86
107
  }, {
87
- option: '-s, --sourceUrl <sourceUrl>'
108
+ option: '-s, --sourceUrl [sourceUrl]'
109
+ }, {
110
+ option: '-i, --sourceId [sourceId]'
88
111
  }, {
89
112
  option: '-t, --targetUrl <targetUrl>'
90
113
  }, {
91
- option: '--allowSchemaMismatch'
114
+ option: '--newName [newName]'
115
+ }, {
116
+ option: '--nameConflictBehavior [nameConflictBehavior]',
117
+ autocomplete: this.nameConflictBehaviorOptions
118
+ }, {
119
+ option: '--resetAuthorAndCreated'
120
+ }, {
121
+ option: '--bypassSharedLock'
92
122
  });
93
123
  }, _SpoFolderCopyCommand_initValidators = function _SpoFolderCopyCommand_initValidators() {
94
- this.validators.push(async (args) => validation.isValidSharePointUrl(args.options.webUrl));
124
+ this.validators.push(async (args) => {
125
+ const isValidSharePointUrl = validation.isValidSharePointUrl(args.options.webUrl);
126
+ if (isValidSharePointUrl !== true) {
127
+ return isValidSharePointUrl;
128
+ }
129
+ if (args.options.sourceId && !validation.isValidGuid(args.options.sourceId)) {
130
+ return `'${args.options.sourceId}' is not a valid GUID for sourceId.`;
131
+ }
132
+ if (args.options.nameConflictBehavior && this.nameConflictBehaviorOptions.indexOf(args.options.nameConflictBehavior) === -1) {
133
+ return `'${args.options.nameConflictBehavior}' is not a valid value for nameConflictBehavior. Allowed values are: ${this.nameConflictBehaviorOptions.join(', ')}.`;
134
+ }
135
+ return true;
136
+ });
137
+ }, _SpoFolderCopyCommand_initOptionSets = function _SpoFolderCopyCommand_initOptionSets() {
138
+ this.optionSets.push({ options: ['sourceUrl', 'sourceId'] });
95
139
  };
96
140
  export default new SpoFolderCopyCommand();
97
141
  //# sourceMappingURL=folder-copy.js.map
@@ -3,10 +3,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
3
3
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
4
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
5
  };
6
- var _SpoFolderMoveCommand_instances, _SpoFolderMoveCommand_initTelemetry, _SpoFolderMoveCommand_initOptions, _SpoFolderMoveCommand_initValidators;
7
- import url from 'url';
6
+ var _SpoFolderMoveCommand_instances, _SpoFolderMoveCommand_initTelemetry, _SpoFolderMoveCommand_initOptions, _SpoFolderMoveCommand_initValidators, _SpoFolderMoveCommand_initOptionSets;
8
7
  import request from '../../../../request.js';
9
- import { spo } from '../../../../utils/spo.js';
10
8
  import { urlUtil } from '../../../../utils/urlUtil.js';
11
9
  import { validation } from '../../../../utils/validation.js';
12
10
  import SpoCommand from '../../../base/SpoCommand.js';
@@ -21,79 +19,123 @@ class SpoFolderMoveCommand extends SpoCommand {
21
19
  constructor() {
22
20
  super();
23
21
  _SpoFolderMoveCommand_instances.add(this);
22
+ this.nameConflictBehaviorOptions = ['fail', 'rename'];
24
23
  __classPrivateFieldGet(this, _SpoFolderMoveCommand_instances, "m", _SpoFolderMoveCommand_initTelemetry).call(this);
25
24
  __classPrivateFieldGet(this, _SpoFolderMoveCommand_instances, "m", _SpoFolderMoveCommand_initOptions).call(this);
26
25
  __classPrivateFieldGet(this, _SpoFolderMoveCommand_instances, "m", _SpoFolderMoveCommand_initValidators).call(this);
26
+ __classPrivateFieldGet(this, _SpoFolderMoveCommand_instances, "m", _SpoFolderMoveCommand_initOptionSets).call(this);
27
27
  }
28
28
  getExcludedOptionsWithUrls() {
29
29
  return ['targetUrl', 'sourceUrl'];
30
30
  }
31
31
  async commandAction(logger, args) {
32
- const webUrl = args.options.webUrl;
33
- const parsedUrl = url.parse(webUrl);
34
- const tenantUrl = `${parsedUrl.protocol}//${parsedUrl.hostname}`;
35
- const sourceRelUrl = urlUtil.getServerRelativePath(webUrl, args.options.sourceUrl);
36
- const sourceAbsoluteUrl = urlUtil.urlCombine(tenantUrl, sourceRelUrl);
37
- const allowSchemaMismatch = args.options.allowSchemaMismatch || false;
38
- const requestUrl = urlUtil.urlCombine(webUrl, '/_api/site/CreateCopyJobs');
39
- const requestOptions = {
40
- url: requestUrl,
41
- headers: {
42
- 'accept': 'application/json;odata=nometadata'
43
- },
44
- data: {
45
- exportObjectUris: [sourceAbsoluteUrl],
46
- destinationUri: urlUtil.urlCombine(tenantUrl, args.options.targetUrl),
47
- options: {
48
- "AllowSchemaMismatch": allowSchemaMismatch,
49
- "IgnoreVersionHistory": true,
50
- "IsMoveMode": true
51
- }
52
- },
53
- responseType: 'json'
54
- };
55
32
  try {
56
- const jobInfo = await request.post(requestOptions);
57
- const copyJobInfo = jobInfo.value[0];
58
- const progressPollInterval = 30 * 60; //used previously implemented interval. The API does not provide guidance on what value should be used.
59
- await new Promise((resolve, reject) => {
60
- setTimeout(() => {
61
- spo.waitUntilCopyJobFinished({
62
- copyJobInfo,
63
- siteUrl: webUrl,
64
- pollingInterval: progressPollInterval,
65
- resolve,
66
- reject,
67
- logger,
68
- debug: this.debug,
69
- verbose: this.verbose
70
- });
71
- }, progressPollInterval);
72
- });
33
+ const sourcePath = await this.getSourcePath(logger, args.options);
34
+ if (this.verbose) {
35
+ await logger.logToStderr(`Moving folder '${sourcePath}' to '${args.options.targetUrl}'...`);
36
+ }
37
+ const absoluteSourcePath = this.getAbsoluteUrl(args.options.webUrl, sourcePath);
38
+ let absoluteTargetPath = this.getAbsoluteUrl(args.options.webUrl, args.options.targetUrl) + '/';
39
+ if (args.options.newName) {
40
+ absoluteTargetPath += args.options.newName;
41
+ }
42
+ else {
43
+ // Keep the original file name
44
+ absoluteTargetPath += sourcePath.substring(sourcePath.lastIndexOf('/') + 1);
45
+ }
46
+ const requestOptions = {
47
+ url: `${args.options.webUrl}/_api/SP.MoveCopyUtil.MoveFolderByPath`,
48
+ headers: {
49
+ accept: 'application/json;odata=nometadata'
50
+ },
51
+ responseType: 'json',
52
+ data: {
53
+ srcPath: {
54
+ DecodedUrl: absoluteSourcePath
55
+ },
56
+ destPath: {
57
+ DecodedUrl: absoluteTargetPath
58
+ },
59
+ options: {
60
+ KeepBoth: args.options.nameConflictBehavior === 'rename',
61
+ ShouldBypassSharedLocks: !!args.options.bypassSharedLock,
62
+ RetainEditorAndModifiedOnMove: !!args.options.retainEditorAndModified
63
+ }
64
+ }
65
+ };
66
+ await request.post(requestOptions);
73
67
  }
74
68
  catch (err) {
75
69
  this.handleRejectedODataJsonPromise(err);
76
70
  }
77
71
  }
72
+ async getSourcePath(logger, options) {
73
+ if (options.sourceUrl) {
74
+ return urlUtil.getServerRelativePath(options.webUrl, options.sourceUrl);
75
+ }
76
+ if (this.verbose) {
77
+ await logger.logToStderr(`Retrieving server-relative path for folder with ID '${options.sourceId}'...`);
78
+ }
79
+ const requestOptions = {
80
+ url: `${options.webUrl}/_api/Web/GetFolderById('${options.sourceId}')?$select=ServerRelativePath`,
81
+ headers: {
82
+ accept: 'application/json;odata=nometadata'
83
+ },
84
+ responseType: 'json'
85
+ };
86
+ const file = await request.get(requestOptions);
87
+ return file.ServerRelativePath.DecodedUrl;
88
+ }
89
+ getAbsoluteUrl(webUrl, url) {
90
+ return url.startsWith('https://') ? url : urlUtil.getAbsoluteUrl(webUrl, url);
91
+ }
78
92
  }
79
93
  _SpoFolderMoveCommand_instances = new WeakSet(), _SpoFolderMoveCommand_initTelemetry = function _SpoFolderMoveCommand_initTelemetry() {
80
94
  this.telemetry.push((args) => {
81
95
  Object.assign(this.telemetryProperties, {
82
- allowSchemaMismatch: args.options.allowSchemaMismatch || false
96
+ sourceUrl: typeof args.options.sourceUrl !== 'undefined',
97
+ sourceId: typeof args.options.sourceId !== 'undefined',
98
+ newName: typeof args.options.newName !== 'undefined',
99
+ nameConflictBehavior: typeof args.options.nameConflictBehavior !== 'undefined',
100
+ retainEditorAndModified: !!args.options.retainEditorAndModified,
101
+ bypassSharedLock: !!args.options.bypassSharedLock
83
102
  });
84
103
  });
85
104
  }, _SpoFolderMoveCommand_initOptions = function _SpoFolderMoveCommand_initOptions() {
86
105
  this.options.unshift({
87
106
  option: '-u, --webUrl <webUrl>'
88
107
  }, {
89
- option: '-s, --sourceUrl <sourceUrl>'
108
+ option: '-s, --sourceUrl [sourceUrl]'
109
+ }, {
110
+ option: '-i, --sourceId [sourceId]'
90
111
  }, {
91
112
  option: '-t, --targetUrl <targetUrl>'
92
113
  }, {
93
- option: '--allowSchemaMismatch'
114
+ option: '--newName [newName]'
115
+ }, {
116
+ option: '--nameConflictBehavior [nameConflictBehavior]',
117
+ autocomplete: this.nameConflictBehaviorOptions
118
+ }, {
119
+ option: '--retainEditorAndModified'
120
+ }, {
121
+ option: '--bypassSharedLock'
94
122
  });
95
123
  }, _SpoFolderMoveCommand_initValidators = function _SpoFolderMoveCommand_initValidators() {
96
- this.validators.push(async (args) => validation.isValidSharePointUrl(args.options.webUrl));
124
+ this.validators.push(async (args) => {
125
+ const isValidSharePointUrl = validation.isValidSharePointUrl(args.options.webUrl);
126
+ if (isValidSharePointUrl !== true) {
127
+ return isValidSharePointUrl;
128
+ }
129
+ if (args.options.sourceId && !validation.isValidGuid(args.options.sourceId)) {
130
+ return `'${args.options.sourceId}' is not a valid GUID for sourceId.`;
131
+ }
132
+ if (args.options.nameConflictBehavior && this.nameConflictBehaviorOptions.indexOf(args.options.nameConflictBehavior) === -1) {
133
+ return `'${args.options.nameConflictBehavior}' is not a valid value for nameConflictBehavior. Allowed values are: ${this.nameConflictBehaviorOptions.join(', ')}.`;
134
+ }
135
+ return true;
136
+ });
137
+ }, _SpoFolderMoveCommand_initOptionSets = function _SpoFolderMoveCommand_initOptionSets() {
138
+ this.optionSets.push({ options: ['sourceUrl', 'sourceId'] });
97
139
  };
98
140
  export default new SpoFolderMoveCommand();
99
141
  //# sourceMappingURL=folder-move.js.map
@@ -3,7 +3,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
3
3
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
4
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
5
  };
6
- var _SpoListAddCommand_instances, _SpoListAddCommand_initTelemetry, _SpoListAddCommand_initOptions, _SpoListAddCommand_initValidators, _SpoListAddCommand_initTypes;
6
+ var _SpoListAddCommand_instances, _a, _SpoListAddCommand_initTelemetry, _SpoListAddCommand_initOptions, _SpoListAddCommand_initValidators, _SpoListAddCommand_initTypes;
7
7
  import request from '../../../../request.js';
8
8
  import { validation } from '../../../../utils/validation.js';
9
9
  import SpoCommand from '../../../base/SpoCommand.js';
@@ -275,7 +275,7 @@ class SpoListAddCommand extends SpoCommand {
275
275
  return requestBody;
276
276
  }
277
277
  }
278
- _SpoListAddCommand_instances = new WeakSet(), _SpoListAddCommand_initTelemetry = function _SpoListAddCommand_initTelemetry() {
278
+ _a = SpoListAddCommand, _SpoListAddCommand_instances = new WeakSet(), _SpoListAddCommand_initTelemetry = function _SpoListAddCommand_initTelemetry() {
279
279
  this.telemetry.push((args) => {
280
280
  const telemetryProps = {};
281
281
  // add properties with identifiable data
@@ -298,7 +298,7 @@ _SpoListAddCommand_instances = new WeakSet(), _SpoListAddCommand_initTelemetry =
298
298
  }
299
299
  });
300
300
  // add boolean values
301
- SpoListAddCommand.booleanOptions.forEach(o => {
301
+ _a.booleanOptions.forEach(o => {
302
302
  const value = args.options[o];
303
303
  if (value !== undefined) {
304
304
  telemetryProps[o] = value.toString();
@@ -561,7 +561,7 @@ _SpoListAddCommand_instances = new WeakSet(), _SpoListAddCommand_initTelemetry =
561
561
  });
562
562
  }, _SpoListAddCommand_initTypes = function _SpoListAddCommand_initTypes() {
563
563
  this.types.string.push('title', 'baseTemplate', 'webUrl', 'templateFeatureId', 'defaultContentApprovalWorkflowId', 'draftVersionVisibility', 'listExperienceOptions');
564
- this.types.boolean.push(...SpoListAddCommand.booleanOptions);
564
+ this.types.boolean.push(..._a.booleanOptions);
565
565
  };
566
566
  SpoListAddCommand.booleanOptions = [
567
567
  'allowDeletion',
@@ -3,7 +3,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
3
3
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
4
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
5
  };
6
- var _SpoListSetCommand_instances, _SpoListSetCommand_initTelemetry, _SpoListSetCommand_initOptions, _SpoListSetCommand_initValidators, _SpoListSetCommand_initTypes, _SpoListSetCommand_initOptionSets;
6
+ var _SpoListSetCommand_instances, _a, _SpoListSetCommand_initTelemetry, _SpoListSetCommand_initOptions, _SpoListSetCommand_initValidators, _SpoListSetCommand_initTypes, _SpoListSetCommand_initOptionSets;
7
7
  import request from '../../../../request.js';
8
8
  import { formatting } from '../../../../utils/formatting.js';
9
9
  import { urlUtil } from '../../../../utils/urlUtil.js';
@@ -277,7 +277,7 @@ class SpoListSetCommand extends SpoCommand {
277
277
  return requestBody;
278
278
  }
279
279
  }
280
- _SpoListSetCommand_instances = new WeakSet(), _SpoListSetCommand_initTelemetry = function _SpoListSetCommand_initTelemetry() {
280
+ _a = SpoListSetCommand, _SpoListSetCommand_instances = new WeakSet(), _SpoListSetCommand_initTelemetry = function _SpoListSetCommand_initTelemetry() {
281
281
  this.telemetry.push((args) => {
282
282
  const telemetryProps = {};
283
283
  // add properties with identifiable data
@@ -303,7 +303,7 @@ _SpoListSetCommand_instances = new WeakSet(), _SpoListSetCommand_initTelemetry =
303
303
  }
304
304
  });
305
305
  // add boolean values
306
- SpoListSetCommand.booleanOptions.forEach(o => {
306
+ _a.booleanOptions.forEach(o => {
307
307
  const value = args.options[o];
308
308
  if (value !== undefined) {
309
309
  telemetryProps[o] = value;
@@ -565,7 +565,7 @@ _SpoListSetCommand_instances = new WeakSet(), _SpoListSetCommand_initTelemetry =
565
565
  });
566
566
  }, _SpoListSetCommand_initTypes = function _SpoListSetCommand_initTypes() {
567
567
  this.types.string.push('webUrl', 'templateFeatureId', 'defaultContentApprovalWorkflowId', 'draftVersionVisibility', 'listExperienceOptions');
568
- this.types.boolean.push(...SpoListSetCommand.booleanOptions);
568
+ this.types.boolean.push(..._a.booleanOptions);
569
569
  }, _SpoListSetCommand_initOptionSets = function _SpoListSetCommand_initOptionSets() {
570
570
  this.optionSets.push({ options: ['id', 'title', 'url'] });
571
571
  };
@@ -3,13 +3,19 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
3
3
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
4
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
5
  };
6
- var _SpoOrgAssetsLibraryAddCommand_instances, _SpoOrgAssetsLibraryAddCommand_initTelemetry, _SpoOrgAssetsLibraryAddCommand_initOptions, _SpoOrgAssetsLibraryAddCommand_initValidators;
6
+ var _SpoOrgAssetsLibraryAddCommand_instances, _a, _SpoOrgAssetsLibraryAddCommand_initTelemetry, _SpoOrgAssetsLibraryAddCommand_initOptions, _SpoOrgAssetsLibraryAddCommand_initValidators;
7
7
  import config from '../../../../config.js';
8
8
  import request from '../../../../request.js';
9
9
  import { spo } from '../../../../utils/spo.js';
10
10
  import { validation } from '../../../../utils/validation.js';
11
11
  import SpoCommand from '../../../base/SpoCommand.js';
12
12
  import commands from '../../commands.js';
13
+ var OrgAssetType;
14
+ (function (OrgAssetType) {
15
+ OrgAssetType[OrgAssetType["ImageDocumentLibrary"] = 1] = "ImageDocumentLibrary";
16
+ OrgAssetType[OrgAssetType["OfficeTemplateLibrary"] = 2] = "OfficeTemplateLibrary";
17
+ OrgAssetType[OrgAssetType["OfficeFontLibrary"] = 4] = "OfficeFontLibrary";
18
+ })(OrgAssetType || (OrgAssetType = {}));
13
19
  class SpoOrgAssetsLibraryAddCommand extends SpoCommand {
14
20
  get name() {
15
21
  return commands.ORGASSETSLIBRARY_ADD;
@@ -30,6 +36,7 @@ class SpoOrgAssetsLibraryAddCommand extends SpoCommand {
30
36
  const cdnType = cdnTypeString === 'Private' ? 1 : 0;
31
37
  const thumbnailSchema = typeof args.options.thumbnailUrl === 'undefined' ? `<Parameter Type="Null" />` : `<Parameter Type="String">${args.options.thumbnailUrl}</Parameter>`;
32
38
  try {
39
+ const orgAssetType = this.getOrgAssetType(args.options.orgAssetType);
33
40
  spoAdminUrl = await spo.getSpoAdminUrl(logger, this.debug);
34
41
  const reqDigest = await spo.getRequestDigest(spoAdminUrl);
35
42
  const requestOptions = {
@@ -37,7 +44,7 @@ class SpoOrgAssetsLibraryAddCommand extends SpoCommand {
37
44
  headers: {
38
45
  'X-RequestDigest': reqDigest.FormDigestValue
39
46
  },
40
- data: `<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="15.0.0.0" LibraryVersion="16.0.0.0" ApplicationName="${config.applicationName}" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009"><Actions><Method Name="AddToOrgAssetsLibAndCdnWithType" Id="11" ObjectPathId="8"><Parameters><Parameter Type="Enum">${cdnType}</Parameter><Parameter Type="String">${args.options.libraryUrl}</Parameter>${thumbnailSchema}<Parameter Type="Enum">1</Parameter></Parameters></Method></Actions><ObjectPaths><Constructor Id="8" TypeId="{268004ae-ef6b-4e9b-8425-127220d84719}" /></ObjectPaths></Request>`
47
+ data: `<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="15.0.0.0" LibraryVersion="16.0.0.0" ApplicationName="${config.applicationName}" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009"><Actions><Method Name="AddToOrgAssetsLibAndCdnWithType" Id="11" ObjectPathId="8"><Parameters><Parameter Type="Enum">${cdnType}</Parameter><Parameter Type="String">${args.options.libraryUrl}</Parameter>${thumbnailSchema}<Parameter Type="Enum">${orgAssetType}</Parameter></Parameters></Method></Actions><ObjectPaths><Constructor Id="8" TypeId="{268004ae-ef6b-4e9b-8425-127220d84719}" /></ObjectPaths></Request>`
41
48
  };
42
49
  const res = await request.post(requestOptions);
43
50
  const json = JSON.parse(res);
@@ -50,12 +57,23 @@ class SpoOrgAssetsLibraryAddCommand extends SpoCommand {
50
57
  this.handleRejectedPromise(err);
51
58
  }
52
59
  }
60
+ getOrgAssetType(orgAssetType) {
61
+ switch (orgAssetType) {
62
+ case 'OfficeTemplateLibrary':
63
+ return OrgAssetType.OfficeTemplateLibrary;
64
+ case 'OfficeFontLibrary':
65
+ return OrgAssetType.OfficeFontLibrary;
66
+ default:
67
+ return OrgAssetType.ImageDocumentLibrary;
68
+ }
69
+ }
53
70
  }
54
- _SpoOrgAssetsLibraryAddCommand_instances = new WeakSet(), _SpoOrgAssetsLibraryAddCommand_initTelemetry = function _SpoOrgAssetsLibraryAddCommand_initTelemetry() {
71
+ _a = SpoOrgAssetsLibraryAddCommand, _SpoOrgAssetsLibraryAddCommand_instances = new WeakSet(), _SpoOrgAssetsLibraryAddCommand_initTelemetry = function _SpoOrgAssetsLibraryAddCommand_initTelemetry() {
55
72
  this.telemetry.push((args) => {
56
73
  Object.assign(this.telemetryProperties, {
57
74
  cdnType: args.options.cdnType || 'Private',
58
- thumbnailUrl: typeof args.options.thumbnailUrl !== 'undefined'
75
+ thumbnailUrl: typeof args.options.thumbnailUrl !== 'undefined',
76
+ orgAssetType: args.options.orgAssetType
59
77
  });
60
78
  });
61
79
  }, _SpoOrgAssetsLibraryAddCommand_initOptions = function _SpoOrgAssetsLibraryAddCommand_initOptions() {
@@ -65,7 +83,10 @@ _SpoOrgAssetsLibraryAddCommand_instances = new WeakSet(), _SpoOrgAssetsLibraryAd
65
83
  option: '--thumbnailUrl [thumbnailUrl]'
66
84
  }, {
67
85
  option: '--cdnType [cdnType]',
68
- autocomplete: ['Public', 'Private']
86
+ autocomplete: _a.cdnTypes
87
+ }, {
88
+ option: '--orgAssetType [orgAssetType]',
89
+ autocomplete: _a.orgAssetTypes
69
90
  });
70
91
  }, _SpoOrgAssetsLibraryAddCommand_initValidators = function _SpoOrgAssetsLibraryAddCommand_initValidators() {
71
92
  this.validators.push(async (args) => {
@@ -73,8 +94,16 @@ _SpoOrgAssetsLibraryAddCommand_instances = new WeakSet(), _SpoOrgAssetsLibraryAd
73
94
  if (typeof args.options.thumbnailUrl !== 'undefined' && isValidThumbnailUrl !== true) {
74
95
  return isValidThumbnailUrl;
75
96
  }
97
+ if (args.options.cdnType && _a.cdnTypes.indexOf(args.options.cdnType) < 0) {
98
+ return `${args.options.cdnType} is not a valid value for cdnType. Valid values are ${_a.cdnTypes.join(', ')}`;
99
+ }
100
+ if (args.options.orgAssetType && _a.orgAssetTypes.indexOf(args.options.orgAssetType) < 0) {
101
+ return `${args.options.orgAssetType} is not a valid value for orgAssetType. Valid values are ${_a.orgAssetTypes.join(', ')}`;
102
+ }
76
103
  return validation.isValidSharePointUrl(args.options.libraryUrl);
77
104
  });
78
105
  };
106
+ SpoOrgAssetsLibraryAddCommand.orgAssetTypes = ['ImageDocumentLibrary', 'OfficeTemplateLibrary', 'OfficeFontLibrary'];
107
+ SpoOrgAssetsLibraryAddCommand.cdnTypes = ['Public', 'Private'];
79
108
  export default new SpoOrgAssetsLibraryAddCommand();
80
109
  //# sourceMappingURL=orgassetslibrary-add.js.map