@webiny/api-page-builder-import-export 0.0.0-unstable.5e7233243f → 0.0.0-unstable.6e5425ee89
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client.js +6 -16
- package/client.js.map +1 -1
- package/exportPages/combine/index.js +11 -19
- package/exportPages/combine/index.js.map +1 -1
- package/exportPages/process/index.js +19 -35
- package/exportPages/process/index.js.map +1 -1
- package/exportPages/s3Stream.js +4 -25
- package/exportPages/s3Stream.js.map +1 -1
- package/exportPages/utils.js +19 -32
- package/exportPages/utils.js.map +1 -1
- package/exportPages/zipper.js +31 -45
- package/exportPages/zipper.js.map +1 -1
- package/graphql/crud/pageImportExportTasks.crud.js +34 -75
- package/graphql/crud/pageImportExportTasks.crud.js.map +1 -1
- package/graphql/crud/pages.crud.js +22 -40
- package/graphql/crud/pages.crud.js.map +1 -1
- package/graphql/crud.js +1 -6
- package/graphql/crud.js.map +1 -1
- package/graphql/graphql/pageImportExportTasks.gql.js +2 -7
- package/graphql/graphql/pageImportExportTasks.gql.js.map +1 -1
- package/graphql/graphql/pages.gql.js +2 -7
- package/graphql/graphql/pages.gql.js.map +1 -1
- package/graphql/graphql/utils/resolve.js +0 -3
- package/graphql/graphql/utils/resolve.js.map +1 -1
- package/graphql/graphql.js +1 -5
- package/graphql/graphql.js.map +1 -1
- package/graphql/index.js +1 -6
- package/graphql/index.js.map +1 -1
- package/importPages/create/index.js +9 -20
- package/importPages/create/index.js.map +1 -1
- package/importPages/process/index.js +24 -29
- package/importPages/process/index.js.map +1 -1
- package/importPages/utils.js +45 -127
- package/importPages/utils.js.map +1 -1
- package/mockSecurity.js +0 -2
- package/mockSecurity.js.map +1 -1
- package/package.json +27 -27
- package/types.js +0 -5
- package/types.js.map +1 -1
@@ -1,34 +1,22 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
-
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
6
5
|
value: true
|
7
6
|
});
|
8
7
|
exports.default = void 0;
|
9
|
-
|
10
8
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
11
|
-
|
12
9
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
13
|
-
|
14
10
|
var _api = require("@webiny/api");
|
15
|
-
|
16
11
|
var _checkBasePermissions = _interopRequireDefault(require("@webiny/api-page-builder/graphql/crud/utils/checkBasePermissions"));
|
17
|
-
|
18
12
|
var _types = require("../../types");
|
19
|
-
|
20
13
|
var _client = require("../../client");
|
21
|
-
|
22
14
|
var _utils = require("../../importPages/utils");
|
23
|
-
|
24
15
|
var _utils2 = require("../../exportPages/utils");
|
25
|
-
|
26
16
|
var _utils3 = require("@webiny/utils");
|
27
|
-
|
28
17
|
const PERMISSION_NAME = "pb.page";
|
29
18
|
const EXPORT_PAGES_PROCESS_HANDLER = process.env.EXPORT_PAGES_PROCESS_HANDLER;
|
30
19
|
const IMPORT_PAGES_CREATE_HANDLER = process.env.IMPORT_PAGES_CREATE_HANDLER;
|
31
|
-
|
32
20
|
var _default = new _api.ContextPlugin(context => {
|
33
21
|
const importExportCrud = {
|
34
22
|
async importPages({
|
@@ -37,15 +25,15 @@ var _default = new _api.ContextPlugin(context => {
|
|
37
25
|
}) {
|
38
26
|
await (0, _checkBasePermissions.default)(context, PERMISSION_NAME, {
|
39
27
|
rwd: "w"
|
40
|
-
});
|
28
|
+
});
|
41
29
|
|
30
|
+
// Bail out early if category not found
|
42
31
|
const category = await context.pageBuilder.getCategory(categorySlug);
|
43
|
-
|
44
32
|
if (!category) {
|
45
33
|
throw new _handlerGraphql.NotFoundError(`Category with slug "${categorySlug}" not found.`);
|
46
|
-
}
|
47
|
-
|
34
|
+
}
|
48
35
|
|
36
|
+
// Create a task for import page
|
49
37
|
const task = await context.pageBuilder.pageImportExportTask.createTask({
|
50
38
|
status: _types.PageImportExportTaskStatus.PENDING,
|
51
39
|
input: {
|
@@ -58,7 +46,6 @@ var _default = new _api.ContextPlugin(context => {
|
|
58
46
|
* ImportPages
|
59
47
|
* importPages
|
60
48
|
*/
|
61
|
-
|
62
49
|
await (0, _client.invokeHandlerClient)({
|
63
50
|
context,
|
64
51
|
name: IMPORT_PAGES_CREATE_HANDLER,
|
@@ -74,7 +61,6 @@ var _default = new _api.ContextPlugin(context => {
|
|
74
61
|
task
|
75
62
|
};
|
76
63
|
},
|
77
|
-
|
78
64
|
async exportPages({
|
79
65
|
ids: initialPageIds,
|
80
66
|
revisionType,
|
@@ -85,8 +71,8 @@ var _default = new _api.ContextPlugin(context => {
|
|
85
71
|
await (0, _checkBasePermissions.default)(context, PERMISSION_NAME, {
|
86
72
|
rwd: "w"
|
87
73
|
});
|
88
|
-
let pageIds = initialPageIds || [];
|
89
|
-
|
74
|
+
let pageIds = initialPageIds || [];
|
75
|
+
// If no ids are provided then it means we want to export all pages
|
90
76
|
if (!initialPageIds || Array.isArray(initialPageIds) && initialPageIds.length === 0) {
|
91
77
|
pageIds = [];
|
92
78
|
let pages = [];
|
@@ -94,33 +80,32 @@ var _default = new _api.ContextPlugin(context => {
|
|
94
80
|
hasMoreItems: true,
|
95
81
|
cursor: null,
|
96
82
|
totalCount: 0
|
97
|
-
};
|
98
|
-
|
83
|
+
};
|
84
|
+
// Paginate pages
|
99
85
|
while (meta.hasMoreItems) {
|
100
86
|
[pages, meta] = await context.pageBuilder.listLatestPages({
|
101
87
|
after: meta.cursor,
|
102
88
|
where: where,
|
103
89
|
sort: sort,
|
104
90
|
search: search
|
105
|
-
});
|
106
|
-
|
91
|
+
});
|
92
|
+
// Save page ids
|
107
93
|
pages.forEach(page => pageIds.push(page.id));
|
108
94
|
}
|
109
95
|
}
|
110
|
-
|
111
96
|
if (pageIds.length === 0) {
|
112
97
|
throw new _error.default("Cannot export pages - no pages found for provided inputs.", "EMPTY_EXPORT_NO_PAGES_FOUND");
|
113
|
-
}
|
114
|
-
|
98
|
+
}
|
115
99
|
|
100
|
+
// Create the main task for page export.
|
116
101
|
const task = await context.pageBuilder.pageImportExportTask.createTask({
|
117
102
|
status: _types.PageImportExportTaskStatus.PENDING
|
118
103
|
});
|
119
|
-
const exportPagesDataKey = `${_utils2.EXPORT_PAGES_FOLDER_KEY}/${task.id}`;
|
120
|
-
|
104
|
+
const exportPagesDataKey = `${_utils2.EXPORT_PAGES_FOLDER_KEY}/${task.id}`;
|
105
|
+
// For each page create a sub task and invoke the process handler.
|
121
106
|
for (let i = 0; i < pageIds.length; i++) {
|
122
|
-
const pageId = pageIds[i];
|
123
|
-
|
107
|
+
const pageId = pageIds[i];
|
108
|
+
// Create sub task.
|
124
109
|
await context.pageBuilder.pageImportExportTask.createSubTask(task.id, (0, _utils3.zeroPad)(i + 1, 5), {
|
125
110
|
status: _types.PageImportExportTaskStatus.PENDING,
|
126
111
|
input: {
|
@@ -129,9 +114,8 @@ var _default = new _api.ContextPlugin(context => {
|
|
129
114
|
revisionType
|
130
115
|
}
|
131
116
|
});
|
132
|
-
}
|
133
|
-
|
134
|
-
|
117
|
+
}
|
118
|
+
// Update main task status.
|
135
119
|
await context.pageBuilder.pageImportExportTask.updateTask(task.id, {
|
136
120
|
status: _types.PageImportExportTaskStatus.PROCESSING,
|
137
121
|
stats: (0, _utils.initialStats)(pageIds.length),
|
@@ -140,13 +124,13 @@ var _default = new _api.ContextPlugin(context => {
|
|
140
124
|
revisionType
|
141
125
|
}
|
142
126
|
});
|
127
|
+
|
143
128
|
/**
|
144
129
|
* Export Pages
|
145
130
|
* ExportPages
|
146
131
|
* exportPages
|
147
132
|
*/
|
148
133
|
// Invoke handler.
|
149
|
-
|
150
134
|
await (0, _client.invokeHandlerClient)({
|
151
135
|
context,
|
152
136
|
name: EXPORT_PAGES_PROCESS_HANDLER,
|
@@ -161,10 +145,8 @@ var _default = new _api.ContextPlugin(context => {
|
|
161
145
|
task
|
162
146
|
};
|
163
147
|
}
|
164
|
-
|
165
|
-
|
166
|
-
|
148
|
+
};
|
149
|
+
// Modify context
|
167
150
|
context.pageBuilder.pages = importExportCrud;
|
168
151
|
});
|
169
|
-
|
170
152
|
exports.default = _default;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["PERMISSION_NAME","EXPORT_PAGES_PROCESS_HANDLER","process","env","IMPORT_PAGES_CREATE_HANDLER","ContextPlugin","context","importExportCrud","importPages","category","categorySlug","zipFileUrl","checkBasePermissions","rwd","pageBuilder","getCategory","NotFoundError","task","pageImportExportTask","createTask","status","PageImportExportTaskStatus","PENDING","input","invokeHandlerClient","name","payload","identity","security","getIdentity","description","exportPages","ids","initialPageIds","revisionType","where","sort","search","pageIds","Array","isArray","length","pages","meta","hasMoreItems","cursor","totalCount","listLatestPages","after","forEach","page","push","id","WebinyError","exportPagesDataKey","EXPORT_PAGES_FOLDER_KEY","i","pageId","createSubTask","zeroPad","updateTask","PROCESSING","stats","initialStats","taskId","subTaskIndex"],"sources":["pages.crud.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport checkBasePermissions from \"@webiny/api-page-builder/graphql/crud/utils/checkBasePermissions\";\nimport {\n PageImportExportTaskStatus,\n PagesImportExportCrud,\n PbPageImportExportContext\n} from \"~/types\";\nimport { invokeHandlerClient } from \"~/client\";\nimport { Payload as CreateHandlerPayload } from \"~/importPages/create\";\nimport { initialStats } from \"~/importPages/utils\";\nimport { Payload as ExportPagesProcessHandlerPayload } from \"~/exportPages/process\";\nimport { EXPORT_PAGES_FOLDER_KEY } from \"~/exportPages/utils\";\nimport { MetaResponse } from \"@webiny/api-page-builder/types\";\nimport { zeroPad } from \"@webiny/utils\";\n\nconst PERMISSION_NAME = \"pb.page\";\nconst EXPORT_PAGES_PROCESS_HANDLER = process.env.EXPORT_PAGES_PROCESS_HANDLER as string;\nconst IMPORT_PAGES_CREATE_HANDLER = process.env.IMPORT_PAGES_CREATE_HANDLER as string;\n\nexport default new ContextPlugin<PbPageImportExportContext>(context => {\n const importExportCrud: PagesImportExportCrud = {\n async importPages({ category: categorySlug, zipFileUrl }) {\n await checkBasePermissions(context, PERMISSION_NAME, {\n rwd: \"w\"\n });\n\n // Bail out early if category not found\n const category = await context.pageBuilder.getCategory(categorySlug);\n if (!category) {\n throw new NotFoundError(`Category with slug \"${categorySlug}\" not found.`);\n }\n\n // Create a task for import page\n const task = await context.pageBuilder.pageImportExportTask.createTask({\n status: PageImportExportTaskStatus.PENDING,\n input: {\n category: categorySlug,\n zipFileUrl\n }\n });\n /**\n * Import Pages\n * ImportPages\n * importPages\n */\n await invokeHandlerClient<CreateHandlerPayload>({\n context,\n name: IMPORT_PAGES_CREATE_HANDLER,\n payload: {\n category: categorySlug,\n zipFileUrl,\n task,\n identity: context.security.getIdentity()\n },\n description: \"Import Pages - create\"\n });\n\n return {\n task\n };\n },\n\n async exportPages({ ids: initialPageIds, revisionType, where, sort, search }) {\n await checkBasePermissions(context, PERMISSION_NAME, {\n rwd: \"w\"\n });\n let pageIds: string[] = initialPageIds || [];\n // If no ids are provided then it means we want to export all pages\n if (!initialPageIds || (Array.isArray(initialPageIds) && initialPageIds.length === 0)) {\n pageIds = [];\n let pages = [];\n let meta: MetaResponse = {\n hasMoreItems: true,\n cursor: null,\n totalCount: 0\n };\n // Paginate pages\n while (meta.hasMoreItems) {\n [pages, meta] = await context.pageBuilder.listLatestPages({\n after: meta.cursor,\n where: where,\n sort: sort,\n search: search\n });\n // Save page ids\n pages.forEach(page => pageIds.push(page.id));\n }\n }\n\n if (pageIds.length === 0) {\n throw new WebinyError(\n \"Cannot export pages - no pages found for provided inputs.\",\n \"EMPTY_EXPORT_NO_PAGES_FOUND\"\n );\n }\n\n // Create the main task for page export.\n const task = await context.pageBuilder.pageImportExportTask.createTask({\n status: PageImportExportTaskStatus.PENDING\n });\n const exportPagesDataKey = `${EXPORT_PAGES_FOLDER_KEY}/${task.id}`;\n // For each page create a sub task and invoke the process handler.\n for (let i = 0; i < pageIds.length; i++) {\n const pageId = pageIds[i];\n // Create sub task.\n await context.pageBuilder.pageImportExportTask.createSubTask(\n task.id,\n zeroPad(i + 1, 5),\n {\n status: PageImportExportTaskStatus.PENDING,\n input: {\n pageId,\n exportPagesDataKey,\n revisionType\n }\n }\n );\n }\n // Update main task status.\n await context.pageBuilder.pageImportExportTask.updateTask(task.id, {\n status: PageImportExportTaskStatus.PROCESSING,\n stats: initialStats(pageIds.length),\n input: {\n exportPagesDataKey,\n revisionType\n }\n });\n\n /**\n * Export Pages\n * ExportPages\n * exportPages\n */\n // Invoke handler.\n await invokeHandlerClient<ExportPagesProcessHandlerPayload>({\n context,\n name: EXPORT_PAGES_PROCESS_HANDLER,\n payload: {\n taskId: task.id,\n subTaskIndex: 1,\n identity: context.security.getIdentity()\n },\n description: \"Export pages - process\"\n });\n\n return { task };\n }\n };\n // Modify context\n context.pageBuilder.pages = importExportCrud;\n});\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["PERMISSION_NAME","EXPORT_PAGES_PROCESS_HANDLER","process","env","IMPORT_PAGES_CREATE_HANDLER","ContextPlugin","context","importExportCrud","importPages","category","categorySlug","zipFileUrl","checkBasePermissions","rwd","pageBuilder","getCategory","NotFoundError","task","pageImportExportTask","createTask","status","PageImportExportTaskStatus","PENDING","input","invokeHandlerClient","name","payload","identity","security","getIdentity","description","exportPages","ids","initialPageIds","revisionType","where","sort","search","pageIds","Array","isArray","length","pages","meta","hasMoreItems","cursor","totalCount","listLatestPages","after","forEach","page","push","id","WebinyError","exportPagesDataKey","EXPORT_PAGES_FOLDER_KEY","i","pageId","createSubTask","zeroPad","updateTask","PROCESSING","stats","initialStats","taskId","subTaskIndex"],"sources":["pages.crud.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport checkBasePermissions from \"@webiny/api-page-builder/graphql/crud/utils/checkBasePermissions\";\nimport {\n PageImportExportTaskStatus,\n PagesImportExportCrud,\n PbPageImportExportContext\n} from \"~/types\";\nimport { invokeHandlerClient } from \"~/client\";\nimport { Payload as CreateHandlerPayload } from \"~/importPages/create\";\nimport { initialStats } from \"~/importPages/utils\";\nimport { Payload as ExportPagesProcessHandlerPayload } from \"~/exportPages/process\";\nimport { EXPORT_PAGES_FOLDER_KEY } from \"~/exportPages/utils\";\nimport { MetaResponse } from \"@webiny/api-page-builder/types\";\nimport { zeroPad } from \"@webiny/utils\";\n\nconst PERMISSION_NAME = \"pb.page\";\nconst EXPORT_PAGES_PROCESS_HANDLER = process.env.EXPORT_PAGES_PROCESS_HANDLER as string;\nconst IMPORT_PAGES_CREATE_HANDLER = process.env.IMPORT_PAGES_CREATE_HANDLER as string;\n\nexport default new ContextPlugin<PbPageImportExportContext>(context => {\n const importExportCrud: PagesImportExportCrud = {\n async importPages({ category: categorySlug, zipFileUrl }) {\n await checkBasePermissions(context, PERMISSION_NAME, {\n rwd: \"w\"\n });\n\n // Bail out early if category not found\n const category = await context.pageBuilder.getCategory(categorySlug);\n if (!category) {\n throw new NotFoundError(`Category with slug \"${categorySlug}\" not found.`);\n }\n\n // Create a task for import page\n const task = await context.pageBuilder.pageImportExportTask.createTask({\n status: PageImportExportTaskStatus.PENDING,\n input: {\n category: categorySlug,\n zipFileUrl\n }\n });\n /**\n * Import Pages\n * ImportPages\n * importPages\n */\n await invokeHandlerClient<CreateHandlerPayload>({\n context,\n name: IMPORT_PAGES_CREATE_HANDLER,\n payload: {\n category: categorySlug,\n zipFileUrl,\n task,\n identity: context.security.getIdentity()\n },\n description: \"Import Pages - create\"\n });\n\n return {\n task\n };\n },\n\n async exportPages({ ids: initialPageIds, revisionType, where, sort, search }) {\n await checkBasePermissions(context, PERMISSION_NAME, {\n rwd: \"w\"\n });\n let pageIds: string[] = initialPageIds || [];\n // If no ids are provided then it means we want to export all pages\n if (!initialPageIds || (Array.isArray(initialPageIds) && initialPageIds.length === 0)) {\n pageIds = [];\n let pages = [];\n let meta: MetaResponse = {\n hasMoreItems: true,\n cursor: null,\n totalCount: 0\n };\n // Paginate pages\n while (meta.hasMoreItems) {\n [pages, meta] = await context.pageBuilder.listLatestPages({\n after: meta.cursor,\n where: where,\n sort: sort,\n search: search\n });\n // Save page ids\n pages.forEach(page => pageIds.push(page.id));\n }\n }\n\n if (pageIds.length === 0) {\n throw new WebinyError(\n \"Cannot export pages - no pages found for provided inputs.\",\n \"EMPTY_EXPORT_NO_PAGES_FOUND\"\n );\n }\n\n // Create the main task for page export.\n const task = await context.pageBuilder.pageImportExportTask.createTask({\n status: PageImportExportTaskStatus.PENDING\n });\n const exportPagesDataKey = `${EXPORT_PAGES_FOLDER_KEY}/${task.id}`;\n // For each page create a sub task and invoke the process handler.\n for (let i = 0; i < pageIds.length; i++) {\n const pageId = pageIds[i];\n // Create sub task.\n await context.pageBuilder.pageImportExportTask.createSubTask(\n task.id,\n zeroPad(i + 1, 5),\n {\n status: PageImportExportTaskStatus.PENDING,\n input: {\n pageId,\n exportPagesDataKey,\n revisionType\n }\n }\n );\n }\n // Update main task status.\n await context.pageBuilder.pageImportExportTask.updateTask(task.id, {\n status: PageImportExportTaskStatus.PROCESSING,\n stats: initialStats(pageIds.length),\n input: {\n exportPagesDataKey,\n revisionType\n }\n });\n\n /**\n * Export Pages\n * ExportPages\n * exportPages\n */\n // Invoke handler.\n await invokeHandlerClient<ExportPagesProcessHandlerPayload>({\n context,\n name: EXPORT_PAGES_PROCESS_HANDLER,\n payload: {\n taskId: task.id,\n subTaskIndex: 1,\n identity: context.security.getIdentity()\n },\n description: \"Export pages - process\"\n });\n\n return { task };\n }\n };\n // Modify context\n context.pageBuilder.pages = importExportCrud;\n});\n"],"mappings":"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"}
|
package/graphql/crud.js
CHANGED
@@ -1,16 +1,11 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
-
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
6
5
|
value: true
|
7
6
|
});
|
8
7
|
exports.default = void 0;
|
9
|
-
|
10
8
|
var _pages = _interopRequireDefault(require("./crud/pages.crud"));
|
11
|
-
|
12
9
|
var _pageImportExportTasks = _interopRequireDefault(require("./crud/pageImportExportTasks.crud"));
|
13
|
-
|
14
10
|
var _default = params => [_pages.default, (0, _pageImportExportTasks.default)(params)];
|
15
|
-
|
16
11
|
exports.default = _default;
|
package/graphql/crud.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["params","pages","pageImportExportTask"],"sources":["crud.ts"],"sourcesContent":["import pages from \"./crud/pages.crud\";\nimport pageImportExportTask from \"./crud/pageImportExportTasks.crud\";\nimport { PageImportExportPluginsParams } from \"~/graphql/types\";\n\nexport default (params: PageImportExportPluginsParams) => [pages, pageImportExportTask(params)];\n"],"mappings":"
|
1
|
+
{"version":3,"names":["params","pages","pageImportExportTask"],"sources":["crud.ts"],"sourcesContent":["import pages from \"./crud/pages.crud\";\nimport pageImportExportTask from \"./crud/pageImportExportTasks.crud\";\nimport { PageImportExportPluginsParams } from \"~/graphql/types\";\n\nexport default (params: PageImportExportPluginsParams) => [pages, pageImportExportTask(params)];\n"],"mappings":";;;;;;;AAAA;AACA;AAAqE,eAGrDA,MAAqC,IAAK,CAACC,cAAK,EAAE,IAAAC,8BAAoB,EAACF,MAAM,CAAC,CAAC;AAAA"}
|
@@ -1,20 +1,15 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
-
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
6
5
|
value: true
|
7
6
|
});
|
8
7
|
exports.default = void 0;
|
9
|
-
|
10
8
|
var _resolve = _interopRequireDefault(require("./utils/resolve"));
|
11
|
-
|
12
9
|
const plugin = {
|
13
10
|
type: "graphql-schema",
|
14
11
|
schema: {
|
15
|
-
typeDefs:
|
16
|
-
/* GraphQL */
|
17
|
-
`
|
12
|
+
typeDefs: /* GraphQL */`
|
18
13
|
enum PbPageImportExportTaskStatus {
|
19
14
|
pending
|
20
15
|
processing
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["plugin","type","schema","typeDefs","resolvers","PbQuery","getPageImportExportTask","_","args","context","resolve","pageBuilder","pageImportExportTask","getTask","id","listPageImportExportSubTask","listSubTasks","status","limit"],"sources":["pageImportExportTasks.gql.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/types\";\nimport resolve from \"./utils/resolve\";\nimport { PbPageImportExportContext } from \"../types\";\n\nconst plugin: GraphQLSchemaPlugin<PbPageImportExportContext> = {\n type: \"graphql-schema\",\n schema: {\n typeDefs: /* GraphQL */ `\n enum PbPageImportExportTaskStatus {\n pending\n processing\n completed\n failed\n }\n\n type PbPageImportExportTaskStats {\n pending: Int\n processing: Int\n completed: Int\n failed: Int\n total: Int\n }\n\n type PbPageImportExportTask {\n id: ID\n createdOn: DateTime\n createdBy: PbCreatedBy\n status: PbPageImportExportTaskStatus\n data: JSON\n stats: PbPageImportExportTaskStats\n error: JSON\n }\n\n # Response types\n type PbPageImportExportTaskResponse {\n data: PbPageImportExportTask\n error: PbError\n }\n\n type PbPageImportExportTaskListResponse {\n data: [PbPageImportExportTask]\n error: PbError\n }\n\n extend type PbQuery {\n getPageImportExportTask(id: ID!): PbPageImportExportTaskResponse\n listPageImportExportSubTask(\n id: ID!\n status: PbPageImportExportTaskStatus\n limit: Int\n ): PbPageImportExportTaskListResponse\n }\n `,\n resolvers: {\n PbQuery: {\n getPageImportExportTask: async (_, args: any, context) => {\n return resolve(() => {\n return context.pageBuilder.pageImportExportTask.getTask(args.id);\n });\n },\n listPageImportExportSubTask: async (_, args: any, context) => {\n return resolve(() => {\n return context.pageBuilder.pageImportExportTask.listSubTasks(\n args.id,\n args.status,\n args.limit\n );\n });\n }\n }\n }\n }\n};\nexport default plugin;\n"],"mappings":"
|
1
|
+
{"version":3,"names":["plugin","type","schema","typeDefs","resolvers","PbQuery","getPageImportExportTask","_","args","context","resolve","pageBuilder","pageImportExportTask","getTask","id","listPageImportExportSubTask","listSubTasks","status","limit"],"sources":["pageImportExportTasks.gql.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/types\";\nimport resolve from \"./utils/resolve\";\nimport { PbPageImportExportContext } from \"../types\";\n\nconst plugin: GraphQLSchemaPlugin<PbPageImportExportContext> = {\n type: \"graphql-schema\",\n schema: {\n typeDefs: /* GraphQL */ `\n enum PbPageImportExportTaskStatus {\n pending\n processing\n completed\n failed\n }\n\n type PbPageImportExportTaskStats {\n pending: Int\n processing: Int\n completed: Int\n failed: Int\n total: Int\n }\n\n type PbPageImportExportTask {\n id: ID\n createdOn: DateTime\n createdBy: PbCreatedBy\n status: PbPageImportExportTaskStatus\n data: JSON\n stats: PbPageImportExportTaskStats\n error: JSON\n }\n\n # Response types\n type PbPageImportExportTaskResponse {\n data: PbPageImportExportTask\n error: PbError\n }\n\n type PbPageImportExportTaskListResponse {\n data: [PbPageImportExportTask]\n error: PbError\n }\n\n extend type PbQuery {\n getPageImportExportTask(id: ID!): PbPageImportExportTaskResponse\n listPageImportExportSubTask(\n id: ID!\n status: PbPageImportExportTaskStatus\n limit: Int\n ): PbPageImportExportTaskListResponse\n }\n `,\n resolvers: {\n PbQuery: {\n getPageImportExportTask: async (_, args: any, context) => {\n return resolve(() => {\n return context.pageBuilder.pageImportExportTask.getTask(args.id);\n });\n },\n listPageImportExportSubTask: async (_, args: any, context) => {\n return resolve(() => {\n return context.pageBuilder.pageImportExportTask.listSubTasks(\n args.id,\n args.status,\n args.limit\n );\n });\n }\n }\n }\n }\n};\nexport default plugin;\n"],"mappings":";;;;;;;AACA;AAGA,MAAMA,MAAsD,GAAG;EAC3DC,IAAI,EAAE,gBAAgB;EACtBC,MAAM,EAAE;IACJC,QAAQ,EAAE,aAAe;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;IACDC,SAAS,EAAE;MACPC,OAAO,EAAE;QACLC,uBAAuB,EAAE,OAAOC,CAAC,EAAEC,IAAS,EAAEC,OAAO,KAAK;UACtD,OAAO,IAAAC,gBAAO,EAAC,MAAM;YACjB,OAAOD,OAAO,CAACE,WAAW,CAACC,oBAAoB,CAACC,OAAO,CAACL,IAAI,CAACM,EAAE,CAAC;UACpE,CAAC,CAAC;QACN,CAAC;QACDC,2BAA2B,EAAE,OAAOR,CAAC,EAAEC,IAAS,EAAEC,OAAO,KAAK;UAC1D,OAAO,IAAAC,gBAAO,EAAC,MAAM;YACjB,OAAOD,OAAO,CAACE,WAAW,CAACC,oBAAoB,CAACI,YAAY,CACxDR,IAAI,CAACM,EAAE,EACPN,IAAI,CAACS,MAAM,EACXT,IAAI,CAACU,KAAK,CACb;UACL,CAAC,CAAC;QACN;MACJ;IACJ;EACJ;AACJ,CAAC;AAAC,eACalB,MAAM;AAAA"}
|
@@ -1,20 +1,15 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
-
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
6
5
|
value: true
|
7
6
|
});
|
8
7
|
exports.default = void 0;
|
9
|
-
|
10
8
|
var _resolve = _interopRequireDefault(require("./utils/resolve"));
|
11
|
-
|
12
9
|
const plugin = {
|
13
10
|
type: "graphql-schema",
|
14
11
|
schema: {
|
15
|
-
typeDefs:
|
16
|
-
/* GraphQL */
|
17
|
-
`
|
12
|
+
typeDefs: /* GraphQL */`
|
18
13
|
type PbExportPageData {
|
19
14
|
task: PbPageImportExportTask
|
20
15
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["plugin","type","schema","typeDefs","resolvers","PbMutation","exportPages","_","args","context","resolve","pageBuilder","pages","importPages"],"sources":["pages.gql.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/types\";\nimport { ExportPagesParams, ImportPagesParams } from \"~/types\";\nimport { PbPageImportExportContext } from \"../types\";\nimport resolve from \"./utils/resolve\";\n\nconst plugin: GraphQLSchemaPlugin<PbPageImportExportContext> = {\n type: \"graphql-schema\",\n schema: {\n typeDefs: /* GraphQL */ `\n type PbExportPageData {\n task: PbPageImportExportTask\n }\n\n type PbExportPageResponse {\n data: PbExportPageData\n error: PbError\n }\n\n type PbImportPageData {\n task: PbPageImportExportTask\n }\n\n type PbImportPageResponse {\n data: PbImportPageData\n error: PbError\n }\n\n enum PbExportPageRevisionType {\n published\n latest\n }\n\n extend type PbMutation {\n # Export pages\n exportPages(\n ids: [ID!]\n revisionType: PbExportPageRevisionType!\n where: PbListPagesWhereInput\n sort: [PbListPagesSort!]\n search: PbListPagesSearchInput\n ): PbExportPageResponse\n\n # Import pages\n importPages(category: String!, zipFileUrl: String): PbImportPageResponse\n }\n `,\n resolvers: {\n PbMutation: {\n exportPages: async (_, args: any, context) => {\n /**\n * We know that args is ExportPagesParams.\n */\n return resolve(() =>\n context.pageBuilder.pages.exportPages(args as unknown as ExportPagesParams)\n );\n },\n\n importPages: async (_, args: any, context) => {\n /**\n * We know that args is ExportPagesParams.\n */\n return resolve(() =>\n context.pageBuilder.pages.importPages(args as unknown as ImportPagesParams)\n );\n }\n }\n }\n }\n};\n\nexport default plugin;\n"],"mappings":"
|
1
|
+
{"version":3,"names":["plugin","type","schema","typeDefs","resolvers","PbMutation","exportPages","_","args","context","resolve","pageBuilder","pages","importPages"],"sources":["pages.gql.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/types\";\nimport { ExportPagesParams, ImportPagesParams } from \"~/types\";\nimport { PbPageImportExportContext } from \"../types\";\nimport resolve from \"./utils/resolve\";\n\nconst plugin: GraphQLSchemaPlugin<PbPageImportExportContext> = {\n type: \"graphql-schema\",\n schema: {\n typeDefs: /* GraphQL */ `\n type PbExportPageData {\n task: PbPageImportExportTask\n }\n\n type PbExportPageResponse {\n data: PbExportPageData\n error: PbError\n }\n\n type PbImportPageData {\n task: PbPageImportExportTask\n }\n\n type PbImportPageResponse {\n data: PbImportPageData\n error: PbError\n }\n\n enum PbExportPageRevisionType {\n published\n latest\n }\n\n extend type PbMutation {\n # Export pages\n exportPages(\n ids: [ID!]\n revisionType: PbExportPageRevisionType!\n where: PbListPagesWhereInput\n sort: [PbListPagesSort!]\n search: PbListPagesSearchInput\n ): PbExportPageResponse\n\n # Import pages\n importPages(category: String!, zipFileUrl: String): PbImportPageResponse\n }\n `,\n resolvers: {\n PbMutation: {\n exportPages: async (_, args: any, context) => {\n /**\n * We know that args is ExportPagesParams.\n */\n return resolve(() =>\n context.pageBuilder.pages.exportPages(args as unknown as ExportPagesParams)\n );\n },\n\n importPages: async (_, args: any, context) => {\n /**\n * We know that args is ExportPagesParams.\n */\n return resolve(() =>\n context.pageBuilder.pages.importPages(args as unknown as ImportPagesParams)\n );\n }\n }\n }\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;AAGA;AAEA,MAAMA,MAAsD,GAAG;EAC3DC,IAAI,EAAE,gBAAgB;EACtBC,MAAM,EAAE;IACJC,QAAQ,EAAE,aAAe;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;IACDC,SAAS,EAAE;MACPC,UAAU,EAAE;QACRC,WAAW,EAAE,OAAOC,CAAC,EAAEC,IAAS,EAAEC,OAAO,KAAK;UAC1C;AACpB;AACA;UACoB,OAAO,IAAAC,gBAAO,EAAC,MACXD,OAAO,CAACE,WAAW,CAACC,KAAK,CAACN,WAAW,CAACE,IAAI,CAAiC,CAC9E;QACL,CAAC;QAEDK,WAAW,EAAE,OAAON,CAAC,EAAEC,IAAS,EAAEC,OAAO,KAAK;UAC1C;AACpB;AACA;UACoB,OAAO,IAAAC,gBAAO,EAAC,MACXD,OAAO,CAACE,WAAW,CAACC,KAAK,CAACC,WAAW,CAACL,IAAI,CAAiC,CAC9E;QACL;MACJ;IACJ;EACJ;AACJ,CAAC;AAAC,eAEaR,MAAM;AAAA"}
|
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.default = void 0;
|
7
|
-
|
8
7
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
9
|
-
|
10
8
|
var _default = async fn => {
|
11
9
|
try {
|
12
10
|
return new _handlerGraphql.Response(await fn());
|
@@ -14,5 +12,4 @@ var _default = async fn => {
|
|
14
12
|
return new _handlerGraphql.ErrorResponse(e);
|
15
13
|
}
|
16
14
|
};
|
17
|
-
|
18
15
|
exports.default = _default;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["fn","Response","e","ErrorResponse"],"sources":["resolve.ts"],"sourcesContent":["import { Response, ErrorResponse } from \"@webiny/handler-graphql\";\n\nexport default async (fn: () => Promise<any>) => {\n try {\n return new Response(await fn());\n } catch (e) {\n return new ErrorResponse(e);\n }\n};\n"],"mappings":"
|
1
|
+
{"version":3,"names":["fn","Response","e","ErrorResponse"],"sources":["resolve.ts"],"sourcesContent":["import { Response, ErrorResponse } from \"@webiny/handler-graphql\";\n\nexport default async (fn: () => Promise<any>) => {\n try {\n return new Response(await fn());\n } catch (e) {\n return new ErrorResponse(e);\n }\n};\n"],"mappings":";;;;;;AAAA;AAAkE,eAEnD,MAAOA,EAAsB,IAAK;EAC7C,IAAI;IACA,OAAO,IAAIC,wBAAQ,CAAC,MAAMD,EAAE,EAAE,CAAC;EACnC,CAAC,CAAC,OAAOE,CAAC,EAAE;IACR,OAAO,IAAIC,6BAAa,CAACD,CAAC,CAAC;EAC/B;AACJ,CAAC;AAAA"}
|
package/graphql/graphql.js
CHANGED
@@ -1,15 +1,11 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
-
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
6
5
|
value: true
|
7
6
|
});
|
8
7
|
exports.default = void 0;
|
9
|
-
|
10
8
|
var _pages = _interopRequireDefault(require("./graphql/pages.gql"));
|
11
|
-
|
12
9
|
var _pageImportExportTasks = _interopRequireDefault(require("./graphql/pageImportExportTasks.gql"));
|
13
|
-
|
14
10
|
var _default = [_pages.default, _pageImportExportTasks.default];
|
15
11
|
exports.default = _default;
|
package/graphql/graphql.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["pages","pageImportExportTask"],"sources":["graphql.ts"],"sourcesContent":["import pages from \"./graphql/pages.gql\";\nimport pageImportExportTask from \"./graphql/pageImportExportTasks.gql\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/types\";\n\nexport default [pages, pageImportExportTask] as GraphQLSchemaPlugin[];\n"],"mappings":"
|
1
|
+
{"version":3,"names":["pages","pageImportExportTask"],"sources":["graphql.ts"],"sourcesContent":["import pages from \"./graphql/pages.gql\";\nimport pageImportExportTask from \"./graphql/pageImportExportTasks.gql\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql/types\";\n\nexport default [pages, pageImportExportTask] as GraphQLSchemaPlugin[];\n"],"mappings":";;;;;;;AAAA;AACA;AAAuE,eAGxD,CAACA,cAAK,EAAEC,8BAAoB,CAAC;AAAA"}
|
package/graphql/index.js
CHANGED
@@ -1,16 +1,11 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
-
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
6
5
|
value: true
|
7
6
|
});
|
8
7
|
exports.default = void 0;
|
9
|
-
|
10
8
|
var _crud = _interopRequireDefault(require("./crud"));
|
11
|
-
|
12
9
|
var _graphql = _interopRequireDefault(require("./graphql"));
|
13
|
-
|
14
10
|
var _default = params => [(0, _crud.default)(params), _graphql.default];
|
15
|
-
|
16
11
|
exports.default = _default;
|
package/graphql/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["params","crud","graphql"],"sources":["index.ts"],"sourcesContent":["import crud from \"./crud\";\nimport graphql from \"./graphql\";\nimport { PageImportExportPluginsParams } from \"~/graphql/types\";\n\nexport default (params: PageImportExportPluginsParams) => [crud(params), graphql];\n"],"mappings":"
|
1
|
+
{"version":3,"names":["params","crud","graphql"],"sources":["index.ts"],"sourcesContent":["import crud from \"./crud\";\nimport graphql from \"./graphql\";\nimport { PageImportExportPluginsParams } from \"~/graphql/types\";\n\nexport default (params: PageImportExportPluginsParams) => [crud(params), graphql];\n"],"mappings":";;;;;;;AAAA;AACA;AAAgC,eAGhBA,MAAqC,IAAK,CAAC,IAAAC,aAAI,EAACD,MAAM,CAAC,EAAEE,gBAAO,CAAC;AAAA"}
|
@@ -4,19 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.default = void 0;
|
7
|
-
|
8
7
|
var _types = require("../../types");
|
9
|
-
|
10
8
|
var _utils = require("../utils");
|
11
|
-
|
12
9
|
var _client = require("../../client");
|
13
|
-
|
14
10
|
var _mockSecurity = require("../../mockSecurity");
|
15
|
-
|
16
11
|
var _utils2 = require("@webiny/utils");
|
17
|
-
|
18
12
|
var _handlerAws = require("@webiny/handler-aws");
|
19
|
-
|
20
13
|
/**
|
21
14
|
* Handles the import page workflow.
|
22
15
|
*/
|
@@ -35,10 +28,8 @@ var _default = configuration => {
|
|
35
28
|
zipFileUrl,
|
36
29
|
identity
|
37
30
|
} = payload;
|
38
|
-
|
39
31
|
try {
|
40
32
|
log("RUNNING Import Pages Create");
|
41
|
-
|
42
33
|
if (!zipFileUrl) {
|
43
34
|
return {
|
44
35
|
data: null,
|
@@ -47,14 +38,14 @@ var _default = configuration => {
|
|
47
38
|
}
|
48
39
|
};
|
49
40
|
}
|
41
|
+
(0, _mockSecurity.mockSecurity)(identity, context);
|
42
|
+
// Step 1: Read the zip file
|
43
|
+
const pageImportDataList = await (0, _utils.readExtractAndUploadZipFileContents)(zipFileUrl);
|
50
44
|
|
51
|
-
|
52
|
-
|
53
|
-
const pageImportDataList = await (0, _utils.readExtractAndUploadZipFileContents)(zipFileUrl); // For each page create a subtask and invoke the process handler
|
54
|
-
|
45
|
+
// For each page create a subtask and invoke the process handler
|
55
46
|
for (let i = 0; i < pageImportDataList.length; i++) {
|
56
|
-
const pagesDirMap = pageImportDataList[i];
|
57
|
-
|
47
|
+
const pagesDirMap = pageImportDataList[i];
|
48
|
+
// Create sub task
|
58
49
|
const subtask = await pageBuilder.pageImportExportTask.createSubTask(task.id, (0, _utils2.zeroPad)(i + 1, 5), {
|
59
50
|
status: _types.PageImportExportTaskStatus.PENDING,
|
60
51
|
data: {
|
@@ -67,9 +58,8 @@ var _default = configuration => {
|
|
67
58
|
}
|
68
59
|
});
|
69
60
|
log(`Added SUB_TASK "${subtask.id}" to queue.`);
|
70
|
-
}
|
71
|
-
|
72
|
-
|
61
|
+
}
|
62
|
+
// Update main task status
|
73
63
|
await pageBuilder.pageImportExportTask.updateTask(task.id, {
|
74
64
|
status: _types.PageImportExportTaskStatus.PROCESSING,
|
75
65
|
stats: (0, _utils.initialStats)(pageImportDataList.length)
|
@@ -87,6 +77,7 @@ var _default = configuration => {
|
|
87
77
|
});
|
88
78
|
} catch (e) {
|
89
79
|
log("[IMPORT_PAGES_CREATE] Error => ", e);
|
80
|
+
|
90
81
|
/**
|
91
82
|
* In case of error, we'll update the task status to "failed",
|
92
83
|
* so that, client can show notify the user appropriately.
|
@@ -107,12 +98,10 @@ var _default = configuration => {
|
|
107
98
|
}
|
108
99
|
};
|
109
100
|
}
|
110
|
-
|
111
101
|
return {
|
112
102
|
data: "",
|
113
103
|
error: null
|
114
104
|
};
|
115
105
|
});
|
116
106
|
};
|
117
|
-
|
118
107
|
exports.default = _default;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["configuration","createRawEventHandler","payload","context","log","console","pageBuilder","task","category","zipFileUrl","identity","data","error","message","mockSecurity","pageImportDataList","readExtractAndUploadZipFileContents","i","length","pagesDirMap","subtask","pageImportExportTask","createSubTask","id","zeroPad","status","PageImportExportTaskStatus","PENDING","pageKey","key","input","fileUploadsData","updateTask","PROCESSING","stats","initialStats","invokeHandlerClient","name","handlers","process","taskId","subTaskIndex","security","getIdentity","description","e","FAILED","code"],"sources":["index.ts"],"sourcesContent":["import {\n PageImportExportTask,\n PageImportExportTaskStatus,\n PbPageImportExportContext\n} from \"~/types\";\nimport { initialStats, readExtractAndUploadZipFileContents } from \"~/importPages/utils\";\nimport { invokeHandlerClient } from \"~/client\";\nimport { Payload as ProcessPayload } from \"../process\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { mockSecurity } from \"~/mockSecurity\";\nimport { zeroPad } from \"@webiny/utils\";\nimport { createRawEventHandler } from \"@webiny/handler-aws\";\n\ninterface Configuration {\n handlers: {\n process: string;\n };\n}\n\nexport interface Payload {\n category: string;\n zipFileUrl: string;\n task: PageImportExportTask;\n identity: SecurityIdentity;\n}\nexport interface Response {\n data: string | null;\n error: Partial<Error> | null;\n}\n\n/**\n * Handles the import page workflow.\n */\nexport default (configuration: Configuration) => {\n return createRawEventHandler<Payload, PbPageImportExportContext, Response>(\n async ({ payload, context }) => {\n const log = console.log;\n\n const { pageBuilder } = context;\n const { task, category, zipFileUrl, identity } = payload;\n try {\n log(\"RUNNING Import Pages Create\");\n if (!zipFileUrl) {\n return {\n data: null,\n error: {\n message: `Missing \"zipFileUrl\"!`\n }\n };\n }\n mockSecurity(identity, context);\n // Step 1: Read the zip file\n const pageImportDataList = await readExtractAndUploadZipFileContents(zipFileUrl);\n\n // For each page create a subtask and invoke the process handler\n for (let i = 0; i < pageImportDataList.length; i++) {\n const pagesDirMap = pageImportDataList[i];\n // Create sub task\n const subtask = await pageBuilder.pageImportExportTask.createSubTask(\n task.id,\n zeroPad(i + 1, 5),\n {\n status: PageImportExportTaskStatus.PENDING,\n data: {\n pageKey: pagesDirMap.key,\n category,\n zipFileUrl,\n input: {\n fileUploadsData: pagesDirMap\n }\n }\n }\n );\n log(`Added SUB_TASK \"${subtask.id}\" to queue.`);\n }\n // Update main task status\n await pageBuilder.pageImportExportTask.updateTask(task.id, {\n status: PageImportExportTaskStatus.PROCESSING,\n stats: initialStats(pageImportDataList.length)\n });\n\n await invokeHandlerClient<ProcessPayload>({\n context,\n name: configuration.handlers.process,\n payload: {\n taskId: task.id,\n // Execute \"Process\" for the first sub task.\n subTaskIndex: 1,\n identity: context.security.getIdentity()\n },\n description: \"Import pages - process - first\"\n });\n } catch (e) {\n log(\"[IMPORT_PAGES_CREATE] Error => \", e);\n\n /**\n * In case of error, we'll update the task status to \"failed\",\n * so that, client can show notify the user appropriately.\n */\n\n await pageBuilder.pageImportExportTask.updateTask(task.id, {\n status: PageImportExportTaskStatus.FAILED,\n error: {\n name: e.name,\n message: e.message,\n code: e.code || \"EXPORT_FAILED\"\n }\n });\n\n return {\n data: null,\n error: {\n message: e.message\n }\n };\n }\n\n return {\n data: \"\",\n error: null\n };\n }\n );\n};\n"],"mappings":"
|
1
|
+
{"version":3,"names":["configuration","createRawEventHandler","payload","context","log","console","pageBuilder","task","category","zipFileUrl","identity","data","error","message","mockSecurity","pageImportDataList","readExtractAndUploadZipFileContents","i","length","pagesDirMap","subtask","pageImportExportTask","createSubTask","id","zeroPad","status","PageImportExportTaskStatus","PENDING","pageKey","key","input","fileUploadsData","updateTask","PROCESSING","stats","initialStats","invokeHandlerClient","name","handlers","process","taskId","subTaskIndex","security","getIdentity","description","e","FAILED","code"],"sources":["index.ts"],"sourcesContent":["import {\n PageImportExportTask,\n PageImportExportTaskStatus,\n PbPageImportExportContext\n} from \"~/types\";\nimport { initialStats, readExtractAndUploadZipFileContents } from \"~/importPages/utils\";\nimport { invokeHandlerClient } from \"~/client\";\nimport { Payload as ProcessPayload } from \"../process\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { mockSecurity } from \"~/mockSecurity\";\nimport { zeroPad } from \"@webiny/utils\";\nimport { createRawEventHandler } from \"@webiny/handler-aws\";\n\ninterface Configuration {\n handlers: {\n process: string;\n };\n}\n\nexport interface Payload {\n category: string;\n zipFileUrl: string;\n task: PageImportExportTask;\n identity: SecurityIdentity;\n}\nexport interface Response {\n data: string | null;\n error: Partial<Error> | null;\n}\n\n/**\n * Handles the import page workflow.\n */\nexport default (configuration: Configuration) => {\n return createRawEventHandler<Payload, PbPageImportExportContext, Response>(\n async ({ payload, context }) => {\n const log = console.log;\n\n const { pageBuilder } = context;\n const { task, category, zipFileUrl, identity } = payload;\n try {\n log(\"RUNNING Import Pages Create\");\n if (!zipFileUrl) {\n return {\n data: null,\n error: {\n message: `Missing \"zipFileUrl\"!`\n }\n };\n }\n mockSecurity(identity, context);\n // Step 1: Read the zip file\n const pageImportDataList = await readExtractAndUploadZipFileContents(zipFileUrl);\n\n // For each page create a subtask and invoke the process handler\n for (let i = 0; i < pageImportDataList.length; i++) {\n const pagesDirMap = pageImportDataList[i];\n // Create sub task\n const subtask = await pageBuilder.pageImportExportTask.createSubTask(\n task.id,\n zeroPad(i + 1, 5),\n {\n status: PageImportExportTaskStatus.PENDING,\n data: {\n pageKey: pagesDirMap.key,\n category,\n zipFileUrl,\n input: {\n fileUploadsData: pagesDirMap\n }\n }\n }\n );\n log(`Added SUB_TASK \"${subtask.id}\" to queue.`);\n }\n // Update main task status\n await pageBuilder.pageImportExportTask.updateTask(task.id, {\n status: PageImportExportTaskStatus.PROCESSING,\n stats: initialStats(pageImportDataList.length)\n });\n\n await invokeHandlerClient<ProcessPayload>({\n context,\n name: configuration.handlers.process,\n payload: {\n taskId: task.id,\n // Execute \"Process\" for the first sub task.\n subTaskIndex: 1,\n identity: context.security.getIdentity()\n },\n description: \"Import pages - process - first\"\n });\n } catch (e) {\n log(\"[IMPORT_PAGES_CREATE] Error => \", e);\n\n /**\n * In case of error, we'll update the task status to \"failed\",\n * so that, client can show notify the user appropriately.\n */\n\n await pageBuilder.pageImportExportTask.updateTask(task.id, {\n status: PageImportExportTaskStatus.FAILED,\n error: {\n name: e.name,\n message: e.message,\n code: e.code || \"EXPORT_FAILED\"\n }\n });\n\n return {\n data: null,\n error: {\n message: e.message\n }\n };\n }\n\n return {\n data: \"\",\n error: null\n };\n }\n );\n};\n"],"mappings":"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"}
|