@wordpress/e2e-test-utils-playwright 1.48.0 → 1.48.1

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 (188) hide show
  1. package/build/admin/create-new-post.js +31 -0
  2. package/build/admin/create-new-post.js.map +1 -0
  3. package/build/admin/edit-post.js +20 -0
  4. package/build/admin/edit-post.js.map +1 -0
  5. package/{src/admin/get-page-error.ts → build/admin/get-page-error.js} +9 -12
  6. package/build/admin/get-page-error.js.map +1 -0
  7. package/build/admin/index.js +40 -0
  8. package/build/admin/index.js.map +1 -0
  9. package/build/admin/visit-admin-page.js +32 -0
  10. package/build/admin/visit-admin-page.js.map +1 -0
  11. package/build/admin/visit-site-editor.js +45 -0
  12. package/build/admin/visit-site-editor.js.map +1 -0
  13. package/build/admin/wait-for-site-editor.js +41 -0
  14. package/build/admin/wait-for-site-editor.js.map +1 -0
  15. package/build/config.js +13 -0
  16. package/build/config.js.map +1 -0
  17. package/build/editor/click-block-options-menu-item.js +17 -0
  18. package/build/editor/click-block-options-menu-item.js.map +1 -0
  19. package/build/editor/click-block-toolbar-button.js +16 -0
  20. package/build/editor/click-block-toolbar-button.js.map +1 -0
  21. package/build/editor/get-blocks.js +45 -0
  22. package/build/editor/get-blocks.js.map +1 -0
  23. package/build/editor/get-edited-post-content.js +15 -0
  24. package/build/editor/get-edited-post-content.js.map +1 -0
  25. package/build/editor/index.js +75 -0
  26. package/build/editor/index.js.map +1 -0
  27. package/build/editor/insert-block.js +23 -0
  28. package/build/editor/insert-block.js.map +1 -0
  29. package/build/editor/open-document-settings-sidebar.js +27 -0
  30. package/build/editor/open-document-settings-sidebar.js.map +1 -0
  31. package/build/editor/preview.js +21 -0
  32. package/build/editor/preview.js.map +1 -0
  33. package/build/editor/publish-post.js +45 -0
  34. package/build/editor/publish-post.js.map +1 -0
  35. package/build/editor/save-draft.js +18 -0
  36. package/build/editor/save-draft.js.map +1 -0
  37. package/build/editor/select-blocks.js +28 -0
  38. package/build/editor/select-blocks.js.map +1 -0
  39. package/build/editor/set-content.js +17 -0
  40. package/build/editor/set-content.js.map +1 -0
  41. package/build/editor/set-is-fixed-toolbar.js +18 -0
  42. package/build/editor/set-is-fixed-toolbar.js.map +1 -0
  43. package/build/editor/set-preferences.js +21 -0
  44. package/build/editor/set-preferences.js.map +1 -0
  45. package/build/editor/show-block-toolbar.js +19 -0
  46. package/build/editor/show-block-toolbar.js.map +1 -0
  47. package/build/editor/site-editor.js +44 -0
  48. package/build/editor/site-editor.js.map +1 -0
  49. package/build/editor/switch-editor-tool.js +33 -0
  50. package/build/editor/switch-editor-tool.js.map +1 -0
  51. package/build/editor/switch-to-legacy-canvas.js +18 -0
  52. package/build/editor/switch-to-legacy-canvas.js.map +1 -0
  53. package/build/editor/transform-block-to.js +24 -0
  54. package/build/editor/transform-block-to.js.map +1 -0
  55. package/build/index.js +19 -0
  56. package/build/index.js.map +1 -0
  57. package/build/lighthouse/index.js +61 -0
  58. package/build/lighthouse/index.js.map +1 -0
  59. package/build/metrics/index.js +314 -0
  60. package/build/metrics/index.js.map +1 -0
  61. package/build/page-utils/drag-files.js +119 -0
  62. package/build/page-utils/drag-files.js.map +1 -0
  63. package/build/page-utils/emulate-network-conditions.js +71 -0
  64. package/build/page-utils/emulate-network-conditions.js.map +1 -0
  65. package/build/page-utils/index.js +37 -0
  66. package/build/page-utils/index.js.map +1 -0
  67. package/build/page-utils/is-current-url.js +21 -0
  68. package/build/page-utils/is-current-url.js.map +1 -0
  69. package/build/page-utils/keycodes.js +41 -0
  70. package/build/page-utils/keycodes.js.map +1 -0
  71. package/build/page-utils/press-keys.js +141 -0
  72. package/build/page-utils/press-keys.js.map +1 -0
  73. package/{src → build}/page-utils/set-browser-viewport.js +12 -14
  74. package/build/page-utils/set-browser-viewport.js.map +1 -0
  75. package/build/request-utils/blocks.js +40 -0
  76. package/build/request-utils/blocks.js.map +1 -0
  77. package/build/request-utils/comments.js +52 -0
  78. package/build/request-utils/comments.js.map +1 -0
  79. package/build/request-utils/gutenberg-experiments.js +47 -0
  80. package/build/request-utils/gutenberg-experiments.js.map +1 -0
  81. package/build/request-utils/index.js +196 -0
  82. package/build/request-utils/index.js.map +1 -0
  83. package/build/request-utils/login.js +21 -0
  84. package/build/request-utils/login.js.map +1 -0
  85. package/build/request-utils/media.js +106 -0
  86. package/build/request-utils/media.js.map +1 -0
  87. package/build/request-utils/menus.js +116 -0
  88. package/build/request-utils/menus.js.map +1 -0
  89. package/build/request-utils/pages.js +53 -0
  90. package/build/request-utils/pages.js.map +1 -0
  91. package/build/request-utils/patterns.js +27 -0
  92. package/build/request-utils/patterns.js.map +1 -0
  93. package/build/request-utils/plugins.js +85 -0
  94. package/build/request-utils/plugins.js.map +1 -0
  95. package/build/request-utils/posts.js +42 -0
  96. package/build/request-utils/posts.js.map +1 -0
  97. package/build/request-utils/preferences.js +54 -0
  98. package/build/request-utils/preferences.js.map +1 -0
  99. package/{src/request-utils/records.ts → build/request-utils/records.js} +10 -15
  100. package/build/request-utils/records.js.map +1 -0
  101. package/build/request-utils/rest.js +181 -0
  102. package/build/request-utils/rest.js.map +1 -0
  103. package/build/request-utils/site-settings.js +33 -0
  104. package/build/request-utils/site-settings.js.map +1 -0
  105. package/build/request-utils/templates.js +54 -0
  106. package/build/request-utils/templates.js.map +1 -0
  107. package/build/request-utils/themes.js +69 -0
  108. package/build/request-utils/themes.js.map +1 -0
  109. package/build/request-utils/users.js +81 -0
  110. package/build/request-utils/users.js.map +1 -0
  111. package/build/request-utils/widgets.js +61 -0
  112. package/build/request-utils/widgets.js.map +1 -0
  113. package/build/test.js +189 -0
  114. package/build/test.js.map +1 -0
  115. package/build/types.js +3 -0
  116. package/build/types.js.map +1 -0
  117. package/build-types/admin/index.d.ts.map +1 -1
  118. package/build-types/config.d.ts.map +1 -1
  119. package/build-types/editor/index.d.ts.map +1 -1
  120. package/build-types/lighthouse/index.d.ts.map +1 -1
  121. package/build-types/metrics/index.d.ts.map +1 -1
  122. package/build-types/page-utils/index.d.ts.map +1 -1
  123. package/build-types/page-utils/press-keys.d.ts +1 -1
  124. package/build-types/page-utils/set-browser-viewport.d.ts +22 -12
  125. package/build-types/page-utils/set-browser-viewport.d.ts.map +1 -1
  126. package/build-types/request-utils/index.d.ts +2 -2
  127. package/build-types/request-utils/index.d.ts.map +1 -1
  128. package/build-types/request-utils/pages.d.ts +1 -1
  129. package/build-types/request-utils/pages.d.ts.map +1 -1
  130. package/build-types/request-utils/widgets.d.ts +2 -2
  131. package/build-types/request-utils/widgets.d.ts.map +1 -1
  132. package/build-types/types.d.ts.map +1 -1
  133. package/package.json +8 -5
  134. package/src/admin/create-new-post.ts +0 -47
  135. package/src/admin/edit-post.ts +0 -24
  136. package/src/admin/index.ts +0 -52
  137. package/src/admin/visit-admin-page.ts +0 -43
  138. package/src/admin/visit-site-editor.ts +0 -62
  139. package/src/admin/wait-for-site-editor.ts +0 -52
  140. package/src/config.ts +0 -12
  141. package/src/editor/click-block-options-menu-item.ts +0 -18
  142. package/src/editor/click-block-toolbar-button.ts +0 -21
  143. package/src/editor/get-blocks.ts +0 -75
  144. package/src/editor/get-edited-post-content.ts +0 -19
  145. package/src/editor/index.ts +0 -95
  146. package/src/editor/insert-block.ts +0 -54
  147. package/src/editor/open-document-settings-sidebar.ts +0 -31
  148. package/src/editor/preview.ts +0 -32
  149. package/src/editor/publish-post.ts +0 -51
  150. package/src/editor/save-draft.ts +0 -20
  151. package/src/editor/select-blocks.ts +0 -48
  152. package/src/editor/set-content.ts +0 -24
  153. package/src/editor/set-is-fixed-toolbar.ts +0 -20
  154. package/src/editor/set-preferences.ts +0 -37
  155. package/src/editor/show-block-toolbar.ts +0 -20
  156. package/src/editor/site-editor.ts +0 -55
  157. package/src/editor/switch-editor-tool.ts +0 -34
  158. package/src/editor/switch-to-legacy-canvas.ts +0 -20
  159. package/src/editor/transform-block-to.ts +0 -34
  160. package/src/index.ts +0 -8
  161. package/src/lighthouse/index.ts +0 -75
  162. package/src/metrics/index.ts +0 -441
  163. package/src/page-utils/drag-files.ts +0 -173
  164. package/src/page-utils/emulate-network-conditions.ts +0 -101
  165. package/src/page-utils/index.ts +0 -54
  166. package/src/page-utils/is-current-url.ts +0 -20
  167. package/src/page-utils/keycodes.ts +0 -48
  168. package/src/page-utils/press-keys.ts +0 -195
  169. package/src/request-utils/blocks.ts +0 -58
  170. package/src/request-utils/comments.ts +0 -80
  171. package/src/request-utils/gutenberg-experiments.ts +0 -62
  172. package/src/request-utils/index.ts +0 -222
  173. package/src/request-utils/login.ts +0 -34
  174. package/src/request-utils/media.ts +0 -102
  175. package/src/request-utils/menus.ts +0 -145
  176. package/src/request-utils/pages.ts +0 -75
  177. package/src/request-utils/patterns.ts +0 -31
  178. package/src/request-utils/plugins.ts +0 -103
  179. package/src/request-utils/posts.ts +0 -69
  180. package/src/request-utils/preferences.ts +0 -63
  181. package/src/request-utils/rest.ts +0 -222
  182. package/src/request-utils/site-settings.ts +0 -58
  183. package/src/request-utils/templates.ts +0 -83
  184. package/src/request-utils/themes.ts +0 -110
  185. package/src/request-utils/users.ts +0 -125
  186. package/src/request-utils/widgets.js +0 -68
  187. package/src/test.ts +0 -204
  188. package/src/types.ts +0 -13
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.setupRest = setupRest;
37
+ exports.rest = rest;
38
+ exports.getMaxBatchSize = getMaxBatchSize;
39
+ exports.batchRest = batchRest;
40
+ /**
41
+ * External dependencies
42
+ */
43
+ const fs = __importStar(require("fs/promises"));
44
+ const path_1 = require("path");
45
+ const test_1 = require("@playwright/test");
46
+ /**
47
+ * Internal dependencies
48
+ */
49
+ const config_1 = require("../config");
50
+ function splitRequestsToChunks(requests, chunkSize) {
51
+ const arr = [...requests];
52
+ const cache = [];
53
+ while (arr.length) {
54
+ cache.push(arr.splice(0, chunkSize));
55
+ }
56
+ return cache;
57
+ }
58
+ async function getAPIRootURL(request) {
59
+ // Discover the API root url using link header.
60
+ // See https://developer.wordpress.org/rest-api/using-the-rest-api/discovery/#link-header
61
+ const response = await request.head(config_1.WP_BASE_URL);
62
+ const links = response.headers().link;
63
+ const restLink = links?.match(/<([^>]+)>; rel="https:\/\/api\.w\.org\/"/);
64
+ if (!restLink) {
65
+ throw new Error(`Failed to discover REST API endpoint.
66
+ Link header: ${links}`);
67
+ }
68
+ const [, rootURL] = restLink;
69
+ return rootURL;
70
+ }
71
+ async function setupRest() {
72
+ let nonce = '';
73
+ let rootURL = '';
74
+ // Poll until the REST API is discovered.
75
+ // See https://github.com/WordPress/gutenberg/issues/61627
76
+ await test_1.expect
77
+ .poll(async () => {
78
+ try {
79
+ [nonce, rootURL] = await Promise.all([
80
+ this.login(),
81
+ getAPIRootURL(this.request),
82
+ ]);
83
+ }
84
+ catch (error) {
85
+ // Prints the error if the timeout is reached.
86
+ return error;
87
+ }
88
+ return !!(nonce && rootURL);
89
+ }, {
90
+ message: 'Failed to setup REST API.',
91
+ timeout: 60_000, // 1 minute.
92
+ })
93
+ .toBe(true);
94
+ const { cookies } = await this.request.storageState();
95
+ const storageState = {
96
+ cookies,
97
+ nonce,
98
+ rootURL,
99
+ };
100
+ if (this.storageStatePath) {
101
+ await fs.mkdir((0, path_1.dirname)(this.storageStatePath), { recursive: true });
102
+ await fs.writeFile(this.storageStatePath, JSON.stringify(storageState), 'utf-8');
103
+ }
104
+ this.storageState = storageState;
105
+ return storageState;
106
+ }
107
+ async function rest(options) {
108
+ const { path, ...fetchOptions } = options;
109
+ if (!path) {
110
+ throw new Error('"path" is required to make a REST call');
111
+ }
112
+ if (!this.storageState?.nonce || !this.storageState?.rootURL) {
113
+ await this.setupRest();
114
+ }
115
+ const relativePath = path.startsWith('/') ? path.slice(1) : path;
116
+ const url = this.storageState.rootURL + relativePath;
117
+ try {
118
+ const response = await this.request.fetch(url, {
119
+ ...fetchOptions,
120
+ failOnStatusCode: false,
121
+ headers: {
122
+ 'X-WP-Nonce': this.storageState.nonce,
123
+ ...(fetchOptions.headers || {}),
124
+ },
125
+ });
126
+ const json = await response.json();
127
+ if (!response.ok()) {
128
+ throw json;
129
+ }
130
+ return json;
131
+ }
132
+ catch (error) {
133
+ // Nonce in invalid, retry again with a renewed nonce.
134
+ if (typeof error === 'object' &&
135
+ error !== null &&
136
+ Object.prototype.hasOwnProperty.call(error, 'code') &&
137
+ error.code === 'rest_cookie_invalid_nonce') {
138
+ await this.setupRest();
139
+ return this.rest(options);
140
+ }
141
+ throw error;
142
+ }
143
+ }
144
+ /**
145
+ * Get the maximum batch size for the REST API.
146
+ *
147
+ * @param this
148
+ * @param forceRefetch Force revalidate the cached max batch size.
149
+ */
150
+ async function getMaxBatchSize(forceRefetch = false) {
151
+ if (!forceRefetch && this.maxBatchSize) {
152
+ return this.maxBatchSize;
153
+ }
154
+ const response = await this.rest({
155
+ method: 'OPTIONS',
156
+ path: '/batch/v1',
157
+ });
158
+ this.maxBatchSize = response.endpoints[0].args.requests.maxItems;
159
+ return this.maxBatchSize;
160
+ }
161
+ async function batchRest(requests) {
162
+ const maxBatchSize = await this.getMaxBatchSize();
163
+ if (requests.length > maxBatchSize) {
164
+ const chunks = splitRequestsToChunks(requests, maxBatchSize);
165
+ const chunkResponses = await Promise.all(chunks.map((chunkRequests) => this.batchRest(chunkRequests)));
166
+ return chunkResponses.flat();
167
+ }
168
+ const batchResponses = await this.rest({
169
+ method: 'POST',
170
+ path: '/batch/v1',
171
+ data: {
172
+ requests,
173
+ validation: 'require-all-validate',
174
+ },
175
+ });
176
+ if (batchResponses.failed) {
177
+ throw batchResponses;
178
+ }
179
+ return batchResponses.responses;
180
+ }
181
+ //# sourceMappingURL=rest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest.js","sourceRoot":"","sources":["../../src/request-utils/rest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSiteSettings = getSiteSettings;
4
+ exports.updateSiteSettings = updateSiteSettings;
5
+ /**
6
+ * Get the site settings.
7
+ *
8
+ * @see https://developer.wordpress.org/rest-api/reference/settings/#retrieve-a-site-setting
9
+ *
10
+ * @param this RequestUtils.
11
+ */
12
+ async function getSiteSettings() {
13
+ return await this.rest({
14
+ path: '/wp/v2/settings',
15
+ method: 'GET',
16
+ });
17
+ }
18
+ /**
19
+ * Update the site settings.
20
+ *
21
+ * @see https://developer.wordpress.org/rest-api/reference/settings/#update-a-site-setting
22
+ *
23
+ * @param this RequestUtils.
24
+ * @param siteSettings The partial settings payload to update.
25
+ */
26
+ async function updateSiteSettings(siteSettings) {
27
+ return await this.rest({
28
+ path: '/wp/v2/settings',
29
+ method: 'POST',
30
+ data: siteSettings,
31
+ });
32
+ }
33
+ //# sourceMappingURL=site-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-settings.js","sourceRoot":"","sources":["../../src/request-utils/site-settings.ts"],"names":[],"mappings":";;AAiCA,0CAKC;AAUD,gDASC;AA/BD;;;;;;GAMG;AACI,KAAK,UAAU,eAAe;IACpC,OAAO,MAAM,IAAI,CAAC,IAAI,CAAkB;QACvC,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,KAAK;KACb,CAAE,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,kBAAkB,CAEvC,YAAqC;IAErC,OAAO,MAAM,IAAI,CAAC,IAAI,CAAkB;QACvC,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,YAAY;KAClB,CAAE,CAAC;AACL,CAAC"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteAllTemplates = deleteAllTemplates;
4
+ exports.createTemplate = createTemplate;
5
+ const PATH_MAPPING = {
6
+ wp_template: '/wp/v2/templates',
7
+ wp_template_part: '/wp/v2/template-parts',
8
+ };
9
+ /**
10
+ * Delete all the templates of given type.
11
+ *
12
+ * @param this
13
+ * @param type - Template type to delete.
14
+ */
15
+ async function deleteAllTemplates(type) {
16
+ const path = PATH_MAPPING[type];
17
+ if (!path) {
18
+ throw new Error(`Unsupported template type: ${type}.`);
19
+ }
20
+ const templates = await this.rest({ path });
21
+ for (const template of templates) {
22
+ if (!template?.id || !template?.wp_id) {
23
+ continue;
24
+ }
25
+ try {
26
+ await this.rest({
27
+ method: 'DELETE',
28
+ path: `${path}/${template.id}`,
29
+ params: { force: true },
30
+ });
31
+ }
32
+ catch (responseError) {
33
+ // Disable reason - the error provides valuable feedback about issues with tests.
34
+ // eslint-disable-next-line no-console
35
+ console.warn(`deleteAllTemplates failed to delete template (id: ${template.wp_id}) with the following error`, responseError);
36
+ }
37
+ }
38
+ }
39
+ /**
40
+ * Creates a new template using the REST API.
41
+ *
42
+ * @param this
43
+ * @param type Template type to delete.
44
+ * @param payload Template attributes.
45
+ */
46
+ async function createTemplate(type, payload) {
47
+ const template = await this.rest({
48
+ method: 'POST',
49
+ path: PATH_MAPPING[type],
50
+ params: { ...payload, type, status: 'publish', is_wp_suggestion: true },
51
+ });
52
+ return template;
53
+ }
54
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/request-utils/templates.ts"],"names":[],"mappings":";;AAkFS,gDAAkB;AAAE,wCAAc;AA/D3C,MAAM,YAAY,GAAG;IACpB,WAAW,EAAE,kBAAkB;IAC/B,gBAAgB,EAAE,uBAAuB;CACzC,CAAC;AAEF;;;;;GAKG;AACH,KAAK,UAAU,kBAAkB,CAAsB,IAAkB;IACxE,MAAM,IAAI,GAAG,YAAY,CAAE,IAAI,CAAE,CAAC;IAElC,IAAK,CAAE,IAAI,EAAG,CAAC;QACd,MAAM,IAAI,KAAK,CAAE,8BAA+B,IAAK,GAAG,CAAE,CAAC;IAC5D,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAgB,EAAE,IAAI,EAAE,CAAE,CAAC;IAE5D,KAAM,MAAM,QAAQ,IAAI,SAAS,EAAG,CAAC;QACpC,IAAK,CAAE,QAAQ,EAAE,EAAE,IAAI,CAAE,QAAQ,EAAE,KAAK,EAAG,CAAC;YAC3C,SAAS;QACV,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,IAAI,CAAE;gBAChB,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,GAAI,IAAK,IAAK,QAAQ,CAAC,EAAG,EAAE;gBAClC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;aACvB,CAAE,CAAC;QACL,CAAC;QAAC,OAAQ,aAAa,EAAG,CAAC;YAC1B,iFAAiF;YACjF,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACX,qDAAsD,QAAQ,CAAC,KAAM,4BAA4B,EACjG,aAAa,CACb,CAAC;QACH,CAAC;IACF,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,cAAc,CAE5B,IAAkB,EAClB,OAA8B;IAE9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAc;QAC7C,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,YAAY,CAAE,IAAI,CAAE;QAC1B,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,IAAI,EAAE;KACvE,CAAE,CAAC;IAEJ,OAAO,QAAQ,CAAC;AACjB,CAAC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.activateTheme = activateTheme;
4
+ exports.getCurrentThemeGlobalStylesPostId = getCurrentThemeGlobalStylesPostId;
5
+ exports.getThemeGlobalStylesRevisions = getThemeGlobalStylesRevisions;
6
+ const config_1 = require("../config");
7
+ const THEMES_URL = new URL('wp-admin/themes.php', config_1.WP_BASE_URL).href;
8
+ async function activateTheme(themeSlug) {
9
+ let response = await this.request.get(THEMES_URL);
10
+ const html = await response.text();
11
+ const optionalFolder = '([a-z0-9-]+%2F)?';
12
+ // The `optionalFolder` regex part matches paths with a folder,
13
+ // so it will return the first match, which might contain a folder.
14
+ // First try to honor the included theme slug, that is, without a folder.
15
+ let matchGroup = html.match(`action=activate&amp;stylesheet=${encodeURIComponent(themeSlug)}&amp;_wpnonce=[a-z0-9]+`);
16
+ // If the theme is not found, try to match the theme slug with a folder.
17
+ if (!matchGroup) {
18
+ matchGroup = html.match(`action=activate&amp;stylesheet=${optionalFolder}${encodeURIComponent(themeSlug)}&amp;_wpnonce=[a-z0-9]+`);
19
+ }
20
+ if (!matchGroup) {
21
+ if (html.includes(`data-slug="${themeSlug}"`)) {
22
+ // The theme is already activated.
23
+ return;
24
+ }
25
+ throw new Error(`The theme "${themeSlug}" is not installed`);
26
+ }
27
+ const [activateQuery] = matchGroup;
28
+ const activateLink = THEMES_URL + `?${activateQuery}`.replace(/&amp;/g, '&');
29
+ response = await this.request.get(activateLink);
30
+ await response.dispose();
31
+ }
32
+ // https://developer.wordpress.org/rest-api/reference/themes/#definition
33
+ async function getCurrentThemeGlobalStylesPostId() {
34
+ const themes = await this.rest({
35
+ path: '/wp/v2/themes',
36
+ });
37
+ let themeGlobalStylesId = '';
38
+ if (themes && themes.length) {
39
+ const currentTheme = themes.find(({ status }) => status === 'active');
40
+ const globalStylesURL = currentTheme?._links?.['wp:user-global-styles']?.[0]?.href;
41
+ if (globalStylesURL) {
42
+ // Extract the ID from the URL. The URL format depends on
43
+ // the permalink structure:
44
+ // - Plain: ?rest_route=/wp/v2/global-styles/123
45
+ // - Pretty: /wp-json/wp/v2/global-styles/123
46
+ const idMatch = globalStylesURL.match(/\/wp\/v2\/global-styles\/(\d+)/);
47
+ if (idMatch) {
48
+ themeGlobalStylesId = idMatch[1];
49
+ }
50
+ }
51
+ }
52
+ return themeGlobalStylesId;
53
+ }
54
+ /**
55
+ * Deletes all post revisions using the REST API.
56
+ *
57
+ * @param {} this RequestUtils.
58
+ * @param {string|number} parentId Post attributes.
59
+ */
60
+ async function getThemeGlobalStylesRevisions(parentId) {
61
+ // Lists all global styles revisions.
62
+ return await this.rest({
63
+ path: `/wp/v2/global-styles/${parentId}/revisions`,
64
+ params: {
65
+ per_page: 100,
66
+ },
67
+ });
68
+ }
69
+ //# sourceMappingURL=themes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.js","sourceRoot":"","sources":["../../src/request-utils/themes.ts"],"names":[],"mappings":";;AA0GC,sCAAa;AACb,8EAAiC;AACjC,sEAA6B;AAxG9B,sCAAwC;AAExC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAE,qBAAqB,EAAE,oBAAW,CAAE,CAAC,IAAI,CAAC;AAEtE,KAAK,UAAU,aAAa,CAE3B,SAAiB;IAEjB,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAE,UAAU,CAAE,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,cAAc,GAAG,kBAAkB,CAAC;IAE1C,+DAA+D;IAC/D,mEAAmE;IACnE,yEAAyE;IACzE,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAC1B,kCAAmC,kBAAkB,CACpD,SAAS,CACR,yBAAyB,CAC3B,CAAC;IAEF,wEAAwE;IACxE,IAAK,CAAE,UAAU,EAAG,CAAC;QACpB,UAAU,GAAG,IAAI,CAAC,KAAK,CACtB,kCAAmC,cAAe,GAAI,kBAAkB,CACvE,SAAS,CACR,yBAAyB,CAC3B,CAAC;IACH,CAAC;IAED,IAAK,CAAE,UAAU,EAAG,CAAC;QACpB,IAAK,IAAI,CAAC,QAAQ,CAAE,cAAe,SAAU,GAAG,CAAE,EAAG,CAAC;YACrD,kCAAkC;YAClC,OAAO;QACR,CAAC;QAED,MAAM,IAAI,KAAK,CAAE,cAAe,SAAU,oBAAoB,CAAE,CAAC;IAClE,CAAC;IAED,MAAM,CAAE,aAAa,CAAE,GAAG,UAAU,CAAC;IACrC,MAAM,YAAY,GACjB,UAAU,GAAG,IAAK,aAAc,EAAE,CAAC,OAAO,CAAE,QAAQ,EAAE,GAAG,CAAE,CAAC;IAE7D,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAE,YAAY,CAAE,CAAC;IAElD,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC;AAED,wEAAwE;AACxE,KAAK,UAAU,iCAAiC;IAM/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAiB;QAC9C,IAAI,EAAE,eAAe;KACrB,CAAE,CAAC;IACJ,IAAI,mBAAmB,GAAW,EAAE,CAAC;IACrC,IAAK,MAAM,IAAI,MAAM,CAAC,MAAM,EAAG,CAAC;QAC/B,MAAM,YAAY,GAA0B,MAAM,CAAC,IAAI,CACtD,CAAE,EAAE,MAAM,EAAE,EAAG,EAAE,CAAC,MAAM,KAAK,QAAQ,CACrC,CAAC;QAEF,MAAM,eAAe,GACpB,YAAY,EAAE,MAAM,EAAE,CAAE,uBAAuB,CAAE,EAAE,CAAE,CAAC,CAAE,EAAE,IAAI,CAAC;QAChE,IAAK,eAAe,EAAG,CAAC;YACvB,yDAAyD;YACzD,2BAA2B;YAC3B,gDAAgD;YAChD,6CAA6C;YAC7C,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CACpC,gCAAgC,CAChC,CAAC;YACF,IAAK,OAAO,EAAG,CAAC;gBACf,mBAAmB,GAAG,OAAO,CAAE,CAAC,CAAE,CAAC;YACpC,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,mBAAmB,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,6BAA6B,CAE3C,QAAyB;IAEzB,qCAAqC;IACrC,OAAO,MAAM,IAAI,CAAC,IAAI,CAAgC;QACrD,IAAI,EAAE,wBAAyB,QAAS,YAAY;QACpD,MAAM,EAAE;YACP,QAAQ,EAAE,GAAG;SACb;KACD,CAAE,CAAC;AACL,CAAC"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createUser = createUser;
4
+ exports.deleteAllUsers = deleteAllUsers;
5
+ /**
6
+ * List all users.
7
+ *
8
+ * @see https://developer.wordpress.org/rest-api/reference/users/#list-users
9
+ * @param this
10
+ */
11
+ async function listUsers() {
12
+ const response = await this.rest({
13
+ method: 'GET',
14
+ path: '/wp/v2/users',
15
+ params: {
16
+ per_page: 100,
17
+ },
18
+ });
19
+ return response;
20
+ }
21
+ /**
22
+ * Add a test user.
23
+ *
24
+ * @see https://developer.wordpress.org/rest-api/reference/users/#create-a-user
25
+ * @param this
26
+ * @param user User data to create.
27
+ */
28
+ async function createUser(user) {
29
+ const userData = {
30
+ username: user.username,
31
+ email: user.email,
32
+ };
33
+ if (user.firstName) {
34
+ userData.first_name = user.firstName;
35
+ }
36
+ if (user.lastName) {
37
+ userData.last_name = user.lastName;
38
+ }
39
+ if (user.password) {
40
+ userData.password = user.password;
41
+ }
42
+ if (user.roles) {
43
+ userData.roles = user.roles;
44
+ }
45
+ const response = await this.rest({
46
+ method: 'POST',
47
+ path: '/wp/v2/users',
48
+ data: userData,
49
+ });
50
+ return response;
51
+ }
52
+ /**
53
+ * Delete a user.
54
+ *
55
+ * @see https://developer.wordpress.org/rest-api/reference/users/#delete-a-user
56
+ * @param this
57
+ * @param userId The ID of the user.
58
+ */
59
+ async function deleteUser(userId) {
60
+ const response = await this.rest({
61
+ method: 'DELETE',
62
+ path: `/wp/v2/users/${userId}`,
63
+ params: { force: true, reassign: 1 },
64
+ });
65
+ return response;
66
+ }
67
+ /**
68
+ * Delete all users except main root user.
69
+ *
70
+ * @param this
71
+ */
72
+ async function deleteAllUsers() {
73
+ const users = await listUsers.bind(this)();
74
+ // The users endpoint doesn't support batch request yet.
75
+ const responses = await Promise.all(users
76
+ // Do not delete neither root user nor the current user.
77
+ .filter((user) => user.id !== 1 && user.name !== this.user.username)
78
+ .map((user) => deleteUser.bind(this)(user.id)));
79
+ return responses;
80
+ }
81
+ //# sourceMappingURL=users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/request-utils/users.ts"],"names":[],"mappings":";;AA4HS,gCAAU;AAAE,wCAAc;AA/FnC;;;;;GAKG;AACH,KAAK,UAAU,SAAS;IACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAY;QAC3C,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE;YACP,QAAQ,EAAE,GAAG;SACb;KACD,CAAE,CAAC;IAEJ,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,UAAU,CAAsB,IAAc;IAC5D,MAAM,QAAQ,GAAoB;QACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;KACjB,CAAC;IAEF,IAAK,IAAI,CAAC,SAAS,EAAG,CAAC;QACtB,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;IACtC,CAAC;IAED,IAAK,IAAI,CAAC,QAAQ,EAAG,CAAC;QACrB,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;IACpC,CAAC;IAED,IAAK,IAAI,CAAC,QAAQ,EAAG,CAAC;QACrB,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,IAAK,IAAI,CAAC,KAAK,EAAG,CAAC;QAClB,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAU;QACzC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,QAAQ;KACd,CAAE,CAAC;IAEJ,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,UAAU,CAAsB,MAAc;IAC5D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAE;QACjC,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,gBAAiB,MAAO,EAAE;QAChC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE;KACpC,CAAE,CAAC;IAEJ,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAE,IAAI,CAAE,EAAE,CAAC;IAE7C,wDAAwD;IACxD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,KAAK;QACJ,wDAAwD;SACvD,MAAM,CACN,CAAE,IAAU,EAAG,EAAE,CAChB,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAClD;SACA,GAAG,CAAE,CAAE,IAAU,EAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAE,IAAI,CAAE,CAAE,IAAI,CAAC,EAAE,CAAE,CAAE,CAC7D,CAAC;IAEF,OAAO,SAAS,CAAC;AAClB,CAAC"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteAllWidgets = deleteAllWidgets;
4
+ exports.addWidgetBlock = addWidgetBlock;
5
+ /**
6
+ * Delete all the widgets in the widgets screen.
7
+ *
8
+ * @this {import('./index').RequestUtils}
9
+ */
10
+ async function deleteAllWidgets() {
11
+ const [widgets, sidebars] = await Promise.all([
12
+ this.rest({ path: '/wp/v2/widgets' }),
13
+ this.rest({ path: '/wp/v2/sidebars' }),
14
+ ]);
15
+ await this.batchRest(widgets.map((widget) => ({
16
+ method: 'DELETE',
17
+ path: `/wp/v2/widgets/${widget.id}?force=true`,
18
+ })));
19
+ // The endpoint doesn't support batch requests yet.
20
+ await Promise.all(sidebars.map((sidebar) => this.rest({
21
+ method: 'POST',
22
+ path: `/wp/v2/sidebars/${sidebar.id}`,
23
+ data: { id: sidebar.id, widgets: [] },
24
+ })));
25
+ }
26
+ /**
27
+ * Add a widget block to the widget area.
28
+ *
29
+ * @this {import('./index').RequestUtils}
30
+ * @param {string} serializedBlock The serialized content of the inserted block HTML.
31
+ * @param {string} widgetAreaId The ID of the widget area.
32
+ */
33
+ async function addWidgetBlock(serializedBlock, widgetAreaId) {
34
+ const { id: blockId } = await this.rest({
35
+ method: 'POST',
36
+ path: '/wp/v2/widgets',
37
+ data: {
38
+ id_base: 'block',
39
+ sidebar: widgetAreaId,
40
+ instance: {
41
+ raw: { content: serializedBlock },
42
+ },
43
+ },
44
+ });
45
+ const { widgets } = await this.rest({
46
+ path: `/wp/v2/sidebars/${widgetAreaId}`,
47
+ });
48
+ const updatedWidgets = new Set(widgets);
49
+ // Remove duplicate.
50
+ updatedWidgets.delete(blockId);
51
+ // Add to last block.
52
+ updatedWidgets.add(blockId);
53
+ await this.rest({
54
+ method: 'PUT',
55
+ path: `/wp/v2/sidebars/${widgetAreaId}`,
56
+ data: {
57
+ widgets: [...updatedWidgets],
58
+ },
59
+ });
60
+ }
61
+ //# sourceMappingURL=widgets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgets.js","sourceRoot":"","sources":["../../src/request-utils/widgets.js"],"names":[],"mappings":";;AAKA,4CAuBC;AASD,wCA8BC;AAnED;;;;GAIG;AACI,KAAK,UAAU,gBAAgB;IACrC,MAAM,CAAE,OAAO,EAAE,QAAQ,CAAE,GAAG,MAAM,OAAO,CAAC,GAAG,CAAE;QAChD,IAAI,CAAC,IAAI,CAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAE;QACvC,IAAI,CAAC,IAAI,CAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAE;KACxC,CAAE,CAAC;IAEJ,MAAM,IAAI,CAAC,SAAS,CACnB,OAAO,CAAC,GAAG,CAAE,CAAE,MAAM,EAAG,EAAE,CAAC,CAAE;QAC5B,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,kBAAmB,MAAM,CAAC,EAAG,aAAa;KAChD,CAAE,CAAE,CACL,CAAC;IAEF,mDAAmD;IACnD,MAAM,OAAO,CAAC,GAAG,CAChB,QAAQ,CAAC,GAAG,CAAE,CAAE,OAAO,EAAG,EAAE,CAC3B,IAAI,CAAC,IAAI,CAAE;QACV,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,mBAAoB,OAAO,CAAC,EAAG,EAAE;QACvC,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;KACrC,CAAE,CACH,CACD,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,cAAc,CAAE,eAAe,EAAE,YAAY;IAClE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAE;QACxC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE;YACL,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,YAAY;YACrB,QAAQ,EAAE;gBACT,GAAG,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE;aACjC;SACD;KACD,CAAE,CAAC;IAEJ,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAE;QACpC,IAAI,EAAE,mBAAoB,YAAa,EAAE;KACzC,CAAE,CAAC;IAEJ,MAAM,cAAc,GAAG,IAAI,GAAG,CAAE,OAAO,CAAE,CAAC;IAC1C,oBAAoB;IACpB,cAAc,CAAC,MAAM,CAAE,OAAO,CAAE,CAAC;IACjC,qBAAqB;IACrB,cAAc,CAAC,GAAG,CAAE,OAAO,CAAE,CAAC;IAE9B,MAAM,IAAI,CAAC,IAAI,CAAE;QAChB,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,mBAAoB,YAAa,EAAE;QACzC,IAAI,EAAE;YACL,OAAO,EAAE,CAAE,GAAG,cAAc,CAAE;SAC9B;KACD,CAAE,CAAC;AACL,CAAC"}