@webiny/api-prerendering-service-so-ddb 0.0.0-mt-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.
- package/LICENSE +21 -0
- package/README.md +5 -0
- package/definitions/queueJob.d.ts +8 -0
- package/definitions/queueJob.js +47 -0
- package/definitions/render.d.ts +8 -0
- package/definitions/render.js +56 -0
- package/definitions/table.d.ts +8 -0
- package/definitions/table.js +25 -0
- package/definitions/tagUrlLink.d.ts +8 -0
- package/definitions/tagUrlLink.js +53 -0
- package/index.d.ts +2 -0
- package/index.js +89 -0
- package/operations/queueJob/index.d.ts +6 -0
- package/operations/queueJob/index.js +115 -0
- package/operations/render/index.d.ts +16 -0
- package/operations/render/index.js +336 -0
- package/package.json +59 -0
- package/types.d.ts +28 -0
- package/types.js +14 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Webiny
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# @webiny/api-prerendering-service
|
|
2
|
+
[](https://www.npmjs.com/package/@webiny/api-prerendering-service)
|
|
3
|
+
[](https://www.npmjs.com/package/@webiny/api-prerendering-service)
|
|
4
|
+
[](https://github.com/prettier/prettier)
|
|
5
|
+
[](http://makeapullrequest.com)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.createQueueJobEntity = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _dynamodbToolbox = require("dynamodb-toolbox");
|
|
13
|
+
|
|
14
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
15
|
+
|
|
16
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
17
|
+
|
|
18
|
+
const createQueueJobEntity = params => {
|
|
19
|
+
const {
|
|
20
|
+
entityName,
|
|
21
|
+
attributes,
|
|
22
|
+
table
|
|
23
|
+
} = params;
|
|
24
|
+
return new _dynamodbToolbox.Entity({
|
|
25
|
+
name: entityName,
|
|
26
|
+
table,
|
|
27
|
+
attributes: _objectSpread({
|
|
28
|
+
PK: {
|
|
29
|
+
partitionKey: true
|
|
30
|
+
},
|
|
31
|
+
SK: {
|
|
32
|
+
sortKey: true
|
|
33
|
+
},
|
|
34
|
+
TYPE: {
|
|
35
|
+
type: "string"
|
|
36
|
+
},
|
|
37
|
+
id: {
|
|
38
|
+
type: "string"
|
|
39
|
+
},
|
|
40
|
+
args: {
|
|
41
|
+
type: "map"
|
|
42
|
+
}
|
|
43
|
+
}, attributes || {})
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
exports.createQueueJobEntity = createQueueJobEntity;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.createRenderEntity = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _dynamodbToolbox = require("dynamodb-toolbox");
|
|
13
|
+
|
|
14
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
15
|
+
|
|
16
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
17
|
+
|
|
18
|
+
const createRenderEntity = params => {
|
|
19
|
+
const {
|
|
20
|
+
entityName,
|
|
21
|
+
attributes,
|
|
22
|
+
table
|
|
23
|
+
} = params;
|
|
24
|
+
return new _dynamodbToolbox.Entity({
|
|
25
|
+
name: entityName,
|
|
26
|
+
table,
|
|
27
|
+
attributes: _objectSpread({
|
|
28
|
+
PK: {
|
|
29
|
+
partitionKey: true
|
|
30
|
+
},
|
|
31
|
+
SK: {
|
|
32
|
+
sortKey: true
|
|
33
|
+
},
|
|
34
|
+
TYPE: {
|
|
35
|
+
type: "string"
|
|
36
|
+
},
|
|
37
|
+
namespace: {
|
|
38
|
+
type: "string"
|
|
39
|
+
},
|
|
40
|
+
url: {
|
|
41
|
+
type: "string"
|
|
42
|
+
},
|
|
43
|
+
args: {
|
|
44
|
+
type: "map"
|
|
45
|
+
},
|
|
46
|
+
configuration: {
|
|
47
|
+
type: "map"
|
|
48
|
+
},
|
|
49
|
+
files: {
|
|
50
|
+
type: "list"
|
|
51
|
+
}
|
|
52
|
+
}, attributes || {})
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
exports.createRenderEntity = createRenderEntity;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DocumentClient } from "aws-sdk/clients/dynamodb";
|
|
2
|
+
import { Table } from "dynamodb-toolbox";
|
|
3
|
+
import { TableModifier } from "../types";
|
|
4
|
+
export interface Params {
|
|
5
|
+
table?: TableModifier;
|
|
6
|
+
documentClient: DocumentClient;
|
|
7
|
+
}
|
|
8
|
+
export declare const createTable: (params: Params) => Table;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createTable = void 0;
|
|
7
|
+
|
|
8
|
+
var _dynamodbToolbox = require("dynamodb-toolbox");
|
|
9
|
+
|
|
10
|
+
const createTable = params => {
|
|
11
|
+
const {
|
|
12
|
+
table,
|
|
13
|
+
documentClient
|
|
14
|
+
} = params;
|
|
15
|
+
const tableConfig = {
|
|
16
|
+
name: process.env.DB_TABLE_PRERENDERING_SERVICE || process.env.DB_TABLE,
|
|
17
|
+
partitionKey: "PK",
|
|
18
|
+
sortKey: "SK",
|
|
19
|
+
DocumentClient: documentClient
|
|
20
|
+
};
|
|
21
|
+
const config = typeof table === "function" ? table(tableConfig) : tableConfig;
|
|
22
|
+
return new _dynamodbToolbox.Table(config);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
exports.createTable = createTable;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.createTagUrlLinkEntity = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _dynamodbToolbox = require("dynamodb-toolbox");
|
|
13
|
+
|
|
14
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
15
|
+
|
|
16
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
17
|
+
|
|
18
|
+
const createTagUrlLinkEntity = params => {
|
|
19
|
+
const {
|
|
20
|
+
entityName,
|
|
21
|
+
attributes,
|
|
22
|
+
table
|
|
23
|
+
} = params;
|
|
24
|
+
return new _dynamodbToolbox.Entity({
|
|
25
|
+
name: entityName,
|
|
26
|
+
table,
|
|
27
|
+
attributes: _objectSpread({
|
|
28
|
+
PK: {
|
|
29
|
+
partitionKey: true
|
|
30
|
+
},
|
|
31
|
+
SK: {
|
|
32
|
+
sortKey: true
|
|
33
|
+
},
|
|
34
|
+
TYPE: {
|
|
35
|
+
type: "string"
|
|
36
|
+
},
|
|
37
|
+
namespace: {
|
|
38
|
+
type: "string"
|
|
39
|
+
},
|
|
40
|
+
url: {
|
|
41
|
+
type: "string"
|
|
42
|
+
},
|
|
43
|
+
value: {
|
|
44
|
+
type: "string"
|
|
45
|
+
},
|
|
46
|
+
key: {
|
|
47
|
+
type: "string"
|
|
48
|
+
}
|
|
49
|
+
}, attributes || {})
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
exports.createTagUrlLinkEntity = createTagUrlLinkEntity;
|
package/index.d.ts
ADDED
package/index.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.createPrerenderingServiceStorageOperations = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
13
|
+
|
|
14
|
+
var _types = require("./types");
|
|
15
|
+
|
|
16
|
+
var _table = require("./definitions/table");
|
|
17
|
+
|
|
18
|
+
var _render = require("./definitions/render");
|
|
19
|
+
|
|
20
|
+
var _queueJob = require("./definitions/queueJob");
|
|
21
|
+
|
|
22
|
+
var _render2 = require("./operations/render");
|
|
23
|
+
|
|
24
|
+
var _queueJob2 = require("./operations/queueJob");
|
|
25
|
+
|
|
26
|
+
var _tagUrlLink = require("./definitions/tagUrlLink");
|
|
27
|
+
|
|
28
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
29
|
+
|
|
30
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
31
|
+
|
|
32
|
+
const reservedFields = ["PK", "SK", "index", "data", "TYPE", "__type", "GSI1_PK", "GSI1_SK"];
|
|
33
|
+
|
|
34
|
+
const isReserved = name => {
|
|
35
|
+
if (reservedFields.includes(name) === false) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
throw new _error.default(`Attribute name "${name}" is not allowed.`, "ATTRIBUTE_NOT_ALLOWED", {
|
|
40
|
+
name
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const createPrerenderingServiceStorageOperations = params => {
|
|
45
|
+
const {
|
|
46
|
+
attributes = {},
|
|
47
|
+
table,
|
|
48
|
+
documentClient
|
|
49
|
+
} = params;
|
|
50
|
+
|
|
51
|
+
if (attributes) {
|
|
52
|
+
Object.values(attributes).forEach(attrs => {
|
|
53
|
+
Object.keys(attrs).forEach(isReserved);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const tableInstance = (0, _table.createTable)({
|
|
58
|
+
table,
|
|
59
|
+
documentClient
|
|
60
|
+
});
|
|
61
|
+
const entities = {
|
|
62
|
+
render: (0, _render.createRenderEntity)({
|
|
63
|
+
entityName: _types.ENTITIES.RENDER,
|
|
64
|
+
table: tableInstance,
|
|
65
|
+
attributes: attributes[_types.ENTITIES.RENDER]
|
|
66
|
+
}),
|
|
67
|
+
queueJob: (0, _queueJob.createQueueJobEntity)({
|
|
68
|
+
entityName: _types.ENTITIES.QUEUE_JOB,
|
|
69
|
+
table: tableInstance,
|
|
70
|
+
attributes: attributes[_types.ENTITIES.QUEUE_JOB]
|
|
71
|
+
}),
|
|
72
|
+
tagUrlLink: (0, _tagUrlLink.createTagUrlLinkEntity)({
|
|
73
|
+
entityName: _types.ENTITIES.TAG_URL_LINK,
|
|
74
|
+
table: tableInstance,
|
|
75
|
+
attributes: attributes[_types.ENTITIES.TAG_URL_LINK]
|
|
76
|
+
})
|
|
77
|
+
};
|
|
78
|
+
return _objectSpread(_objectSpread({
|
|
79
|
+
getTable: () => tableInstance,
|
|
80
|
+
getEntities: () => entities
|
|
81
|
+
}, (0, _render2.createRenderStorageOperations)({
|
|
82
|
+
entity: entities.render,
|
|
83
|
+
tagUrlLinkEntity: entities.tagUrlLink
|
|
84
|
+
})), (0, _queueJob2.createQueueJobStorageOperations)({
|
|
85
|
+
entity: entities.queueJob
|
|
86
|
+
}));
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
exports.createPrerenderingServiceStorageOperations = createPrerenderingServiceStorageOperations;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { PrerenderingServiceQueueJobStorageOperations } from "@webiny/api-prerendering-service/types";
|
|
2
|
+
import { Entity } from "dynamodb-toolbox";
|
|
3
|
+
export interface Params {
|
|
4
|
+
entity: Entity<any>;
|
|
5
|
+
}
|
|
6
|
+
export declare const createQueueJobStorageOperations: (params: Params) => PrerenderingServiceQueueJobStorageOperations;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.createQueueJobStorageOperations = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
13
|
+
|
|
14
|
+
var _batchWrite = require("@webiny/db-dynamodb/utils/batchWrite");
|
|
15
|
+
|
|
16
|
+
var _query = require("@webiny/db-dynamodb/utils/query");
|
|
17
|
+
|
|
18
|
+
var _cleanup = require("@webiny/db-dynamodb/utils/cleanup");
|
|
19
|
+
|
|
20
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
21
|
+
|
|
22
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
23
|
+
|
|
24
|
+
const createQueueJobStorageOperations = params => {
|
|
25
|
+
const {
|
|
26
|
+
entity
|
|
27
|
+
} = params;
|
|
28
|
+
|
|
29
|
+
const createQueueJobPartitionKey = () => {
|
|
30
|
+
return "PS#Q#JOB";
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const createQueueJobSortKey = id => {
|
|
34
|
+
return id;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const createQueueJobType = () => {
|
|
38
|
+
return "ps.queue.job";
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const createQueueJob = async params => {
|
|
42
|
+
const {
|
|
43
|
+
queueJob
|
|
44
|
+
} = params;
|
|
45
|
+
const keys = {
|
|
46
|
+
PK: createQueueJobPartitionKey(),
|
|
47
|
+
SK: createQueueJobSortKey(queueJob.id)
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
await entity.put(_objectSpread(_objectSpread(_objectSpread({}, queueJob), keys), {}, {
|
|
52
|
+
TYPE: createQueueJobType()
|
|
53
|
+
}));
|
|
54
|
+
return queueJob;
|
|
55
|
+
} catch (ex) {
|
|
56
|
+
throw new _error.default(ex.message || "Could not create render record.", ex.code || "CREATE_RENDER_ERROR", {
|
|
57
|
+
keys,
|
|
58
|
+
queueJob
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}; // eslint-disable-next-line
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
const listQueueJobs = async _ => {
|
|
65
|
+
const queryAllParams = {
|
|
66
|
+
entity,
|
|
67
|
+
partitionKey: createQueueJobPartitionKey(),
|
|
68
|
+
options: {
|
|
69
|
+
gte: " "
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
try {
|
|
74
|
+
const results = await (0, _query.queryAll)(queryAllParams);
|
|
75
|
+
return (0, _cleanup.cleanupItems)(entity, results);
|
|
76
|
+
} catch (ex) {
|
|
77
|
+
throw new _error.default(ex.message || "Could not list queue jobs records.", ex.code || "LIST_QUEUE_JOBS_ERROR", {
|
|
78
|
+
partitionKey: queryAllParams.partitionKey,
|
|
79
|
+
options: queryAllParams.options
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const deleteQueueJobs = async params => {
|
|
85
|
+
const {
|
|
86
|
+
queueJobs
|
|
87
|
+
} = params;
|
|
88
|
+
const items = queueJobs.map(job => {
|
|
89
|
+
return entity.deleteBatch({
|
|
90
|
+
PK: createQueueJobPartitionKey(),
|
|
91
|
+
SK: createQueueJobSortKey(job.id)
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
try {
|
|
96
|
+
await (0, _batchWrite.batchWriteAll)({
|
|
97
|
+
table: entity.table,
|
|
98
|
+
items
|
|
99
|
+
});
|
|
100
|
+
return queueJobs;
|
|
101
|
+
} catch (ex) {
|
|
102
|
+
throw new _error.default(ex.message || "Could not delete queue jobs records.", ex.code || "DELETE_QUEUE_JOBS_ERROR", {
|
|
103
|
+
queueJobs
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
createQueueJob,
|
|
110
|
+
deleteQueueJobs,
|
|
111
|
+
listQueueJobs
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
exports.createQueueJobStorageOperations = createQueueJobStorageOperations;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PrerenderingServiceRenderStorageOperations } from "@webiny/api-prerendering-service/types";
|
|
2
|
+
import { Entity } from "dynamodb-toolbox";
|
|
3
|
+
import { Tag } from "@webiny/api-prerendering-service/queue/add/types";
|
|
4
|
+
export interface Params {
|
|
5
|
+
entity: Entity<any>;
|
|
6
|
+
tagUrlLinkEntity: Entity<any>;
|
|
7
|
+
}
|
|
8
|
+
export interface CreateTagUrlLinkPartitionKeyParams {
|
|
9
|
+
namespace: string;
|
|
10
|
+
tag: Pick<Tag, "key">;
|
|
11
|
+
}
|
|
12
|
+
export interface CreateTagUrlLinkSortKeyParams {
|
|
13
|
+
tag: Tag;
|
|
14
|
+
url?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const createRenderStorageOperations: (params: Params) => PrerenderingServiceRenderStorageOperations;
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.createRenderStorageOperations = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
13
|
+
|
|
14
|
+
var _get = require("@webiny/db-dynamodb/utils/get");
|
|
15
|
+
|
|
16
|
+
var _query = require("@webiny/db-dynamodb/utils/query");
|
|
17
|
+
|
|
18
|
+
var _batchRead = require("@webiny/db-dynamodb/utils/batchRead");
|
|
19
|
+
|
|
20
|
+
var _batchWrite = require("@webiny/db-dynamodb/utils/batchWrite");
|
|
21
|
+
|
|
22
|
+
var _cleanup = require("@webiny/db-dynamodb/utils/cleanup");
|
|
23
|
+
|
|
24
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
25
|
+
|
|
26
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
27
|
+
|
|
28
|
+
const createRenderStorageOperations = params => {
|
|
29
|
+
const {
|
|
30
|
+
entity,
|
|
31
|
+
tagUrlLinkEntity
|
|
32
|
+
} = params;
|
|
33
|
+
|
|
34
|
+
const createRenderPartitionKey = namespace => {
|
|
35
|
+
/**
|
|
36
|
+
* For backwards compatibility remove the T# if it exists.
|
|
37
|
+
*/
|
|
38
|
+
if (namespace.startsWith("T#")) {
|
|
39
|
+
namespace = namespace.replace(/^T#/, "");
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return `T#${namespace}#PS#RENDER`;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const createRenderSortKey = url => {
|
|
46
|
+
return url;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const createRenderType = () => {
|
|
50
|
+
return "ps.render";
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const createTagUrlLinkPartitionKey = params => {
|
|
54
|
+
const {
|
|
55
|
+
tag
|
|
56
|
+
} = params;
|
|
57
|
+
let {
|
|
58
|
+
namespace
|
|
59
|
+
} = params;
|
|
60
|
+
|
|
61
|
+
if (namespace.startsWith("T#")) {
|
|
62
|
+
namespace = namespace.replace(/^T#/, "");
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return `T#${namespace}#PS#TAG#${tag.key}`;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const createTagUrlLinkSortKey = params => {
|
|
69
|
+
const {
|
|
70
|
+
tag,
|
|
71
|
+
url
|
|
72
|
+
} = params;
|
|
73
|
+
const values = [tag.value];
|
|
74
|
+
|
|
75
|
+
if (url) {
|
|
76
|
+
values.push(url);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return values.join("#");
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const createTagUrlLinkType = () => {
|
|
83
|
+
return "ps.tagUrlLink";
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const getRender = async params => {
|
|
87
|
+
const {
|
|
88
|
+
where
|
|
89
|
+
} = params;
|
|
90
|
+
const keys = {
|
|
91
|
+
PK: createRenderPartitionKey(where.namespace),
|
|
92
|
+
SK: createRenderSortKey(where.url)
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
try {
|
|
96
|
+
const result = await (0, _get.get)({
|
|
97
|
+
entity,
|
|
98
|
+
keys
|
|
99
|
+
});
|
|
100
|
+
return (0, _cleanup.cleanupItem)(entity, result);
|
|
101
|
+
} catch (ex) {
|
|
102
|
+
throw new _error.default(ex.message || "Could not get render record by given key.", ex.code || "GET_RENDER_ERROR", {
|
|
103
|
+
keys,
|
|
104
|
+
params
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const createRender = async params => {
|
|
110
|
+
const {
|
|
111
|
+
render
|
|
112
|
+
} = params;
|
|
113
|
+
const keys = {
|
|
114
|
+
PK: createRenderPartitionKey(render.namespace),
|
|
115
|
+
SK: createRenderSortKey(render.url)
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
try {
|
|
119
|
+
await entity.put(_objectSpread(_objectSpread(_objectSpread({}, render), keys), {}, {
|
|
120
|
+
TYPE: createRenderType()
|
|
121
|
+
}));
|
|
122
|
+
return render;
|
|
123
|
+
} catch (ex) {
|
|
124
|
+
throw new _error.default(ex.message || "Could not create render record.", ex.code || "CREATE_RENDER_ERROR", {
|
|
125
|
+
keys,
|
|
126
|
+
render
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
const deleteRender = async params => {
|
|
132
|
+
const {
|
|
133
|
+
render
|
|
134
|
+
} = params;
|
|
135
|
+
const keys = {
|
|
136
|
+
PK: createRenderPartitionKey(render.namespace),
|
|
137
|
+
SK: createRenderSortKey(render.url)
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
try {
|
|
141
|
+
await entity.delete(keys);
|
|
142
|
+
} catch (ex) {
|
|
143
|
+
throw new _error.default(ex.message || "Could not delete render record.", ex.code || "DELETE_RENDER_ERROR", {
|
|
144
|
+
keys,
|
|
145
|
+
render
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const listRendersByTag = async params => {
|
|
151
|
+
const {
|
|
152
|
+
where
|
|
153
|
+
} = params;
|
|
154
|
+
const {
|
|
155
|
+
namespace,
|
|
156
|
+
tag
|
|
157
|
+
} = where;
|
|
158
|
+
/**
|
|
159
|
+
* Possibly there is no tag.key so no need to go further
|
|
160
|
+
*/
|
|
161
|
+
|
|
162
|
+
if (!tag || !tag.key) {
|
|
163
|
+
return [];
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const links = await listTagUrlLinks({
|
|
167
|
+
where: {
|
|
168
|
+
namespace,
|
|
169
|
+
tag
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
const items = links.map(link => {
|
|
173
|
+
return entity.getBatch({
|
|
174
|
+
PK: createRenderPartitionKey(namespace),
|
|
175
|
+
SK: createRenderSortKey(link.url)
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
try {
|
|
180
|
+
const results = await (0, _batchRead.batchReadAll)({
|
|
181
|
+
table: entity.table,
|
|
182
|
+
items
|
|
183
|
+
});
|
|
184
|
+
return (0, _cleanup.cleanupItems)(entity, results);
|
|
185
|
+
} catch (ex) {
|
|
186
|
+
throw new _error.default(ex.message || "Could not list render records after links.", ex.code || "LIST_LINKS_RENDER_ERROR", {
|
|
187
|
+
links
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
const listRenders = async params => {
|
|
193
|
+
const {
|
|
194
|
+
where
|
|
195
|
+
} = params;
|
|
196
|
+
const {
|
|
197
|
+
namespace,
|
|
198
|
+
tag
|
|
199
|
+
} = where;
|
|
200
|
+
|
|
201
|
+
if (tag) {
|
|
202
|
+
return listRendersByTag(params);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const queryAllParams = {
|
|
206
|
+
entity,
|
|
207
|
+
partitionKey: createRenderPartitionKey(namespace),
|
|
208
|
+
options: {
|
|
209
|
+
gte: " "
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
try {
|
|
214
|
+
const results = await (0, _query.queryAll)(queryAllParams);
|
|
215
|
+
return (0, _cleanup.cleanupItems)(entity, results);
|
|
216
|
+
} catch (ex) {
|
|
217
|
+
throw new _error.default(ex.message || "Could not list render records.", ex.code || "LIST_RENDER_ERROR", {
|
|
218
|
+
partitionKey: queryAllParams.partitionKey,
|
|
219
|
+
options: queryAllParams.options
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
const createTagUrlLinks = async params => {
|
|
225
|
+
const {
|
|
226
|
+
tagUrlLinks
|
|
227
|
+
} = params;
|
|
228
|
+
const items = tagUrlLinks.map(item => {
|
|
229
|
+
return tagUrlLinkEntity.putBatch(_objectSpread(_objectSpread({}, item), {}, {
|
|
230
|
+
TYPE: createTagUrlLinkType(),
|
|
231
|
+
PK: createTagUrlLinkPartitionKey({
|
|
232
|
+
namespace: item.namespace,
|
|
233
|
+
tag: item
|
|
234
|
+
}),
|
|
235
|
+
SK: createTagUrlLinkSortKey({
|
|
236
|
+
tag: item,
|
|
237
|
+
url: item.url
|
|
238
|
+
})
|
|
239
|
+
}));
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
try {
|
|
243
|
+
await (0, _batchWrite.batchWriteAll)({
|
|
244
|
+
table: tagUrlLinkEntity.table,
|
|
245
|
+
items
|
|
246
|
+
});
|
|
247
|
+
return tagUrlLinks;
|
|
248
|
+
} catch (ex) {
|
|
249
|
+
throw new _error.default(ex.message || "Could not create tagUrlLink records.", ex.code || "CREATE_URL_TAG_LINKS_ERROR", {
|
|
250
|
+
tagUrlLinks
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
const deleteTagUrlLinks = async params => {
|
|
256
|
+
const {
|
|
257
|
+
namespace,
|
|
258
|
+
tags,
|
|
259
|
+
url
|
|
260
|
+
} = params;
|
|
261
|
+
const items = tags.map(tag => {
|
|
262
|
+
return tagUrlLinkEntity.deleteBatch({
|
|
263
|
+
PK: createTagUrlLinkPartitionKey({
|
|
264
|
+
tag,
|
|
265
|
+
namespace
|
|
266
|
+
}),
|
|
267
|
+
SK: createTagUrlLinkSortKey({
|
|
268
|
+
tag,
|
|
269
|
+
url
|
|
270
|
+
})
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
try {
|
|
275
|
+
await (0, _batchWrite.batchWriteAll)({
|
|
276
|
+
table: tagUrlLinkEntity.table,
|
|
277
|
+
items
|
|
278
|
+
});
|
|
279
|
+
} catch (ex) {
|
|
280
|
+
throw new _error.default(ex.message || "Could not delete tagUrlLink records.", ex.code || "DELETE_URL_TAG_LINKS_ERROR", {
|
|
281
|
+
tags,
|
|
282
|
+
namespace,
|
|
283
|
+
url
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
const listTagUrlLinks = async params => {
|
|
289
|
+
const {
|
|
290
|
+
where
|
|
291
|
+
} = params;
|
|
292
|
+
const {
|
|
293
|
+
namespace,
|
|
294
|
+
tag
|
|
295
|
+
} = where;
|
|
296
|
+
const partitionKey = createTagUrlLinkPartitionKey({
|
|
297
|
+
namespace,
|
|
298
|
+
tag
|
|
299
|
+
});
|
|
300
|
+
const options = {};
|
|
301
|
+
|
|
302
|
+
if (tag.value) {
|
|
303
|
+
options.beginsWith = `${tag.value}#`;
|
|
304
|
+
} else {
|
|
305
|
+
options.gte = " ";
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
const queryAllParams = {
|
|
309
|
+
entity: tagUrlLinkEntity,
|
|
310
|
+
partitionKey,
|
|
311
|
+
options
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
try {
|
|
315
|
+
const results = await (0, _query.queryAll)(queryAllParams);
|
|
316
|
+
return (0, _cleanup.cleanupItems)(tagUrlLinkEntity, results);
|
|
317
|
+
} catch (ex) {
|
|
318
|
+
throw new _error.default(ex.message || "Could not list tagUrlLink records.", ex.code || "LIST_TAG_URL_LINK_ERROR", {
|
|
319
|
+
partitionKey,
|
|
320
|
+
options
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
return {
|
|
326
|
+
createRender,
|
|
327
|
+
deleteRender,
|
|
328
|
+
listRenders,
|
|
329
|
+
getRender,
|
|
330
|
+
createTagUrlLinks,
|
|
331
|
+
deleteTagUrlLinks,
|
|
332
|
+
listTagUrlLinks
|
|
333
|
+
};
|
|
334
|
+
};
|
|
335
|
+
|
|
336
|
+
exports.createRenderStorageOperations = createRenderStorageOperations;
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@webiny/api-prerendering-service-so-ddb",
|
|
3
|
+
"version": "0.0.0-mt-1",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/webiny/webiny-js.git",
|
|
8
|
+
"directory": "packages/api-prerendering-service-so-ddb"
|
|
9
|
+
},
|
|
10
|
+
"keywords": [
|
|
11
|
+
"@webiny/api-prerendering-service",
|
|
12
|
+
"storage-operations",
|
|
13
|
+
"dynamodb",
|
|
14
|
+
"ps:ddb"
|
|
15
|
+
],
|
|
16
|
+
"description": "A DynamoDB storage operations for the Prerendering Service API.",
|
|
17
|
+
"author": "Webiny Ltd",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@babel/runtime": "7.15.4",
|
|
21
|
+
"@webiny/api-prerendering-service": "0.0.0-mt-1",
|
|
22
|
+
"@webiny/error": "0.0.0-mt-1",
|
|
23
|
+
"dynamodb-toolbox": "0.3.4"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@babel/cli": "^7.5.5",
|
|
27
|
+
"@babel/core": "^7.5.5",
|
|
28
|
+
"@babel/plugin-proposal-export-default-from": "^7.5.2",
|
|
29
|
+
"@babel/preset-env": "^7.5.5",
|
|
30
|
+
"@babel/preset-typescript": "^7.8.3",
|
|
31
|
+
"@webiny/cli": "^0.0.0-mt-1",
|
|
32
|
+
"@webiny/db": "^0.0.0-mt-1",
|
|
33
|
+
"@webiny/db-dynamodb": "^0.0.0-mt-1",
|
|
34
|
+
"@webiny/handler-aws": "^0.0.0-mt-1",
|
|
35
|
+
"@webiny/project-utils": "^0.0.0-mt-1",
|
|
36
|
+
"jest-dynalite": "^3.3.1",
|
|
37
|
+
"jest-environment-node": "^27.3.0",
|
|
38
|
+
"prettier": "^2.3.2",
|
|
39
|
+
"rimraf": "^3.0.2",
|
|
40
|
+
"ttypescript": "^1.5.12",
|
|
41
|
+
"typescript": "^4.1.3"
|
|
42
|
+
},
|
|
43
|
+
"publishConfig": {
|
|
44
|
+
"access": "public",
|
|
45
|
+
"directory": "dist"
|
|
46
|
+
},
|
|
47
|
+
"scripts": {
|
|
48
|
+
"build": "yarn webiny run build",
|
|
49
|
+
"watch": "yarn webiny run watch"
|
|
50
|
+
},
|
|
51
|
+
"adio": {
|
|
52
|
+
"ignore": {
|
|
53
|
+
"src": [
|
|
54
|
+
"aws-sdk"
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"gitHead": "37736d8456a6ecb342a6c3645060bd9a3f2d4bb0"
|
|
59
|
+
}
|
package/types.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { DocumentClient } from "aws-sdk/clients/dynamodb";
|
|
2
|
+
import { Table, Entity } from "dynamodb-toolbox";
|
|
3
|
+
import { DynamoDBTypes, TableConstructor } from "dynamodb-toolbox/dist/classes/Table";
|
|
4
|
+
import { EntityAttributeConfig, EntityCompositeAttributes } from "dynamodb-toolbox/dist/classes/Entity";
|
|
5
|
+
import { PrerenderingServiceStorageOperations as BasePrerenderingServiceStorageOperations } from "@webiny/api-prerendering-service/types";
|
|
6
|
+
export declare type AttributeDefinition = DynamoDBTypes | EntityAttributeConfig | EntityCompositeAttributes;
|
|
7
|
+
export declare type Attributes = Record<string, AttributeDefinition>;
|
|
8
|
+
export declare enum ENTITIES {
|
|
9
|
+
RENDER = "PrerenderingServiceRender",
|
|
10
|
+
QUEUE_JOB = "PrerenderingServiceQueueJob",
|
|
11
|
+
TAG_URL_LINK = "PrerenderingServiceTagUrlLink"
|
|
12
|
+
}
|
|
13
|
+
export interface PrerenderingServiceFactoryParams {
|
|
14
|
+
documentClient: DocumentClient;
|
|
15
|
+
table?: TableModifier;
|
|
16
|
+
attributes?: Record<ENTITIES, Attributes>;
|
|
17
|
+
}
|
|
18
|
+
export declare type Entities = "render" | "queueJob" | "tagUrlLink";
|
|
19
|
+
export interface PrerenderingServiceStorageOperations extends BasePrerenderingServiceStorageOperations {
|
|
20
|
+
getTable(): Table;
|
|
21
|
+
getEntities(): Record<Entities, Entity<any>>;
|
|
22
|
+
}
|
|
23
|
+
export interface PrerenderingServiceFactory {
|
|
24
|
+
(params: PrerenderingServiceFactoryParams): PrerenderingServiceStorageOperations;
|
|
25
|
+
}
|
|
26
|
+
export interface TableModifier {
|
|
27
|
+
(table: TableConstructor): TableConstructor;
|
|
28
|
+
}
|
package/types.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ENTITIES = void 0;
|
|
7
|
+
let ENTITIES;
|
|
8
|
+
exports.ENTITIES = ENTITIES;
|
|
9
|
+
|
|
10
|
+
(function (ENTITIES) {
|
|
11
|
+
ENTITIES["RENDER"] = "PrerenderingServiceRender";
|
|
12
|
+
ENTITIES["QUEUE_JOB"] = "PrerenderingServiceQueueJob";
|
|
13
|
+
ENTITIES["TAG_URL_LINK"] = "PrerenderingServiceTagUrlLink";
|
|
14
|
+
})(ENTITIES || (exports.ENTITIES = ENTITIES = {}));
|