1 | import { __decorate } from "tslib";
|
2 | import { isUrlAbsolute, combine } from "@pnp/core";
|
3 | import { body, cancelableScope } from "@pnp/queryable";
|
4 | import { _SPCollection, spInvokableFactory, _SPInstance, deleteableWithETag, SPInstance, } from "../spqueryable.js";
|
5 | import { odataUrlFrom } from "../utils/odata-url-from.js";
|
6 | import { Item } from "../items/types.js";
|
7 | import { defaultPath } from "../decorators.js";
|
8 | import { spPost, spPostMerge } from "../operations.js";
|
9 | import { extractWebUrl } from "../utils/extract-web-url.js";
|
10 | import { toResourcePath } from "../utils/to-resource-path.js";
|
11 | import { encodePath } from "../utils/encode-path-str.js";
|
12 | import "../context-info/index.js";
|
13 | let _Folders = class _Folders extends _SPCollection {
|
14 | |
15 |
|
16 |
|
17 |
|
18 |
|
19 | getByUrl(name) {
|
20 | return Folder(this).concat(`('${encodePath(name)}')`);
|
21 | }
|
22 | |
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 | async addUsingPath(serverRelativeUrl, overwrite = false) {
|
29 | const data = await spPost(Folders(this, `addUsingPath(DecodedUrl='${encodePath(serverRelativeUrl)}',overwrite=${overwrite})`));
|
30 | return {
|
31 | data,
|
32 | folder: folderFromServerRelativePath(this, data.ServerRelativeUrl),
|
33 | };
|
34 | }
|
35 | };
|
36 | _Folders = __decorate([
|
37 | defaultPath("folders")
|
38 | ], _Folders);
|
39 | export { _Folders };
|
40 | export const Folders = spInvokableFactory(_Folders);
|
41 | export class _Folder extends _SPInstance {
|
42 | constructor() {
|
43 | super(...arguments);
|
44 | this.delete = deleteableWithETag();
|
45 | }
|
46 | |
47 |
|
48 |
|
49 |
|
50 | get folders() {
|
51 | return Folders(this);
|
52 | }
|
53 | |
54 |
|
55 |
|
56 |
|
57 | get listItemAllFields() {
|
58 | return SPInstance(this, "listItemAllFields");
|
59 | }
|
60 | |
61 |
|
62 |
|
63 |
|
64 | get parentFolder() {
|
65 | return Folder(this, "parentFolder");
|
66 | }
|
67 | |
68 |
|
69 |
|
70 |
|
71 | get properties() {
|
72 | return SPInstance(this, "properties");
|
73 | }
|
74 | |
75 |
|
76 |
|
77 |
|
78 | get storageMetrics() {
|
79 | return SPInstance(this, "storagemetrics");
|
80 | }
|
81 | |
82 |
|
83 |
|
84 |
|
85 | async update(props) {
|
86 | const data = await spPostMerge(this, body(props));
|
87 | return {
|
88 | data,
|
89 | folder: this,
|
90 | };
|
91 | }
|
92 | |
93 |
|
94 |
|
95 | recycle() {
|
96 | return spPost(Folder(this, "recycle"));
|
97 | }
|
98 | |
99 |
|
100 |
|
101 | async getItem(...selects) {
|
102 | const q = this.listItemAllFields;
|
103 | const d = await q.select(...selects)();
|
104 | if (d["odata.null"]) {
|
105 | throw Error("No associated item was found for this folder. It may be the root folder, which does not have an item.");
|
106 | }
|
107 | return Object.assign(Item([this, odataUrlFrom(d)]), d);
|
108 | }
|
109 | async moveByPath(destUrl, ...rest) {
|
110 | let options = {
|
111 | KeepBoth: false,
|
112 | ShouldBypassSharedLocks: true,
|
113 | RetainEditorAndModifiedOnMove: false,
|
114 | };
|
115 | if (rest.length === 1) {
|
116 | if (typeof rest[0] === "boolean") {
|
117 | options.KeepBoth = rest[0];
|
118 | }
|
119 | else if (typeof rest[0] === "object") {
|
120 | options = { ...options, ...rest[0] };
|
121 | }
|
122 | }
|
123 | const urlInfo = await this.getParentInfos();
|
124 | const uri = new URL(urlInfo.ParentWeb.Url);
|
125 | await spPost(Folder([this, urlInfo.ParentWeb.Url], "/_api/SP.MoveCopyUtil.MoveFolderByPath()"), body({
|
126 | destPath: toResourcePath(isUrlAbsolute(destUrl) ? destUrl : combine(uri.origin, destUrl)),
|
127 | options,
|
128 | srcPath: toResourcePath(combine(uri.origin, urlInfo.Folder.ServerRelativeUrl)),
|
129 | }));
|
130 | return folderFromPath(this, destUrl);
|
131 | }
|
132 | async copyByPath(destUrl, ...rest) {
|
133 | let options = {
|
134 | ShouldBypassSharedLocks: true,
|
135 | ResetAuthorAndCreatedOnCopy: true,
|
136 | KeepBoth: false,
|
137 | };
|
138 | if (rest.length === 1) {
|
139 | if (typeof rest[0] === "boolean") {
|
140 | options.KeepBoth = rest[0];
|
141 | }
|
142 | else if (typeof rest[0] === "object") {
|
143 | options = { ...options, ...rest[0] };
|
144 | }
|
145 | }
|
146 | const urlInfo = await this.getParentInfos();
|
147 | const uri = new URL(urlInfo.ParentWeb.Url);
|
148 | await spPost(Folder([this, urlInfo.ParentWeb.Url], "/_api/SP.MoveCopyUtil.CopyFolderByPath()"), body({
|
149 | destPath: toResourcePath(isUrlAbsolute(destUrl) ? destUrl : combine(uri.origin, destUrl)),
|
150 | options,
|
151 | srcPath: toResourcePath(combine(uri.origin, urlInfo.Folder.ServerRelativeUrl)),
|
152 | }));
|
153 | return folderFromPath(this, destUrl);
|
154 | }
|
155 | |
156 |
|
157 |
|
158 |
|
159 |
|
160 | async deleteWithParams(parameters) {
|
161 | return spPost(Folder(this, "DeleteWithParameters"), body({ parameters }));
|
162 | }
|
163 | |
164 |
|
165 |
|
166 |
|
167 |
|
168 | async addSubFolderUsingPath(leafPath) {
|
169 | await spPost(Folder(this, "AddSubFolderUsingPath"), body({ leafPath: toResourcePath(leafPath) }));
|
170 | return this.folders.getByUrl(leafPath);
|
171 | }
|
172 | |
173 |
|
174 |
|
175 | async getParentInfos() {
|
176 | const urlInfo = await this.select("ServerRelativeUrl", "ListItemAllFields/ParentList/Id", "ListItemAllFields/ParentList/RootFolder/UniqueId", "ListItemAllFields/ParentList/RootFolder/ServerRelativeUrl", "ListItemAllFields/ParentList/RootFolder/ServerRelativePath", "ListItemAllFields/ParentList/ParentWeb/Id", "ListItemAllFields/ParentList/ParentWeb/Url", "ListItemAllFields/ParentList/ParentWeb/ServerRelativeUrl", "ListItemAllFields/ParentList/ParentWeb/ServerRelativePath").expand("ListItemAllFields/ParentList", "ListItemAllFields/ParentList/RootFolder", "ListItemAllFields/ParentList/ParentWeb")();
|
177 | return {
|
178 | Folder: {
|
179 | ServerRelativeUrl: urlInfo.ServerRelativeUrl,
|
180 | },
|
181 | ParentList: {
|
182 | Id: urlInfo.ListItemAllFields.ParentList.Id,
|
183 | RootFolderServerRelativePath: urlInfo.ListItemAllFields.ParentList.RootFolder.ServerRelativePath,
|
184 | RootFolderServerRelativeUrl: urlInfo.ListItemAllFields.ParentList.RootFolder.ServerRelativeUrl,
|
185 | RootFolderUniqueId: urlInfo.ListItemAllFields.ParentList.RootFolder.UniqueId,
|
186 | },
|
187 | ParentWeb: {
|
188 | Id: urlInfo.ListItemAllFields.ParentList.ParentWeb.Id,
|
189 | ServerRelativePath: urlInfo.ListItemAllFields.ParentList.ParentWeb.ServerRelativePath,
|
190 | ServerRelativeUrl: urlInfo.ListItemAllFields.ParentList.ParentWeb.ServerRelativeUrl,
|
191 | Url: urlInfo.ListItemAllFields.ParentList.ParentWeb.Url,
|
192 | },
|
193 | };
|
194 | }
|
195 | }
|
196 | __decorate([
|
197 | cancelableScope
|
198 | ], _Folder.prototype, "moveByPath", null);
|
199 | __decorate([
|
200 | cancelableScope
|
201 | ], _Folder.prototype, "copyByPath", null);
|
202 | export const Folder = spInvokableFactory(_Folder);
|
203 |
|
204 |
|
205 |
|
206 |
|
207 |
|
208 |
|
209 |
|
210 | export function folderFromServerRelativePath(base, serverRelativePath) {
|
211 | return Folder([base, extractWebUrl(base.toUrl())], `_api/web/getFolderByServerRelativePath(decodedUrl='${encodePath(serverRelativePath)}')`);
|
212 | }
|
213 |
|
214 |
|
215 |
|
216 |
|
217 |
|
218 |
|
219 |
|
220 | export async function folderFromAbsolutePath(base, absoluteFolderPath) {
|
221 | const { WebFullUrl } = await base.getContextInfo(absoluteFolderPath);
|
222 | const { pathname } = new URL(absoluteFolderPath);
|
223 | return folderFromServerRelativePath(Folder([base, combine(WebFullUrl, "_api/web")]), decodeURIComponent(pathname));
|
224 | }
|
225 |
|
226 |
|
227 |
|
228 |
|
229 |
|
230 |
|
231 |
|
232 | export async function folderFromPath(base, path) {
|
233 | return (isUrlAbsolute(path) ? folderFromAbsolutePath : folderFromServerRelativePath)(base, path);
|
234 | }
|
235 |
|
\ | No newline at end of file |