From cdea92bdd8cd1832455053a03a9661d99bb9cd72 Mon Sep 17 00:00:00 2001
From: Adrian Smijulj
Date: Wed, 8 May 2024 14:38:08 +0200
Subject: [PATCH 01/26] fix: improve 5.39.0 meta fields data migration (#4115)
---
packages/api-headless-cms/src/constants.ts | 12 +-
.../5.39.6/001/ddb-es/001.ddbEsTableData.ts | 562 ++
.../001/ddb-es/001.ddbPrimaryTableData.ts | 2978 +++++++++
...adless-cms-en-us-acosearchrecord-pbpage.ts | 148 +
...es-index-root-headless-cms-en-us-fmfile.ts | 1150 ++++
...es-index-root-headless-cms-en-us-modela.ts | 292 +
...es-index-root-headless-cms-en-us-modelb.ts | 133 +
.../migrations/5.39.6/001/ddb-es/001.test.ts | 285 +
.../001/ddb-es/migrated/001.ddbEsTableData.ts | 3016 +++++++++
.../migrated/001.ddbPrimaryTableData.ts | 5458 +++++++++++++++++
...adless-cms-en-us-acosearchrecord-pbpage.ts | 200 +
...es-index-root-headless-cms-en-us-fmfile.ts | 1605 +++++
...es-index-root-headless-cms-en-us-modela.ts | 545 ++
...es-index-root-headless-cms-en-us-modelb.ts | 236 +
packages/migrations/src/ddb-es.ts | 28 +-
.../001/utils/ensureAllNonNullableValues.ts | 60 +
.../5.39.0/001/utils/getFallbackIdentity.ts | 58 +
.../001/utils/hasAllNonNullableValues.ts | 20 +
.../001}/utils/hasValidTypeFieldValue.ts | 0
.../src/migrations/5.39.2/001/ddb-es/index.ts | 4 +-
.../src/migrations/5.39.6/001/ddb-es/index.ts | 452 ++
21 files changed, 17232 insertions(+), 10 deletions(-)
create mode 100644 packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.ddbEsTableData.ts
create mode 100644 packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.ddbPrimaryTableData.ts
create mode 100644 packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-acosearchrecord-pbpage.ts
create mode 100644 packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-fmfile.ts
create mode 100644 packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-modela.ts
create mode 100644 packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-modelb.ts
create mode 100644 packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.test.ts
create mode 100644 packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.ddbEsTableData.ts
create mode 100644 packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.ddbPrimaryTableData.ts
create mode 100644 packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-acosearchrecord-pbpage.ts
create mode 100644 packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-fmfile.ts
create mode 100644 packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-modela.ts
create mode 100644 packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-modelb.ts
create mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/ensureAllNonNullableValues.ts
create mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/getFallbackIdentity.ts
create mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/hasAllNonNullableValues.ts
rename packages/migrations/src/migrations/{5.39.2/001/ddb-es => 5.39.0/001}/utils/hasValidTypeFieldValue.ts (100%)
create mode 100644 packages/migrations/src/migrations/5.39.6/001/ddb-es/index.ts
diff --git a/packages/api-headless-cms/src/constants.ts b/packages/api-headless-cms/src/constants.ts
index 1a6001257be..121d4629d8b 100644
--- a/packages/api-headless-cms/src/constants.ts
+++ b/packages/api-headless-cms/src/constants.ts
@@ -75,18 +75,22 @@ export const pickEntryMetaFields = (
return pickedEntryMetaFields;
};
-export const isNullableEntryMetaField = (fieldName: EntryMetaFieldName) => {
- // Only modifiedX and publishedX fields are nullable.
+export const isNullableEntryMetaField = (fieldName: string) => {
+ // Only `modifiedX` and `publishedX` fields are nullable.
const lcFieldName = fieldName.toLowerCase();
return lcFieldName.includes("modified") || lcFieldName.includes("published");
};
-export const isDateTimeEntryMetaField = (fieldName: EntryMetaFieldName) => {
+export const isNonNullableEntryMetaField = (fieldName: string) => {
+ return !isNullableEntryMetaField(fieldName);
+};
+
+export const isDateTimeEntryMetaField = (fieldName: string) => {
// Only field ending with "On" are date/time fields.
return fieldName.endsWith("On");
};
-export const isIdentityEntryMetaField = (fieldName: EntryMetaFieldName) => {
+export const isIdentityEntryMetaField = (fieldName: string) => {
// Only field ending with "On" are date/time fields.
return fieldName.endsWith("By");
};
diff --git a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.ddbEsTableData.ts b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.ddbEsTableData.ts
new file mode 100644
index 00000000000..d1c5abe7915
--- /dev/null
+++ b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.ddbEsTableData.ts
@@ -0,0 +1,562 @@
+export const ddbEsTableData = [
+ {
+ index: "root-headless-cms-en-us-acosearchrecord-pbpage",
+ _md: "2023-12-27T12:43:01.141Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61U32/aMBD+VzzvlWT5ARTyxCYxbZrWVoNVWqepsuMDsjo2chxoVPG/7+wQxFrG+tC33PnuvvvuvssjLbUA+VnQjLJcz4CZfPUNcm1EsOZrtgTaoxswVaEVzeIelTpn1huPdKGlAONzjdaW7nq0YhsQV/hKkyhJgzgJkot5nGT9NIuiMEr6t7StIQFjQAXfZ+ioLLN1hQ5h2MKiowTLEAELbpisoXJoFh7sxDZrl3jNr9vWWmdhfblLbclHXSvRPeRaWVD2+Im4RKLQXDjzDZlpY5oe4bUldgXEUSaNrskWDBCp9X2hlhhrSK5rKXwmhzY5JPP3X6bk65R8uipdN5r/htxOjmfk+zgxqH2oYJ5oG1a4gOFglMdcpHk65jyOomjUT2M+yN/iZ9wRW58NPTeXPW5ugFkQH5pT4BdPKvb7XUVRVGvJmktWurpMkLJQB7R2NUw4HzJEamCLEjqsU6pIssE4HA+9Kg7x5zU0HKa3HeRBN+uay6JagWOo6pKDmRyLlmstgSm3mHuMyaypoZsksyss8A73GvilutZbPmyJpX/+Qvuvaf1vUP+a0ZPxoC5N4yWx5U2AtxecXadiXsdePoeGXnBonu+CyQoJ6616ZRJb4IVqbrpR00GYjsIEA4uXEOskjb+gYlG8cmuGbW8O/47nh/n8BE9cxm6HYRLNynaimf+4niJMXlah32AoEfvubo9+7N79AR8950ZcBQAA"
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#wby-aco-658c1bd3c39bb10008431b5c",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:43:01.141Z"
+ },
+ {
+ index: "root-en-us-page-builder",
+ _md: "2023-12-27T12:43:00.682Z",
+ data: {
+ snippet: null,
+ editor: "page-builder",
+ images: {},
+ savedOn: "2023-12-27T12:43:00.663Z",
+ publishedOn: "2023-12-27T12:43:00.663Z",
+ pid: "658c1bd3c39bb10008431b5c",
+ locale: "en-US",
+ title: "Not Found",
+ createdOn: "2023-12-27T12:42:59.964Z",
+ version: 1,
+ tags: [],
+ path: "/not-found",
+ webinyVersion: "5.38.2",
+ createdBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ __type: "page",
+ id: "658c1bd3c39bb10008431b5c#0001",
+ titleLC: "not found",
+ category: "static",
+ locked: true,
+ ownedBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ tenant: "root",
+ status: "published",
+ latest: true
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5c",
+ _et: "PbPagesEs",
+ _ct: "2023-12-27T12:43:00.682Z"
+ },
+ {
+ index: "root-en-us-page-builder",
+ _md: "2023-12-27T12:43:00.682Z",
+ data: {
+ snippet: null,
+ editor: "page-builder",
+ images: {},
+ savedOn: "2023-12-27T12:43:00.663Z",
+ publishedOn: "2023-12-27T12:43:00.663Z",
+ pid: "658c1bd3c39bb10008431b5c",
+ published: true,
+ locale: "en-US",
+ title: "Not Found",
+ createdOn: "2023-12-27T12:42:59.964Z",
+ version: 1,
+ tags: [],
+ path: "/not-found",
+ webinyVersion: "5.38.2",
+ createdBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ __type: "page",
+ id: "658c1bd3c39bb10008431b5c#0001",
+ titleLC: "not found",
+ category: "static",
+ locked: true,
+ ownedBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ tenant: "root",
+ status: "published"
+ },
+ SK: "P",
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5c",
+ _et: "PbPagesEs",
+ _ct: "2023-12-27T12:43:00.682Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.522Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TXY/TMBD8K8g8kqSxk5JeniokkHgBJI6TDoQqO9lU5vxR2U56ocp/Z52kEkLH8cJbdnY9npl1LuQMQprxDpyX1pCabLNilzGSkACGm4CIszZgDSa48X2LwOucsR0tBXQlvynzPN+JQnBW4ZB8rv8SPykOaduCmpk6/U4qQEjZhuNHjbekXz4j0DjgAdqPURLLWZFSlrLqlrK6ZPV2l1Xb8iuOeT78e2jlejOS+rIq3O4aKqqiKW6EoFFhWVBRljjcSn9SfPzAdZTD2xdampjGeFrqWE4JsWfznxkxFdnJhdT0SiVkuC6FzgE9AF7UceUBfQceeo/HW8e7uJ2Bqx58lGPFD2jCPiYa5tMXXOVj2HdWteDm2OeNTsmCm0WXh6Z3MoyZH45kbT3AGK8AbdMTP4Lf/G2zmzOoxmpIg02XB3U4PEW4epYa2TaIv3rUCnum1wLc3suf2KVVRdHwakND4NGCsFYBN/uTkwMuk9TB9XC1EPgRrX/7vpZcSe5hRqblaV2DeCIDx893z2Q3/alkipSowIdFQ0Ju7z+9RcJG+2z+R7Jo6XBYvf4OT78AoS6E/W8DAAA="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba27",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.522Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.706Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TXY+UMBT9K6Y+CgwUEIaniYkmvqiJ6yar2UwKXCZ1+0HawixO+O/eApMYs7u++MY99/b0nHPLhZyh5mq6BWO5VqQieZSWESUBcaCYcogYrR3WoJyZPrYIvI0pLZMs7/ZlmSVxHO/LpClogkP8pf5r/PRDUrcgFqZOfuACEBK6YfhR4S3ht68INAaYg/azl0RjmoYJDWlxk9Aqo1VeRkWefccxy8Z/D21c7yZSXTaFedkkdZE26b6uvcIyS5M6y3C45bYXbPrEpJfD2leSK5/G1K+1L+eA6LP6z4yYCu/4SqoGIQIyXpeSLAE9AF7UMWEBfTvmBovHW8M6v52RiQGsl6Prn9C4g0/ULacvuMpHd+i0aMEssS8bnYMVV6uuFkYQugcT2fFEtt4DTEtL6rBnJ7C751a7O4NotITQ6XB9Ucfjk4ybay6Rbof4m0cpsKcGWYM5WP4Lu7Qo4yy4GpHgmDdRay2AqUNv+IjrJJUzA1xNOHZC8z/ut5IJziwsyLw+rmsUT6Rg2Pn2hfTmv5XMnhIVWLdqCMjN3Zf3SNhIGy1/SeQtHY+b1z/h+TfXujKFcQMAAA=="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c721",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.706Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.361Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TTY/TMBD9K8gcSdLESZtsThUSSFwAiWUlQKiyk0kx64/KdtINVf474ySVENpdLtw8b8Zv3ryxL+QMXOjxDqwTRpOabJO8SiiJiAfNtEfEGuMxBu3t+K5FYJdSWmUFL1lZwi5N06or03YXLonn8i/xmGGRMi3ImalTb4UEhKRpGB5q7BJ//oRAY4F5aD8ESTSleZzRmJa3Ga0LWm+rpNwWX7HMseHfRSvX65HUl1XhtmoyXuZNfsN5FhQWecaLAotb4U6Sje+ZCnJY+0IJHdwYT0scwiki5qz/MyO6IjqxkOpeyogM16Vks0H3gI06Jh3g3J753uH11rIubGdgsgcX5Bj+Exq/D476+fYFV/ng952RLdjZ9nmjU7TgetH1A6yJeWgT82PihiNZ8/cwhj6gTHxiR3Cbp9a7OYNsjILYm3h5VYfDk6zr9EIh5QbxVw9KYk73ioPdO/ELs1m1K6LrPAo8C7NwYyQwvT9ZMeBWSe1tD9dZPDuiB9++ryGTgjmYkWl5Y1dHHjHDsvPdMyZOfyuZAiUqcH7REJHbLx/fIGGjXDJ/liRMdDiso/4JT78BE5zmZXgDAAA="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#6022814b7a77e60008f70d62",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.361Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.486Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TTY/TMBD9K8gcSdJ8tQk5VUggcQEklpUAoWqSTIpZf1S2k26o8t93nKQSQlAu3Dxvxm/evLEv7Iw1V+M9Gsu1YhXbRlkZpSxgDhUoR4jR2lGMypnxbUvALk7TMsW4gKLAXRzHZVfE7S6jIn4r/5yOCRVJ3aKYmTr5hgskSOgG6FBRl/DTRwIag+Cwfe8lpXGahUkapsVdklZ5Wm3LqNjmX6jMwvDvopXr1ciqy6pwWzZJXWRN9rKuE68wz5I6z6m45fYkYHwH0suB9pnkyrsxnpbYh1PA9Fn9Z0ZyhXd8IVW9EAEbrktJZoMekBp1ICzS3A5cb+l6a6Dz2xlA9Gi9HF3/wMbtvaNuvn2hVT66fadFi2a2fd7oFCy4WnR15FFvMGzAtGF9jOxwZGvFA46+E0odnuCIdvO3BW/OKBotMXQ6XN7V4fAdjQ5vkK82cEnMG8JfPEpBOdXLGs3e8p+ULcsyuM4l0YGfqdZaIKj9yfCBtssqZ3q8zuTgSF58/baGIDhYnJFpeWtXZ/5gioHz/Q0zp9+VTJ6SFFi3aAjY3ecPr4mwkTaaP03kBzoc1kl/hacnhEueWoADAAA="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#602282e07a77e60008f70d63",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.486Z"
+ },
+ {
+ index: "root-headless-cms-en-us-modela",
+ _md: "2023-12-27T13:20:25.736Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA62ST3OCMBDFvwqTHitMEkCUU3X00EP/zGidqRcnQGgzDcGSoEXH795NrHV64dRb9u2P5eVtjmjPM6G6FW+0qBVKURyEo4CiATJcMWVAaeraQM2Vabr7AoRhPMppNB4PhzjJOMZ4lJSEDBOARF//Bo4EoKouuHST3GkCkqxzJjkoXPkvCxDyhjPDiydriWIa+oT6NFmSMKU4pXFAw3gNmGa7HijBZH2dNe1Qerw6JFkS5uE4y4h1GIUkiyKAC6G3knWPrLJ2WOFVQtk0uu25tuVpgOq9+ueJkIUoxXmoaqUcoN1lKcQF9MHhR6ZpOVzbMNNq+HrbZlLod+gAzmTLtXVk+Je5K+ln3rYHS81m09v5wvO9B5u3N/HmdpcedcGrN9/xB2qKCsdFH386b8o4V0dU1rLgjdukeyTQbth+dfFhaQhem4vt5evzHNi80oF7TYEEB5vNTxJ/5d+b9W/39A3SUG1TwgIAAA=="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#658c24996607be00087f1167",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T13:20:25.736Z"
+ },
+ {
+ index: "root-headless-cms-en-us-modela",
+ _md: "2023-12-27T13:20:25.737Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61Sy26DMBD8FeQeC8g2r4RTEyWHHPqQ0kZqL5HBmxYVDMUmKYny77UhRDn0cenNHs/Ozs76gIqSQ77gKO5PE2SjLdQyKwWKiY3yMmWquxzQpsw51B23LkuFjjaSbAv8Xr8iiqnnEOrQ6JF4McUxDdwIkxfUa+SgOSCcp6UGpGKqkRqomiTP5Btw05XlDUjTR8GnutnQj7Rp9oY1m02v50vLsW6NQ2tizYWqW4t20uLV6fh7qniBA/4bXxtOa2AK+LTtGrWVscV4kQktxjNZ5ay9Y0WPWj2cGc0wGKUkibzUGycJwRiPfI8kvm80wcgvBhb1x+MwxFEChhVtCAkjraJAMKGG6M5GfsyOesEpu3cdT6zqBmxU7sQ/e99Bkol2NWwcBa43cull5XfzXOkj0aTz/v76AjXbrYb9Hi/qhsEenx/mWiEtpNul6Va6aL0+DXkJH78AOM3x+bMCAAA="
+ },
+ SK: "P",
+ PK: "T#root#L#en-US#CMS#CME#658c24996607be00087f1167",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T13:20:25.737Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.543Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TXYvUMBT9KxIfbTtt2jqZPg2Cgi8quC6ssgxpezvEzUdp0s7Wof/dm36AyO764lvuyc3JOecmV3KBUujxFjorjCYFyaOURZQExIHm2iHSGeOwBu268WONwNuYUpZkeXNgLEviOD6wpNrTGJvES/uvcZlgkzI1yJmpUR+EBISkqTguCrwl/PYVgaoD7qD+7CXRmKZhQkO6v0lokdEiZ9E+z75jm+XDv5tWrncjKa6rwpxVSblPq/RQll4hy9KkzDJsroVtJR8/ceXl8PqVEtqnMbZL7cspIOai/zMjpiIasZDqXsqADNtQkjmgB8CLGi4toG/HXW/xeN3xxk9n4LIH6+WY8idU7ugTdfPpK47y0R0bI2vo5tjniU7BgutNF28dLyWEojI6ssOZrA0PMPqLQJmw5Wewu+fmu7uArIyC0JlweVan0/O0q3+hkHOH+JtHJXFP96qE7mjFL9yl7JCwYLOkwHFvpzRGAtfHthMDDpYUruths+P4GWP4cb+WXApuYUam5ZltoTyRR8cvty/kOP2tZPKUqMC6RUNAbu6+vEfCStlo/i+Rt3Q6rV7/hKffjOAaTXsDAAA="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c720",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.543Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.702Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TTY/TMBD9K8gcSdLESduQU4UEEhdAYlkJ0Kqyk0ll1h+R7aQbqvx3xkkqoRWUCzfPm/GbN2/sCzkDF3q8B+uE0aQi2yQvE0oi4kEz7RGxxniMQXs7vm8Q2KWUlllR7qApsjZN05LXtGEci8St/Es8ZlikTANyZmrVOyEBIWlqhocKu8RfPiNQW2Aemo9BEk1pHmc0pvu7jFYFrbZlst8W37DMseHfRSvXm5FUl1Xhtqwzvs/r/DXnWVBY5BkvCixuhOskGz8wFeSw5oUSOrgxdkscwiki5qz/MyO6IlqxkOpeyogM16Vks0GPgI1aJh3g3J753uH1xrI2bGdgsgcX5Bj+A2p/CI76+fYFV/nkD62RDdjZ9nmjU7TgetHVgVXChX6xqI1O3HAia8UjjKETKBN37ARu87cFb84ga6Mg9iZe3tXxeIN3dUAoJN0g/upJSczpXnGwByd+Yna3L1IaXYdS4FkYiBsjgelDZ8WAqyWVtz1cB/LshEZ8f1hDJgVzMCPT8tCutvzBEcvO9zecnJ4rmQIlKnB+0RCRu6+f3iJhrVwy/5gkjHQ8rrP+Dk+/AEx3J3R9AwAA"
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dab",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.702Z"
+ },
+ {
+ index: "root-headless-cms-en-us-acosearchrecord-pbpage",
+ _md: "2023-12-27T12:43:01.123Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61YW3PbNhb+KxjtbPsiceVLmsT7EtVtU8/aiVu7yWx3djogeSRiBQIsAEqrdPzf9zsASVGOnPVDHzyWcDnX73znQH9MaluSvionFxNZ2DuSrqh+psK6ctbkjVzRZDrZkPPKmsnFyXSibSFD/PLHZGl1SS7eddaGycN04uWGyvfYnZzOT89mJ6ez05f3J6cX52cX83k2n3/z6yTJ0IQzZGa/3GHBBxlaj4XSyWXAQk1BQgMEbqRuybO2QP8Nb8Ku4Yu3+W0yLS2qEMV9JF3YmkSw4iPlyuz6A4U1gUw4dkQcW4n/arkmL1QQJP2Ot/NW6VLIptEqxcALaUqxpdyrgKPW4FQj7FKEioQnh7hp8pBhlk764NoitI5EvhONsxtVKrMSO9uKrQqVkMKRLHezWpYkLm/uomwpStqQtk0N8wWk1LS1bp2JO0RQ5pp6Y2GVF4U0wnNo2doK9/kTTKmtDxBUY4VVsgRtZekz8c6KovXB1rhhNW86+r1VjspeMGlVKyPZPxZlCFtDLB7dxXoBJ8KB87BMXLIBtFxSEdTm0GbXGg7c09HaVqqoRAEJXrya/1XEMwHeiQ83XvxM3uoNjBsJKCqpNZkVVjtNjmrLh7AevRidQLaiL2z/odX7LL+lwL6tjd32EpHAEgZ6sUC9IPtFyOBlSZn4jhptd1l/8G4vc7GXKX7oUym+x/YuVD0W+gB3gWQQlFHioUnPxFr2lcl983fxiydGcp+4C/FDq/UMZVesD+TetDqoGWpFAm6IbJu0LW6v/I0qnGVFqiBxDZ4wwBXyszBcIIqc2MpRmRzG0ov7inBY4g8w3I1kI5VBVKSb6D7gMB0chu+1NSpYNxa3bE0Rr06hKgAfZNg3LmLP+iU8R3p3WIlZtYamHKVOvcH3ITsK1g227E3x0RbcJ/7gHsP5iQLuwWXrBjoMwKHVGgG6vJ4KZ6HCrKZiqVCUqBoH/koecjg4ktkIFEskH+nznDgHR1e433gWAyPEV7JGTn1hG3y5o6J1KnS+FEi8klpouUNGlBHSHCBn77kpdFtyTSCgwEKnkRPXyUNjaCOByPA1isoaA5QncLKbnOYwg4a3TjbVT9cMkuwZ5hZyyX2DQ/dTq4o1ErUiQ47RnltExzWaP8fot57PXV5fiUa3K2U8BwmMo2Wdl3IPBTbK0HZsC45eRnpSnyJRDn5xLbADJS0l4C4WH+9QuivG2VQAag7ok8B4TOqZK0UjHYe3REr5fko9/Ezpfb8OcioWbajmU0GhyKCAje4MTkgCW3E76YMfc5xAY45IzkSswwZWk9koZ00d4cRszVEBfYG7xMoiniXIugiaE8rY74mJ4Ty6O6SdQ/lZYwMEezR2tFMf1b9EdGI9QMl/IuW9Nwis+oRgwhbzNVoUxHIhXDFmpGBug4lgfscNzINIQVldj0lCpQB7Vgb4RPmQrNG4UhnDLLemEBsLr8e1nBHBdTjui7x9jHC5iyZaiLH2uOKgZW9PZKY+QS1zpAH3kOGE6F1EQ7ArYvIQsIqBwPajzGxFnltZzx1PqV8I36I9xFtj/uYG3XNeF/4Y2W5SyT5n7JshGmnaSFTdDR8jPr1MEkTV5v0hDbi0rCLdvDLBSYNUNNYFqb34EYNH6pzd3TgT+jHLsy85yhT59fvh4x1jJwREJxUUTxjTpxIhU6MAVIcZpSZYgayY/ZjSt+ZHg8qilE2IOr8l3oIw0ImZeQQNtdoBcoqQAXcDrtEAlqmPSL4vYpuNwY/BtlsT+y3kX6O184zBicIyqrtSDVzQy1mFZdDevuM+3W05II/Gl1ReK7SgeKEhy2U1TFnYhh+ub/W1RBnjL0u0Tt2/klvOiKeyrr60t4OzuEgr1w9faNI9P/3jftHxU1ThMc9pCY75TgY58nXfEf3eaw4osiQTjzlR8h2MDbtUUmD//XIB5DB33ZKrlecHQ8QTeoC4tVtyaDPwdYB/v8eZb4YrnZ6W+whUgEkqvCgyHh92fGyZyE5qtTKpquP5gRbG1NIPPyMgdtR3mCKO4PRw6h+lOMb3hOe6SDjkZkunQBF6eCgwYeVETPFl1zZSOXQXuA1jhi45a914gf26P/Dk2BklQT3cPwXVAu6ig/s+V4mvywPwJLigQmQtP3GxxHbMyE3oy7oasiOJKcedXJzfprcNbdJ0XbeYwZeIGSeYGcYpzF6gR56otukFlYkz3qvr1nAz+0gxddGONPYXwx4P/OixeMfcS73uJwo8OmnGXD6NusG7MVoDtcYuwFOO3jIA00jHPYmb6O94JcawZeKDomFOh6a3KvzY5ngK2pw54s34BRtfh0eesd1RxvVwTPGBb168Kk7y8qw4e53nJ/P5/NX52Un+Iv8LPp70z83mi0ef82rt9HfZ/XZ3zIiXjySfn/eSS+UxwuzeYZrkZ33J6Bu0pge0LHkNnsJFdJWael3H3u6nFy9eZ6/PX/LbfTj/5Zf+y9OzX3uVw+u+aXOtfEUldkxb5+TejH9ayPGMBAw5QWucuUCBUh9RGSoI+FsHtVmw3Pk4Vg+9X3IFFf/6N74fRO3/BeypWD0KE/jE7SJEtvluJgs7+2J6+f3Uw2kw6Bk/i0S/l+B1OM7U/Oc6kUL2oQ/55EV29io7xUH1HMd6iMeuqv5k05zcfhh+6fm8UD8vySMV8vCAY/x28KEHz/0/b7+HmqL2WcxgpqH7t9867ePlh/8BijuEYQoTAAA="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#wby-aco-658c1bd3c39bb10008431b5b",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:43:01.123Z"
+ },
+ {
+ index: "root-en-us-page-builder",
+ _md: "2023-12-27T12:43:00.864Z",
+ data: {
+ snippet: null,
+ editor: "page-builder",
+ images: {},
+ savedOn: "2023-12-27T12:43:00.723Z",
+ publishedOn: "2023-12-27T12:43:00.723Z",
+ pid: "658c1bd3c39bb10008431b5b",
+ locale: "en-US",
+ title: "Welcome to Webiny",
+ createdOn: "2023-12-27T12:42:59.947Z",
+ version: 1,
+ tags: [],
+ path: "/welcome-to-webiny",
+ webinyVersion: "5.38.2",
+ createdBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ __type: "page",
+ id: "658c1bd3c39bb10008431b5b#0001",
+ titleLC: "welcome to webiny",
+ category: "static",
+ locked: true,
+ ownedBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ tenant: "root",
+ status: "published",
+ latest: true
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5b",
+ _et: "PbPagesEs",
+ _ct: "2023-12-27T12:43:00.864Z"
+ },
+ {
+ index: "root-en-us-page-builder",
+ _md: "2023-12-27T12:43:00.864Z",
+ data: {
+ snippet: null,
+ editor: "page-builder",
+ images: {},
+ savedOn: "2023-12-27T12:43:00.723Z",
+ publishedOn: "2023-12-27T12:43:00.723Z",
+ pid: "658c1bd3c39bb10008431b5b",
+ published: true,
+ locale: "en-US",
+ title: "Welcome to Webiny",
+ createdOn: "2023-12-27T12:42:59.947Z",
+ version: 1,
+ tags: [],
+ path: "/welcome-to-webiny",
+ webinyVersion: "5.38.2",
+ createdBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ __type: "page",
+ id: "658c1bd3c39bb10008431b5b#0001",
+ titleLC: "welcome to webiny",
+ category: "static",
+ locked: true,
+ ownedBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ tenant: "root",
+ status: "published"
+ },
+ SK: "P",
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5b",
+ _et: "PbPagesEs",
+ _ct: "2023-12-27T12:43:00.864Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.525Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TXY+UQBD8K2Z8FFgY2FuOp42JJr6oieclasymB5rNePOxYQb2cMN/twfYxBjvfPGNru6pqaoeLuyMQprxHjsnrWEV2yZ5mXAWMY8GjCeks9ZTjcZ347uGgJuU8zIrBLYF3BZpmpYiF8BvaEg+139JnxkNadugmpla/VYqJEjZGuijolviz58IqDsEj82HIImnPI8zHvPdXcarglfbMtlti6805mD499DK9Xpk1WVVuC3rTOzyOr8VIgsKizwTRUHDjXQnBeN70EEONC+0NCGN8bTUoZwiZs/mPzNSKrKVC6nplYrYcF1KNgf0gHRRC8oh+fbge0fHmw7asJ0BVI8uyLHiB9Z+HxL18+kLrfLR71urGuzm2OeNTtGCm0WXq6ENI9IcEzcc2dp9wDHcgtrGJzii2zy13M0ZVW01xt7Gy5s6HJ7gXJ1LTYQbwl89akU902uB3d7Jn9TN87Iso6sZjR6CEWGtQjD7UycHWimrfNfj1YiHIwXw7ftagpLgcEam5YFd4/hLEh2c759JcPpTyRQoSYHzi4aI3X35+IYIa+2S+U9JgqXDYfX6Ozz9AgsV+EF1AwAA"
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba26",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.525Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.561Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TTY/TMBD9K8gcSdLYSZtsThUSSFwAiWUlQKvKSSaVWX9UtpNuqPLfGSephFbLcuHm+fCb997YF3KGWujxDqwTRpOKbJOsTBiJiAfNtceMNcZjDNrb8UOLiV3KWEnzckvpTbFL07SkBcs5YJN4qf4ajxSblGlBzkidei9kuCdNw/FQ4ZT46xdMNBa4h/ZToMRSlsWUxay4pazKWbUtk2Kbf8c2x4d/N61Yb0dSXVaG27KhdZE12U1d08Awz2id59jcCneSfPzIVaDD21dK6ODGeFriEE4RMWf9nxHRFdGJBVT3UkZkuC6FzgY9AA7quHSAuj33vcPrreVd2M7AZQ8u0DH1T2j8Pjjq59sXXOWj33dGtmBn2+eNTtGS1wuvxjgfi8boxA1HstYeYAwzQJn4xI/gNn9b7eYMsjEKYm/i5UUdDs8irqqFQrgN5t88Kok13asa7N6JX1jdpTgmugpR4HkQURsjgev9yYoB10kqb3u4ivD8iOJ/3K8hl4I7mDPT8riuVjzjguXnuxfcm54ymQIkMnB+4RCR22+f3wULlUvmX5IESYfDqvXP9PQb9c+2XXEDAAA="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#6022814851197600081724ae",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.561Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.487Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TXavTQBD9K7I+mqTNR9uYpyIo+KKC1wtXkTKbTMra/Qi7m/bGkv/ubJKCiF5BzNPOmdkzZ85sruyCXOjhHq0TRrOKbZK8TDIWMY8atCfEGuMpRu3t8LYhYLvOsjItYN20BV/TV5a7fMM5FYmn8s/pmFKRMg3KialVb4REgqSpgQ4VdYk/fSSgtggem/dBUrbO8jjN4mx3l2ZVkVWbMtltis9U5uD896KF69XAquuicFPWKd/ldf6S8zQoLPKUFwUVN8J1EoZ3oIIcaJ4poYMbQzfHIRwjZi76PzOSK6IVM6nupYzY+baUdDLohNSoBemQ5vbge0fXGwtt2M4ZZI8uyDH8G9Z+Hxz10+0rrfLR71sjG7ST7dNGx2jG9axrfgexQ0ttJToXQ9dJMZPEraWqi7GnxJ2PbLl5wiEoQGXiDo7oVn9a/OqCsjYKY2/iuc/h8A/9FseEomYrwl88Kkk53SuOdu/Ed8rm2y25tXig0EOYnxsjEfS+s+JML4FV3vZ4m9/DkXz78nUJQQpwOCHj/C5vLv7GQAuX+yeMH39VMgZKUuD8rCFidw8fXhNhrVwy/WBJmOhwWEb9GR5/AOAByTisAwAA"
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#6022814a0df4b000088735bb",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.487Z"
+ },
+ {
+ index: "root-headless-cms-en-us-modela",
+ _md: "2023-12-27T13:20:12.855Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA62ST3OCMBDFvwqTHisMCQiUU3X00EP/zGidqRcnIaHNNAQLQYuO372bWOv0UE+9Zd/+WF7eZo+2gkndL0TTylqjHA2DKAsIGiAjNNUGlKauDdRCm6a/4yAkw6wgccaSJEyZCMMwS0uMkwQgeal/BUcMUFVzodwkdxqBpOqCKgGK0P7zDISiEdQI/mgtkZBEPiY+Sec4ykmYYxxkBC8Ba+nmT4gEaTpcnmeNe5Tvzw4xS6MiumEMW4dxhFkcA8xlu1a0f6CVtUO5V0lt0+jXx9qWhwGqt/qfJ0IWspTHobpTaoA2p6VgF9C7gB+ZphNwbUNN18LX644p2b5BB3CqOtFaR0Z8mtuSfBRdt7PUZDK+ns4837u3eXsjb2p36WEXvH71Hb8jhlfhkF/iD8dNGedqj8pacdG4TbpHAu2GbhcnH5aG4Ftzsj1/eZoCW1Rt4F5ToMDBavWdxG/552aXt3v4AqHf5GfCAgAA"
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#658c248b6607be00087f1166",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T13:20:12.855Z"
+ },
+ {
+ index: "root-headless-cms-en-us-modela",
+ _md: "2023-12-27T13:20:12.874Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61Sy26DMBD8FeQeCwgbApRTEyWHHPqQkkZqL5GNNy0qGIpNUhLl32tDiHLo49KbPZ6dnZ31ARUlh3zOUdKfxshGW6hlVgqUYBvlZUpVdzmgTZlzqDtuXZYKHW0k6Rb4g35FxCO+g4lDoiX2E+IlmLhRNHpBvUYOmgPCeVpoQCqqGqmBqmF5Jt+Am640b0CaPgo+1e2GfKRNszes6XRyPVtYjnVnHFpjayZU3Vq4kxavTsffE8ULb8R/42vDaQ1UAZ+0XaO2MrYoLzKhxXgmq5y297ToUauHM6MZjuIUs8hP/RvGsOd5ceBjFgRGE4z8fGCRIGZh6EUMDCvaYByGWkWBoEIN0Z2N/JAddmOCT9m963gSVTdgo3In/tn7Dlgm2tWwcTRy/dgll5XfzXOljyb+8/7++gI13a2G/R4v6obBls+PM62QFtLt0nQrXbRen4a8hI9ffhzBm7MCAAA="
+ },
+ SK: "P",
+ PK: "T#root#L#en-US#CMS#CME#658c248b6607be00087f1166",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T13:20:12.874Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.488Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TXa+UMBD9K6Y+CiwU1u3ytDHRxBc18XoTNWZTYFjr9oO0hb244b87BTYx5np98Y05Mz0950y5kgtUQo/3YJ0wmpRkm+QsoSQiHjTXHhFrjMcatLfj2waBlymlLCtYu2esyNI03bOs3tEch8RT/ef4meGQMg3ImalVb4QEhKSpOX6UeEv86SMCtQXuoXkfJNGU5nFGY7q7y2hZ0HLLkt22+IJjjg//Hlq5Xo2kvK4Kt6zOql1e5/uqCgpZkWdVUeBwI1wn+fiOqyCHN8+U0CGNsVvqUE4RMRf9nxkxFdGKhVT3UkZkuC0lmwM6A17UcukAfXvue4fHG8vbsJ2Byx5ckGOqH1D7Q0jUz6evuMoHf2iNbMDOsc8bnaIF14uuTuhz7L7zDhI3nMjaPMMYLgFl4o6fwG3+ttvNBWRtFMTexMuTOh4fp1x9C4V8G8RfPCiJPd2rCuzBiZ/YzfdpdDOiwPNgojJGAteHzooB10lKb3u4mfD8hOa/fltLLgV3MCPT8rhuUTySguWX+yfSm/5UMgVKVOD8oiEid58/vEbCWrlk/kuSYOh4XJ3+Dk+/APbPY71xAwAA"
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#60228148f98841000981c723",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.488Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.527Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TTY+bMBD9K5V7LJBgICGcokqttJdtpW5XaldVZMMQueuPyDZkacR/7xiItKra3Us5ed6M37x5Yy7kDFzo4R6sE0aTihRJViaURMSDZtojYo3xGIP2drhpENisKS3TvNxssh1d47drm6wAjkXipfxbPKZYpEwDcmJq1UchASFpaoaHCrvEX78gUFtgHppPQRJd0yxOaUy3dymtcloVZbIt8u9Y5lj/etHC9X4g1WVRWJR1yrdZne04T1FWmWcpz3MsboQ7STbcMhXksOaNEjq4MZzmOIRjRMxZ/2dGdEW0YibVnZQR6a9LSSeDHgEbtUw6wLk9853D641lbdhOz2QHLsgx/CfUfh8c9dPtC67yye9bIxuwk+3TRsdoxvWsy4HFfhKci2vlYmmOJnH9kSxVjzCEbqBMfGJHcKt/LXl1BlkbBbE38fy2DodXuBcnhELiFeLvnpTEnO4UB7t34hdm021RRtfZFHgW5uLGSGB6f7Kixw2TytsOrnN5dkQ/Hn4sIZOCOZiQcX5vV3f+Yoxl5/sXDB3/VDIGSlTg/KwhInffPn9AQhw3mX6cJEx0OCyjPofH377bNOyEAwAA"
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#602281486639200009fd35eb",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.527Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.523Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TTY/TMBD9K8gcSdLYSbdpThUSSFwAiWUlQKvKSSaVWX9UtpNsqPLfGSephFawcODmeTN+8+aNfSEDVEKPd2CdMJqUZJtkRcJIRDxorj0i1hiPMWhvx3cNAjcpYwXNiz2tGpqlaVrsqoblNRaJ5/Iv8UixSJkG5MzUqrdCAkLS1BwPJXaJP39CoLbAPTQfgiSWsiymLGa7W8rKnJXbItlt869Y5nj/96KV6/VIysuqcFvUtNpldbavKhoU5hmt8hyLG+HOko/vuQpyePNCCR3cGM9LHMIpImbQ/5kRXRGtWEh1J2VE+utS6GzQA2CjlksHOLfnvnN4vbG8DdvpuezABTmm+g61PwRH/Xz7gqt89IfWyAbsbPu80SlacL3oWt5BLHRrufO2q31nITaooRcwJK4/kfXCA4yhMSgTn/kJ3OZP+94MIGujIPYmXuiPx39vs/ojFPbYIP7qUUnM6U5VYA9O/MDsPqU3WXQdWYHnYdzKGAlcH85W9Lh4UmIfuI7r+Qlt+na/hlwK7mBGpuUZXk37jV+WD3fP+Dw9VTIFSlTg/KIhIrdfPr5Bwlq5ZP5PSRjpeFxn/RWefgJvK6+zmwMAAA=="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#6022814891bd1300087bd24c",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.523Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.563Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TTW+cMBD9K5V7LLCYj8JyWlVqpFzaSk0jJVG0MjCs3PhjZRs2dMV/7xhYqaqS9NIb82b8/N4bcyYnqLkab8FYrhWpSB6lZZSQgDhQTDlEjNYOa1DOjNctAh/jJClplnfbssxoHMfbkjYF7XCIv9V/j58Uh6RuQcxMnbziAhASumH4UeEt4Y/vCDQGmIP2q5eUxEka0iRMihuaVFlS5WVU5Nk9jlk2/Hto5fo0kuq8KszLhtZF2qTbuvYKyyyldZbhcMvtUbDxC5NeDmvfSa58GuNxqX05BUSf1H9mxFR4xxdS1QsRkOGyFDoH9AR4UceEBfTtmOstHm8N6/x2BiZ6sF6Orn9C43Y+UTefPuMqn92u06IFM8c+b3QKFlwtunTjdIhHIjscyNp6gtFfAVKHR3YAu3lts5sTiEZLCJFjeVD7/UuEq2cukW2D+IdnKbCnelmD2Vn+C7sp0hbBxYYEx7yFWmsBTO2Ohg+4TFI508PFgmMHtP7wuJZMcGZhRqblaV2CeCEDw063b2Q3/a1k8pSowLpFQ0Bu7r59RsJG2mj+RyJvab9fvf4JT78BqJuFQm8DAAA="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c71f",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.563Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.541Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TTY+bMBD9K5V7LJBgICGcokqt1EtbqduVuqsqMjCk3vUHsg1ZGvHfOwYiVavd9FJOnjfjN2/emDM5QcnVcAvGcq1IQbIoySNKAuJAMeUQMVo7jEE5M3yqEdisKc3jNN9skh1d47dr6iSDCov4tfxbPMZYJHUNYmJq5EcuACGhK4aHAruE378hUBlgDuovXhJd0ySMaUi3NzEtUlpkebTN0jsss6z/d9HC9X4gxXlRmOVVXG6TKtmVZYyy8jSJyzTF4prbVrDhM5NeDqvfSK68G0M7xz4cA6JP6j8zoiu84TOp6oQISH9ZSjwZ9AjYqGHCAs7tmOssXq8Na/x2eiY6sF6OLh+gcnvvqJtun3GVT27faFGDmWyfNjoGM65mXZW0YQkKGu5saH+xFiLbH8lS9AiDbwZShy07gl29tuPVCUSlJYROh/PTOhyuUy8+cIm8K8TfPUmBOdXJEsze8t+YxR7BZTAJjvmhSq0FMLVvDe9xvaRwpoPLUI4d0Yz7n0vIBGcWJmScH9vFmhdcMex0e8XN8bmS0VOiAutmDQG5+fH1w2xpNP01kR/ocFgm/Rse/wBONimLgQMAAA=="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#602281486639200009fd35ec",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.541Z"
+ },
+ {
+ index: "root-headless-cms-en-us-modelb",
+ _md: "2023-12-27T13:22:46.132Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA62SP2+DMBDFvwpyxwaEDQTCVKFk6NA/UtJKzRIZ7DRWjUHYhKIo371np2nUoZm6+d79OJ7f+YAGXgo1vvJOi0ahHCVBlAUETZDhiioDStc0BmquTDfeMxCmSVaRhMSUlRVOwzCchRxThgES1/o3cLRQ3TAu3SR3KkCSTUUlB4Ur/2UJQtVxajh7spZISCIfE5+kKxzlhORxHExTsgZM0/2f0DQIZ3h9mVWMKD9cHOIyjapoVpYYbGVxhMs4BpgJ3Uo6PtLa2qHMq4WyaYztqbblcYKaQf3zRMhCbMVpqOqlnKD9eSnYBfTB4Uem6zlc21DTa/i67Usp9A46gFPZc20dGf5p7mLGWzKQHVDzeXG7WHq+92Dz9gpvYXfpYRe8evcdn1aJyYaBXuOPp00Z5+qAto1kvHObdI8E2h0dXs8+LA3Ba3O2vXp7XgBb1TpwrymQ4GCz+U7it/xzs+vbPX4BgnLwJMICAAA="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#658c2524adbc1700090e1ad1",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T13:22:46.132Z"
+ },
+ {
+ index: "root-headless-cms-en-us-modelb",
+ _md: "2023-12-27T13:22:46.134Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61Sy26DMBD8FeQeCwgbCIRThZJDDn1ISSO1l8jgbYMKNsImFEX599oQohz6uPRmj2dnZ3Z9RJVgUK4YSsZTimx0gEYWgqME26gUOVXD5YjeRMmgGbiNEAqdbCTpAdijfkXEI76DiUOiDfYTQpJg5npz/IpGjRI0B7jzvNaAVFS1UgN1m5WF3AMzXWnZgjR9FHyqu4BBTTqy16zFIr1dri3HujcOrdRactX0Fh6k+bsz8KM8VHHX0d/42nDeAFXA0n5o1NfGFmVVwbUYK2Rd0v6BViNqjXBhAs/COMdZ5Of+PMuw53lx4OMsCIwmGPnVxCIhCSjLchxp1twDTJlxqoBTrqbRXYz8MLvAnUXkPLsPPZ5ENS3YSHT8n713kBW8304bR6Hrxy65rvwuz40+mlCX/f31BRrabaf9nq7qpmCbl6elVsgr6Q7TdGtdtNudQ17Dpy+tJHA1swIAAA=="
+ },
+ SK: "P",
+ PK: "T#root#L#en-US#CMS#CME#658c2524adbc1700090e1ad1",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T13:22:46.134Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.528Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TXY+UQBD8K2Z8FFgY2IPjaWOiiS9q4nmJGrNphmYz3nxsmFn2cMN/twfYxBjvfPGNru6pqaoeLuyMjTTjPfZOWsNqtk3yKuEsYh4NGE9Ib62nGo3vx3ctATcp51VWVB3womjTNK1EUYrylobkc/2X9JnRkLYtqpmp02+lQoKUFUAfNd0Sf/5EgOgRPLYfgiSe8jzOeMzLu4zXBa+3VVJui6805mD499DK9Xpk9WVVuK1E1pS5yG+bJgsKizxrioKGW+mOCsb3oIMcaF9oaUIa43GpQzlFzJ7Nf2akVGQnF1JzUipiw3Up2RzQA9JFHSiH5NuDPzk63vbQhe0MoE7oghzb/EDhdyFRP5++0Cof/a6zqsV+jn3e6BQtuFl0OVoANApjKaxJ3HBga/8Bx3APahsf4YBu89R6N2dUwmqMvY2XV7XfP8m6upeaKDeEv3rUinrmpBvsd07+pG5ZpTfR1Y9GD8FLY61CMLtjLwfaKqt9f8KrFw8HyuDb97UEJcHhjEzLG7sm8pcwejjfPxPi9KeSKVCSAucXDRG7+/LxDREK7ZL5Z0mCo/1+tfo7PP0ChLfw5XgDAAA="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#60228148fa244d0008c47c79",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.528Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.684Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TTY/TMBT8K8gcSdLESYmbU4UEEhdAYllpQahykpfKrD8i2003VPnvPCephFbs7oWb3/h5PDPPvpAz1EKPt2CdMJpUZJvkLKEkIh401x4Ra4zHGrS348cWgbcppSwrWLdjrMjSNN2xrClpgU3iuf3XuMywSZkW5MzUqQ9CAkLSNBwXFd4Sf/uKQGOBe2g/B0k0pXmc0ZiWNxmtClptWVJui+/Y5vjwctPK9W4k1WVVuGVNVpd5k+/qOihkRZ7VRXDQCtdLPn7iKsjh7SsldEhj7Jc6lFNEzFn/Z0ZMRXRiIdUnKSMyXIeSzQHdA17UcekAfXvuTw6Pt5Z3YToDlydwQY6pf0Hj9yFRP5++4Cgf/L4zsgU7xz5PdIoWXC+6RNsnbjiSFb2HMbCDMnHPj+A2Tw11cwbZGAWxN/Hylg6HR1yrU6GQaIP4mwclcU+fVA1278Rv3KUlK1l0Fa/A8yC8NkYC1/veigFHSCpvT3AV7vkRDf/4uZZcCu5gRqblQV3t/8O55efbZxKbHiuZAiUqcH7REJGbuy/vkbBRLpl/RhIsHQ6r17/h6Q/nB7bbZQMAAA=="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#60228148f98841000981c724",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.684Z"
+ },
+ {
+ index: "root-headless-cms-en-us-modela",
+ _md: "2023-12-27T13:20:34.215Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA62Sy27CMBBFfyVylyVRbOdVVgXBoos+JChSu0FO7LRWHYcmDjQg/r1jA626gFV3njsnk+s73qGNyKXuF6JpZa3REMUBzQKCBsgIzbQBpalrA7XQpunvOAhJnBUkYjhJwjQXYRhmaYlxkgEkL/Wv4IgBqmoulJvkTiOQVF0wJUAR2n+egVA0ghnBH60lEhLqY+KTdI7pkIRDSoM0jV8Ba9n6LBQF+AAdZ417NNz9OsR5Sgt6k+fYOowozqMIYC7blWL9A6usHca9SmqbRr861LbcD1C90f88EbKQpTwM1Z1SA7Q+LQW7gD4E/Mg0nYBrG2a6Fr5edbmS7Tt0AGeqE611ZMSXuS3JZ9F1W0tNJuPr6czzvXubtzfypnaXHnXB6zff8VtieBXG/DxPrE27KeNc7VBZKy4at0n3SKDdsM3i5MPSEHxrTrbnL09TYIuqDdxrChQ4WC6PSfyVf252ebv7b3cJr33CAgAA"
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#658c24a16607be00087f1168",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T13:20:34.215Z"
+ },
+ {
+ index: "root-headless-cms-en-us-modela",
+ _md: "2023-12-27T13:20:34.216Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61Sy26DMBD8FeQeCwjbvMqpiZJDDn1IaSO1l8jgTYsKhmKTlET599pQohwa9dKbPZ6dnZ31AZUVh2LBUTKcJshGW2hkXgmUYBsVVcZUfzmgTVVwaHpuU1UKHW0k2Rb4g35FxCPUwcQh0ROmCfES6rs4Cl7RoFGA5oBwnpcakIqpVmqgbtMil+/ATVdWtCBNHwVf6nZDPrO23RvWbDa9ni8tx7ozDq2JNReq6SzaS4s3p+fvieKlF/DLfGIMZw0wBXza9Y262thivMyFFuO5rAvW3bNyQK0Bzo1mGMQZTiOa0Zs0xZ7nxT7Fqe8bTTDyi5FFfIbD0ItSMKxog3EYaxUFggk1RncyciE76kan7D50PIlqWrBRtRP/7H0HaS661bhxFLg0dsl55W/zXOkj1qTT/v76Ag3brcb9Hs/qxsGeXh7nWiErpdun6da6aL3+GfIcPn4DcthPZ7MCAAA="
+ },
+ SK: "P",
+ PK: "T#root#L#en-US#CMS#CME#658c24a16607be00087f1168",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T13:20:34.216Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.705Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TXa+UMBD9K6a+AguFFeRpY6KJL2ri9SZqzGaAYVNvP0hbdsUN/90psIkx3uuLb53T6ek5Z9oru2Aj9HSP1gmjWc32SV4lnEXMowbtCbHGeKpRezu97Qh4kXJeZUXVAy+KLk3Tqi3KtgRqEk/tP6dlRk3KdCgXpl69ERIJkqYFWtR0S/zpIwGtRfDYvQ+SeMrzOOMxL+8yXhe83ldJuS++UJuD87+bNq5XE6uvm8J91WZNmbf5y6bJgsIiz5qioOZOuEHC9A5UkAPdMyV0SGMa1jqUc8TMRf9nRkpF9GIl1aOUETvfhpItAT0gXdSDdEi+PfjR0fHOQh+mcwY5ogtyTPMdW38Iifrl9JVG+cMfeiM7tEvsy0TnaMX1qqs1So1a+CkWrdHJoE9sa3jAKVyEysQDnNDtHpvv7oKSaDD2Jl6f1fH4OO3mXyji3K24HlWD9uDET9rJyrzi0c2OQg/BSmOMRNCHwYozDZXV3o54s+LhRBF8/baVIAU4XJB5fWK3QP6ShYXL/RMZzn8qmQMlKXB+1RCxu88fXocglUuWv5JIsnQ8bj5/h+dfsmotBXcDAAA="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#60228148fa244d0008c47c7a",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.705Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.482Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TTY/TMBD9K8gcSdLmi4acKiSQuAASy0qAVtU4mVRm/VHZTrqhyn9nnKQSWrHLhRyizPP4+b03zoWdkQs93qJ1wmhWszLJqyRjEfOoQXtCrDGeatTejh9aAl5vs6xKC75tO3rRU1W7vOQNNYnn1l/SZ0pNyrQoZ6ZOvRcSCZKmAfqo6ZT46xcCGovgsf0UJGXbLI/TLM52N2lWF1ldVsmuLL5Tm4Ph300r19uR1ZdVYVk1Kd/lTf6G8zQoLPKUFwU1t8KdJIwfQQU50L5QQoc0xtNSh3KKmDnr/8xIqYhOLKS6lzJiw3Uo6RzQPdJBHUiH5NuD7x1tby10YToDyB5dkGP4T2z8PiTq590XGuWD33dGtmjn2OeJTtGC60XXcg9iaY4mccORrav3OIZTUJn4BEd0m6eGuzmjbIzC2Jt44TocnuBcnQtFhBvCXz0oSWu6Vxzt3olftFpuyzy6elHoIfjgxkgEvT9ZMdBEWe1tj1cfHo7k/8fdWoIU4HBGpuV+XdP4SxAWzrfPBDg9VjIFSlLg/KIhYjffPr8jwka5ZP5RkuDocFit/glPvwF6hmKrdAMAAA=="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#6022814b0df4b000088735bc",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.482Z"
+ },
+ {
+ index: "root-headless-cms-en-us-modela",
+ _md: "2023-12-27T13:20:42.214Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61SPW/CMBD9K5E7lkS2E5KQqSAYOvRDokVqF+TEThXVcajtQAPiv/dsQO3ULt18757v3r27A9qJslHDSmjTdAoVaBzFeUTRCFmhmLKA6K6zEAtl9XDLAUjHeUUTxtIUZ6XAGOdZTUg6AVLzW/4KngRIbceF9JX8awqQ7ComBSBChc9LACotmBX8wUmimMYhoSHNnkhcUFwkNCI5fgWaYdu/SedaswEVh2+FpMziKp6UJXEKk5iUSQJk3piNZMM9a50cxoO2Uc6NYXOKXXgcoW6n/rkieNHUzamo6qUcoe1lKcQb9C6gUc2kETC3ZbY38J1rVrvtbJnshXFyrPi0NzX9qPp+7xjz+ex6sQzC4M6ZHUyDhVtkkHjX1Vvo+XtqeYvHbhKnxa3D+tYHVHeSC+3X5S8B0prtVpd+jg3uGrgUq3uQ9vTyuABu1ZrIn0wkodN6fR73J3z8Ah+WbBR+AgAA"
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#658c24aa6607be00087f1169",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T13:20:42.214Z"
+ },
+ {
+ index: "root-headless-cms-en-us-modelb",
+ _md: "2023-12-27T13:23:15.572Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61STU/DMAz9K1U4slZN0tKuJ5i2Awc+JMYkuKC0cSEiTacmpZSJ/47TMcQBIQ7cbMd+7/k5O9K0EvS5JMU+WpAZeYHOqtaQgs6IbivhpmRH6lZL6Kberm0deZ8RK15AXuErYTHjIWUhy9aUF4wXNI1SfnJP9hgasAdMeHuDBeuE6y0WZCdq5xmF7sF6Dgev7jSRsGUDe8KO5XJxvLoJwuDCqwsWwcq4bgxYcHu9PFuvlhO8eQynuaxKXT4M4i9zKL7qQDiQi9ETK7/WSZpXtMx4xedlSeM4zhNOyyRBFqnsVovxUjR+EyGDRhksu3G7z32KmOBpzg9YLOVUyLKiGWLNY8CE+SEwwriDjV9CfvKRFWkWxfPk08dnQOhaaAsz0g7mn8UPUCozbg7nJ2nE88gLVr8tdIQhxSb8P6pW/yypAYfn3GHUiWHz9U1qpeE0FW77lpueFKbXGls0umjRV9f16M/67nqFUFVjo+kqkUb8h4dPhu/l9w8+vp3CBwMAAA=="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#658c2531adbc1700090e1ad2",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T13:23:15.572Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.544Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TTYvbMBD9K0G92o5lOxuvT6HQQi9toduFbilBtsZBXX0YSU7qBv/3jvwBpXR3L3vzPI3evPdGvpIL1EIP92CdMJpUZJfkZZKRiHjQTHtErDEea9DeDh84AjdplpW0KG+AF7RN07Ssm4wzjk3iufM3+EmxSRkOcmJq1XshASFpGoYfFU6Jv35BoLHAPPBPQVKWZnlMszjb39GsKrJqVyb7XfGAbY6dX25auN4OpLouCndlQ+t93uS3dU2DwiKndVFgMxeuk2z4yFSQw/hGCR3SGLq5DuUYEXPRr8yIqYhWzKS6lzIi53UpdAroEXBQy6QD9O2Z7x1e55a1YTtnJntwQY6pf0LjDyFRP92+4ip/+UNrJAc7xT5tdIxmXM+65ncQO7A4VoJzcaNc0unTZkOWzkcYwkRQJu7YCdz2qUVvLyAboyD2Jp55j8cn+Vf2JQ+hkHo747pXNdiDE7/xhKZleVtGqz8FngVvtTESmD50Vpxxy6TytofVm2cnzOT7j6VkUjAHEzLOb25N6D/hWHa5fybU8V8lY6BEBc7PGiJy9+3zOyQMPqefJ5Ho6XhcjP4Nj38A+G24n4gDAAA="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dad",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.544Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.524Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TXY/TMBD8K8g8kqSNk15zeaqQQOIFkDhOAoSqdbKpzPmjst30QpX/zjpJJYS444W37Ox6PDPrXNgZhTTDPTovrWE122RFlXGWsIAGTCDEWRuoRhPc8K4l4GbNeZWXArsSbsv1el2JQgCvaEg+139JnzkNaduimpg6/VYqJEjZBuijplvSz58IaBxCwPZDlMTXvEhznvLtXc7rktebKttuyq805qH/99DC9Xpg9WVRuKmaXGyLprgVIo8KyyIXZUnDrfRHBcN70FEOtC+0NDGN4TjXsRwTZs/mPzNSKrKTM6k5KZWw/rqUfAroAemiDpRH8h0gnDwdbx10cTs9qBP6KMeKH9iEXUw0TKcvtMrHsOusatFNsU8bHZMZN7MuNL101mhas898f2BL+wGHeA1qmx7hgH711HZXZ1SN1ZgGm86Par9/inTxLjUxrgh/9agV9cxJC3Q7L39SNy/49mabXP1oDBC9CGsVgtkdnexpq6wO7oRXLwEOlMG370sJSoLHCRnnN3ZN5C9hODjfPxPi+KeSMVKSAh9mDQm7+/LxDRE22mfTz5JFT/v9YvZ3ePwFS0oiTngDAAA="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba28",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.524Z"
+ },
+ {
+ index: "root-headless-cms-en-us-fmfile",
+ _md: "2023-12-27T12:42:59.703Z",
+ data: {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA61TXY+UQBD8K2Z8FFgY2FvkaWOiiS9q4nnJacymgWYz3nxsZgb2cMN/twfYxJjzfPGNru6pqaoeLuyMtdDjHVonjGYV2yZ5mXAWMY8atCfEGuOpRu3t+L4l4CblvMyK8gbbIuvSNC3rhrfQ0JB4rv+SPjMaUqZFOTN16p2QSJA0DdBHRbfEXz4T0FgEj+3HIImnPI8zHvPdbcarglfbMtlti6805mD499DK9WZk1WVVuC2brN7lTf66rrOgsMizuihouBXuJGH8ACrIgfaFEjqkMZ6WOpRTxMxZ/2dGSkV0YiHVvZQRG65LyeaAHpAu6kA6JN8efO/oeGuhC9sZQPboghxT/8DG70Oifj59oVU++n1nZIt2jn3e6BQtuF50teAhFo3RiRuObO094BhaqEx8giO6zd9WuzmjbIzC2Jt4eVGHw5OMq2uhiG5D+KtHJamne1Wj3Tvxk7q7PNvm0dWIQg/BRG2MRND7kxUDrZNV3vZ4NeHhSOa/fV9LkAIczsi0PK5rFE+kYOF890x6059KpkBJCpxfNETs9v7TWyJslEvmvyQJlg6H1evv8PQL5bUc+3EDAAA="
+ },
+ SK: "L",
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dac",
+ _et: "CmsEntriesElasticsearch",
+ _ct: "2023-12-27T12:42:59.703Z"
+ }
+];
diff --git a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.ddbPrimaryTableData.ts b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.ddbPrimaryTableData.ts
new file mode 100644
index 00000000000..2b550c15fca
--- /dev/null
+++ b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.ddbPrimaryTableData.ts
@@ -0,0 +1,2978 @@
+export const ddbPrimaryTableData = [
+ {
+ permissions: [{ name: "*" }],
+ slug: "full-access",
+ _et: "SecurityGroup",
+ name: "Full Access",
+ _ct: "2023-12-27T12:41:05.020Z",
+ TYPE: "security.group",
+ tenant: "root",
+ system: true,
+ _md: "2023-12-27T12:41:05.020Z",
+ createdOn: "2023-12-27T12:41:04.963Z",
+ GSI1_SK: "full-access",
+ SK: "A",
+ description: "Grants full access to all apps.",
+ webinyVersion: "5.38.2",
+ id: "658c1b60c39bb10008431b42",
+ PK: "T#root#GROUP#658c1b60c39bb10008431b42",
+ GSI1_PK: "T#root#GROUPS"
+ },
+ {
+ _md: "2023-12-27T12:43:14.870Z",
+ data: {
+ path: "/welcome-to-webiny",
+ value: "658c1bd3c39bb10008431b5b#0001",
+ tenant: "root",
+ key: "pb-page"
+ },
+ GSI1_SK: "pb-page#658c1bd3c39bb10008431b5b#0001#/welcome-to-webiny",
+ SK: "658c1bd3c39bb10008431b5b#0001#/welcome-to-webiny",
+ PK: "T#root#PS#TAG#pb-page#658c1bd3c39bb10008431b5b#0001#/welcome-to-webiny",
+ _et: "PrerenderingServiceTagPathLink",
+ _ct: "2023-12-27T12:43:14.870Z",
+ TYPE: "ps.tagPathLink",
+ GSI1_PK: "T#root#PS#TAG"
+ },
+ {
+ modelId: "acoSearchRecord-pbpage",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:43:00.024Z",
+ locale: "en-US",
+ status: "draft",
+ meta: {},
+ values: {
+ "object@data": {
+ "number@version": 1,
+ "object@createdBy": {
+ "text@displayName": "ad min",
+ "text@type": "admin",
+ "text@id": "658c1b73c39bb10008431b44"
+ },
+ "text@id": "658c1bd3c39bb10008431b5c#0001",
+ "text@title": "Not Found",
+ "boolean@locked": true,
+ "datetime@createdOn": "2023-12-27T12:42:59.964Z",
+ "text@status": "published",
+ "text@path": "/not-found",
+ "text@pid": "658c1bd3c39bb10008431b5c",
+ "datetime@savedOn": "2023-12-27T12:43:00.663Z"
+ },
+ "object@location": { "text@folderId": "root" },
+ "text@title": "Not Found",
+ "text@content":
+ "Not Found Page not found! Sorry, but the page you were looking for could not be found. TAKE ME HOme",
+ "text@type": "PbPage",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:43:01.122Z",
+ TYPE: "L",
+ entryId: "wby-aco-658c1bd3c39bb10008431b5c",
+ tenant: "root",
+ _md: "2023-12-27T12:43:01.122Z",
+ createdOn: "2023-12-27T12:43:00.024Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "wby-aco-658c1bd3c39bb10008431b5c#0001",
+ PK: "T#root#L#en-US#CMS#CME#wby-aco-658c1bd3c39bb10008431b5c",
+ modifiedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" }
+ },
+ {
+ modelId: "acoSearchRecord-pbpage",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:43:00.024Z",
+ locale: "en-US",
+ status: "draft",
+ meta: {},
+ values: {
+ "object@data": {
+ "number@version": 1,
+ "object@createdBy": {
+ "text@displayName": "ad min",
+ "text@type": "admin",
+ "text@id": "658c1b73c39bb10008431b44"
+ },
+ "text@id": "658c1bd3c39bb10008431b5c#0001",
+ "text@title": "Not Found",
+ "boolean@locked": true,
+ "datetime@createdOn": "2023-12-27T12:42:59.964Z",
+ "text@status": "published",
+ "text@path": "/not-found",
+ "text@pid": "658c1bd3c39bb10008431b5c",
+ "datetime@savedOn": "2023-12-27T12:43:00.663Z"
+ },
+ "object@location": { "text@folderId": "root" },
+ "text@title": "Not Found",
+ "text@content":
+ "Not Found Page not found! Sorry, but the page you were looking for could not be found. TAKE ME HOme",
+ "text@type": "PbPage",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:43:01.121Z",
+ TYPE: "cms.entry",
+ entryId: "wby-aco-658c1bd3c39bb10008431b5c",
+ tenant: "root",
+ _md: "2023-12-27T12:43:01.121Z",
+ createdOn: "2023-12-27T12:43:00.024Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "wby-aco-658c1bd3c39bb10008431b5c#0001",
+ PK: "T#root#L#en-US#CMS#CME#wby-aco-658c1bd3c39bb10008431b5c",
+ modifiedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" }
+ },
+ {
+ locale: "en-US",
+ slug: "static",
+ layout: "static",
+ url: "/static/",
+ _et: "PbCategories",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ name: "Static",
+ _ct: "2023-12-27T12:42:57.966Z",
+ TYPE: "pb.category",
+ tenant: "root",
+ _md: "2023-12-27T12:42:57.966Z",
+ createdOn: "2023-12-27T12:42:57.965Z",
+ SK: "static",
+ PK: "T#root#L#en-US#PB#C"
+ },
+ {
+ content: {
+ compression: "jsonpack",
+ content:
+ "id|h0HqpItbGT|type|document|data|settings|elements|ZlkwCyXhhc|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|horizontalAlignFlex|center|verticalAlign|flex-start|pwR8zBN28v|grid|1100px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|6838kMd5Vh|cell|80px|size|iG8DLRffpF|heading|text|typography|heading1|alignment|tag|h1|color|color3|Page+not+found!|9UHkb1nlN1|paragraph|paragraph1|div|Sorry,+but+the+page+you+were+looking+for+could+not+be+found.|PkNZ6zIVWv|button|buttonText|TAKE+ME+HOme|30px|link|href|/|primary^C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|N|$A|O]|P|$A|Q]]]|6|@$0|R|2|S|4|$5|$9|$A|$B|T]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|S|$U|V]|W|$A|$X|Y]|Z|$X|10]]|N|$A|Q]|P|$A|Q]]]|6|@$0|11|2|12|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|E|13]]|S|$14|1U]]]|6|@$0|15|2|16|4|$17|$A|$2|16|18|19|1A|O|1B|1C|1D|1E]|4|$17|1F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|1G|2|1H|4|$17|$A|$2|1H|18|1I|1A|O|1B|1J|1D|1E]|4|$17|1K]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|1L|2|1M|4|$1N|1O|5|$D|$A|$L|F|J|-1|E|1P]]|N|$A|O]]|1Q|$1R|1S]|2|1T]|6|@]]]]]]]]]]"
+ },
+ status: "published",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ TYPE: "pb.page.l",
+ _md: "2023-12-27T12:43:00.681Z",
+ SK: "L",
+ publishedOn: "2023-12-27T12:43:00.663Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5c#0001",
+ version: 1,
+ settings: { seo: { meta: [] }, general: { layout: "static" }, social: { meta: [] } },
+ path: "/not-found",
+ savedOn: "2023-12-27T12:43:00.663Z",
+ locale: "en-US",
+ pid: "658c1bd3c39bb10008431b5c",
+ _et: "PbPages",
+ _ct: "2023-12-27T12:43:00.681Z",
+ tenant: "root",
+ createdOn: "2023-12-27T12:42:59.964Z",
+ locked: true,
+ category: "static",
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ webinyVersion: "5.38.2",
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5c",
+ title: "Not Found"
+ },
+ {
+ content: {
+ compression: "jsonpack",
+ content:
+ "id|h0HqpItbGT|type|document|data|settings|elements|ZlkwCyXhhc|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|horizontalAlignFlex|center|verticalAlign|flex-start|pwR8zBN28v|grid|1100px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|6838kMd5Vh|cell|80px|size|iG8DLRffpF|heading|text|typography|heading1|alignment|tag|h1|color|color3|Page+not+found!|9UHkb1nlN1|paragraph|paragraph1|div|Sorry,+but+the+page+you+were+looking+for+could+not+be+found.|PkNZ6zIVWv|button|buttonText|TAKE+ME+HOme|30px|link|href|/|primary^C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|N|$A|O]|P|$A|Q]]]|6|@$0|R|2|S|4|$5|$9|$A|$B|T]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|S|$U|V]|W|$A|$X|Y]|Z|$X|10]]|N|$A|Q]|P|$A|Q]]]|6|@$0|11|2|12|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|E|13]]|S|$14|1U]]]|6|@$0|15|2|16|4|$17|$A|$2|16|18|19|1A|O|1B|1C|1D|1E]|4|$17|1F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|1G|2|1H|4|$17|$A|$2|1H|18|1I|1A|O|1B|1J|1D|1E]|4|$17|1K]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|1L|2|1M|4|$1N|1O|5|$D|$A|$L|F|J|-1|E|1P]]|N|$A|O]]|1Q|$1R|1S]|2|1T]|6|@]]]]]]]]]]"
+ },
+ status: "published",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ TYPE: "pb.page.p",
+ _md: "2023-12-27T12:43:00.682Z",
+ SK: "P",
+ publishedOn: "2023-12-27T12:43:00.663Z",
+ id: "658c1bd3c39bb10008431b5c#0001",
+ editor: "page-builder",
+ version: 1,
+ settings: { seo: { meta: [] }, general: { layout: "static" }, social: { meta: [] } },
+ path: "/not-found",
+ locale: "en-US",
+ savedOn: "2023-12-27T12:43:00.663Z",
+ pid: "658c1bd3c39bb10008431b5c",
+ _et: "PbPages",
+ _ct: "2023-12-27T12:43:00.682Z",
+ tenant: "root",
+ createdOn: "2023-12-27T12:42:59.964Z",
+ locked: true,
+ category: "static",
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ webinyVersion: "5.38.2",
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5c",
+ title: "Not Found"
+ },
+ {
+ content: {
+ compression: "jsonpack",
+ content:
+ "id|h0HqpItbGT|type|document|data|settings|elements|ZlkwCyXhhc|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|horizontalAlignFlex|center|verticalAlign|flex-start|pwR8zBN28v|grid|1100px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|6838kMd5Vh|cell|80px|size|iG8DLRffpF|heading|text|typography|heading1|alignment|tag|h1|color|color3|Page+not+found!|9UHkb1nlN1|paragraph|paragraph1|div|Sorry,+but+the+page+you+were+looking+for+could+not+be+found.|PkNZ6zIVWv|button|buttonText|TAKE+ME+HOme|30px|link|href|/|primary^C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|N|$A|O]|P|$A|Q]]]|6|@$0|R|2|S|4|$5|$9|$A|$B|T]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|S|$U|V]|W|$A|$X|Y]|Z|$X|10]]|N|$A|Q]|P|$A|Q]]]|6|@$0|11|2|12|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|E|13]]|S|$14|1U]]]|6|@$0|15|2|16|4|$17|$A|$2|16|18|19|1A|O|1B|1C|1D|1E]|4|$17|1F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|1G|2|1H|4|$17|$A|$2|1H|18|1I|1A|O|1B|1J|1D|1E]|4|$17|1K]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|1L|2|1M|4|$1N|1O|5|$D|$A|$L|F|J|-1|E|1P]]|N|$A|O]]|1Q|$1R|1S]|2|1T]|6|@]]]]]]]]]]"
+ },
+ status: "published",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ TYPE: "pb.page",
+ _md: "2023-12-27T12:43:00.681Z",
+ SK: "REV#0001",
+ publishedOn: "2023-12-27T12:43:00.663Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5c#0001",
+ version: 1,
+ settings: { seo: { meta: [] }, general: { layout: "static" }, social: { meta: [] } },
+ path: "/not-found",
+ savedOn: "2023-12-27T12:43:00.663Z",
+ locale: "en-US",
+ pid: "658c1bd3c39bb10008431b5c",
+ _et: "PbPages",
+ _ct: "2023-12-27T12:43:00.681Z",
+ tenant: "root",
+ createdOn: "2023-12-27T12:42:59.964Z",
+ locked: true,
+ category: "static",
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ webinyVersion: "5.38.2",
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5c",
+ title: "Not Found"
+ },
+ {
+ locale: "en-US",
+ slug: "main-menu",
+ _et: "PbMenus",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ items: [],
+ _ct: "2023-12-27T12:42:59.821Z",
+ TYPE: "pb.menu",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.821Z",
+ createdOn: "2023-12-27T12:42:59.821Z",
+ SK: "main-menu",
+ description: "The main menu of the website, containing links to most important pages.",
+ PK: "T#root#L#en-US#PB#M",
+ title: "Main Menu"
+ },
+ {
+ _md: "2023-12-27T12:27:56.881Z",
+ data: {
+ context: {
+ logGroupName: "/aws/lambda/wby-data-migration-db1144d",
+ logStreamName: "2023/12/27/[$LATEST]4230e2d1a850456aa079f8fd4356284d"
+ },
+ id: "658c184c554a6d00083aa519",
+ finishedOn: "2023-12-27T12:27:56.881Z",
+ startedOn: "2023-12-27T12:27:56.797Z",
+ migrations: [
+ { id: "5.35.0-001", status: "not-applicable" },
+ { id: "5.35.0-002", status: "not-applicable" },
+ { id: "5.35.0-003", status: "not-applicable" },
+ { id: "5.35.0-004", status: "not-applicable" },
+ { id: "5.35.0-005", status: "not-applicable" },
+ { id: "5.35.0-006", status: "not-applicable" },
+ { id: "5.36.0-001", status: "not-applicable" },
+ { id: "5.37.0-001", status: "not-applicable" },
+ { id: "5.37.0-002", status: "not-applicable" },
+ { id: "5.37.0-003", status: "not-applicable" },
+ { id: "5.37.0-004", status: "not-applicable" },
+ { id: "5.37.0-005", status: "not-applicable" },
+ { id: "5.38.0-001", status: "not-applicable" },
+ { id: "5.38.0-002", status: "not-applicable" },
+ { id: "5.38.0-003", status: "not-applicable" }
+ ],
+ status: "done"
+ },
+ GSI1_SK: "658c184c554a6d00083aa519",
+ SK: "A",
+ PK: "MIGRATION_RUN#658c184c554a6d00083aa519",
+ _et: "MigrationRun",
+ _ct: "2023-12-27T12:27:56.881Z",
+ TYPE: "migration.run",
+ GSI1_PK: "MIGRATION_RUNS"
+ },
+ {
+ tenant: "root",
+ _md: "2023-12-27T12:43:01.966Z",
+ locale: "en-US",
+ reCaptcha: { secretKey: null, enabled: null, siteKey: null },
+ SK: "default",
+ PK: "T#root#L#en-US#FB#SETTINGS",
+ _et: "FormBuilderSettings",
+ _ct: "2023-12-27T12:43:01.966Z",
+ domain: "https://d3hohw12noi930.cloudfront.net"
+ },
+ {
+ _md: "2023-12-27T12:43:19.484Z",
+ data: { path: "/", value: "main-menu", tenant: "root", key: "pb-menu" },
+ GSI1_SK: "pb-menu#main-menu#/",
+ SK: "main-menu#/",
+ PK: "T#root#PS#TAG#pb-menu#main-menu#/",
+ _et: "PrerenderingServiceTagPathLink",
+ _ct: "2023-12-27T12:43:19.484Z",
+ TYPE: "ps.tagPathLink",
+ GSI1_PK: "T#root#PS#TAG"
+ },
+ {
+ permissions: [],
+ slug: "anonymous",
+ _et: "SecurityGroup",
+ name: "Anonymous",
+ _ct: "2023-12-27T12:41:05.147Z",
+ TYPE: "security.group",
+ tenant: "root",
+ system: true,
+ _md: "2023-12-27T12:41:05.147Z",
+ createdOn: "2023-12-27T12:41:05.146Z",
+ GSI1_SK: "anonymous",
+ SK: "A",
+ description: "Permissions for anonymous users (public access).",
+ webinyVersion: "5.38.2",
+ id: "658c1b61c39bb10008431b43",
+ PK: "T#root#GROUP#658c1b61c39bb10008431b43",
+ GSI1_PK: "T#root#GROUPS"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg",
+ "text@aliases": [],
+ "number@size": 17711,
+ "text@name": "security.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.007Z",
+ TYPE: "cms.entry.l",
+ entryId: "6022814bef4a940008b3ba27",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.007Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "6022814bef4a940008b3ba27#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba27"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg",
+ "text@aliases": [],
+ "number@size": 17711,
+ "text@name": "security.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.007Z",
+ TYPE: "cms.entry",
+ entryId: "6022814bef4a940008b3ba27",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.007Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "6022814bef4a940008b3ba27#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba27"
+ },
+ {
+ modelId: "modelA",
+ pluralApiName: "ModelAs",
+ group: { name: "Ungrouped", id: "658c1bcbc39bb10008431b45" },
+ descriptionFieldId: "description",
+ imageFieldId: "image",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ name: "ModelA",
+ TYPE: "cms.model",
+ titleFieldId: "title",
+ fields: [
+ {
+ multipleValues: false,
+ listValidation: [],
+ settings: {},
+ renderer: { name: "text-input" },
+ helpText: null,
+ predefinedValues: { enabled: false, values: [] },
+ label: "Title",
+ type: "text",
+ tags: [],
+ placeholderText: null,
+ id: "f2qcuuzs",
+ validation: [
+ { name: "required", message: "Title is a required field.", settings: {} }
+ ],
+ storageId: "text@f2qcuuzs",
+ fieldId: "title"
+ },
+ {
+ multipleValues: false,
+ listValidation: [],
+ settings: {},
+ renderer: { name: "long-text-text-area" },
+ helpText: null,
+ predefinedValues: { enabled: false, values: [] },
+ label: "Description",
+ type: "long-text",
+ tags: [],
+ placeholderText: null,
+ id: "z2tdm05d",
+ validation: [],
+ storageId: "long-text@z2tdm05d",
+ fieldId: "description"
+ },
+ {
+ multipleValues: false,
+ listValidation: [],
+ settings: { imagesOnly: true },
+ renderer: { name: "file-input" },
+ helpText: null,
+ predefinedValues: { enabled: false, values: [] },
+ label: "Image",
+ type: "file",
+ tags: [],
+ placeholderText: null,
+ id: "8y67xrmj",
+ validation: [],
+ storageId: "file@8y67xrmj",
+ fieldId: "image"
+ }
+ ],
+ _md: "2023-12-27T13:20:12.156Z",
+ SK: "modelA",
+ singularApiName: "ModelA",
+ tags: ["type:model"],
+ locale: "en-US",
+ savedOn: "2023-12-27T13:18:39.298Z",
+ layout: [["f2qcuuzs"], ["z2tdm05d", "8y67xrmj"]],
+ lockedFields: [
+ { multipleValues: false, type: "text", fieldId: "text@f2qcuuzs" },
+ { multipleValues: false, type: "long-text", fieldId: "long-text@z2tdm05d" },
+ { multipleValues: false, type: "file", fieldId: "file@8y67xrmj" }
+ ],
+ _et: "CmsModels",
+ _ct: "2023-12-27T13:20:12.156Z",
+ tenant: "root",
+ createdOn: "2023-12-27T13:18:26.594Z",
+ webinyVersion: "5.38.2",
+ PK: "T#root#L#en-US#CMS#CM"
+ },
+ {
+ modelId: "modelB",
+ pluralApiName: "ModelBs",
+ group: { name: "Ungrouped", id: "658c1bcbc39bb10008431b45" },
+ descriptionFieldId: "description",
+ imageFieldId: "image",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ name: "ModelB",
+ TYPE: "cms.model",
+ titleFieldId: "title",
+ fields: [
+ {
+ multipleValues: false,
+ listValidation: [],
+ settings: {},
+ renderer: { name: "text-input" },
+ helpText: null,
+ predefinedValues: { enabled: false, values: [] },
+ label: "Title",
+ type: "text",
+ tags: [],
+ placeholderText: null,
+ id: "4dep2w2h",
+ validation: [
+ { name: "required", message: "Title is a required field.", settings: {} }
+ ],
+ storageId: "text@4dep2w2h",
+ fieldId: "title"
+ },
+ {
+ multipleValues: false,
+ listValidation: [],
+ settings: {},
+ renderer: { name: "long-text-text-area" },
+ helpText: null,
+ predefinedValues: { enabled: false, values: [] },
+ label: "Description",
+ type: "long-text",
+ tags: [],
+ placeholderText: null,
+ id: "7c5t8wwa",
+ validation: [],
+ storageId: "long-text@7c5t8wwa",
+ fieldId: "description"
+ },
+ {
+ multipleValues: false,
+ listValidation: [],
+ settings: { imagesOnly: true },
+ renderer: { name: "file-input" },
+ helpText: null,
+ predefinedValues: { enabled: false, values: [] },
+ label: "Image",
+ type: "file",
+ tags: [],
+ placeholderText: null,
+ id: "5atpz8nu",
+ validation: [],
+ storageId: "file@5atpz8nu",
+ fieldId: "image"
+ }
+ ],
+ _md: "2023-12-27T13:22:45.032Z",
+ SK: "modelB",
+ singularApiName: "ModelB",
+ tags: ["type:model"],
+ locale: "en-US",
+ savedOn: "2023-12-27T13:21:46.459Z",
+ layout: [["4dep2w2h"], ["7c5t8wwa", "5atpz8nu"]],
+ lockedFields: [
+ { multipleValues: false, type: "text", fieldId: "text@4dep2w2h" },
+ { multipleValues: false, type: "long-text", fieldId: "long-text@7c5t8wwa" },
+ { multipleValues: false, type: "file", fieldId: "file@5atpz8nu" }
+ ],
+ _et: "CmsModels",
+ _ct: "2023-12-27T13:22:45.032Z",
+ tenant: "root",
+ createdOn: "2023-12-27T13:21:39.663Z",
+ webinyVersion: "5.38.2",
+ PK: "T#root#L#en-US#CMS#CM"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg",
+ "text@aliases": [],
+ "number@size": 27804,
+ "text@name": "developer.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.262Z",
+ TYPE: "cms.entry.l",
+ entryId: "60228145f98841000981c721",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.262Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "60228145f98841000981c721#0001",
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c721"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg",
+ "text@aliases": [],
+ "number@size": 27804,
+ "text@name": "developer.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.261Z",
+ TYPE: "cms.entry",
+ entryId: "60228145f98841000981c721",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.261Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "60228145f98841000981c721#0001",
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c721"
+ },
+ {
+ tenant: "root",
+ version: "5.38.2",
+ _md: "2023-12-27T12:41:24.444Z",
+ SK: "ADMIN_USERS",
+ PK: "T#root#SYSTEM",
+ _et: "AdminUsers.System",
+ _ct: "2023-12-27T12:41:24.444Z",
+ TYPE: "adminUsers.system"
+ },
+ {
+ tenant: "root",
+ version: "5.38.2",
+ _md: "2023-12-27T12:42:51.969Z",
+ SK: "CMS",
+ PK: "T#root#SYSTEM",
+ _et: "CmsSystem",
+ _ct: "2023-12-27T12:42:51.969Z"
+ },
+ {
+ tenant: "root",
+ version: "5.38.2",
+ _md: "2023-12-27T12:43:01.981Z",
+ SK: "FB",
+ PK: "T#root#SYSTEM",
+ _et: "FormBuilderSystem",
+ _ct: "2023-12-27T12:43:01.981Z"
+ },
+ {
+ tenant: "root",
+ version: "5.38.2",
+ _md: "2023-12-27T12:42:52.301Z",
+ SK: "FM",
+ PK: "T#root#SYSTEM",
+ _et: "System",
+ _ct: "2023-12-27T12:42:52.301Z"
+ },
+ {
+ tenant: "root",
+ version: "5.38.2",
+ _md: "2023-12-27T12:42:49.990Z",
+ SK: "I18N",
+ PK: "T#root#SYSTEM",
+ _et: "I18NSystem",
+ _ct: "2023-12-27T12:42:49.990Z"
+ },
+ {
+ tenant: "root",
+ version: "5.38.2",
+ _md: "2023-12-27T12:43:01.256Z",
+ SK: "PB",
+ PK: "T#root#SYSTEM",
+ _et: "PbSystem",
+ _ct: "2023-12-27T12:43:01.256Z"
+ },
+ {
+ tenant: "root",
+ version: "5.38.2",
+ installedOn: "2023-12-27T12:41:05.169Z",
+ _md: "2023-12-27T12:41:05.169Z",
+ SK: "SECURITY",
+ PK: "T#root#SYSTEM",
+ _et: "SecuritySystem",
+ _ct: "2023-12-27T12:41:05.169Z"
+ },
+ {
+ version: "5.38.2",
+ _md: "2023-12-27T12:40:58.981Z",
+ SK: "TENANCY",
+ PK: "T#root#SYSTEM",
+ _et: "TenancySystem",
+ _ct: "2023-12-27T12:40:58.981Z"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg",
+ "text@aliases": [],
+ "number@size": 1864,
+ "text@name": "hero-block-bg.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:58.903Z",
+ TYPE: "cms.entry.l",
+ entryId: "6022814b7a77e60008f70d62",
+ tenant: "root",
+ _md: "2023-12-27T12:42:58.903Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "6022814b7a77e60008f70d62#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814b7a77e60008f70d62"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg",
+ "text@aliases": [],
+ "number@size": 1864,
+ "text@name": "hero-block-bg.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:58.903Z",
+ TYPE: "cms.entry",
+ entryId: "6022814b7a77e60008f70d62",
+ tenant: "root",
+ _md: "2023-12-27T12:42:58.903Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "6022814b7a77e60008f70d62#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814b7a77e60008f70d62"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key":
+ "demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg",
+ "text@aliases": [],
+ "number@size": 888,
+ "text@name": "feature-card-bg.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:58.944Z",
+ TYPE: "cms.entry.l",
+ entryId: "602282e07a77e60008f70d63",
+ tenant: "root",
+ _md: "2023-12-27T12:42:58.944Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "602282e07a77e60008f70d63#0001",
+ PK: "T#root#L#en-US#CMS#CME#602282e07a77e60008f70d63"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key":
+ "demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg",
+ "text@aliases": [],
+ "number@size": 888,
+ "text@name": "feature-card-bg.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:58.944Z",
+ TYPE: "cms.entry",
+ entryId: "602282e07a77e60008f70d63",
+ tenant: "root",
+ _md: "2023-12-27T12:42:58.944Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "602282e07a77e60008f70d63#0001",
+ PK: "T#root#L#en-US#CMS#CME#602282e07a77e60008f70d63"
+ },
+ {
+ _md: "2023-12-27T12:43:14.870Z",
+ data: { path: "/welcome-to-webiny", value: "main-menu", tenant: "root", key: "pb-menu" },
+ GSI1_SK: "pb-menu#main-menu#/welcome-to-webiny",
+ SK: "main-menu#/welcome-to-webiny",
+ PK: "T#root#PS#TAG#pb-menu#main-menu#/welcome-to-webiny",
+ _et: "PrerenderingServiceTagPathLink",
+ _ct: "2023-12-27T12:43:14.870Z",
+ TYPE: "ps.tagPathLink",
+ GSI1_PK: "T#root#PS#TAG"
+ },
+ {
+ modelId: "modelA",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:20:25.701Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAIAFvZsCRgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 2"
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:20:25.735Z",
+ entryId: "658c24996607be00087f1167",
+ tenant: "root",
+ _md: "2023-12-27T13:20:25.735Z",
+ createdOn: "2023-12-27T13:20:25.235Z",
+ locked: true,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ publishedOn: "2023-12-27T13:20:25.701Z",
+ webinyVersion: "5.38.2",
+ id: "658c24996607be00087f1167#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c24996607be00087f1167"
+ },
+ {
+ modelId: "modelA",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:20:25.701Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAIAFvZsCRgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 2"
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:20:25.724Z",
+ TYPE: "cms.entry.p",
+ entryId: "658c24996607be00087f1167",
+ tenant: "root",
+ _md: "2023-12-27T13:20:25.724Z",
+ createdOn: "2023-12-27T13:20:25.235Z",
+ locked: true,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "P",
+ publishedOn: "2023-12-27T13:20:25.701Z",
+ webinyVersion: "5.38.2",
+ id: "658c24996607be00087f1167#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c24996607be00087f1167"
+ },
+ {
+ modelId: "modelA",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:20:25.701Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAIAFvZsCRgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 2"
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:20:25.723Z",
+ TYPE: "cms.entry",
+ entryId: "658c24996607be00087f1167",
+ tenant: "root",
+ _md: "2023-12-27T13:20:25.723Z",
+ createdOn: "2023-12-27T13:20:25.235Z",
+ locked: true,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ publishedOn: "2023-12-27T13:20:25.701Z",
+ webinyVersion: "5.38.2",
+ id: "658c24996607be00087f1167#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c24996607be00087f1167"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg",
+ "text@aliases": [],
+ "number@size": 28918,
+ "text@name": "adaptable-icon.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.105Z",
+ TYPE: "cms.entry.l",
+ entryId: "60228145f98841000981c720",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.105Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "60228145f98841000981c720#0001",
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c720"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg",
+ "text@aliases": [],
+ "number@size": 28918,
+ "text@name": "adaptable-icon.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.105Z",
+ TYPE: "cms.entry",
+ entryId: "60228145f98841000981c720",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.105Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "60228145f98841000981c720#0001",
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c720"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key":
+ "demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg",
+ "text@aliases": [],
+ "number@size": 67402,
+ "text@name": "permission-icon.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.202Z",
+ TYPE: "cms.entry.l",
+ entryId: "602281486ed41f0008bc2dab",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.202Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "602281486ed41f0008bc2dab#0001",
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dab"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key":
+ "demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg",
+ "text@aliases": [],
+ "number@size": 67402,
+ "text@name": "permission-icon.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.202Z",
+ TYPE: "cms.entry",
+ entryId: "602281486ed41f0008bc2dab",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.202Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "602281486ed41f0008bc2dab#0001",
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dab"
+ },
+ {
+ tenant: "root",
+ code: "en-US",
+ _md: "2023-12-27T12:42:49.523Z",
+ default: true,
+ createdOn: "2023-12-27T12:42:48.245Z",
+ SK: "default",
+ webinyVersion: "5.38.2",
+ PK: "T#root#I18N#L#D",
+ _et: "I18NLocale",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:49.523Z"
+ },
+ {
+ SK: "default",
+ eventTargetId: "wby-apw-scheduler-event-rule-target-34a2e04",
+ PK: "APW#SETTINGS",
+ mainGraphqlFunctionArn:
+ "arn:aws:lambda:eu-central-1:674320871285:function:wby-graphql-670ccd3",
+ eventRuleName: "wby-apw-scheduler-event-rule-3889a7f"
+ },
+ {
+ modelId: "acoSearchRecord-pbpage",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:43:00.006Z",
+ locale: "en-US",
+ status: "draft",
+ meta: {},
+ values: {
+ "object@data": {
+ "number@version": 1,
+ "object@createdBy": {
+ "text@displayName": "ad min",
+ "text@type": "admin",
+ "text@id": "658c1b73c39bb10008431b44"
+ },
+ "text@id": "658c1bd3c39bb10008431b5b#0001",
+ "text@title": "Welcome to Webiny",
+ "boolean@locked": true,
+ "datetime@createdOn": "2023-12-27T12:42:59.947Z",
+ "text@status": "published",
+ "text@path": "/welcome-to-webiny",
+ "text@pid": "658c1bd3c39bb10008431b5b",
+ "datetime@savedOn": "2023-12-27T12:43:00.723Z"
+ },
+ "object@location": { "text@folderId": "root" },
+ "text@title": "Welcome to Webiny",
+ "text@content":
+ "Welcome to Webiny Welcome to Webiny Webiny makes it easy to build applications and websites on top of the serverless infrastructure by providing you with a ready-made CMS and a development framework. Scalable Webiny apps can scale to handle the most demanding workloads. No custom tooling required Webiny eliminates the need to build custom tooling to create serverless app Cost effective Webiny apps run on serverless infrastructure which costs 80% less than VMs Resolves serverless challenges Webiny removes all the challenges of building serverless applications Get to know Webiny products Architect. Code. Deploy. Webiny Serverless Application Framework Everything you need to create and deploy applications on top of the serverless infrastructure. Use it to build: Full-stack applicationsMulti-tenant solutions APIsMicroservice Learn more An easier way to build serverless apps There are many solutions that help you run, deploy and monitor serverless functions, but when it comes to actually coding one, there are none. Webiny is a solution that helps you code your serverless app by providing you with all the components like ACL, routing, file storage and many more. Framework features Users, groups, roles & scopes Security is a crucial layer in any application. Webiny includes a full-featured security module that's connected to the built-in GraphQL API.Users, groups, roles & scopes Scaffolding Quickly generate boilerplate code using CLI plugins. From lambda functions to new GraphQL APIs. Customizable security Use the default AWS Cognito, or replace with 3rd party identity providers like Okta, Auth0, etc. Using plugins you can make Webiny work with any identity provider. Multiple environments No code change goes directly into a production environment. Webiny CLI makes it easy to manage and create multiple environments for your project. One size doesn't fit all It's a very different set of requirements a technical team has to a marketing team to a business development team. Webiny Serverless CMS comes with several different apps you can use independently, or together as part of a cohesive solution. Webiny Serverless CMS A suite of applications to help you manage your content. Use it to build: Marketing sites Multi-website solutions Content hubs Multi-language sites Intranet portals Headless content models Learn more CMS benefits Scalable No matter the demand, Webiny Serverless CMS can easily scale to meet even the most challenging workloads. Adaptable Being an open-source project, it's easy to modify and adapt things to your own needs. Low cost of ownership Self-hosted on top of serverless infrastructure. No infrastructure to mange, less people required to operate and maintain. Secure Secured by AWS Cognito. It's also easy to integrate services like OKTA, Auth0 and similar. Data ownership Webiny is self-hosted, it means your data stays within your data center. Permission control Powerful options to control the permissions your users will have. They perfectly align with your business requirements. Serverless makes infrastructure easy, Webiny makes serverless easy 1. Developer-friendly Webiny has been made with the developer in mind. It helps them develop serverless applications with ease. 2. Open source Webiny is created and maintained by an amazing group of people. Being open source means Webiny grows and evolves much faster. Contributor are welcome. 3. Community We have an active community on slack. Talk to the core-team, and get help. Webiny team is always there for any questions. View Webiny on GitHub",
+ "text@type": "PbPage",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:43:01.107Z",
+ TYPE: "L",
+ entryId: "wby-aco-658c1bd3c39bb10008431b5b",
+ tenant: "root",
+ _md: "2023-12-27T12:43:01.107Z",
+ createdOn: "2023-12-27T12:43:00.006Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "wby-aco-658c1bd3c39bb10008431b5b#0001",
+ PK: "T#root#L#en-US#CMS#CME#wby-aco-658c1bd3c39bb10008431b5b",
+ modifiedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" }
+ },
+ {
+ modelId: "acoSearchRecord-pbpage",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:43:00.006Z",
+ locale: "en-US",
+ status: "draft",
+ meta: {},
+ values: {
+ "object@data": {
+ "number@version": 1,
+ "object@createdBy": {
+ "text@displayName": "ad min",
+ "text@type": "admin",
+ "text@id": "658c1b73c39bb10008431b44"
+ },
+ "text@id": "658c1bd3c39bb10008431b5b#0001",
+ "text@title": "Welcome to Webiny",
+ "boolean@locked": true,
+ "datetime@createdOn": "2023-12-27T12:42:59.947Z",
+ "text@status": "published",
+ "text@path": "/welcome-to-webiny",
+ "text@pid": "658c1bd3c39bb10008431b5b",
+ "datetime@savedOn": "2023-12-27T12:43:00.723Z"
+ },
+ "object@location": { "text@folderId": "root" },
+ "text@title": "Welcome to Webiny",
+ "text@content":
+ "Welcome to Webiny Welcome to Webiny Webiny makes it easy to build applications and websites on top of the serverless infrastructure by providing you with a ready-made CMS and a development framework. Scalable Webiny apps can scale to handle the most demanding workloads. No custom tooling required Webiny eliminates the need to build custom tooling to create serverless app Cost effective Webiny apps run on serverless infrastructure which costs 80% less than VMs Resolves serverless challenges Webiny removes all the challenges of building serverless applications Get to know Webiny products Architect. Code. Deploy. Webiny Serverless Application Framework Everything you need to create and deploy applications on top of the serverless infrastructure. Use it to build: Full-stack applicationsMulti-tenant solutions APIsMicroservice Learn more An easier way to build serverless apps There are many solutions that help you run, deploy and monitor serverless functions, but when it comes to actually coding one, there are none. Webiny is a solution that helps you code your serverless app by providing you with all the components like ACL, routing, file storage and many more. Framework features Users, groups, roles & scopes Security is a crucial layer in any application. Webiny includes a full-featured security module that's connected to the built-in GraphQL API.Users, groups, roles & scopes Scaffolding Quickly generate boilerplate code using CLI plugins. From lambda functions to new GraphQL APIs. Customizable security Use the default AWS Cognito, or replace with 3rd party identity providers like Okta, Auth0, etc. Using plugins you can make Webiny work with any identity provider. Multiple environments No code change goes directly into a production environment. Webiny CLI makes it easy to manage and create multiple environments for your project. One size doesn't fit all It's a very different set of requirements a technical team has to a marketing team to a business development team. Webiny Serverless CMS comes with several different apps you can use independently, or together as part of a cohesive solution. Webiny Serverless CMS A suite of applications to help you manage your content. Use it to build: Marketing sites Multi-website solutions Content hubs Multi-language sites Intranet portals Headless content models Learn more CMS benefits Scalable No matter the demand, Webiny Serverless CMS can easily scale to meet even the most challenging workloads. Adaptable Being an open-source project, it's easy to modify and adapt things to your own needs. Low cost of ownership Self-hosted on top of serverless infrastructure. No infrastructure to mange, less people required to operate and maintain. Secure Secured by AWS Cognito. It's also easy to integrate services like OKTA, Auth0 and similar. Data ownership Webiny is self-hosted, it means your data stays within your data center. Permission control Powerful options to control the permissions your users will have. They perfectly align with your business requirements. Serverless makes infrastructure easy, Webiny makes serverless easy 1. Developer-friendly Webiny has been made with the developer in mind. It helps them develop serverless applications with ease. 2. Open source Webiny is created and maintained by an amazing group of people. Being open source means Webiny grows and evolves much faster. Contributor are welcome. 3. Community We have an active community on slack. Talk to the core-team, and get help. Webiny team is always there for any questions. View Webiny on GitHub",
+ "text@type": "PbPage",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:43:01.107Z",
+ TYPE: "cms.entry",
+ entryId: "wby-aco-658c1bd3c39bb10008431b5b",
+ tenant: "root",
+ _md: "2023-12-27T12:43:01.107Z",
+ createdOn: "2023-12-27T12:43:00.006Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "wby-aco-658c1bd3c39bb10008431b5b#0001",
+ PK: "T#root#L#en-US#CMS#CME#wby-aco-658c1bd3c39bb10008431b5b",
+ modifiedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" }
+ },
+ {
+ _md: "2023-12-27T12:43:19.454Z",
+ data: {
+ path: "/",
+ files: [
+ {
+ name: "index.html",
+ type: "text/html",
+ meta: {
+ tags: [
+ { value: "658c1bd3c39bb10008431b5b#0001", key: "pb-page" },
+ { value: "main-menu", key: "pb-menu" }
+ ]
+ }
+ },
+ { name: "graphql.json", type: "application/json", meta: {} }
+ ],
+ locale: "en-US",
+ tenant: "root"
+ },
+ GSI1_SK: "/",
+ SK: "A",
+ PK: "T#root#PS#RENDER#/",
+ _et: "PrerenderingServiceRender",
+ _ct: "2023-12-27T12:43:19.454Z",
+ TYPE: "ps.render",
+ GSI1_PK: "T#root#PS#RENDER"
+ },
+ {
+ content: {
+ compression: "jsonpack",
+ content:
+ 'id|Fv1PpPWu-|type|document|data|settings|elements|xqt7BI4iN9|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|100px|275px|16px|tablet|horizontalAlignFlex|center|verticalAlign|flex-start|background|image|file|6022814b7a77e60008f70d62|src|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg|gdE7Q7rcA|grid|1100px|20px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|_fbQO4Nlpp|cell|size|cdk_pclqE|6022814b0df4b000088735bc|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg|height|44px|ovLRNqyVu3|wmMU13uZ10|1eUZzAvoB|heading|text|typography|heading1|alignment|tag|h1|color|color6|Welcome+to+Webiny|F6ZREnQcc|64px|oEgjDLVXUu|0xYOozhJw|paragraph|paragraph1|div|Webiny+makes+it+easy+to+build+applications+and+websites+on+top+of+the+serverless+infrastructure+by+providing+you+with+a+ready-made+CMS+and+a+development+framework.
|20%25|20%25|gwhTOrZvc|30px|6-6|EaIMtHtOIw|-8px|px|602282e07a77e60008f70d63|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg|8k7zxQUTm|heading6|h6|Scalable|qNngQ1C-5|paragraph2|Webiny+apps+can+scale+to+handle+the+most+demanding+workloads.
|uBv_VRv0i|8px|iQaW4vjKg|No+custom+tooling+required|Wy3Tw-Lb8|Webiny+eliminates+the+need+to+build+custom+tooling+to+create+serverless+app
|uwrjoSZkB|Q39eQZm_8z|zSVZIwnSQ0|Cost+effective|S-Ydr4kX6k|Webiny+apps+run+on+serverless+infrastructure+which+costs+80%25+less+than+VMs
|nUX2JXYjhD|8z0hL8l7ay|Resolves+serverless+challenges|04ZNIcAGE_|Webiny+removes+all+the+challenges+of+building+serverless+applications
|vm0cFfH8KG|100%25|65px|75px|txeqybzKr3|80px|wMjC2uv8cj|Pm7ws20iA|color3|Get+to+know+Webiny+products|6CPpd558B|heading2|h2|Architect.+Code.+Deploy.|1e0_OJgMx|gpYd80MXeg|40px|15px|kAYc-QClR|4-8|border|style|solid|rgba(229,+229,+229,+1)|1|8i803wClVt|p55J-BkDn|6022814a0df4b000088735bb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg|90px|link|8nddxG64r|PR-yiR65n|heading3|h3|Webiny+Serverless+
Application+Framework|pVH9_fFLM|x0SSJvgrdD|b0iE8vr2S|Everything+you+need+to+create+and+deploy+applications+on+top+of+the+serverless+infrastructure.
|JMSKwWsT_|OU70Y990tA|T_M_Ww4Wb|heading4|h4|Use+it+to+build:|806nmKOyc|g59JmcyM-7|Cyziie_SK|list|
\n++++++++++++++++++++- Full-stack+applications
- Multi-tenant+solutions
\n++++++++++++++++
|ST0O1ZeCk|ILrAABWXiX|\n++++++++++++++++++++- APIs
- Microservice
\n++++++++++++++++
|XxXGeIywO|9H5t3COdbo|mc0_RS9rg|button|buttonText|Learn+more|50px|href|https://www.webiny.com/serverless-application-framework/|newTab|primary|icon|fas|long-arrow-alt-right|svg||position|16|Kg3rMc1Re|LAcQHMs8K|8oaRz-Gko_|9fQ9W-xiB|6022814891bd1300087bd24c|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg|YCG34DB89|xvBXD_QTkN|GqW2LBMzV|An+easier+way+to+build+serverless+apps|9cWYQwXUd|There+are+many+solutions+that+help+you+run,+deploy+and+monitor+serverless+functions,+but+when+it+comes+to+actually+coding+one,+there+are+none.+Webiny+is+a+solution+that+helps+you+code+your+serverless+app+by+providing+you+with+all+the+components+like+ACL,+routing,+file+storage+and+many+more.
|LxqyquKlYy|100%25|60px|177px|60228148f98841000981c723|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg|yqrzxoDllE|70px|bD-TQmZyW8|4ESAx7NxM|Framework+features|Xr7NLMpzm|3-3-3-3|_RtRioPOsj|12px|mOr47ImJK|AlTNw-76F8|r0e8MiCuK|6022814bef4a940008b3ba27|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg|170px|QFwbqHtSh|DH-C0-mBsO|XSN-oY3V3|Users,+groups,+roles+&+scopes|Unyhp8o-a|Security+is+a+crucial+layer+in+any+application.+Webiny+includes+a+full-featured+security+module+that\'s+connected+to+the+built-in+GraphQL+API.Users,+groups,+roles+&+scopes
|Ntcduee0-|0b66dbGkG|PoRqI9i2xE|0ZpnBSqjoz|6022814bef4a940008b3ba26|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg|FFGobMHHI|IWxl_nrRkr|I5btsZceI|Scaffolding|5qvaQSnP6|Quickly+generate+boilerplate+code+using+CLI+plugins.+From+lambda+functions+to+new+GraphQL+APIs.
|YHUznp7ZM5|PlxqV_uS7B|zKQYI-EIFl|frRuzWpRI|60228148f98841000981c724|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg|M1tvv840H|fwreagGdac|6H1tgEViY|Customizable+security|h0Ctka4TED|Use+the+default+AWS+Cognito,+or+replace+with+3rd+party+identity+providers+like+Okta,+Auth0,+etc.+Using+plugins+you+can+make+Webiny+work+with+any+identity+provider.
|SyyrOA60AF|GvU31fd4U|1vAxZAkD9O|dlI-qhVLKy|6022814bef4a940008b3ba28|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg|ftA7NOOxG|WU58SBDPP8|QtYfpt1yoE|Multiple+environments|mmpGUzg6o1|No+code+change+goes+directly+into+a+production+environment.+Webiny+CLI+makes+it+easy+to+manage+and+create+multiple+environments+for+your+project.
|wYK9BhaanZ|100%25|125px|ur1DQFl5BR|TzBvXtU2PH|-PU3iBlQ4|A6sNR3MR-5|Xtqk_itss|602281486ed41f0008bc2dad|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png|495px|bsKTDygik|ev9nhHISRw|1BBr9ACuM|One+size+doesn\'t+fit+all|0olguTqDN|It\'s+a+very+different+set+of+requirements+a+technical+team+has+to+a+marketing+team+to+a+business+development+team.+Webiny+Serverless+CMS+comes+with+several+different+apps+you+can+use+independently,+or+together+as+part+of+a+cohesive+solution.
|BhnYb3VW7D|QYZ290WhC|rgba(238,+238,+238,+1)|ER2SFYwbeK|gZp3Hxm5Js|602281486639200009fd35eb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg|FsOaMudE8|ElruSYJxWM|Webiny+Serverless+CMS|9HJcM89Am|8Cp2ZC30_H|qrS5wswdQ|heading5|h5|A+suite+of+applications+to+help+you+manage+your+content.+|pLUutc-E2|MGlDcu91q_|A6rStUekq|Use+it+to+build:|jIdakfVZU|5JHsGc_Rq-|SNOFqUK6lI|
\n++++++++++++++++++++- Marketing+sites
\n++++++++++++++++++++- Multi-website+solutions
\n++++++++++++++++++++- Content+hubs
\n++++++++++++++++
|96dJBnIlc|5cPfb7AwXH|\n++++++++++++++++++++- Multi-language+sites
\n++++++++++++++++++++- Intranet+portals
\n++++++++++++++++++++- Headless+content+models
\n++++++++++++++++
|L4dFyzBKMM|Learn+more|https://www.webiny.com/serverless-cms/||mjmNmloeUS|100%25|220px|602281486639200009fd35ec|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg|xUkOEAm5X3|Kgr1ambSuG|AP_uTrgLZ|CMS+benefits|juBaAPJ76|4-4-4|s95PSAToXK|35px|ZECp8jcZD|60228148fa244d0008c47c79|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg|146px|EyKog1RmH|Scalable|_8lCcwhUN|No+matter+the+demand,+Webiny+Serverless+CMS+can+easily+scale+to+meet+even+the+most+challenging+workloads.
|SmrEQ9OZ8|QWM8cmlQEM|60228145f98841000981c720|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg|TYx-A5YCI|Adaptable|SsbWKZz_Z|Being+an+open-source+project,+it\'s+easy+to+modify+and+adapt+things+to+your+own+needs.
|gqdtbKfv7l|jBWaxzt-4|6022814851197600081724ae|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg|NLSOIstf9|Low+cost+of+ownership|kI-neIjkXx|Self-hosted+on+top+of+serverless+infrastructure.+No+infrastructure+to+mange,+less+people+required+to+operate+and+maintain.
|V14HHGmXN|-djsQadY-8|pTVeVoKkTi|bM5b8O7IMY|Secure|l9PuI-TdVA|Secured+by+AWS+Cognito.+It\'s+also+easy+to+integrate+services+like+OKTA,+Auth0+and+similar.
|N1lW0cAasg|W-ub9guhLt|602281486ed41f0008bc2dac|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg|DVhLZfrM53|Data+ownership|shmIumNfIu|Webiny+is+self-hosted,+it+means+your+data+stays+within+your+data+center.+
|8F7J_16a46|2gtT4Mfw6c|602281486ed41f0008bc2dab|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg|5EMJkVWgKW|Permission+control|cdSOjFAWkf|Powerful+options+to+control+the+permissions+your+users+will+have.+They+perfectly+align+with+your+business+requirements.
|5ggqk561Ka|100%25|C6B8QfkUXs|ChF1iOAbtb|7tRfsJ_SEz|Serverless+makes+infrastructure+easy,+Webiny+makes+serverless+easy|oYf9t6Uwz|RdazJP-4W1|7jBNW1iTi|60228145f98841000981c721|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg|200px|npNMgLft0|1.+Developer-friendly|DpubDRaGQ|Webiny+has+been+made+with+the+developer+in+mind.+It+helps+them+develop+serverless+applications+with+ease.
|KbQocaayR|KDO-Ja7wS|60228145f98841000981c71f|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg|ETll3nkV4|2.+Open+source|UWPjvO7EC|Webiny+is+created+and+maintained+by+an+amazing+group+of+people.+Being+open+source+means+Webiny+grows+and+evolves+much+faster.+Contributor+are+welcome.
|En4soRn06o|fqxeYbEV4|60228148fa244d0008c47c7a|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png|276px|e5v0LBbfz|3.+Community|p9FWp5yqUy|We+have+an+active+community+on+slack.+Talk+to+the+core-team,+and+get+help.+Webiny+team+is+always+there+for+any+questions.
|OYp5Z-6Xo|woaE-6v5bN|Y8ndbn88hy|View+Webiny+on+GitHub|https://github.com/webiny/webiny-js|secondary|fab|github|^C|C|C|6|6|6|6|C|6|3|9|C|C|6|6|C|6|C|C|C|3|C|C|3|C|C|3|C|C|3|C|C|6|C|C|6|3|9|C|C|6|6|C|4|4|4|4|4|4|C|4|4|4|C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|O|I|P|G|P]|Q|$J|-1|I|M|G|M]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|Y|Z|10]]]]]]|6|@$0|11|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BC]]]|6|@$0|1F|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|1G|Z|1H]|1I|1J]]|6|@]]]]]]|$0|1K|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1L|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BD]]]|6|@$0|1M|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|1V]|4|$1O|1W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|1X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|1Y|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1Z|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BE]]]|6|@$0|20|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|1V]|4|$1O|24]]|5|$D|$A|$L|F]]|K|$A|$L|F|J|-1|I|25|G|26]|Q|$I|F|G|F|J|-1]]]]|6|@]]]]]]|$0|27|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]|Q|$I|2C]]|K|$A|$L|F]]|12|$1E|BF]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2F|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2I]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2J|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2L]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BG]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2O|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2Q|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|2S|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]|1A|$J|-2]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2T|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]]|K|$A|$L|F]]|12|$1E|BH]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2U|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2V]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2W|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2X]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|Q|$J|-1|I|2N|E|F]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BI]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2Z|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|30]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|31|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|32]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|33|2|8|4|$5|$9|$A|$B|34]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|35|H|36|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|37|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|38|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|39|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BJ]]]|6|@$0|3A|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|3C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|3D|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|S|1S|3F|1U|3B]|4|$1O|3G]]|5|$D|$A|$L|F|J|-1|E|P]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|3H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|3I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|BK]]]|6|@$0|3L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|S]|3N|$A|$3O|3P|1U|3Q|9|$L|3R|J|-1|H|3R]]]]]|6|@$0|3S|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BL]]]|6|@$0|3T|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|3U|Z|3V]|1I|3W]|3X|$]]|6|@]]]]|$0|3Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BM]]]|6|@$0|3Z|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41|1U|3B]|4|$1O|42]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|43|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|44|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BN]]]|6|@$0|45|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|46]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|47|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|P|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|48|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BO]]]|6|@$0|49|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|4C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4D|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4E|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BP]]]|6|@$0|4F|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4H]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|4I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BQ]]]|6|@$0|4J|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BR]]]|6|@$0|4N|2|4O|4|$4P|4Q|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|4T|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|50|51|G|9|52]]|6|@]]]]]]]]|$0|53|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$E|F|G|F|H|F|I|F|L|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|BS]]]|6|@$0|54|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|55|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BT]]]|6|@$0|56|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|57|Z|58]]|3X|$]]|6|@]]]]]]|$0|59|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BU]]]|6|@$0|5B|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|5C]]|5|$D|$A|$L|F|J|-1]]|K|$A|$L|F]]]]|6|@]]|$0|5D|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|5E]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]]]]]|$0|5F|2|8|4|$5|$9|$A|$B|5G]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|5H|G|P|H|5I|I|P|J|-1]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|5J|Z|5K]]]]]]|6|@$0|5L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|5M|I|F|J|-1]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BV]]]|6|@$0|5O|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|5P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|5Q|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|5R]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5S|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|5T]|1A|$I|5T|J|-1]]|12|$1E|BW]]]|6|@$0|5U|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5V|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BX]]]|6|@$0|5W|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|5X|Z|5Y]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|60|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|61|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BY]]]|6|@$0|62|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|63]]|5|$D|$A|$L|F|J|-1|H|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|64|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|65]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|66|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|BZ]]]|6|@$0|67|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|68|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C0]]]|6|@$0|69|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6A|Z|6B]|1I|5Z]]|6|@]]]]]]|$0|6C|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6D|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C1]]]|6|@$0|6E|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6G|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6H]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|C2]]]|6|@$0|6J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6K|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C3]]]|6|@$0|6L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|6O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6P|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C4]]]|6|@$0|6Q|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6S|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6T]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|5T]|1A|$G|5T|J|-1]]|12|$1E|C5]]]|6|@$0|6V|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6W|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C6]]]|6|@$0|6X|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6Y|Z|6Z]|1I|5Z]]|6|@]]]]]]|$0|70|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|71|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C7]]]|6|@$0|72|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|73]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|74|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|75]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|76|2|8|4|$5|$9|$A|$B|77]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|78|G|P|H|36|I|P|J|-1]]|R|$A|S]|T|$A|U]]]|6|@$0|79|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7A|2|1D|4|$5|$D|$A|$E|F|G|F|H|38|I|F|J|-1]|1A|$J|-1]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|C8]]]|6|@$0|7B|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C9]]]|6|@$0|7D|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7E|Z|7F]|9|7G]]|6|@]]]]]]|$0|7H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CA]]]|6|@$0|7J|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|7K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7L|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|7M]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|7N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|CB]]]|6|@$0|7O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]|3N|$A|$3O|3P|1U|7P|9|$J|-1|H|3R]]]]]|6|@$0|7Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CC]]]|6|@$0|7R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7S|Z|7T]|1I|3W]|3X|$]]|6|@]]]]|$0|7U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CD]]]|6|@$0|7V|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41]|4|$1O|7W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CE]]]|6|@$0|7Z|2|1N|4|$1O|$A|$2|1N|1P|80|1R|I|1S|81|1U|3B]|4|$1O|82]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|83|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|4R|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|84|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CF]]]|6|@$0|85|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|86]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|87|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|88|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CG]]]|6|@$0|89|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8A]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|8B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CH]]]|6|@$0|8C|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8D]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8E|2|4O|4|$4P|8F|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|8G|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|8H|51|G|9|52]]|6|@]]]]]]]]|$0|8I|2|8|4|$5|$9|$A|$B|8J]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|38|H|8K|I|P|G|P]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|8L|Z|8M]]]]]]|6|@$0|8N|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|5H|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8O|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CI]]]|6|@$0|8P|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|8Q]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8R|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8T|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|G|8U|I|8U]]|12|$1E|CJ]]]|6|@$0|8V|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|8W|Z|8X]|1I|8Y]|3X|$]]|6|@]]|$0|8Z|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|90]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|91|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|92]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|93|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CK]]]|6|@$0|94|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|95|Z|96]|1I|8Y]|3X|$]]|6|@]]|$0|97|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|98]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|99|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9A]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CL]]]|6|@$0|9C|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9D|Z|9E]|1I|8Y]|3X|$]]|6|@]]|$0|9F|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9G]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9H|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9I]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|9J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|5H|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|9K|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|I|8U]]|12|$1E|CM]]]|6|@$0|9L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|8Y]|3X|$]]|6|@]]|$0|9M|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9N]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9O|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9P]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CN]]]|6|@$0|9R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9S|Z|9T]|1I|8Y]|3X|$]]|6|@]]|$0|9U|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9V]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9W|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23]|4|$1O|9X]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CO]]]|6|@$0|9Z|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|A0|Z|A1]|1I|8Y]|3X|$]]|6|@]]|$0|A2|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|A3]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|A4|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|A5]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|A6|2|8|4|$5|$9|$A|$B|A7]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|N|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|A8|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|A9|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CP]]]|6|@$0|AA|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|AB]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|AC|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|38|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|AD|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|4R]|1A|$G|4R|J|-1|I|4R]]|12|$1E|CQ]]]|6|@$0|AE|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AF|Z|AG]|1I|AH]|3X|$]]|6|@]]|$0|AI|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AJ]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AK|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AL]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AM|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|4R|G|4R]]|12|$1E|CR]]]|6|@$0|AN|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AO|Z|AP]|1I|AH]|3X|$]]|6|@]]|$0|AQ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AR]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AS|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AT]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AU|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|4R]]|K|$A|$L|F|J|-1|I|4R]|1A|$J|-1|I|4R|G|4R]]|12|$1E|CS]]]|6|@$0|AV|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AW|Z|AX]|1I|AH|9|AY]|3X|$]]|6|@]]|$0|AZ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|B0]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|B1|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|B2]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|B3|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|3J|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|B4|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CT]]]|6|@$0|B5|2|4O|4|$4P|B6|5|$D|$A|$L|F]]|R|$A|S]]|3X|$4S|B7|4U|-1]|2|B8|4W|$0|@B9|BA]|4Z|BB|9|52]]|6|@]]]]]]]]]]'
+ },
+ status: "published",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ TYPE: "pb.page.l",
+ _md: "2023-12-27T12:43:00.864Z",
+ SK: "L",
+ publishedOn: "2023-12-27T12:43:00.723Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5b#0001",
+ version: 1,
+ settings: { seo: { meta: [] }, general: { layout: "static" }, social: { meta: [] } },
+ path: "/welcome-to-webiny",
+ savedOn: "2023-12-27T12:43:00.723Z",
+ locale: "en-US",
+ pid: "658c1bd3c39bb10008431b5b",
+ _et: "PbPages",
+ _ct: "2023-12-27T12:43:00.864Z",
+ tenant: "root",
+ createdOn: "2023-12-27T12:42:59.947Z",
+ locked: true,
+ category: "static",
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ webinyVersion: "5.38.2",
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5b",
+ title: "Welcome to Webiny"
+ },
+ {
+ content: {
+ compression: "jsonpack",
+ content:
+ 'id|Fv1PpPWu-|type|document|data|settings|elements|xqt7BI4iN9|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|100px|275px|16px|tablet|horizontalAlignFlex|center|verticalAlign|flex-start|background|image|file|6022814b7a77e60008f70d62|src|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg|gdE7Q7rcA|grid|1100px|20px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|_fbQO4Nlpp|cell|size|cdk_pclqE|6022814b0df4b000088735bc|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg|height|44px|ovLRNqyVu3|wmMU13uZ10|1eUZzAvoB|heading|text|typography|heading1|alignment|tag|h1|color|color6|Welcome+to+Webiny|F6ZREnQcc|64px|oEgjDLVXUu|0xYOozhJw|paragraph|paragraph1|div|Webiny+makes+it+easy+to+build+applications+and+websites+on+top+of+the+serverless+infrastructure+by+providing+you+with+a+ready-made+CMS+and+a+development+framework.
|20%25|20%25|gwhTOrZvc|30px|6-6|EaIMtHtOIw|-8px|px|602282e07a77e60008f70d63|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg|8k7zxQUTm|heading6|h6|Scalable|qNngQ1C-5|paragraph2|Webiny+apps+can+scale+to+handle+the+most+demanding+workloads.
|uBv_VRv0i|8px|iQaW4vjKg|No+custom+tooling+required|Wy3Tw-Lb8|Webiny+eliminates+the+need+to+build+custom+tooling+to+create+serverless+app
|uwrjoSZkB|Q39eQZm_8z|zSVZIwnSQ0|Cost+effective|S-Ydr4kX6k|Webiny+apps+run+on+serverless+infrastructure+which+costs+80%25+less+than+VMs
|nUX2JXYjhD|8z0hL8l7ay|Resolves+serverless+challenges|04ZNIcAGE_|Webiny+removes+all+the+challenges+of+building+serverless+applications
|vm0cFfH8KG|100%25|65px|75px|txeqybzKr3|80px|wMjC2uv8cj|Pm7ws20iA|color3|Get+to+know+Webiny+products|6CPpd558B|heading2|h2|Architect.+Code.+Deploy.|1e0_OJgMx|gpYd80MXeg|40px|15px|kAYc-QClR|4-8|border|style|solid|rgba(229,+229,+229,+1)|1|8i803wClVt|p55J-BkDn|6022814a0df4b000088735bb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg|90px|link|8nddxG64r|PR-yiR65n|heading3|h3|Webiny+Serverless+
Application+Framework|pVH9_fFLM|x0SSJvgrdD|b0iE8vr2S|Everything+you+need+to+create+and+deploy+applications+on+top+of+the+serverless+infrastructure.
|JMSKwWsT_|OU70Y990tA|T_M_Ww4Wb|heading4|h4|Use+it+to+build:|806nmKOyc|g59JmcyM-7|Cyziie_SK|list|
\n++++++++++++++++++++- Full-stack+applications
- Multi-tenant+solutions
\n++++++++++++++++
|ST0O1ZeCk|ILrAABWXiX|\n++++++++++++++++++++- APIs
- Microservice
\n++++++++++++++++
|XxXGeIywO|9H5t3COdbo|mc0_RS9rg|button|buttonText|Learn+more|50px|href|https://www.webiny.com/serverless-application-framework/|newTab|primary|icon|fas|long-arrow-alt-right|svg||position|16|Kg3rMc1Re|LAcQHMs8K|8oaRz-Gko_|9fQ9W-xiB|6022814891bd1300087bd24c|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg|YCG34DB89|xvBXD_QTkN|GqW2LBMzV|An+easier+way+to+build+serverless+apps|9cWYQwXUd|There+are+many+solutions+that+help+you+run,+deploy+and+monitor+serverless+functions,+but+when+it+comes+to+actually+coding+one,+there+are+none.+Webiny+is+a+solution+that+helps+you+code+your+serverless+app+by+providing+you+with+all+the+components+like+ACL,+routing,+file+storage+and+many+more.
|LxqyquKlYy|100%25|60px|177px|60228148f98841000981c723|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg|yqrzxoDllE|70px|bD-TQmZyW8|4ESAx7NxM|Framework+features|Xr7NLMpzm|3-3-3-3|_RtRioPOsj|12px|mOr47ImJK|AlTNw-76F8|r0e8MiCuK|6022814bef4a940008b3ba27|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg|170px|QFwbqHtSh|DH-C0-mBsO|XSN-oY3V3|Users,+groups,+roles+&+scopes|Unyhp8o-a|Security+is+a+crucial+layer+in+any+application.+Webiny+includes+a+full-featured+security+module+that\'s+connected+to+the+built-in+GraphQL+API.Users,+groups,+roles+&+scopes
|Ntcduee0-|0b66dbGkG|PoRqI9i2xE|0ZpnBSqjoz|6022814bef4a940008b3ba26|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg|FFGobMHHI|IWxl_nrRkr|I5btsZceI|Scaffolding|5qvaQSnP6|Quickly+generate+boilerplate+code+using+CLI+plugins.+From+lambda+functions+to+new+GraphQL+APIs.
|YHUznp7ZM5|PlxqV_uS7B|zKQYI-EIFl|frRuzWpRI|60228148f98841000981c724|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg|M1tvv840H|fwreagGdac|6H1tgEViY|Customizable+security|h0Ctka4TED|Use+the+default+AWS+Cognito,+or+replace+with+3rd+party+identity+providers+like+Okta,+Auth0,+etc.+Using+plugins+you+can+make+Webiny+work+with+any+identity+provider.
|SyyrOA60AF|GvU31fd4U|1vAxZAkD9O|dlI-qhVLKy|6022814bef4a940008b3ba28|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg|ftA7NOOxG|WU58SBDPP8|QtYfpt1yoE|Multiple+environments|mmpGUzg6o1|No+code+change+goes+directly+into+a+production+environment.+Webiny+CLI+makes+it+easy+to+manage+and+create+multiple+environments+for+your+project.
|wYK9BhaanZ|100%25|125px|ur1DQFl5BR|TzBvXtU2PH|-PU3iBlQ4|A6sNR3MR-5|Xtqk_itss|602281486ed41f0008bc2dad|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png|495px|bsKTDygik|ev9nhHISRw|1BBr9ACuM|One+size+doesn\'t+fit+all|0olguTqDN|It\'s+a+very+different+set+of+requirements+a+technical+team+has+to+a+marketing+team+to+a+business+development+team.+Webiny+Serverless+CMS+comes+with+several+different+apps+you+can+use+independently,+or+together+as+part+of+a+cohesive+solution.
|BhnYb3VW7D|QYZ290WhC|rgba(238,+238,+238,+1)|ER2SFYwbeK|gZp3Hxm5Js|602281486639200009fd35eb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg|FsOaMudE8|ElruSYJxWM|Webiny+Serverless+CMS|9HJcM89Am|8Cp2ZC30_H|qrS5wswdQ|heading5|h5|A+suite+of+applications+to+help+you+manage+your+content.+|pLUutc-E2|MGlDcu91q_|A6rStUekq|Use+it+to+build:|jIdakfVZU|5JHsGc_Rq-|SNOFqUK6lI|
\n++++++++++++++++++++- Marketing+sites
\n++++++++++++++++++++- Multi-website+solutions
\n++++++++++++++++++++- Content+hubs
\n++++++++++++++++
|96dJBnIlc|5cPfb7AwXH|\n++++++++++++++++++++- Multi-language+sites
\n++++++++++++++++++++- Intranet+portals
\n++++++++++++++++++++- Headless+content+models
\n++++++++++++++++
|L4dFyzBKMM|Learn+more|https://www.webiny.com/serverless-cms/||mjmNmloeUS|100%25|220px|602281486639200009fd35ec|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg|xUkOEAm5X3|Kgr1ambSuG|AP_uTrgLZ|CMS+benefits|juBaAPJ76|4-4-4|s95PSAToXK|35px|ZECp8jcZD|60228148fa244d0008c47c79|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg|146px|EyKog1RmH|Scalable|_8lCcwhUN|No+matter+the+demand,+Webiny+Serverless+CMS+can+easily+scale+to+meet+even+the+most+challenging+workloads.
|SmrEQ9OZ8|QWM8cmlQEM|60228145f98841000981c720|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg|TYx-A5YCI|Adaptable|SsbWKZz_Z|Being+an+open-source+project,+it\'s+easy+to+modify+and+adapt+things+to+your+own+needs.
|gqdtbKfv7l|jBWaxzt-4|6022814851197600081724ae|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg|NLSOIstf9|Low+cost+of+ownership|kI-neIjkXx|Self-hosted+on+top+of+serverless+infrastructure.+No+infrastructure+to+mange,+less+people+required+to+operate+and+maintain.
|V14HHGmXN|-djsQadY-8|pTVeVoKkTi|bM5b8O7IMY|Secure|l9PuI-TdVA|Secured+by+AWS+Cognito.+It\'s+also+easy+to+integrate+services+like+OKTA,+Auth0+and+similar.
|N1lW0cAasg|W-ub9guhLt|602281486ed41f0008bc2dac|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg|DVhLZfrM53|Data+ownership|shmIumNfIu|Webiny+is+self-hosted,+it+means+your+data+stays+within+your+data+center.+
|8F7J_16a46|2gtT4Mfw6c|602281486ed41f0008bc2dab|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg|5EMJkVWgKW|Permission+control|cdSOjFAWkf|Powerful+options+to+control+the+permissions+your+users+will+have.+They+perfectly+align+with+your+business+requirements.
|5ggqk561Ka|100%25|C6B8QfkUXs|ChF1iOAbtb|7tRfsJ_SEz|Serverless+makes+infrastructure+easy,+Webiny+makes+serverless+easy|oYf9t6Uwz|RdazJP-4W1|7jBNW1iTi|60228145f98841000981c721|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg|200px|npNMgLft0|1.+Developer-friendly|DpubDRaGQ|Webiny+has+been+made+with+the+developer+in+mind.+It+helps+them+develop+serverless+applications+with+ease.
|KbQocaayR|KDO-Ja7wS|60228145f98841000981c71f|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg|ETll3nkV4|2.+Open+source|UWPjvO7EC|Webiny+is+created+and+maintained+by+an+amazing+group+of+people.+Being+open+source+means+Webiny+grows+and+evolves+much+faster.+Contributor+are+welcome.
|En4soRn06o|fqxeYbEV4|60228148fa244d0008c47c7a|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png|276px|e5v0LBbfz|3.+Community|p9FWp5yqUy|We+have+an+active+community+on+slack.+Talk+to+the+core-team,+and+get+help.+Webiny+team+is+always+there+for+any+questions.
|OYp5Z-6Xo|woaE-6v5bN|Y8ndbn88hy|View+Webiny+on+GitHub|https://github.com/webiny/webiny-js|secondary|fab|github|^C|C|C|6|6|6|6|C|6|3|9|C|C|6|6|C|6|C|C|C|3|C|C|3|C|C|3|C|C|3|C|C|6|C|C|6|3|9|C|C|6|6|C|4|4|4|4|4|4|C|4|4|4|C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|O|I|P|G|P]|Q|$J|-1|I|M|G|M]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|Y|Z|10]]]]]]|6|@$0|11|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BC]]]|6|@$0|1F|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|1G|Z|1H]|1I|1J]]|6|@]]]]]]|$0|1K|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1L|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BD]]]|6|@$0|1M|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|1V]|4|$1O|1W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|1X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|1Y|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1Z|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BE]]]|6|@$0|20|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|1V]|4|$1O|24]]|5|$D|$A|$L|F]]|K|$A|$L|F|J|-1|I|25|G|26]|Q|$I|F|G|F|J|-1]]]]|6|@]]]]]]|$0|27|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]|Q|$I|2C]]|K|$A|$L|F]]|12|$1E|BF]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2F|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2I]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2J|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2L]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BG]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2O|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2Q|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|2S|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]|1A|$J|-2]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2T|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]]|K|$A|$L|F]]|12|$1E|BH]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2U|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2V]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2W|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2X]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|Q|$J|-1|I|2N|E|F]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BI]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2Z|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|30]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|31|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|32]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|33|2|8|4|$5|$9|$A|$B|34]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|35|H|36|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|37|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|38|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|39|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BJ]]]|6|@$0|3A|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|3C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|3D|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|S|1S|3F|1U|3B]|4|$1O|3G]]|5|$D|$A|$L|F|J|-1|E|P]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|3H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|3I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|BK]]]|6|@$0|3L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|S]|3N|$A|$3O|3P|1U|3Q|9|$L|3R|J|-1|H|3R]]]]]|6|@$0|3S|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BL]]]|6|@$0|3T|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|3U|Z|3V]|1I|3W]|3X|$]]|6|@]]]]|$0|3Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BM]]]|6|@$0|3Z|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41|1U|3B]|4|$1O|42]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|43|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|44|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BN]]]|6|@$0|45|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|46]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|47|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|P|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|48|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BO]]]|6|@$0|49|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|4C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4D|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4E|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BP]]]|6|@$0|4F|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4H]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|4I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BQ]]]|6|@$0|4J|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BR]]]|6|@$0|4N|2|4O|4|$4P|4Q|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|4T|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|50|51|G|9|52]]|6|@]]]]]]]]|$0|53|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$E|F|G|F|H|F|I|F|L|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|BS]]]|6|@$0|54|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|55|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BT]]]|6|@$0|56|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|57|Z|58]]|3X|$]]|6|@]]]]]]|$0|59|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BU]]]|6|@$0|5B|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|5C]]|5|$D|$A|$L|F|J|-1]]|K|$A|$L|F]]]]|6|@]]|$0|5D|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|5E]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]]]]]|$0|5F|2|8|4|$5|$9|$A|$B|5G]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|5H|G|P|H|5I|I|P|J|-1]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|5J|Z|5K]]]]]]|6|@$0|5L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|5M|I|F|J|-1]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BV]]]|6|@$0|5O|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|5P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|5Q|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|5R]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5S|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|5T]|1A|$I|5T|J|-1]]|12|$1E|BW]]]|6|@$0|5U|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5V|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BX]]]|6|@$0|5W|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|5X|Z|5Y]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|60|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|61|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BY]]]|6|@$0|62|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|63]]|5|$D|$A|$L|F|J|-1|H|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|64|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|65]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|66|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|BZ]]]|6|@$0|67|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|68|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C0]]]|6|@$0|69|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6A|Z|6B]|1I|5Z]]|6|@]]]]]]|$0|6C|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6D|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C1]]]|6|@$0|6E|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6G|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6H]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|C2]]]|6|@$0|6J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6K|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C3]]]|6|@$0|6L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|6O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6P|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C4]]]|6|@$0|6Q|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6S|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6T]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|5T]|1A|$G|5T|J|-1]]|12|$1E|C5]]]|6|@$0|6V|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6W|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C6]]]|6|@$0|6X|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6Y|Z|6Z]|1I|5Z]]|6|@]]]]]]|$0|70|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|71|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C7]]]|6|@$0|72|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|73]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|74|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|75]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|76|2|8|4|$5|$9|$A|$B|77]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|78|G|P|H|36|I|P|J|-1]]|R|$A|S]|T|$A|U]]]|6|@$0|79|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7A|2|1D|4|$5|$D|$A|$E|F|G|F|H|38|I|F|J|-1]|1A|$J|-1]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|C8]]]|6|@$0|7B|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C9]]]|6|@$0|7D|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7E|Z|7F]|9|7G]]|6|@]]]]]]|$0|7H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CA]]]|6|@$0|7J|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|7K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7L|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|7M]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|7N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|CB]]]|6|@$0|7O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]|3N|$A|$3O|3P|1U|7P|9|$J|-1|H|3R]]]]]|6|@$0|7Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CC]]]|6|@$0|7R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7S|Z|7T]|1I|3W]|3X|$]]|6|@]]]]|$0|7U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CD]]]|6|@$0|7V|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41]|4|$1O|7W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CE]]]|6|@$0|7Z|2|1N|4|$1O|$A|$2|1N|1P|80|1R|I|1S|81|1U|3B]|4|$1O|82]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|83|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|4R|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|84|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CF]]]|6|@$0|85|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|86]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|87|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|88|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CG]]]|6|@$0|89|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8A]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|8B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CH]]]|6|@$0|8C|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8D]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8E|2|4O|4|$4P|8F|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|8G|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|8H|51|G|9|52]]|6|@]]]]]]]]|$0|8I|2|8|4|$5|$9|$A|$B|8J]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|38|H|8K|I|P|G|P]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|8L|Z|8M]]]]]]|6|@$0|8N|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|5H|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8O|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CI]]]|6|@$0|8P|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|8Q]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8R|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8T|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|G|8U|I|8U]]|12|$1E|CJ]]]|6|@$0|8V|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|8W|Z|8X]|1I|8Y]|3X|$]]|6|@]]|$0|8Z|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|90]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|91|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|92]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|93|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CK]]]|6|@$0|94|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|95|Z|96]|1I|8Y]|3X|$]]|6|@]]|$0|97|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|98]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|99|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9A]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CL]]]|6|@$0|9C|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9D|Z|9E]|1I|8Y]|3X|$]]|6|@]]|$0|9F|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9G]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9H|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9I]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|9J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|5H|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|9K|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|I|8U]]|12|$1E|CM]]]|6|@$0|9L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|8Y]|3X|$]]|6|@]]|$0|9M|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9N]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9O|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9P]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CN]]]|6|@$0|9R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9S|Z|9T]|1I|8Y]|3X|$]]|6|@]]|$0|9U|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9V]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9W|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23]|4|$1O|9X]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CO]]]|6|@$0|9Z|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|A0|Z|A1]|1I|8Y]|3X|$]]|6|@]]|$0|A2|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|A3]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|A4|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|A5]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|A6|2|8|4|$5|$9|$A|$B|A7]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|N|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|A8|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|A9|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CP]]]|6|@$0|AA|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|AB]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|AC|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|38|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|AD|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|4R]|1A|$G|4R|J|-1|I|4R]]|12|$1E|CQ]]]|6|@$0|AE|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AF|Z|AG]|1I|AH]|3X|$]]|6|@]]|$0|AI|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AJ]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AK|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AL]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AM|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|4R|G|4R]]|12|$1E|CR]]]|6|@$0|AN|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AO|Z|AP]|1I|AH]|3X|$]]|6|@]]|$0|AQ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AR]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AS|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AT]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AU|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|4R]]|K|$A|$L|F|J|-1|I|4R]|1A|$J|-1|I|4R|G|4R]]|12|$1E|CS]]]|6|@$0|AV|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AW|Z|AX]|1I|AH|9|AY]|3X|$]]|6|@]]|$0|AZ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|B0]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|B1|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|B2]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|B3|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|3J|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|B4|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CT]]]|6|@$0|B5|2|4O|4|$4P|B6|5|$D|$A|$L|F]]|R|$A|S]]|3X|$4S|B7|4U|-1]|2|B8|4W|$0|@B9|BA]|4Z|BB|9|52]]|6|@]]]]]]]]]]'
+ },
+ status: "published",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ TYPE: "pb.page.p",
+ _md: "2023-12-27T12:43:00.881Z",
+ SK: "P",
+ publishedOn: "2023-12-27T12:43:00.723Z",
+ id: "658c1bd3c39bb10008431b5b#0001",
+ editor: "page-builder",
+ version: 1,
+ settings: { seo: { meta: [] }, general: { layout: "static" }, social: { meta: [] } },
+ path: "/welcome-to-webiny",
+ locale: "en-US",
+ savedOn: "2023-12-27T12:43:00.723Z",
+ pid: "658c1bd3c39bb10008431b5b",
+ _et: "PbPages",
+ _ct: "2023-12-27T12:43:00.881Z",
+ tenant: "root",
+ createdOn: "2023-12-27T12:42:59.947Z",
+ locked: true,
+ category: "static",
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ webinyVersion: "5.38.2",
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5b",
+ title: "Welcome to Webiny"
+ },
+ {
+ content: {
+ compression: "jsonpack",
+ content:
+ 'id|Fv1PpPWu-|type|document|data|settings|elements|xqt7BI4iN9|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|100px|275px|16px|tablet|horizontalAlignFlex|center|verticalAlign|flex-start|background|image|file|6022814b7a77e60008f70d62|src|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg|gdE7Q7rcA|grid|1100px|20px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|_fbQO4Nlpp|cell|size|cdk_pclqE|6022814b0df4b000088735bc|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg|height|44px|ovLRNqyVu3|wmMU13uZ10|1eUZzAvoB|heading|text|typography|heading1|alignment|tag|h1|color|color6|Welcome+to+Webiny|F6ZREnQcc|64px|oEgjDLVXUu|0xYOozhJw|paragraph|paragraph1|div|Webiny+makes+it+easy+to+build+applications+and+websites+on+top+of+the+serverless+infrastructure+by+providing+you+with+a+ready-made+CMS+and+a+development+framework.
|20%25|20%25|gwhTOrZvc|30px|6-6|EaIMtHtOIw|-8px|px|602282e07a77e60008f70d63|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg|8k7zxQUTm|heading6|h6|Scalable|qNngQ1C-5|paragraph2|Webiny+apps+can+scale+to+handle+the+most+demanding+workloads.
|uBv_VRv0i|8px|iQaW4vjKg|No+custom+tooling+required|Wy3Tw-Lb8|Webiny+eliminates+the+need+to+build+custom+tooling+to+create+serverless+app
|uwrjoSZkB|Q39eQZm_8z|zSVZIwnSQ0|Cost+effective|S-Ydr4kX6k|Webiny+apps+run+on+serverless+infrastructure+which+costs+80%25+less+than+VMs
|nUX2JXYjhD|8z0hL8l7ay|Resolves+serverless+challenges|04ZNIcAGE_|Webiny+removes+all+the+challenges+of+building+serverless+applications
|vm0cFfH8KG|100%25|65px|75px|txeqybzKr3|80px|wMjC2uv8cj|Pm7ws20iA|color3|Get+to+know+Webiny+products|6CPpd558B|heading2|h2|Architect.+Code.+Deploy.|1e0_OJgMx|gpYd80MXeg|40px|15px|kAYc-QClR|4-8|border|style|solid|rgba(229,+229,+229,+1)|1|8i803wClVt|p55J-BkDn|6022814a0df4b000088735bb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg|90px|link|8nddxG64r|PR-yiR65n|heading3|h3|Webiny+Serverless+
Application+Framework|pVH9_fFLM|x0SSJvgrdD|b0iE8vr2S|Everything+you+need+to+create+and+deploy+applications+on+top+of+the+serverless+infrastructure.
|JMSKwWsT_|OU70Y990tA|T_M_Ww4Wb|heading4|h4|Use+it+to+build:|806nmKOyc|g59JmcyM-7|Cyziie_SK|list|
\n++++++++++++++++++++- Full-stack+applications
- Multi-tenant+solutions
\n++++++++++++++++
|ST0O1ZeCk|ILrAABWXiX|\n++++++++++++++++++++- APIs
- Microservice
\n++++++++++++++++
|XxXGeIywO|9H5t3COdbo|mc0_RS9rg|button|buttonText|Learn+more|50px|href|https://www.webiny.com/serverless-application-framework/|newTab|primary|icon|fas|long-arrow-alt-right|svg||position|16|Kg3rMc1Re|LAcQHMs8K|8oaRz-Gko_|9fQ9W-xiB|6022814891bd1300087bd24c|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg|YCG34DB89|xvBXD_QTkN|GqW2LBMzV|An+easier+way+to+build+serverless+apps|9cWYQwXUd|There+are+many+solutions+that+help+you+run,+deploy+and+monitor+serverless+functions,+but+when+it+comes+to+actually+coding+one,+there+are+none.+Webiny+is+a+solution+that+helps+you+code+your+serverless+app+by+providing+you+with+all+the+components+like+ACL,+routing,+file+storage+and+many+more.
|LxqyquKlYy|100%25|60px|177px|60228148f98841000981c723|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg|yqrzxoDllE|70px|bD-TQmZyW8|4ESAx7NxM|Framework+features|Xr7NLMpzm|3-3-3-3|_RtRioPOsj|12px|mOr47ImJK|AlTNw-76F8|r0e8MiCuK|6022814bef4a940008b3ba27|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg|170px|QFwbqHtSh|DH-C0-mBsO|XSN-oY3V3|Users,+groups,+roles+&+scopes|Unyhp8o-a|Security+is+a+crucial+layer+in+any+application.+Webiny+includes+a+full-featured+security+module+that\'s+connected+to+the+built-in+GraphQL+API.Users,+groups,+roles+&+scopes
|Ntcduee0-|0b66dbGkG|PoRqI9i2xE|0ZpnBSqjoz|6022814bef4a940008b3ba26|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg|FFGobMHHI|IWxl_nrRkr|I5btsZceI|Scaffolding|5qvaQSnP6|Quickly+generate+boilerplate+code+using+CLI+plugins.+From+lambda+functions+to+new+GraphQL+APIs.
|YHUznp7ZM5|PlxqV_uS7B|zKQYI-EIFl|frRuzWpRI|60228148f98841000981c724|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg|M1tvv840H|fwreagGdac|6H1tgEViY|Customizable+security|h0Ctka4TED|Use+the+default+AWS+Cognito,+or+replace+with+3rd+party+identity+providers+like+Okta,+Auth0,+etc.+Using+plugins+you+can+make+Webiny+work+with+any+identity+provider.
|SyyrOA60AF|GvU31fd4U|1vAxZAkD9O|dlI-qhVLKy|6022814bef4a940008b3ba28|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg|ftA7NOOxG|WU58SBDPP8|QtYfpt1yoE|Multiple+environments|mmpGUzg6o1|No+code+change+goes+directly+into+a+production+environment.+Webiny+CLI+makes+it+easy+to+manage+and+create+multiple+environments+for+your+project.
|wYK9BhaanZ|100%25|125px|ur1DQFl5BR|TzBvXtU2PH|-PU3iBlQ4|A6sNR3MR-5|Xtqk_itss|602281486ed41f0008bc2dad|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png|495px|bsKTDygik|ev9nhHISRw|1BBr9ACuM|One+size+doesn\'t+fit+all|0olguTqDN|It\'s+a+very+different+set+of+requirements+a+technical+team+has+to+a+marketing+team+to+a+business+development+team.+Webiny+Serverless+CMS+comes+with+several+different+apps+you+can+use+independently,+or+together+as+part+of+a+cohesive+solution.
|BhnYb3VW7D|QYZ290WhC|rgba(238,+238,+238,+1)|ER2SFYwbeK|gZp3Hxm5Js|602281486639200009fd35eb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg|FsOaMudE8|ElruSYJxWM|Webiny+Serverless+CMS|9HJcM89Am|8Cp2ZC30_H|qrS5wswdQ|heading5|h5|A+suite+of+applications+to+help+you+manage+your+content.+|pLUutc-E2|MGlDcu91q_|A6rStUekq|Use+it+to+build:|jIdakfVZU|5JHsGc_Rq-|SNOFqUK6lI|
\n++++++++++++++++++++- Marketing+sites
\n++++++++++++++++++++- Multi-website+solutions
\n++++++++++++++++++++- Content+hubs
\n++++++++++++++++
|96dJBnIlc|5cPfb7AwXH|\n++++++++++++++++++++- Multi-language+sites
\n++++++++++++++++++++- Intranet+portals
\n++++++++++++++++++++- Headless+content+models
\n++++++++++++++++
|L4dFyzBKMM|Learn+more|https://www.webiny.com/serverless-cms/||mjmNmloeUS|100%25|220px|602281486639200009fd35ec|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg|xUkOEAm5X3|Kgr1ambSuG|AP_uTrgLZ|CMS+benefits|juBaAPJ76|4-4-4|s95PSAToXK|35px|ZECp8jcZD|60228148fa244d0008c47c79|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg|146px|EyKog1RmH|Scalable|_8lCcwhUN|No+matter+the+demand,+Webiny+Serverless+CMS+can+easily+scale+to+meet+even+the+most+challenging+workloads.
|SmrEQ9OZ8|QWM8cmlQEM|60228145f98841000981c720|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg|TYx-A5YCI|Adaptable|SsbWKZz_Z|Being+an+open-source+project,+it\'s+easy+to+modify+and+adapt+things+to+your+own+needs.
|gqdtbKfv7l|jBWaxzt-4|6022814851197600081724ae|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg|NLSOIstf9|Low+cost+of+ownership|kI-neIjkXx|Self-hosted+on+top+of+serverless+infrastructure.+No+infrastructure+to+mange,+less+people+required+to+operate+and+maintain.
|V14HHGmXN|-djsQadY-8|pTVeVoKkTi|bM5b8O7IMY|Secure|l9PuI-TdVA|Secured+by+AWS+Cognito.+It\'s+also+easy+to+integrate+services+like+OKTA,+Auth0+and+similar.
|N1lW0cAasg|W-ub9guhLt|602281486ed41f0008bc2dac|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg|DVhLZfrM53|Data+ownership|shmIumNfIu|Webiny+is+self-hosted,+it+means+your+data+stays+within+your+data+center.+
|8F7J_16a46|2gtT4Mfw6c|602281486ed41f0008bc2dab|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg|5EMJkVWgKW|Permission+control|cdSOjFAWkf|Powerful+options+to+control+the+permissions+your+users+will+have.+They+perfectly+align+with+your+business+requirements.
|5ggqk561Ka|100%25|C6B8QfkUXs|ChF1iOAbtb|7tRfsJ_SEz|Serverless+makes+infrastructure+easy,+Webiny+makes+serverless+easy|oYf9t6Uwz|RdazJP-4W1|7jBNW1iTi|60228145f98841000981c721|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg|200px|npNMgLft0|1.+Developer-friendly|DpubDRaGQ|Webiny+has+been+made+with+the+developer+in+mind.+It+helps+them+develop+serverless+applications+with+ease.
|KbQocaayR|KDO-Ja7wS|60228145f98841000981c71f|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg|ETll3nkV4|2.+Open+source|UWPjvO7EC|Webiny+is+created+and+maintained+by+an+amazing+group+of+people.+Being+open+source+means+Webiny+grows+and+evolves+much+faster.+Contributor+are+welcome.
|En4soRn06o|fqxeYbEV4|60228148fa244d0008c47c7a|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png|276px|e5v0LBbfz|3.+Community|p9FWp5yqUy|We+have+an+active+community+on+slack.+Talk+to+the+core-team,+and+get+help.+Webiny+team+is+always+there+for+any+questions.
|OYp5Z-6Xo|woaE-6v5bN|Y8ndbn88hy|View+Webiny+on+GitHub|https://github.com/webiny/webiny-js|secondary|fab|github|^C|C|C|6|6|6|6|C|6|3|9|C|C|6|6|C|6|C|C|C|3|C|C|3|C|C|3|C|C|3|C|C|6|C|C|6|3|9|C|C|6|6|C|4|4|4|4|4|4|C|4|4|4|C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|O|I|P|G|P]|Q|$J|-1|I|M|G|M]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|Y|Z|10]]]]]]|6|@$0|11|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BC]]]|6|@$0|1F|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|1G|Z|1H]|1I|1J]]|6|@]]]]]]|$0|1K|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1L|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BD]]]|6|@$0|1M|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|1V]|4|$1O|1W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|1X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|1Y|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1Z|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BE]]]|6|@$0|20|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|1V]|4|$1O|24]]|5|$D|$A|$L|F]]|K|$A|$L|F|J|-1|I|25|G|26]|Q|$I|F|G|F|J|-1]]]]|6|@]]]]]]|$0|27|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]|Q|$I|2C]]|K|$A|$L|F]]|12|$1E|BF]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2F|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2I]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2J|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2L]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BG]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2O|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2Q|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|2S|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]|1A|$J|-2]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2T|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]]|K|$A|$L|F]]|12|$1E|BH]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2U|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2V]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2W|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2X]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|Q|$J|-1|I|2N|E|F]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BI]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2Z|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|30]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|31|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|32]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|33|2|8|4|$5|$9|$A|$B|34]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|35|H|36|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|37|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|38|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|39|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BJ]]]|6|@$0|3A|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|3C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|3D|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|S|1S|3F|1U|3B]|4|$1O|3G]]|5|$D|$A|$L|F|J|-1|E|P]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|3H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|3I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|BK]]]|6|@$0|3L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|S]|3N|$A|$3O|3P|1U|3Q|9|$L|3R|J|-1|H|3R]]]]]|6|@$0|3S|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BL]]]|6|@$0|3T|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|3U|Z|3V]|1I|3W]|3X|$]]|6|@]]]]|$0|3Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BM]]]|6|@$0|3Z|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41|1U|3B]|4|$1O|42]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|43|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|44|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BN]]]|6|@$0|45|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|46]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|47|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|P|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|48|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BO]]]|6|@$0|49|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|4C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4D|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4E|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BP]]]|6|@$0|4F|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4H]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|4I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BQ]]]|6|@$0|4J|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BR]]]|6|@$0|4N|2|4O|4|$4P|4Q|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|4T|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|50|51|G|9|52]]|6|@]]]]]]]]|$0|53|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$E|F|G|F|H|F|I|F|L|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|BS]]]|6|@$0|54|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|55|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BT]]]|6|@$0|56|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|57|Z|58]]|3X|$]]|6|@]]]]]]|$0|59|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BU]]]|6|@$0|5B|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|5C]]|5|$D|$A|$L|F|J|-1]]|K|$A|$L|F]]]]|6|@]]|$0|5D|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|5E]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]]]]]|$0|5F|2|8|4|$5|$9|$A|$B|5G]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|5H|G|P|H|5I|I|P|J|-1]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|5J|Z|5K]]]]]]|6|@$0|5L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|5M|I|F|J|-1]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BV]]]|6|@$0|5O|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|5P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|5Q|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|5R]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5S|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|5T]|1A|$I|5T|J|-1]]|12|$1E|BW]]]|6|@$0|5U|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5V|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BX]]]|6|@$0|5W|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|5X|Z|5Y]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|60|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|61|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BY]]]|6|@$0|62|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|63]]|5|$D|$A|$L|F|J|-1|H|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|64|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|65]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|66|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|BZ]]]|6|@$0|67|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|68|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C0]]]|6|@$0|69|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6A|Z|6B]|1I|5Z]]|6|@]]]]]]|$0|6C|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6D|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C1]]]|6|@$0|6E|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6G|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6H]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|C2]]]|6|@$0|6J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6K|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C3]]]|6|@$0|6L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|6O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6P|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C4]]]|6|@$0|6Q|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6S|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6T]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|5T]|1A|$G|5T|J|-1]]|12|$1E|C5]]]|6|@$0|6V|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6W|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C6]]]|6|@$0|6X|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6Y|Z|6Z]|1I|5Z]]|6|@]]]]]]|$0|70|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|71|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C7]]]|6|@$0|72|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|73]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|74|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|75]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|76|2|8|4|$5|$9|$A|$B|77]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|78|G|P|H|36|I|P|J|-1]]|R|$A|S]|T|$A|U]]]|6|@$0|79|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7A|2|1D|4|$5|$D|$A|$E|F|G|F|H|38|I|F|J|-1]|1A|$J|-1]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|C8]]]|6|@$0|7B|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C9]]]|6|@$0|7D|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7E|Z|7F]|9|7G]]|6|@]]]]]]|$0|7H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CA]]]|6|@$0|7J|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|7K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7L|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|7M]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|7N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|CB]]]|6|@$0|7O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]|3N|$A|$3O|3P|1U|7P|9|$J|-1|H|3R]]]]]|6|@$0|7Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CC]]]|6|@$0|7R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7S|Z|7T]|1I|3W]|3X|$]]|6|@]]]]|$0|7U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CD]]]|6|@$0|7V|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41]|4|$1O|7W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CE]]]|6|@$0|7Z|2|1N|4|$1O|$A|$2|1N|1P|80|1R|I|1S|81|1U|3B]|4|$1O|82]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|83|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|4R|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|84|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CF]]]|6|@$0|85|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|86]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|87|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|88|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CG]]]|6|@$0|89|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8A]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|8B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CH]]]|6|@$0|8C|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8D]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8E|2|4O|4|$4P|8F|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|8G|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|8H|51|G|9|52]]|6|@]]]]]]]]|$0|8I|2|8|4|$5|$9|$A|$B|8J]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|38|H|8K|I|P|G|P]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|8L|Z|8M]]]]]]|6|@$0|8N|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|5H|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8O|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CI]]]|6|@$0|8P|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|8Q]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8R|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8T|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|G|8U|I|8U]]|12|$1E|CJ]]]|6|@$0|8V|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|8W|Z|8X]|1I|8Y]|3X|$]]|6|@]]|$0|8Z|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|90]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|91|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|92]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|93|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CK]]]|6|@$0|94|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|95|Z|96]|1I|8Y]|3X|$]]|6|@]]|$0|97|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|98]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|99|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9A]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CL]]]|6|@$0|9C|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9D|Z|9E]|1I|8Y]|3X|$]]|6|@]]|$0|9F|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9G]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9H|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9I]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|9J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|5H|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|9K|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|I|8U]]|12|$1E|CM]]]|6|@$0|9L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|8Y]|3X|$]]|6|@]]|$0|9M|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9N]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9O|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9P]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CN]]]|6|@$0|9R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9S|Z|9T]|1I|8Y]|3X|$]]|6|@]]|$0|9U|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9V]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9W|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23]|4|$1O|9X]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CO]]]|6|@$0|9Z|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|A0|Z|A1]|1I|8Y]|3X|$]]|6|@]]|$0|A2|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|A3]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|A4|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|A5]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|A6|2|8|4|$5|$9|$A|$B|A7]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|N|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|A8|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|A9|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CP]]]|6|@$0|AA|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|AB]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|AC|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|38|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|AD|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|4R]|1A|$G|4R|J|-1|I|4R]]|12|$1E|CQ]]]|6|@$0|AE|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AF|Z|AG]|1I|AH]|3X|$]]|6|@]]|$0|AI|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AJ]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AK|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AL]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AM|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|4R|G|4R]]|12|$1E|CR]]]|6|@$0|AN|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AO|Z|AP]|1I|AH]|3X|$]]|6|@]]|$0|AQ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AR]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AS|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AT]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AU|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|4R]]|K|$A|$L|F|J|-1|I|4R]|1A|$J|-1|I|4R|G|4R]]|12|$1E|CS]]]|6|@$0|AV|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AW|Z|AX]|1I|AH|9|AY]|3X|$]]|6|@]]|$0|AZ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|B0]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|B1|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|B2]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|B3|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|3J|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|B4|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CT]]]|6|@$0|B5|2|4O|4|$4P|B6|5|$D|$A|$L|F]]|R|$A|S]]|3X|$4S|B7|4U|-1]|2|B8|4W|$0|@B9|BA]|4Z|BB|9|52]]|6|@]]]]]]]]]]'
+ },
+ status: "published",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ TYPE: "pb.page",
+ _md: "2023-12-27T12:43:00.864Z",
+ SK: "REV#0001",
+ publishedOn: "2023-12-27T12:43:00.723Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5b#0001",
+ version: 1,
+ settings: { seo: { meta: [] }, general: { layout: "static" }, social: { meta: [] } },
+ path: "/welcome-to-webiny",
+ savedOn: "2023-12-27T12:43:00.723Z",
+ locale: "en-US",
+ pid: "658c1bd3c39bb10008431b5b",
+ _et: "PbPages",
+ _ct: "2023-12-27T12:43:00.864Z",
+ tenant: "root",
+ createdOn: "2023-12-27T12:42:59.947Z",
+ locked: true,
+ category: "static",
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ webinyVersion: "5.38.2",
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5b",
+ title: "Welcome to Webiny"
+ },
+ {
+ _et: "SecurityIdentity2Tenant",
+ _ct: "2023-12-27T12:41:24.428Z",
+ tenant: "root",
+ identity: "658c1b73c39bb10008431b44",
+ _md: "2023-12-27T12:41:24.428Z",
+ createdOn: "2023-12-27T12:41:24.428Z",
+ data: {
+ teams: [],
+ groups: [{ permissions: [{ name: "*" }], id: "658c1b60c39bb10008431b42" }]
+ },
+ GSI1_SK: "TYPE#group#IDENTITY#658c1b73c39bb10008431b44",
+ SK: "LINK#T#root",
+ webinyVersion: "5.38.2",
+ PK: "IDENTITY#658c1b73c39bb10008431b44",
+ type: "group",
+ GSI1_PK: "T#root"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg",
+ "text@aliases": [],
+ "number@size": 33888,
+ "text@name": "scaffolding.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.041Z",
+ TYPE: "cms.entry.l",
+ entryId: "6022814bef4a940008b3ba26",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.041Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "6022814bef4a940008b3ba26#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba26"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg",
+ "text@aliases": [],
+ "number@size": 33888,
+ "text@name": "scaffolding.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.023Z",
+ TYPE: "cms.entry",
+ entryId: "6022814bef4a940008b3ba26",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.023Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "6022814bef4a940008b3ba26#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba26"
+ },
+ {
+ _md: "2023-12-27T12:43:23.802Z",
+ data: {
+ path: "/not-found",
+ files: [
+ {
+ name: "index.html",
+ type: "text/html",
+ meta: {
+ tags: [
+ { value: "658c1bd3c39bb10008431b5c#0001", key: "pb-page" },
+ { value: "main-menu", key: "pb-menu" }
+ ]
+ }
+ },
+ { name: "graphql.json", type: "application/json", meta: {} }
+ ],
+ locale: "en-US",
+ tenant: "root",
+ tags: [{ value: true, key: "notFoundPage" }]
+ },
+ GSI1_SK: "/not-found",
+ SK: "A",
+ PK: "T#root#PS#RENDER#/not-found",
+ _et: "PrerenderingServiceRender",
+ _ct: "2023-12-27T12:43:23.802Z",
+ TYPE: "ps.render",
+ GSI1_PK: "T#root#PS#RENDER"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg",
+ "text@aliases": [],
+ "number@size": 60602,
+ "text@name": "cost-icon.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.122Z",
+ TYPE: "cms.entry.l",
+ entryId: "6022814851197600081724ae",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.122Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "6022814851197600081724ae#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814851197600081724ae"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg",
+ "text@aliases": [],
+ "number@size": 60602,
+ "text@name": "cost-icon.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.121Z",
+ TYPE: "cms.entry",
+ entryId: "6022814851197600081724ae",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.121Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "6022814851197600081724ae#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814851197600081724ae"
+ },
+ {
+ icon: "fas/star",
+ savedOn: "2023-12-27T12:42:51.921Z",
+ locale: "en-US",
+ slug: "ungrouped",
+ _et: "CmsGroups",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ name: "Ungrouped",
+ _ct: "2023-12-27T12:42:51.962Z",
+ TYPE: "cms.group",
+ tenant: "root",
+ _md: "2023-12-27T12:42:51.962Z",
+ createdOn: "2023-12-27T12:42:51.921Z",
+ SK: "658c1bcbc39bb10008431b45",
+ description: "A generic content model group",
+ webinyVersion: "5.38.2",
+ id: "658c1bcbc39bb10008431b45",
+ PK: "T#root#L#en-US#CMS#CMG"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key":
+ "demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg",
+ "text@aliases": [],
+ "number@size": 3661,
+ "text@name": "webiny-serverless-application-framework.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:58.964Z",
+ TYPE: "cms.entry.l",
+ entryId: "6022814a0df4b000088735bb",
+ tenant: "root",
+ _md: "2023-12-27T12:42:58.964Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "6022814a0df4b000088735bb#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814a0df4b000088735bb"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key":
+ "demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg",
+ "text@aliases": [],
+ "number@size": 3661,
+ "text@name": "webiny-serverless-application-framework.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:58.964Z",
+ TYPE: "cms.entry",
+ entryId: "6022814a0df4b000088735bb",
+ tenant: "root",
+ _md: "2023-12-27T12:42:58.964Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "6022814a0df4b000088735bb#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814a0df4b000088735bb"
+ },
+ {
+ _md: "2023-12-27T12:43:14.832Z",
+ data: {
+ path: "/welcome-to-webiny",
+ files: [
+ {
+ name: "index.html",
+ type: "text/html",
+ meta: {
+ tags: [
+ { value: "658c1bd3c39bb10008431b5b#0001", key: "pb-page" },
+ { value: "main-menu", key: "pb-menu" }
+ ]
+ }
+ },
+ { name: "graphql.json", type: "application/json", meta: {} }
+ ],
+ locale: "en-US",
+ tenant: "root"
+ },
+ GSI1_SK: "/welcome-to-webiny",
+ SK: "A",
+ PK: "T#root#PS#RENDER#/welcome-to-webiny",
+ _et: "PrerenderingServiceRender",
+ _ct: "2023-12-27T12:43:14.831Z",
+ TYPE: "ps.render",
+ GSI1_PK: "T#root#PS#RENDER"
+ },
+ {
+ modelId: "modelA",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:20:12.775Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAQArKdlkBgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 1"
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:20:12.835Z",
+ entryId: "658c248b6607be00087f1166",
+ tenant: "root",
+ _md: "2023-12-27T13:20:12.835Z",
+ createdOn: "2023-12-27T13:20:11.821Z",
+ locked: true,
+
+ // We've deliberately removed the `ownedBy` field here, just so we can see how
+ // the data migration code will behave / what operations will be performed on the record.
+ // ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+
+ SK: "L",
+ publishedOn: "2023-12-27T13:20:12.775Z",
+ webinyVersion: "5.38.2",
+ id: "658c248b6607be00087f1166#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c248b6607be00087f1166"
+ },
+ {
+ modelId: "modelA",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:20:12.775Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAQArKdlkBgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 1"
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:20:12.803Z",
+ TYPE: "cms.entry.p",
+ entryId: "658c248b6607be00087f1166",
+ tenant: "root",
+ _md: "2023-12-27T13:20:12.803Z",
+ createdOn: "2023-12-27T13:20:11.821Z",
+ locked: true,
+
+ // We've deliberately removed the `ownedBy` field here, just so we can see how
+ // the data migration code will behave / what operations will be performed on the record.
+ // ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+
+ SK: "P",
+ publishedOn: "2023-12-27T13:20:12.775Z",
+ webinyVersion: "5.38.2",
+ id: "658c248b6607be00087f1166#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c248b6607be00087f1166"
+ },
+ {
+ modelId: "modelA",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:20:12.775Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAQArKdlkBgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 1"
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:20:12.803Z",
+ TYPE: "cms.entry",
+ entryId: "658c248b6607be00087f1166",
+ tenant: "root",
+ _md: "2023-12-27T13:20:12.803Z",
+ createdOn: "2023-12-27T13:20:11.821Z",
+ locked: true,
+
+ // We've deliberately removed the `ownedBy` field here, just so we can see how
+ // the data migration code will behave / what operations will be performed on the record.
+ // ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+
+ SK: "REV#0001",
+ publishedOn: "2023-12-27T13:20:12.775Z",
+ webinyVersion: "5.38.2",
+ id: "658c248b6607be00087f1166#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c248b6607be00087f1166"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg",
+ "text@aliases": [],
+ "number@size": 390,
+ "text@name": "pink-shape.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.004Z",
+ TYPE: "cms.entry.l",
+ entryId: "60228148f98841000981c723",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.004Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "60228148f98841000981c723#0001",
+ PK: "T#root#L#en-US#CMS#CME#60228148f98841000981c723"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg",
+ "text@aliases": [],
+ "number@size": 390,
+ "text@name": "pink-shape.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.004Z",
+ TYPE: "cms.entry",
+ entryId: "60228148f98841000981c723",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.004Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "60228148f98841000981c723#0001",
+ PK: "T#root#L#en-US#CMS#CME#60228148f98841000981c723"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key":
+ "demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg",
+ "text@aliases": [],
+ "number@size": 1758,
+ "text@name": "serverless-cms-logo.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.065Z",
+ TYPE: "cms.entry.l",
+ entryId: "602281486639200009fd35eb",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.065Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "602281486639200009fd35eb#0001",
+ PK: "T#root#L#en-US#CMS#CME#602281486639200009fd35eb"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key":
+ "demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg",
+ "text@aliases": [],
+ "number@size": 1758,
+ "text@name": "serverless-cms-logo.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.065Z",
+ TYPE: "cms.entry",
+ entryId: "602281486639200009fd35eb",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.065Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "602281486639200009fd35eb#0001",
+ PK: "T#root#L#en-US#CMS#CME#602281486639200009fd35eb"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key":
+ "demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg",
+ "text@aliases": [],
+ "number@size": 90163,
+ "text@name": "webiny-infrastructure-overview.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:58.984Z",
+ TYPE: "cms.entry.l",
+ entryId: "6022814891bd1300087bd24c",
+ tenant: "root",
+ _md: "2023-12-27T12:42:58.984Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "6022814891bd1300087bd24c#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814891bd1300087bd24c"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key":
+ "demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg",
+ "text@aliases": [],
+ "number@size": 90163,
+ "text@name": "webiny-infrastructure-overview.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:58.984Z",
+ TYPE: "cms.entry",
+ entryId: "6022814891bd1300087bd24c",
+ tenant: "root",
+ _md: "2023-12-27T12:42:58.984Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "6022814891bd1300087bd24c#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814891bd1300087bd24c"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg",
+ "text@aliases": [],
+ "number@size": 30007,
+ "text@name": "octo-cat.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.281Z",
+ TYPE: "cms.entry.l",
+ entryId: "60228145f98841000981c71f",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.281Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "60228145f98841000981c71f#0001",
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c71f"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg",
+ "text@aliases": [],
+ "number@size": 30007,
+ "text@name": "octo-cat.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.281Z",
+ TYPE: "cms.entry",
+ entryId: "60228145f98841000981c71f",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.281Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "60228145f98841000981c71f#0001",
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c71f"
+ },
+ {
+ _md: "2023-12-27T12:27:56.852Z",
+ data: {
+ description: "starting point for applicable migrations detection",
+ reason: "initial migration",
+ id: "5.38.2-000",
+ finishedOn: "2023-12-27T12:27:56.852Z",
+ startedOn: "2023-12-27T12:27:56.852Z"
+ },
+ GSI1_SK: "5.38.2-000",
+ SK: "A",
+ PK: "MIGRATION#5.38.2-000",
+ _et: "Migration",
+ _ct: "2023-12-27T12:27:56.852Z",
+ TYPE: "migration",
+ GSI1_PK: "MIGRATIONS"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key":
+ "demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg",
+ "text@aliases": [],
+ "number@size": 392,
+ "text@name": "cms-benefits-shape.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.081Z",
+ TYPE: "cms.entry.l",
+ entryId: "602281486639200009fd35ec",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.081Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "602281486639200009fd35ec#0001",
+ PK: "T#root#L#en-US#CMS#CME#602281486639200009fd35ec"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key":
+ "demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg",
+ "text@aliases": [],
+ "number@size": 392,
+ "text@name": "cms-benefits-shape.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.068Z",
+ TYPE: "cms.entry",
+ entryId: "602281486639200009fd35ec",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.068Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "602281486639200009fd35ec#0001",
+ PK: "T#root#L#en-US#CMS#CME#602281486639200009fd35ec"
+ },
+ {
+ _md: "2023-12-27T12:43:23.860Z",
+ data: {
+ path: "/not-found",
+ value: "658c1bd3c39bb10008431b5c#0001",
+ tenant: "root",
+ key: "pb-page"
+ },
+ GSI1_SK: "pb-page#658c1bd3c39bb10008431b5c#0001#/not-found",
+ SK: "658c1bd3c39bb10008431b5c#0001#/not-found",
+ PK: "T#root#PS#TAG#pb-page#658c1bd3c39bb10008431b5c#0001#/not-found",
+ _et: "PrerenderingServiceTagPathLink",
+ _ct: "2023-12-27T12:43:23.860Z",
+ TYPE: "ps.tagPathLink",
+ GSI1_PK: "T#root#PS#TAG"
+ },
+ {
+ modelId: "modelB",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:22:46.091Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "text@4dep2w2h": "DDB+ES - Model B Entry 1",
+ "long-text@7c5t8wwa": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBScM0rKapUMAQAaZvoqRgAAAA="
+ }
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:22:46.130Z",
+ entryId: "658c2524adbc1700090e1ad1",
+ tenant: "root",
+ _md: "2023-12-27T13:22:46.130Z",
+ createdOn: "2023-12-27T13:22:44.672Z",
+ locked: true,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ publishedOn: "2023-12-27T13:22:46.091Z",
+ webinyVersion: "5.38.2",
+ id: "658c2524adbc1700090e1ad1#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c2524adbc1700090e1ad1"
+ },
+ {
+ modelId: "modelB",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:22:46.091Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "text@4dep2w2h": "DDB+ES - Model B Entry 1",
+ "long-text@7c5t8wwa": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBScM0rKapUMAQAaZvoqRgAAAA="
+ }
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:22:46.115Z",
+ TYPE: "cms.entry.p",
+ entryId: "658c2524adbc1700090e1ad1",
+ tenant: "root",
+ _md: "2023-12-27T13:22:46.115Z",
+ createdOn: "2023-12-27T13:22:44.672Z",
+ locked: true,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "P",
+ publishedOn: "2023-12-27T13:22:46.091Z",
+ webinyVersion: "5.38.2",
+ id: "658c2524adbc1700090e1ad1#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c2524adbc1700090e1ad1"
+ },
+ {
+ modelId: "modelB",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:22:46.091Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "text@4dep2w2h": "DDB+ES - Model B Entry 1",
+ "long-text@7c5t8wwa": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBScM0rKapUMAQAaZvoqRgAAAA="
+ }
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:22:46.114Z",
+ TYPE: "cms.entry",
+ entryId: "658c2524adbc1700090e1ad1",
+ tenant: "root",
+ _md: "2023-12-27T13:22:46.114Z",
+ createdOn: "2023-12-27T13:22:44.672Z",
+ locked: true,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ publishedOn: "2023-12-27T13:22:46.091Z",
+ webinyVersion: "5.38.2",
+ id: "658c2524adbc1700090e1ad1#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c2524adbc1700090e1ad1"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg",
+ "text@aliases": [],
+ "number@size": 7806,
+ "text@name": "scalable-icon.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.102Z",
+ TYPE: "cms.entry.l",
+ entryId: "60228148fa244d0008c47c79",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.102Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "60228148fa244d0008c47c79#0001",
+ PK: "T#root#L#en-US#CMS#CME#60228148fa244d0008c47c79"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg",
+ "text@aliases": [],
+ "number@size": 7806,
+ "text@name": "scalable-icon.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.101Z",
+ TYPE: "cms.entry",
+ entryId: "60228148fa244d0008c47c79",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.101Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "60228148fa244d0008c47c79#0001",
+ PK: "T#root#L#en-US#CMS#CME#60228148fa244d0008c47c79"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg",
+ "text@aliases": [],
+ "number@size": 27878,
+ "text@name": "idp.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.146Z",
+ TYPE: "cms.entry.l",
+ entryId: "60228148f98841000981c724",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.146Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "60228148f98841000981c724#0001",
+ PK: "T#root#L#en-US#CMS#CME#60228148f98841000981c724"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg",
+ "text@aliases": [],
+ "number@size": 27878,
+ "text@name": "idp.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.146Z",
+ TYPE: "cms.entry",
+ entryId: "60228148f98841000981c724",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.146Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "60228148f98841000981c724#0001",
+ PK: "T#root#L#en-US#CMS#CME#60228148f98841000981c724"
+ },
+ {
+ _md: "2023-12-27T12:43:19.484Z",
+ data: { path: "/", value: "658c1bd3c39bb10008431b5b#0001", tenant: "root", key: "pb-page" },
+ GSI1_SK: "pb-page#658c1bd3c39bb10008431b5b#0001#/",
+ SK: "658c1bd3c39bb10008431b5b#0001#/",
+ PK: "T#root#PS#TAG#pb-page#658c1bd3c39bb10008431b5b#0001#/",
+ _et: "PrerenderingServiceTagPathLink",
+ _ct: "2023-12-27T12:43:19.484Z",
+ TYPE: "ps.tagPathLink",
+ GSI1_PK: "T#root#PS#TAG"
+ },
+ {
+ tenant: "root",
+ code: "en-US",
+ _md: "2023-12-27T12:42:49.523Z",
+ default: true,
+ createdOn: "2023-12-27T12:42:48.245Z",
+ SK: "en-US",
+ webinyVersion: "5.38.2",
+ PK: "T#root#I18N#L",
+ _et: "I18NLocale",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:49.523Z"
+ },
+ {
+ SK: "default",
+ PK: "ADMIN#SETTINGS",
+ data: { appUrl: "https://d3hohw12noi930.cloudfront.net" }
+ },
+ {
+ content: {
+ compression: "jsonpack",
+ content:
+ "id|h0HqpItbGT|type|document|data|settings|elements|ZlkwCyXhhc|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|horizontalAlignFlex|center|verticalAlign|flex-start|pwR8zBN28v|grid|1100px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|6838kMd5Vh|cell|80px|size|iG8DLRffpF|heading|text|typography|heading1|alignment|tag|h1|color|color3|Page+not+found!|9UHkb1nlN1|paragraph|paragraph1|div|Sorry,+but+the+page+you+were+looking+for+could+not+be+found.|PkNZ6zIVWv|button|buttonText|TAKE+ME+HOme|30px|link|href|/|primary^C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|N|$A|O]|P|$A|Q]]]|6|@$0|R|2|S|4|$5|$9|$A|$B|T]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|S|$U|V]|W|$A|$X|Y]|Z|$X|10]]|N|$A|Q]|P|$A|Q]]]|6|@$0|11|2|12|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|E|13]]|S|$14|1U]]]|6|@$0|15|2|16|4|$17|$A|$2|16|18|19|1A|O|1B|1C|1D|1E]|4|$17|1F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|1G|2|1H|4|$17|$A|$2|1H|18|1I|1A|O|1B|1J|1D|1E]|4|$17|1K]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|1L|2|1M|4|$1N|1O|5|$D|$A|$L|F|J|-1|E|1P]]|N|$A|O]]|1Q|$1R|1S]|2|1T]|6|@]]]]]]]]]]"
+ },
+ status: "published",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ TYPE: "pb.page.p.path",
+ _md: "2023-12-27T12:43:00.682Z",
+ SK: "/not-found",
+ publishedOn: "2023-12-27T12:43:00.663Z",
+ id: "658c1bd3c39bb10008431b5c#0001",
+ editor: "page-builder",
+ version: 1,
+ settings: { seo: { meta: [] }, general: { layout: "static" }, social: { meta: [] } },
+ path: "/not-found",
+ locale: "en-US",
+ savedOn: "2023-12-27T12:43:00.663Z",
+ pid: "658c1bd3c39bb10008431b5c",
+ _et: "PbPages",
+ _ct: "2023-12-27T12:43:00.682Z",
+ tenant: "root",
+ createdOn: "2023-12-27T12:42:59.964Z",
+ locked: true,
+ category: "static",
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ webinyVersion: "5.38.2",
+ PK: "T#root#L#en-US#PB#PATH",
+ title: "Not Found"
+ },
+ {
+ content: {
+ compression: "jsonpack",
+ content:
+ 'id|Fv1PpPWu-|type|document|data|settings|elements|xqt7BI4iN9|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|100px|275px|16px|tablet|horizontalAlignFlex|center|verticalAlign|flex-start|background|image|file|6022814b7a77e60008f70d62|src|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg|gdE7Q7rcA|grid|1100px|20px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|_fbQO4Nlpp|cell|size|cdk_pclqE|6022814b0df4b000088735bc|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg|height|44px|ovLRNqyVu3|wmMU13uZ10|1eUZzAvoB|heading|text|typography|heading1|alignment|tag|h1|color|color6|Welcome+to+Webiny|F6ZREnQcc|64px|oEgjDLVXUu|0xYOozhJw|paragraph|paragraph1|div|Webiny+makes+it+easy+to+build+applications+and+websites+on+top+of+the+serverless+infrastructure+by+providing+you+with+a+ready-made+CMS+and+a+development+framework.
|20%25|20%25|gwhTOrZvc|30px|6-6|EaIMtHtOIw|-8px|px|602282e07a77e60008f70d63|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg|8k7zxQUTm|heading6|h6|Scalable|qNngQ1C-5|paragraph2|Webiny+apps+can+scale+to+handle+the+most+demanding+workloads.
|uBv_VRv0i|8px|iQaW4vjKg|No+custom+tooling+required|Wy3Tw-Lb8|Webiny+eliminates+the+need+to+build+custom+tooling+to+create+serverless+app
|uwrjoSZkB|Q39eQZm_8z|zSVZIwnSQ0|Cost+effective|S-Ydr4kX6k|Webiny+apps+run+on+serverless+infrastructure+which+costs+80%25+less+than+VMs
|nUX2JXYjhD|8z0hL8l7ay|Resolves+serverless+challenges|04ZNIcAGE_|Webiny+removes+all+the+challenges+of+building+serverless+applications
|vm0cFfH8KG|100%25|65px|75px|txeqybzKr3|80px|wMjC2uv8cj|Pm7ws20iA|color3|Get+to+know+Webiny+products|6CPpd558B|heading2|h2|Architect.+Code.+Deploy.|1e0_OJgMx|gpYd80MXeg|40px|15px|kAYc-QClR|4-8|border|style|solid|rgba(229,+229,+229,+1)|1|8i803wClVt|p55J-BkDn|6022814a0df4b000088735bb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg|90px|link|8nddxG64r|PR-yiR65n|heading3|h3|Webiny+Serverless+
Application+Framework|pVH9_fFLM|x0SSJvgrdD|b0iE8vr2S|Everything+you+need+to+create+and+deploy+applications+on+top+of+the+serverless+infrastructure.
|JMSKwWsT_|OU70Y990tA|T_M_Ww4Wb|heading4|h4|Use+it+to+build:|806nmKOyc|g59JmcyM-7|Cyziie_SK|list|
\n++++++++++++++++++++- Full-stack+applications
- Multi-tenant+solutions
\n++++++++++++++++
|ST0O1ZeCk|ILrAABWXiX|\n++++++++++++++++++++- APIs
- Microservice
\n++++++++++++++++
|XxXGeIywO|9H5t3COdbo|mc0_RS9rg|button|buttonText|Learn+more|50px|href|https://www.webiny.com/serverless-application-framework/|newTab|primary|icon|fas|long-arrow-alt-right|svg||position|16|Kg3rMc1Re|LAcQHMs8K|8oaRz-Gko_|9fQ9W-xiB|6022814891bd1300087bd24c|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg|YCG34DB89|xvBXD_QTkN|GqW2LBMzV|An+easier+way+to+build+serverless+apps|9cWYQwXUd|There+are+many+solutions+that+help+you+run,+deploy+and+monitor+serverless+functions,+but+when+it+comes+to+actually+coding+one,+there+are+none.+Webiny+is+a+solution+that+helps+you+code+your+serverless+app+by+providing+you+with+all+the+components+like+ACL,+routing,+file+storage+and+many+more.
|LxqyquKlYy|100%25|60px|177px|60228148f98841000981c723|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg|yqrzxoDllE|70px|bD-TQmZyW8|4ESAx7NxM|Framework+features|Xr7NLMpzm|3-3-3-3|_RtRioPOsj|12px|mOr47ImJK|AlTNw-76F8|r0e8MiCuK|6022814bef4a940008b3ba27|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg|170px|QFwbqHtSh|DH-C0-mBsO|XSN-oY3V3|Users,+groups,+roles+&+scopes|Unyhp8o-a|Security+is+a+crucial+layer+in+any+application.+Webiny+includes+a+full-featured+security+module+that\'s+connected+to+the+built-in+GraphQL+API.Users,+groups,+roles+&+scopes
|Ntcduee0-|0b66dbGkG|PoRqI9i2xE|0ZpnBSqjoz|6022814bef4a940008b3ba26|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg|FFGobMHHI|IWxl_nrRkr|I5btsZceI|Scaffolding|5qvaQSnP6|Quickly+generate+boilerplate+code+using+CLI+plugins.+From+lambda+functions+to+new+GraphQL+APIs.
|YHUznp7ZM5|PlxqV_uS7B|zKQYI-EIFl|frRuzWpRI|60228148f98841000981c724|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg|M1tvv840H|fwreagGdac|6H1tgEViY|Customizable+security|h0Ctka4TED|Use+the+default+AWS+Cognito,+or+replace+with+3rd+party+identity+providers+like+Okta,+Auth0,+etc.+Using+plugins+you+can+make+Webiny+work+with+any+identity+provider.
|SyyrOA60AF|GvU31fd4U|1vAxZAkD9O|dlI-qhVLKy|6022814bef4a940008b3ba28|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg|ftA7NOOxG|WU58SBDPP8|QtYfpt1yoE|Multiple+environments|mmpGUzg6o1|No+code+change+goes+directly+into+a+production+environment.+Webiny+CLI+makes+it+easy+to+manage+and+create+multiple+environments+for+your+project.
|wYK9BhaanZ|100%25|125px|ur1DQFl5BR|TzBvXtU2PH|-PU3iBlQ4|A6sNR3MR-5|Xtqk_itss|602281486ed41f0008bc2dad|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png|495px|bsKTDygik|ev9nhHISRw|1BBr9ACuM|One+size+doesn\'t+fit+all|0olguTqDN|It\'s+a+very+different+set+of+requirements+a+technical+team+has+to+a+marketing+team+to+a+business+development+team.+Webiny+Serverless+CMS+comes+with+several+different+apps+you+can+use+independently,+or+together+as+part+of+a+cohesive+solution.
|BhnYb3VW7D|QYZ290WhC|rgba(238,+238,+238,+1)|ER2SFYwbeK|gZp3Hxm5Js|602281486639200009fd35eb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg|FsOaMudE8|ElruSYJxWM|Webiny+Serverless+CMS|9HJcM89Am|8Cp2ZC30_H|qrS5wswdQ|heading5|h5|A+suite+of+applications+to+help+you+manage+your+content.+|pLUutc-E2|MGlDcu91q_|A6rStUekq|Use+it+to+build:|jIdakfVZU|5JHsGc_Rq-|SNOFqUK6lI|
\n++++++++++++++++++++- Marketing+sites
\n++++++++++++++++++++- Multi-website+solutions
\n++++++++++++++++++++- Content+hubs
\n++++++++++++++++
|96dJBnIlc|5cPfb7AwXH|\n++++++++++++++++++++- Multi-language+sites
\n++++++++++++++++++++- Intranet+portals
\n++++++++++++++++++++- Headless+content+models
\n++++++++++++++++
|L4dFyzBKMM|Learn+more|https://www.webiny.com/serverless-cms/||mjmNmloeUS|100%25|220px|602281486639200009fd35ec|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg|xUkOEAm5X3|Kgr1ambSuG|AP_uTrgLZ|CMS+benefits|juBaAPJ76|4-4-4|s95PSAToXK|35px|ZECp8jcZD|60228148fa244d0008c47c79|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg|146px|EyKog1RmH|Scalable|_8lCcwhUN|No+matter+the+demand,+Webiny+Serverless+CMS+can+easily+scale+to+meet+even+the+most+challenging+workloads.
|SmrEQ9OZ8|QWM8cmlQEM|60228145f98841000981c720|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg|TYx-A5YCI|Adaptable|SsbWKZz_Z|Being+an+open-source+project,+it\'s+easy+to+modify+and+adapt+things+to+your+own+needs.
|gqdtbKfv7l|jBWaxzt-4|6022814851197600081724ae|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg|NLSOIstf9|Low+cost+of+ownership|kI-neIjkXx|Self-hosted+on+top+of+serverless+infrastructure.+No+infrastructure+to+mange,+less+people+required+to+operate+and+maintain.
|V14HHGmXN|-djsQadY-8|pTVeVoKkTi|bM5b8O7IMY|Secure|l9PuI-TdVA|Secured+by+AWS+Cognito.+It\'s+also+easy+to+integrate+services+like+OKTA,+Auth0+and+similar.
|N1lW0cAasg|W-ub9guhLt|602281486ed41f0008bc2dac|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg|DVhLZfrM53|Data+ownership|shmIumNfIu|Webiny+is+self-hosted,+it+means+your+data+stays+within+your+data+center.+
|8F7J_16a46|2gtT4Mfw6c|602281486ed41f0008bc2dab|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg|5EMJkVWgKW|Permission+control|cdSOjFAWkf|Powerful+options+to+control+the+permissions+your+users+will+have.+They+perfectly+align+with+your+business+requirements.
|5ggqk561Ka|100%25|C6B8QfkUXs|ChF1iOAbtb|7tRfsJ_SEz|Serverless+makes+infrastructure+easy,+Webiny+makes+serverless+easy|oYf9t6Uwz|RdazJP-4W1|7jBNW1iTi|60228145f98841000981c721|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg|200px|npNMgLft0|1.+Developer-friendly|DpubDRaGQ|Webiny+has+been+made+with+the+developer+in+mind.+It+helps+them+develop+serverless+applications+with+ease.
|KbQocaayR|KDO-Ja7wS|60228145f98841000981c71f|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg|ETll3nkV4|2.+Open+source|UWPjvO7EC|Webiny+is+created+and+maintained+by+an+amazing+group+of+people.+Being+open+source+means+Webiny+grows+and+evolves+much+faster.+Contributor+are+welcome.
|En4soRn06o|fqxeYbEV4|60228148fa244d0008c47c7a|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png|276px|e5v0LBbfz|3.+Community|p9FWp5yqUy|We+have+an+active+community+on+slack.+Talk+to+the+core-team,+and+get+help.+Webiny+team+is+always+there+for+any+questions.
|OYp5Z-6Xo|woaE-6v5bN|Y8ndbn88hy|View+Webiny+on+GitHub|https://github.com/webiny/webiny-js|secondary|fab|github|^C|C|C|6|6|6|6|C|6|3|9|C|C|6|6|C|6|C|C|C|3|C|C|3|C|C|3|C|C|3|C|C|6|C|C|6|3|9|C|C|6|6|C|4|4|4|4|4|4|C|4|4|4|C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|O|I|P|G|P]|Q|$J|-1|I|M|G|M]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|Y|Z|10]]]]]]|6|@$0|11|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BC]]]|6|@$0|1F|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|1G|Z|1H]|1I|1J]]|6|@]]]]]]|$0|1K|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1L|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BD]]]|6|@$0|1M|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|1V]|4|$1O|1W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|1X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|1Y|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1Z|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BE]]]|6|@$0|20|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|1V]|4|$1O|24]]|5|$D|$A|$L|F]]|K|$A|$L|F|J|-1|I|25|G|26]|Q|$I|F|G|F|J|-1]]]]|6|@]]]]]]|$0|27|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]|Q|$I|2C]]|K|$A|$L|F]]|12|$1E|BF]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2F|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2I]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2J|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2L]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BG]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2O|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2Q|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|2S|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]|1A|$J|-2]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2T|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]]|K|$A|$L|F]]|12|$1E|BH]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2U|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2V]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2W|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2X]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|Q|$J|-1|I|2N|E|F]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BI]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2Z|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|30]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|31|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|32]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|33|2|8|4|$5|$9|$A|$B|34]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|35|H|36|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|37|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|38|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|39|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BJ]]]|6|@$0|3A|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|3C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|3D|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|S|1S|3F|1U|3B]|4|$1O|3G]]|5|$D|$A|$L|F|J|-1|E|P]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|3H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|3I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|BK]]]|6|@$0|3L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|S]|3N|$A|$3O|3P|1U|3Q|9|$L|3R|J|-1|H|3R]]]]]|6|@$0|3S|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BL]]]|6|@$0|3T|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|3U|Z|3V]|1I|3W]|3X|$]]|6|@]]]]|$0|3Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BM]]]|6|@$0|3Z|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41|1U|3B]|4|$1O|42]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|43|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|44|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BN]]]|6|@$0|45|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|46]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|47|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|P|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|48|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BO]]]|6|@$0|49|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|4C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4D|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4E|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BP]]]|6|@$0|4F|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4H]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|4I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BQ]]]|6|@$0|4J|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BR]]]|6|@$0|4N|2|4O|4|$4P|4Q|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|4T|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|50|51|G|9|52]]|6|@]]]]]]]]|$0|53|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$E|F|G|F|H|F|I|F|L|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|BS]]]|6|@$0|54|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|55|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BT]]]|6|@$0|56|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|57|Z|58]]|3X|$]]|6|@]]]]]]|$0|59|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BU]]]|6|@$0|5B|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|5C]]|5|$D|$A|$L|F|J|-1]]|K|$A|$L|F]]]]|6|@]]|$0|5D|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|5E]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]]]]]|$0|5F|2|8|4|$5|$9|$A|$B|5G]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|5H|G|P|H|5I|I|P|J|-1]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|5J|Z|5K]]]]]]|6|@$0|5L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|5M|I|F|J|-1]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BV]]]|6|@$0|5O|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|5P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|5Q|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|5R]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5S|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|5T]|1A|$I|5T|J|-1]]|12|$1E|BW]]]|6|@$0|5U|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5V|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BX]]]|6|@$0|5W|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|5X|Z|5Y]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|60|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|61|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BY]]]|6|@$0|62|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|63]]|5|$D|$A|$L|F|J|-1|H|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|64|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|65]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|66|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|BZ]]]|6|@$0|67|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|68|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C0]]]|6|@$0|69|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6A|Z|6B]|1I|5Z]]|6|@]]]]]]|$0|6C|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6D|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C1]]]|6|@$0|6E|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6G|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6H]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|C2]]]|6|@$0|6J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6K|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C3]]]|6|@$0|6L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|6O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6P|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C4]]]|6|@$0|6Q|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6S|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6T]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|5T]|1A|$G|5T|J|-1]]|12|$1E|C5]]]|6|@$0|6V|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6W|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C6]]]|6|@$0|6X|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6Y|Z|6Z]|1I|5Z]]|6|@]]]]]]|$0|70|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|71|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C7]]]|6|@$0|72|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|73]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|74|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|75]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|76|2|8|4|$5|$9|$A|$B|77]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|78|G|P|H|36|I|P|J|-1]]|R|$A|S]|T|$A|U]]]|6|@$0|79|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7A|2|1D|4|$5|$D|$A|$E|F|G|F|H|38|I|F|J|-1]|1A|$J|-1]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|C8]]]|6|@$0|7B|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C9]]]|6|@$0|7D|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7E|Z|7F]|9|7G]]|6|@]]]]]]|$0|7H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CA]]]|6|@$0|7J|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|7K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7L|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|7M]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|7N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|CB]]]|6|@$0|7O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]|3N|$A|$3O|3P|1U|7P|9|$J|-1|H|3R]]]]]|6|@$0|7Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CC]]]|6|@$0|7R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7S|Z|7T]|1I|3W]|3X|$]]|6|@]]]]|$0|7U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CD]]]|6|@$0|7V|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41]|4|$1O|7W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CE]]]|6|@$0|7Z|2|1N|4|$1O|$A|$2|1N|1P|80|1R|I|1S|81|1U|3B]|4|$1O|82]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|83|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|4R|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|84|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CF]]]|6|@$0|85|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|86]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|87|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|88|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CG]]]|6|@$0|89|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8A]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|8B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CH]]]|6|@$0|8C|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8D]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8E|2|4O|4|$4P|8F|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|8G|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|8H|51|G|9|52]]|6|@]]]]]]]]|$0|8I|2|8|4|$5|$9|$A|$B|8J]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|38|H|8K|I|P|G|P]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|8L|Z|8M]]]]]]|6|@$0|8N|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|5H|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8O|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CI]]]|6|@$0|8P|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|8Q]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8R|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8T|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|G|8U|I|8U]]|12|$1E|CJ]]]|6|@$0|8V|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|8W|Z|8X]|1I|8Y]|3X|$]]|6|@]]|$0|8Z|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|90]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|91|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|92]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|93|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CK]]]|6|@$0|94|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|95|Z|96]|1I|8Y]|3X|$]]|6|@]]|$0|97|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|98]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|99|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9A]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CL]]]|6|@$0|9C|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9D|Z|9E]|1I|8Y]|3X|$]]|6|@]]|$0|9F|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9G]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9H|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9I]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|9J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|5H|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|9K|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|I|8U]]|12|$1E|CM]]]|6|@$0|9L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|8Y]|3X|$]]|6|@]]|$0|9M|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9N]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9O|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9P]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CN]]]|6|@$0|9R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9S|Z|9T]|1I|8Y]|3X|$]]|6|@]]|$0|9U|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9V]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9W|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23]|4|$1O|9X]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CO]]]|6|@$0|9Z|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|A0|Z|A1]|1I|8Y]|3X|$]]|6|@]]|$0|A2|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|A3]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|A4|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|A5]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|A6|2|8|4|$5|$9|$A|$B|A7]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|N|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|A8|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|A9|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CP]]]|6|@$0|AA|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|AB]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|AC|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|38|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|AD|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|4R]|1A|$G|4R|J|-1|I|4R]]|12|$1E|CQ]]]|6|@$0|AE|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AF|Z|AG]|1I|AH]|3X|$]]|6|@]]|$0|AI|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AJ]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AK|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AL]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AM|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|4R|G|4R]]|12|$1E|CR]]]|6|@$0|AN|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AO|Z|AP]|1I|AH]|3X|$]]|6|@]]|$0|AQ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AR]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AS|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AT]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AU|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|4R]]|K|$A|$L|F|J|-1|I|4R]|1A|$J|-1|I|4R|G|4R]]|12|$1E|CS]]]|6|@$0|AV|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AW|Z|AX]|1I|AH|9|AY]|3X|$]]|6|@]]|$0|AZ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|B0]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|B1|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|B2]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|B3|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|3J|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|B4|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CT]]]|6|@$0|B5|2|4O|4|$4P|B6|5|$D|$A|$L|F]]|R|$A|S]]|3X|$4S|B7|4U|-1]|2|B8|4W|$0|@B9|BA]|4Z|BB|9|52]]|6|@]]]]]]]]]]'
+ },
+ status: "published",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ TYPE: "pb.page.p.path",
+ _md: "2023-12-27T12:43:00.881Z",
+ SK: "/welcome-to-webiny",
+ publishedOn: "2023-12-27T12:43:00.723Z",
+ id: "658c1bd3c39bb10008431b5b#0001",
+ editor: "page-builder",
+ version: 1,
+ settings: { seo: { meta: [] }, general: { layout: "static" }, social: { meta: [] } },
+ path: "/welcome-to-webiny",
+ locale: "en-US",
+ savedOn: "2023-12-27T12:43:00.723Z",
+ pid: "658c1bd3c39bb10008431b5b",
+ _et: "PbPages",
+ _ct: "2023-12-27T12:43:00.881Z",
+ tenant: "root",
+ createdOn: "2023-12-27T12:42:59.947Z",
+ locked: true,
+ category: "static",
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ webinyVersion: "5.38.2",
+ PK: "T#root#L#en-US#PB#PATH",
+ title: "Welcome to Webiny"
+ },
+ {
+ modelId: "modelA",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:20:34.175Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAIAFvZsCRgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 3"
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:20:34.204Z",
+ entryId: "658c24a16607be00087f1168",
+ tenant: "root",
+ _md: "2023-12-27T13:20:34.204Z",
+ createdOn: "2023-12-27T13:20:33.775Z",
+ locked: true,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ publishedOn: "2023-12-27T13:20:34.175Z",
+ webinyVersion: "5.38.2",
+ id: "658c24a16607be00087f1168#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c24a16607be00087f1168"
+ },
+ {
+ modelId: "modelA",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:20:34.175Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAIAFvZsCRgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 3"
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:20:34.199Z",
+ TYPE: "cms.entry.p",
+ entryId: "658c24a16607be00087f1168",
+ tenant: "root",
+ _md: "2023-12-27T13:20:34.199Z",
+ createdOn: "2023-12-27T13:20:33.775Z",
+ locked: true,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "P",
+ publishedOn: "2023-12-27T13:20:34.175Z",
+ webinyVersion: "5.38.2",
+ id: "658c24a16607be00087f1168#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c24a16607be00087f1168"
+ },
+ {
+ modelId: "modelA",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:20:34.175Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAIAFvZsCRgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 3"
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:20:34.199Z",
+ TYPE: "cms.entry",
+ entryId: "658c24a16607be00087f1168",
+ tenant: "root",
+ _md: "2023-12-27T13:20:34.199Z",
+ createdOn: "2023-12-27T13:20:33.775Z",
+ locked: true,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ publishedOn: "2023-12-27T13:20:34.175Z",
+ webinyVersion: "5.38.2",
+ id: "658c24a16607be00087f1168#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c24a16607be00087f1168"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png",
+ "text@aliases": [],
+ "number@size": 17382,
+ "text@name": "community-icon.png",
+ "text@type": "image/png",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.301Z",
+ TYPE: "cms.entry.l",
+ entryId: "60228148fa244d0008c47c7a",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.301Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "60228148fa244d0008c47c7a#0001",
+ PK: "T#root#L#en-US#CMS#CME#60228148fa244d0008c47c7a"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png",
+ "text@aliases": [],
+ "number@size": 17382,
+ "text@name": "community-icon.png",
+ "text@type": "image/png",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.301Z",
+ TYPE: "cms.entry",
+ entryId: "60228148fa244d0008c47c7a",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.301Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "60228148fa244d0008c47c7a#0001",
+ PK: "T#root#L#en-US#CMS#CME#60228148fa244d0008c47c7a"
+ },
+ {
+ _md: "2023-12-27T12:40:58.922Z",
+ data: {
+ parent: null,
+ settings: { domains: [] },
+ webinyVersion: "5.38.2",
+ savedOn: "2023-12-27T12:40:58.921Z",
+ name: "Root",
+ description: "The top-level Webiny tenant.",
+ id: "root",
+ createdOn: "2023-12-27T12:40:58.921Z",
+ tags: [],
+ status: "active"
+ },
+ GSI1_SK: "T#null#2023-12-27T12:40:58.921Z",
+ SK: "A",
+ PK: "T#root",
+ _et: "TenancyTenant",
+ _ct: "2023-12-27T12:40:58.922Z",
+ TYPE: "tenancy.tenant",
+ GSI1_PK: "TENANTS"
+ },
+ {
+ _md: "2023-12-27T12:43:01.222Z",
+ data: {
+ pages: { notFound: "658c1bd3c39bb10008431b5c", home: "658c1bd3c39bb10008431b5b" },
+ websiteUrl: null,
+ name: "devr",
+ prerendering: { app: { url: null }, meta: {}, storage: { name: null } },
+ locale: "en-US",
+ type: "default",
+ tenant: "root"
+ },
+ SK: "A",
+ PK: "T#root#L#en-US#PB#SETTINGS",
+ _et: "PbSettings",
+ _ct: "2023-12-27T12:43:01.222Z",
+ TYPE: "pb.settings"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg",
+ "text@aliases": [],
+ "number@size": 5053,
+ "text@name": "webiny-logo.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:58.924Z",
+ TYPE: "cms.entry.l",
+ entryId: "6022814b0df4b000088735bc",
+ tenant: "root",
+ _md: "2023-12-27T12:42:58.924Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "6022814b0df4b000088735bc#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814b0df4b000088735bc"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg",
+ "text@aliases": [],
+ "number@size": 5053,
+ "text@name": "webiny-logo.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:58.924Z",
+ TYPE: "cms.entry",
+ entryId: "6022814b0df4b000088735bc",
+ tenant: "root",
+ _md: "2023-12-27T12:42:58.924Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "6022814b0df4b000088735bc#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814b0df4b000088735bc"
+ },
+ {
+ _md: "2023-12-27T12:42:52.281Z",
+ data: {
+ srcPrefix: "https://d3oted5odtbsmd.cloudfront.net/files/",
+ uploadMinFileSize: 0,
+ uploadMaxFileSize: 10737418240,
+ tenant: "root"
+ },
+ SK: "A",
+ PK: "T#root#FM#SETTINGS",
+ _et: "FM.Settings",
+ _ct: "2023-12-27T12:42:52.281Z",
+ TYPE: "fm.settings"
+ },
+ {
+ modelId: "modelA",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:20:42.180Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "long-text@z2tdm05d": { compression: "gzip", value: "H4sIAAAAAAAAAwMAAAAAAAAAAAA=" },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 4"
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:20:42.181Z",
+ TYPE: "cms.entry.l",
+ entryId: "658c24aa6607be00087f1169",
+ tenant: "root",
+ _md: "2023-12-27T13:20:42.181Z",
+ createdOn: "2023-12-27T13:20:42.180Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "658c24aa6607be00087f1169#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c24aa6607be00087f1169"
+ },
+ {
+ modelId: "modelA",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:20:42.180Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "long-text@z2tdm05d": { compression: "gzip", value: "H4sIAAAAAAAAAwMAAAAAAAAAAAA=" },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 4"
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:20:42.181Z",
+ TYPE: "cms.entry",
+ entryId: "658c24aa6607be00087f1169",
+ tenant: "root",
+ _md: "2023-12-27T13:20:42.181Z",
+ createdOn: "2023-12-27T13:20:42.180Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "658c24aa6607be00087f1169#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c24aa6607be00087f1169"
+ },
+ {
+ SK: "default",
+ PK: "PS#SETTINGS",
+ data: {
+ bucket: "wby-delivery-68ac55a",
+ cloudfrontId: "E12G8OCR2J2BDW",
+ appUrl: "https://d1c9xtq19d4x6u.cloudfront.net",
+ deliveryUrl: "https://d1jwcc7rxvj5th.cloudfront.net",
+ sqsQueueUrl:
+ "https://sqs.eu-central-1.amazonaws.com/674320871285/wby-ps-render-queue-bcd2dfd.fifo"
+ }
+ },
+ {
+ modelId: "modelB",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:23:15.536Z",
+ locale: "en-US",
+ status: "draft",
+ meta: {},
+ values: {
+ "file@5atpz8nu": null,
+ "text@4dep2w2h": "DDB+ES - Model B Entry 2 UPDATED",
+ "long-text@7c5t8wwa": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBScM0rKapUMFIIDXBxDHF1AQA3yyBkIAAAAA=="
+ }
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:23:15.570Z",
+ TYPE: "L",
+ entryId: "658c2531adbc1700090e1ad2",
+ tenant: "root",
+ _md: "2023-12-27T13:23:15.570Z",
+ createdOn: "2023-12-27T13:22:57.094Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "658c2531adbc1700090e1ad2#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c2531adbc1700090e1ad2",
+ modifiedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" }
+ },
+ {
+ modelId: "modelB",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T13:23:15.536Z",
+ locale: "en-US",
+ status: "draft",
+ meta: {},
+ values: {
+ "file@5atpz8nu": null,
+ "text@4dep2w2h": "DDB+ES - Model B Entry 2 UPDATED",
+ "long-text@7c5t8wwa": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBScM0rKapUMFIIDXBxDHF1AQA3yyBkIAAAAA=="
+ }
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T13:23:15.570Z",
+ TYPE: "cms.entry",
+ entryId: "658c2531adbc1700090e1ad2",
+ tenant: "root",
+ _md: "2023-12-27T13:23:15.570Z",
+ createdOn: "2023-12-27T13:22:57.094Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "658c2531adbc1700090e1ad2#0001",
+ PK: "T#root#L#en-US#CMS#CME#658c2531adbc1700090e1ad2",
+ modifiedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" }
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key":
+ "demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png",
+ "text@aliases": [],
+ "number@size": 108898,
+ "text@name": "webiny-serverless-cms.png ",
+ "text@type": "image/png",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.062Z",
+ TYPE: "cms.entry.l",
+ entryId: "602281486ed41f0008bc2dad",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.062Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "602281486ed41f0008bc2dad#0001",
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dad"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key":
+ "demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png",
+ "text@aliases": [],
+ "number@size": 108898,
+ "text@name": "webiny-serverless-cms.png ",
+ "text@type": "image/png",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.061Z",
+ TYPE: "cms.entry",
+ entryId: "602281486ed41f0008bc2dad",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.061Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "602281486ed41f0008bc2dad#0001",
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dad"
+ },
+ {
+ _md: "2023-12-27T12:43:23.860Z",
+ data: { path: "/not-found", value: "main-menu", tenant: "root", key: "pb-menu" },
+ GSI1_SK: "pb-menu#main-menu#/not-found",
+ SK: "main-menu#/not-found",
+ PK: "T#root#PS#TAG#pb-menu#main-menu#/not-found",
+ _et: "PrerenderingServiceTagPathLink",
+ _ct: "2023-12-27T12:43:23.860Z",
+ TYPE: "ps.tagPathLink",
+ GSI1_PK: "T#root#PS#TAG"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg",
+ "text@aliases": [],
+ "number@size": 132767,
+ "text@name": "environments.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.045Z",
+ TYPE: "cms.entry.l",
+ entryId: "6022814bef4a940008b3ba28",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.045Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "6022814bef4a940008b3ba28#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba28"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg",
+ "text@aliases": [],
+ "number@size": 132767,
+ "text@name": "environments.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.045Z",
+ TYPE: "cms.entry",
+ entryId: "6022814bef4a940008b3ba28",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.045Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "6022814bef4a940008b3ba28#0001",
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba28"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg",
+ "text@aliases": [],
+ "number@size": 73153,
+ "text@name": "data-icon.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.161Z",
+ TYPE: "cms.entry.l",
+ entryId: "602281486ed41f0008bc2dac",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.161Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "L",
+ webinyVersion: "5.38.2",
+ id: "602281486ed41f0008bc2dac#0001",
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dac"
+ },
+ {
+ modelId: "fmFile",
+ version: 1,
+ location: { folderId: "root" },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "object@meta": { "boolean@private": true },
+ "object@location": { "text@folderId": "root" },
+ "text@key": "demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg",
+ "text@aliases": [],
+ "number@size": 73153,
+ "text@name": "data-icon.svg",
+ "text@type": "image/svg+xml",
+ "text@tags": []
+ },
+ _et: "CmsEntries",
+ createdBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ _ct: "2023-12-27T12:42:59.161Z",
+ TYPE: "cms.entry",
+ entryId: "602281486ed41f0008bc2dac",
+ tenant: "root",
+ _md: "2023-12-27T12:42:59.161Z",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ locked: false,
+ ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+ SK: "REV#0001",
+ webinyVersion: "5.38.2",
+ id: "602281486ed41f0008bc2dac#0001",
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dac"
+ },
+ {
+ _md: "2023-12-27T12:41:24.417Z",
+ data: {
+ firstName: "ad",
+ lastName: "min",
+ createdBy: null,
+ webinyVersion: "5.38.2",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ createdOn: "2023-12-27T12:41:23.982Z",
+ email: "admin@webiny.com",
+ tenant: "root",
+ group: "658c1b60c39bb10008431b42"
+ },
+ GSI1_SK: "admin@webiny.com",
+ SK: "A",
+ PK: "T#root#ADMIN_USER#658c1b73c39bb10008431b44",
+ _et: "AdminUsers.User",
+ _ct: "2023-12-27T12:41:24.417Z",
+ TYPE: "adminUsers.user",
+ GSI1_PK: "T#root#ADMIN_USERS"
+ }
+];
diff --git a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-acosearchrecord-pbpage.ts b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-acosearchrecord-pbpage.ts
new file mode 100644
index 00000000000..01ef5abf8d9
--- /dev/null
+++ b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-acosearchrecord-pbpage.ts
@@ -0,0 +1,148 @@
+export const headlessCmsAcoSearchRecordPbPage = [
+ {
+ _index: "root-headless-cms-en-us-acosearchrecord-pbpage",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#wby-aco-658c1bd3c39bb10008431b5b:L",
+ _score: 1.0,
+ _source: {
+ modelId: "acoSearchRecord-pbpage",
+ version: 1,
+ location: {
+ folderId: "root"
+ },
+ savedOn: "2023-12-27T12:43:00.006Z",
+ locale: "en-US",
+ status: "draft",
+ meta: {},
+ values: {
+ "text@type": "PbPage",
+ "text@title": "Welcome to Webiny",
+ "text@content":
+ "Welcome to Webiny Welcome to Webiny Webiny makes it easy to build applications and websites on top of the serverless infrastructure by providing you with a ready-made CMS and a development framework. Scalable Webiny apps can scale to handle the most demanding workloads. No custom tooling required Webiny eliminates the need to build custom tooling to create serverless app Cost effective Webiny apps run on serverless infrastructure which costs 80% less than VMs Resolves serverless challenges Webiny removes all the challenges of building serverless applications Get to know Webiny products Architect. Code. Deploy. Webiny Serverless Application Framework Everything you need to create and deploy applications on top of the serverless infrastructure. Use it to build: Full-stack applicationsMulti-tenant solutions APIsMicroservice Learn more An easier way to build serverless apps There are many solutions that help you run, deploy and monitor serverless functions, but when it comes to actually coding one, there are none. Webiny is a solution that helps you code your serverless app by providing you with all the components like ACL, routing, file storage and many more. Framework features Users, groups, roles & scopes Security is a crucial layer in any application. Webiny includes a full-featured security module that's connected to the built-in GraphQL API.Users, groups, roles & scopes Scaffolding Quickly generate boilerplate code using CLI plugins. From lambda functions to new GraphQL APIs. Customizable security Use the default AWS Cognito, or replace with 3rd party identity providers like Okta, Auth0, etc. Using plugins you can make Webiny work with any identity provider. Multiple environments No code change goes directly into a production environment. Webiny CLI makes it easy to manage and create multiple environments for your project. One size doesn't fit all It's a very different set of requirements a technical team has to a marketing team to a business development team. Webiny Serverless CMS comes with several different apps you can use independently, or together as part of a cohesive solution. Webiny Serverless CMS A suite of applications to help you manage your content. Use it to build: Marketing sites Multi-website solutions Content hubs Multi-language sites Intranet portals Headless content models Learn more CMS benefits Scalable No matter the demand, Webiny Serverless CMS can easily scale to meet even the most challenging workloads. Adaptable Being an open-source project, it's easy to modify and adapt things to your own needs. Low cost of ownership Self-hosted on top of serverless infrastructure. No infrastructure to mange, less people required to operate and maintain. Secure Secured by AWS Cognito. It's also easy to integrate services like OKTA, Auth0 and similar. Data ownership Webiny is self-hosted, it means your data stays within your data center. Permission control Powerful options to control the permissions your users will have. They perfectly align with your business requirements. Serverless makes infrastructure easy, Webiny makes serverless easy 1. Developer-friendly Webiny has been made with the developer in mind. It helps them develop serverless applications with ease. 2. Open source Webiny is created and maintained by an amazing group of people. Being open source means Webiny grows and evolves much faster. Contributor are welcome. 3. Community We have an active community on slack. Talk to the core-team, and get help. Webiny team is always there for any questions. View Webiny on GitHub",
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@data": {
+ "text@id": "658c1bd3c39bb10008431b5b#0001",
+ "text@pid": "658c1bd3c39bb10008431b5b",
+ "text@title": "Welcome to Webiny",
+ "object@createdBy": {
+ "text@id": "658c1b73c39bb10008431b44",
+ "text@displayName": "ad min",
+ "text@type": "admin"
+ },
+ "datetime@createdOn": "2023-12-27T12:42:59.947Z",
+ "datetime@savedOn": "2023-12-27T12:43:00.723Z",
+ "text@status": "published",
+ "number@version": 1,
+ "boolean@locked": true,
+ "text@path": "/welcome-to-webiny"
+ },
+ "text@tags": []
+ },
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ entryId: "wby-aco-658c1bd3c39bb10008431b5b",
+ tenant: "root",
+ createdOn: "2023-12-27T12:43:00.006Z",
+ locked: false,
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ webinyVersion: "5.38.2",
+ id: "wby-aco-658c1bd3c39bb10008431b5b#0001",
+ modifiedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@data": {
+ "object@createdBy": {}
+ }
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-acosearchrecord-pbpage",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#wby-aco-658c1bd3c39bb10008431b5c:L",
+ _score: 1.0,
+ _source: {
+ modelId: "acoSearchRecord-pbpage",
+ version: 1,
+ location: {
+ folderId: "root"
+ },
+ savedOn: "2023-12-27T12:43:00.024Z",
+ locale: "en-US",
+ status: "draft",
+ meta: {},
+ values: {
+ "text@type": "PbPage",
+ "text@title": "Not Found",
+ "text@content":
+ "Not Found Page not found! Sorry, but the page you were looking for could not be found. TAKE ME HOme",
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@data": {
+ "text@id": "658c1bd3c39bb10008431b5c#0001",
+ "text@pid": "658c1bd3c39bb10008431b5c",
+ "text@title": "Not Found",
+ "object@createdBy": {
+ "text@id": "658c1b73c39bb10008431b44",
+ "text@displayName": "ad min",
+ "text@type": "admin"
+ },
+ "datetime@createdOn": "2023-12-27T12:42:59.964Z",
+ "datetime@savedOn": "2023-12-27T12:43:00.663Z",
+ "text@status": "published",
+ "number@version": 1,
+ "boolean@locked": true,
+ "text@path": "/not-found"
+ },
+ "text@tags": []
+ },
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ entryId: "wby-aco-658c1bd3c39bb10008431b5c",
+ tenant: "root",
+ createdOn: "2023-12-27T12:43:00.024Z",
+ locked: false,
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ webinyVersion: "5.38.2",
+ id: "wby-aco-658c1bd3c39bb10008431b5c#0001",
+ modifiedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@data": {
+ "object@createdBy": {}
+ }
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ }
+];
diff --git a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-fmfile.ts b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-fmfile.ts
new file mode 100644
index 00000000000..6da9a8108bb
--- /dev/null
+++ b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-fmfile.ts
@@ -0,0 +1,1150 @@
+export const headlessCmsFmFile = [
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#6022814b0df4b000088735bc:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "6022814b0df4b000088735bc",
+ id: "6022814b0df4b000088735bc#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "webiny-logo.svg",
+ "text@key":
+ "demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 5053,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#602281486639200009fd35ec:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "602281486639200009fd35ec",
+ id: "602281486639200009fd35ec#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "cms-benefits-shape.svg",
+ "text@key":
+ "demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 392,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#60228148f98841000981c723:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "60228148f98841000981c723",
+ id: "60228148f98841000981c723#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "pink-shape.svg",
+ "text@key": "demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 390,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#602282e07a77e60008f70d63:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "602282e07a77e60008f70d63",
+ id: "602282e07a77e60008f70d63#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "feature-card-bg.svg",
+ "text@key":
+ "demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 888,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#60228145f98841000981c720:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "60228145f98841000981c720",
+ id: "60228145f98841000981c720#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "adaptable-icon.svg",
+ "text@key":
+ "demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 28918,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dab:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "602281486ed41f0008bc2dab",
+ id: "602281486ed41f0008bc2dab#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "permission-icon.svg",
+ "text@key":
+ "demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 67402,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#602281486639200009fd35eb:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "602281486639200009fd35eb",
+ id: "602281486639200009fd35eb#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "serverless-cms-logo.svg",
+ "text@key":
+ "demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 1758,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba28:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "6022814bef4a940008b3ba28",
+ id: "6022814bef4a940008b3ba28#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "environments.svg",
+ "text@key":
+ "demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 132767,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dad:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "602281486ed41f0008bc2dad",
+ id: "602281486ed41f0008bc2dad#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "webiny-serverless-cms.png ",
+ "text@key":
+ "demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png",
+ "text@type": "image/png",
+ "number@size": 108898,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#60228148fa244d0008c47c7a:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "60228148fa244d0008c47c7a",
+ id: "60228148fa244d0008c47c7a#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "community-icon.png",
+ "text@key":
+ "demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png",
+ "text@type": "image/png",
+ "number@size": 17382,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#60228145f98841000981c721:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "60228145f98841000981c721",
+ id: "60228145f98841000981c721#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "developer.svg",
+ "text@key": "demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 27804,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#60228145f98841000981c71f:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "60228145f98841000981c71f",
+ id: "60228145f98841000981c71f#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "octo-cat.svg",
+ "text@key": "demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 30007,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dac:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "602281486ed41f0008bc2dac",
+ id: "602281486ed41f0008bc2dac#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "data-icon.svg",
+ "text@key": "demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 73153,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#6022814891bd1300087bd24c:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "6022814891bd1300087bd24c",
+ id: "6022814891bd1300087bd24c#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "webiny-infrastructure-overview.svg",
+ "text@key":
+ "demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 90163,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#6022814b7a77e60008f70d62:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "6022814b7a77e60008f70d62",
+ id: "6022814b7a77e60008f70d62#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "hero-block-bg.svg",
+ "text@key":
+ "demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 1864,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba26:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "6022814bef4a940008b3ba26",
+ id: "6022814bef4a940008b3ba26#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "scaffolding.svg",
+ "text@key":
+ "demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 33888,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#6022814851197600081724ae:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "6022814851197600081724ae",
+ id: "6022814851197600081724ae#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "cost-icon.svg",
+ "text@key": "demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 60602,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#60228148fa244d0008c47c79:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "60228148fa244d0008c47c79",
+ id: "60228148fa244d0008c47c79#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "scalable-icon.svg",
+ "text@key":
+ "demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 7806,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba27:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "6022814bef4a940008b3ba27",
+ id: "6022814bef4a940008b3ba27#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "security.svg",
+ "text@key": "demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 17711,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#60228148f98841000981c724:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "60228148f98841000981c724",
+ id: "60228148f98841000981c724#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "idp.svg",
+ "text@key": "demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 27878,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-fmfile",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#6022814a0df4b000088735bb:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "6022814a0df4b000088735bb",
+ id: "6022814a0df4b000088735bb#0001",
+ modelId: "fmFile",
+ locale: "en-US",
+ createdOn: "2023-12-27T12:42:58.754Z",
+ savedOn: "2023-12-27T12:42:58.754Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@name": "webiny-serverless-application-framework.svg",
+ "text@key":
+ "demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg",
+ "text@type": "image/svg+xml",
+ "number@size": 3661,
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@tags": [],
+ "text@aliases": []
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ }
+];
diff --git a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-modela.ts b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-modela.ts
new file mode 100644
index 00000000000..01c1fe4eab5
--- /dev/null
+++ b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-modela.ts
@@ -0,0 +1,292 @@
+export const headlessCmsModelA = [
+ {
+ _index: "root-headless-cms-en-us-modela",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#658c24996607be00087f1167:P",
+ _score: 1.0,
+ _source: {
+ modelId: "modelA",
+ version: 1,
+ location: {
+ folderId: "root"
+ },
+ savedOn: "2023-12-27T13:20:25.701Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 2",
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 2"
+ },
+ createdBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ entryId: "658c24996607be00087f1167",
+ tenant: "root",
+ createdOn: "2023-12-27T13:20:25.235Z",
+ locked: true,
+ ownedBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ webinyVersion: "5.38.2",
+ id: "658c24996607be00087f1167#0001",
+ publishedOn: "2023-12-27T13:20:25.701Z",
+ rawValues: {},
+ published: true,
+ TYPE: "cms.entry.p",
+ __type: "cms.entry.p"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-modela",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#658c248b6607be00087f1166:P",
+ _score: 1.0,
+ _source: {
+ modelId: "modelA",
+ version: 1,
+ location: {
+ folderId: "root"
+ },
+ savedOn: "2023-12-27T13:20:12.775Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 1",
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 1"
+ },
+ createdBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ entryId: "658c248b6607be00087f1166",
+ tenant: "root",
+ createdOn: "2023-12-27T13:20:11.821Z",
+ locked: true,
+ ownedBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ webinyVersion: "5.38.2",
+ id: "658c248b6607be00087f1166#0001",
+ publishedOn: "2023-12-27T13:20:12.775Z",
+ rawValues: {},
+ published: true,
+ TYPE: "cms.entry.p",
+ __type: "cms.entry.p"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-modela",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#658c248b6607be00087f1166:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "658c248b6607be00087f1166",
+ id: "658c248b6607be00087f1166#0001",
+ modelId: "modelA",
+ locale: "en-US",
+ createdOn: "2023-12-27T13:20:11.821Z",
+ savedOn: "2023-12-27T13:20:12.775Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: true,
+ status: "published",
+ values: {
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 1",
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 1"
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {},
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ publishedOn: "2023-12-27T13:20:12.775Z"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-modela",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#658c24a16607be00087f1168:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "658c24a16607be00087f1168",
+ id: "658c24a16607be00087f1168#0001",
+ modelId: "modelA",
+ locale: "en-US",
+ createdOn: "2023-12-27T13:20:33.775Z",
+ savedOn: "2023-12-27T13:20:34.175Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: true,
+ status: "published",
+ values: {
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 3",
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 2"
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {},
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ publishedOn: "2023-12-27T13:20:34.175Z"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-modela",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#658c24aa6607be00087f1169:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "658c24aa6607be00087f1169",
+ id: "658c24aa6607be00087f1169#0001",
+ modelId: "modelA",
+ locale: "en-US",
+ createdOn: "2023-12-27T13:20:42.180Z",
+ savedOn: "2023-12-27T13:20:42.180Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: false,
+ status: "draft",
+ values: {
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 4",
+ "long-text@z2tdm05d": ""
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {},
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-modela",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#658c24a16607be00087f1168:P",
+ _score: 1.0,
+ _source: {
+ modelId: "modelA",
+ version: 1,
+ location: {
+ folderId: "root"
+ },
+ savedOn: "2023-12-27T13:20:34.175Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 3",
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 2"
+ },
+ createdBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ entryId: "658c24a16607be00087f1168",
+ tenant: "root",
+ createdOn: "2023-12-27T13:20:33.775Z",
+ locked: true,
+ ownedBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ webinyVersion: "5.38.2",
+ id: "658c24a16607be00087f1168#0001",
+ publishedOn: "2023-12-27T13:20:34.175Z",
+ rawValues: {},
+ published: true,
+ TYPE: "cms.entry.p",
+ __type: "cms.entry.p"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-modela",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#658c24996607be00087f1167:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "658c24996607be00087f1167",
+ id: "658c24996607be00087f1167#0001",
+ modelId: "modelA",
+ locale: "en-US",
+ createdOn: "2023-12-27T13:20:25.235Z",
+ savedOn: "2023-12-27T13:20:25.701Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: true,
+ status: "published",
+ values: {
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 2",
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 2"
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {},
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ publishedOn: "2023-12-27T13:20:25.701Z"
+ }
+ }
+];
diff --git a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-modelb.ts b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-modelb.ts
new file mode 100644
index 00000000000..2242004e3dc
--- /dev/null
+++ b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.es-index-root-headless-cms-en-us-modelb.ts
@@ -0,0 +1,133 @@
+export const headlessCmsModelB = [
+ {
+ _index: "root-headless-cms-en-us-modelb",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#658c2524adbc1700090e1ad1:L",
+ _score: 1.0,
+ _source: {
+ webinyVersion: "5.38.2",
+ tenant: "root",
+ entryId: "658c2524adbc1700090e1ad1",
+ id: "658c2524adbc1700090e1ad1#0001",
+ modelId: "modelB",
+ locale: "en-US",
+ createdOn: "2023-12-27T13:22:44.672Z",
+ savedOn: "2023-12-27T13:22:46.091Z",
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ modifiedBy: null,
+ version: 1,
+ locked: true,
+ status: "published",
+ values: {
+ "text@4dep2w2h": "DDB+ES - Model B Entry 1",
+ "long-text@7c5t8wwa": "DDB+ES - Model B Entry 1"
+ },
+ location: {
+ folderId: "root"
+ },
+ rawValues: {},
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ publishedOn: "2023-12-27T13:22:46.091Z"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-modelb",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#658c2524adbc1700090e1ad1:P",
+ _score: 1.0,
+ _source: {
+ modelId: "modelB",
+ version: 1,
+ location: {
+ folderId: "root"
+ },
+ savedOn: "2023-12-27T13:22:46.091Z",
+ locale: "en-US",
+ status: "published",
+ values: {
+ "text@4dep2w2h": "DDB+ES - Model B Entry 1",
+ "long-text@7c5t8wwa": "DDB+ES - Model B Entry 1"
+ },
+ createdBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ entryId: "658c2524adbc1700090e1ad1",
+ tenant: "root",
+ createdOn: "2023-12-27T13:22:44.672Z",
+ locked: true,
+ ownedBy: {
+ type: "admin",
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44"
+ },
+ webinyVersion: "5.38.2",
+ id: "658c2524adbc1700090e1ad1#0001",
+ publishedOn: "2023-12-27T13:22:46.091Z",
+ rawValues: {},
+ published: true,
+ TYPE: "cms.entry.p",
+ __type: "cms.entry.p"
+ }
+ },
+ {
+ _index: "root-headless-cms-en-us-modelb",
+ _type: "_doc",
+ _id: "T#root#L#en-US#CMS#CME#658c2531adbc1700090e1ad2:L",
+ _score: 1.0,
+ _source: {
+ modelId: "modelB",
+ version: 1,
+ location: {
+ folderId: "root"
+ },
+ savedOn: "2023-12-27T13:23:15.536Z",
+ locale: "en-US",
+ status: "draft",
+ values: {
+ "text@4dep2w2h": "DDB+ES - Model B Entry 2 UPDATED",
+ "long-text@7c5t8wwa": "DDB+ES - Model B Entry 2 UPDATED"
+ },
+ createdBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ entryId: "658c2531adbc1700090e1ad2",
+ tenant: "root",
+ createdOn: "2023-12-27T13:22:57.094Z",
+ locked: false,
+ ownedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ webinyVersion: "5.38.2",
+ id: "658c2531adbc1700090e1ad2#0001",
+ modifiedBy: {
+ id: "658c1b73c39bb10008431b44",
+ displayName: "ad min",
+ type: "admin"
+ },
+ meta: {},
+ rawValues: {
+ "file@5atpz8nu": null
+ },
+ latest: true,
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l"
+ }
+ }
+];
diff --git a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.test.ts b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.test.ts
new file mode 100644
index 00000000000..d23626a1fd2
--- /dev/null
+++ b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.test.ts
@@ -0,0 +1,285 @@
+import { Sort as ElasticsearchSort } from "elastic-ts";
+import {
+ assertNotError,
+ createDdbEsMigrationHandler,
+ getDynamoToEsTable,
+ importElasticsearchTestData,
+ getPrimaryDynamoDbTable,
+ groupMigrations,
+ insertDynamoDbTestData as insertTestData,
+ logTestNameBeforeEachTest,
+ scanTable
+} from "~tests/utils";
+import { CmsEntriesInitNewMetaFields_5_39_6_001 } from "~/migrations/5.39.6/001/ddb-es";
+
+import { transferDynamoDbToElasticsearch } from "~tests/utils/insertElasticsearchTestData";
+import { esGetIndexSettings } from "~/utils";
+import { createElasticsearchClient } from "@webiny/project-utils/testing/elasticsearch/createClient";
+import { getRecordIndexName } from "~tests/migrations/5.37.0/002/ddb-es/helpers";
+import { listElasticsearchItems } from "~tests/utils/listElasticsearchItems";
+import { getDecompressedData } from "~tests/migrations/5.37.0/003/ddb-es/getDecompressedData";
+
+// Test data.
+import { ddbPrimaryTableData } from "./001.ddbPrimaryTableData";
+import { ddbEsTableData } from "./001.ddbEsTableData";
+import { headlessCmsAcoSearchRecordPbPage } from "./001.es-index-root-headless-cms-en-us-acosearchrecord-pbpage";
+import { headlessCmsFmFile } from "./001.es-index-root-headless-cms-en-us-fmfile";
+import { headlessCmsModelA } from "./001.es-index-root-headless-cms-en-us-modela";
+import { headlessCmsModelB } from "./001.es-index-root-headless-cms-en-us-modelb";
+
+// Migrated test data.
+import { ddbPrimaryTableDataMigrated } from "./migrated/001.ddbPrimaryTableData";
+import { ddbEsTableDataMigrated } from "./migrated/001.ddbEsTableData";
+import { headlessCmsAcoSearchRecordPbPageMigrated } from "./migrated/001.es-index-root-headless-cms-en-us-acosearchrecord-pbpage";
+import { headlessCmsFmFileMigrated } from "./migrated/001.es-index-root-headless-cms-en-us-fmfile";
+import { headlessCmsModelAMigrated } from "./migrated/001.es-index-root-headless-cms-en-us-modela";
+import { headlessCmsModelBMigrated } from "./migrated/001.es-index-root-headless-cms-en-us-modelb";
+
+jest.retryTimes(0);
+jest.setTimeout(900000);
+
+// Ensures that either both modifiedOn and modifiedBy fields are set or none is set.
+const expectModifiedFieldsAreSynced = (entry: Record) => {
+ const hasRevisionModifiedOn = !!entry.revisionModifiedOn;
+ const hasRevisionModifiedBy = !!entry.revisionModifiedBy;
+ expect(hasRevisionModifiedBy).toBe(hasRevisionModifiedOn);
+
+ const hasEntryModifiedOn = !!entry.entryModifiedOn;
+ const hasEntryModifiedBy = !!entry.entryModifiedBy;
+ expect(hasEntryModifiedOn).toBe(hasEntryModifiedBy);
+};
+
+describe("5.39.2-001", () => {
+ const primaryTable = getPrimaryDynamoDbTable();
+ const dynamoToEsTable = getDynamoToEsTable();
+ const elasticsearchClient = createElasticsearchClient();
+
+ const insertAllTestData = async () => {
+ await insertTestData(primaryTable, ddbPrimaryTableData);
+ await insertTestData(dynamoToEsTable, ddbEsTableData);
+
+ const esIndexData = {
+ "acosearchrecord-pbpage": headlessCmsAcoSearchRecordPbPage,
+ fmfile: headlessCmsFmFile,
+ modela: headlessCmsModelA,
+ modelb: headlessCmsModelB
+ };
+
+ for (const indexName in esIndexData) {
+ await importElasticsearchTestData(
+ elasticsearchClient,
+ esIndexData[indexName as keyof typeof esIndexData]
+ );
+ }
+
+ await elasticsearchClient.indices.refreshAll();
+ };
+
+ beforeAll(async () => {
+ process.env.ELASTIC_SEARCH_INDEX_PREFIX =
+ new Date().toISOString().replace(/\.|\:/g, "-").toLowerCase() + "-";
+
+ await elasticsearchClient.indices.deleteAll();
+ });
+ afterEach(async () => {
+ await elasticsearchClient.indices.deleteAll();
+ });
+
+ logTestNameBeforeEachTest();
+
+ it("should not run if no entries without new meta fields were found", async () => {
+ const handler = createDdbEsMigrationHandler({
+ primaryTable,
+ dynamoToEsTable,
+ elasticsearchClient,
+ migrations: [CmsEntriesInitNewMetaFields_5_39_6_001]
+ });
+
+ const { data, error } = await handler();
+
+ assertNotError(error);
+ const grouped = groupMigrations(data.migrations);
+
+ expect(grouped.executed.length).toBe(0);
+ expect(grouped.skipped.length).toBe(1);
+ expect(grouped.notApplicable.length).toBe(0);
+ });
+
+ it("should execute migration", async () => {
+ await insertAllTestData();
+
+ const handler = createDdbEsMigrationHandler({
+ primaryTable,
+ dynamoToEsTable,
+ elasticsearchClient,
+ migrations: [CmsEntriesInitNewMetaFields_5_39_6_001]
+ });
+
+ const { data, error } = await handler();
+
+ assertNotError(error);
+ const grouped = groupMigrations(data.migrations);
+
+ expect(grouped.executed.length).toBe(1);
+ expect(grouped.skipped.length).toBe(0);
+ expect(grouped.notApplicable.length).toBe(0);
+
+ const primaryTableData = await scanTable(primaryTable, {
+ limit: 1_000_000
+ });
+
+ // Primary DynamoDB table test data has migration-related items
+ // filtered out. We need to do the same here.
+ expect(primaryTableData.filter(item => !item.TYPE?.startsWith("migration"))).toEqual(
+ ddbPrimaryTableDataMigrated
+ );
+
+ const ddbEsTableRecordsCompressed = await scanTable(dynamoToEsTable, {
+ limit: 1_000_000
+ });
+
+ const ddbEsTableRecordsDecompressed = await Promise.all(
+ ddbEsTableRecordsCompressed.map(async item => {
+ if (!item.PK.includes("#CMS#CME#")) {
+ return item;
+ }
+
+ const decompressed = await getDecompressedData(item.data);
+ return {
+ ...item,
+ data: decompressed
+ };
+ })
+ );
+
+ expect(ddbEsTableRecordsDecompressed).toEqual(ddbEsTableDataMigrated);
+
+ // In the following lines, we're going to check if the data in Elasticsearch is correct.
+ await transferDynamoDbToElasticsearch(
+ elasticsearchClient,
+ dynamoToEsTable,
+ getRecordIndexName
+ );
+
+ const indexes = new Set();
+ for (const record of ddbEsTableData) {
+ const entry = await getDecompressedData(record.data);
+ if (entry && entry.modelId) {
+ indexes.add(getRecordIndexName(entry));
+ }
+ }
+
+ expect(indexes.size).toBe(4);
+
+ const [
+ headlessCmsAcoSearchRecordPbPageIndexName,
+ headlessCmsFmFileIndexName,
+ headlessCmsModelAIndexName,
+ headlessCmsModelBIndexName
+ ] = indexes;
+
+ // Ensure correct data ended up in Elasticsearch.
+ const sort = [
+ {
+ "id.keyword": { order: "desc", unmapped_type: "keyword" },
+ "TYPE.keyword": { order: "asc", unmapped_type: "keyword" }
+ }
+ ] as ElasticsearchSort;
+
+ // 1. Check ACO Search Record PB Page index.
+ const migratedHeadlessCmsAcoSearchRecordPbPageRecords = await listElasticsearchItems({
+ client: elasticsearchClient,
+ index: headlessCmsAcoSearchRecordPbPageIndexName,
+ body: { sort }
+ });
+
+ expect(migratedHeadlessCmsAcoSearchRecordPbPageRecords).toBeArrayOfSize(2);
+ expect(migratedHeadlessCmsAcoSearchRecordPbPageRecords).toEqual(
+ headlessCmsAcoSearchRecordPbPageMigrated
+ );
+
+ headlessCmsAcoSearchRecordPbPageMigrated.forEach(expectModifiedFieldsAreSynced);
+
+ // 2. Check FM File index.
+ const migratedHeadlessCmsFmFileRecords = await listElasticsearchItems({
+ client: elasticsearchClient,
+ index: headlessCmsFmFileIndexName,
+ body: { sort }
+ });
+
+ expect(migratedHeadlessCmsFmFileRecords).toBeArrayOfSize(21);
+ expect(migratedHeadlessCmsFmFileRecords).toEqual(headlessCmsFmFileMigrated);
+
+ headlessCmsFmFileMigrated.forEach(expectModifiedFieldsAreSynced);
+
+ // 3. Check Model A index.
+ const migratedHeadlessCmsModelARecords = await listElasticsearchItems({
+ client: elasticsearchClient,
+ index: headlessCmsModelAIndexName,
+ body: { sort }
+ });
+
+ expect(migratedHeadlessCmsModelARecords).toBeArrayOfSize(7);
+ expect(migratedHeadlessCmsModelARecords).toEqual(headlessCmsModelAMigrated);
+
+ headlessCmsModelAMigrated.forEach(expectModifiedFieldsAreSynced);
+
+ // 4. Check Model B index.
+ const migratedHeadlessCmsModelBRecords = await listElasticsearchItems({
+ client: elasticsearchClient,
+ index: headlessCmsModelBIndexName,
+ body: { sort }
+ });
+
+ expect(migratedHeadlessCmsModelBRecords).toBeArrayOfSize(3);
+ expect(migratedHeadlessCmsModelBRecords).toEqual(headlessCmsModelBMigrated);
+
+ headlessCmsModelBMigrated.forEach(expectModifiedFieldsAreSynced);
+
+ /**
+ * Test that all indexes have the expected settings after the migration.
+ */
+ for (const index of indexes) {
+ const settings = await esGetIndexSettings({
+ elasticsearchClient,
+ index,
+ fields: ["number_of_replicas", "refresh_interval"]
+ });
+ expect(Number(settings?.number_of_replicas)).toBeGreaterThanOrEqual(1);
+ expect(settings?.refresh_interval).not.toBe(-1);
+ const interval = parseInt((settings?.refresh_interval as string).replace("s", ""));
+ expect(interval).toBeGreaterThanOrEqual(1);
+ }
+ });
+
+ it("should not run migration if data is already in the expected shape", async () => {
+ await insertAllTestData();
+
+ const handler = createDdbEsMigrationHandler({
+ primaryTable,
+ dynamoToEsTable,
+ elasticsearchClient,
+ migrations: [CmsEntriesInitNewMetaFields_5_39_6_001]
+ });
+
+ // Should run the migration
+ {
+ process.stdout.write("[First run]\n");
+ const { data, error } = await handler();
+ assertNotError(error);
+ const grouped = groupMigrations(data.migrations);
+ expect(grouped.executed.length).toBe(1);
+ }
+
+ // Should skip the migration
+ {
+ process.stdout.write("[Second run]\n");
+ const { data, error } = await handler();
+ assertNotError(error);
+ const grouped = groupMigrations(data.migrations);
+ expect(grouped.executed.length).toBe(0);
+ expect(grouped.skipped.length).toBe(1);
+ expect(grouped.notApplicable.length).toBe(0);
+ }
+ });
+});
diff --git a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.ddbEsTableData.ts b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.ddbEsTableData.ts
new file mode 100644
index 00000000000..ef3ea1c02ff
--- /dev/null
+++ b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.ddbEsTableData.ts
@@ -0,0 +1,3016 @@
+// Note that the data is decompressed.
+export const ddbEsTableDataMigrated = [
+ {
+ PK: "T#root#L#en-US#CMS#CME#wby-aco-658c1bd3c39bb10008431b5c",
+ SK: "L",
+ created: "2023-12-27T12:43:01.141Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:43:00.024Z",
+ entryId: "wby-aco-658c1bd3c39bb10008431b5c",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "wby-aco-658c1bd3c39bb10008431b5c#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ meta: {},
+ modelId: "acoSearchRecord-pbpage",
+ modifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ modifiedOn: "2023-12-27T12:43:00.024Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@data": {
+ "object@createdBy": {}
+ },
+ "object@location": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:43:00.024Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionModifiedOn: "2023-12-27T12:43:00.024Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:43:00.024Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:43:00.024Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "object@data": {
+ "boolean@locked": true,
+ "datetime@createdOn": "2023-12-27T12:42:59.964Z",
+ "datetime@savedOn": "2023-12-27T12:43:00.663Z",
+ "number@version": 1,
+ "object@createdBy": {
+ "text@displayName": "ad min",
+ "text@id": "658c1b73c39bb10008431b44",
+ "text@type": "admin"
+ },
+ "text@id": "658c1bd3c39bb10008431b5c#0001",
+ "text@path": "/not-found",
+ "text@pid": "658c1bd3c39bb10008431b5c",
+ "text@status": "published",
+ "text@title": "Not Found"
+ },
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@content":
+ "Not Found Page not found! Sorry, but the page you were looking for could not be found. TAKE ME HOme",
+ "text@tags": [],
+ "text@title": "Not Found",
+ "text@type": "PbPage"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-acosearchrecord-pbpage",
+ modified: "2023-12-27T12:43:01.141Z"
+ },
+ {
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5c",
+ SK: "L",
+ _ct: "2023-12-27T12:43:00.682Z",
+ _et: "PbPagesEs",
+ _md: "2023-12-27T12:43:00.682Z",
+ data: {
+ __type: "page",
+ category: "static",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:59.964Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5c#0001",
+ images: {},
+ latest: true,
+ locale: "en-US",
+ locked: true,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ path: "/not-found",
+ pid: "658c1bd3c39bb10008431b5c",
+ publishedOn: "2023-12-27T12:43:00.663Z",
+ savedOn: "2023-12-27T12:43:00.663Z",
+ snippet: null,
+ status: "published",
+ tags: [],
+ tenant: "root",
+ title: "Not Found",
+ titleLC: "not found",
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ index: "root-en-us-page-builder"
+ },
+ {
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5c",
+ SK: "P",
+ _ct: "2023-12-27T12:43:00.682Z",
+ _et: "PbPagesEs",
+ _md: "2023-12-27T12:43:00.682Z",
+ data: {
+ __type: "page",
+ category: "static",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:59.964Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5c#0001",
+ images: {},
+ locale: "en-US",
+ locked: true,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ path: "/not-found",
+ pid: "658c1bd3c39bb10008431b5c",
+ published: true,
+ publishedOn: "2023-12-27T12:43:00.663Z",
+ savedOn: "2023-12-27T12:43:00.663Z",
+ snippet: null,
+ status: "published",
+ tags: [],
+ tenant: "root",
+ title: "Not Found",
+ titleLC: "not found",
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ index: "root-en-us-page-builder"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba27",
+ SK: "L",
+ created: "2023-12-27T12:42:59.522Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814bef4a940008b3ba27",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814bef4a940008b3ba27#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 17711,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg",
+ "text@name": "security.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.522Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c721",
+ SK: "L",
+ created: "2023-12-27T12:42:59.706Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "60228145f98841000981c721",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "60228145f98841000981c721#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 27804,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg",
+ "text@name": "developer.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.706Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814b7a77e60008f70d62",
+ SK: "L",
+ created: "2023-12-27T12:42:59.361Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814b7a77e60008f70d62",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814b7a77e60008f70d62#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 1864,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg",
+ "text@name": "hero-block-bg.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.361Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602282e07a77e60008f70d63",
+ SK: "L",
+ created: "2023-12-27T12:42:59.486Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "602282e07a77e60008f70d63",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "602282e07a77e60008f70d63#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 888,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg",
+ "text@name": "feature-card-bg.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.486Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c24996607be00087f1167",
+ SK: "L",
+ created: "2023-12-27T13:20:25.736Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:25.235Z",
+ entryId: "658c24996607be00087f1167",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:25.701Z",
+ id: "658c24996607be00087f1167#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:25.701Z",
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:20:25.701Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:25.235Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:25.701Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:25.701Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:25.701Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:25.701Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 2",
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 2"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-modela",
+ modified: "2023-12-27T13:20:25.736Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c24996607be00087f1167",
+ SK: "P",
+ created: "2023-12-27T13:20:25.737Z",
+ data: {
+ TYPE: "cms.entry.p",
+ __type: "cms.entry.p",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:25.235Z",
+ entryId: "658c24996607be00087f1167",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:25.701Z",
+ id: "658c24996607be00087f1167#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:25.701Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ published: true,
+ publishedOn: "2023-12-27T13:20:25.701Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:25.235Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:25.701Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:25.701Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:25.701Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:25.701Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 2",
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 2"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-modela",
+ modified: "2023-12-27T13:20:25.737Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c720",
+ SK: "L",
+ created: "2023-12-27T12:42:59.543Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "60228145f98841000981c720",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "60228145f98841000981c720#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 28918,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg",
+ "text@name": "adaptable-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.543Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dab",
+ SK: "L",
+ created: "2023-12-27T12:42:59.702Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "602281486ed41f0008bc2dab",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "602281486ed41f0008bc2dab#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 67402,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg",
+ "text@name": "permission-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.702Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#wby-aco-658c1bd3c39bb10008431b5b",
+ SK: "L",
+ created: "2023-12-27T12:43:01.123Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:43:00.006Z",
+ entryId: "wby-aco-658c1bd3c39bb10008431b5b",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "wby-aco-658c1bd3c39bb10008431b5b#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ meta: {},
+ modelId: "acoSearchRecord-pbpage",
+ modifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ modifiedOn: "2023-12-27T12:43:00.006Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@data": {
+ "object@createdBy": {}
+ },
+ "object@location": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:43:00.006Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionModifiedOn: "2023-12-27T12:43:00.006Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:43:00.006Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:43:00.006Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "object@data": {
+ "boolean@locked": true,
+ "datetime@createdOn": "2023-12-27T12:42:59.947Z",
+ "datetime@savedOn": "2023-12-27T12:43:00.723Z",
+ "number@version": 1,
+ "object@createdBy": {
+ "text@displayName": "ad min",
+ "text@id": "658c1b73c39bb10008431b44",
+ "text@type": "admin"
+ },
+ "text@id": "658c1bd3c39bb10008431b5b#0001",
+ "text@path": "/welcome-to-webiny",
+ "text@pid": "658c1bd3c39bb10008431b5b",
+ "text@status": "published",
+ "text@title": "Welcome to Webiny"
+ },
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@content":
+ "Welcome to Webiny Welcome to Webiny Webiny makes it easy to build applications and websites on top of the serverless infrastructure by providing you with a ready-made CMS and a development framework. Scalable Webiny apps can scale to handle the most demanding workloads. No custom tooling required Webiny eliminates the need to build custom tooling to create serverless app Cost effective Webiny apps run on serverless infrastructure which costs 80% less than VMs Resolves serverless challenges Webiny removes all the challenges of building serverless applications Get to know Webiny products Architect. Code. Deploy. Webiny Serverless Application Framework Everything you need to create and deploy applications on top of the serverless infrastructure. Use it to build: Full-stack applicationsMulti-tenant solutions APIsMicroservice Learn more An easier way to build serverless apps There are many solutions that help you run, deploy and monitor serverless functions, but when it comes to actually coding one, there are none. Webiny is a solution that helps you code your serverless app by providing you with all the components like ACL, routing, file storage and many more. Framework features Users, groups, roles & scopes Security is a crucial layer in any application. Webiny includes a full-featured security module that's connected to the built-in GraphQL API.Users, groups, roles & scopes Scaffolding Quickly generate boilerplate code using CLI plugins. From lambda functions to new GraphQL APIs. Customizable security Use the default AWS Cognito, or replace with 3rd party identity providers like Okta, Auth0, etc. Using plugins you can make Webiny work with any identity provider. Multiple environments No code change goes directly into a production environment. Webiny CLI makes it easy to manage and create multiple environments for your project. One size doesn't fit all It's a very different set of requirements a technical team has to a marketing team to a business development team. Webiny Serverless CMS comes with several different apps you can use independently, or together as part of a cohesive solution. Webiny Serverless CMS A suite of applications to help you manage your content. Use it to build: Marketing sites Multi-website solutions Content hubs Multi-language sites Intranet portals Headless content models Learn more CMS benefits Scalable No matter the demand, Webiny Serverless CMS can easily scale to meet even the most challenging workloads. Adaptable Being an open-source project, it's easy to modify and adapt things to your own needs. Low cost of ownership Self-hosted on top of serverless infrastructure. No infrastructure to mange, less people required to operate and maintain. Secure Secured by AWS Cognito. It's also easy to integrate services like OKTA, Auth0 and similar. Data ownership Webiny is self-hosted, it means your data stays within your data center. Permission control Powerful options to control the permissions your users will have. They perfectly align with your business requirements. Serverless makes infrastructure easy, Webiny makes serverless easy 1. Developer-friendly Webiny has been made with the developer in mind. It helps them develop serverless applications with ease. 2. Open source Webiny is created and maintained by an amazing group of people. Being open source means Webiny grows and evolves much faster. Contributor are welcome. 3. Community We have an active community on slack. Talk to the core-team, and get help. Webiny team is always there for any questions. View Webiny on GitHub",
+ "text@tags": [],
+ "text@title": "Welcome to Webiny",
+ "text@type": "PbPage"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-acosearchrecord-pbpage",
+ modified: "2023-12-27T12:43:01.123Z"
+ },
+ {
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5b",
+ SK: "L",
+ _ct: "2023-12-27T12:43:00.864Z",
+ _et: "PbPagesEs",
+ _md: "2023-12-27T12:43:00.864Z",
+ data: {
+ __type: "page",
+ category: "static",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:59.947Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5b#0001",
+ images: {},
+ latest: true,
+ locale: "en-US",
+ locked: true,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ path: "/welcome-to-webiny",
+ pid: "658c1bd3c39bb10008431b5b",
+ publishedOn: "2023-12-27T12:43:00.723Z",
+ savedOn: "2023-12-27T12:43:00.723Z",
+ snippet: null,
+ status: "published",
+ tags: [],
+ tenant: "root",
+ title: "Welcome to Webiny",
+ titleLC: "welcome to webiny",
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ index: "root-en-us-page-builder"
+ },
+ {
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5b",
+ SK: "P",
+ _ct: "2023-12-27T12:43:00.864Z",
+ _et: "PbPagesEs",
+ _md: "2023-12-27T12:43:00.864Z",
+ data: {
+ __type: "page",
+ category: "static",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:59.947Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5b#0001",
+ images: {},
+ locale: "en-US",
+ locked: true,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ path: "/welcome-to-webiny",
+ pid: "658c1bd3c39bb10008431b5b",
+ published: true,
+ publishedOn: "2023-12-27T12:43:00.723Z",
+ savedOn: "2023-12-27T12:43:00.723Z",
+ snippet: null,
+ status: "published",
+ tags: [],
+ tenant: "root",
+ title: "Welcome to Webiny",
+ titleLC: "welcome to webiny",
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ index: "root-en-us-page-builder"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba26",
+ SK: "L",
+ created: "2023-12-27T12:42:59.525Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814bef4a940008b3ba26",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814bef4a940008b3ba26#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 33888,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg",
+ "text@name": "scaffolding.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.525Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814851197600081724ae",
+ SK: "L",
+ created: "2023-12-27T12:42:59.561Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814851197600081724ae",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814851197600081724ae#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 60602,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg",
+ "text@name": "cost-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.561Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814a0df4b000088735bb",
+ SK: "L",
+ created: "2023-12-27T12:42:59.487Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814a0df4b000088735bb",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814a0df4b000088735bb#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 3661,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg",
+ "text@name": "webiny-serverless-application-framework.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.487Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c248b6607be00087f1166",
+ SK: "L",
+ created: "2023-12-27T13:20:12.855Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:11.821Z",
+ entryId: "658c248b6607be00087f1166",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:12.775Z",
+ id: "658c248b6607be00087f1166#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:12.775Z",
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:20:12.775Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:11.821Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:12.775Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:12.775Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:12.775Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:12.775Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 1",
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 1"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-modela",
+ modified: "2023-12-27T13:20:12.855Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c248b6607be00087f1166",
+ SK: "P",
+ created: "2023-12-27T13:20:12.874Z",
+ data: {
+ TYPE: "cms.entry.p",
+ __type: "cms.entry.p",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:11.821Z",
+ entryId: "658c248b6607be00087f1166",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:12.775Z",
+ id: "658c248b6607be00087f1166#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:12.775Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ published: true,
+ publishedOn: "2023-12-27T13:20:12.775Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:11.821Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:12.775Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:12.775Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:12.775Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:12.775Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 1",
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 1"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-modela",
+ modified: "2023-12-27T13:20:12.874Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228148f98841000981c723",
+ SK: "L",
+ created: "2023-12-27T12:42:59.488Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "60228148f98841000981c723",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "60228148f98841000981c723#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 390,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg",
+ "text@name": "pink-shape.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.488Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486639200009fd35eb",
+ SK: "L",
+ created: "2023-12-27T12:42:59.527Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "602281486639200009fd35eb",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "602281486639200009fd35eb#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 1758,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg",
+ "text@name": "serverless-cms-logo.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.527Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814891bd1300087bd24c",
+ SK: "L",
+ created: "2023-12-27T12:42:59.523Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814891bd1300087bd24c",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814891bd1300087bd24c#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 90163,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg",
+ "text@name": "webiny-infrastructure-overview.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.523Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c71f",
+ SK: "L",
+ created: "2023-12-27T12:42:59.563Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "60228145f98841000981c71f",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "60228145f98841000981c71f#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 30007,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg",
+ "text@name": "octo-cat.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.563Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486639200009fd35ec",
+ SK: "L",
+ created: "2023-12-27T12:42:59.541Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "602281486639200009fd35ec",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "602281486639200009fd35ec#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 392,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg",
+ "text@name": "cms-benefits-shape.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.541Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c2524adbc1700090e1ad1",
+ SK: "L",
+ created: "2023-12-27T13:22:46.132Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:22:44.672Z",
+ entryId: "658c2524adbc1700090e1ad1",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:22:46.091Z",
+ id: "658c2524adbc1700090e1ad1#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:22:46.091Z",
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelB",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:22:46.091Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:22:44.672Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:22:46.091Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:22:46.091Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:22:46.091Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:22:46.091Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@7c5t8wwa": "DDB+ES - Model B Entry 1",
+ "text@4dep2w2h": "DDB+ES - Model B Entry 1"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-modelb",
+ modified: "2023-12-27T13:22:46.132Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c2524adbc1700090e1ad1",
+ SK: "P",
+ created: "2023-12-27T13:22:46.134Z",
+ data: {
+ TYPE: "cms.entry.p",
+ __type: "cms.entry.p",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:22:44.672Z",
+ entryId: "658c2524adbc1700090e1ad1",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:22:46.091Z",
+ id: "658c2524adbc1700090e1ad1#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:22:46.091Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelB",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ published: true,
+ publishedOn: "2023-12-27T13:22:46.091Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:22:44.672Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:22:46.091Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:22:46.091Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:22:46.091Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:22:46.091Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@7c5t8wwa": "DDB+ES - Model B Entry 1",
+ "text@4dep2w2h": "DDB+ES - Model B Entry 1"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-modelb",
+ modified: "2023-12-27T13:22:46.134Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228148fa244d0008c47c79",
+ SK: "L",
+ created: "2023-12-27T12:42:59.528Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "60228148fa244d0008c47c79",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "60228148fa244d0008c47c79#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 7806,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg",
+ "text@name": "scalable-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.528Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228148f98841000981c724",
+ SK: "L",
+ created: "2023-12-27T12:42:59.684Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "60228148f98841000981c724",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "60228148f98841000981c724#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 27878,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg",
+ "text@name": "idp.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.684Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c24a16607be00087f1168",
+ SK: "L",
+ created: "2023-12-27T13:20:34.215Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:33.775Z",
+ entryId: "658c24a16607be00087f1168",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:34.175Z",
+ id: "658c24a16607be00087f1168#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:34.175Z",
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:20:34.175Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:33.775Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:34.175Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:34.175Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:34.175Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:34.175Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 2",
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 3"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-modela",
+ modified: "2023-12-27T13:20:34.215Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c24a16607be00087f1168",
+ SK: "P",
+ created: "2023-12-27T13:20:34.216Z",
+ data: {
+ TYPE: "cms.entry.p",
+ __type: "cms.entry.p",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:33.775Z",
+ entryId: "658c24a16607be00087f1168",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:34.175Z",
+ id: "658c24a16607be00087f1168#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:34.175Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ published: true,
+ publishedOn: "2023-12-27T13:20:34.175Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:33.775Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:34.175Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:34.175Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:34.175Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:34.175Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 2",
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 3"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-modela",
+ modified: "2023-12-27T13:20:34.216Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228148fa244d0008c47c7a",
+ SK: "L",
+ created: "2023-12-27T12:42:59.705Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "60228148fa244d0008c47c7a",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "60228148fa244d0008c47c7a#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 17382,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png",
+ "text@name": "community-icon.png",
+ "text@tags": [],
+ "text@type": "image/png"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.705Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814b0df4b000088735bc",
+ SK: "L",
+ created: "2023-12-27T12:42:59.482Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814b0df4b000088735bc",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814b0df4b000088735bc#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 5053,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg",
+ "text@name": "webiny-logo.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.482Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c24aa6607be00087f1169",
+ SK: "L",
+ created: "2023-12-27T13:20:42.214Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:42.180Z",
+ entryId: "658c24aa6607be00087f1169",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "658c24aa6607be00087f1169#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "modelA",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:42.180Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:42.180Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:42.180Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": "",
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 4"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-modela",
+ modified: "2023-12-27T13:20:42.214Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c2531adbc1700090e1ad2",
+ SK: "L",
+ created: "2023-12-27T13:23:15.572Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:22:57.094Z",
+ entryId: "658c2531adbc1700090e1ad2",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "658c2531adbc1700090e1ad2#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ meta: {},
+ modelId: "modelB",
+ modifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ modifiedOn: "2023-12-27T13:23:15.536Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "file@5atpz8nu": null
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:22:57.094Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionModifiedOn: "2023-12-27T13:23:15.536Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:23:15.536Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:23:15.536Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "long-text@7c5t8wwa": "DDB+ES - Model B Entry 2 UPDATED",
+ "text@4dep2w2h": "DDB+ES - Model B Entry 2 UPDATED"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-modelb",
+ modified: "2023-12-27T13:23:15.572Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dad",
+ SK: "L",
+ created: "2023-12-27T12:42:59.544Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "602281486ed41f0008bc2dad",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "602281486ed41f0008bc2dad#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 108898,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png",
+ "text@name": "webiny-serverless-cms.png ",
+ "text@tags": [],
+ "text@type": "image/png"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.544Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba28",
+ SK: "L",
+ created: "2023-12-27T12:42:59.524Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814bef4a940008b3ba28",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814bef4a940008b3ba28#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 132767,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg",
+ "text@name": "environments.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.524Z"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dac",
+ SK: "L",
+ created: "2023-12-27T12:42:59.703Z",
+ data: {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "602281486ed41f0008bc2dac",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "602281486ed41f0008bc2dac#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 73153,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg",
+ "text@name": "data-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ entity: "CmsEntriesElasticsearch",
+ index: "root-headless-cms-en-us-fmfile",
+ modified: "2023-12-27T12:42:59.703Z"
+ }
+];
diff --git a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.ddbPrimaryTableData.ts b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.ddbPrimaryTableData.ts
new file mode 100644
index 00000000000..c3f1971842e
--- /dev/null
+++ b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.ddbPrimaryTableData.ts
@@ -0,0 +1,5458 @@
+// We commented migrations-related records because of constant changes in these.
+export const ddbPrimaryTableDataMigrated = [
+ {
+ GSI1_PK: "T#root#GROUPS",
+ GSI1_SK: "full-access",
+ PK: "T#root#GROUP#658c1b60c39bb10008431b42",
+ SK: "A",
+ TYPE: "security.group",
+ _ct: "2023-12-27T12:41:05.020Z",
+ _et: "SecurityGroup",
+ _md: "2023-12-27T12:41:05.020Z",
+ createdOn: "2023-12-27T12:41:04.963Z",
+ description: "Grants full access to all apps.",
+ id: "658c1b60c39bb10008431b42",
+ name: "Full Access",
+ permissions: [
+ {
+ name: "*"
+ }
+ ],
+ slug: "full-access",
+ system: true,
+ tenant: "root",
+ webinyVersion: "5.38.2"
+ },
+ {
+ GSI1_PK: "T#root#PS#TAG",
+ GSI1_SK: "pb-page#658c1bd3c39bb10008431b5b#0001#/welcome-to-webiny",
+ PK: "T#root#PS#TAG#pb-page#658c1bd3c39bb10008431b5b#0001#/welcome-to-webiny",
+ SK: "658c1bd3c39bb10008431b5b#0001#/welcome-to-webiny",
+ TYPE: "ps.tagPathLink",
+ _ct: "2023-12-27T12:43:14.870Z",
+ _et: "PrerenderingServiceTagPathLink",
+ _md: "2023-12-27T12:43:14.870Z",
+ data: {
+ key: "pb-page",
+ path: "/welcome-to-webiny",
+ tenant: "root",
+ value: "658c1bd3c39bb10008431b5b#0001"
+ }
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#wby-aco-658c1bd3c39bb10008431b5c",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:43:01.122Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:43:00.024Z",
+ entity: "CmsEntries",
+ entryId: "wby-aco-658c1bd3c39bb10008431b5c",
+ id: "wby-aco-658c1bd3c39bb10008431b5c#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ meta: {},
+ modelId: "acoSearchRecord-pbpage",
+ modified: "2023-12-27T12:43:01.122Z",
+ modifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ modifiedOn: "2023-12-27T12:43:00.024Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:43:00.024Z",
+ revisionModifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionModifiedOn: "2023-12-27T12:43:00.024Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:43:00.024Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:43:00.024Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "object@data": {
+ "boolean@locked": true,
+ "datetime@createdOn": "2023-12-27T12:42:59.964Z",
+ "datetime@savedOn": "2023-12-27T12:43:00.663Z",
+ "number@version": 1,
+ "object@createdBy": {
+ "text@displayName": "ad min",
+ "text@id": "658c1b73c39bb10008431b44",
+ "text@type": "admin"
+ },
+ "text@id": "658c1bd3c39bb10008431b5c#0001",
+ "text@path": "/not-found",
+ "text@pid": "658c1bd3c39bb10008431b5c",
+ "text@status": "published",
+ "text@title": "Not Found"
+ },
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@content":
+ "Not Found Page not found! Sorry, but the page you were looking for could not be found. TAKE ME HOme",
+ "text@tags": [],
+ "text@title": "Not Found",
+ "text@type": "PbPage"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#wby-aco-658c1bd3c39bb10008431b5c",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:43:01.121Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:43:00.024Z",
+ entity: "CmsEntries",
+ entryId: "wby-aco-658c1bd3c39bb10008431b5c",
+ id: "wby-aco-658c1bd3c39bb10008431b5c#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ meta: {},
+ modelId: "acoSearchRecord-pbpage",
+ modified: "2023-12-27T12:43:01.121Z",
+ modifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ modifiedOn: "2023-12-27T12:43:00.024Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:43:00.024Z",
+ revisionModifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionModifiedOn: "2023-12-27T12:43:00.024Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:43:00.024Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:43:00.024Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "object@data": {
+ "boolean@locked": true,
+ "datetime@createdOn": "2023-12-27T12:42:59.964Z",
+ "datetime@savedOn": "2023-12-27T12:43:00.663Z",
+ "number@version": 1,
+ "object@createdBy": {
+ "text@displayName": "ad min",
+ "text@id": "658c1b73c39bb10008431b44",
+ "text@type": "admin"
+ },
+ "text@id": "658c1bd3c39bb10008431b5c#0001",
+ "text@path": "/not-found",
+ "text@pid": "658c1bd3c39bb10008431b5c",
+ "text@status": "published",
+ "text@title": "Not Found"
+ },
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@content":
+ "Not Found Page not found! Sorry, but the page you were looking for could not be found. TAKE ME HOme",
+ "text@tags": [],
+ "text@title": "Not Found",
+ "text@type": "PbPage"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#PB#C",
+ SK: "static",
+ TYPE: "pb.category",
+ _ct: "2023-12-27T12:42:57.966Z",
+ _et: "PbCategories",
+ _md: "2023-12-27T12:42:57.966Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:57.965Z",
+ layout: "static",
+ locale: "en-US",
+ name: "Static",
+ slug: "static",
+ tenant: "root",
+ url: "/static/"
+ },
+ {
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5c",
+ SK: "L",
+ TYPE: "pb.page.l",
+ _ct: "2023-12-27T12:43:00.681Z",
+ _et: "PbPages",
+ _md: "2023-12-27T12:43:00.681Z",
+ category: "static",
+ content: {
+ compression: "jsonpack",
+ content:
+ "id|h0HqpItbGT|type|document|data|settings|elements|ZlkwCyXhhc|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|horizontalAlignFlex|center|verticalAlign|flex-start|pwR8zBN28v|grid|1100px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|6838kMd5Vh|cell|80px|size|iG8DLRffpF|heading|text|typography|heading1|alignment|tag|h1|color|color3|Page+not+found!|9UHkb1nlN1|paragraph|paragraph1|div|Sorry,+but+the+page+you+were+looking+for+could+not+be+found.|PkNZ6zIVWv|button|buttonText|TAKE+ME+HOme|30px|link|href|/|primary^C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|N|$A|O]|P|$A|Q]]]|6|@$0|R|2|S|4|$5|$9|$A|$B|T]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|S|$U|V]|W|$A|$X|Y]|Z|$X|10]]|N|$A|Q]|P|$A|Q]]]|6|@$0|11|2|12|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|E|13]]|S|$14|1U]]]|6|@$0|15|2|16|4|$17|$A|$2|16|18|19|1A|O|1B|1C|1D|1E]|4|$17|1F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|1G|2|1H|4|$17|$A|$2|1H|18|1I|1A|O|1B|1J|1D|1E]|4|$17|1K]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|1L|2|1M|4|$1N|1O|5|$D|$A|$L|F|J|-1|E|1P]]|N|$A|O]]|1Q|$1R|1S]|2|1T]|6|@]]]]]]]]]]"
+ },
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:59.964Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5c#0001",
+ locale: "en-US",
+ locked: true,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ path: "/not-found",
+ pid: "658c1bd3c39bb10008431b5c",
+ publishedOn: "2023-12-27T12:43:00.663Z",
+ savedOn: "2023-12-27T12:43:00.663Z",
+ settings: {
+ general: {
+ layout: "static"
+ },
+ seo: {
+ meta: []
+ },
+ social: {
+ meta: []
+ }
+ },
+ status: "published",
+ tenant: "root",
+ title: "Not Found",
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5c",
+ SK: "P",
+ TYPE: "pb.page.p",
+ _ct: "2023-12-27T12:43:00.682Z",
+ _et: "PbPages",
+ _md: "2023-12-27T12:43:00.682Z",
+ category: "static",
+ content: {
+ compression: "jsonpack",
+ content:
+ "id|h0HqpItbGT|type|document|data|settings|elements|ZlkwCyXhhc|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|horizontalAlignFlex|center|verticalAlign|flex-start|pwR8zBN28v|grid|1100px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|6838kMd5Vh|cell|80px|size|iG8DLRffpF|heading|text|typography|heading1|alignment|tag|h1|color|color3|Page+not+found!|9UHkb1nlN1|paragraph|paragraph1|div|Sorry,+but+the+page+you+were+looking+for+could+not+be+found.|PkNZ6zIVWv|button|buttonText|TAKE+ME+HOme|30px|link|href|/|primary^C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|N|$A|O]|P|$A|Q]]]|6|@$0|R|2|S|4|$5|$9|$A|$B|T]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|S|$U|V]|W|$A|$X|Y]|Z|$X|10]]|N|$A|Q]|P|$A|Q]]]|6|@$0|11|2|12|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|E|13]]|S|$14|1U]]]|6|@$0|15|2|16|4|$17|$A|$2|16|18|19|1A|O|1B|1C|1D|1E]|4|$17|1F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|1G|2|1H|4|$17|$A|$2|1H|18|1I|1A|O|1B|1J|1D|1E]|4|$17|1K]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|1L|2|1M|4|$1N|1O|5|$D|$A|$L|F|J|-1|E|1P]]|N|$A|O]]|1Q|$1R|1S]|2|1T]|6|@]]]]]]]]]]"
+ },
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:59.964Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5c#0001",
+ locale: "en-US",
+ locked: true,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ path: "/not-found",
+ pid: "658c1bd3c39bb10008431b5c",
+ publishedOn: "2023-12-27T12:43:00.663Z",
+ savedOn: "2023-12-27T12:43:00.663Z",
+ settings: {
+ general: {
+ layout: "static"
+ },
+ seo: {
+ meta: []
+ },
+ social: {
+ meta: []
+ }
+ },
+ status: "published",
+ tenant: "root",
+ title: "Not Found",
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5c",
+ SK: "REV#0001",
+ TYPE: "pb.page",
+ _ct: "2023-12-27T12:43:00.681Z",
+ _et: "PbPages",
+ _md: "2023-12-27T12:43:00.681Z",
+ category: "static",
+ content: {
+ compression: "jsonpack",
+ content:
+ "id|h0HqpItbGT|type|document|data|settings|elements|ZlkwCyXhhc|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|horizontalAlignFlex|center|verticalAlign|flex-start|pwR8zBN28v|grid|1100px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|6838kMd5Vh|cell|80px|size|iG8DLRffpF|heading|text|typography|heading1|alignment|tag|h1|color|color3|Page+not+found!|9UHkb1nlN1|paragraph|paragraph1|div|Sorry,+but+the+page+you+were+looking+for+could+not+be+found.|PkNZ6zIVWv|button|buttonText|TAKE+ME+HOme|30px|link|href|/|primary^C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|N|$A|O]|P|$A|Q]]]|6|@$0|R|2|S|4|$5|$9|$A|$B|T]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|S|$U|V]|W|$A|$X|Y]|Z|$X|10]]|N|$A|Q]|P|$A|Q]]]|6|@$0|11|2|12|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|E|13]]|S|$14|1U]]]|6|@$0|15|2|16|4|$17|$A|$2|16|18|19|1A|O|1B|1C|1D|1E]|4|$17|1F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|1G|2|1H|4|$17|$A|$2|1H|18|1I|1A|O|1B|1J|1D|1E]|4|$17|1K]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|1L|2|1M|4|$1N|1O|5|$D|$A|$L|F|J|-1|E|1P]]|N|$A|O]]|1Q|$1R|1S]|2|1T]|6|@]]]]]]]]]]"
+ },
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:59.964Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5c#0001",
+ locale: "en-US",
+ locked: true,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ path: "/not-found",
+ pid: "658c1bd3c39bb10008431b5c",
+ publishedOn: "2023-12-27T12:43:00.663Z",
+ savedOn: "2023-12-27T12:43:00.663Z",
+ settings: {
+ general: {
+ layout: "static"
+ },
+ seo: {
+ meta: []
+ },
+ social: {
+ meta: []
+ }
+ },
+ status: "published",
+ tenant: "root",
+ title: "Not Found",
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#PB#M",
+ SK: "main-menu",
+ TYPE: "pb.menu",
+ _ct: "2023-12-27T12:42:59.821Z",
+ _et: "PbMenus",
+ _md: "2023-12-27T12:42:59.821Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:59.821Z",
+ description: "The main menu of the website, containing links to most important pages.",
+ items: [],
+ locale: "en-US",
+ slug: "main-menu",
+ tenant: "root",
+ title: "Main Menu"
+ },
+ {
+ PK: "T#root#L#en-US#FB#SETTINGS",
+ SK: "default",
+ _ct: "2023-12-27T12:43:01.966Z",
+ _et: "FormBuilderSettings",
+ _md: "2023-12-27T12:43:01.966Z",
+ domain: "https://d3hohw12noi930.cloudfront.net",
+ locale: "en-US",
+ reCaptcha: {
+ enabled: null,
+ secretKey: null,
+ siteKey: null
+ },
+ tenant: "root"
+ },
+ {
+ GSI1_PK: "T#root#PS#TAG",
+ GSI1_SK: "pb-menu#main-menu#/",
+ PK: "T#root#PS#TAG#pb-menu#main-menu#/",
+ SK: "main-menu#/",
+ TYPE: "ps.tagPathLink",
+ _ct: "2023-12-27T12:43:19.484Z",
+ _et: "PrerenderingServiceTagPathLink",
+ _md: "2023-12-27T12:43:19.484Z",
+ data: {
+ key: "pb-menu",
+ path: "/",
+ tenant: "root",
+ value: "main-menu"
+ }
+ },
+ {
+ GSI1_PK: "T#root#GROUPS",
+ GSI1_SK: "anonymous",
+ PK: "T#root#GROUP#658c1b61c39bb10008431b43",
+ SK: "A",
+ TYPE: "security.group",
+ _ct: "2023-12-27T12:41:05.147Z",
+ _et: "SecurityGroup",
+ _md: "2023-12-27T12:41:05.147Z",
+ createdOn: "2023-12-27T12:41:05.146Z",
+ description: "Permissions for anonymous users (public access).",
+ id: "658c1b61c39bb10008431b43",
+ name: "Anonymous",
+ permissions: [],
+ slug: "anonymous",
+ system: true,
+ tenant: "root",
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba27",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.007Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814bef4a940008b3ba27",
+ id: "6022814bef4a940008b3ba27#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.007Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 17711,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg",
+ "text@name": "security.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba27",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.007Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814bef4a940008b3ba27",
+ id: "6022814bef4a940008b3ba27#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.007Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 17711,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg",
+ "text@name": "security.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CM",
+ SK: "modelA",
+ TYPE: "cms.model",
+ _ct: "2023-12-27T13:20:12.156Z",
+ _et: "CmsModels",
+ _md: "2023-12-27T13:20:12.156Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:18:26.594Z",
+ descriptionFieldId: "description",
+ fields: [
+ {
+ fieldId: "title",
+ helpText: null,
+ id: "f2qcuuzs",
+ label: "Title",
+ listValidation: [],
+ multipleValues: false,
+ placeholderText: null,
+ predefinedValues: {
+ enabled: false,
+ values: []
+ },
+ renderer: {
+ name: "text-input"
+ },
+ settings: {},
+ storageId: "text@f2qcuuzs",
+ tags: [],
+ type: "text",
+ validation: [
+ {
+ message: "Title is a required field.",
+ name: "required",
+ settings: {}
+ }
+ ]
+ },
+ {
+ fieldId: "description",
+ helpText: null,
+ id: "z2tdm05d",
+ label: "Description",
+ listValidation: [],
+ multipleValues: false,
+ placeholderText: null,
+ predefinedValues: {
+ enabled: false,
+ values: []
+ },
+ renderer: {
+ name: "long-text-text-area"
+ },
+ settings: {},
+ storageId: "long-text@z2tdm05d",
+ tags: [],
+ type: "long-text",
+ validation: []
+ },
+ {
+ fieldId: "image",
+ helpText: null,
+ id: "8y67xrmj",
+ label: "Image",
+ listValidation: [],
+ multipleValues: false,
+ placeholderText: null,
+ predefinedValues: {
+ enabled: false,
+ values: []
+ },
+ renderer: {
+ name: "file-input"
+ },
+ settings: {
+ imagesOnly: true
+ },
+ storageId: "file@8y67xrmj",
+ tags: [],
+ type: "file",
+ validation: []
+ }
+ ],
+ group: {
+ id: "658c1bcbc39bb10008431b45",
+ name: "Ungrouped"
+ },
+ imageFieldId: "image",
+ layout: [["f2qcuuzs"], ["z2tdm05d", "8y67xrmj"]],
+ locale: "en-US",
+ lockedFields: [
+ {
+ fieldId: "text@f2qcuuzs",
+ multipleValues: false,
+ type: "text"
+ },
+ {
+ fieldId: "long-text@z2tdm05d",
+ multipleValues: false,
+ type: "long-text"
+ },
+ {
+ fieldId: "file@8y67xrmj",
+ multipleValues: false,
+ type: "file"
+ }
+ ],
+ modelId: "modelA",
+ name: "ModelA",
+ pluralApiName: "ModelAs",
+ savedOn: "2023-12-27T13:18:39.298Z",
+ singularApiName: "ModelA",
+ tags: ["type:model"],
+ tenant: "root",
+ titleFieldId: "title",
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CM",
+ SK: "modelB",
+ TYPE: "cms.model",
+ _ct: "2023-12-27T13:22:45.032Z",
+ _et: "CmsModels",
+ _md: "2023-12-27T13:22:45.032Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:21:39.663Z",
+ descriptionFieldId: "description",
+ fields: [
+ {
+ fieldId: "title",
+ helpText: null,
+ id: "4dep2w2h",
+ label: "Title",
+ listValidation: [],
+ multipleValues: false,
+ placeholderText: null,
+ predefinedValues: {
+ enabled: false,
+ values: []
+ },
+ renderer: {
+ name: "text-input"
+ },
+ settings: {},
+ storageId: "text@4dep2w2h",
+ tags: [],
+ type: "text",
+ validation: [
+ {
+ message: "Title is a required field.",
+ name: "required",
+ settings: {}
+ }
+ ]
+ },
+ {
+ fieldId: "description",
+ helpText: null,
+ id: "7c5t8wwa",
+ label: "Description",
+ listValidation: [],
+ multipleValues: false,
+ placeholderText: null,
+ predefinedValues: {
+ enabled: false,
+ values: []
+ },
+ renderer: {
+ name: "long-text-text-area"
+ },
+ settings: {},
+ storageId: "long-text@7c5t8wwa",
+ tags: [],
+ type: "long-text",
+ validation: []
+ },
+ {
+ fieldId: "image",
+ helpText: null,
+ id: "5atpz8nu",
+ label: "Image",
+ listValidation: [],
+ multipleValues: false,
+ placeholderText: null,
+ predefinedValues: {
+ enabled: false,
+ values: []
+ },
+ renderer: {
+ name: "file-input"
+ },
+ settings: {
+ imagesOnly: true
+ },
+ storageId: "file@5atpz8nu",
+ tags: [],
+ type: "file",
+ validation: []
+ }
+ ],
+ group: {
+ id: "658c1bcbc39bb10008431b45",
+ name: "Ungrouped"
+ },
+ imageFieldId: "image",
+ layout: [["4dep2w2h"], ["7c5t8wwa", "5atpz8nu"]],
+ locale: "en-US",
+ lockedFields: [
+ {
+ fieldId: "text@4dep2w2h",
+ multipleValues: false,
+ type: "text"
+ },
+ {
+ fieldId: "long-text@7c5t8wwa",
+ multipleValues: false,
+ type: "long-text"
+ },
+ {
+ fieldId: "file@5atpz8nu",
+ multipleValues: false,
+ type: "file"
+ }
+ ],
+ modelId: "modelB",
+ name: "ModelB",
+ pluralApiName: "ModelBs",
+ savedOn: "2023-12-27T13:21:46.459Z",
+ singularApiName: "ModelB",
+ tags: ["type:model"],
+ tenant: "root",
+ titleFieldId: "title",
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c721",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.262Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "60228145f98841000981c721",
+ id: "60228145f98841000981c721#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.262Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 27804,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg",
+ "text@name": "developer.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c721",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.261Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "60228145f98841000981c721",
+ id: "60228145f98841000981c721#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.261Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 27804,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg",
+ "text@name": "developer.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#SYSTEM",
+ SK: "ADMIN_USERS",
+ TYPE: "adminUsers.system",
+ _ct: "2023-12-27T12:41:24.444Z",
+ _et: "AdminUsers.System",
+ _md: "2023-12-27T12:41:24.444Z",
+ tenant: "root",
+ version: "5.38.2"
+ },
+ {
+ PK: "T#root#SYSTEM",
+ SK: "CMS",
+ _ct: "2023-12-27T12:42:51.969Z",
+ _et: "CmsSystem",
+ _md: "2023-12-27T12:42:51.969Z",
+ tenant: "root",
+ version: "5.38.2"
+ },
+ {
+ PK: "T#root#SYSTEM",
+ SK: "FB",
+ _ct: "2023-12-27T12:43:01.981Z",
+ _et: "FormBuilderSystem",
+ _md: "2023-12-27T12:43:01.981Z",
+ tenant: "root",
+ version: "5.38.2"
+ },
+ {
+ PK: "T#root#SYSTEM",
+ SK: "FM",
+ _ct: "2023-12-27T12:42:52.301Z",
+ _et: "System",
+ _md: "2023-12-27T12:42:52.301Z",
+ tenant: "root",
+ version: "5.38.2"
+ },
+ {
+ PK: "T#root#SYSTEM",
+ SK: "I18N",
+ _ct: "2023-12-27T12:42:49.990Z",
+ _et: "I18NSystem",
+ _md: "2023-12-27T12:42:49.990Z",
+ tenant: "root",
+ version: "5.38.2"
+ },
+ {
+ PK: "T#root#SYSTEM",
+ SK: "PB",
+ _ct: "2023-12-27T12:43:01.256Z",
+ _et: "PbSystem",
+ _md: "2023-12-27T12:43:01.256Z",
+ tenant: "root",
+ version: "5.38.2"
+ },
+ {
+ PK: "T#root#SYSTEM",
+ SK: "SECURITY",
+ _ct: "2023-12-27T12:41:05.169Z",
+ _et: "SecuritySystem",
+ _md: "2023-12-27T12:41:05.169Z",
+ installedOn: "2023-12-27T12:41:05.169Z",
+ tenant: "root",
+ version: "5.38.2"
+ },
+ {
+ PK: "T#root#SYSTEM",
+ SK: "TENANCY",
+ _ct: "2023-12-27T12:40:58.981Z",
+ _et: "TenancySystem",
+ _md: "2023-12-27T12:40:58.981Z",
+ version: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814b7a77e60008f70d62",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:58.903Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814b7a77e60008f70d62",
+ id: "6022814b7a77e60008f70d62#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:58.903Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 1864,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg",
+ "text@name": "hero-block-bg.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814b7a77e60008f70d62",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:58.903Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814b7a77e60008f70d62",
+ id: "6022814b7a77e60008f70d62#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:58.903Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 1864,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg",
+ "text@name": "hero-block-bg.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602282e07a77e60008f70d63",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:58.944Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "602282e07a77e60008f70d63",
+ id: "602282e07a77e60008f70d63#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:58.944Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 888,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg",
+ "text@name": "feature-card-bg.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602282e07a77e60008f70d63",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:58.944Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "602282e07a77e60008f70d63",
+ id: "602282e07a77e60008f70d63#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:58.944Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 888,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg",
+ "text@name": "feature-card-bg.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ GSI1_PK: "T#root#PS#TAG",
+ GSI1_SK: "pb-menu#main-menu#/welcome-to-webiny",
+ PK: "T#root#PS#TAG#pb-menu#main-menu#/welcome-to-webiny",
+ SK: "main-menu#/welcome-to-webiny",
+ TYPE: "ps.tagPathLink",
+ _ct: "2023-12-27T12:43:14.870Z",
+ _et: "PrerenderingServiceTagPathLink",
+ _md: "2023-12-27T12:43:14.870Z",
+ data: {
+ key: "pb-menu",
+ path: "/welcome-to-webiny",
+ tenant: "root",
+ value: "main-menu"
+ }
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c24996607be00087f1167",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T13:20:25.735Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:25.235Z",
+ entity: "CmsEntries",
+ entryId: "658c24996607be00087f1167",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:25.701Z",
+ id: "658c24996607be00087f1167#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:25.701Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modified: "2023-12-27T13:20:25.735Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:20:25.701Z",
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:25.235Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:25.701Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:25.701Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:25.701Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:25.701Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAIAFvZsCRgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 2"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c24996607be00087f1167",
+ SK: "P",
+ TYPE: "cms.entry.p",
+ created: "2023-12-27T13:20:25.724Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:25.235Z",
+ entity: "CmsEntries",
+ entryId: "658c24996607be00087f1167",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:25.701Z",
+ id: "658c24996607be00087f1167#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:25.701Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modified: "2023-12-27T13:20:25.724Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:20:25.701Z",
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:25.235Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:25.701Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:25.701Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:25.701Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:25.701Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAIAFvZsCRgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 2"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c24996607be00087f1167",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T13:20:25.723Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:25.235Z",
+ entity: "CmsEntries",
+ entryId: "658c24996607be00087f1167",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:25.701Z",
+ id: "658c24996607be00087f1167#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:25.701Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modified: "2023-12-27T13:20:25.723Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:20:25.701Z",
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:25.235Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:25.701Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:25.701Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:25.701Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:25.701Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAIAFvZsCRgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 2"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c720",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.105Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "60228145f98841000981c720",
+ id: "60228145f98841000981c720#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.105Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 28918,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg",
+ "text@name": "adaptable-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c720",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.105Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "60228145f98841000981c720",
+ id: "60228145f98841000981c720#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.105Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 28918,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg",
+ "text@name": "adaptable-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dab",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.202Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "602281486ed41f0008bc2dab",
+ id: "602281486ed41f0008bc2dab#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.202Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 67402,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg",
+ "text@name": "permission-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dab",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.202Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "602281486ed41f0008bc2dab",
+ id: "602281486ed41f0008bc2dab#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.202Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 67402,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg",
+ "text@name": "permission-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#I18N#L#D",
+ SK: "default",
+ _ct: "2023-12-27T12:42:49.523Z",
+ _et: "I18NLocale",
+ _md: "2023-12-27T12:42:49.523Z",
+ code: "en-US",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:48.245Z",
+ default: true,
+ tenant: "root",
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "APW#SETTINGS",
+ SK: "default",
+ eventRuleName: "wby-apw-scheduler-event-rule-3889a7f",
+ eventTargetId: "wby-apw-scheduler-event-rule-target-34a2e04",
+ mainGraphqlFunctionArn:
+ "arn:aws:lambda:eu-central-1:674320871285:function:wby-graphql-670ccd3"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#wby-aco-658c1bd3c39bb10008431b5b",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:43:01.107Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:43:00.006Z",
+ entity: "CmsEntries",
+ entryId: "wby-aco-658c1bd3c39bb10008431b5b",
+ id: "wby-aco-658c1bd3c39bb10008431b5b#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ meta: {},
+ modelId: "acoSearchRecord-pbpage",
+ modified: "2023-12-27T12:43:01.107Z",
+ modifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ modifiedOn: "2023-12-27T12:43:00.006Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:43:00.006Z",
+ revisionModifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionModifiedOn: "2023-12-27T12:43:00.006Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:43:00.006Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:43:00.006Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "object@data": {
+ "boolean@locked": true,
+ "datetime@createdOn": "2023-12-27T12:42:59.947Z",
+ "datetime@savedOn": "2023-12-27T12:43:00.723Z",
+ "number@version": 1,
+ "object@createdBy": {
+ "text@displayName": "ad min",
+ "text@id": "658c1b73c39bb10008431b44",
+ "text@type": "admin"
+ },
+ "text@id": "658c1bd3c39bb10008431b5b#0001",
+ "text@path": "/welcome-to-webiny",
+ "text@pid": "658c1bd3c39bb10008431b5b",
+ "text@status": "published",
+ "text@title": "Welcome to Webiny"
+ },
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@content":
+ "Welcome to Webiny Welcome to Webiny Webiny makes it easy to build applications and websites on top of the serverless infrastructure by providing you with a ready-made CMS and a development framework. Scalable Webiny apps can scale to handle the most demanding workloads. No custom tooling required Webiny eliminates the need to build custom tooling to create serverless app Cost effective Webiny apps run on serverless infrastructure which costs 80% less than VMs Resolves serverless challenges Webiny removes all the challenges of building serverless applications Get to know Webiny products Architect. Code. Deploy. Webiny Serverless Application Framework Everything you need to create and deploy applications on top of the serverless infrastructure. Use it to build: Full-stack applicationsMulti-tenant solutions APIsMicroservice Learn more An easier way to build serverless apps There are many solutions that help you run, deploy and monitor serverless functions, but when it comes to actually coding one, there are none. Webiny is a solution that helps you code your serverless app by providing you with all the components like ACL, routing, file storage and many more. Framework features Users, groups, roles & scopes Security is a crucial layer in any application. Webiny includes a full-featured security module that's connected to the built-in GraphQL API.Users, groups, roles & scopes Scaffolding Quickly generate boilerplate code using CLI plugins. From lambda functions to new GraphQL APIs. Customizable security Use the default AWS Cognito, or replace with 3rd party identity providers like Okta, Auth0, etc. Using plugins you can make Webiny work with any identity provider. Multiple environments No code change goes directly into a production environment. Webiny CLI makes it easy to manage and create multiple environments for your project. One size doesn't fit all It's a very different set of requirements a technical team has to a marketing team to a business development team. Webiny Serverless CMS comes with several different apps you can use independently, or together as part of a cohesive solution. Webiny Serverless CMS A suite of applications to help you manage your content. Use it to build: Marketing sites Multi-website solutions Content hubs Multi-language sites Intranet portals Headless content models Learn more CMS benefits Scalable No matter the demand, Webiny Serverless CMS can easily scale to meet even the most challenging workloads. Adaptable Being an open-source project, it's easy to modify and adapt things to your own needs. Low cost of ownership Self-hosted on top of serverless infrastructure. No infrastructure to mange, less people required to operate and maintain. Secure Secured by AWS Cognito. It's also easy to integrate services like OKTA, Auth0 and similar. Data ownership Webiny is self-hosted, it means your data stays within your data center. Permission control Powerful options to control the permissions your users will have. They perfectly align with your business requirements. Serverless makes infrastructure easy, Webiny makes serverless easy 1. Developer-friendly Webiny has been made with the developer in mind. It helps them develop serverless applications with ease. 2. Open source Webiny is created and maintained by an amazing group of people. Being open source means Webiny grows and evolves much faster. Contributor are welcome. 3. Community We have an active community on slack. Talk to the core-team, and get help. Webiny team is always there for any questions. View Webiny on GitHub",
+ "text@tags": [],
+ "text@title": "Welcome to Webiny",
+ "text@type": "PbPage"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#wby-aco-658c1bd3c39bb10008431b5b",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:43:01.107Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:43:00.006Z",
+ entity: "CmsEntries",
+ entryId: "wby-aco-658c1bd3c39bb10008431b5b",
+ id: "wby-aco-658c1bd3c39bb10008431b5b#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ meta: {},
+ modelId: "acoSearchRecord-pbpage",
+ modified: "2023-12-27T12:43:01.107Z",
+ modifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ modifiedOn: "2023-12-27T12:43:00.006Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:43:00.006Z",
+ revisionModifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionModifiedOn: "2023-12-27T12:43:00.006Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:43:00.006Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:43:00.006Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "object@data": {
+ "boolean@locked": true,
+ "datetime@createdOn": "2023-12-27T12:42:59.947Z",
+ "datetime@savedOn": "2023-12-27T12:43:00.723Z",
+ "number@version": 1,
+ "object@createdBy": {
+ "text@displayName": "ad min",
+ "text@id": "658c1b73c39bb10008431b44",
+ "text@type": "admin"
+ },
+ "text@id": "658c1bd3c39bb10008431b5b#0001",
+ "text@path": "/welcome-to-webiny",
+ "text@pid": "658c1bd3c39bb10008431b5b",
+ "text@status": "published",
+ "text@title": "Welcome to Webiny"
+ },
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@content":
+ "Welcome to Webiny Welcome to Webiny Webiny makes it easy to build applications and websites on top of the serverless infrastructure by providing you with a ready-made CMS and a development framework. Scalable Webiny apps can scale to handle the most demanding workloads. No custom tooling required Webiny eliminates the need to build custom tooling to create serverless app Cost effective Webiny apps run on serverless infrastructure which costs 80% less than VMs Resolves serverless challenges Webiny removes all the challenges of building serverless applications Get to know Webiny products Architect. Code. Deploy. Webiny Serverless Application Framework Everything you need to create and deploy applications on top of the serverless infrastructure. Use it to build: Full-stack applicationsMulti-tenant solutions APIsMicroservice Learn more An easier way to build serverless apps There are many solutions that help you run, deploy and monitor serverless functions, but when it comes to actually coding one, there are none. Webiny is a solution that helps you code your serverless app by providing you with all the components like ACL, routing, file storage and many more. Framework features Users, groups, roles & scopes Security is a crucial layer in any application. Webiny includes a full-featured security module that's connected to the built-in GraphQL API.Users, groups, roles & scopes Scaffolding Quickly generate boilerplate code using CLI plugins. From lambda functions to new GraphQL APIs. Customizable security Use the default AWS Cognito, or replace with 3rd party identity providers like Okta, Auth0, etc. Using plugins you can make Webiny work with any identity provider. Multiple environments No code change goes directly into a production environment. Webiny CLI makes it easy to manage and create multiple environments for your project. One size doesn't fit all It's a very different set of requirements a technical team has to a marketing team to a business development team. Webiny Serverless CMS comes with several different apps you can use independently, or together as part of a cohesive solution. Webiny Serverless CMS A suite of applications to help you manage your content. Use it to build: Marketing sites Multi-website solutions Content hubs Multi-language sites Intranet portals Headless content models Learn more CMS benefits Scalable No matter the demand, Webiny Serverless CMS can easily scale to meet even the most challenging workloads. Adaptable Being an open-source project, it's easy to modify and adapt things to your own needs. Low cost of ownership Self-hosted on top of serverless infrastructure. No infrastructure to mange, less people required to operate and maintain. Secure Secured by AWS Cognito. It's also easy to integrate services like OKTA, Auth0 and similar. Data ownership Webiny is self-hosted, it means your data stays within your data center. Permission control Powerful options to control the permissions your users will have. They perfectly align with your business requirements. Serverless makes infrastructure easy, Webiny makes serverless easy 1. Developer-friendly Webiny has been made with the developer in mind. It helps them develop serverless applications with ease. 2. Open source Webiny is created and maintained by an amazing group of people. Being open source means Webiny grows and evolves much faster. Contributor are welcome. 3. Community We have an active community on slack. Talk to the core-team, and get help. Webiny team is always there for any questions. View Webiny on GitHub",
+ "text@tags": [],
+ "text@title": "Welcome to Webiny",
+ "text@type": "PbPage"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ GSI1_PK: "T#root#PS#RENDER",
+ GSI1_SK: "/",
+ PK: "T#root#PS#RENDER#/",
+ SK: "A",
+ TYPE: "ps.render",
+ _ct: "2023-12-27T12:43:19.454Z",
+ _et: "PrerenderingServiceRender",
+ _md: "2023-12-27T12:43:19.454Z",
+ data: {
+ files: [
+ {
+ meta: {
+ tags: [
+ {
+ key: "pb-page",
+ value: "658c1bd3c39bb10008431b5b#0001"
+ },
+ {
+ key: "pb-menu",
+ value: "main-menu"
+ }
+ ]
+ },
+ name: "index.html",
+ type: "text/html"
+ },
+ {
+ meta: {},
+ name: "graphql.json",
+ type: "application/json"
+ }
+ ],
+ locale: "en-US",
+ path: "/",
+ tenant: "root"
+ }
+ },
+ {
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5b",
+ SK: "L",
+ TYPE: "pb.page.l",
+ _ct: "2023-12-27T12:43:00.864Z",
+ _et: "PbPages",
+ _md: "2023-12-27T12:43:00.864Z",
+ category: "static",
+ content: {
+ compression: "jsonpack",
+ content:
+ 'id|Fv1PpPWu-|type|document|data|settings|elements|xqt7BI4iN9|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|100px|275px|16px|tablet|horizontalAlignFlex|center|verticalAlign|flex-start|background|image|file|6022814b7a77e60008f70d62|src|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg|gdE7Q7rcA|grid|1100px|20px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|_fbQO4Nlpp|cell|size|cdk_pclqE|6022814b0df4b000088735bc|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg|height|44px|ovLRNqyVu3|wmMU13uZ10|1eUZzAvoB|heading|text|typography|heading1|alignment|tag|h1|color|color6|Welcome+to+Webiny|F6ZREnQcc|64px|oEgjDLVXUu|0xYOozhJw|paragraph|paragraph1|div|Webiny+makes+it+easy+to+build+applications+and+websites+on+top+of+the+serverless+infrastructure+by+providing+you+with+a+ready-made+CMS+and+a+development+framework.
|20%25|20%25|gwhTOrZvc|30px|6-6|EaIMtHtOIw|-8px|px|602282e07a77e60008f70d63|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg|8k7zxQUTm|heading6|h6|Scalable|qNngQ1C-5|paragraph2|Webiny+apps+can+scale+to+handle+the+most+demanding+workloads.
|uBv_VRv0i|8px|iQaW4vjKg|No+custom+tooling+required|Wy3Tw-Lb8|Webiny+eliminates+the+need+to+build+custom+tooling+to+create+serverless+app
|uwrjoSZkB|Q39eQZm_8z|zSVZIwnSQ0|Cost+effective|S-Ydr4kX6k|Webiny+apps+run+on+serverless+infrastructure+which+costs+80%25+less+than+VMs
|nUX2JXYjhD|8z0hL8l7ay|Resolves+serverless+challenges|04ZNIcAGE_|Webiny+removes+all+the+challenges+of+building+serverless+applications
|vm0cFfH8KG|100%25|65px|75px|txeqybzKr3|80px|wMjC2uv8cj|Pm7ws20iA|color3|Get+to+know+Webiny+products|6CPpd558B|heading2|h2|Architect.+Code.+Deploy.|1e0_OJgMx|gpYd80MXeg|40px|15px|kAYc-QClR|4-8|border|style|solid|rgba(229,+229,+229,+1)|1|8i803wClVt|p55J-BkDn|6022814a0df4b000088735bb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg|90px|link|8nddxG64r|PR-yiR65n|heading3|h3|Webiny+Serverless+
Application+Framework|pVH9_fFLM|x0SSJvgrdD|b0iE8vr2S|Everything+you+need+to+create+and+deploy+applications+on+top+of+the+serverless+infrastructure.
|JMSKwWsT_|OU70Y990tA|T_M_Ww4Wb|heading4|h4|Use+it+to+build:|806nmKOyc|g59JmcyM-7|Cyziie_SK|list|
\n++++++++++++++++++++- Full-stack+applications
- Multi-tenant+solutions
\n++++++++++++++++
|ST0O1ZeCk|ILrAABWXiX|\n++++++++++++++++++++- APIs
- Microservice
\n++++++++++++++++
|XxXGeIywO|9H5t3COdbo|mc0_RS9rg|button|buttonText|Learn+more|50px|href|https://www.webiny.com/serverless-application-framework/|newTab|primary|icon|fas|long-arrow-alt-right|svg||position|16|Kg3rMc1Re|LAcQHMs8K|8oaRz-Gko_|9fQ9W-xiB|6022814891bd1300087bd24c|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg|YCG34DB89|xvBXD_QTkN|GqW2LBMzV|An+easier+way+to+build+serverless+apps|9cWYQwXUd|There+are+many+solutions+that+help+you+run,+deploy+and+monitor+serverless+functions,+but+when+it+comes+to+actually+coding+one,+there+are+none.+Webiny+is+a+solution+that+helps+you+code+your+serverless+app+by+providing+you+with+all+the+components+like+ACL,+routing,+file+storage+and+many+more.
|LxqyquKlYy|100%25|60px|177px|60228148f98841000981c723|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg|yqrzxoDllE|70px|bD-TQmZyW8|4ESAx7NxM|Framework+features|Xr7NLMpzm|3-3-3-3|_RtRioPOsj|12px|mOr47ImJK|AlTNw-76F8|r0e8MiCuK|6022814bef4a940008b3ba27|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg|170px|QFwbqHtSh|DH-C0-mBsO|XSN-oY3V3|Users,+groups,+roles+&+scopes|Unyhp8o-a|Security+is+a+crucial+layer+in+any+application.+Webiny+includes+a+full-featured+security+module+that\'s+connected+to+the+built-in+GraphQL+API.Users,+groups,+roles+&+scopes
|Ntcduee0-|0b66dbGkG|PoRqI9i2xE|0ZpnBSqjoz|6022814bef4a940008b3ba26|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg|FFGobMHHI|IWxl_nrRkr|I5btsZceI|Scaffolding|5qvaQSnP6|Quickly+generate+boilerplate+code+using+CLI+plugins.+From+lambda+functions+to+new+GraphQL+APIs.
|YHUznp7ZM5|PlxqV_uS7B|zKQYI-EIFl|frRuzWpRI|60228148f98841000981c724|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg|M1tvv840H|fwreagGdac|6H1tgEViY|Customizable+security|h0Ctka4TED|Use+the+default+AWS+Cognito,+or+replace+with+3rd+party+identity+providers+like+Okta,+Auth0,+etc.+Using+plugins+you+can+make+Webiny+work+with+any+identity+provider.
|SyyrOA60AF|GvU31fd4U|1vAxZAkD9O|dlI-qhVLKy|6022814bef4a940008b3ba28|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg|ftA7NOOxG|WU58SBDPP8|QtYfpt1yoE|Multiple+environments|mmpGUzg6o1|No+code+change+goes+directly+into+a+production+environment.+Webiny+CLI+makes+it+easy+to+manage+and+create+multiple+environments+for+your+project.
|wYK9BhaanZ|100%25|125px|ur1DQFl5BR|TzBvXtU2PH|-PU3iBlQ4|A6sNR3MR-5|Xtqk_itss|602281486ed41f0008bc2dad|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png|495px|bsKTDygik|ev9nhHISRw|1BBr9ACuM|One+size+doesn\'t+fit+all|0olguTqDN|It\'s+a+very+different+set+of+requirements+a+technical+team+has+to+a+marketing+team+to+a+business+development+team.+Webiny+Serverless+CMS+comes+with+several+different+apps+you+can+use+independently,+or+together+as+part+of+a+cohesive+solution.
|BhnYb3VW7D|QYZ290WhC|rgba(238,+238,+238,+1)|ER2SFYwbeK|gZp3Hxm5Js|602281486639200009fd35eb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg|FsOaMudE8|ElruSYJxWM|Webiny+Serverless+CMS|9HJcM89Am|8Cp2ZC30_H|qrS5wswdQ|heading5|h5|A+suite+of+applications+to+help+you+manage+your+content.+|pLUutc-E2|MGlDcu91q_|A6rStUekq|Use+it+to+build:|jIdakfVZU|5JHsGc_Rq-|SNOFqUK6lI|
\n++++++++++++++++++++- Marketing+sites
\n++++++++++++++++++++- Multi-website+solutions
\n++++++++++++++++++++- Content+hubs
\n++++++++++++++++
|96dJBnIlc|5cPfb7AwXH|\n++++++++++++++++++++- Multi-language+sites
\n++++++++++++++++++++- Intranet+portals
\n++++++++++++++++++++- Headless+content+models
\n++++++++++++++++
|L4dFyzBKMM|Learn+more|https://www.webiny.com/serverless-cms/||mjmNmloeUS|100%25|220px|602281486639200009fd35ec|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg|xUkOEAm5X3|Kgr1ambSuG|AP_uTrgLZ|CMS+benefits|juBaAPJ76|4-4-4|s95PSAToXK|35px|ZECp8jcZD|60228148fa244d0008c47c79|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg|146px|EyKog1RmH|Scalable|_8lCcwhUN|No+matter+the+demand,+Webiny+Serverless+CMS+can+easily+scale+to+meet+even+the+most+challenging+workloads.
|SmrEQ9OZ8|QWM8cmlQEM|60228145f98841000981c720|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg|TYx-A5YCI|Adaptable|SsbWKZz_Z|Being+an+open-source+project,+it\'s+easy+to+modify+and+adapt+things+to+your+own+needs.
|gqdtbKfv7l|jBWaxzt-4|6022814851197600081724ae|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg|NLSOIstf9|Low+cost+of+ownership|kI-neIjkXx|Self-hosted+on+top+of+serverless+infrastructure.+No+infrastructure+to+mange,+less+people+required+to+operate+and+maintain.
|V14HHGmXN|-djsQadY-8|pTVeVoKkTi|bM5b8O7IMY|Secure|l9PuI-TdVA|Secured+by+AWS+Cognito.+It\'s+also+easy+to+integrate+services+like+OKTA,+Auth0+and+similar.
|N1lW0cAasg|W-ub9guhLt|602281486ed41f0008bc2dac|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg|DVhLZfrM53|Data+ownership|shmIumNfIu|Webiny+is+self-hosted,+it+means+your+data+stays+within+your+data+center.+
|8F7J_16a46|2gtT4Mfw6c|602281486ed41f0008bc2dab|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg|5EMJkVWgKW|Permission+control|cdSOjFAWkf|Powerful+options+to+control+the+permissions+your+users+will+have.+They+perfectly+align+with+your+business+requirements.
|5ggqk561Ka|100%25|C6B8QfkUXs|ChF1iOAbtb|7tRfsJ_SEz|Serverless+makes+infrastructure+easy,+Webiny+makes+serverless+easy|oYf9t6Uwz|RdazJP-4W1|7jBNW1iTi|60228145f98841000981c721|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg|200px|npNMgLft0|1.+Developer-friendly|DpubDRaGQ|Webiny+has+been+made+with+the+developer+in+mind.+It+helps+them+develop+serverless+applications+with+ease.
|KbQocaayR|KDO-Ja7wS|60228145f98841000981c71f|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg|ETll3nkV4|2.+Open+source|UWPjvO7EC|Webiny+is+created+and+maintained+by+an+amazing+group+of+people.+Being+open+source+means+Webiny+grows+and+evolves+much+faster.+Contributor+are+welcome.
|En4soRn06o|fqxeYbEV4|60228148fa244d0008c47c7a|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png|276px|e5v0LBbfz|3.+Community|p9FWp5yqUy|We+have+an+active+community+on+slack.+Talk+to+the+core-team,+and+get+help.+Webiny+team+is+always+there+for+any+questions.
|OYp5Z-6Xo|woaE-6v5bN|Y8ndbn88hy|View+Webiny+on+GitHub|https://github.com/webiny/webiny-js|secondary|fab|github|^C|C|C|6|6|6|6|C|6|3|9|C|C|6|6|C|6|C|C|C|3|C|C|3|C|C|3|C|C|3|C|C|6|C|C|6|3|9|C|C|6|6|C|4|4|4|4|4|4|C|4|4|4|C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|O|I|P|G|P]|Q|$J|-1|I|M|G|M]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|Y|Z|10]]]]]]|6|@$0|11|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BC]]]|6|@$0|1F|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|1G|Z|1H]|1I|1J]]|6|@]]]]]]|$0|1K|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1L|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BD]]]|6|@$0|1M|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|1V]|4|$1O|1W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|1X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|1Y|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1Z|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BE]]]|6|@$0|20|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|1V]|4|$1O|24]]|5|$D|$A|$L|F]]|K|$A|$L|F|J|-1|I|25|G|26]|Q|$I|F|G|F|J|-1]]]]|6|@]]]]]]|$0|27|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]|Q|$I|2C]]|K|$A|$L|F]]|12|$1E|BF]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2F|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2I]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2J|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2L]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BG]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2O|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2Q|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|2S|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]|1A|$J|-2]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2T|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]]|K|$A|$L|F]]|12|$1E|BH]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2U|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2V]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2W|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2X]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|Q|$J|-1|I|2N|E|F]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BI]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2Z|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|30]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|31|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|32]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|33|2|8|4|$5|$9|$A|$B|34]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|35|H|36|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|37|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|38|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|39|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BJ]]]|6|@$0|3A|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|3C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|3D|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|S|1S|3F|1U|3B]|4|$1O|3G]]|5|$D|$A|$L|F|J|-1|E|P]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|3H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|3I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|BK]]]|6|@$0|3L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|S]|3N|$A|$3O|3P|1U|3Q|9|$L|3R|J|-1|H|3R]]]]]|6|@$0|3S|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BL]]]|6|@$0|3T|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|3U|Z|3V]|1I|3W]|3X|$]]|6|@]]]]|$0|3Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BM]]]|6|@$0|3Z|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41|1U|3B]|4|$1O|42]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|43|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|44|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BN]]]|6|@$0|45|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|46]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|47|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|P|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|48|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BO]]]|6|@$0|49|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|4C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4D|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4E|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BP]]]|6|@$0|4F|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4H]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|4I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BQ]]]|6|@$0|4J|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BR]]]|6|@$0|4N|2|4O|4|$4P|4Q|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|4T|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|50|51|G|9|52]]|6|@]]]]]]]]|$0|53|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$E|F|G|F|H|F|I|F|L|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|BS]]]|6|@$0|54|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|55|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BT]]]|6|@$0|56|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|57|Z|58]]|3X|$]]|6|@]]]]]]|$0|59|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BU]]]|6|@$0|5B|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|5C]]|5|$D|$A|$L|F|J|-1]]|K|$A|$L|F]]]]|6|@]]|$0|5D|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|5E]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]]]]]|$0|5F|2|8|4|$5|$9|$A|$B|5G]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|5H|G|P|H|5I|I|P|J|-1]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|5J|Z|5K]]]]]]|6|@$0|5L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|5M|I|F|J|-1]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BV]]]|6|@$0|5O|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|5P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|5Q|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|5R]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5S|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|5T]|1A|$I|5T|J|-1]]|12|$1E|BW]]]|6|@$0|5U|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5V|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BX]]]|6|@$0|5W|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|5X|Z|5Y]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|60|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|61|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BY]]]|6|@$0|62|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|63]]|5|$D|$A|$L|F|J|-1|H|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|64|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|65]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|66|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|BZ]]]|6|@$0|67|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|68|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C0]]]|6|@$0|69|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6A|Z|6B]|1I|5Z]]|6|@]]]]]]|$0|6C|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6D|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C1]]]|6|@$0|6E|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6G|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6H]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|C2]]]|6|@$0|6J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6K|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C3]]]|6|@$0|6L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|6O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6P|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C4]]]|6|@$0|6Q|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6S|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6T]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|5T]|1A|$G|5T|J|-1]]|12|$1E|C5]]]|6|@$0|6V|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6W|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C6]]]|6|@$0|6X|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6Y|Z|6Z]|1I|5Z]]|6|@]]]]]]|$0|70|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|71|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C7]]]|6|@$0|72|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|73]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|74|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|75]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|76|2|8|4|$5|$9|$A|$B|77]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|78|G|P|H|36|I|P|J|-1]]|R|$A|S]|T|$A|U]]]|6|@$0|79|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7A|2|1D|4|$5|$D|$A|$E|F|G|F|H|38|I|F|J|-1]|1A|$J|-1]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|C8]]]|6|@$0|7B|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C9]]]|6|@$0|7D|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7E|Z|7F]|9|7G]]|6|@]]]]]]|$0|7H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CA]]]|6|@$0|7J|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|7K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7L|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|7M]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|7N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|CB]]]|6|@$0|7O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]|3N|$A|$3O|3P|1U|7P|9|$J|-1|H|3R]]]]]|6|@$0|7Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CC]]]|6|@$0|7R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7S|Z|7T]|1I|3W]|3X|$]]|6|@]]]]|$0|7U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CD]]]|6|@$0|7V|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41]|4|$1O|7W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CE]]]|6|@$0|7Z|2|1N|4|$1O|$A|$2|1N|1P|80|1R|I|1S|81|1U|3B]|4|$1O|82]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|83|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|4R|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|84|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CF]]]|6|@$0|85|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|86]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|87|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|88|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CG]]]|6|@$0|89|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8A]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|8B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CH]]]|6|@$0|8C|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8D]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8E|2|4O|4|$4P|8F|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|8G|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|8H|51|G|9|52]]|6|@]]]]]]]]|$0|8I|2|8|4|$5|$9|$A|$B|8J]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|38|H|8K|I|P|G|P]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|8L|Z|8M]]]]]]|6|@$0|8N|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|5H|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8O|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CI]]]|6|@$0|8P|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|8Q]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8R|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8T|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|G|8U|I|8U]]|12|$1E|CJ]]]|6|@$0|8V|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|8W|Z|8X]|1I|8Y]|3X|$]]|6|@]]|$0|8Z|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|90]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|91|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|92]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|93|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CK]]]|6|@$0|94|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|95|Z|96]|1I|8Y]|3X|$]]|6|@]]|$0|97|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|98]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|99|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9A]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CL]]]|6|@$0|9C|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9D|Z|9E]|1I|8Y]|3X|$]]|6|@]]|$0|9F|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9G]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9H|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9I]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|9J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|5H|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|9K|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|I|8U]]|12|$1E|CM]]]|6|@$0|9L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|8Y]|3X|$]]|6|@]]|$0|9M|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9N]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9O|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9P]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CN]]]|6|@$0|9R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9S|Z|9T]|1I|8Y]|3X|$]]|6|@]]|$0|9U|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9V]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9W|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23]|4|$1O|9X]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CO]]]|6|@$0|9Z|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|A0|Z|A1]|1I|8Y]|3X|$]]|6|@]]|$0|A2|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|A3]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|A4|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|A5]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|A6|2|8|4|$5|$9|$A|$B|A7]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|N|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|A8|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|A9|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CP]]]|6|@$0|AA|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|AB]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|AC|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|38|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|AD|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|4R]|1A|$G|4R|J|-1|I|4R]]|12|$1E|CQ]]]|6|@$0|AE|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AF|Z|AG]|1I|AH]|3X|$]]|6|@]]|$0|AI|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AJ]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AK|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AL]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AM|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|4R|G|4R]]|12|$1E|CR]]]|6|@$0|AN|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AO|Z|AP]|1I|AH]|3X|$]]|6|@]]|$0|AQ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AR]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AS|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AT]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AU|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|4R]]|K|$A|$L|F|J|-1|I|4R]|1A|$J|-1|I|4R|G|4R]]|12|$1E|CS]]]|6|@$0|AV|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AW|Z|AX]|1I|AH|9|AY]|3X|$]]|6|@]]|$0|AZ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|B0]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|B1|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|B2]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|B3|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|3J|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|B4|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CT]]]|6|@$0|B5|2|4O|4|$4P|B6|5|$D|$A|$L|F]]|R|$A|S]]|3X|$4S|B7|4U|-1]|2|B8|4W|$0|@B9|BA]|4Z|BB|9|52]]|6|@]]]]]]]]]]'
+ },
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:59.947Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5b#0001",
+ locale: "en-US",
+ locked: true,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ path: "/welcome-to-webiny",
+ pid: "658c1bd3c39bb10008431b5b",
+ publishedOn: "2023-12-27T12:43:00.723Z",
+ savedOn: "2023-12-27T12:43:00.723Z",
+ settings: {
+ general: {
+ layout: "static"
+ },
+ seo: {
+ meta: []
+ },
+ social: {
+ meta: []
+ }
+ },
+ status: "published",
+ tenant: "root",
+ title: "Welcome to Webiny",
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5b",
+ SK: "P",
+ TYPE: "pb.page.p",
+ _ct: "2023-12-27T12:43:00.881Z",
+ _et: "PbPages",
+ _md: "2023-12-27T12:43:00.881Z",
+ category: "static",
+ content: {
+ compression: "jsonpack",
+ content:
+ 'id|Fv1PpPWu-|type|document|data|settings|elements|xqt7BI4iN9|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|100px|275px|16px|tablet|horizontalAlignFlex|center|verticalAlign|flex-start|background|image|file|6022814b7a77e60008f70d62|src|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg|gdE7Q7rcA|grid|1100px|20px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|_fbQO4Nlpp|cell|size|cdk_pclqE|6022814b0df4b000088735bc|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg|height|44px|ovLRNqyVu3|wmMU13uZ10|1eUZzAvoB|heading|text|typography|heading1|alignment|tag|h1|color|color6|Welcome+to+Webiny|F6ZREnQcc|64px|oEgjDLVXUu|0xYOozhJw|paragraph|paragraph1|div|Webiny+makes+it+easy+to+build+applications+and+websites+on+top+of+the+serverless+infrastructure+by+providing+you+with+a+ready-made+CMS+and+a+development+framework.
|20%25|20%25|gwhTOrZvc|30px|6-6|EaIMtHtOIw|-8px|px|602282e07a77e60008f70d63|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg|8k7zxQUTm|heading6|h6|Scalable|qNngQ1C-5|paragraph2|Webiny+apps+can+scale+to+handle+the+most+demanding+workloads.
|uBv_VRv0i|8px|iQaW4vjKg|No+custom+tooling+required|Wy3Tw-Lb8|Webiny+eliminates+the+need+to+build+custom+tooling+to+create+serverless+app
|uwrjoSZkB|Q39eQZm_8z|zSVZIwnSQ0|Cost+effective|S-Ydr4kX6k|Webiny+apps+run+on+serverless+infrastructure+which+costs+80%25+less+than+VMs
|nUX2JXYjhD|8z0hL8l7ay|Resolves+serverless+challenges|04ZNIcAGE_|Webiny+removes+all+the+challenges+of+building+serverless+applications
|vm0cFfH8KG|100%25|65px|75px|txeqybzKr3|80px|wMjC2uv8cj|Pm7ws20iA|color3|Get+to+know+Webiny+products|6CPpd558B|heading2|h2|Architect.+Code.+Deploy.|1e0_OJgMx|gpYd80MXeg|40px|15px|kAYc-QClR|4-8|border|style|solid|rgba(229,+229,+229,+1)|1|8i803wClVt|p55J-BkDn|6022814a0df4b000088735bb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg|90px|link|8nddxG64r|PR-yiR65n|heading3|h3|Webiny+Serverless+
Application+Framework|pVH9_fFLM|x0SSJvgrdD|b0iE8vr2S|Everything+you+need+to+create+and+deploy+applications+on+top+of+the+serverless+infrastructure.
|JMSKwWsT_|OU70Y990tA|T_M_Ww4Wb|heading4|h4|Use+it+to+build:|806nmKOyc|g59JmcyM-7|Cyziie_SK|list|
\n++++++++++++++++++++- Full-stack+applications
- Multi-tenant+solutions
\n++++++++++++++++
|ST0O1ZeCk|ILrAABWXiX|\n++++++++++++++++++++- APIs
- Microservice
\n++++++++++++++++
|XxXGeIywO|9H5t3COdbo|mc0_RS9rg|button|buttonText|Learn+more|50px|href|https://www.webiny.com/serverless-application-framework/|newTab|primary|icon|fas|long-arrow-alt-right|svg||position|16|Kg3rMc1Re|LAcQHMs8K|8oaRz-Gko_|9fQ9W-xiB|6022814891bd1300087bd24c|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg|YCG34DB89|xvBXD_QTkN|GqW2LBMzV|An+easier+way+to+build+serverless+apps|9cWYQwXUd|There+are+many+solutions+that+help+you+run,+deploy+and+monitor+serverless+functions,+but+when+it+comes+to+actually+coding+one,+there+are+none.+Webiny+is+a+solution+that+helps+you+code+your+serverless+app+by+providing+you+with+all+the+components+like+ACL,+routing,+file+storage+and+many+more.
|LxqyquKlYy|100%25|60px|177px|60228148f98841000981c723|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg|yqrzxoDllE|70px|bD-TQmZyW8|4ESAx7NxM|Framework+features|Xr7NLMpzm|3-3-3-3|_RtRioPOsj|12px|mOr47ImJK|AlTNw-76F8|r0e8MiCuK|6022814bef4a940008b3ba27|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg|170px|QFwbqHtSh|DH-C0-mBsO|XSN-oY3V3|Users,+groups,+roles+&+scopes|Unyhp8o-a|Security+is+a+crucial+layer+in+any+application.+Webiny+includes+a+full-featured+security+module+that\'s+connected+to+the+built-in+GraphQL+API.Users,+groups,+roles+&+scopes
|Ntcduee0-|0b66dbGkG|PoRqI9i2xE|0ZpnBSqjoz|6022814bef4a940008b3ba26|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg|FFGobMHHI|IWxl_nrRkr|I5btsZceI|Scaffolding|5qvaQSnP6|Quickly+generate+boilerplate+code+using+CLI+plugins.+From+lambda+functions+to+new+GraphQL+APIs.
|YHUznp7ZM5|PlxqV_uS7B|zKQYI-EIFl|frRuzWpRI|60228148f98841000981c724|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg|M1tvv840H|fwreagGdac|6H1tgEViY|Customizable+security|h0Ctka4TED|Use+the+default+AWS+Cognito,+or+replace+with+3rd+party+identity+providers+like+Okta,+Auth0,+etc.+Using+plugins+you+can+make+Webiny+work+with+any+identity+provider.
|SyyrOA60AF|GvU31fd4U|1vAxZAkD9O|dlI-qhVLKy|6022814bef4a940008b3ba28|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg|ftA7NOOxG|WU58SBDPP8|QtYfpt1yoE|Multiple+environments|mmpGUzg6o1|No+code+change+goes+directly+into+a+production+environment.+Webiny+CLI+makes+it+easy+to+manage+and+create+multiple+environments+for+your+project.
|wYK9BhaanZ|100%25|125px|ur1DQFl5BR|TzBvXtU2PH|-PU3iBlQ4|A6sNR3MR-5|Xtqk_itss|602281486ed41f0008bc2dad|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png|495px|bsKTDygik|ev9nhHISRw|1BBr9ACuM|One+size+doesn\'t+fit+all|0olguTqDN|It\'s+a+very+different+set+of+requirements+a+technical+team+has+to+a+marketing+team+to+a+business+development+team.+Webiny+Serverless+CMS+comes+with+several+different+apps+you+can+use+independently,+or+together+as+part+of+a+cohesive+solution.
|BhnYb3VW7D|QYZ290WhC|rgba(238,+238,+238,+1)|ER2SFYwbeK|gZp3Hxm5Js|602281486639200009fd35eb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg|FsOaMudE8|ElruSYJxWM|Webiny+Serverless+CMS|9HJcM89Am|8Cp2ZC30_H|qrS5wswdQ|heading5|h5|A+suite+of+applications+to+help+you+manage+your+content.+|pLUutc-E2|MGlDcu91q_|A6rStUekq|Use+it+to+build:|jIdakfVZU|5JHsGc_Rq-|SNOFqUK6lI|
\n++++++++++++++++++++- Marketing+sites
\n++++++++++++++++++++- Multi-website+solutions
\n++++++++++++++++++++- Content+hubs
\n++++++++++++++++
|96dJBnIlc|5cPfb7AwXH|\n++++++++++++++++++++- Multi-language+sites
\n++++++++++++++++++++- Intranet+portals
\n++++++++++++++++++++- Headless+content+models
\n++++++++++++++++
|L4dFyzBKMM|Learn+more|https://www.webiny.com/serverless-cms/||mjmNmloeUS|100%25|220px|602281486639200009fd35ec|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg|xUkOEAm5X3|Kgr1ambSuG|AP_uTrgLZ|CMS+benefits|juBaAPJ76|4-4-4|s95PSAToXK|35px|ZECp8jcZD|60228148fa244d0008c47c79|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg|146px|EyKog1RmH|Scalable|_8lCcwhUN|No+matter+the+demand,+Webiny+Serverless+CMS+can+easily+scale+to+meet+even+the+most+challenging+workloads.
|SmrEQ9OZ8|QWM8cmlQEM|60228145f98841000981c720|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg|TYx-A5YCI|Adaptable|SsbWKZz_Z|Being+an+open-source+project,+it\'s+easy+to+modify+and+adapt+things+to+your+own+needs.
|gqdtbKfv7l|jBWaxzt-4|6022814851197600081724ae|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg|NLSOIstf9|Low+cost+of+ownership|kI-neIjkXx|Self-hosted+on+top+of+serverless+infrastructure.+No+infrastructure+to+mange,+less+people+required+to+operate+and+maintain.
|V14HHGmXN|-djsQadY-8|pTVeVoKkTi|bM5b8O7IMY|Secure|l9PuI-TdVA|Secured+by+AWS+Cognito.+It\'s+also+easy+to+integrate+services+like+OKTA,+Auth0+and+similar.
|N1lW0cAasg|W-ub9guhLt|602281486ed41f0008bc2dac|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg|DVhLZfrM53|Data+ownership|shmIumNfIu|Webiny+is+self-hosted,+it+means+your+data+stays+within+your+data+center.+
|8F7J_16a46|2gtT4Mfw6c|602281486ed41f0008bc2dab|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg|5EMJkVWgKW|Permission+control|cdSOjFAWkf|Powerful+options+to+control+the+permissions+your+users+will+have.+They+perfectly+align+with+your+business+requirements.
|5ggqk561Ka|100%25|C6B8QfkUXs|ChF1iOAbtb|7tRfsJ_SEz|Serverless+makes+infrastructure+easy,+Webiny+makes+serverless+easy|oYf9t6Uwz|RdazJP-4W1|7jBNW1iTi|60228145f98841000981c721|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg|200px|npNMgLft0|1.+Developer-friendly|DpubDRaGQ|Webiny+has+been+made+with+the+developer+in+mind.+It+helps+them+develop+serverless+applications+with+ease.
|KbQocaayR|KDO-Ja7wS|60228145f98841000981c71f|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg|ETll3nkV4|2.+Open+source|UWPjvO7EC|Webiny+is+created+and+maintained+by+an+amazing+group+of+people.+Being+open+source+means+Webiny+grows+and+evolves+much+faster.+Contributor+are+welcome.
|En4soRn06o|fqxeYbEV4|60228148fa244d0008c47c7a|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png|276px|e5v0LBbfz|3.+Community|p9FWp5yqUy|We+have+an+active+community+on+slack.+Talk+to+the+core-team,+and+get+help.+Webiny+team+is+always+there+for+any+questions.
|OYp5Z-6Xo|woaE-6v5bN|Y8ndbn88hy|View+Webiny+on+GitHub|https://github.com/webiny/webiny-js|secondary|fab|github|^C|C|C|6|6|6|6|C|6|3|9|C|C|6|6|C|6|C|C|C|3|C|C|3|C|C|3|C|C|3|C|C|6|C|C|6|3|9|C|C|6|6|C|4|4|4|4|4|4|C|4|4|4|C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|O|I|P|G|P]|Q|$J|-1|I|M|G|M]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|Y|Z|10]]]]]]|6|@$0|11|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BC]]]|6|@$0|1F|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|1G|Z|1H]|1I|1J]]|6|@]]]]]]|$0|1K|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1L|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BD]]]|6|@$0|1M|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|1V]|4|$1O|1W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|1X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|1Y|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1Z|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BE]]]|6|@$0|20|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|1V]|4|$1O|24]]|5|$D|$A|$L|F]]|K|$A|$L|F|J|-1|I|25|G|26]|Q|$I|F|G|F|J|-1]]]]|6|@]]]]]]|$0|27|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]|Q|$I|2C]]|K|$A|$L|F]]|12|$1E|BF]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2F|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2I]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2J|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2L]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BG]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2O|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2Q|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|2S|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]|1A|$J|-2]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2T|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]]|K|$A|$L|F]]|12|$1E|BH]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2U|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2V]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2W|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2X]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|Q|$J|-1|I|2N|E|F]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BI]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2Z|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|30]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|31|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|32]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|33|2|8|4|$5|$9|$A|$B|34]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|35|H|36|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|37|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|38|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|39|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BJ]]]|6|@$0|3A|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|3C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|3D|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|S|1S|3F|1U|3B]|4|$1O|3G]]|5|$D|$A|$L|F|J|-1|E|P]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|3H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|3I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|BK]]]|6|@$0|3L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|S]|3N|$A|$3O|3P|1U|3Q|9|$L|3R|J|-1|H|3R]]]]]|6|@$0|3S|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BL]]]|6|@$0|3T|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|3U|Z|3V]|1I|3W]|3X|$]]|6|@]]]]|$0|3Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BM]]]|6|@$0|3Z|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41|1U|3B]|4|$1O|42]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|43|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|44|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BN]]]|6|@$0|45|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|46]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|47|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|P|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|48|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BO]]]|6|@$0|49|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|4C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4D|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4E|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BP]]]|6|@$0|4F|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4H]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|4I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BQ]]]|6|@$0|4J|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BR]]]|6|@$0|4N|2|4O|4|$4P|4Q|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|4T|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|50|51|G|9|52]]|6|@]]]]]]]]|$0|53|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$E|F|G|F|H|F|I|F|L|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|BS]]]|6|@$0|54|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|55|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BT]]]|6|@$0|56|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|57|Z|58]]|3X|$]]|6|@]]]]]]|$0|59|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BU]]]|6|@$0|5B|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|5C]]|5|$D|$A|$L|F|J|-1]]|K|$A|$L|F]]]]|6|@]]|$0|5D|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|5E]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]]]]]|$0|5F|2|8|4|$5|$9|$A|$B|5G]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|5H|G|P|H|5I|I|P|J|-1]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|5J|Z|5K]]]]]]|6|@$0|5L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|5M|I|F|J|-1]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BV]]]|6|@$0|5O|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|5P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|5Q|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|5R]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5S|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|5T]|1A|$I|5T|J|-1]]|12|$1E|BW]]]|6|@$0|5U|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5V|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BX]]]|6|@$0|5W|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|5X|Z|5Y]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|60|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|61|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BY]]]|6|@$0|62|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|63]]|5|$D|$A|$L|F|J|-1|H|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|64|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|65]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|66|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|BZ]]]|6|@$0|67|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|68|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C0]]]|6|@$0|69|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6A|Z|6B]|1I|5Z]]|6|@]]]]]]|$0|6C|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6D|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C1]]]|6|@$0|6E|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6G|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6H]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|C2]]]|6|@$0|6J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6K|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C3]]]|6|@$0|6L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|6O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6P|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C4]]]|6|@$0|6Q|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6S|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6T]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|5T]|1A|$G|5T|J|-1]]|12|$1E|C5]]]|6|@$0|6V|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6W|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C6]]]|6|@$0|6X|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6Y|Z|6Z]|1I|5Z]]|6|@]]]]]]|$0|70|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|71|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C7]]]|6|@$0|72|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|73]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|74|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|75]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|76|2|8|4|$5|$9|$A|$B|77]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|78|G|P|H|36|I|P|J|-1]]|R|$A|S]|T|$A|U]]]|6|@$0|79|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7A|2|1D|4|$5|$D|$A|$E|F|G|F|H|38|I|F|J|-1]|1A|$J|-1]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|C8]]]|6|@$0|7B|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C9]]]|6|@$0|7D|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7E|Z|7F]|9|7G]]|6|@]]]]]]|$0|7H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CA]]]|6|@$0|7J|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|7K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7L|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|7M]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|7N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|CB]]]|6|@$0|7O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]|3N|$A|$3O|3P|1U|7P|9|$J|-1|H|3R]]]]]|6|@$0|7Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CC]]]|6|@$0|7R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7S|Z|7T]|1I|3W]|3X|$]]|6|@]]]]|$0|7U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CD]]]|6|@$0|7V|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41]|4|$1O|7W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CE]]]|6|@$0|7Z|2|1N|4|$1O|$A|$2|1N|1P|80|1R|I|1S|81|1U|3B]|4|$1O|82]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|83|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|4R|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|84|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CF]]]|6|@$0|85|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|86]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|87|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|88|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CG]]]|6|@$0|89|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8A]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|8B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CH]]]|6|@$0|8C|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8D]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8E|2|4O|4|$4P|8F|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|8G|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|8H|51|G|9|52]]|6|@]]]]]]]]|$0|8I|2|8|4|$5|$9|$A|$B|8J]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|38|H|8K|I|P|G|P]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|8L|Z|8M]]]]]]|6|@$0|8N|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|5H|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8O|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CI]]]|6|@$0|8P|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|8Q]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8R|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8T|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|G|8U|I|8U]]|12|$1E|CJ]]]|6|@$0|8V|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|8W|Z|8X]|1I|8Y]|3X|$]]|6|@]]|$0|8Z|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|90]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|91|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|92]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|93|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CK]]]|6|@$0|94|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|95|Z|96]|1I|8Y]|3X|$]]|6|@]]|$0|97|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|98]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|99|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9A]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CL]]]|6|@$0|9C|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9D|Z|9E]|1I|8Y]|3X|$]]|6|@]]|$0|9F|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9G]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9H|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9I]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|9J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|5H|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|9K|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|I|8U]]|12|$1E|CM]]]|6|@$0|9L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|8Y]|3X|$]]|6|@]]|$0|9M|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9N]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9O|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9P]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CN]]]|6|@$0|9R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9S|Z|9T]|1I|8Y]|3X|$]]|6|@]]|$0|9U|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9V]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9W|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23]|4|$1O|9X]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CO]]]|6|@$0|9Z|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|A0|Z|A1]|1I|8Y]|3X|$]]|6|@]]|$0|A2|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|A3]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|A4|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|A5]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|A6|2|8|4|$5|$9|$A|$B|A7]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|N|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|A8|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|A9|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CP]]]|6|@$0|AA|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|AB]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|AC|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|38|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|AD|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|4R]|1A|$G|4R|J|-1|I|4R]]|12|$1E|CQ]]]|6|@$0|AE|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AF|Z|AG]|1I|AH]|3X|$]]|6|@]]|$0|AI|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AJ]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AK|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AL]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AM|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|4R|G|4R]]|12|$1E|CR]]]|6|@$0|AN|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AO|Z|AP]|1I|AH]|3X|$]]|6|@]]|$0|AQ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AR]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AS|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AT]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AU|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|4R]]|K|$A|$L|F|J|-1|I|4R]|1A|$J|-1|I|4R|G|4R]]|12|$1E|CS]]]|6|@$0|AV|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AW|Z|AX]|1I|AH|9|AY]|3X|$]]|6|@]]|$0|AZ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|B0]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|B1|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|B2]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|B3|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|3J|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|B4|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CT]]]|6|@$0|B5|2|4O|4|$4P|B6|5|$D|$A|$L|F]]|R|$A|S]]|3X|$4S|B7|4U|-1]|2|B8|4W|$0|@B9|BA]|4Z|BB|9|52]]|6|@]]]]]]]]]]'
+ },
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:59.947Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5b#0001",
+ locale: "en-US",
+ locked: true,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ path: "/welcome-to-webiny",
+ pid: "658c1bd3c39bb10008431b5b",
+ publishedOn: "2023-12-27T12:43:00.723Z",
+ savedOn: "2023-12-27T12:43:00.723Z",
+ settings: {
+ general: {
+ layout: "static"
+ },
+ seo: {
+ meta: []
+ },
+ social: {
+ meta: []
+ }
+ },
+ status: "published",
+ tenant: "root",
+ title: "Welcome to Webiny",
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#PB#P#658c1bd3c39bb10008431b5b",
+ SK: "REV#0001",
+ TYPE: "pb.page",
+ _ct: "2023-12-27T12:43:00.864Z",
+ _et: "PbPages",
+ _md: "2023-12-27T12:43:00.864Z",
+ category: "static",
+ content: {
+ compression: "jsonpack",
+ content:
+ 'id|Fv1PpPWu-|type|document|data|settings|elements|xqt7BI4iN9|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|100px|275px|16px|tablet|horizontalAlignFlex|center|verticalAlign|flex-start|background|image|file|6022814b7a77e60008f70d62|src|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg|gdE7Q7rcA|grid|1100px|20px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|_fbQO4Nlpp|cell|size|cdk_pclqE|6022814b0df4b000088735bc|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg|height|44px|ovLRNqyVu3|wmMU13uZ10|1eUZzAvoB|heading|text|typography|heading1|alignment|tag|h1|color|color6|Welcome+to+Webiny|F6ZREnQcc|64px|oEgjDLVXUu|0xYOozhJw|paragraph|paragraph1|div|Webiny+makes+it+easy+to+build+applications+and+websites+on+top+of+the+serverless+infrastructure+by+providing+you+with+a+ready-made+CMS+and+a+development+framework.
|20%25|20%25|gwhTOrZvc|30px|6-6|EaIMtHtOIw|-8px|px|602282e07a77e60008f70d63|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg|8k7zxQUTm|heading6|h6|Scalable|qNngQ1C-5|paragraph2|Webiny+apps+can+scale+to+handle+the+most+demanding+workloads.
|uBv_VRv0i|8px|iQaW4vjKg|No+custom+tooling+required|Wy3Tw-Lb8|Webiny+eliminates+the+need+to+build+custom+tooling+to+create+serverless+app
|uwrjoSZkB|Q39eQZm_8z|zSVZIwnSQ0|Cost+effective|S-Ydr4kX6k|Webiny+apps+run+on+serverless+infrastructure+which+costs+80%25+less+than+VMs
|nUX2JXYjhD|8z0hL8l7ay|Resolves+serverless+challenges|04ZNIcAGE_|Webiny+removes+all+the+challenges+of+building+serverless+applications
|vm0cFfH8KG|100%25|65px|75px|txeqybzKr3|80px|wMjC2uv8cj|Pm7ws20iA|color3|Get+to+know+Webiny+products|6CPpd558B|heading2|h2|Architect.+Code.+Deploy.|1e0_OJgMx|gpYd80MXeg|40px|15px|kAYc-QClR|4-8|border|style|solid|rgba(229,+229,+229,+1)|1|8i803wClVt|p55J-BkDn|6022814a0df4b000088735bb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg|90px|link|8nddxG64r|PR-yiR65n|heading3|h3|Webiny+Serverless+
Application+Framework|pVH9_fFLM|x0SSJvgrdD|b0iE8vr2S|Everything+you+need+to+create+and+deploy+applications+on+top+of+the+serverless+infrastructure.
|JMSKwWsT_|OU70Y990tA|T_M_Ww4Wb|heading4|h4|Use+it+to+build:|806nmKOyc|g59JmcyM-7|Cyziie_SK|list|
\n++++++++++++++++++++- Full-stack+applications
- Multi-tenant+solutions
\n++++++++++++++++
|ST0O1ZeCk|ILrAABWXiX|\n++++++++++++++++++++- APIs
- Microservice
\n++++++++++++++++
|XxXGeIywO|9H5t3COdbo|mc0_RS9rg|button|buttonText|Learn+more|50px|href|https://www.webiny.com/serverless-application-framework/|newTab|primary|icon|fas|long-arrow-alt-right|svg||position|16|Kg3rMc1Re|LAcQHMs8K|8oaRz-Gko_|9fQ9W-xiB|6022814891bd1300087bd24c|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg|YCG34DB89|xvBXD_QTkN|GqW2LBMzV|An+easier+way+to+build+serverless+apps|9cWYQwXUd|There+are+many+solutions+that+help+you+run,+deploy+and+monitor+serverless+functions,+but+when+it+comes+to+actually+coding+one,+there+are+none.+Webiny+is+a+solution+that+helps+you+code+your+serverless+app+by+providing+you+with+all+the+components+like+ACL,+routing,+file+storage+and+many+more.
|LxqyquKlYy|100%25|60px|177px|60228148f98841000981c723|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg|yqrzxoDllE|70px|bD-TQmZyW8|4ESAx7NxM|Framework+features|Xr7NLMpzm|3-3-3-3|_RtRioPOsj|12px|mOr47ImJK|AlTNw-76F8|r0e8MiCuK|6022814bef4a940008b3ba27|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg|170px|QFwbqHtSh|DH-C0-mBsO|XSN-oY3V3|Users,+groups,+roles+&+scopes|Unyhp8o-a|Security+is+a+crucial+layer+in+any+application.+Webiny+includes+a+full-featured+security+module+that\'s+connected+to+the+built-in+GraphQL+API.Users,+groups,+roles+&+scopes
|Ntcduee0-|0b66dbGkG|PoRqI9i2xE|0ZpnBSqjoz|6022814bef4a940008b3ba26|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg|FFGobMHHI|IWxl_nrRkr|I5btsZceI|Scaffolding|5qvaQSnP6|Quickly+generate+boilerplate+code+using+CLI+plugins.+From+lambda+functions+to+new+GraphQL+APIs.
|YHUznp7ZM5|PlxqV_uS7B|zKQYI-EIFl|frRuzWpRI|60228148f98841000981c724|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg|M1tvv840H|fwreagGdac|6H1tgEViY|Customizable+security|h0Ctka4TED|Use+the+default+AWS+Cognito,+or+replace+with+3rd+party+identity+providers+like+Okta,+Auth0,+etc.+Using+plugins+you+can+make+Webiny+work+with+any+identity+provider.
|SyyrOA60AF|GvU31fd4U|1vAxZAkD9O|dlI-qhVLKy|6022814bef4a940008b3ba28|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg|ftA7NOOxG|WU58SBDPP8|QtYfpt1yoE|Multiple+environments|mmpGUzg6o1|No+code+change+goes+directly+into+a+production+environment.+Webiny+CLI+makes+it+easy+to+manage+and+create+multiple+environments+for+your+project.
|wYK9BhaanZ|100%25|125px|ur1DQFl5BR|TzBvXtU2PH|-PU3iBlQ4|A6sNR3MR-5|Xtqk_itss|602281486ed41f0008bc2dad|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png|495px|bsKTDygik|ev9nhHISRw|1BBr9ACuM|One+size+doesn\'t+fit+all|0olguTqDN|It\'s+a+very+different+set+of+requirements+a+technical+team+has+to+a+marketing+team+to+a+business+development+team.+Webiny+Serverless+CMS+comes+with+several+different+apps+you+can+use+independently,+or+together+as+part+of+a+cohesive+solution.
|BhnYb3VW7D|QYZ290WhC|rgba(238,+238,+238,+1)|ER2SFYwbeK|gZp3Hxm5Js|602281486639200009fd35eb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg|FsOaMudE8|ElruSYJxWM|Webiny+Serverless+CMS|9HJcM89Am|8Cp2ZC30_H|qrS5wswdQ|heading5|h5|A+suite+of+applications+to+help+you+manage+your+content.+|pLUutc-E2|MGlDcu91q_|A6rStUekq|Use+it+to+build:|jIdakfVZU|5JHsGc_Rq-|SNOFqUK6lI|
\n++++++++++++++++++++- Marketing+sites
\n++++++++++++++++++++- Multi-website+solutions
\n++++++++++++++++++++- Content+hubs
\n++++++++++++++++
|96dJBnIlc|5cPfb7AwXH|\n++++++++++++++++++++- Multi-language+sites
\n++++++++++++++++++++- Intranet+portals
\n++++++++++++++++++++- Headless+content+models
\n++++++++++++++++
|L4dFyzBKMM|Learn+more|https://www.webiny.com/serverless-cms/||mjmNmloeUS|100%25|220px|602281486639200009fd35ec|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg|xUkOEAm5X3|Kgr1ambSuG|AP_uTrgLZ|CMS+benefits|juBaAPJ76|4-4-4|s95PSAToXK|35px|ZECp8jcZD|60228148fa244d0008c47c79|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg|146px|EyKog1RmH|Scalable|_8lCcwhUN|No+matter+the+demand,+Webiny+Serverless+CMS+can+easily+scale+to+meet+even+the+most+challenging+workloads.
|SmrEQ9OZ8|QWM8cmlQEM|60228145f98841000981c720|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg|TYx-A5YCI|Adaptable|SsbWKZz_Z|Being+an+open-source+project,+it\'s+easy+to+modify+and+adapt+things+to+your+own+needs.
|gqdtbKfv7l|jBWaxzt-4|6022814851197600081724ae|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg|NLSOIstf9|Low+cost+of+ownership|kI-neIjkXx|Self-hosted+on+top+of+serverless+infrastructure.+No+infrastructure+to+mange,+less+people+required+to+operate+and+maintain.
|V14HHGmXN|-djsQadY-8|pTVeVoKkTi|bM5b8O7IMY|Secure|l9PuI-TdVA|Secured+by+AWS+Cognito.+It\'s+also+easy+to+integrate+services+like+OKTA,+Auth0+and+similar.
|N1lW0cAasg|W-ub9guhLt|602281486ed41f0008bc2dac|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg|DVhLZfrM53|Data+ownership|shmIumNfIu|Webiny+is+self-hosted,+it+means+your+data+stays+within+your+data+center.+
|8F7J_16a46|2gtT4Mfw6c|602281486ed41f0008bc2dab|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg|5EMJkVWgKW|Permission+control|cdSOjFAWkf|Powerful+options+to+control+the+permissions+your+users+will+have.+They+perfectly+align+with+your+business+requirements.
|5ggqk561Ka|100%25|C6B8QfkUXs|ChF1iOAbtb|7tRfsJ_SEz|Serverless+makes+infrastructure+easy,+Webiny+makes+serverless+easy|oYf9t6Uwz|RdazJP-4W1|7jBNW1iTi|60228145f98841000981c721|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg|200px|npNMgLft0|1.+Developer-friendly|DpubDRaGQ|Webiny+has+been+made+with+the+developer+in+mind.+It+helps+them+develop+serverless+applications+with+ease.
|KbQocaayR|KDO-Ja7wS|60228145f98841000981c71f|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg|ETll3nkV4|2.+Open+source|UWPjvO7EC|Webiny+is+created+and+maintained+by+an+amazing+group+of+people.+Being+open+source+means+Webiny+grows+and+evolves+much+faster.+Contributor+are+welcome.
|En4soRn06o|fqxeYbEV4|60228148fa244d0008c47c7a|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png|276px|e5v0LBbfz|3.+Community|p9FWp5yqUy|We+have+an+active+community+on+slack.+Talk+to+the+core-team,+and+get+help.+Webiny+team+is+always+there+for+any+questions.
|OYp5Z-6Xo|woaE-6v5bN|Y8ndbn88hy|View+Webiny+on+GitHub|https://github.com/webiny/webiny-js|secondary|fab|github|^C|C|C|6|6|6|6|C|6|3|9|C|C|6|6|C|6|C|C|C|3|C|C|3|C|C|3|C|C|3|C|C|6|C|C|6|3|9|C|C|6|6|C|4|4|4|4|4|4|C|4|4|4|C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|O|I|P|G|P]|Q|$J|-1|I|M|G|M]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|Y|Z|10]]]]]]|6|@$0|11|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BC]]]|6|@$0|1F|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|1G|Z|1H]|1I|1J]]|6|@]]]]]]|$0|1K|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1L|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BD]]]|6|@$0|1M|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|1V]|4|$1O|1W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|1X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|1Y|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1Z|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BE]]]|6|@$0|20|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|1V]|4|$1O|24]]|5|$D|$A|$L|F]]|K|$A|$L|F|J|-1|I|25|G|26]|Q|$I|F|G|F|J|-1]]]]|6|@]]]]]]|$0|27|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]|Q|$I|2C]]|K|$A|$L|F]]|12|$1E|BF]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2F|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2I]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2J|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2L]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BG]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2O|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2Q|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|2S|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]|1A|$J|-2]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2T|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]]|K|$A|$L|F]]|12|$1E|BH]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2U|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2V]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2W|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2X]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|Q|$J|-1|I|2N|E|F]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BI]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2Z|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|30]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|31|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|32]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|33|2|8|4|$5|$9|$A|$B|34]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|35|H|36|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|37|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|38|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|39|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BJ]]]|6|@$0|3A|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|3C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|3D|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|S|1S|3F|1U|3B]|4|$1O|3G]]|5|$D|$A|$L|F|J|-1|E|P]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|3H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|3I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|BK]]]|6|@$0|3L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|S]|3N|$A|$3O|3P|1U|3Q|9|$L|3R|J|-1|H|3R]]]]]|6|@$0|3S|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BL]]]|6|@$0|3T|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|3U|Z|3V]|1I|3W]|3X|$]]|6|@]]]]|$0|3Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BM]]]|6|@$0|3Z|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41|1U|3B]|4|$1O|42]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|43|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|44|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BN]]]|6|@$0|45|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|46]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|47|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|P|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|48|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BO]]]|6|@$0|49|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|4C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4D|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4E|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BP]]]|6|@$0|4F|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4H]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|4I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BQ]]]|6|@$0|4J|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BR]]]|6|@$0|4N|2|4O|4|$4P|4Q|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|4T|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|50|51|G|9|52]]|6|@]]]]]]]]|$0|53|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$E|F|G|F|H|F|I|F|L|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|BS]]]|6|@$0|54|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|55|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BT]]]|6|@$0|56|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|57|Z|58]]|3X|$]]|6|@]]]]]]|$0|59|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BU]]]|6|@$0|5B|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|5C]]|5|$D|$A|$L|F|J|-1]]|K|$A|$L|F]]]]|6|@]]|$0|5D|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|5E]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]]]]]|$0|5F|2|8|4|$5|$9|$A|$B|5G]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|5H|G|P|H|5I|I|P|J|-1]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|5J|Z|5K]]]]]]|6|@$0|5L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|5M|I|F|J|-1]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BV]]]|6|@$0|5O|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|5P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|5Q|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|5R]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5S|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|5T]|1A|$I|5T|J|-1]]|12|$1E|BW]]]|6|@$0|5U|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5V|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BX]]]|6|@$0|5W|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|5X|Z|5Y]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|60|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|61|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BY]]]|6|@$0|62|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|63]]|5|$D|$A|$L|F|J|-1|H|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|64|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|65]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|66|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|BZ]]]|6|@$0|67|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|68|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C0]]]|6|@$0|69|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6A|Z|6B]|1I|5Z]]|6|@]]]]]]|$0|6C|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6D|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C1]]]|6|@$0|6E|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6G|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6H]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|C2]]]|6|@$0|6J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6K|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C3]]]|6|@$0|6L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|6O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6P|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C4]]]|6|@$0|6Q|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6S|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6T]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|5T]|1A|$G|5T|J|-1]]|12|$1E|C5]]]|6|@$0|6V|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6W|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C6]]]|6|@$0|6X|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6Y|Z|6Z]|1I|5Z]]|6|@]]]]]]|$0|70|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|71|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C7]]]|6|@$0|72|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|73]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|74|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|75]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|76|2|8|4|$5|$9|$A|$B|77]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|78|G|P|H|36|I|P|J|-1]]|R|$A|S]|T|$A|U]]]|6|@$0|79|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7A|2|1D|4|$5|$D|$A|$E|F|G|F|H|38|I|F|J|-1]|1A|$J|-1]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|C8]]]|6|@$0|7B|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C9]]]|6|@$0|7D|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7E|Z|7F]|9|7G]]|6|@]]]]]]|$0|7H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CA]]]|6|@$0|7J|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|7K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7L|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|7M]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|7N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|CB]]]|6|@$0|7O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]|3N|$A|$3O|3P|1U|7P|9|$J|-1|H|3R]]]]]|6|@$0|7Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CC]]]|6|@$0|7R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7S|Z|7T]|1I|3W]|3X|$]]|6|@]]]]|$0|7U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CD]]]|6|@$0|7V|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41]|4|$1O|7W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CE]]]|6|@$0|7Z|2|1N|4|$1O|$A|$2|1N|1P|80|1R|I|1S|81|1U|3B]|4|$1O|82]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|83|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|4R|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|84|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CF]]]|6|@$0|85|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|86]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|87|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|88|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CG]]]|6|@$0|89|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8A]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|8B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CH]]]|6|@$0|8C|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8D]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8E|2|4O|4|$4P|8F|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|8G|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|8H|51|G|9|52]]|6|@]]]]]]]]|$0|8I|2|8|4|$5|$9|$A|$B|8J]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|38|H|8K|I|P|G|P]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|8L|Z|8M]]]]]]|6|@$0|8N|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|5H|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8O|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CI]]]|6|@$0|8P|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|8Q]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8R|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8T|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|G|8U|I|8U]]|12|$1E|CJ]]]|6|@$0|8V|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|8W|Z|8X]|1I|8Y]|3X|$]]|6|@]]|$0|8Z|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|90]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|91|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|92]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|93|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CK]]]|6|@$0|94|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|95|Z|96]|1I|8Y]|3X|$]]|6|@]]|$0|97|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|98]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|99|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9A]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CL]]]|6|@$0|9C|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9D|Z|9E]|1I|8Y]|3X|$]]|6|@]]|$0|9F|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9G]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9H|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9I]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|9J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|5H|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|9K|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|I|8U]]|12|$1E|CM]]]|6|@$0|9L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|8Y]|3X|$]]|6|@]]|$0|9M|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9N]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9O|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9P]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CN]]]|6|@$0|9R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9S|Z|9T]|1I|8Y]|3X|$]]|6|@]]|$0|9U|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9V]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9W|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23]|4|$1O|9X]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CO]]]|6|@$0|9Z|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|A0|Z|A1]|1I|8Y]|3X|$]]|6|@]]|$0|A2|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|A3]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|A4|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|A5]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|A6|2|8|4|$5|$9|$A|$B|A7]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|N|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|A8|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|A9|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CP]]]|6|@$0|AA|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|AB]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|AC|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|38|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|AD|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|4R]|1A|$G|4R|J|-1|I|4R]]|12|$1E|CQ]]]|6|@$0|AE|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AF|Z|AG]|1I|AH]|3X|$]]|6|@]]|$0|AI|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AJ]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AK|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AL]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AM|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|4R|G|4R]]|12|$1E|CR]]]|6|@$0|AN|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AO|Z|AP]|1I|AH]|3X|$]]|6|@]]|$0|AQ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AR]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AS|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AT]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AU|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|4R]]|K|$A|$L|F|J|-1|I|4R]|1A|$J|-1|I|4R|G|4R]]|12|$1E|CS]]]|6|@$0|AV|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AW|Z|AX]|1I|AH|9|AY]|3X|$]]|6|@]]|$0|AZ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|B0]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|B1|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|B2]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|B3|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|3J|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|B4|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CT]]]|6|@$0|B5|2|4O|4|$4P|B6|5|$D|$A|$L|F]]|R|$A|S]]|3X|$4S|B7|4U|-1]|2|B8|4W|$0|@B9|BA]|4Z|BB|9|52]]|6|@]]]]]]]]]]'
+ },
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:59.947Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5b#0001",
+ locale: "en-US",
+ locked: true,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ path: "/welcome-to-webiny",
+ pid: "658c1bd3c39bb10008431b5b",
+ publishedOn: "2023-12-27T12:43:00.723Z",
+ savedOn: "2023-12-27T12:43:00.723Z",
+ settings: {
+ general: {
+ layout: "static"
+ },
+ seo: {
+ meta: []
+ },
+ social: {
+ meta: []
+ }
+ },
+ status: "published",
+ tenant: "root",
+ title: "Welcome to Webiny",
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ GSI1_PK: "T#root",
+ GSI1_SK: "TYPE#group#IDENTITY#658c1b73c39bb10008431b44",
+ PK: "IDENTITY#658c1b73c39bb10008431b44",
+ SK: "LINK#T#root",
+ _ct: "2023-12-27T12:41:24.428Z",
+ _et: "SecurityIdentity2Tenant",
+ _md: "2023-12-27T12:41:24.428Z",
+ createdOn: "2023-12-27T12:41:24.428Z",
+ data: {
+ groups: [
+ {
+ id: "658c1b60c39bb10008431b42",
+ permissions: [
+ {
+ name: "*"
+ }
+ ]
+ }
+ ],
+ teams: []
+ },
+ identity: "658c1b73c39bb10008431b44",
+ tenant: "root",
+ type: "group",
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba26",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.041Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814bef4a940008b3ba26",
+ id: "6022814bef4a940008b3ba26#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.041Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 33888,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg",
+ "text@name": "scaffolding.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba26",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.023Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814bef4a940008b3ba26",
+ id: "6022814bef4a940008b3ba26#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.023Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 33888,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg",
+ "text@name": "scaffolding.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ GSI1_PK: "T#root#PS#RENDER",
+ GSI1_SK: "/not-found",
+ PK: "T#root#PS#RENDER#/not-found",
+ SK: "A",
+ TYPE: "ps.render",
+ _ct: "2023-12-27T12:43:23.802Z",
+ _et: "PrerenderingServiceRender",
+ _md: "2023-12-27T12:43:23.802Z",
+ data: {
+ files: [
+ {
+ meta: {
+ tags: [
+ {
+ key: "pb-page",
+ value: "658c1bd3c39bb10008431b5c#0001"
+ },
+ {
+ key: "pb-menu",
+ value: "main-menu"
+ }
+ ]
+ },
+ name: "index.html",
+ type: "text/html"
+ },
+ {
+ meta: {},
+ name: "graphql.json",
+ type: "application/json"
+ }
+ ],
+ locale: "en-US",
+ path: "/not-found",
+ tags: [
+ {
+ key: "notFoundPage",
+ value: true
+ }
+ ],
+ tenant: "root"
+ }
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814851197600081724ae",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.122Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814851197600081724ae",
+ id: "6022814851197600081724ae#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.122Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 60602,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg",
+ "text@name": "cost-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814851197600081724ae",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.121Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814851197600081724ae",
+ id: "6022814851197600081724ae#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.121Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 60602,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg",
+ "text@name": "cost-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CMG",
+ SK: "658c1bcbc39bb10008431b45",
+ TYPE: "cms.group",
+ _ct: "2023-12-27T12:42:51.962Z",
+ _et: "CmsGroups",
+ _md: "2023-12-27T12:42:51.962Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:51.921Z",
+ description: "A generic content model group",
+ icon: "fas/star",
+ id: "658c1bcbc39bb10008431b45",
+ locale: "en-US",
+ name: "Ungrouped",
+ savedOn: "2023-12-27T12:42:51.921Z",
+ slug: "ungrouped",
+ tenant: "root",
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814a0df4b000088735bb",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:58.964Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814a0df4b000088735bb",
+ id: "6022814a0df4b000088735bb#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:58.964Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 3661,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg",
+ "text@name": "webiny-serverless-application-framework.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814a0df4b000088735bb",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:58.964Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814a0df4b000088735bb",
+ id: "6022814a0df4b000088735bb#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:58.964Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 3661,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg",
+ "text@name": "webiny-serverless-application-framework.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ GSI1_PK: "T#root#PS#RENDER",
+ GSI1_SK: "/welcome-to-webiny",
+ PK: "T#root#PS#RENDER#/welcome-to-webiny",
+ SK: "A",
+ TYPE: "ps.render",
+ _ct: "2023-12-27T12:43:14.831Z",
+ _et: "PrerenderingServiceRender",
+ _md: "2023-12-27T12:43:14.832Z",
+ data: {
+ files: [
+ {
+ meta: {
+ tags: [
+ {
+ key: "pb-page",
+ value: "658c1bd3c39bb10008431b5b#0001"
+ },
+ {
+ key: "pb-menu",
+ value: "main-menu"
+ }
+ ]
+ },
+ name: "index.html",
+ type: "text/html"
+ },
+ {
+ meta: {},
+ name: "graphql.json",
+ type: "application/json"
+ }
+ ],
+ locale: "en-US",
+ path: "/welcome-to-webiny",
+ tenant: "root"
+ }
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c248b6607be00087f1166",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T13:20:12.835Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:11.821Z",
+ entity: "CmsEntries",
+ entryId: "658c248b6607be00087f1166",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:12.775Z",
+ id: "658c248b6607be00087f1166#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:12.775Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modified: "2023-12-27T13:20:12.835Z",
+
+ // We've deliberately removed the `ownedBy` field here, just so we can see how
+ // the data migration code will behave / what operations will be performed on the record.
+ // ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+
+ publishedOn: "2023-12-27T13:20:12.775Z",
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:11.821Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:12.775Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:12.775Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:12.775Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:12.775Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAQArKdlkBgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 1"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c248b6607be00087f1166",
+ SK: "P",
+ TYPE: "cms.entry.p",
+ created: "2023-12-27T13:20:12.803Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:11.821Z",
+ entity: "CmsEntries",
+ entryId: "658c248b6607be00087f1166",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:12.775Z",
+ id: "658c248b6607be00087f1166#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:12.775Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modified: "2023-12-27T13:20:12.803Z",
+
+ // We've deliberately removed the `ownedBy` field here, just so we can see how
+ // the data migration code will behave / what operations will be performed on the record.
+ // ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+
+ publishedOn: "2023-12-27T13:20:12.775Z",
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:11.821Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:12.775Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:12.775Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:12.775Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:12.775Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAQArKdlkBgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 1"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c248b6607be00087f1166",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T13:20:12.803Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:11.821Z",
+ entity: "CmsEntries",
+ entryId: "658c248b6607be00087f1166",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:12.775Z",
+ id: "658c248b6607be00087f1166#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:12.775Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modified: "2023-12-27T13:20:12.803Z",
+
+ // We've deliberately removed the `ownedBy` field here, just so we can see how
+ // the data migration code will behave / what operations will be performed on the record.
+ // ownedBy: { type: "admin", displayName: "ad min", id: "658c1b73c39bb10008431b44" },
+
+ publishedOn: "2023-12-27T13:20:12.775Z",
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:11.821Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:12.775Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:12.775Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:12.775Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:12.775Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAQArKdlkBgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 1"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228148f98841000981c723",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.004Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "60228148f98841000981c723",
+ id: "60228148f98841000981c723#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.004Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 390,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg",
+ "text@name": "pink-shape.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228148f98841000981c723",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.004Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "60228148f98841000981c723",
+ id: "60228148f98841000981c723#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.004Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 390,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg",
+ "text@name": "pink-shape.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486639200009fd35eb",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.065Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "602281486639200009fd35eb",
+ id: "602281486639200009fd35eb#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.065Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 1758,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg",
+ "text@name": "serverless-cms-logo.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486639200009fd35eb",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.065Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "602281486639200009fd35eb",
+ id: "602281486639200009fd35eb#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.065Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 1758,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg",
+ "text@name": "serverless-cms-logo.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814891bd1300087bd24c",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:58.984Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814891bd1300087bd24c",
+ id: "6022814891bd1300087bd24c#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:58.984Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 90163,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg",
+ "text@name": "webiny-infrastructure-overview.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814891bd1300087bd24c",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:58.984Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814891bd1300087bd24c",
+ id: "6022814891bd1300087bd24c#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:58.984Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 90163,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg",
+ "text@name": "webiny-infrastructure-overview.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c71f",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.281Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "60228145f98841000981c71f",
+ id: "60228145f98841000981c71f#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.281Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 30007,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg",
+ "text@name": "octo-cat.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228145f98841000981c71f",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.281Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "60228145f98841000981c71f",
+ id: "60228145f98841000981c71f#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.281Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 30007,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg",
+ "text@name": "octo-cat.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486639200009fd35ec",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.081Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "602281486639200009fd35ec",
+ id: "602281486639200009fd35ec#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.081Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 392,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg",
+ "text@name": "cms-benefits-shape.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486639200009fd35ec",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.068Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "602281486639200009fd35ec",
+ id: "602281486639200009fd35ec#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.068Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 392,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg",
+ "text@name": "cms-benefits-shape.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ GSI1_PK: "T#root#PS#TAG",
+ GSI1_SK: "pb-page#658c1bd3c39bb10008431b5c#0001#/not-found",
+ PK: "T#root#PS#TAG#pb-page#658c1bd3c39bb10008431b5c#0001#/not-found",
+ SK: "658c1bd3c39bb10008431b5c#0001#/not-found",
+ TYPE: "ps.tagPathLink",
+ _ct: "2023-12-27T12:43:23.860Z",
+ _et: "PrerenderingServiceTagPathLink",
+ _md: "2023-12-27T12:43:23.860Z",
+ data: {
+ key: "pb-page",
+ path: "/not-found",
+ tenant: "root",
+ value: "658c1bd3c39bb10008431b5c#0001"
+ }
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c2524adbc1700090e1ad1",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T13:22:46.130Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:22:44.672Z",
+ entity: "CmsEntries",
+ entryId: "658c2524adbc1700090e1ad1",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:22:46.091Z",
+ id: "658c2524adbc1700090e1ad1#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:22:46.091Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelB",
+ modified: "2023-12-27T13:22:46.130Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:22:46.091Z",
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:22:44.672Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:22:46.091Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:22:46.091Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:22:46.091Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:22:46.091Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@7c5t8wwa": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBScM0rKapUMAQAaZvoqRgAAAA="
+ },
+ "text@4dep2w2h": "DDB+ES - Model B Entry 1"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c2524adbc1700090e1ad1",
+ SK: "P",
+ TYPE: "cms.entry.p",
+ created: "2023-12-27T13:22:46.115Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:22:44.672Z",
+ entity: "CmsEntries",
+ entryId: "658c2524adbc1700090e1ad1",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:22:46.091Z",
+ id: "658c2524adbc1700090e1ad1#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:22:46.091Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelB",
+ modified: "2023-12-27T13:22:46.115Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:22:46.091Z",
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:22:44.672Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:22:46.091Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:22:46.091Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:22:46.091Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:22:46.091Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@7c5t8wwa": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBScM0rKapUMAQAaZvoqRgAAAA="
+ },
+ "text@4dep2w2h": "DDB+ES - Model B Entry 1"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c2524adbc1700090e1ad1",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T13:22:46.114Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:22:44.672Z",
+ entity: "CmsEntries",
+ entryId: "658c2524adbc1700090e1ad1",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:22:46.091Z",
+ id: "658c2524adbc1700090e1ad1#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:22:46.091Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelB",
+ modified: "2023-12-27T13:22:46.114Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:22:46.091Z",
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:22:44.672Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:22:46.091Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:22:46.091Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:22:46.091Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:22:46.091Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@7c5t8wwa": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBScM0rKapUMAQAaZvoqRgAAAA="
+ },
+ "text@4dep2w2h": "DDB+ES - Model B Entry 1"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228148fa244d0008c47c79",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.102Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "60228148fa244d0008c47c79",
+ id: "60228148fa244d0008c47c79#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.102Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 7806,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg",
+ "text@name": "scalable-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228148fa244d0008c47c79",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.101Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "60228148fa244d0008c47c79",
+ id: "60228148fa244d0008c47c79#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.101Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 7806,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg",
+ "text@name": "scalable-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228148f98841000981c724",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.146Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "60228148f98841000981c724",
+ id: "60228148f98841000981c724#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.146Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 27878,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg",
+ "text@name": "idp.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228148f98841000981c724",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.146Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "60228148f98841000981c724",
+ id: "60228148f98841000981c724#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.146Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 27878,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg",
+ "text@name": "idp.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ GSI1_PK: "T#root#PS#TAG",
+ GSI1_SK: "pb-page#658c1bd3c39bb10008431b5b#0001#/",
+ PK: "T#root#PS#TAG#pb-page#658c1bd3c39bb10008431b5b#0001#/",
+ SK: "658c1bd3c39bb10008431b5b#0001#/",
+ TYPE: "ps.tagPathLink",
+ _ct: "2023-12-27T12:43:19.484Z",
+ _et: "PrerenderingServiceTagPathLink",
+ _md: "2023-12-27T12:43:19.484Z",
+ data: {
+ key: "pb-page",
+ path: "/",
+ tenant: "root",
+ value: "658c1bd3c39bb10008431b5b#0001"
+ }
+ },
+ {
+ PK: "T#root#I18N#L",
+ SK: "en-US",
+ _ct: "2023-12-27T12:42:49.523Z",
+ _et: "I18NLocale",
+ _md: "2023-12-27T12:42:49.523Z",
+ code: "en-US",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:48.245Z",
+ default: true,
+ tenant: "root",
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "ADMIN#SETTINGS",
+ SK: "default",
+ data: {
+ appUrl: "https://d3hohw12noi930.cloudfront.net"
+ }
+ },
+ {
+ PK: "T#root#L#en-US#PB#PATH",
+ SK: "/not-found",
+ TYPE: "pb.page.p.path",
+ _ct: "2023-12-27T12:43:00.682Z",
+ _et: "PbPages",
+ _md: "2023-12-27T12:43:00.682Z",
+ category: "static",
+ content: {
+ compression: "jsonpack",
+ content:
+ "id|h0HqpItbGT|type|document|data|settings|elements|ZlkwCyXhhc|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|horizontalAlignFlex|center|verticalAlign|flex-start|pwR8zBN28v|grid|1100px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|6838kMd5Vh|cell|80px|size|iG8DLRffpF|heading|text|typography|heading1|alignment|tag|h1|color|color3|Page+not+found!|9UHkb1nlN1|paragraph|paragraph1|div|Sorry,+but+the+page+you+were+looking+for+could+not+be+found.|PkNZ6zIVWv|button|buttonText|TAKE+ME+HOme|30px|link|href|/|primary^C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|N|$A|O]|P|$A|Q]]]|6|@$0|R|2|S|4|$5|$9|$A|$B|T]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M]]|S|$U|V]|W|$A|$X|Y]|Z|$X|10]]|N|$A|Q]|P|$A|Q]]]|6|@$0|11|2|12|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|E|13]]|S|$14|1U]]]|6|@$0|15|2|16|4|$17|$A|$2|16|18|19|1A|O|1B|1C|1D|1E]|4|$17|1F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|1G|2|1H|4|$17|$A|$2|1H|18|1I|1A|O|1B|1J|1D|1E]|4|$17|1K]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|1L|2|1M|4|$1N|1O|5|$D|$A|$L|F|J|-1|E|1P]]|N|$A|O]]|1Q|$1R|1S]|2|1T]|6|@]]]]]]]]]]"
+ },
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:59.964Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5c#0001",
+ locale: "en-US",
+ locked: true,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ path: "/not-found",
+ pid: "658c1bd3c39bb10008431b5c",
+ publishedOn: "2023-12-27T12:43:00.663Z",
+ savedOn: "2023-12-27T12:43:00.663Z",
+ settings: {
+ general: {
+ layout: "static"
+ },
+ seo: {
+ meta: []
+ },
+ social: {
+ meta: []
+ }
+ },
+ status: "published",
+ tenant: "root",
+ title: "Not Found",
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#PB#PATH",
+ SK: "/welcome-to-webiny",
+ TYPE: "pb.page.p.path",
+ _ct: "2023-12-27T12:43:00.881Z",
+ _et: "PbPages",
+ _md: "2023-12-27T12:43:00.881Z",
+ category: "static",
+ content: {
+ compression: "jsonpack",
+ content:
+ 'id|Fv1PpPWu-|type|document|data|settings|elements|xqt7BI4iN9|block|width|desktop|value|100%25|margin|top|0px|right|bottom|left|advanced|padding|all|10px|100px|275px|16px|tablet|horizontalAlignFlex|center|verticalAlign|flex-start|background|image|file|6022814b7a77e60008f70d62|src|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg|gdE7Q7rcA|grid|1100px|20px|cellsType|12|gridSettings|flexDirection|row|mobile-landscape|column|_fbQO4Nlpp|cell|size|cdk_pclqE|6022814b0df4b000088735bc|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg|height|44px|ovLRNqyVu3|wmMU13uZ10|1eUZzAvoB|heading|text|typography|heading1|alignment|tag|h1|color|color6|Welcome+to+Webiny|F6ZREnQcc|64px|oEgjDLVXUu|0xYOozhJw|paragraph|paragraph1|div|Webiny+makes+it+easy+to+build+applications+and+websites+on+top+of+the+serverless+infrastructure+by+providing+you+with+a+ready-made+CMS+and+a+development+framework.
|20%25|20%25|gwhTOrZvc|30px|6-6|EaIMtHtOIw|-8px|px|602282e07a77e60008f70d63|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg|8k7zxQUTm|heading6|h6|Scalable|qNngQ1C-5|paragraph2|Webiny+apps+can+scale+to+handle+the+most+demanding+workloads.
|uBv_VRv0i|8px|iQaW4vjKg|No+custom+tooling+required|Wy3Tw-Lb8|Webiny+eliminates+the+need+to+build+custom+tooling+to+create+serverless+app
|uwrjoSZkB|Q39eQZm_8z|zSVZIwnSQ0|Cost+effective|S-Ydr4kX6k|Webiny+apps+run+on+serverless+infrastructure+which+costs+80%25+less+than+VMs
|nUX2JXYjhD|8z0hL8l7ay|Resolves+serverless+challenges|04ZNIcAGE_|Webiny+removes+all+the+challenges+of+building+serverless+applications
|vm0cFfH8KG|100%25|65px|75px|txeqybzKr3|80px|wMjC2uv8cj|Pm7ws20iA|color3|Get+to+know+Webiny+products|6CPpd558B|heading2|h2|Architect.+Code.+Deploy.|1e0_OJgMx|gpYd80MXeg|40px|15px|kAYc-QClR|4-8|border|style|solid|rgba(229,+229,+229,+1)|1|8i803wClVt|p55J-BkDn|6022814a0df4b000088735bb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg|90px|link|8nddxG64r|PR-yiR65n|heading3|h3|Webiny+Serverless+
Application+Framework|pVH9_fFLM|x0SSJvgrdD|b0iE8vr2S|Everything+you+need+to+create+and+deploy+applications+on+top+of+the+serverless+infrastructure.
|JMSKwWsT_|OU70Y990tA|T_M_Ww4Wb|heading4|h4|Use+it+to+build:|806nmKOyc|g59JmcyM-7|Cyziie_SK|list|
\n++++++++++++++++++++- Full-stack+applications
- Multi-tenant+solutions
\n++++++++++++++++
|ST0O1ZeCk|ILrAABWXiX|\n++++++++++++++++++++- APIs
- Microservice
\n++++++++++++++++
|XxXGeIywO|9H5t3COdbo|mc0_RS9rg|button|buttonText|Learn+more|50px|href|https://www.webiny.com/serverless-application-framework/|newTab|primary|icon|fas|long-arrow-alt-right|svg||position|16|Kg3rMc1Re|LAcQHMs8K|8oaRz-Gko_|9fQ9W-xiB|6022814891bd1300087bd24c|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg|YCG34DB89|xvBXD_QTkN|GqW2LBMzV|An+easier+way+to+build+serverless+apps|9cWYQwXUd|There+are+many+solutions+that+help+you+run,+deploy+and+monitor+serverless+functions,+but+when+it+comes+to+actually+coding+one,+there+are+none.+Webiny+is+a+solution+that+helps+you+code+your+serverless+app+by+providing+you+with+all+the+components+like+ACL,+routing,+file+storage+and+many+more.
|LxqyquKlYy|100%25|60px|177px|60228148f98841000981c723|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg|yqrzxoDllE|70px|bD-TQmZyW8|4ESAx7NxM|Framework+features|Xr7NLMpzm|3-3-3-3|_RtRioPOsj|12px|mOr47ImJK|AlTNw-76F8|r0e8MiCuK|6022814bef4a940008b3ba27|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg|170px|QFwbqHtSh|DH-C0-mBsO|XSN-oY3V3|Users,+groups,+roles+&+scopes|Unyhp8o-a|Security+is+a+crucial+layer+in+any+application.+Webiny+includes+a+full-featured+security+module+that\'s+connected+to+the+built-in+GraphQL+API.Users,+groups,+roles+&+scopes
|Ntcduee0-|0b66dbGkG|PoRqI9i2xE|0ZpnBSqjoz|6022814bef4a940008b3ba26|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg|FFGobMHHI|IWxl_nrRkr|I5btsZceI|Scaffolding|5qvaQSnP6|Quickly+generate+boilerplate+code+using+CLI+plugins.+From+lambda+functions+to+new+GraphQL+APIs.
|YHUznp7ZM5|PlxqV_uS7B|zKQYI-EIFl|frRuzWpRI|60228148f98841000981c724|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg|M1tvv840H|fwreagGdac|6H1tgEViY|Customizable+security|h0Ctka4TED|Use+the+default+AWS+Cognito,+or+replace+with+3rd+party+identity+providers+like+Okta,+Auth0,+etc.+Using+plugins+you+can+make+Webiny+work+with+any+identity+provider.
|SyyrOA60AF|GvU31fd4U|1vAxZAkD9O|dlI-qhVLKy|6022814bef4a940008b3ba28|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg|ftA7NOOxG|WU58SBDPP8|QtYfpt1yoE|Multiple+environments|mmpGUzg6o1|No+code+change+goes+directly+into+a+production+environment.+Webiny+CLI+makes+it+easy+to+manage+and+create+multiple+environments+for+your+project.
|wYK9BhaanZ|100%25|125px|ur1DQFl5BR|TzBvXtU2PH|-PU3iBlQ4|A6sNR3MR-5|Xtqk_itss|602281486ed41f0008bc2dad|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png|495px|bsKTDygik|ev9nhHISRw|1BBr9ACuM|One+size+doesn\'t+fit+all|0olguTqDN|It\'s+a+very+different+set+of+requirements+a+technical+team+has+to+a+marketing+team+to+a+business+development+team.+Webiny+Serverless+CMS+comes+with+several+different+apps+you+can+use+independently,+or+together+as+part+of+a+cohesive+solution.
|BhnYb3VW7D|QYZ290WhC|rgba(238,+238,+238,+1)|ER2SFYwbeK|gZp3Hxm5Js|602281486639200009fd35eb|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg|FsOaMudE8|ElruSYJxWM|Webiny+Serverless+CMS|9HJcM89Am|8Cp2ZC30_H|qrS5wswdQ|heading5|h5|A+suite+of+applications+to+help+you+manage+your+content.+|pLUutc-E2|MGlDcu91q_|A6rStUekq|Use+it+to+build:|jIdakfVZU|5JHsGc_Rq-|SNOFqUK6lI|
\n++++++++++++++++++++- Marketing+sites
\n++++++++++++++++++++- Multi-website+solutions
\n++++++++++++++++++++- Content+hubs
\n++++++++++++++++
|96dJBnIlc|5cPfb7AwXH|\n++++++++++++++++++++- Multi-language+sites
\n++++++++++++++++++++- Intranet+portals
\n++++++++++++++++++++- Headless+content+models
\n++++++++++++++++
|L4dFyzBKMM|Learn+more|https://www.webiny.com/serverless-cms/||mjmNmloeUS|100%25|220px|602281486639200009fd35ec|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg|xUkOEAm5X3|Kgr1ambSuG|AP_uTrgLZ|CMS+benefits|juBaAPJ76|4-4-4|s95PSAToXK|35px|ZECp8jcZD|60228148fa244d0008c47c79|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg|146px|EyKog1RmH|Scalable|_8lCcwhUN|No+matter+the+demand,+Webiny+Serverless+CMS+can+easily+scale+to+meet+even+the+most+challenging+workloads.
|SmrEQ9OZ8|QWM8cmlQEM|60228145f98841000981c720|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg|TYx-A5YCI|Adaptable|SsbWKZz_Z|Being+an+open-source+project,+it\'s+easy+to+modify+and+adapt+things+to+your+own+needs.
|gqdtbKfv7l|jBWaxzt-4|6022814851197600081724ae|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg|NLSOIstf9|Low+cost+of+ownership|kI-neIjkXx|Self-hosted+on+top+of+serverless+infrastructure.+No+infrastructure+to+mange,+less+people+required+to+operate+and+maintain.
|V14HHGmXN|-djsQadY-8|pTVeVoKkTi|bM5b8O7IMY|Secure|l9PuI-TdVA|Secured+by+AWS+Cognito.+It\'s+also+easy+to+integrate+services+like+OKTA,+Auth0+and+similar.
|N1lW0cAasg|W-ub9guhLt|602281486ed41f0008bc2dac|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg|DVhLZfrM53|Data+ownership|shmIumNfIu|Webiny+is+self-hosted,+it+means+your+data+stays+within+your+data+center.+
|8F7J_16a46|2gtT4Mfw6c|602281486ed41f0008bc2dab|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg|5EMJkVWgKW|Permission+control|cdSOjFAWkf|Powerful+options+to+control+the+permissions+your+users+will+have.+They+perfectly+align+with+your+business+requirements.
|5ggqk561Ka|100%25|C6B8QfkUXs|ChF1iOAbtb|7tRfsJ_SEz|Serverless+makes+infrastructure+easy,+Webiny+makes+serverless+easy|oYf9t6Uwz|RdazJP-4W1|7jBNW1iTi|60228145f98841000981c721|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg|200px|npNMgLft0|1.+Developer-friendly|DpubDRaGQ|Webiny+has+been+made+with+the+developer+in+mind.+It+helps+them+develop+serverless+applications+with+ease.
|KbQocaayR|KDO-Ja7wS|60228145f98841000981c71f|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg|ETll3nkV4|2.+Open+source|UWPjvO7EC|Webiny+is+created+and+maintained+by+an+amazing+group+of+people.+Being+open+source+means+Webiny+grows+and+evolves+much+faster.+Contributor+are+welcome.
|En4soRn06o|fqxeYbEV4|60228148fa244d0008c47c7a|https://d3oted5odtbsmd.cloudfront.net/files/demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png|276px|e5v0LBbfz|3.+Community|p9FWp5yqUy|We+have+an+active+community+on+slack.+Talk+to+the+core-team,+and+get+help.+Webiny+team+is+always+there+for+any+questions.
|OYp5Z-6Xo|woaE-6v5bN|Y8ndbn88hy|View+Webiny+on+GitHub|https://github.com/webiny/webiny-js|secondary|fab|github|^C|C|C|6|6|6|6|C|6|3|9|C|C|6|6|C|6|C|C|C|3|C|C|3|C|C|3|C|C|3|C|C|6|C|C|6|3|9|C|C|6|6|C|4|4|4|4|4|4|C|4|4|4|C^^$0|1|2|3|4|$5|$]]|6|@$0|7|2|8|4|$5|$9|$A|$B|C]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|O|I|P|G|P]|Q|$J|-1|I|M|G|M]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|Y|Z|10]]]]]]|6|@$0|11|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BC]]]|6|@$0|1F|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|1G|Z|1H]|1I|1J]]|6|@]]]]]]|$0|1K|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1L|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BD]]]|6|@$0|1M|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|1V]|4|$1O|1W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|1X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|1Y|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|1Z|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BE]]]|6|@$0|20|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|1V]|4|$1O|24]]|5|$D|$A|$L|F]]|K|$A|$L|F|J|-1|I|25|G|26]|Q|$I|F|G|F|J|-1]]]]|6|@]]]]]]|$0|27|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]|Q|$I|2C]]|K|$A|$L|F]]|12|$1E|BF]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2F|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2I]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2J|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2L]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BG]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2O|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2Q|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|2S|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]|1A|$J|-2]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|2T|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2B|J|-1]|1A|$J|-1|I|F|H|P]]|K|$A|$L|F]]|12|$1E|BH]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2U|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|2V]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|2W|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|2X]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|2Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|2N|J|-1]|Q|$J|-1|I|2N|E|F]|1A|$J|-1|I|F]]|K|$A|$L|F]]|12|$1E|BI]|V|$A|$W|$X|$0|2D|Z|2E]]]]]]|6|@$0|2Z|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|1V]|4|$1O|30]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|31|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|1V]|4|$1O|32]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|33|2|8|4|$5|$9|$A|$B|34]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|35|H|36|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|37|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|38|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|39|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BJ]]]|6|@$0|3A|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|3C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]|$0|3D|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|S|1S|3F|1U|3B]|4|$1O|3G]]|5|$D|$A|$L|F|J|-1|E|P]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|3H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|3I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|BK]]]|6|@$0|3L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|S]|3N|$A|$3O|3P|1U|3Q|9|$L|3R|J|-1|H|3R]]]]]|6|@$0|3S|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BL]]]|6|@$0|3T|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|3U|Z|3V]|1I|3W]|3X|$]]|6|@]]]]|$0|3Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BM]]]|6|@$0|3Z|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41|1U|3B]|4|$1O|42]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|43|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|44|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BN]]]|6|@$0|45|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|46]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|47|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|P|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|48|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BO]]]|6|@$0|49|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|4C]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4D|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4E|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BP]]]|6|@$0|4F|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4H]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|4I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BQ]]]|6|@$0|4J|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|4K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|4L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|4M|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BR]]]|6|@$0|4N|2|4O|4|$4P|4Q|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|4T|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|50|51|G|9|52]]|6|@]]]]]]]]|$0|53|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$E|F|G|F|H|F|I|F|L|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|BS]]]|6|@$0|54|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|55|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BT]]]|6|@$0|56|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|57|Z|58]]|3X|$]]|6|@]]]]]]|$0|59|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5A|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BU]]]|6|@$0|5B|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|5C]]|5|$D|$A|$L|F|J|-1]]|K|$A|$L|F]]]]|6|@]]|$0|5D|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|5E]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]]]]]|$0|5F|2|8|4|$5|$9|$A|$B|5G]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|5H|G|P|H|5I|I|P|J|-1]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|5J|Z|5K]]]]]]|6|@$0|5L|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|5M|I|F|J|-1]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BV]]]|6|@$0|5O|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|5P]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|5Q|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|5R]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5S|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|5T]|1A|$I|5T|J|-1]]|12|$1E|BW]]]|6|@$0|5U|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|5V|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BX]]]|6|@$0|5W|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|5X|Z|5Y]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|60|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|61|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|BY]]]|6|@$0|62|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|63]]|5|$D|$A|$L|F|J|-1|H|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|64|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|65]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|66|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|BZ]]]|6|@$0|67|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|68|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C0]]]|6|@$0|69|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6A|Z|6B]|1I|5Z]]|6|@]]]]]]|$0|6C|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6D|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C1]]]|6|@$0|6E|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6F]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6G|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6H]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|5T|G|5T]]|12|$1E|C2]]]|6|@$0|6J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6K|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C3]]]|6|@$0|6L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|5Z]|3X|$]]|6|@]]]]]]|$0|6O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6P|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C4]]]|6|@$0|6Q|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|6R]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|6S|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|6T]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|6U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|5T]|1A|$G|5T|J|-1]]|12|$1E|C5]]]|6|@$0|6V|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|28|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|6W|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C6]]]|6|@$0|6X|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6Y|Z|6Z]|1I|5Z]]|6|@]]]]]]|$0|70|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|71|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C7]]]|6|@$0|72|2|1N|4|$1O|$A|$2|1N|1P|2G|1R|S|1S|2H|1U|3B]|4|$1O|73]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|74|2|21|4|$1O|$A|$2|21|1P|2K|1R|S|1S|23|1U|3B]|4|$1O|75]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|76|2|8|4|$5|$9|$A|$B|77]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|78|G|P|H|36|I|P|J|-1]]|R|$A|S]|T|$A|U]]]|6|@$0|79|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7A|2|1D|4|$5|$D|$A|$E|F|G|F|H|38|I|F|J|-1]|1A|$J|-1]]|K|$A|$L|F|J|-1|G|3K]|1A|$J|-1|G|F]]|12|$1E|C8]]]|6|@$0|7B|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7C|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|C9]]]|6|@$0|7D|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7E|Z|7F]|9|7G]]|6|@]]]]]]|$0|7H|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7I|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CA]]]|6|@$0|7J|2|1N|4|$1O|$A|$2|1N|1P|3E|1R|I|1S|3F|1U|3B]|4|$1O|7K]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7L|2|21|4|$1O|$A|$2|21|1P|22|1R|I|1S|23|1U|3B]|4|$1O|7M]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]]]|$0|7N|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|J|-1|I|3K]|1A|$J|-1|I|F]]|12|$1E|CB]]]|6|@$0|7O|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|28|I|F|J|-1]]|12|$15|3M]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]|3N|$A|$3O|3P|1U|7P|9|$J|-1|H|3R]]]]]|6|@$0|7Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CC]]]|6|@$0|7R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|7S|Z|7T]|1I|3W]|3X|$]]|6|@]]]]|$0|7U|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CD]]]|6|@$0|7V|2|1N|4|$1O|$A|$2|1N|1P|40|1R|I|1S|41]|4|$1O|7W]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|7X|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|28|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|7Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CE]]]|6|@$0|7Z|2|1N|4|$1O|$A|$2|1N|1P|80|1R|I|1S|81|1U|3B]|4|$1O|82]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|83|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|4R|G|F|H|14|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|84|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CF]]]|6|@$0|85|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|I|1S|4B|1U|3B]|4|$1O|86]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|87|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|29]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|88|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CG]]]|6|@$0|89|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8A]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]|$0|8B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CH]]]|6|@$0|8C|2|4G|4|$1O|$A|$2|4G|1P|4G|1R|I|1S|23|1U|3B]|4|$1O|8D]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8E|2|4O|4|$4P|8F|5|$D|$A|$L|F|J|-1|E|4R]]|R|$A|U]]|3X|$4S|8G|4U|-1]|2|4V|4W|$0|@4X|4Y]|4Z|8H|51|G|9|52]]|6|@]]]]]]]]|$0|8I|2|8|4|$5|$9|$A|$B|8J]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|38|H|8K|I|P|G|P]]|R|$A|S]|T|$A|U]|V|$A|$W|$X|$0|8L|Z|8M]]]]]]|6|@$0|8N|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|5H|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8O|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CI]]]|6|@$0|8P|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|8Q]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|8R|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|8T|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|G|8U|I|8U]]|12|$1E|CJ]]]|6|@$0|8V|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|8W|Z|8X]|1I|8Y]|3X|$]]|6|@]]|$0|8Z|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|90]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|91|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|92]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|93|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CK]]]|6|@$0|94|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|95|Z|96]|1I|8Y]|3X|$]]|6|@]]|$0|97|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|98]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|99|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9A]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9B|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CL]]]|6|@$0|9C|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9D|Z|9E]|1I|8Y]|3X|$]]|6|@]]|$0|9F|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9G]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9H|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9I]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|9J|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|5H|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|9K|2|1D|4|$5|$D|$A|$E|F|G|F|H|3J|I|F|J|-1]]|K|$A|$L|F|J|-1|G|8U]|1A|$J|-1|I|8U]]|12|$1E|CM]]]|6|@$0|9L|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|6M|Z|6N]|1I|8Y]|3X|$]]|6|@]]|$0|9M|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9N]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9O|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|9P]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Q|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$H|3J|J|-1]]|K|$A|$L|F|J|-1|I|8U|G|8U]]|12|$1E|CN]]]|6|@$0|9R|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|9S|Z|9T]|1I|8Y]|3X|$]]|6|@]]|$0|9U|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|9V]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|9W|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23]|4|$1O|9X]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|9Y|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|8U]|1A|$J|-1|G|8U]]|12|$1E|CO]]]|6|@$0|9Z|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|A0|Z|A1]|1I|8Y]|3X|$]]|6|@]]|$0|A2|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|A3]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|A4|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|A5]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]]]|$0|A6|2|8|4|$5|$9|$A|$B|A7]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|M|J|-1|E|N|H|N|I|P|G|P]]|R|$A|S]|T|$A|U]]]|6|@$0|A8|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|A9|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CP]]]|6|@$0|AA|2|1N|4|$1O|$A|$2|1N|1P|1Q|1R|S|1S|1T|1U|3B]|4|$1O|AB]]|5|$D|$A|$L|F]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|AC|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|38|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|8S]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|AD|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|G|4R]|1A|$G|4R|J|-1|I|4R]]|12|$1E|CQ]]]|6|@$0|AE|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AF|Z|AG]|1I|AH]|3X|$]]|6|@]]|$0|AI|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AJ]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AK|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AL]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AM|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|3J]]|K|$A|$L|F|J|-1|I|4R|G|4R]]|12|$1E|CR]]]|6|@$0|AN|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AO|Z|AP]|1I|AH]|3X|$]]|6|@]]|$0|AQ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|AR]]|5|$D|$A|$L|F|J|-1|E|14]]|K|$A|$L|F]]]]|6|@]]|$0|AS|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|AT]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]|$0|AU|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]|1A|$J|-1|H|4R]]|K|$A|$L|F|J|-1|I|4R]|1A|$J|-1|I|4R|G|4R]]|12|$1E|CS]]]|6|@$0|AV|2|W|4|$5|$R|$A|S]|D|$A|$L|F]]|K|$A|$L|F]]]|W|$X|$0|AW|Z|AX]|1I|AH|9|AY]|3X|$]]|6|@]]|$0|AZ|2|1N|4|$1O|$A|$2|1N|1P|4A|1R|S|1S|4B|1U|3B]|4|$1O|B0]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]|$0|B1|2|21|4|$1O|$A|$2|21|1P|22|1R|S|1S|23|1U|3B]|4|$1O|B2]]|5|$D|$A|$L|F|J|-1|E|M]]|K|$A|$L|F]]]]|6|@]]]]]]|$0|B3|2|12|4|$5|$9|$A|$B|13]]|D|$A|$E|3J|G|F|H|F|I|F|J|-1]]|K|$A|$L|F|E|F|G|F|H|F|I|F]]|12|$15|16]|17|$A|$18|19]|1A|$18|1B]]|R|$A|U]|T|$A|U]]]|6|@$0|B4|2|1D|4|$5|$D|$A|$E|F|G|F|H|F|I|F|J|-1]]|K|$A|$L|F]]|12|$1E|CT]]]|6|@$0|B5|2|4O|4|$4P|B6|5|$D|$A|$L|F]]|R|$A|S]]|3X|$4S|B7|4U|-1]|2|B8|4W|$0|@B9|BA]|4Z|BB|9|52]]|6|@]]]]]]]]]]'
+ },
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:59.947Z",
+ editor: "page-builder",
+ id: "658c1bd3c39bb10008431b5b#0001",
+ locale: "en-US",
+ locked: true,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ path: "/welcome-to-webiny",
+ pid: "658c1bd3c39bb10008431b5b",
+ publishedOn: "2023-12-27T12:43:00.723Z",
+ savedOn: "2023-12-27T12:43:00.723Z",
+ settings: {
+ general: {
+ layout: "static"
+ },
+ seo: {
+ meta: []
+ },
+ social: {
+ meta: []
+ }
+ },
+ status: "published",
+ tenant: "root",
+ title: "Welcome to Webiny",
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c24a16607be00087f1168",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T13:20:34.204Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:33.775Z",
+ entity: "CmsEntries",
+ entryId: "658c24a16607be00087f1168",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:34.175Z",
+ id: "658c24a16607be00087f1168#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:34.175Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modified: "2023-12-27T13:20:34.204Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:20:34.175Z",
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:33.775Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:34.175Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:34.175Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:34.175Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:34.175Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAIAFvZsCRgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 3"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c24a16607be00087f1168",
+ SK: "P",
+ TYPE: "cms.entry.p",
+ created: "2023-12-27T13:20:34.199Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:33.775Z",
+ entity: "CmsEntries",
+ entryId: "658c24a16607be00087f1168",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:34.175Z",
+ id: "658c24a16607be00087f1168#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:34.175Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modified: "2023-12-27T13:20:34.199Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:20:34.175Z",
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:33.775Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:34.175Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:34.175Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:34.175Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:34.175Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAIAFvZsCRgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 3"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c24a16607be00087f1168",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T13:20:34.199Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:33.775Z",
+ entity: "CmsEntries",
+ entryId: "658c24a16607be00087f1168",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:34.175Z",
+ id: "658c24a16607be00087f1168#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:34.175Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modified: "2023-12-27T13:20:34.199Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:20:34.175Z",
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:33.775Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:34.175Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:34.175Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:34.175Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:34.175Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBUcM0rKapUMAIAFvZsCRgAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 3"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228148fa244d0008c47c7a",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.301Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "60228148fa244d0008c47c7a",
+ id: "60228148fa244d0008c47c7a#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.301Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 17382,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png",
+ "text@name": "community-icon.png",
+ "text@tags": [],
+ "text@type": "image/png"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#60228148fa244d0008c47c7a",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.301Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "60228148fa244d0008c47c7a",
+ id: "60228148fa244d0008c47c7a#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.301Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 17382,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png",
+ "text@name": "community-icon.png",
+ "text@tags": [],
+ "text@type": "image/png"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ GSI1_PK: "TENANTS",
+ GSI1_SK: "T#null#2023-12-27T12:40:58.921Z",
+ PK: "T#root",
+ SK: "A",
+ TYPE: "tenancy.tenant",
+ _ct: "2023-12-27T12:40:58.922Z",
+ _et: "TenancyTenant",
+ _md: "2023-12-27T12:40:58.922Z",
+ data: {
+ createdOn: "2023-12-27T12:40:58.921Z",
+ description: "The top-level Webiny tenant.",
+ id: "root",
+ name: "Root",
+ parent: null,
+ savedOn: "2023-12-27T12:40:58.921Z",
+ settings: {
+ domains: []
+ },
+ status: "active",
+ tags: [],
+ webinyVersion: "5.38.2"
+ }
+ },
+ {
+ PK: "T#root#L#en-US#PB#SETTINGS",
+ SK: "A",
+ TYPE: "pb.settings",
+ _ct: "2023-12-27T12:43:01.222Z",
+ _et: "PbSettings",
+ _md: "2023-12-27T12:43:01.222Z",
+ data: {
+ locale: "en-US",
+ name: "devr",
+ pages: {
+ home: "658c1bd3c39bb10008431b5b",
+ notFound: "658c1bd3c39bb10008431b5c"
+ },
+ prerendering: {
+ app: {
+ url: null
+ },
+ meta: {},
+ storage: {
+ name: null
+ }
+ },
+ tenant: "root",
+ type: "default",
+ websiteUrl: null
+ }
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814b0df4b000088735bc",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:58.924Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814b0df4b000088735bc",
+ id: "6022814b0df4b000088735bc#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:58.924Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 5053,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg",
+ "text@name": "webiny-logo.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814b0df4b000088735bc",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:58.924Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814b0df4b000088735bc",
+ id: "6022814b0df4b000088735bc#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:58.924Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 5053,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg",
+ "text@name": "webiny-logo.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#FM#SETTINGS",
+ SK: "A",
+ TYPE: "fm.settings",
+ _ct: "2023-12-27T12:42:52.281Z",
+ _et: "FM.Settings",
+ _md: "2023-12-27T12:42:52.281Z",
+ data: {
+ srcPrefix: "https://d3oted5odtbsmd.cloudfront.net/files/",
+ tenant: "root",
+ uploadMaxFileSize: 10737418240,
+ uploadMinFileSize: 0
+ }
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c24aa6607be00087f1169",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T13:20:42.181Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:42.180Z",
+ entity: "CmsEntries",
+ entryId: "658c24aa6607be00087f1169",
+ id: "658c24aa6607be00087f1169#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "modelA",
+ modified: "2023-12-27T13:20:42.181Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:42.180Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:42.180Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:42.180Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAAwMAAAAAAAAAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 4"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c24aa6607be00087f1169",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T13:20:42.181Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:42.180Z",
+ entity: "CmsEntries",
+ entryId: "658c24aa6607be00087f1169",
+ id: "658c24aa6607be00087f1169#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "modelA",
+ modified: "2023-12-27T13:20:42.181Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:42.180Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:42.180Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:42.180Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAAwMAAAAAAAAAAAA="
+ },
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 4"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "PS#SETTINGS",
+ SK: "default",
+ data: {
+ appUrl: "https://d1c9xtq19d4x6u.cloudfront.net",
+ bucket: "wby-delivery-68ac55a",
+ cloudfrontId: "E12G8OCR2J2BDW",
+ deliveryUrl: "https://d1jwcc7rxvj5th.cloudfront.net",
+ sqsQueueUrl:
+ "https://sqs.eu-central-1.amazonaws.com/674320871285/wby-ps-render-queue-bcd2dfd.fifo"
+ }
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c2531adbc1700090e1ad2",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T13:23:15.570Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:22:57.094Z",
+ entity: "CmsEntries",
+ entryId: "658c2531adbc1700090e1ad2",
+ id: "658c2531adbc1700090e1ad2#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ meta: {},
+ modelId: "modelB",
+ modified: "2023-12-27T13:23:15.570Z",
+ modifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ modifiedOn: "2023-12-27T13:23:15.536Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:22:57.094Z",
+ revisionModifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionModifiedOn: "2023-12-27T13:23:15.536Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:23:15.536Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:23:15.536Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "file@5atpz8nu": null,
+ "long-text@7c5t8wwa": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBScM0rKapUMFIIDXBxDHF1AQA3yyBkIAAAAA=="
+ },
+ "text@4dep2w2h": "DDB+ES - Model B Entry 2 UPDATED"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#658c2531adbc1700090e1ad2",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T13:23:15.570Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:22:57.094Z",
+ entity: "CmsEntries",
+ entryId: "658c2531adbc1700090e1ad2",
+ id: "658c2531adbc1700090e1ad2#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ meta: {},
+ modelId: "modelB",
+ modified: "2023-12-27T13:23:15.570Z",
+ modifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ modifiedOn: "2023-12-27T13:23:15.536Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:22:57.094Z",
+ revisionModifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionModifiedOn: "2023-12-27T13:23:15.536Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:23:15.536Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:23:15.536Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "file@5atpz8nu": null,
+ "long-text@7c5t8wwa": {
+ compression: "gzip",
+ value: "H4sIAAAAAAAAA3NxcdJ2DVbQVfDNT0nNUXBScM0rKapUMFIIDXBxDHF1AQA3yyBkIAAAAA=="
+ },
+ "text@4dep2w2h": "DDB+ES - Model B Entry 2 UPDATED"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dad",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.062Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "602281486ed41f0008bc2dad",
+ id: "602281486ed41f0008bc2dad#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.062Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 108898,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png",
+ "text@name": "webiny-serverless-cms.png ",
+ "text@tags": [],
+ "text@type": "image/png"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dad",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.061Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "602281486ed41f0008bc2dad",
+ id: "602281486ed41f0008bc2dad#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.061Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 108898,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png",
+ "text@name": "webiny-serverless-cms.png ",
+ "text@tags": [],
+ "text@type": "image/png"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ GSI1_PK: "T#root#PS#TAG",
+ GSI1_SK: "pb-menu#main-menu#/not-found",
+ PK: "T#root#PS#TAG#pb-menu#main-menu#/not-found",
+ SK: "main-menu#/not-found",
+ TYPE: "ps.tagPathLink",
+ _ct: "2023-12-27T12:43:23.860Z",
+ _et: "PrerenderingServiceTagPathLink",
+ _md: "2023-12-27T12:43:23.860Z",
+ data: {
+ key: "pb-menu",
+ path: "/not-found",
+ tenant: "root",
+ value: "main-menu"
+ }
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba28",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.045Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814bef4a940008b3ba28",
+ id: "6022814bef4a940008b3ba28#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.045Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 132767,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg",
+ "text@name": "environments.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#6022814bef4a940008b3ba28",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.045Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "6022814bef4a940008b3ba28",
+ id: "6022814bef4a940008b3ba28#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.045Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 132767,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg",
+ "text@name": "environments.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dac",
+ SK: "L",
+ TYPE: "cms.entry.l",
+ created: "2023-12-27T12:42:59.161Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "602281486ed41f0008bc2dac",
+ id: "602281486ed41f0008bc2dac#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.161Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 73153,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg",
+ "text@name": "data-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ PK: "T#root#L#en-US#CMS#CME#602281486ed41f0008bc2dac",
+ SK: "REV#0001",
+ TYPE: "cms.entry",
+ created: "2023-12-27T12:42:59.161Z",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entity: "CmsEntries",
+ entryId: "602281486ed41f0008bc2dac",
+ id: "602281486ed41f0008bc2dac#0001",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modified: "2023-12-27T12:42:59.161Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 73153,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg",
+ "text@name": "data-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ GSI1_PK: "T#root#ADMIN_USERS",
+ GSI1_SK: "admin@webiny.com",
+ PK: "T#root#ADMIN_USER#658c1b73c39bb10008431b44",
+ SK: "A",
+ TYPE: "adminUsers.user",
+ _ct: "2023-12-27T12:41:24.417Z",
+ _et: "AdminUsers.User",
+ _md: "2023-12-27T12:41:24.417Z",
+ data: {
+ createdBy: null,
+ createdOn: "2023-12-27T12:41:23.982Z",
+ displayName: "ad min",
+ email: "admin@webiny.com",
+ firstName: "ad",
+ group: "658c1b60c39bb10008431b42",
+ id: "658c1b73c39bb10008431b44",
+ lastName: "min",
+ tenant: "root",
+ webinyVersion: "5.38.2"
+ }
+ }
+];
diff --git a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-acosearchrecord-pbpage.ts b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-acosearchrecord-pbpage.ts
new file mode 100644
index 00000000000..6f2af35f719
--- /dev/null
+++ b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-acosearchrecord-pbpage.ts
@@ -0,0 +1,200 @@
+export const headlessCmsAcoSearchRecordPbPageMigrated = [
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:43:00.024Z",
+ entryId: "wby-aco-658c1bd3c39bb10008431b5c",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "wby-aco-658c1bd3c39bb10008431b5c#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ meta: {},
+ modelId: "acoSearchRecord-pbpage",
+ modifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ modifiedOn: "2023-12-27T12:43:00.024Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@data": {
+ "object@createdBy": {}
+ },
+ "object@location": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:43:00.024Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionModifiedOn: "2023-12-27T12:43:00.024Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:43:00.024Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:43:00.024Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "object@data": {
+ "boolean@locked": true,
+ "datetime@createdOn": "2023-12-27T12:42:59.964Z",
+ "datetime@savedOn": "2023-12-27T12:43:00.663Z",
+ "number@version": 1,
+ "object@createdBy": {
+ "text@displayName": "ad min",
+ "text@id": "658c1b73c39bb10008431b44",
+ "text@type": "admin"
+ },
+ "text@id": "658c1bd3c39bb10008431b5c#0001",
+ "text@path": "/not-found",
+ "text@pid": "658c1bd3c39bb10008431b5c",
+ "text@status": "published",
+ "text@title": "Not Found"
+ },
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@content":
+ "Not Found Page not found! Sorry, but the page you were looking for could not be found. TAKE ME HOme",
+ "text@tags": [],
+ "text@title": "Not Found",
+ "text@type": "PbPage"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:43:00.006Z",
+ entryId: "wby-aco-658c1bd3c39bb10008431b5b",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "wby-aco-658c1bd3c39bb10008431b5b#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ meta: {},
+ modelId: "acoSearchRecord-pbpage",
+ modifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ modifiedOn: "2023-12-27T12:43:00.006Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@data": {
+ "object@createdBy": {}
+ },
+ "object@location": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:43:00.006Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionModifiedOn: "2023-12-27T12:43:00.006Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:43:00.006Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:43:00.006Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "object@data": {
+ "boolean@locked": true,
+ "datetime@createdOn": "2023-12-27T12:42:59.947Z",
+ "datetime@savedOn": "2023-12-27T12:43:00.723Z",
+ "number@version": 1,
+ "object@createdBy": {
+ "text@displayName": "ad min",
+ "text@id": "658c1b73c39bb10008431b44",
+ "text@type": "admin"
+ },
+ "text@id": "658c1bd3c39bb10008431b5b#0001",
+ "text@path": "/welcome-to-webiny",
+ "text@pid": "658c1bd3c39bb10008431b5b",
+ "text@status": "published",
+ "text@title": "Welcome to Webiny"
+ },
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "text@content":
+ "Welcome to Webiny Welcome to Webiny Webiny makes it easy to build applications and websites on top of the serverless infrastructure by providing you with a ready-made CMS and a development framework. Scalable Webiny apps can scale to handle the most demanding workloads. No custom tooling required Webiny eliminates the need to build custom tooling to create serverless app Cost effective Webiny apps run on serverless infrastructure which costs 80% less than VMs Resolves serverless challenges Webiny removes all the challenges of building serverless applications Get to know Webiny products Architect. Code. Deploy. Webiny Serverless Application Framework Everything you need to create and deploy applications on top of the serverless infrastructure. Use it to build: Full-stack applicationsMulti-tenant solutions APIsMicroservice Learn more An easier way to build serverless apps There are many solutions that help you run, deploy and monitor serverless functions, but when it comes to actually coding one, there are none. Webiny is a solution that helps you code your serverless app by providing you with all the components like ACL, routing, file storage and many more. Framework features Users, groups, roles & scopes Security is a crucial layer in any application. Webiny includes a full-featured security module that's connected to the built-in GraphQL API.Users, groups, roles & scopes Scaffolding Quickly generate boilerplate code using CLI plugins. From lambda functions to new GraphQL APIs. Customizable security Use the default AWS Cognito, or replace with 3rd party identity providers like Okta, Auth0, etc. Using plugins you can make Webiny work with any identity provider. Multiple environments No code change goes directly into a production environment. Webiny CLI makes it easy to manage and create multiple environments for your project. One size doesn't fit all It's a very different set of requirements a technical team has to a marketing team to a business development team. Webiny Serverless CMS comes with several different apps you can use independently, or together as part of a cohesive solution. Webiny Serverless CMS A suite of applications to help you manage your content. Use it to build: Marketing sites Multi-website solutions Content hubs Multi-language sites Intranet portals Headless content models Learn more CMS benefits Scalable No matter the demand, Webiny Serverless CMS can easily scale to meet even the most challenging workloads. Adaptable Being an open-source project, it's easy to modify and adapt things to your own needs. Low cost of ownership Self-hosted on top of serverless infrastructure. No infrastructure to mange, less people required to operate and maintain. Secure Secured by AWS Cognito. It's also easy to integrate services like OKTA, Auth0 and similar. Data ownership Webiny is self-hosted, it means your data stays within your data center. Permission control Powerful options to control the permissions your users will have. They perfectly align with your business requirements. Serverless makes infrastructure easy, Webiny makes serverless easy 1. Developer-friendly Webiny has been made with the developer in mind. It helps them develop serverless applications with ease. 2. Open source Webiny is created and maintained by an amazing group of people. Being open source means Webiny grows and evolves much faster. Contributor are welcome. 3. Community We have an active community on slack. Talk to the core-team, and get help. Webiny team is always there for any questions. View Webiny on GitHub",
+ "text@tags": [],
+ "text@title": "Welcome to Webiny",
+ "text@type": "PbPage"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ }
+];
diff --git a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-fmfile.ts b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-fmfile.ts
new file mode 100644
index 00000000000..f10ae2611b2
--- /dev/null
+++ b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-fmfile.ts
@@ -0,0 +1,1605 @@
+export const headlessCmsFmFileMigrated = [
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "602282e07a77e60008f70d63",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "602282e07a77e60008f70d63#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 888,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602282e07a77e60008f70d63/welcome-to-webiny__hero-feature-card-bg.svg",
+ "text@name": "feature-card-bg.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814bef4a940008b3ba28",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814bef4a940008b3ba28#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 132767,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814bef4a940008b3ba28/welcome-to-webiny__environments.svg",
+ "text@name": "environments.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814bef4a940008b3ba27",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814bef4a940008b3ba27#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 17711,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814bef4a940008b3ba27/welcome-to-webiny__security.svg",
+ "text@name": "security.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814bef4a940008b3ba26",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814bef4a940008b3ba26#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 33888,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814bef4a940008b3ba26/welcome-to-webiny__scaffolding.svg",
+ "text@name": "scaffolding.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814b7a77e60008f70d62",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814b7a77e60008f70d62#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 1864,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814b7a77e60008f70d62/welcome-to-webiny__hero-block-bg.svg",
+ "text@name": "hero-block-bg.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814b0df4b000088735bc",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814b0df4b000088735bc#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 5053,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814b0df4b000088735bc/welcome-to-webiny__webiny-logo.svg",
+ "text@name": "webiny-logo.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814a0df4b000088735bb",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814a0df4b000088735bb#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 3661,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/6022814a0df4b000088735bb/welcome-to-webiny__webiny-serverless-application-framework.svg",
+ "text@name": "webiny-serverless-application-framework.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "60228148fa244d0008c47c7a",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "60228148fa244d0008c47c7a#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 17382,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228148fa244d0008c47c7a/welcome-to-webiny__community-icon.png",
+ "text@name": "community-icon.png",
+ "text@tags": [],
+ "text@type": "image/png"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "60228148fa244d0008c47c79",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "60228148fa244d0008c47c79#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 7806,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228148fa244d0008c47c79/welcome-to-webiny__scalable-icon.svg",
+ "text@name": "scalable-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "60228148f98841000981c724",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "60228148f98841000981c724#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 27878,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg",
+ "text@name": "idp.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "60228148f98841000981c723",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "60228148f98841000981c723#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 390,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228148f98841000981c723/welcome-to-webiny__pink-shape.svg",
+ "text@name": "pink-shape.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814891bd1300087bd24c",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814891bd1300087bd24c#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 90163,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/6022814891bd1300087bd24c/welcome-to-webiny__webiny-infrastructure-overview.svg",
+ "text@name": "webiny-infrastructure-overview.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "602281486ed41f0008bc2dad",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "602281486ed41f0008bc2dad#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 108898,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486ed41f0008bc2dad/welcome-to-webiny__webiny-serverless-cms.png",
+ "text@name": "webiny-serverless-cms.png ",
+ "text@tags": [],
+ "text@type": "image/png"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "602281486ed41f0008bc2dac",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "602281486ed41f0008bc2dac#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 73153,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/602281486ed41f0008bc2dac/welcome-to-webiny__data-icon.svg",
+ "text@name": "data-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "602281486ed41f0008bc2dab",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "602281486ed41f0008bc2dab#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 67402,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486ed41f0008bc2dab/welcome-to-webiny__permission-icon.svg",
+ "text@name": "permission-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "602281486639200009fd35ec",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "602281486639200009fd35ec#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 392,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486639200009fd35ec/welcome-to-webiny__cms-benefits-shape.svg",
+ "text@name": "cms-benefits-shape.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "602281486639200009fd35eb",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "602281486639200009fd35eb#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 1758,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key":
+ "demo-pages/602281486639200009fd35eb/welcome-to-webiny__serverless-cms-logo.svg",
+ "text@name": "serverless-cms-logo.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "6022814851197600081724ae",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "6022814851197600081724ae#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 60602,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/6022814851197600081724ae/welcome-to-webiny__cost-icon.svg",
+ "text@name": "cost-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "60228145f98841000981c721",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "60228145f98841000981c721#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 27804,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228145f98841000981c721/welcome-to-webiny__developer.svg",
+ "text@name": "developer.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "60228145f98841000981c720",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "60228145f98841000981c720#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 28918,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228145f98841000981c720/welcome-to-webiny__adaptable-icon.svg",
+ "text@name": "adaptable-icon.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T12:42:58.754Z",
+ entryId: "60228145f98841000981c71f",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "60228145f98841000981c71f#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "fmFile",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "object@location": {},
+ "object@meta": {}
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T12:42:58.754Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T12:42:58.754Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T12:42:58.754Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "number@size": 30007,
+ "object@location": {
+ "text@folderId": "root"
+ },
+ "object@meta": {
+ "boolean@private": true
+ },
+ "text@aliases": [],
+ "text@key": "demo-pages/60228145f98841000981c71f/welcome-to-webiny__octo-cat.svg",
+ "text@name": "octo-cat.svg",
+ "text@tags": [],
+ "text@type": "image/svg+xml"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ }
+];
diff --git a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-modela.ts b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-modela.ts
new file mode 100644
index 00000000000..d5a5ae100dc
--- /dev/null
+++ b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-modela.ts
@@ -0,0 +1,545 @@
+export const headlessCmsModelAMigrated = [
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:42.180Z",
+ entryId: "658c24aa6607be00087f1169",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "658c24aa6607be00087f1169#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ modelId: "modelA",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:42.180Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:42.180Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:42.180Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": "",
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 4"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:33.775Z",
+ entryId: "658c24a16607be00087f1168",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:34.175Z",
+ id: "658c24a16607be00087f1168#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:34.175Z",
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:20:34.175Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:33.775Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:34.175Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:34.175Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:34.175Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:34.175Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 2",
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 3"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.p",
+ __type: "cms.entry.p",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:33.775Z",
+ entryId: "658c24a16607be00087f1168",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:34.175Z",
+ id: "658c24a16607be00087f1168#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:34.175Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ published: true,
+ publishedOn: "2023-12-27T13:20:34.175Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:33.775Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:34.175Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:34.175Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:34.175Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:34.175Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 2",
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 3"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:25.235Z",
+ entryId: "658c24996607be00087f1167",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:25.701Z",
+ id: "658c24996607be00087f1167#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:25.701Z",
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:20:25.701Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:25.235Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:25.701Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:25.701Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:25.701Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:25.701Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 2",
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 2"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.p",
+ __type: "cms.entry.p",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:25.235Z",
+ entryId: "658c24996607be00087f1167",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:25.701Z",
+ id: "658c24996607be00087f1167#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:25.701Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ published: true,
+ publishedOn: "2023-12-27T13:20:25.701Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:25.235Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:25.701Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:25.701Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:25.701Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:25.701Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 2",
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 2"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:11.821Z",
+ entryId: "658c248b6607be00087f1166",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:12.775Z",
+ id: "658c248b6607be00087f1166#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:12.775Z",
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:20:12.775Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:11.821Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:12.775Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:12.775Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:12.775Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:12.775Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 1",
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 1"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.p",
+ __type: "cms.entry.p",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:20:11.821Z",
+ entryId: "658c248b6607be00087f1166",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:20:12.775Z",
+ id: "658c248b6607be00087f1166#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:20:12.775Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelA",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ published: true,
+ publishedOn: "2023-12-27T13:20:12.775Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:20:11.821Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:20:12.775Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:20:12.775Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:20:12.775Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:20:12.775Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@z2tdm05d": "DDB+ES - Model A Entry 1",
+ "text@f2qcuuzs": "DDB+ES - Model A Entry 1"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ }
+];
diff --git a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-modelb.ts b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-modelb.ts
new file mode 100644
index 00000000000..eeedafac38e
--- /dev/null
+++ b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/migrated/001.es-index-root-headless-cms-en-us-modelb.ts
@@ -0,0 +1,236 @@
+export const headlessCmsModelBMigrated = [
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:22:57.094Z",
+ entryId: "658c2531adbc1700090e1ad2",
+ firstPublishedBy: null,
+ firstPublishedOn: null,
+ id: "658c2531adbc1700090e1ad2#0001",
+ lastPublishedBy: null,
+ lastPublishedOn: null,
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: false,
+ meta: {},
+ modelId: "modelB",
+ modifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ modifiedOn: "2023-12-27T13:23:15.536Z",
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ rawValues: {
+ "file@5atpz8nu": null
+ },
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:22:57.094Z",
+ revisionFirstPublishedBy: null,
+ revisionFirstPublishedOn: null,
+ revisionLastPublishedBy: null,
+ revisionLastPublishedOn: null,
+ revisionModifiedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionModifiedOn: "2023-12-27T13:23:15.536Z",
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:23:15.536Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:23:15.536Z",
+ status: "draft",
+ tenant: "root",
+ values: {
+ "long-text@7c5t8wwa": "DDB+ES - Model B Entry 2 UPDATED",
+ "text@4dep2w2h": "DDB+ES - Model B Entry 2 UPDATED"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.l",
+ __type: "cms.entry.l",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:22:44.672Z",
+ entryId: "658c2524adbc1700090e1ad1",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:22:46.091Z",
+ id: "658c2524adbc1700090e1ad1#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:22:46.091Z",
+ latest: true,
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelB",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ publishedOn: "2023-12-27T13:22:46.091Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:22:44.672Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:22:46.091Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:22:46.091Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:22:46.091Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:22:46.091Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@7c5t8wwa": "DDB+ES - Model B Entry 1",
+ "text@4dep2w2h": "DDB+ES - Model B Entry 1"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ },
+ {
+ TYPE: "cms.entry.p",
+ __type: "cms.entry.p",
+ createdBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ createdOn: "2023-12-27T13:22:44.672Z",
+ entryId: "658c2524adbc1700090e1ad1",
+ firstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ firstPublishedOn: "2023-12-27T13:22:46.091Z",
+ id: "658c2524adbc1700090e1ad1#0001",
+ lastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ lastPublishedOn: "2023-12-27T13:22:46.091Z",
+ locale: "en-US",
+ location: {
+ folderId: "root"
+ },
+ locked: true,
+ modelId: "modelB",
+ modifiedBy: null,
+ modifiedOn: null,
+ ownedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ published: true,
+ publishedOn: "2023-12-27T13:22:46.091Z",
+ rawValues: {},
+ revisionCreatedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionCreatedOn: "2023-12-27T13:22:44.672Z",
+ revisionFirstPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionFirstPublishedOn: "2023-12-27T13:22:46.091Z",
+ revisionLastPublishedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionLastPublishedOn: "2023-12-27T13:22:46.091Z",
+ revisionModifiedBy: null,
+ revisionModifiedOn: null,
+ revisionSavedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ revisionSavedOn: "2023-12-27T13:22:46.091Z",
+ savedBy: {
+ displayName: "ad min",
+ id: "658c1b73c39bb10008431b44",
+ type: "admin"
+ },
+ savedOn: "2023-12-27T13:22:46.091Z",
+ status: "published",
+ tenant: "root",
+ values: {
+ "long-text@7c5t8wwa": "DDB+ES - Model B Entry 1",
+ "text@4dep2w2h": "DDB+ES - Model B Entry 1"
+ },
+ version: 1,
+ webinyVersion: "5.38.2"
+ }
+];
diff --git a/packages/migrations/src/ddb-es.ts b/packages/migrations/src/ddb-es.ts
index 9c6872569e4..830549d3b37 100644
--- a/packages/migrations/src/ddb-es.ts
+++ b/packages/migrations/src/ddb-es.ts
@@ -5,24 +5,34 @@ import { AdminUsers_5_35_0_003 } from "~/migrations/5.35.0/003";
import { Tenancy_5_35_0_004 } from "~/migrations/5.35.0/004";
import { CmsModels_5_35_0_005 } from "~/migrations/5.35.0/005";
import { AcoRecords_5_35_0_006 } from "~/migrations/5.35.0/006/ddb-es";
+
// 5.36.0
import { AcoRecords_5_36_0_001 } from "~/migrations/5.36.0/001/ddb-es";
+
// 5.37.0
import { TenantLinkRecords_5_37_0_001 } from "~/migrations/5.37.0/001";
import { CmsEntriesRootFolder_5_37_0_002 } from "~/migrations/5.37.0/002/ddb-es";
import { AcoFolders_5_37_0_003 } from "~/migrations/5.37.0/003/ddb-es";
import { AcoRecords_5_37_0_004 } from "~/migrations/5.37.0/004/ddb-es";
import { FileManager_5_37_0_005 } from "~/migrations/5.37.0/005/ddb-es";
+
// 5.38.0
import { MultiStepForms_5_38_0_001 } from "~/migrations/5.38.0/001/ddb-es";
import { MultiStepForms_5_38_0_002 } from "~/migrations/5.38.0/002/ddb-es";
// Page Blocks storage is the same for both DDB abd DDB-ES projects.
import { PageBlocks_5_38_0_003 } from "~/migrations/5.38.0/003/ddb";
+
// 5.39.0
-import { CmsEntriesInitNewMetaFields_5_39_0_001 } from "~/migrations/5.39.0/001/ddb-es";
+// Because of the 5.39.6-001 migration, this one is no longer needed.
+// import { CmsEntriesInitNewMetaFields_5_39_0_001 } from "~/migrations/5.39.0/001/ddb-es";
import { FileManager_5_39_0_002 } from "~/migrations/5.39.0/002/ddb-es";
+
// 5.39.2
-import { CmsEntriesInitNewMetaFields_5_39_2_001 } from "~/migrations/5.39.2/001/ddb-es";
+// Because of the 5.39.6-001 migration, this one is no longer needed.
+// import { CmsEntriesInitNewMetaFields_5_39_2_001 } from "~/migrations/5.39.2/001/ddb-es";
+
+// 5.39.6
+import { CmsEntriesInitNewMetaFields_5_39_6_001 } from "~/migrations/5.39.6/001/ddb-es";
export const migrations = () => {
return [
@@ -33,22 +43,32 @@ export const migrations = () => {
Tenancy_5_35_0_004,
CmsModels_5_35_0_005,
AcoRecords_5_35_0_006,
+
// 5.36.0
AcoRecords_5_36_0_001,
+
// 5.37.0
TenantLinkRecords_5_37_0_001,
CmsEntriesRootFolder_5_37_0_002,
AcoFolders_5_37_0_003,
AcoRecords_5_37_0_004,
FileManager_5_37_0_005,
+
// 5.38.0
MultiStepForms_5_38_0_001,
MultiStepForms_5_38_0_002,
PageBlocks_5_38_0_003,
+
// 5.39.0
- CmsEntriesInitNewMetaFields_5_39_0_001,
+ // Because of the 5.39.6-001 migration, this one is no longer needed.
+ // CmsEntriesInitNewMetaFields_5_39_0_001,
FileManager_5_39_0_002,
+
// 5.39.2
- CmsEntriesInitNewMetaFields_5_39_2_001
+ // Because of the 5.39.6-001 migration, this one is no longer needed.
+ // CmsEntriesInitNewMetaFields_5_39_2_001
+
+ // 5.39.6
+ CmsEntriesInitNewMetaFields_5_39_6_001
];
};
diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/ensureAllNonNullableValues.ts b/packages/migrations/src/migrations/5.39.0/001/utils/ensureAllNonNullableValues.ts
new file mode 100644
index 00000000000..ddcf42ed155
--- /dev/null
+++ b/packages/migrations/src/migrations/5.39.0/001/utils/ensureAllNonNullableValues.ts
@@ -0,0 +1,60 @@
+import { CmsEntry } from "~/migrations/5.39.0/001/types";
+import { CmsIdentity } from "@webiny/api-headless-cms/types";
+
+interface Fallbacks {
+ dateTime: string;
+ identity: CmsIdentity;
+}
+
+// All non-nullable meta fields must have values assigned.
+export const ensureAllNonNullableValues = (entry: CmsEntry, fallbacks: Fallbacks) => {
+ const entryFallbackDateTime =
+ entry.savedOn ||
+ entry.modifiedOn ||
+ entry.createdOn ||
+ entry.revisionCreatedOn ||
+ entry.revisionModifiedOn ||
+ entry.revisionSavedOn ||
+ fallbacks.dateTime;
+
+ const entryFallbackIdentity =
+ entry.savedBy ||
+ entry.modifiedBy ||
+ entry.createdBy ||
+ entry.revisionCreatedBy ||
+ entry.revisionModifiedBy ||
+ entry.revisionSavedBy ||
+ fallbacks.identity;
+
+ if (!entry.revisionCreatedOn) {
+ entry.revisionCreatedOn = entryFallbackDateTime;
+ }
+
+ if (!entry.revisionSavedOn) {
+ entry.revisionSavedOn = entryFallbackDateTime;
+ }
+
+ if (!entry.revisionCreatedBy) {
+ entry.revisionCreatedBy = entryFallbackIdentity;
+ }
+
+ if (!entry.revisionSavedBy) {
+ entry.revisionSavedBy = entryFallbackIdentity;
+ }
+
+ if (!entry.createdOn) {
+ entry.createdOn = entryFallbackDateTime;
+ }
+
+ if (!entry.savedOn) {
+ entry.savedOn = entryFallbackDateTime;
+ }
+
+ if (!entry.createdBy) {
+ entry.createdBy = entryFallbackIdentity;
+ }
+
+ if (!entry.savedBy) {
+ entry.savedBy = entryFallbackIdentity;
+ }
+};
diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/getFallbackIdentity.ts b/packages/migrations/src/migrations/5.39.0/001/utils/getFallbackIdentity.ts
new file mode 100644
index 00000000000..a06f016a298
--- /dev/null
+++ b/packages/migrations/src/migrations/5.39.0/001/utils/getFallbackIdentity.ts
@@ -0,0 +1,58 @@
+import { CmsIdentity } from "@webiny/api-headless-cms/types";
+import { queryAll } from "@webiny/db-dynamodb";
+import { Entity } from "@webiny/db-dynamodb/toolbox";
+
+const NON_EXISTING_DATA_MIGRATION_IDENTITY: CmsIdentity = {
+ id: "data-migration",
+ type: "data-migration",
+ displayName: "Data Migration"
+};
+
+interface GetFallbackIdentityParams {
+ entity: Entity;
+ tenant: string;
+}
+
+interface AdminUserRecord {
+ data: {
+ createdOn: string;
+ id: string;
+ displayName: string;
+ };
+}
+
+const identitiesPerTenantCache: Record = {};
+
+export const getFallbackIdentity = async ({
+ entity,
+ tenant
+}: GetFallbackIdentityParams): Promise => {
+ if (identitiesPerTenantCache[tenant]) {
+ return identitiesPerTenantCache[tenant];
+ }
+
+ const allAdminUsersRecords = await queryAll({
+ entity,
+ partitionKey: `T#${tenant}#ADMIN_USERS`,
+ options: {
+ index: "GSI1"
+ }
+ });
+
+ if (allAdminUsersRecords.length === 0) {
+ // Hopefully it doesn't come to this, but we still need to consider it.
+ return NON_EXISTING_DATA_MIGRATION_IDENTITY;
+ }
+
+ const [oldestAdminUser] = allAdminUsersRecords.sort((prev, next) => {
+ return prev.data.createdOn < next.data.createdOn ? -1 : 1;
+ });
+
+ identitiesPerTenantCache[tenant] = {
+ id: oldestAdminUser.data.id,
+ type: "admin",
+ displayName: oldestAdminUser.data.displayName
+ };
+
+ return identitiesPerTenantCache[tenant];
+};
diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/hasAllNonNullableValues.ts b/packages/migrations/src/migrations/5.39.0/001/utils/hasAllNonNullableValues.ts
new file mode 100644
index 00000000000..a3d97e5920a
--- /dev/null
+++ b/packages/migrations/src/migrations/5.39.0/001/utils/hasAllNonNullableValues.ts
@@ -0,0 +1,20 @@
+import { CmsEntry } from "~/migrations/5.39.0/001/types";
+import {
+ EntryMetaFieldName,
+ isNonNullableEntryMetaField,
+ pickEntryMetaFields
+} from "@webiny/api-headless-cms/constants";
+
+export const hasAllNonNullableValues = (entry: CmsEntry) => {
+ // Only `modifiedX` and `publishedX` fields are nullable.
+ const nonNullableMetaFields = pickEntryMetaFields(entry, isNonNullableEntryMetaField);
+
+ for (const fieldName in nonNullableMetaFields) {
+ const value = nonNullableMetaFields[fieldName as EntryMetaFieldName];
+ if (!value) {
+ return false;
+ }
+ }
+
+ return true;
+};
diff --git a/packages/migrations/src/migrations/5.39.2/001/ddb-es/utils/hasValidTypeFieldValue.ts b/packages/migrations/src/migrations/5.39.0/001/utils/hasValidTypeFieldValue.ts
similarity index 100%
rename from packages/migrations/src/migrations/5.39.2/001/ddb-es/utils/hasValidTypeFieldValue.ts
rename to packages/migrations/src/migrations/5.39.0/001/utils/hasValidTypeFieldValue.ts
diff --git a/packages/migrations/src/migrations/5.39.2/001/ddb-es/index.ts b/packages/migrations/src/migrations/5.39.2/001/ddb-es/index.ts
index 23775a42076..93a61137087 100644
--- a/packages/migrations/src/migrations/5.39.2/001/ddb-es/index.ts
+++ b/packages/migrations/src/migrations/5.39.2/001/ddb-es/index.ts
@@ -32,7 +32,7 @@ import { fixTypeFieldValue } from "~/migrations/5.39.0/001/utils/fixTypeFieldVal
import { isMigratedEntry } from "~/migrations/5.39.0/001/utils/isMigratedEntry";
import { getOldestRevisionCreatedOn } from "~/migrations/5.39.0/001/utils/getOldestRevisionCreatedOn";
import { getFirstLastPublishedOnBy } from "~/migrations/5.39.0/001/utils/getFirstLastPublishedOn";
-import { hasValidTypeFieldValue } from "~/migrations/5.39.2/001/ddb-es/utils/hasValidTypeFieldValue";
+import { hasValidTypeFieldValue } from "~/migrations/5.39.0/001/utils/hasValidTypeFieldValue";
import { ScanDbItem } from "@webiny/db-dynamodb";
interface LastEvaluatedKey {
@@ -124,7 +124,7 @@ export class CmsEntriesInitNewMetaFields_5_39_2_001 implements DataMigration {
return true;
}
- logger.info(`CMS entries already upgraded. skipping...`);
+ logger.info(`CMS entries already upgraded. Skipping...`);
return false;
}
diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/index.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/index.ts
new file mode 100644
index 00000000000..b095e63c247
--- /dev/null
+++ b/packages/migrations/src/migrations/5.39.6/001/ddb-es/index.ts
@@ -0,0 +1,452 @@
+import { Table } from "@webiny/db-dynamodb/toolbox";
+import {
+ DataMigration,
+ DataMigrationContext,
+ ElasticsearchClientSymbol,
+ ElasticsearchDynamoTableSymbol,
+ PrimaryDynamoTableSymbol
+} from "@webiny/data-migration";
+import {
+ batchReadAll,
+ BatchReadItem,
+ batchWriteAll,
+ BatchWriteItem,
+ ddbScanWithCallback,
+ disableElasticsearchIndexing,
+ esGetIndexName,
+ fetchOriginalElasticsearchSettings,
+ restoreOriginalElasticsearchSettings
+} from "~/utils";
+import { inject, makeInjectable } from "@webiny/ioc";
+import { Client } from "@elastic/elasticsearch";
+import { executeWithRetry } from "@webiny/utils";
+import {
+ createDdbEntryEntity,
+ createDdbEsEntryEntity
+} from "~/migrations/5.39.0/001/entities/createEntryEntity";
+import { CmsEntry } from "~/migrations/5.39.0/001/types";
+import { getDecompressedData } from "~/migrations/5.39.0/001/utils/getDecompressedData";
+import { getCompressedData } from "~/migrations/5.39.0/001/utils/getCompressedData";
+import { assignNewMetaFields } from "~/migrations/5.39.0/001/utils/assignNewMetaFields";
+import { fixTypeFieldValue } from "~/migrations/5.39.0/001/utils/fixTypeFieldValue";
+import { getOldestRevisionCreatedOn } from "~/migrations/5.39.0/001/utils/getOldestRevisionCreatedOn";
+import { getFirstLastPublishedOnBy } from "~/migrations/5.39.0/001/utils/getFirstLastPublishedOn";
+import { hasValidTypeFieldValue } from "~/migrations/5.39.0/001/utils/hasValidTypeFieldValue";
+import { hasAllNonNullableValues } from "~/migrations/5.39.0/001/utils/hasAllNonNullableValues";
+import { isMigratedEntry } from "~/migrations/5.39.0/001/utils/isMigratedEntry";
+import { getFallbackIdentity } from "~/migrations/5.39.0/001/utils/getFallbackIdentity";
+import { ensureAllNonNullableValues } from "~/migrations/5.39.0/001/utils/ensureAllNonNullableValues";
+import { ScanDbItem } from "@webiny/db-dynamodb";
+
+interface LastEvaluatedKey {
+ PK: string;
+ SK: string;
+ GSI1_PK: string;
+ GSI1_SK: string;
+}
+
+interface IndexSettings {
+ number_of_replicas: number;
+ refresh_interval: `${number}s`;
+}
+
+interface CmsEntriesRootFolderDataMigrationCheckpoint {
+ lastEvaluatedKey?: LastEvaluatedKey | boolean;
+ indexes: {
+ [index: string]: IndexSettings | null;
+ };
+}
+
+interface DynamoDbElasticsearchRecord {
+ PK: string;
+ SK: string;
+ data: string;
+}
+
+export class CmsEntriesInitNewMetaFields_5_39_6_001 implements DataMigration {
+ private readonly elasticsearchClient: Client;
+ private readonly ddbEntryEntity: ReturnType;
+ private readonly ddbEsEntryEntity: ReturnType;
+
+ public constructor(
+ table: Table,
+ esTable: Table,
+ elasticsearchClient: Client
+ ) {
+ this.elasticsearchClient = elasticsearchClient;
+ this.ddbEntryEntity = createDdbEntryEntity(table);
+ this.ddbEsEntryEntity = createDdbEsEntryEntity(esTable);
+ }
+
+ getId() {
+ return "5.39.6-001";
+ }
+
+ getDescription() {
+ return "Write new revision and entry-level on/by meta fields.";
+ }
+
+ async shouldExecute({ logger }: DataMigrationContext): Promise {
+ let shouldExecute = false;
+
+ await ddbScanWithCallback>(
+ {
+ entity: this.ddbEntryEntity,
+ options: {
+ filters: [
+ {
+ attr: "_et",
+ eq: "CmsEntries"
+ }
+ ],
+ limit: 100
+ }
+ },
+ async result => {
+ if (result.error) {
+ logger.error(result.error);
+ throw new Error(result.error);
+ }
+
+ for (const item of result.items) {
+ const isFullyMigrated =
+ isMigratedEntry(item) &&
+ hasValidTypeFieldValue(item) &&
+ hasAllNonNullableValues(item);
+
+ if (!isFullyMigrated) {
+ shouldExecute = true;
+
+ // Stop further scanning.
+ return false;
+ }
+ }
+
+ // Continue further scanning.
+ return true;
+ }
+ );
+
+ if (shouldExecute) {
+ return true;
+ }
+
+ logger.info(`CMS entries already upgraded. Skipping...`);
+ return false;
+ }
+
+ async execute({
+ logger,
+ ...context
+ }: DataMigrationContext): Promise {
+ const migrationStatus =
+ context.checkpoint || ({} as CmsEntriesRootFolderDataMigrationCheckpoint);
+
+ if (migrationStatus.lastEvaluatedKey === true) {
+ await restoreOriginalElasticsearchSettings({
+ indexSettings: migrationStatus.indexes,
+ logger,
+ elasticsearchClient: this.elasticsearchClient
+ });
+ logger.info(`Migration completed, no need to start again.`);
+ return;
+ }
+
+ let usingKey = "";
+ if (migrationStatus?.lastEvaluatedKey) {
+ usingKey = JSON.stringify(migrationStatus.lastEvaluatedKey);
+ }
+
+ logger.trace(`Scanning primary DynamoDB table.`, {
+ usingKey
+ });
+
+ let currentDdbScanIteration = 0;
+
+ await ddbScanWithCallback(
+ {
+ entity: this.ddbEntryEntity,
+ options: {
+ filters: [
+ {
+ attr: "_et",
+ eq: "CmsEntries"
+ }
+ ],
+ startKey: migrationStatus.lastEvaluatedKey || undefined,
+ limit: 100
+ }
+ },
+ async result => {
+ currentDdbScanIteration++;
+
+ logger.trace(`Primary DynamoDB table scan iteration: ${currentDdbScanIteration}.`);
+ logger.trace(`Analyzing ${result.items.length} record(s)...`);
+
+ const ddbItems: BatchWriteItem[] = [];
+ const ddbEsItems: BatchWriteItem[] = [];
+ const ddbEsGetItems: Record = {};
+
+ const fallbackDateTime = new Date().toISOString();
+
+ // Update records in primary DynamoDB table. Also do preparations for
+ // subsequent updates on DDB-ES DynamoDB table, and in Elasticsearch.
+ for (const item of result.items) {
+ const index = esGetIndexName({
+ tenant: item.tenant,
+ locale: item.locale,
+ type: item.modelId,
+ isHeadlessCmsModel: true
+ });
+
+ // Check ES index settings.
+ if (!migrationStatus.indexes || migrationStatus.indexes[index] === undefined) {
+ // We need to fetch the index settings first
+ const settings = await fetchOriginalElasticsearchSettings({
+ index,
+ logger,
+ elasticsearchClient: this.elasticsearchClient
+ });
+
+ // ... add it to the checkpoint...
+ migrationStatus.indexes = {
+ ...migrationStatus.indexes,
+ [index]: settings
+ };
+ // and then set not to index
+ await disableElasticsearchIndexing({
+ elasticsearchClient: this.elasticsearchClient,
+ index,
+ logger
+ });
+ }
+
+ // 1. Check if the data migration was ever performed. If not, let's perform it.
+ if (!isMigratedEntry(item)) {
+ // Get the oldest revision's `createdOn` value. We use that to set the entry-level `createdOn` value.
+ const createdOn = await getOldestRevisionCreatedOn({
+ entry: item,
+ entryEntity: this.ddbEntryEntity
+ });
+
+ const firstLastPublishedOnByFields = await getFirstLastPublishedOnBy({
+ entry: item,
+ entryEntity: this.ddbEntryEntity
+ });
+
+ assignNewMetaFields(item, {
+ createdOn,
+ ...firstLastPublishedOnByFields
+ });
+ }
+
+ // 2. We've noticed some of the records had an invalid `TYPE` field value
+ // in the database. This step addresses this issue.
+ if (!hasValidTypeFieldValue(item)) {
+ // Fixes the value of the `TYPE` field, if it's not valid.
+ fixTypeFieldValue(item);
+ }
+
+ // 3. Finally, once both of the steps were performed, ensure that all
+ // new non-nullable meta fields have a value and nothing is missing.
+ if (!hasAllNonNullableValues(item)) {
+ logger.trace(
+ `Detected an entry with missing values for non-nullable meta fields (${item.modelId}/${item.id}).`
+ );
+
+ try {
+ const fallbackIdentity = await getFallbackIdentity({
+ entity: this.ddbEntryEntity,
+ tenant: item.tenant
+ });
+
+ ensureAllNonNullableValues(item, {
+ dateTime: fallbackDateTime,
+ identity: fallbackIdentity
+ });
+
+ logger.trace(
+ `Successfully ensured all non-nullable meta fields have values (${item.modelId}/${item.id}). Will be saving into the database soon.`
+ );
+ } catch (e) {
+ logger.debug(
+ `Failed to ensure all non-nullable meta fields have values (${item.modelId}/${item.id}): ${e.message}`
+ );
+ }
+ }
+
+ ddbItems.push(this.ddbEntryEntity.putBatch(item));
+
+ /**
+ * Prepare the loading of DynamoDB Elasticsearch part of the records.
+ */
+ if (ddbEsGetItems[`${item.entryId}:L`]) {
+ continue;
+ }
+
+ ddbEsGetItems[`${item.entryId}:L`] = this.ddbEsEntryEntity.getBatch({
+ PK: item.PK,
+ SK: "L"
+ });
+
+ if (item.status === "published" || !!item.locked) {
+ ddbEsGetItems[`${item.entryId}:P`] = this.ddbEsEntryEntity.getBatch({
+ PK: item.PK,
+ SK: "P"
+ });
+ }
+ }
+
+ /**
+ * Get all the records from DynamoDB Elasticsearch.
+ */
+ const ddbEsRecords = await batchReadAll({
+ table: this.ddbEsEntryEntity.table,
+ items: Object.values(ddbEsGetItems)
+ });
+
+ for (const ddbEsRecord of ddbEsRecords) {
+ const decompressedData = await getDecompressedData(ddbEsRecord.data);
+ if (!decompressedData) {
+ logger.trace(
+ `[DDB-ES Table] Skipping record "${ddbEsRecord.PK}" as it is not a valid CMS entry...`
+ );
+ continue;
+ }
+
+ // 1. Check if the data migration was ever performed. If not, let's perform it.
+ if (!isMigratedEntry(decompressedData)) {
+ // Get the oldest revision's `createdOn` value. We use that to set the entry-level `createdOn` value.
+ const createdOn = await getOldestRevisionCreatedOn({
+ entry: { ...decompressedData, PK: ddbEsRecord.PK },
+ entryEntity: this.ddbEntryEntity
+ });
+
+ const firstLastPublishedOnByFields = await getFirstLastPublishedOnBy({
+ entry: { ...decompressedData, PK: ddbEsRecord.PK },
+ entryEntity: this.ddbEntryEntity
+ });
+
+ assignNewMetaFields(decompressedData, {
+ createdOn,
+ ...firstLastPublishedOnByFields
+ });
+ }
+
+ // 2. Ensure new non-nullable meta fields have a value and nothing is missing.
+ if (!hasAllNonNullableValues(decompressedData)) {
+ logger.trace(
+ [
+ "[DDB-ES Table] Detected an entry with missing values for non-nullable meta fields",
+ `(${decompressedData.modelId}/${decompressedData.id}).`
+ ].join(" ")
+ );
+
+ try {
+ const fallbackIdentity = await getFallbackIdentity({
+ entity: this.ddbEntryEntity,
+ tenant: decompressedData.tenant
+ });
+
+ ensureAllNonNullableValues(decompressedData, {
+ dateTime: fallbackDateTime,
+ identity: fallbackIdentity
+ });
+
+ logger.trace(
+ [
+ "[DDB-ES Table] Successfully ensured all non-nullable meta fields",
+ `have values (${decompressedData.modelId}/${decompressedData.id}).`,
+ "Will be saving the changes soon."
+ ].join(" ")
+ );
+ } catch (e) {
+ logger.debug(
+ [
+ "[DDB-ES Table] Failed to ensure all non-nullable meta fields have values",
+ `(${decompressedData.modelId}/${decompressedData.id}): ${e.message}`
+ ].join(" ")
+ );
+ }
+ }
+
+ const compressedData = await getCompressedData(decompressedData);
+
+ ddbEsItems.push(
+ this.ddbEsEntryEntity.putBatch({
+ ...ddbEsRecord,
+ data: compressedData
+ })
+ );
+ }
+
+ // Store data in primary DynamoDB table.
+ const execute = () => {
+ return batchWriteAll({
+ table: this.ddbEntryEntity.table,
+ items: ddbItems
+ });
+ };
+
+ logger.trace("Storing records in primary DynamoDB table...");
+ await executeWithRetry(execute, {
+ onFailedAttempt: error => {
+ logger.error(
+ `"batchWriteAll" attempt #${error.attemptNumber} failed: ${error.message}`
+ );
+ }
+ });
+ logger.trace("...stored.");
+
+ // Store data in DDB-ES DynamoDB table.
+ const executeDdbEs = () => {
+ return batchWriteAll({
+ table: this.ddbEsEntryEntity.table,
+ items: ddbEsItems
+ });
+ };
+
+ logger.trace("Storing records in DDB-ES DynamoDB table...");
+ await executeWithRetry(executeDdbEs, {
+ onFailedAttempt: error => {
+ logger.error(
+ `"batchWriteAll ddb-es" attempt #${error.attemptNumber} failed: ${error.message}`
+ );
+ }
+ });
+ logger.trace("...stored.");
+
+ // Update checkpoint after every batch.
+ migrationStatus.lastEvaluatedKey = result.lastEvaluatedKey?.PK
+ ? (result.lastEvaluatedKey as unknown as LastEvaluatedKey)
+ : true;
+
+ // Check if we should store checkpoint and exit.
+ if (context.runningOutOfTime()) {
+ await context.createCheckpointAndExit(migrationStatus);
+ } else {
+ await context.createCheckpoint(migrationStatus);
+ }
+ }
+ );
+
+ /**
+ * This is the end of the migration.
+ */
+ await restoreOriginalElasticsearchSettings({
+ indexSettings: migrationStatus.indexes,
+ logger,
+ elasticsearchClient: this.elasticsearchClient
+ });
+
+ migrationStatus.lastEvaluatedKey = true;
+ migrationStatus.indexes = {};
+ context.createCheckpoint(migrationStatus);
+ }
+}
+
+makeInjectable(CmsEntriesInitNewMetaFields_5_39_6_001, [
+ inject(PrimaryDynamoTableSymbol),
+ inject(ElasticsearchDynamoTableSymbol),
+ inject(ElasticsearchClientSymbol)
+]);
From a065b88bde4ccf75a0f7fe77eee6959cb3fdcfc6 Mon Sep 17 00:00:00 2001
From: adrians5j
Date: Wed, 8 May 2024 15:01:45 +0200
Subject: [PATCH 02/26] fix: skip migrating if a record is fully migrated
---
.../migrations/src/migrations/5.39.6/001/ddb-es/index.ts | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/index.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/index.ts
index b095e63c247..fdf0511cd89 100644
--- a/packages/migrations/src/migrations/5.39.6/001/ddb-es/index.ts
+++ b/packages/migrations/src/migrations/5.39.6/001/ddb-es/index.ts
@@ -192,6 +192,15 @@ export class CmsEntriesInitNewMetaFields_5_39_6_001 implements DataMigration {
// Update records in primary DynamoDB table. Also do preparations for
// subsequent updates on DDB-ES DynamoDB table, and in Elasticsearch.
for (const item of result.items) {
+ const isFullyMigrated =
+ isMigratedEntry(item) &&
+ hasValidTypeFieldValue(item) &&
+ hasAllNonNullableValues(item);
+
+ if (isFullyMigrated) {
+ continue;
+ }
+
const index = esGetIndexName({
tenant: item.tenant,
locale: item.locale,
From 9d894896e1733de662036c263a9ae9c46c966069 Mon Sep 17 00:00:00 2001
From: adrians5j
Date: Wed, 8 May 2024 19:23:07 +0200
Subject: [PATCH 03/26] fix: ensure all fields are always included in the
result
---
packages/api-headless-cms/src/constants.ts | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/packages/api-headless-cms/src/constants.ts b/packages/api-headless-cms/src/constants.ts
index 121d4629d8b..940af91e2f0 100644
--- a/packages/api-headless-cms/src/constants.ts
+++ b/packages/api-headless-cms/src/constants.ts
@@ -62,13 +62,16 @@ export const pickEntryMetaFields = (
) => {
const pickedEntryMetaFields: Partial = {};
for (const entryMetaFieldName of ENTRY_META_FIELDS) {
- if (entryMetaFieldName in object) {
- const mustPick = !filter || filter(entryMetaFieldName);
- if (mustPick) {
- Object.assign(pickedEntryMetaFields, {
- [entryMetaFieldName]: object[entryMetaFieldName]
- });
- }
+ const fieldExists = entryMetaFieldName in object;
+ if (!fieldExists) {
+ object[entryMetaFieldName] = undefined;
+ }
+
+ const mustPick = !filter || filter(entryMetaFieldName);
+ if (mustPick) {
+ Object.assign(pickedEntryMetaFields, {
+ [entryMetaFieldName]: object[entryMetaFieldName]
+ });
}
}
From 7ad4374cf02e73315f1b78e20b820e607a92adb2 Mon Sep 17 00:00:00 2001
From: Adrian Smijulj
Date: Wed, 15 May 2024 14:55:47 +0200
Subject: [PATCH 04/26] fix: add `--data-migration-reporter` flag in order to
optionally hide migration logs (#4136)
---
packages/cli-plugin-deploy-pulumi/commands/index.js | 5 +++++
packages/handler/src/fastify.ts | 4 ++++
.../src/api/plugins/executeDataMigrations.ts | 11 ++++++++---
3 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/packages/cli-plugin-deploy-pulumi/commands/index.js b/packages/cli-plugin-deploy-pulumi/commands/index.js
index 5949e5addcf..495680dd5b9 100644
--- a/packages/cli-plugin-deploy-pulumi/commands/index.js
+++ b/packages/cli-plugin-deploy-pulumi/commands/index.js
@@ -59,6 +59,11 @@ module.exports = [
describe: `Enable base compilation-related logs`,
type: "boolean"
});
+ yargs.option("data-migration-reporter", {
+ default: true,
+ describe: `Enable data migration reporting during the deployment process`,
+ type: "boolean"
+ });
},
async argv => {
await deploy(argv, context);
diff --git a/packages/handler/src/fastify.ts b/packages/handler/src/fastify.ts
index dede0fc3288..b512ba7e720 100644
--- a/packages/handler/src/fastify.ts
+++ b/packages/handler/src/fastify.ts
@@ -187,6 +187,10 @@ export const createHandler = (params: CreateHandlerParams) => {
*/
const app = fastify({
bodyLimit: 536870912, // 512MB
+
+ // TODO: in the near future, pass own Pino logger instance.
+ logger: false,
+
...(params.options || {})
});
diff --git a/packages/serverless-cms-aws/src/api/plugins/executeDataMigrations.ts b/packages/serverless-cms-aws/src/api/plugins/executeDataMigrations.ts
index e0c4bfd66ff..584c7ca95cf 100644
--- a/packages/serverless-cms-aws/src/api/plugins/executeDataMigrations.ts
+++ b/packages/serverless-cms-aws/src/api/plugins/executeDataMigrations.ts
@@ -6,7 +6,8 @@ import {
InteractiveCliStatusReporter,
NonInteractiveCliStatusReporter,
MigrationRunner,
- CliMigrationRunReporter
+ CliMigrationRunReporter,
+ MigrationStatusReporter
} from "@webiny/data-migration/cli";
/**
@@ -43,10 +44,14 @@ export const executeDataMigrations = {
const functionName = apiOutput["migrationLambdaArn"];
const logReporter = new LogReporter(functionName);
- const statusReporter =
- !process.stdout.isTTY || "CI" in process.env
+
+ let statusReporter: MigrationStatusReporter | undefined;
+ if (inputs.dataMigrationReporter) {
+ const useNonInteractiveReporter = !process.stdout.isTTY || "CI" in process.env;
+ statusReporter = useNonInteractiveReporter
? new NonInteractiveCliStatusReporter(logReporter)
: new InteractiveCliStatusReporter(logReporter);
+ }
const runner = MigrationRunner.create({
lambdaClient,
From 14f314470f3b74ea06f8761cb03cc7aee1001024 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bruno=20Zori=C4=87?=
Date: Wed, 15 May 2024 15:48:57 +0200
Subject: [PATCH 05/26] fix(api-headless-cms-ddb-es): unpublish latest record
(#4137)
---
.../src/operations/entry/index.ts | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/packages/api-headless-cms-ddb-es/src/operations/entry/index.ts b/packages/api-headless-cms-ddb-es/src/operations/entry/index.ts
index c0acc0f5b6a..7cb3a077268 100644
--- a/packages/api-headless-cms-ddb-es/src/operations/entry/index.ts
+++ b/packages/api-headless-cms-ddb-es/src/operations/entry/index.ts
@@ -1454,13 +1454,22 @@ export const createEntriesStorageOperations = (
})
];
/**
- * If we are unpublishing the latest revision, let's also update the latest revision entry's status in ES.
+ * If we are unpublishing the latest revision, let's also update the latest revision entry's status in both DynamoDB tables.
*/
if (latestStorageEntry?.id === entry.id) {
const { index } = configurations.es({
model
});
+ items.push(
+ entity.putBatch({
+ ...storageEntry,
+ PK: partitionKey,
+ SK: createLatestSortKey(),
+ TYPE: createLatestRecordType()
+ })
+ );
+
const esLatestData = await transformer.getElasticsearchLatestEntryData();
esItems.push(
esEntity.putBatch({
From 68b9185e64023cb28c6fd4f86d993d0301bf284c Mon Sep 17 00:00:00 2001
From: Adrian Smijulj
Date: Thu, 16 May 2024 15:19:30 +0200
Subject: [PATCH 06/26] fix: replace `--data-migration-reporter` with
`WEBINY_MIGRATION_LOG_STREAMING` env var (#4139)
---
packages/data-migration/src/cli/index.ts | 1 +
.../src/api/plugins/executeDataMigrations.ts | 20 +++++++++++++++----
2 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/packages/data-migration/src/cli/index.ts b/packages/data-migration/src/cli/index.ts
index cd9c67861ee..99b5d9bd11a 100644
--- a/packages/data-migration/src/cli/index.ts
+++ b/packages/data-migration/src/cli/index.ts
@@ -4,6 +4,7 @@ export * from "./MigrationStatusReporter";
export * from "./MigrationRunReporter";
export * from "./InteractiveCliStatusReporter";
export * from "./NonInteractiveCliStatusReporter";
+export * from "./VoidStatusReporter";
export * from "./CliMigrationRunReporter";
export * from "./LogStream";
export * from "./LogReporter";
diff --git a/packages/serverless-cms-aws/src/api/plugins/executeDataMigrations.ts b/packages/serverless-cms-aws/src/api/plugins/executeDataMigrations.ts
index 584c7ca95cf..ca4922595d6 100644
--- a/packages/serverless-cms-aws/src/api/plugins/executeDataMigrations.ts
+++ b/packages/serverless-cms-aws/src/api/plugins/executeDataMigrations.ts
@@ -7,7 +7,8 @@ import {
NonInteractiveCliStatusReporter,
MigrationRunner,
CliMigrationRunReporter,
- MigrationStatusReporter
+ MigrationStatusReporter,
+ VoidStatusReporter
} from "@webiny/data-migration/cli";
/**
@@ -34,7 +35,18 @@ export const executeDataMigrations = {
const apiOutput = getStackOutput({ folder: "apps/api", env });
- context.info("Executing data migrations Lambda function...");
+ context.info("Executing data migrations AWS Lambda function...");
+
+ const logStreamingEnabled = process.env.WEBINY_MIGRATION_LOG_STREAMING !== "false";
+ if (!logStreamingEnabled) {
+ context.warning(
+ [
+ "Data migration log streaming is disabled.",
+ "Note that the logs will still be accessible in Amazon CloudWatch.",
+ "Learn more: https://webiny.link/cloudwatch"
+ ].join(" ")
+ );
+ }
try {
const lambdaClient = new LambdaClient({
@@ -45,8 +57,8 @@ export const executeDataMigrations = {
const logReporter = new LogReporter(functionName);
- let statusReporter: MigrationStatusReporter | undefined;
- if (inputs.dataMigrationReporter) {
+ let statusReporter: MigrationStatusReporter = new VoidStatusReporter();
+ if (inputs.dataMigrationLogStreaming) {
const useNonInteractiveReporter = !process.stdout.isTTY || "CI" in process.env;
statusReporter = useNonInteractiveReporter
? new NonInteractiveCliStatusReporter(logReporter)
From 8b1d93200f0fc02f9bf9c5105ef58c9748cf4195 Mon Sep 17 00:00:00 2001
From: Pavel Denisjuk
Date: Tue, 21 May 2024 22:33:15 +0200
Subject: [PATCH 07/26] fix(data-migration): add support for migration skipping
[skip ci]
---
.../__tests__/migration.test.ts | 30 ++++++++++
.../data-migration/src/MigrationRunner.ts | 57 +++++++++++++++++--
2 files changed, 81 insertions(+), 6 deletions(-)
diff --git a/packages/data-migration/__tests__/migration.test.ts b/packages/data-migration/__tests__/migration.test.ts
index 60f641e0d4d..976a42685c9 100644
--- a/packages/data-migration/__tests__/migration.test.ts
+++ b/packages/data-migration/__tests__/migration.test.ts
@@ -429,4 +429,34 @@ describe("Migration Lambda Handler", () => {
expect(data2.executed[0].id).toBe("2.1.0-001");
expect(data2.executed[1].id).toBe("2.1.0-002");
});
+
+ it("should skip migrations defined by WEBINY_MIGRATION_SKIP env var", async () => {
+ const allMigrations = [
+ createDdbMigration("1.0.0-001"),
+ createDdbMigration("1.1.0-001"),
+ createDdbMigration("2.0.0-001"),
+ createDdbMigration("2.1.0-001"),
+ createDdbMigration("2.1.0-002")
+ ];
+
+ process.env["WEBINY_MIGRATION_SKIP_2_0_0_001"] = "true";
+ process.env["WEBINY_MIGRATION_SKIP_2_1_0_002"] = "true";
+
+ const handler = useHandler(
+ createDdbProjectMigration({
+ primaryTable: table,
+ migrations: allMigrations
+ })
+ );
+
+ const exactMatch = await handler({ version: "1.0.0", pattern: "*" });
+ assertNotError(exactMatch.error);
+ const data1 = groupMigrations(exactMatch.data.migrations);
+ expect(data1.notApplicable.length).toBe(0);
+ expect(data1.skipped.length).toBe(2);
+ expect(data1.executed.length).toBe(3);
+ expect(data1.executed[0].id).toBe("1.0.0-001");
+ expect(data1.executed[1].id).toBe("1.1.0-001");
+ expect(data1.executed[2].id).toBe("2.1.0-001");
+ });
});
diff --git a/packages/data-migration/src/MigrationRunner.ts b/packages/data-migration/src/MigrationRunner.ts
index 168d35076e6..4f2bcea7b14 100644
--- a/packages/data-migration/src/MigrationRunner.ts
+++ b/packages/data-migration/src/MigrationRunner.ts
@@ -43,6 +43,16 @@ const shouldForceExecute = (mig: DataMigration) => {
return process.env[key] === "true";
};
+/**
+ * This allows us to always skip a migration.
+ * Example: WEBINY_MIGRATION_SKIP_5_35_0_006=true
+ */
+const shouldSkip = (mig: DataMigration) => {
+ const key = `WEBINY_MIGRATION_SKIP_${mig.getId().replace(/[\.\-]/g, "_")}`;
+
+ return process.env[key] === "true";
+};
+
class MigrationNotFinished extends Error {}
class MigrationInProgress extends Error {}
@@ -132,6 +142,7 @@ export class MigrationRunner {
const isMigrationApplicable = isApplicable || defaultIsApplicable;
this.printForceExecuteEnvVars();
+ this.printSkipExecuteEnvVars();
if (forceExecute) {
this.logger.info(
@@ -141,6 +152,15 @@ export class MigrationRunner {
const executableMigrations = this.migrations
.filter(mig => {
+ if (shouldSkip(mig)) {
+ this.setRunItem(lastRun, {
+ id: mig.getId(),
+ status: "skipped"
+ });
+
+ return false;
+ }
+
if (shouldForceExecute(mig)) {
return true;
}
@@ -247,17 +267,23 @@ export class MigrationRunner {
this.logger.error(err, err.message);
return;
} finally {
- // We sum duration from the previous run with the current run.
runItem.finishedOn = getCurrentISOTime();
// Update run stats.
await this.setRunItemAndSave(lastRun, runItem);
- this.logger.info(
- `Finished executing migration %s in %sms.`,
- migration.getId(),
- getRunItemDuration(runItem)
- );
+ if (runItem.status === "pending") {
+ this.logger.info(
+ `Pausing migration %s, awaiting continuation.`,
+ migration.getId()
+ );
+ } else {
+ this.logger.info(
+ `Finished executing migration %s in %sms.`,
+ migration.getId(),
+ getRunItemDuration(runItem)
+ );
+ }
}
await this.repository.logMigration({
@@ -401,6 +427,25 @@ export class MigrationRunner {
this.logger.info(`${key}=${process.env[key]}`);
}
}
+
+ private printSkipExecuteEnvVars() {
+ const skipKeys = Object.keys(process.env).filter(key =>
+ key.startsWith("WEBINY_MIGRATION_SKIP_")
+ );
+
+ if (!skipKeys.length) {
+ this.logger.info(
+ `No migrations are skipped via WEBINY_MIGRATION_SKIP environment variable.`
+ );
+
+ return;
+ }
+
+ this.logger.info(`SKIPPED MIGRATIONS DETECTED!`);
+ for (const key of skipKeys) {
+ this.logger.info(`${key}=${process.env[key]}`);
+ }
+ }
}
makeInjectable(MigrationRunner, [
From d45451c2cdbf1daef55fbb5671f36180d789fc60 Mon Sep 17 00:00:00 2001
From: Pavel Denisjuk
Date: Wed, 22 May 2024 12:44:19 +0200
Subject: [PATCH 08/26] fix(app-file-manager): allow underscore in file aliases
[skip ci]
---
packages/app-file-manager/src/components/fields/Aliases.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/app-file-manager/src/components/fields/Aliases.tsx b/packages/app-file-manager/src/components/fields/Aliases.tsx
index 8f540417778..bdb0d1d44f9 100644
--- a/packages/app-file-manager/src/components/fields/Aliases.tsx
+++ b/packages/app-file-manager/src/components/fields/Aliases.tsx
@@ -36,7 +36,7 @@ const FileAliasMessage = styled("span")`
font-size: 12px;
`;
-const PATHNAME_REGEX = /^\/[/.a-zA-Z0-9-]+$/;
+const PATHNAME_REGEX = /^\/[/.a-zA-Z0-9-_]+$/;
export const Aliases = () => {
const { value, onChange } = useBind({ name: "aliases" });
From d4a3c0c6e761b832084e0f509caea78bc4a37bea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bruno=20Zori=C4=87?=
Date: Wed, 22 May 2024 13:54:39 +0200
Subject: [PATCH 09/26] fix(api-elasticsearch): health and node checks [skip
ci] (#4143)
---
.../__tests__/operations/catHealth.test.ts | 30 +++
.../__tests__/operations/catNodes.test.ts | 26 +++
.../__tests__/utils/waitUntilHealthy.test.ts | 205 ++++++++++++++++++
packages/api-elasticsearch/src/index.ts | 1 +
.../src/operations/ElasticsearchCatHealth.ts | 39 ++++
.../src/operations/ElasticsearchCatNodes.ts | 33 +++
.../api-elasticsearch/src/operations/index.ts | 2 +
.../stripConnectionFromException.ts | 15 ++
.../api-elasticsearch/src/operations/types.ts | 38 ++++
.../waitUntilHealthy/UnhealthyClusterError.ts | 10 +
.../waitUntilHealthy/WaitUntilHealthy.ts | 186 ++++++++++++++++
.../WaitingHealthyClusterAbortedError.ts | 10 +
.../src/utils/waitUntilHealthy/index.ts | 1 +
packages/error/src/index.ts | 1 +
14 files changed, 597 insertions(+)
create mode 100644 packages/api-elasticsearch/__tests__/operations/catHealth.test.ts
create mode 100644 packages/api-elasticsearch/__tests__/operations/catNodes.test.ts
create mode 100644 packages/api-elasticsearch/__tests__/utils/waitUntilHealthy.test.ts
create mode 100644 packages/api-elasticsearch/src/operations/ElasticsearchCatHealth.ts
create mode 100644 packages/api-elasticsearch/src/operations/ElasticsearchCatNodes.ts
create mode 100644 packages/api-elasticsearch/src/operations/index.ts
create mode 100644 packages/api-elasticsearch/src/operations/stripConnectionFromException.ts
create mode 100644 packages/api-elasticsearch/src/operations/types.ts
create mode 100644 packages/api-elasticsearch/src/utils/waitUntilHealthy/UnhealthyClusterError.ts
create mode 100644 packages/api-elasticsearch/src/utils/waitUntilHealthy/WaitUntilHealthy.ts
create mode 100644 packages/api-elasticsearch/src/utils/waitUntilHealthy/WaitingHealthyClusterAbortedError.ts
create mode 100644 packages/api-elasticsearch/src/utils/waitUntilHealthy/index.ts
diff --git a/packages/api-elasticsearch/__tests__/operations/catHealth.test.ts b/packages/api-elasticsearch/__tests__/operations/catHealth.test.ts
new file mode 100644
index 00000000000..684ebfbe9e0
--- /dev/null
+++ b/packages/api-elasticsearch/__tests__/operations/catHealth.test.ts
@@ -0,0 +1,30 @@
+import { ElasticsearchCatHealth } from "~/operations/ElasticsearchCatHealth";
+import { createElasticsearchClient } from "../helpers";
+import { IElasticsearchCatHealthResponse } from "~/operations/types";
+
+describe("cat health", () => {
+ it("should fetch health information", async () => {
+ const client = createElasticsearchClient();
+ const catHealth = new ElasticsearchCatHealth(client);
+
+ const expected: IElasticsearchCatHealthResponse = {
+ status: expect.stringMatching(/^green|yellow|red$/),
+ "node.data": expect.stringMatching(/^\d+$/),
+ "node.total": expect.stringMatching(/^\d+$/),
+ shards: expect.stringMatching(/^\d+$/),
+ active_shards_percent: expect.stringMatching(/^([0-9]*[.])?[0-9]%$/),
+ init: expect.stringMatching(/^\d+$/),
+ epoch: expect.stringMatching(/^\d+$/),
+ timestamp: expect.stringMatching(/^\d+:\d+:\d+$/),
+ cluster: expect.any(String),
+ pri: expect.stringMatching(/^\d+$/),
+ relo: expect.stringMatching(/^\d+$/),
+ unassign: expect.stringMatching(/^\d+$/),
+ pending_tasks: expect.stringMatching(/^\d+$/),
+ max_task_wait_time: expect.any(String)
+ };
+
+ const response = await catHealth.getHealth();
+ expect(response).toMatchObject(expected);
+ });
+});
diff --git a/packages/api-elasticsearch/__tests__/operations/catNodes.test.ts b/packages/api-elasticsearch/__tests__/operations/catNodes.test.ts
new file mode 100644
index 00000000000..a19213370d3
--- /dev/null
+++ b/packages/api-elasticsearch/__tests__/operations/catNodes.test.ts
@@ -0,0 +1,26 @@
+import { createElasticsearchClient } from "@webiny/project-utils/testing/elasticsearch/createClient";
+import { ElasticsearchCatNodes } from "~/operations";
+import { IElasticsearchCatNodeResponse } from "~/operations/types";
+
+describe("cat nodes", () => {
+ it("should fetch nodes information", async () => {
+ const client = createElasticsearchClient();
+ const catNodes = new ElasticsearchCatNodes(client);
+
+ const expected: Partial[] = [
+ {
+ "heap.percent": expect.any(String),
+ "ram.percent": expect.any(String),
+ cpu: expect.any(String),
+ load_1m: expect.any(String),
+ "node.role": expect.any(String),
+ ip: expect.any(String),
+ name: expect.any(String)
+ }
+ ];
+
+ const result = await catNodes.getNodes();
+
+ expect(result).toMatchObject(expected);
+ });
+});
diff --git a/packages/api-elasticsearch/__tests__/utils/waitUntilHealthy.test.ts b/packages/api-elasticsearch/__tests__/utils/waitUntilHealthy.test.ts
new file mode 100644
index 00000000000..f3f173b0ea3
--- /dev/null
+++ b/packages/api-elasticsearch/__tests__/utils/waitUntilHealthy.test.ts
@@ -0,0 +1,205 @@
+import { createWaitUntilHealthy } from "~/utils/waitUntilHealthy";
+import { createElasticsearchClient } from "@webiny/project-utils/testing/elasticsearch/createClient";
+import { ElasticsearchCatHealthStatus } from "~/operations/types";
+import { UnhealthyClusterError } from "~/utils/waitUntilHealthy/UnhealthyClusterError";
+import { WaitingHealthyClusterAbortedError } from "~/utils/waitUntilHealthy/WaitingHealthyClusterAbortedError";
+
+describe("wait until healthy", () => {
+ const client = createElasticsearchClient();
+
+ it("should wait until the cluster is healthy - single run", async () => {
+ const waitUntilHealthy = createWaitUntilHealthy(client, {
+ minStatus: ElasticsearchCatHealthStatus.Yellow,
+ maxProcessorPercent: 101,
+ maxWaitingTime: 30,
+ waitingTimeStep: 5,
+ maxRamPercent: 101
+ });
+
+ const { runs, runningTime } = await waitUntilHealthy.wait();
+
+ expect(runs).toEqual(1);
+ expect(runningTime).toBeLessThan(30000);
+ });
+
+ it("should wait until the cluster is health - processor - max waiting time hit", async () => {
+ expect.assertions(2);
+ const waitUntilHealthy = createWaitUntilHealthy(client, {
+ minStatus: ElasticsearchCatHealthStatus.Yellow,
+ maxProcessorPercent: 1,
+ maxWaitingTime: 3,
+ waitingTimeStep: 1,
+ maxRamPercent: 99
+ });
+
+ try {
+ await waitUntilHealthy.wait();
+ } catch (ex) {
+ expect(ex).toBeInstanceOf(UnhealthyClusterError);
+ expect(ex.message).toEqual("Cluster did not become healthy in 3 seconds.");
+ }
+ });
+
+ it("should wait until the cluster is health - memory - max waiting time hit", async () => {
+ expect.assertions(2);
+ const waitUntilHealthy = createWaitUntilHealthy(client, {
+ minStatus: ElasticsearchCatHealthStatus.Yellow,
+ maxProcessorPercent: 99,
+ maxWaitingTime: 3,
+ waitingTimeStep: 1,
+ maxRamPercent: 1
+ });
+
+ try {
+ const { runs } = await waitUntilHealthy.wait();
+ expect(runs).toEqual("reaching here would fail the test");
+ } catch (ex) {
+ expect(ex).toBeInstanceOf(UnhealthyClusterError);
+ expect(ex.message).toEqual("Cluster did not become healthy in 3 seconds.");
+ }
+ });
+
+ it("should trigger onUnhealthy callback - once", async () => {
+ expect.assertions(2);
+ const waitUntilHealthy = createWaitUntilHealthy(client, {
+ minStatus: ElasticsearchCatHealthStatus.Green,
+ maxProcessorPercent: 1,
+ maxWaitingTime: 1,
+ waitingTimeStep: 3,
+ maxRamPercent: 1
+ });
+
+ const onUnhealthy = jest.fn();
+
+ try {
+ const { runs } = await waitUntilHealthy.wait({
+ async onUnhealthy() {
+ onUnhealthy();
+ }
+ });
+ expect(runs).toEqual("reaching here would fail the test");
+ } catch (ex) {
+ expect(ex).toBeInstanceOf(UnhealthyClusterError);
+ }
+
+ expect(onUnhealthy).toHaveBeenCalledTimes(1);
+ });
+
+ it("should trigger onUnhealthy callback - multiple times", async () => {
+ expect.assertions(2);
+ const waitUntilHealthy = createWaitUntilHealthy(client, {
+ minStatus: ElasticsearchCatHealthStatus.Green,
+ maxProcessorPercent: 1,
+ maxWaitingTime: 3,
+ waitingTimeStep: 1,
+ maxRamPercent: 1
+ });
+
+ const onUnhealthy = jest.fn();
+
+ try {
+ const { runs } = await waitUntilHealthy.wait({
+ async onUnhealthy() {
+ onUnhealthy();
+ }
+ });
+ expect(runs).toEqual("reaching here would fail the test");
+ } catch (ex) {
+ expect(ex).toBeInstanceOf(UnhealthyClusterError);
+ }
+
+ expect(onUnhealthy).toHaveBeenCalledTimes(3);
+ });
+
+ it("should trigger onTimeout callback - once", async () => {
+ expect.assertions(3);
+ const waitUntilHealthy = createWaitUntilHealthy(client, {
+ minStatus: ElasticsearchCatHealthStatus.Green,
+ maxProcessorPercent: 1,
+ maxWaitingTime: 3,
+ waitingTimeStep: 1,
+ maxRamPercent: 1
+ });
+
+ const onUnhealthy = jest.fn();
+ const onTimeout = jest.fn();
+
+ try {
+ const { runs } = await waitUntilHealthy.wait({
+ async onUnhealthy() {
+ onUnhealthy();
+ },
+ async onTimeout() {
+ onTimeout();
+ }
+ });
+ expect(runs).toEqual("reaching here would fail the test");
+ } catch (ex) {
+ expect(ex).toBeInstanceOf(UnhealthyClusterError);
+ }
+
+ expect(onUnhealthy).toHaveBeenCalledTimes(3);
+ expect(onTimeout).toHaveBeenCalledTimes(1);
+ });
+
+ it("should trigger abort even before the checks start", async () => {
+ expect.assertions(3);
+ const waitUntilHealthy = createWaitUntilHealthy(client, {
+ minStatus: ElasticsearchCatHealthStatus.Green,
+ maxProcessorPercent: 1,
+ maxWaitingTime: 1,
+ waitingTimeStep: 3,
+ maxRamPercent: 1
+ });
+
+ waitUntilHealthy.abort();
+
+ const onUnhealthy = jest.fn();
+ const onTimeout = jest.fn();
+
+ try {
+ const { runs } = await waitUntilHealthy.wait({
+ async onUnhealthy() {
+ onUnhealthy();
+ waitUntilHealthy.abort();
+ },
+ async onTimeout() {
+ onTimeout();
+ }
+ });
+ expect(runs).toEqual("reaching here would fail the test");
+ } catch (ex) {
+ expect(ex).toBeInstanceOf(WaitingHealthyClusterAbortedError);
+ }
+
+ expect(onUnhealthy).toHaveBeenCalledTimes(0);
+ expect(onTimeout).toHaveBeenCalledTimes(0);
+ });
+
+ it("should trigger abort in onUnhealthy callback", async () => {
+ expect.assertions(2);
+ const waitUntilHealthy = createWaitUntilHealthy(client, {
+ minStatus: ElasticsearchCatHealthStatus.Green,
+ maxProcessorPercent: 1,
+ maxWaitingTime: 1,
+ waitingTimeStep: 3,
+ maxRamPercent: 1
+ });
+
+ const onUnhealthy = jest.fn();
+
+ try {
+ const { runs } = await waitUntilHealthy.wait({
+ async onUnhealthy() {
+ onUnhealthy();
+ waitUntilHealthy.abort();
+ }
+ });
+ expect(runs).toEqual("reaching here would fail the test");
+ } catch (ex) {
+ expect(ex).toBeInstanceOf(WaitingHealthyClusterAbortedError);
+ }
+
+ expect(onUnhealthy).toHaveBeenCalledTimes(1);
+ });
+});
diff --git a/packages/api-elasticsearch/src/index.ts b/packages/api-elasticsearch/src/index.ts
index 7091611b642..45658c6da58 100644
--- a/packages/api-elasticsearch/src/index.ts
+++ b/packages/api-elasticsearch/src/index.ts
@@ -20,6 +20,7 @@ export * from "./operators";
export * from "./cursors";
export * from "./client";
export * from "./utils";
+export * from "./operations";
export { createGzipCompression } from "./plugins/GzipCompression";
/**
diff --git a/packages/api-elasticsearch/src/operations/ElasticsearchCatHealth.ts b/packages/api-elasticsearch/src/operations/ElasticsearchCatHealth.ts
new file mode 100644
index 00000000000..fcf1e17e51a
--- /dev/null
+++ b/packages/api-elasticsearch/src/operations/ElasticsearchCatHealth.ts
@@ -0,0 +1,39 @@
+import { WebinyError } from "@webiny/error";
+import { Client } from "~/client";
+import { IElasticsearchCatHealthResponse } from "./types";
+import { stripConnectionFromException } from "~/operations/stripConnectionFromException";
+
+export class ElasticsearchCatHealth {
+ private readonly client: Client;
+
+ public constructor(client: Client) {
+ this.client = client;
+ }
+
+ public async getHealth(): Promise {
+ try {
+ const response = await this.client.cat.health<
+ unknown | [IElasticsearchCatHealthResponse]
+ >({
+ format: "json"
+ });
+
+ if (!Array.isArray(response.body) || response.body.length === 0) {
+ throw new WebinyError({
+ message: `There is no valid response from cat.health operation.`,
+ code: "ELASTICSEARCH_HEALTH_INVALID_RESPONSE",
+ data: response.body
+ });
+ }
+
+ return {
+ ...response.body[0]
+ };
+ } catch (ex) {
+ console.error(`Could not fetch cluster health information: ${ex.message}`);
+ const error = stripConnectionFromException(ex);
+ console.log(JSON.stringify(error));
+ throw error;
+ }
+ }
+}
diff --git a/packages/api-elasticsearch/src/operations/ElasticsearchCatNodes.ts b/packages/api-elasticsearch/src/operations/ElasticsearchCatNodes.ts
new file mode 100644
index 00000000000..0167e3c1fe8
--- /dev/null
+++ b/packages/api-elasticsearch/src/operations/ElasticsearchCatNodes.ts
@@ -0,0 +1,33 @@
+import { IElasticsearchCatNodesResponse } from "./types";
+import { Client } from "~/client";
+import { WebinyError } from "@webiny/error";
+import { stripConnectionFromException } from "~/operations/stripConnectionFromException";
+
+export class ElasticsearchCatNodes {
+ private readonly client: Client;
+
+ public constructor(client: Client) {
+ this.client = client;
+ }
+
+ public async getNodes(): Promise {
+ try {
+ const response = await this.client.cat.nodes({
+ format: "json"
+ });
+ if (!Array.isArray(response.body) || response.body.length === 0) {
+ throw new WebinyError({
+ message: `There is no valid response from cat.nodes operation.`,
+ code: "ELASTICSEARCH_NODES_INVALID_RESPONSE",
+ data: response.body
+ });
+ }
+ return response.body;
+ } catch (ex) {
+ console.error(`Could not fetch cluster nodes information: ${ex.message}`);
+ const error = stripConnectionFromException(ex);
+ console.log(JSON.stringify(error));
+ throw error;
+ }
+ }
+}
diff --git a/packages/api-elasticsearch/src/operations/index.ts b/packages/api-elasticsearch/src/operations/index.ts
new file mode 100644
index 00000000000..c0d0520fb51
--- /dev/null
+++ b/packages/api-elasticsearch/src/operations/index.ts
@@ -0,0 +1,2 @@
+export * from "./ElasticsearchCatHealth";
+export * from "./ElasticsearchCatNodes";
diff --git a/packages/api-elasticsearch/src/operations/stripConnectionFromException.ts b/packages/api-elasticsearch/src/operations/stripConnectionFromException.ts
new file mode 100644
index 00000000000..a45047820a0
--- /dev/null
+++ b/packages/api-elasticsearch/src/operations/stripConnectionFromException.ts
@@ -0,0 +1,15 @@
+export const stripConnectionFromException = (ex: any): any => {
+ if (typeof ex !== "object") {
+ return ex;
+ }
+ if (!ex?.meta?.meta?.connection) {
+ return ex;
+ }
+ return {
+ ...ex.meta,
+ meta: {
+ ...ex.meta.meta,
+ connection: null
+ }
+ };
+};
diff --git a/packages/api-elasticsearch/src/operations/types.ts b/packages/api-elasticsearch/src/operations/types.ts
new file mode 100644
index 00000000000..cfc8decc94c
--- /dev/null
+++ b/packages/api-elasticsearch/src/operations/types.ts
@@ -0,0 +1,38 @@
+export enum ElasticsearchCatHealthStatus {
+ Green = "green",
+ Yellow = "yellow",
+ Red = "red"
+}
+
+export interface IElasticsearchCatHealthResponse {
+ epoch: number;
+ timestamp: `${number}:${number}:${number}`;
+ cluster: string;
+ status: ElasticsearchCatHealthStatus;
+ "node.total": `${number}`;
+ "node.data": `${number}`;
+ shards: `${number}`;
+ pri: `${number}`;
+ relo: `${number}`;
+ init: `${number}`;
+ unassign: `${number}`;
+ pending_tasks: `${number}`;
+ max_task_wait_time: string;
+ active_shards_percent: `${number}%`;
+ discovered_cluster_manager?: `${boolean}`;
+}
+
+export interface IElasticsearchCatNodeResponse {
+ ip: string;
+ "heap.percent": `${number}`;
+ "ram.percent": `${number}`;
+ cpu: `${number}`;
+ load_1m: `${number}` | null;
+ load_5m: `${number}` | null;
+ load_15m: `${number}` | null;
+ "node.role": string;
+ master?: string;
+ name: string;
+}
+
+export type IElasticsearchCatNodesResponse = IElasticsearchCatNodeResponse[];
diff --git a/packages/api-elasticsearch/src/utils/waitUntilHealthy/UnhealthyClusterError.ts b/packages/api-elasticsearch/src/utils/waitUntilHealthy/UnhealthyClusterError.ts
new file mode 100644
index 00000000000..564441f16ed
--- /dev/null
+++ b/packages/api-elasticsearch/src/utils/waitUntilHealthy/UnhealthyClusterError.ts
@@ -0,0 +1,10 @@
+import { WebinyError } from "@webiny/error";
+
+export class UnhealthyClusterError extends WebinyError {
+ public constructor(maxWaitingTime: number) {
+ super({
+ message: `Cluster did not become healthy in ${maxWaitingTime} seconds.`,
+ code: "UNHEALTHY_CLUSTER"
+ });
+ }
+}
diff --git a/packages/api-elasticsearch/src/utils/waitUntilHealthy/WaitUntilHealthy.ts b/packages/api-elasticsearch/src/utils/waitUntilHealthy/WaitUntilHealthy.ts
new file mode 100644
index 00000000000..f8bef386cfe
--- /dev/null
+++ b/packages/api-elasticsearch/src/utils/waitUntilHealthy/WaitUntilHealthy.ts
@@ -0,0 +1,186 @@
+import { Client } from "~/client";
+import { ElasticsearchCatHealth } from "~/operations/ElasticsearchCatHealth";
+import { ElasticsearchCatNodes } from "~/operations/ElasticsearchCatNodes";
+import { ElasticsearchCatHealthStatus, IElasticsearchCatNodesResponse } from "~/operations/types";
+import { UnhealthyClusterError } from "~/utils/waitUntilHealthy/UnhealthyClusterError";
+import { WaitingHealthyClusterAbortedError } from "./WaitingHealthyClusterAbortedError";
+
+const WAITING_TIME_STEP = 10;
+
+export interface IWaitUntilHealthyParams {
+ /**
+ * Minimum status allowed, otherwise the cluster is considered unhealthy.
+ */
+ minStatus: ElasticsearchCatHealthStatus.Green | ElasticsearchCatHealthStatus.Yellow;
+ /**
+ * Maximum processor percent allowed, otherwise the cluster is considered unhealthy.
+ */
+ maxProcessorPercent: number;
+ /**
+ * Maximum RAM percent allowed, otherwise the cluster is considered unhealthy.
+ */
+ maxRamPercent: number;
+ /**
+ * Maximum time to wait in seconds.
+ * This is to prevent infinite waiting in case the cluster never becomes healthy.
+ */
+ maxWaitingTime: number;
+ /**
+ * Time in seconds to wait between each check.
+ * This is to prevent spamming the cluster with requests.
+ * Default is WAITING_TIME_STEP seconds.
+ */
+ waitingTimeStep?: number;
+}
+
+export interface IWaitOptionsOnUnhealthyParams {
+ startedAt: Date;
+ mustEndAt: Date;
+ waitingTimeStep: number;
+ runs: number;
+}
+
+export interface IWaitOptionsOnTimeoutParams {
+ startedAt: Date;
+ mustEndAt: Date;
+ waitingTimeStep: number;
+ runs: number;
+}
+
+export interface IWaitOptions {
+ onUnhealthy?(params: IWaitOptionsOnUnhealthyParams): Promise;
+ onTimeout?(params: IWaitOptionsOnTimeoutParams): Promise;
+}
+
+export interface IWaitUntilHealthyWaitResponse {
+ runningTime: number;
+ runs: number;
+}
+
+class WaitUntilHealthy {
+ private readonly client: Client;
+ private readonly options: IWaitUntilHealthyParams;
+
+ private readonly catHealth: ElasticsearchCatHealth;
+ private readonly catNodes: ElasticsearchCatNodes;
+
+ private aborted = false;
+
+ public constructor(client: Client, options: IWaitUntilHealthyParams) {
+ this.client = client;
+ this.options = options;
+
+ this.catHealth = new ElasticsearchCatHealth(this.client);
+ this.catNodes = new ElasticsearchCatNodes(this.client);
+ }
+
+ public abort(): void {
+ this.aborted = true;
+ }
+ /**
+ * @throws UnhealthyClusterError
+ * @throws WaitingHealthyClusterAbortedError
+ */
+ public async wait(options?: IWaitOptions): Promise {
+ if (this.aborted) {
+ throw new WaitingHealthyClusterAbortedError(
+ `Waiting for the cluster to become healthy was aborted even before it started.`
+ );
+ }
+ const startedAt = new Date();
+ const mustEndAt = new Date(startedAt.getTime() + this.options.maxWaitingTime * 1000);
+ const waitingTimeStep = this.options.waitingTimeStep || WAITING_TIME_STEP;
+ let runs = 1;
+ while (await this.shouldWait()) {
+ if (new Date() >= mustEndAt) {
+ if (options?.onTimeout) {
+ await options.onTimeout({
+ startedAt,
+ mustEndAt,
+ waitingTimeStep,
+ runs
+ });
+ }
+ throw new UnhealthyClusterError(this.options.maxWaitingTime);
+ } else if (options?.onUnhealthy) {
+ await options.onUnhealthy({
+ startedAt,
+ mustEndAt,
+ waitingTimeStep,
+ runs
+ });
+ }
+ /**
+ * Abort check is separated from other IFs because it can be aborted in onUnhealthy callback.
+ */
+ if (this.aborted) {
+ throw new WaitingHealthyClusterAbortedError();
+ }
+ runs++;
+ await new Promise(resolve => {
+ setTimeout(resolve, waitingTimeStep * 1000);
+ });
+ }
+
+ const runningTime = new Date().getTime() - startedAt.getTime();
+
+ return {
+ runningTime,
+ runs
+ };
+ }
+
+ private async shouldWait(): Promise {
+ const health = await this.catHealth.getHealth();
+ const nodes = await this.catNodes.getNodes();
+
+ const status = this.transformStatus(health.status);
+ if (status > this.transformStatus(this.options.minStatus)) {
+ return true;
+ }
+
+ const processorPercent = this.getProcessorPercent(nodes);
+ if (processorPercent > this.options.maxProcessorPercent) {
+ return true;
+ }
+
+ const ramPercent = this.getRamPercent(nodes);
+ return ramPercent > this.options.maxRamPercent;
+ }
+
+ private getProcessorPercent(nodes: IElasticsearchCatNodesResponse): number {
+ const total = nodes.reduce((total, node) => {
+ return total + parseFloat(node.cpu);
+ }, 0);
+ return total / nodes.length;
+ }
+
+ private getRamPercent(nodes: IElasticsearchCatNodesResponse): number {
+ const total = nodes.reduce((total, node) => {
+ return total + parseFloat(node["ram.percent"]);
+ }, 0);
+ return total / nodes.length;
+ }
+
+ private transformStatus(status: ElasticsearchCatHealthStatus): number {
+ switch (status) {
+ case ElasticsearchCatHealthStatus.Green:
+ return 1;
+ case ElasticsearchCatHealthStatus.Yellow:
+ return 2;
+ case ElasticsearchCatHealthStatus.Red:
+ return 3;
+ default:
+ return 99;
+ }
+ }
+}
+
+export type { WaitUntilHealthy };
+
+export const createWaitUntilHealthy = (
+ client: Client,
+ params: IWaitUntilHealthyParams
+): WaitUntilHealthy => {
+ return new WaitUntilHealthy(client, params);
+};
diff --git a/packages/api-elasticsearch/src/utils/waitUntilHealthy/WaitingHealthyClusterAbortedError.ts b/packages/api-elasticsearch/src/utils/waitUntilHealthy/WaitingHealthyClusterAbortedError.ts
new file mode 100644
index 00000000000..9c902943d43
--- /dev/null
+++ b/packages/api-elasticsearch/src/utils/waitUntilHealthy/WaitingHealthyClusterAbortedError.ts
@@ -0,0 +1,10 @@
+import { WebinyError } from "@webiny/error";
+
+export class WaitingHealthyClusterAbortedError extends WebinyError {
+ public constructor(message?: string) {
+ super({
+ message: message || `Waiting for the cluster to become healthy was aborted.`,
+ code: "WAITING_HEALTHY_CLUSTER_ABORTED"
+ });
+ }
+}
diff --git a/packages/api-elasticsearch/src/utils/waitUntilHealthy/index.ts b/packages/api-elasticsearch/src/utils/waitUntilHealthy/index.ts
new file mode 100644
index 00000000000..b260b1e9f80
--- /dev/null
+++ b/packages/api-elasticsearch/src/utils/waitUntilHealthy/index.ts
@@ -0,0 +1 @@
+export * from "./WaitUntilHealthy";
diff --git a/packages/error/src/index.ts b/packages/error/src/index.ts
index 08b57ea358d..d1bc2f140a4 100644
--- a/packages/error/src/index.ts
+++ b/packages/error/src/index.ts
@@ -1,4 +1,5 @@
import Error, { ErrorOptions } from "./Error";
export default Error;
+export { Error as WebinyError };
export { ErrorOptions };
From dd80b513c52fb53679036ea7e64e9849fdfd3732 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bruno=20Zori=C4=87?=
Date: Mon, 3 Jun 2024 15:55:02 +0200
Subject: [PATCH 10/26] fix(api-headless-cms): reference field id is now
RevisionId scalar (#4148)
---
.../__tests__/utils/plugins.ts | 7 ++-
.../__tests__/useGqlHandler.ts | 10 +++-
.../contentEntry.crud.validation.test.ts | 10 ++--
.../contentAPI/revisionIdScalar.test.ts | 56 +++++++++++++++++++
packages/api-headless-cms/package.json | 2 +-
.../contentEntry/referenceFieldsMapping.ts | 2 +-
.../src/graphql/scalars/RevisionId.ts | 22 ++++++++
.../graphql/scalars/RevisionIdScalarPlugin.ts | 11 ++++
.../src/graphql/schema/baseContentSchema.ts | 12 ++--
.../api-headless-cms/src/graphqlFields/ref.ts | 2 +-
packages/api-headless-cms/src/index.ts | 2 +
11 files changed, 119 insertions(+), 17 deletions(-)
create mode 100644 packages/api-headless-cms/__tests__/contentAPI/revisionIdScalar.test.ts
create mode 100644 packages/api-headless-cms/src/graphql/scalars/RevisionId.ts
create mode 100644 packages/api-headless-cms/src/graphql/scalars/RevisionIdScalarPlugin.ts
diff --git a/packages/api-file-manager/__tests__/utils/plugins.ts b/packages/api-file-manager/__tests__/utils/plugins.ts
index e05808b2460..c26466bfb44 100644
--- a/packages/api-file-manager/__tests__/utils/plugins.ts
+++ b/packages/api-file-manager/__tests__/utils/plugins.ts
@@ -2,7 +2,11 @@ import graphqlHandlerPlugins from "@webiny/handler-graphql";
import { createTenancyAndSecurity } from "~tests/utils/tenancySecurity";
import i18nContext from "@webiny/api-i18n/graphql/context";
import { mockLocalesPlugins } from "@webiny/api-i18n/graphql/testing";
-import { CmsParametersPlugin, createHeadlessCmsContext } from "@webiny/api-headless-cms";
+import {
+ CmsParametersPlugin,
+ createHeadlessCmsContext,
+ createHeadlessCmsGraphQL
+} from "@webiny/api-headless-cms";
import {
createFileManagerContext,
createFileManagerGraphQL,
@@ -44,6 +48,7 @@ export const handlerPlugins = (params: HandlerParams) => {
};
}),
createHeadlessCmsContext({ storageOperations: cmsStorage.storageOperations }),
+ createHeadlessCmsGraphQL(),
createFileManagerContext({
storageOperations: fileManagerStorage.storageOperations
}),
diff --git a/packages/api-form-builder/__tests__/useGqlHandler.ts b/packages/api-form-builder/__tests__/useGqlHandler.ts
index c435b2e9efc..0d6a8108469 100644
--- a/packages/api-form-builder/__tests__/useGqlHandler.ts
+++ b/packages/api-form-builder/__tests__/useGqlHandler.ts
@@ -41,10 +41,15 @@ import { PluginCollection } from "@webiny/plugins/types";
import { getStorageOps } from "@webiny/project-utils/testing/environment";
import { FileManagerStorageOperations } from "@webiny/api-file-manager/types";
import { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types";
-import { CmsParametersPlugin, createHeadlessCmsContext } from "@webiny/api-headless-cms";
+import {
+ CmsParametersPlugin,
+ createHeadlessCmsContext,
+ createHeadlessCmsGraphQL
+} from "@webiny/api-headless-cms";
import { FormBuilderStorageOperations } from "~/types";
import { APIGatewayEvent, LambdaContext } from "@webiny/handler-aws/types";
import { createPageBuilderContext } from "@webiny/api-page-builder";
+import { PageBuilderStorageOperations } from "@webiny/api-page-builder/types";
export interface UseGqlHandlerParams {
permissions?: SecurityPermission[];
@@ -65,7 +70,7 @@ export default (params: UseGqlHandlerParams = {}) => {
const { permissions, identity, plugins = [] } = params;
const i18nStorage = getStorageOps("i18n");
const fileManagerStorage = getStorageOps("fileManager");
- const pageBuilderStorage = getStorageOps("pageBuilder");
+ const pageBuilderStorage = getStorageOps("pageBuilder");
const formBuilderStorage = getStorageOps("formBuilder");
const cmsStorage = getStorageOps("cms");
@@ -87,6 +92,7 @@ export default (params: UseGqlHandlerParams = {}) => {
};
}),
createHeadlessCmsContext({ storageOperations: cmsStorage.storageOperations }),
+ createHeadlessCmsGraphQL(),
createPageBuilderContext({
storageOperations: pageBuilderStorage.storageOperations
}),
diff --git a/packages/api-headless-cms/__tests__/contentAPI/cmsEntryValidation/contentEntry.crud.validation.test.ts b/packages/api-headless-cms/__tests__/contentAPI/cmsEntryValidation/contentEntry.crud.validation.test.ts
index e71af68ae09..75da9a6d734 100644
--- a/packages/api-headless-cms/__tests__/contentAPI/cmsEntryValidation/contentEntry.crud.validation.test.ts
+++ b/packages/api-headless-cms/__tests__/contentAPI/cmsEntryValidation/contentEntry.crud.validation.test.ts
@@ -346,7 +346,7 @@ describe("content entry validation", () => {
xyzPublishedOn: "2023-01-01T00:00:00.000+00:00",
image: "https://webiny.com/image.png",
category: {
- id: "category-1",
+ id: "category-1#0001",
modelId: "category"
},
nested: {
@@ -365,7 +365,7 @@ describe("content entry validation", () => {
nestedXyzPublishedOn: "2022-01-01T00:00:00.000+02:00",
nestedImage: "https://webiny.com/image2.png",
nestedCategory: {
- id: "category-2",
+ id: "category-2#0001",
modelId: "category"
}
},
@@ -386,7 +386,7 @@ describe("content entry validation", () => {
dzXyzPublishedOn: "2021-01-01T00:00:00.000+02:00",
dzImage: "https://webiny.com/image2.png",
dzCategory: {
- id: "category-3",
+ id: "category-3#0001",
modelId: "category"
},
dzNested: {
@@ -405,7 +405,7 @@ describe("content entry validation", () => {
dzNestedXyzPublishedOn: "2021-01-01T00:00:00.000+02:00",
dzNestedImage: "https://webiny.com/image2.png",
dzNestedCategory: {
- id: "category-4",
+ id: "category-4#0001",
modelId: "category"
}
}
@@ -427,7 +427,7 @@ describe("content entry validation", () => {
multiValueXyzPublishedOn: "2021-01-01T00:00:00.000+02:00",
multiValueImage: "https://webiny.com/image2.png",
multiValueCategory: {
- id: "category-11",
+ id: "category-11#0001",
modelId: "category"
}
}
diff --git a/packages/api-headless-cms/__tests__/contentAPI/revisionIdScalar.test.ts b/packages/api-headless-cms/__tests__/contentAPI/revisionIdScalar.test.ts
new file mode 100644
index 00000000000..66cf883ec51
--- /dev/null
+++ b/packages/api-headless-cms/__tests__/contentAPI/revisionIdScalar.test.ts
@@ -0,0 +1,56 @@
+import { createContentModelGroup } from "~tests/contentAPI/mocks/contentModelGroup";
+import models from "~tests/contentAPI/mocks/contentModels";
+import { CmsGroup, CmsModel } from "~/types";
+import { useArticleManageHandler } from "~tests/testHelpers/useArticleManageHandler";
+
+describe("revision id scalar", () => {
+ const manageHandlerOpts = { path: "manage/en-US" };
+
+ const { createContentModelGroupMutation, createContentModelMutation, createArticle } =
+ useArticleManageHandler(manageHandlerOpts);
+
+ let group: CmsGroup;
+
+ beforeEach(async () => {
+ const [result] = await createContentModelGroupMutation({
+ data: createContentModelGroup()
+ });
+ group = result.data.createContentModelGroup.data;
+
+ const articleModel = models.find(m => m.modelId === "article") as CmsModel;
+
+ await createContentModelMutation({
+ data: {
+ name: articleModel.name,
+ modelId: articleModel.modelId,
+ singularApiName: articleModel.singularApiName,
+ pluralApiName: articleModel.pluralApiName,
+ fields: articleModel.fields,
+ description: "This is a description.",
+ icon: "fa/fas",
+ group: group.id
+ }
+ });
+ });
+
+ it("should fail when sending malformed revision id into the ref field", async () => {
+ const [result] = await createArticle({
+ data: {
+ category: {
+ modelId: "category",
+ id: "abdefghijklmnopqrstuvwxyz"
+ }
+ }
+ });
+ const message = `Variable "$data" got invalid value "abdefghijklmnopqrstuvwxyz" at "data.category.id"; Expected type "RevisionId". RevisionId value must be a valid Revision ID property! Example: "abcdef#0001"`;
+ expect(result).toMatchObject({
+ errors: [
+ {
+ message
+ }
+ ]
+ });
+ expect(result.errors).toHaveLength(1);
+ expect(result.errors[0].message).toEqual(message);
+ });
+});
diff --git a/packages/api-headless-cms/package.json b/packages/api-headless-cms/package.json
index 4d67bf00a7d..cddf33fc297 100644
--- a/packages/api-headless-cms/package.json
+++ b/packages/api-headless-cms/package.json
@@ -36,6 +36,7 @@
"@webiny/validation": "0.0.0",
"code-frame": "^5.0.0",
"dot-prop": "^6.0.1",
+ "graphql": "^15.7.2",
"graphql-tag": "^2.12.6",
"jsdom": "21.1.2",
"lodash": "^4.5.0",
@@ -55,7 +56,6 @@
"@webiny/project-utils": "0.0.0",
"apollo-graphql": "^0.9.5",
"get-yarn-workspaces": "^1.0.2",
- "graphql": "^15.7.2",
"jest": "^29.5.0",
"prettier": "^2.8.3",
"rimraf": "^3.0.2",
diff --git a/packages/api-headless-cms/src/crud/contentEntry/referenceFieldsMapping.ts b/packages/api-headless-cms/src/crud/contentEntry/referenceFieldsMapping.ts
index 0420170c6ba..4fa1fe42440 100644
--- a/packages/api-headless-cms/src/crud/contentEntry/referenceFieldsMapping.ts
+++ b/packages/api-headless-cms/src/crud/contentEntry/referenceFieldsMapping.ts
@@ -321,7 +321,7 @@ async function validateReferencedEntries({
referencesByModel.forEach((ids, modelId) => {
const modelEntriesInDb = entriesByModel[modelId];
for (const id of ids) {
- if (!modelEntriesInDb.includes(id)) {
+ if (!modelEntriesInDb || !modelEntriesInDb.includes(id)) {
throw new WebinyError(
`Missing referenced entry with id "${id}" in model "${modelId}".`,
"ENTRY_NOT_FOUND",
diff --git a/packages/api-headless-cms/src/graphql/scalars/RevisionId.ts b/packages/api-headless-cms/src/graphql/scalars/RevisionId.ts
new file mode 100644
index 00000000000..6f61932f41a
--- /dev/null
+++ b/packages/api-headless-cms/src/graphql/scalars/RevisionId.ts
@@ -0,0 +1,22 @@
+import { GraphQLScalarType } from "graphql";
+import { parseIdentifier } from "@webiny/utils";
+
+export const RevisionIdScalar = new GraphQLScalarType({
+ name: "RevisionId",
+ description: "A Headless CMS Reference field input type.",
+ parseValue: value => {
+ if (!value) {
+ return null;
+ } else if (typeof value !== "string") {
+ throw new Error("RevisionId value must be a string!");
+ }
+
+ const result = parseIdentifier(value);
+ if (!result.version) {
+ throw new Error(
+ `RevisionId value must be a valid Revision ID property! Example: "abcdef#0001"`
+ );
+ }
+ return value;
+ }
+});
diff --git a/packages/api-headless-cms/src/graphql/scalars/RevisionIdScalarPlugin.ts b/packages/api-headless-cms/src/graphql/scalars/RevisionIdScalarPlugin.ts
new file mode 100644
index 00000000000..d1ba26cbaaa
--- /dev/null
+++ b/packages/api-headless-cms/src/graphql/scalars/RevisionIdScalarPlugin.ts
@@ -0,0 +1,11 @@
+import { GraphQLScalarPlugin } from "@webiny/handler-graphql/types";
+import { RevisionIdScalar } from "~/graphql/scalars/RevisionId";
+
+export const createRevisionIdScalarPlugin = (): GraphQLScalarPlugin[] => {
+ const plugin: GraphQLScalarPlugin = {
+ name: "headlessCms.graphql.revisionIdScalar",
+ type: "graphql-scalar",
+ scalar: RevisionIdScalar
+ };
+ return [plugin];
+};
diff --git a/packages/api-headless-cms/src/graphql/schema/baseContentSchema.ts b/packages/api-headless-cms/src/graphql/schema/baseContentSchema.ts
index a8693fa4100..8a4d70a74e0 100644
--- a/packages/api-headless-cms/src/graphql/schema/baseContentSchema.ts
+++ b/packages/api-headless-cms/src/graphql/schema/baseContentSchema.ts
@@ -1,15 +1,15 @@
import { GraphQLScalarPlugin } from "@webiny/handler-graphql/types";
import { CmsContext } from "~/types";
import {
- RefInputScalar,
- NumberScalar,
AnyScalar,
- DateTimeScalar,
DateScalar,
- TimeScalar,
- LongScalar,
+ DateTimeScalar,
+ DateTimeZScalar,
JsonScalar,
- DateTimeZScalar
+ LongScalar,
+ NumberScalar,
+ RefInputScalar,
+ TimeScalar
} from "@webiny/handler-graphql/builtInTypes";
import { GraphQLScalarType } from "graphql";
import { CmsGraphQLSchemaPlugin } from "~/plugins";
diff --git a/packages/api-headless-cms/src/graphqlFields/ref.ts b/packages/api-headless-cms/src/graphqlFields/ref.ts
index 96db1095c07..edd7894f473 100644
--- a/packages/api-headless-cms/src/graphqlFields/ref.ts
+++ b/packages/api-headless-cms/src/graphqlFields/ref.ts
@@ -274,7 +274,7 @@ export const createRefField = (): CmsModelFieldToGraphQLPlugin => {
input RefFieldInput {
modelId: String!
- id: ID!
+ id: RevisionId!
}
${createFilteringTypeDef()}
diff --git a/packages/api-headless-cms/src/index.ts b/packages/api-headless-cms/src/index.ts
index 61df7685a6b..1d9df68fffc 100644
--- a/packages/api-headless-cms/src/index.ts
+++ b/packages/api-headless-cms/src/index.ts
@@ -18,12 +18,14 @@ import { createFieldConverters } from "~/fieldConverters";
import { createExportGraphQL } from "~/export";
import { createStorageTransform } from "~/storage";
import { createLexicalHTMLRenderer } from "./htmlRenderer/createLexicalHTMLRenderer";
+import { createRevisionIdScalarPlugin } from "~/graphql/scalars/RevisionIdScalarPlugin";
export * from "./utils/isHeadlessCmsReady";
export * from "./utils/createModelField";
export type CreateHeadlessCmsGraphQLParams = CreateGraphQLParams;
export const createHeadlessCmsGraphQL = (params: CreateHeadlessCmsGraphQLParams = {}) => {
return [
+ createRevisionIdScalarPlugin(),
/**
* PathParameter plugins are used to determine the type of the cms endpoint
*/
From 3c3a88b867fe9be4123186261c8921dfafa661e0 Mon Sep 17 00:00:00 2001
From: Pavel Denisjuk
Date: Tue, 4 Jun 2024 14:27:51 +0200
Subject: [PATCH 11/26] fix(app-page-builder): enable history snapshots on
element drop
---
packages/app-page-builder/src/editor/helpers.ts | 3 ++-
.../src/pageEditor/config/eventActions/updatePageAction.ts | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/packages/app-page-builder/src/editor/helpers.ts b/packages/app-page-builder/src/editor/helpers.ts
index 75134295f18..97e104dca8f 100644
--- a/packages/app-page-builder/src/editor/helpers.ts
+++ b/packages/app-page-builder/src/editor/helpers.ts
@@ -302,7 +302,8 @@ export const onReceived: PbEditorPageElementPlugin["onReceived"] = props => {
const result = executeAction(state, meta, updateElementAction, {
element: parent,
- history: false
+ // Dropping of elements should always be stored to history, to trigger document save.
+ history: true
});
result.actions.push(new AfterDropElementActionEvent({ element }));
diff --git a/packages/app-page-builder/src/pageEditor/config/eventActions/updatePageAction.ts b/packages/app-page-builder/src/pageEditor/config/eventActions/updatePageAction.ts
index 594e9f30326..6c427dbcfa1 100644
--- a/packages/app-page-builder/src/pageEditor/config/eventActions/updatePageAction.ts
+++ b/packages/app-page-builder/src/pageEditor/config/eventActions/updatePageAction.ts
@@ -15,7 +15,7 @@ export const updatePageAction: PageEventActionCallable<
},
actions: [
new SaveRevisionActionEvent({
- debounce: args?.debounce || false,
+ debounce: args?.debounce ?? true,
onFinish: args?.onFinish
})
]
From 91554b62d20170d4a81a7a49bcce35d4697d3de1 Mon Sep 17 00:00:00 2001
From: Pavel Denisjuk
Date: Fri, 7 Jun 2024 10:43:59 +0200
Subject: [PATCH 12/26] fix(aws-layers): add layers to ap-east-1 region
---
packages/aws-layers/layers.json | 66 +++++++++++++++++----------------
1 file changed, 34 insertions(+), 32 deletions(-)
diff --git a/packages/aws-layers/layers.json b/packages/aws-layers/layers.json
index d3d18b84c0e..774996d7dcc 100644
--- a/packages/aws-layers/layers.json
+++ b/packages/aws-layers/layers.json
@@ -18,39 +18,41 @@
"sa-east-1": "arn:aws:lambda:sa-east-1:632417926021:layer:webiny-v4-sharp:1"
},
"shelf-io-chrome-aws-lambda-layer": {
- "ap-northeast-1": "arn:aws:lambda:ap-northeast-1:764866452798:layer:chrome-aws-lambda:45",
- "ap-northeast-2": "arn:aws:lambda:ap-northeast-2:764866452798:layer:chrome-aws-lambda:45",
- "ap-south-1": "arn:aws:lambda:ap-south-1:764866452798:layer:chrome-aws-lambda:45",
- "ap-southeast-1": "arn:aws:lambda:ap-southeast-1:764866452798:layer:chrome-aws-lambda:45",
- "ap-southeast-2": "arn:aws:lambda:ap-southeast-2:764866452798:layer:chrome-aws-lambda:45",
- "ca-central-1": "arn:aws:lambda:ca-central-1:764866452798:layer:chrome-aws-lambda:45",
- "eu-north-1": "arn:aws:lambda:eu-north-1:764866452798:layer:chrome-aws-lambda:45",
- "eu-central-1": "arn:aws:lambda:eu-central-1:764866452798:layer:chrome-aws-lambda:45",
- "eu-west-1": "arn:aws:lambda:eu-west-1:764866452798:layer:chrome-aws-lambda:45",
- "eu-west-2": "arn:aws:lambda:eu-west-2:764866452798:layer:chrome-aws-lambda:45",
- "eu-west-3": "arn:aws:lambda:eu-west-3:764866452798:layer:chrome-aws-lambda:45",
- "sa-east-1": "arn:aws:lambda:sa-east-1:764866452798:layer:chrome-aws-lambda:45",
- "us-east-1": "arn:aws:lambda:us-east-1:764866452798:layer:chrome-aws-lambda:45",
- "us-east-2": "arn:aws:lambda:us-east-2:764866452798:layer:chrome-aws-lambda:45",
- "us-west-1": "arn:aws:lambda:us-west-1:764866452798:layer:chrome-aws-lambda:45",
- "us-west-2": "arn:aws:lambda:us-west-2:764866452798:layer:chrome-aws-lambda:45"
+ "us-east-1": "arn:aws:lambda:us-east-1:632417926021:layer:chromium:1",
+ "us-east-2": "arn:aws:lambda:us-east-2:632417926021:layer:chromium:1",
+ "us-west-1": "arn:aws:lambda:us-west-1:632417926021:layer:chromium:1",
+ "us-west-2": "arn:aws:lambda:us-west-2:632417926021:layer:chromium:1",
+ "ap-south-1": "arn:aws:lambda:ap-south-1:632417926021:layer:chromium:1",
+ "ap-northeast-2": "arn:aws:lambda:ap-northeast-2:632417926021:layer:chromium:1",
+ "ap-southeast-1": "arn:aws:lambda:ap-southeast-1:632417926021:layer:chromium:1",
+ "ap-southeast-2": "arn:aws:lambda:ap-southeast-2:632417926021:layer:chromium:1",
+ "ap-northeast-1": "arn:aws:lambda:ap-northeast-1:632417926021:layer:chromium:1",
+ "ca-central-1": "arn:aws:lambda:ca-central-1:632417926021:layer:chromium:1",
+ "eu-central-1": "arn:aws:lambda:eu-central-1:632417926021:layer:chromium:1",
+ "eu-west-1": "arn:aws:lambda:eu-west-1:632417926021:layer:chromium:1",
+ "eu-west-2": "arn:aws:lambda:eu-west-2:632417926021:layer:chromium:1",
+ "eu-west-3": "arn:aws:lambda:eu-west-3:632417926021:layer:chromium:1",
+ "eu-north-1": "arn:aws:lambda:eu-north-1:632417926021:layer:chromium:1",
+ "sa-east-1": "arn:aws:lambda:sa-east-1:632417926021:layer:chromium:1",
+ "ap-east-1": "arn:aws:lambda:ap-east-1:632417926021:layer:chromium:1"
},
"sharp": {
- "us-east-1": "arn:aws:lambda:us-east-1:632417926021:layer:sharp:11",
- "us-east-2": "arn:aws:lambda:us-east-2:632417926021:layer:sharp:2",
- "us-west-1": "arn:aws:lambda:us-west-1:632417926021:layer:sharp:2",
- "us-west-2": "arn:aws:lambda:us-west-2:632417926021:layer:sharp:2",
- "ap-south-1": "arn:aws:lambda:ap-south-1:632417926021:layer:sharp:2",
- "ap-northeast-2": "arn:aws:lambda:ap-northeast-2:632417926021:layer:sharp:2",
- "ap-southeast-1": "arn:aws:lambda:ap-southeast-1:632417926021:layer:sharp:2",
- "ap-southeast-2": "arn:aws:lambda:ap-southeast-2:632417926021:layer:sharp:2",
- "ap-northeast-1": "arn:aws:lambda:ap-northeast-1:632417926021:layer:sharp:2",
- "ca-central-1": "arn:aws:lambda:ca-central-1:632417926021:layer:sharp:2",
- "eu-central-1": "arn:aws:lambda:eu-central-1:632417926021:layer:sharp:2",
- "eu-west-1": "arn:aws:lambda:eu-west-1:632417926021:layer:sharp:2",
- "eu-west-2": "arn:aws:lambda:eu-west-2:632417926021:layer:sharp:3",
- "eu-west-3": "arn:aws:lambda:eu-west-3:632417926021:layer:sharp:2",
- "eu-north-1": "arn:aws:lambda:eu-north-1:632417926021:layer:sharp:2",
- "sa-east-1": "arn:aws:lambda:sa-east-1:632417926021:layer:sharp:2"
+ "us-east-1": "arn:aws:lambda:us-east-1:632417926021:layer:sharp:12",
+ "us-east-2": "arn:aws:lambda:us-east-2:632417926021:layer:sharp:3",
+ "us-west-1": "arn:aws:lambda:us-west-1:632417926021:layer:sharp:3",
+ "us-west-2": "arn:aws:lambda:us-west-2:632417926021:layer:sharp:3",
+ "ap-south-1": "arn:aws:lambda:ap-south-1:632417926021:layer:sharp:3",
+ "ap-northeast-2": "arn:aws:lambda:ap-northeast-2:632417926021:layer:sharp:3",
+ "ap-southeast-1": "arn:aws:lambda:ap-southeast-1:632417926021:layer:sharp:3",
+ "ap-southeast-2": "arn:aws:lambda:ap-southeast-2:632417926021:layer:sharp:3",
+ "ap-northeast-1": "arn:aws:lambda:ap-northeast-1:632417926021:layer:sharp:3",
+ "ca-central-1": "arn:aws:lambda:ca-central-1:632417926021:layer:sharp:3",
+ "eu-central-1": "arn:aws:lambda:eu-central-1:632417926021:layer:sharp:3",
+ "eu-west-1": "arn:aws:lambda:eu-west-1:632417926021:layer:sharp:3",
+ "eu-west-2": "arn:aws:lambda:eu-west-2:632417926021:layer:sharp:4",
+ "eu-west-3": "arn:aws:lambda:eu-west-3:632417926021:layer:sharp:3",
+ "eu-north-1": "arn:aws:lambda:eu-north-1:632417926021:layer:sharp:3",
+ "sa-east-1": "arn:aws:lambda:sa-east-1:632417926021:layer:sharp:3",
+ "ap-east-1": "arn:aws:lambda:ap-east-1:632417926021:layer:sharp:1"
}
}
From f3655093329f905529fa93582270da7f43df6e8b Mon Sep 17 00:00:00 2001
From: Pavel Denisjuk
Date: Fri, 7 Jun 2024 12:24:01 +0200
Subject: [PATCH 13/26] fix(serverless-cms-aws): add WEBINY_ADMIN_ENV and
WEBINY_WEBSITE_ENV
---
.../cwp-template-aws/template/common/types/env/index.d.ts | 2 ++
packages/serverless-cms-aws/src/createAdminAppConfig.ts | 8 ++++++--
packages/serverless-cms-aws/src/createWebsiteAppConfig.ts | 8 ++++++--
typings/env/index.d.ts | 2 ++
4 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/packages/cwp-template-aws/template/common/types/env/index.d.ts b/packages/cwp-template-aws/template/common/types/env/index.d.ts
index caf272dcd53..376a7f1d45c 100644
--- a/packages/cwp-template-aws/template/common/types/env/index.d.ts
+++ b/packages/cwp-template-aws/template/common/types/env/index.d.ts
@@ -24,6 +24,8 @@ declare namespace NodeJS {
MOCK_DYNAMODB_ENDPOINT?: string;
ELASTICSEARCH_PORT?: string;
WEBINY_ENV?: string;
+ WEBINY_ADMIN_ENV?: string;
+ WEBINY_WEBSITE_ENV?: string;
REACT_APP_DEBUG?: "true" | "false" | string;
AWS_REGION?: string;
REACT_APP_WEBINY_VERSION?: string;
diff --git a/packages/serverless-cms-aws/src/createAdminAppConfig.ts b/packages/serverless-cms-aws/src/createAdminAppConfig.ts
index a56b43203c4..c87fbf9505f 100644
--- a/packages/serverless-cms-aws/src/createAdminAppConfig.ts
+++ b/packages/serverless-cms-aws/src/createAdminAppConfig.ts
@@ -3,9 +3,13 @@ import { ApiOutput } from "@webiny/pulumi-aws";
export const createAdminAppConfig = (modifier?: ReactAppConfigModifier) => {
return createReactAppConfig(baseParams => {
- const { config } = baseParams;
+ const { config, options } = baseParams;
- config.customEnv(env => ({ ...env, PORT: 3001 }));
+ config.customEnv(env => ({
+ ...env,
+ PORT: process.env.PORT || 3001,
+ WEBINY_ADMIN_ENV: options.env
+ }));
config.pulumiOutputToEnv("apps/api", ({ output, env }) => {
return {
diff --git a/packages/serverless-cms-aws/src/createWebsiteAppConfig.ts b/packages/serverless-cms-aws/src/createWebsiteAppConfig.ts
index f85d0151228..63980b4c650 100644
--- a/packages/serverless-cms-aws/src/createWebsiteAppConfig.ts
+++ b/packages/serverless-cms-aws/src/createWebsiteAppConfig.ts
@@ -3,9 +3,13 @@ import { ApiOutput } from "@webiny/pulumi-aws";
export const createWebsiteAppConfig = (modifier?: ReactAppConfigModifier) => {
return createReactAppConfig(baseParams => {
- const { config } = baseParams;
+ const { config, options } = baseParams;
- config.customEnv(env => ({ ...env, PORT: 3000 }));
+ config.customEnv(env => ({
+ ...env,
+ PORT: process.env.PORT || 3000,
+ WEBINY_WEBSITE_ENV: options.env
+ }));
config.pulumiOutputToEnv("apps/api", ({ output, env }) => {
return {
diff --git a/typings/env/index.d.ts b/typings/env/index.d.ts
index 5f369cd4aa8..17d4a6ce2a2 100644
--- a/typings/env/index.d.ts
+++ b/typings/env/index.d.ts
@@ -25,6 +25,8 @@ declare namespace NodeJS {
MOCK_DYNAMODB_ENDPOINT?: string;
ELASTICSEARCH_PORT?: string;
WEBINY_ENV?: string;
+ WEBINY_ADMIN_ENV?: string;
+ WEBINY_WEBSITE_ENV?: string;
REACT_APP_DEBUG?: "true" | "false" | string;
AWS_REGION?: string;
REACT_APP_WEBINY_VERSION?: string;
From f5b2367ed570d2258c0e43e16b321aedb88a5b29 Mon Sep 17 00:00:00 2001
From: Adrian Smijulj
Date: Fri, 7 Jun 2024 13:41:02 +0200
Subject: [PATCH 14/26] fix: introduce mock data generation task (#4146)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Bruno Zorić
---
.github/workflows/pullRequests.yml | 14 +-
.github/workflows/pushDev.yml | 14 +-
.github/workflows/pushNext.yml | 14 +-
.../wac/utils/listPackagesWithJestTests.ts | 26 +-
packages/api-background-tasks-es/package.json | 1 +
packages/api-background-tasks-es/src/index.ts | 4 +-
.../tsconfig.build.json | 1 +
.../api-background-tasks-es/tsconfig.json | 3 +
packages/api-background-tasks-os/package.json | 1 +
packages/api-background-tasks-os/src/index.ts | 4 +-
.../tsconfig.build.json | 1 +
.../api-background-tasks-os/tsconfig.json | 3 +
.../__tests__/event.test.ts | 6 +-
.../__tests__/transfer.test.ts | 56 +
.../src/NotEnoughRemainingTimeError.ts | 3 +
.../src/index.ts | 329 +-
.../__tests__/utils/waitUntilHealthy.test.ts | 64 +-
packages/api-elasticsearch/src/client.ts | 2 +-
.../api-elasticsearch/src/operations/index.ts | 1 +
.../api-elasticsearch/src/operations/types.ts | 4 +-
packages/api-elasticsearch/src/utils/index.ts | 2 +
.../waitUntilHealthy/WaitUntilHealthy.ts | 92 +-
.../src/utils/waitUntilHealthy/index.ts | 5 +
.../reason/ClusterHealthReason.ts | 27 +
.../utils/waitUntilHealthy/reason/IReason.ts | 4 +
.../waitUntilHealthy/reason/MemoryReason.ts | 24 +
.../reason/ProcessorReason.ts | 24 +
.../utils/waitUntilHealthy/reason/index.ts | 3 +
.../src/operations/entry/index.ts | 8 +-
.../api-headless-cms-es-tasks/.babelrc.js | 1 +
packages/api-headless-cms-es-tasks/LICENSE | 21 +
packages/api-headless-cms-es-tasks/README.md | 15 +
.../__tests__/context/helpers.ts | 90 +
.../__tests__/context/plugins.ts | 107 +
.../__tests__/context/tenancySecurity.ts | 102 +
.../__tests__/context/useHandler.ts | 51 +
.../__tests__/graphql/examples.graphql | 68 +
.../MockDataManager/calculateAmounts.test.ts | 155 +
.../MockDataManager/calculateSeconds.test.ts | 63 +
.../tasks/mockDataCreatorTask.test.ts | 65 +
.../tasks/mockDataManagerTask.test.ts | 65 +
.../api-headless-cms-es-tasks/jest.setup.js | 12 +
.../api-headless-cms-es-tasks/package.json | 49 +
.../api-headless-cms-es-tasks/src/index.ts | 10 +
.../tasks/MockDataCreator/MockDataCreator.ts | 109 +
.../src/tasks/MockDataCreator/mockData.ts | 1361 ++++
.../src/tasks/MockDataCreator/types.ts | 8 +
.../tasks/MockDataManager/MockDataManager.ts | 115 +
.../tasks/MockDataManager/calculateAmounts.ts | 73 +
.../tasks/MockDataManager/calculateSeconds.ts | 15 +
.../src/tasks/MockDataManager/constants.ts | 1 +
.../MockDataManager/createModelAndGroup.ts | 51 +
.../src/tasks/MockDataManager/group.ts | 11 +
.../src/tasks/MockDataManager/model.ts | 5549 +++++++++++++++++
.../src/tasks/MockDataManager/types.ts | 12 +
.../src/tasks/createMockDataCreatorTask.ts | 30 +
.../src/tasks/createMockDataManagerTask.ts | 58 +
.../api-headless-cms-es-tasks/src/types.ts | 7 +
.../src/utils/createIndex.ts | 35 +
.../src/utils/disableIndexing.ts | 31 +
.../src/utils/enableIndexing.ts | 29 +
.../src/utils/index.ts | 3 +
.../tsconfig.build.json | 27 +
.../api-headless-cms-es-tasks/tsconfig.json | 58 +
.../webiny.config.js | 8 +
.../storageOperations/entries.test.ts | 6 +-
packages/api-headless-cms/src/types.ts | 4 +-
packages/create-webiny-project/package.json | 2 +-
packages/handler-aws/src/index.ts | 2 +
packages/handler-aws/src/utils/index.ts | 2 +
.../src/utils/timer/CustomTimer.ts | 14 +
.../src/utils}/timer/Timer.ts | 8 +
.../src/utils}/timer/abstractions/ITimer.ts | 4 +
.../src/utils}/timer/factory.ts | 2 +-
.../src/utils}/timer/index.ts | 0
packages/migrations/package.json | 1 +
.../getNonNullableFieldsWithMissingValues.ts | 21 +
.../5.39.0/001/utils/isMigratedEntry.ts | 2 +-
packages/project-utils/testing/tasks/index.ts | 1 +
.../tasks/mockTaskTriggerTransportPlugin.ts | 24 +
.../project-utils/testing/tasks/runner.ts | 4 +-
.../src/apps/core/CoreElasticSearch.ts | 10 +-
.../src/apps/core/CoreOpenSearch.ts | 7 +-
.../__tests__/runner/taskRunnerAbort.test.ts | 2 +-
.../__tests__/runner/taskRunnerCreate.test.ts | 2 +-
.../runner/taskRunnerErrorFailedState.test.ts | 2 +-
.../taskRunnerErrorSuccessState.test.ts | 2 +-
.../runner/taskRunnerSuccess.test.ts | 2 +-
.../runner/taskRunnerTaskNotFound.test.ts | 2 +-
.../EventBridgeEventTransportPlugin.ts} | 46 +-
packages/tasks/src/crud/trigger.tasks.ts | 21 +-
packages/tasks/src/handler/index.ts | 2 +-
.../src/plugins/TaskTriggerTransportPlugin.ts | 24 +
packages/tasks/src/plugins/index.ts | 1 +
packages/tasks/src/runner/TaskControl.ts | 2 +
packages/tasks/src/runner/TaskRunner.ts | 13 +-
packages/tasks/src/timer/CustomTimer.ts | 21 -
.../tasks/src/transport/createTransport.ts | 34 +
.../tasks/src/utils/getObjectProperties.ts | 3 +
yarn.lock | 1322 +++-
100 files changed, 10477 insertions(+), 343 deletions(-)
create mode 100644 packages/api-dynamodb-to-elasticsearch/__tests__/transfer.test.ts
create mode 100644 packages/api-dynamodb-to-elasticsearch/src/NotEnoughRemainingTimeError.ts
create mode 100644 packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/ClusterHealthReason.ts
create mode 100644 packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/IReason.ts
create mode 100644 packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/MemoryReason.ts
create mode 100644 packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/ProcessorReason.ts
create mode 100644 packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/index.ts
create mode 100644 packages/api-headless-cms-es-tasks/.babelrc.js
create mode 100644 packages/api-headless-cms-es-tasks/LICENSE
create mode 100644 packages/api-headless-cms-es-tasks/README.md
create mode 100644 packages/api-headless-cms-es-tasks/__tests__/context/helpers.ts
create mode 100644 packages/api-headless-cms-es-tasks/__tests__/context/plugins.ts
create mode 100644 packages/api-headless-cms-es-tasks/__tests__/context/tenancySecurity.ts
create mode 100644 packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts
create mode 100644 packages/api-headless-cms-es-tasks/__tests__/graphql/examples.graphql
create mode 100644 packages/api-headless-cms-es-tasks/__tests__/tasks/MockDataManager/calculateAmounts.test.ts
create mode 100644 packages/api-headless-cms-es-tasks/__tests__/tasks/MockDataManager/calculateSeconds.test.ts
create mode 100644 packages/api-headless-cms-es-tasks/__tests__/tasks/mockDataCreatorTask.test.ts
create mode 100644 packages/api-headless-cms-es-tasks/__tests__/tasks/mockDataManagerTask.test.ts
create mode 100644 packages/api-headless-cms-es-tasks/jest.setup.js
create mode 100644 packages/api-headless-cms-es-tasks/package.json
create mode 100644 packages/api-headless-cms-es-tasks/src/index.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/tasks/MockDataCreator/MockDataCreator.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/tasks/MockDataCreator/mockData.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/tasks/MockDataCreator/types.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/MockDataManager.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/calculateAmounts.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/calculateSeconds.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/constants.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/createModelAndGroup.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/group.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/model.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/types.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/tasks/createMockDataCreatorTask.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/tasks/createMockDataManagerTask.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/types.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/utils/createIndex.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/utils/disableIndexing.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/utils/enableIndexing.ts
create mode 100644 packages/api-headless-cms-es-tasks/src/utils/index.ts
create mode 100644 packages/api-headless-cms-es-tasks/tsconfig.build.json
create mode 100644 packages/api-headless-cms-es-tasks/tsconfig.json
create mode 100644 packages/api-headless-cms-es-tasks/webiny.config.js
create mode 100644 packages/handler-aws/src/utils/index.ts
create mode 100644 packages/handler-aws/src/utils/timer/CustomTimer.ts
rename packages/{tasks/src => handler-aws/src/utils}/timer/Timer.ts (63%)
rename packages/{tasks/src => handler-aws/src/utils}/timer/abstractions/ITimer.ts (58%)
rename packages/{tasks/src => handler-aws/src/utils}/timer/factory.ts (91%)
rename packages/{tasks/src => handler-aws/src/utils}/timer/index.ts (100%)
create mode 100644 packages/migrations/src/migrations/5.39.0/001/utils/getNonNullableFieldsWithMissingValues.ts
create mode 100644 packages/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.ts
rename packages/tasks/src/crud/{EventBridgeEventTransport.ts => transport/EventBridgeEventTransportPlugin.ts} (56%)
create mode 100644 packages/tasks/src/plugins/TaskTriggerTransportPlugin.ts
create mode 100644 packages/tasks/src/plugins/index.ts
delete mode 100644 packages/tasks/src/timer/CustomTimer.ts
create mode 100644 packages/tasks/src/transport/createTransport.ts
diff --git a/.github/workflows/pullRequests.yml b/.github/workflows/pullRequests.yml
index 75a4bf1a310..d3db887983a 100644
--- a/.github/workflows/pullRequests.yml
+++ b/.github/workflows/pullRequests.yml
@@ -177,7 +177,7 @@ jobs:
- 18
package: >-
${{
- fromJson('[{"cmd":"packages/api","id":"api"},{"cmd":"packages/api-admin-settings","id":"api-admin-settings"},{"cmd":"packages/api-authentication","id":"api-authentication"},{"cmd":"packages/api-authentication-cognito","id":"api-authentication-cognito"},{"cmd":"packages/api-dynamodb-to-elasticsearch","id":"api-dynamodb-to-elasticsearch"},{"cmd":"packages/api-headless-cms-ddb","id":"api-headless-cms-ddb"},{"cmd":"packages/api-wcp","id":"api-wcp"},{"cmd":"packages/app-aco","id":"app-aco"},{"cmd":"packages/app-admin","id":"app-admin"},{"cmd":"packages/cwp-template-aws","id":"cwp-template-aws"},{"cmd":"packages/data-migration","id":"data-migration"},{"cmd":"packages/db-dynamodb","id":"db-dynamodb"},{"cmd":"packages/form","id":"form"},{"cmd":"packages/handler","id":"handler"},{"cmd":"packages/handler-aws","id":"handler-aws"},{"cmd":"packages/handler-graphql","id":"handler-graphql"},{"cmd":"packages/handler-logs","id":"handler-logs"},{"cmd":"packages/ioc","id":"ioc"},{"cmd":"packages/lexical-converter","id":"lexical-converter"},{"cmd":"packages/plugins","id":"plugins"},{"cmd":"packages/pubsub","id":"pubsub"},{"cmd":"packages/react-composition","id":"react-composition"},{"cmd":"packages/react-properties","id":"react-properties"},{"cmd":"packages/react-rich-text-lexical-renderer","id":"react-rich-text-lexical-renderer"},{"cmd":"packages/utils","id":"utils"},{"cmd":"packages/validation","id":"validation"}]')
+ fromJson('[{"cmd":"packages/api","id":"api"},{"cmd":"packages/api-admin-settings","id":"api-admin-settings"},{"cmd":"packages/api-authentication","id":"api-authentication"},{"cmd":"packages/api-authentication-cognito","id":"api-authentication-cognito"},{"cmd":"packages/api-headless-cms-ddb","id":"api-headless-cms-ddb"},{"cmd":"packages/api-wcp","id":"api-wcp"},{"cmd":"packages/app-aco","id":"app-aco"},{"cmd":"packages/app-admin","id":"app-admin"},{"cmd":"packages/cwp-template-aws","id":"cwp-template-aws"},{"cmd":"packages/data-migration","id":"data-migration"},{"cmd":"packages/db-dynamodb","id":"db-dynamodb"},{"cmd":"packages/form","id":"form"},{"cmd":"packages/handler","id":"handler"},{"cmd":"packages/handler-aws","id":"handler-aws"},{"cmd":"packages/handler-graphql","id":"handler-graphql"},{"cmd":"packages/handler-logs","id":"handler-logs"},{"cmd":"packages/ioc","id":"ioc"},{"cmd":"packages/lexical-converter","id":"lexical-converter"},{"cmd":"packages/plugins","id":"plugins"},{"cmd":"packages/pubsub","id":"pubsub"},{"cmd":"packages/react-composition","id":"react-composition"},{"cmd":"packages/react-properties","id":"react-properties"},{"cmd":"packages/react-rich-text-lexical-renderer","id":"react-rich-text-lexical-renderer"},{"cmd":"packages/utils","id":"utils"},{"cmd":"packages/validation","id":"validation"}]')
}}
runs-on: ${{ matrix.os }}
env:
@@ -281,13 +281,15 @@ jobs:
package: >-
${{ fromJson('[{"cmd":"packages/api-aco
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-aco_ddb-es_ddb"},{"cmd":"packages/api-audit-logs
- --storage=ddb-es,ddb","storage":"ddb-es","id":"api-audit-logs_ddb-es_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
+ --storage=ddb-es,ddb","storage":"ddb-es","id":"api-audit-logs_ddb-es_ddb"},{"cmd":"packages/api-dynamodb-to-elasticsearch
+ --storage=ddb-es,ddb","storage":["ddb-es"],"id":"api-dynamodb-to-elasticsearch_ddb-es_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-elasticsearch-tasks_ddb-es_ddb"},{"cmd":"packages/api-file-manager
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-file-manager_ddb-es_ddb"},{"cmd":"packages/api-form-builder
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-form-builder_ddb-es_ddb"},{"cmd":"packages/api-form-builder-so-ddb-es
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-form-builder-so-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-ddb-es
- --storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-mailer
+ --storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-es-tasks
+ --storage=ddb-es,ddb","storage":["ddb-es"],"id":"api-headless-cms-es-tasks_ddb-es_ddb"},{"cmd":"packages/api-mailer
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-mailer_ddb-es_ddb"},{"cmd":"packages/api-page-builder
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-page-builder_ddb-es_ddb"},{"cmd":"packages/api-page-builder-aco
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-page-builder-aco_ddb-es_ddb"},{"cmd":"packages/api-page-builder-so-ddb-es
@@ -348,13 +350,15 @@ jobs:
package: >-
${{ fromJson('[{"cmd":"packages/api-aco
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-aco_ddb-os_ddb"},{"cmd":"packages/api-audit-logs
- --storage=ddb-os,ddb","storage":"ddb-os","id":"api-audit-logs_ddb-os_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
+ --storage=ddb-os,ddb","storage":"ddb-os","id":"api-audit-logs_ddb-os_ddb"},{"cmd":"packages/api-dynamodb-to-elasticsearch
+ --storage=ddb-os,ddb","storage":["ddb-os"],"id":"api-dynamodb-to-elasticsearch_ddb-os_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-elasticsearch-tasks_ddb-os_ddb"},{"cmd":"packages/api-file-manager
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-file-manager_ddb-os_ddb"},{"cmd":"packages/api-form-builder
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-form-builder_ddb-os_ddb"},{"cmd":"packages/api-form-builder-so-ddb-es
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-form-builder-so-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-ddb-es
- --storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-mailer
+ --storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-es-tasks
+ --storage=ddb-os,ddb","storage":["ddb-os"],"id":"api-headless-cms-es-tasks_ddb-os_ddb"},{"cmd":"packages/api-mailer
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-mailer_ddb-os_ddb"},{"cmd":"packages/api-page-builder
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-page-builder_ddb-os_ddb"},{"cmd":"packages/api-page-builder-aco
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-page-builder-aco_ddb-os_ddb"},{"cmd":"packages/api-page-builder-so-ddb-es
diff --git a/.github/workflows/pushDev.yml b/.github/workflows/pushDev.yml
index 7f7bae78712..f1c6199c1f0 100644
--- a/.github/workflows/pushDev.yml
+++ b/.github/workflows/pushDev.yml
@@ -143,7 +143,7 @@ jobs:
- 18
package: >-
${{
- fromJson('[{"cmd":"packages/api","id":"api"},{"cmd":"packages/api-admin-settings","id":"api-admin-settings"},{"cmd":"packages/api-authentication","id":"api-authentication"},{"cmd":"packages/api-authentication-cognito","id":"api-authentication-cognito"},{"cmd":"packages/api-dynamodb-to-elasticsearch","id":"api-dynamodb-to-elasticsearch"},{"cmd":"packages/api-headless-cms-ddb","id":"api-headless-cms-ddb"},{"cmd":"packages/api-wcp","id":"api-wcp"},{"cmd":"packages/app-aco","id":"app-aco"},{"cmd":"packages/app-admin","id":"app-admin"},{"cmd":"packages/cwp-template-aws","id":"cwp-template-aws"},{"cmd":"packages/data-migration","id":"data-migration"},{"cmd":"packages/db-dynamodb","id":"db-dynamodb"},{"cmd":"packages/form","id":"form"},{"cmd":"packages/handler","id":"handler"},{"cmd":"packages/handler-aws","id":"handler-aws"},{"cmd":"packages/handler-graphql","id":"handler-graphql"},{"cmd":"packages/handler-logs","id":"handler-logs"},{"cmd":"packages/ioc","id":"ioc"},{"cmd":"packages/lexical-converter","id":"lexical-converter"},{"cmd":"packages/plugins","id":"plugins"},{"cmd":"packages/pubsub","id":"pubsub"},{"cmd":"packages/react-composition","id":"react-composition"},{"cmd":"packages/react-properties","id":"react-properties"},{"cmd":"packages/react-rich-text-lexical-renderer","id":"react-rich-text-lexical-renderer"},{"cmd":"packages/utils","id":"utils"},{"cmd":"packages/validation","id":"validation"}]')
+ fromJson('[{"cmd":"packages/api","id":"api"},{"cmd":"packages/api-admin-settings","id":"api-admin-settings"},{"cmd":"packages/api-authentication","id":"api-authentication"},{"cmd":"packages/api-authentication-cognito","id":"api-authentication-cognito"},{"cmd":"packages/api-headless-cms-ddb","id":"api-headless-cms-ddb"},{"cmd":"packages/api-wcp","id":"api-wcp"},{"cmd":"packages/app-aco","id":"app-aco"},{"cmd":"packages/app-admin","id":"app-admin"},{"cmd":"packages/cwp-template-aws","id":"cwp-template-aws"},{"cmd":"packages/data-migration","id":"data-migration"},{"cmd":"packages/db-dynamodb","id":"db-dynamodb"},{"cmd":"packages/form","id":"form"},{"cmd":"packages/handler","id":"handler"},{"cmd":"packages/handler-aws","id":"handler-aws"},{"cmd":"packages/handler-graphql","id":"handler-graphql"},{"cmd":"packages/handler-logs","id":"handler-logs"},{"cmd":"packages/ioc","id":"ioc"},{"cmd":"packages/lexical-converter","id":"lexical-converter"},{"cmd":"packages/plugins","id":"plugins"},{"cmd":"packages/pubsub","id":"pubsub"},{"cmd":"packages/react-composition","id":"react-composition"},{"cmd":"packages/react-properties","id":"react-properties"},{"cmd":"packages/react-rich-text-lexical-renderer","id":"react-rich-text-lexical-renderer"},{"cmd":"packages/utils","id":"utils"},{"cmd":"packages/validation","id":"validation"}]')
}}
runs-on: ${{ matrix.os }}
env:
@@ -247,13 +247,15 @@ jobs:
package: >-
${{ fromJson('[{"cmd":"packages/api-aco
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-aco_ddb-es_ddb"},{"cmd":"packages/api-audit-logs
- --storage=ddb-es,ddb","storage":"ddb-es","id":"api-audit-logs_ddb-es_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
+ --storage=ddb-es,ddb","storage":"ddb-es","id":"api-audit-logs_ddb-es_ddb"},{"cmd":"packages/api-dynamodb-to-elasticsearch
+ --storage=ddb-es,ddb","storage":["ddb-es"],"id":"api-dynamodb-to-elasticsearch_ddb-es_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-elasticsearch-tasks_ddb-es_ddb"},{"cmd":"packages/api-file-manager
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-file-manager_ddb-es_ddb"},{"cmd":"packages/api-form-builder
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-form-builder_ddb-es_ddb"},{"cmd":"packages/api-form-builder-so-ddb-es
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-form-builder-so-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-ddb-es
- --storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-mailer
+ --storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-es-tasks
+ --storage=ddb-es,ddb","storage":["ddb-es"],"id":"api-headless-cms-es-tasks_ddb-es_ddb"},{"cmd":"packages/api-mailer
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-mailer_ddb-es_ddb"},{"cmd":"packages/api-page-builder
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-page-builder_ddb-es_ddb"},{"cmd":"packages/api-page-builder-aco
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-page-builder-aco_ddb-es_ddb"},{"cmd":"packages/api-page-builder-so-ddb-es
@@ -313,13 +315,15 @@ jobs:
package: >-
${{ fromJson('[{"cmd":"packages/api-aco
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-aco_ddb-os_ddb"},{"cmd":"packages/api-audit-logs
- --storage=ddb-os,ddb","storage":"ddb-os","id":"api-audit-logs_ddb-os_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
+ --storage=ddb-os,ddb","storage":"ddb-os","id":"api-audit-logs_ddb-os_ddb"},{"cmd":"packages/api-dynamodb-to-elasticsearch
+ --storage=ddb-os,ddb","storage":["ddb-os"],"id":"api-dynamodb-to-elasticsearch_ddb-os_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-elasticsearch-tasks_ddb-os_ddb"},{"cmd":"packages/api-file-manager
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-file-manager_ddb-os_ddb"},{"cmd":"packages/api-form-builder
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-form-builder_ddb-os_ddb"},{"cmd":"packages/api-form-builder-so-ddb-es
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-form-builder-so-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-ddb-es
- --storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-mailer
+ --storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-es-tasks
+ --storage=ddb-os,ddb","storage":["ddb-os"],"id":"api-headless-cms-es-tasks_ddb-os_ddb"},{"cmd":"packages/api-mailer
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-mailer_ddb-os_ddb"},{"cmd":"packages/api-page-builder
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-page-builder_ddb-os_ddb"},{"cmd":"packages/api-page-builder-aco
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-page-builder-aco_ddb-os_ddb"},{"cmd":"packages/api-page-builder-so-ddb-es
diff --git a/.github/workflows/pushNext.yml b/.github/workflows/pushNext.yml
index ba7a91bf11d..ececef094c5 100644
--- a/.github/workflows/pushNext.yml
+++ b/.github/workflows/pushNext.yml
@@ -143,7 +143,7 @@ jobs:
- 18
package: >-
${{
- fromJson('[{"cmd":"packages/api","id":"api"},{"cmd":"packages/api-admin-settings","id":"api-admin-settings"},{"cmd":"packages/api-authentication","id":"api-authentication"},{"cmd":"packages/api-authentication-cognito","id":"api-authentication-cognito"},{"cmd":"packages/api-dynamodb-to-elasticsearch","id":"api-dynamodb-to-elasticsearch"},{"cmd":"packages/api-headless-cms-ddb","id":"api-headless-cms-ddb"},{"cmd":"packages/api-wcp","id":"api-wcp"},{"cmd":"packages/app-aco","id":"app-aco"},{"cmd":"packages/app-admin","id":"app-admin"},{"cmd":"packages/cwp-template-aws","id":"cwp-template-aws"},{"cmd":"packages/data-migration","id":"data-migration"},{"cmd":"packages/db-dynamodb","id":"db-dynamodb"},{"cmd":"packages/form","id":"form"},{"cmd":"packages/handler","id":"handler"},{"cmd":"packages/handler-aws","id":"handler-aws"},{"cmd":"packages/handler-graphql","id":"handler-graphql"},{"cmd":"packages/handler-logs","id":"handler-logs"},{"cmd":"packages/ioc","id":"ioc"},{"cmd":"packages/lexical-converter","id":"lexical-converter"},{"cmd":"packages/plugins","id":"plugins"},{"cmd":"packages/pubsub","id":"pubsub"},{"cmd":"packages/react-composition","id":"react-composition"},{"cmd":"packages/react-properties","id":"react-properties"},{"cmd":"packages/react-rich-text-lexical-renderer","id":"react-rich-text-lexical-renderer"},{"cmd":"packages/utils","id":"utils"},{"cmd":"packages/validation","id":"validation"}]')
+ fromJson('[{"cmd":"packages/api","id":"api"},{"cmd":"packages/api-admin-settings","id":"api-admin-settings"},{"cmd":"packages/api-authentication","id":"api-authentication"},{"cmd":"packages/api-authentication-cognito","id":"api-authentication-cognito"},{"cmd":"packages/api-headless-cms-ddb","id":"api-headless-cms-ddb"},{"cmd":"packages/api-wcp","id":"api-wcp"},{"cmd":"packages/app-aco","id":"app-aco"},{"cmd":"packages/app-admin","id":"app-admin"},{"cmd":"packages/cwp-template-aws","id":"cwp-template-aws"},{"cmd":"packages/data-migration","id":"data-migration"},{"cmd":"packages/db-dynamodb","id":"db-dynamodb"},{"cmd":"packages/form","id":"form"},{"cmd":"packages/handler","id":"handler"},{"cmd":"packages/handler-aws","id":"handler-aws"},{"cmd":"packages/handler-graphql","id":"handler-graphql"},{"cmd":"packages/handler-logs","id":"handler-logs"},{"cmd":"packages/ioc","id":"ioc"},{"cmd":"packages/lexical-converter","id":"lexical-converter"},{"cmd":"packages/plugins","id":"plugins"},{"cmd":"packages/pubsub","id":"pubsub"},{"cmd":"packages/react-composition","id":"react-composition"},{"cmd":"packages/react-properties","id":"react-properties"},{"cmd":"packages/react-rich-text-lexical-renderer","id":"react-rich-text-lexical-renderer"},{"cmd":"packages/utils","id":"utils"},{"cmd":"packages/validation","id":"validation"}]')
}}
runs-on: ${{ matrix.os }}
env:
@@ -247,13 +247,15 @@ jobs:
package: >-
${{ fromJson('[{"cmd":"packages/api-aco
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-aco_ddb-es_ddb"},{"cmd":"packages/api-audit-logs
- --storage=ddb-es,ddb","storage":"ddb-es","id":"api-audit-logs_ddb-es_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
+ --storage=ddb-es,ddb","storage":"ddb-es","id":"api-audit-logs_ddb-es_ddb"},{"cmd":"packages/api-dynamodb-to-elasticsearch
+ --storage=ddb-es,ddb","storage":["ddb-es"],"id":"api-dynamodb-to-elasticsearch_ddb-es_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-elasticsearch-tasks_ddb-es_ddb"},{"cmd":"packages/api-file-manager
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-file-manager_ddb-es_ddb"},{"cmd":"packages/api-form-builder
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-form-builder_ddb-es_ddb"},{"cmd":"packages/api-form-builder-so-ddb-es
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-form-builder-so-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-ddb-es
- --storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-mailer
+ --storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-es-tasks
+ --storage=ddb-es,ddb","storage":["ddb-es"],"id":"api-headless-cms-es-tasks_ddb-es_ddb"},{"cmd":"packages/api-mailer
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-mailer_ddb-es_ddb"},{"cmd":"packages/api-page-builder
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-page-builder_ddb-es_ddb"},{"cmd":"packages/api-page-builder-aco
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-page-builder-aco_ddb-es_ddb"},{"cmd":"packages/api-page-builder-so-ddb-es
@@ -313,13 +315,15 @@ jobs:
package: >-
${{ fromJson('[{"cmd":"packages/api-aco
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-aco_ddb-os_ddb"},{"cmd":"packages/api-audit-logs
- --storage=ddb-os,ddb","storage":"ddb-os","id":"api-audit-logs_ddb-os_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
+ --storage=ddb-os,ddb","storage":"ddb-os","id":"api-audit-logs_ddb-os_ddb"},{"cmd":"packages/api-dynamodb-to-elasticsearch
+ --storage=ddb-os,ddb","storage":["ddb-os"],"id":"api-dynamodb-to-elasticsearch_ddb-os_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-elasticsearch-tasks_ddb-os_ddb"},{"cmd":"packages/api-file-manager
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-file-manager_ddb-os_ddb"},{"cmd":"packages/api-form-builder
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-form-builder_ddb-os_ddb"},{"cmd":"packages/api-form-builder-so-ddb-es
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-form-builder-so-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-ddb-es
- --storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-mailer
+ --storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-es-tasks
+ --storage=ddb-os,ddb","storage":["ddb-os"],"id":"api-headless-cms-es-tasks_ddb-os_ddb"},{"cmd":"packages/api-mailer
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-mailer_ddb-os_ddb"},{"cmd":"packages/api-page-builder
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-page-builder_ddb-os_ddb"},{"cmd":"packages/api-page-builder-aco
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-page-builder-aco_ddb-os_ddb"},{"cmd":"packages/api-page-builder-so-ddb-es
diff --git a/.github/workflows/wac/utils/listPackagesWithJestTests.ts b/.github/workflows/wac/utils/listPackagesWithJestTests.ts
index 325d862c6b4..ca92079a1da 100644
--- a/.github/workflows/wac/utils/listPackagesWithJestTests.ts
+++ b/.github/workflows/wac/utils/listPackagesWithJestTests.ts
@@ -202,6 +202,30 @@ const CUSTOM_HANDLERS: Record Array> = {
}
];
},
+ "api-dynamodb-to-elasticsearch": () => {
+ return [
+ {
+ cmd: "packages/api-dynamodb-to-elasticsearch --storage=ddb-es,ddb",
+ storage: ["ddb-es"]
+ },
+ {
+ cmd: "packages/api-dynamodb-to-elasticsearch --storage=ddb-os,ddb",
+ storage: ["ddb-os"]
+ }
+ ];
+ },
+ "api-headless-cms-es-tasks": () => {
+ return [
+ {
+ cmd: "packages/api-headless-cms-es-tasks --storage=ddb-es,ddb",
+ storage: ["ddb-es"]
+ },
+ {
+ cmd: "packages/api-headless-cms-es-tasks --storage=ddb-os,ddb",
+ storage: ["ddb-os"]
+ }
+ ];
+ },
tasks: () => {
return [
{ cmd: "packages/tasks --storage=ddb", storage: "ddb" },
@@ -250,7 +274,7 @@ function hasTestFiles(packageFolderPath: string) {
}
const files = fs.readdirSync(packageFolderPath);
- for (let filename of files) {
+ for (const filename of files) {
const filepath = path.join(packageFolderPath, filename);
if (fs.statSync(filepath).isDirectory()) {
const hasTFiles = hasTestFiles(filepath);
diff --git a/packages/api-background-tasks-es/package.json b/packages/api-background-tasks-es/package.json
index 9d2077656a5..cf917979443 100644
--- a/packages/api-background-tasks-es/package.json
+++ b/packages/api-background-tasks-es/package.json
@@ -11,6 +11,7 @@
"license": "MIT",
"dependencies": {
"@webiny/api-elasticsearch-tasks": "0.0.0",
+ "@webiny/api-headless-cms-es-tasks": "0.0.0",
"@webiny/plugins": "0.0.0",
"@webiny/tasks": "0.0.0"
},
diff --git a/packages/api-background-tasks-es/src/index.ts b/packages/api-background-tasks-es/src/index.ts
index 5e7808ab75d..cdc92f823d0 100644
--- a/packages/api-background-tasks-es/src/index.ts
+++ b/packages/api-background-tasks-es/src/index.ts
@@ -1,11 +1,13 @@
import { Plugin } from "@webiny/plugins/types";
import { createBackgroundTaskGraphQL, createBackgroundTaskContext } from "@webiny/tasks";
import { createElasticsearchBackgroundTasks } from "@webiny/api-elasticsearch-tasks";
+import { createHeadlessCmsEsTasks } from "@webiny/api-headless-cms-es-tasks";
export const createBackgroundTasks = (): Plugin[] => {
return [
...createBackgroundTaskContext(),
...createBackgroundTaskGraphQL(),
- ...createElasticsearchBackgroundTasks()
+ ...createElasticsearchBackgroundTasks(),
+ ...createHeadlessCmsEsTasks()
];
};
diff --git a/packages/api-background-tasks-es/tsconfig.build.json b/packages/api-background-tasks-es/tsconfig.build.json
index a24fe8b6152..4bb5a0db92b 100644
--- a/packages/api-background-tasks-es/tsconfig.build.json
+++ b/packages/api-background-tasks-es/tsconfig.build.json
@@ -3,6 +3,7 @@
"include": ["src"],
"references": [
{ "path": "../api-elasticsearch-tasks/tsconfig.build.json" },
+ { "path": "../api-headless-cms-es-tasks/tsconfig.build.json" },
{ "path": "../plugins/tsconfig.build.json" },
{ "path": "../tasks/tsconfig.build.json" }
],
diff --git a/packages/api-background-tasks-es/tsconfig.json b/packages/api-background-tasks-es/tsconfig.json
index b98d9beebb2..57fb6ce012b 100644
--- a/packages/api-background-tasks-es/tsconfig.json
+++ b/packages/api-background-tasks-es/tsconfig.json
@@ -3,6 +3,7 @@
"include": ["src", "__tests__"],
"references": [
{ "path": "../api-elasticsearch-tasks" },
+ { "path": "../api-headless-cms-es-tasks" },
{ "path": "../plugins" },
{ "path": "../tasks" }
],
@@ -15,6 +16,8 @@
"~tests/*": ["./__tests__/*"],
"@webiny/api-elasticsearch-tasks/*": ["../api-elasticsearch-tasks/src/*"],
"@webiny/api-elasticsearch-tasks": ["../api-elasticsearch-tasks/src"],
+ "@webiny/api-headless-cms-es-tasks/*": ["../api-headless-cms-es-tasks/src/*"],
+ "@webiny/api-headless-cms-es-tasks": ["../api-headless-cms-es-tasks/src"],
"@webiny/plugins/*": ["../plugins/src/*"],
"@webiny/plugins": ["../plugins/src"],
"@webiny/tasks/*": ["../tasks/src/*"],
diff --git a/packages/api-background-tasks-os/package.json b/packages/api-background-tasks-os/package.json
index 83a3f5b8c06..31cbbbc1400 100644
--- a/packages/api-background-tasks-os/package.json
+++ b/packages/api-background-tasks-os/package.json
@@ -11,6 +11,7 @@
"license": "MIT",
"dependencies": {
"@webiny/api-elasticsearch-tasks": "0.0.0",
+ "@webiny/api-headless-cms-es-tasks": "0.0.0",
"@webiny/plugins": "0.0.0",
"@webiny/tasks": "0.0.0"
},
diff --git a/packages/api-background-tasks-os/src/index.ts b/packages/api-background-tasks-os/src/index.ts
index 5e7808ab75d..cdc92f823d0 100644
--- a/packages/api-background-tasks-os/src/index.ts
+++ b/packages/api-background-tasks-os/src/index.ts
@@ -1,11 +1,13 @@
import { Plugin } from "@webiny/plugins/types";
import { createBackgroundTaskGraphQL, createBackgroundTaskContext } from "@webiny/tasks";
import { createElasticsearchBackgroundTasks } from "@webiny/api-elasticsearch-tasks";
+import { createHeadlessCmsEsTasks } from "@webiny/api-headless-cms-es-tasks";
export const createBackgroundTasks = (): Plugin[] => {
return [
...createBackgroundTaskContext(),
...createBackgroundTaskGraphQL(),
- ...createElasticsearchBackgroundTasks()
+ ...createElasticsearchBackgroundTasks(),
+ ...createHeadlessCmsEsTasks()
];
};
diff --git a/packages/api-background-tasks-os/tsconfig.build.json b/packages/api-background-tasks-os/tsconfig.build.json
index a24fe8b6152..4bb5a0db92b 100644
--- a/packages/api-background-tasks-os/tsconfig.build.json
+++ b/packages/api-background-tasks-os/tsconfig.build.json
@@ -3,6 +3,7 @@
"include": ["src"],
"references": [
{ "path": "../api-elasticsearch-tasks/tsconfig.build.json" },
+ { "path": "../api-headless-cms-es-tasks/tsconfig.build.json" },
{ "path": "../plugins/tsconfig.build.json" },
{ "path": "../tasks/tsconfig.build.json" }
],
diff --git a/packages/api-background-tasks-os/tsconfig.json b/packages/api-background-tasks-os/tsconfig.json
index b98d9beebb2..57fb6ce012b 100644
--- a/packages/api-background-tasks-os/tsconfig.json
+++ b/packages/api-background-tasks-os/tsconfig.json
@@ -3,6 +3,7 @@
"include": ["src", "__tests__"],
"references": [
{ "path": "../api-elasticsearch-tasks" },
+ { "path": "../api-headless-cms-es-tasks" },
{ "path": "../plugins" },
{ "path": "../tasks" }
],
@@ -15,6 +16,8 @@
"~tests/*": ["./__tests__/*"],
"@webiny/api-elasticsearch-tasks/*": ["../api-elasticsearch-tasks/src/*"],
"@webiny/api-elasticsearch-tasks": ["../api-elasticsearch-tasks/src"],
+ "@webiny/api-headless-cms-es-tasks/*": ["../api-headless-cms-es-tasks/src/*"],
+ "@webiny/api-headless-cms-es-tasks": ["../api-headless-cms-es-tasks/src"],
"@webiny/plugins/*": ["../plugins/src/*"],
"@webiny/plugins": ["../plugins/src"],
"@webiny/tasks/*": ["../tasks/src/*"],
diff --git a/packages/api-dynamodb-to-elasticsearch/__tests__/event.test.ts b/packages/api-dynamodb-to-elasticsearch/__tests__/event.test.ts
index 809695e3ec7..7896a1a35ba 100644
--- a/packages/api-dynamodb-to-elasticsearch/__tests__/event.test.ts
+++ b/packages/api-dynamodb-to-elasticsearch/__tests__/event.test.ts
@@ -73,7 +73,8 @@ describe("event", () => {
},
lambdaContext,
request,
- reply
+ reply,
+ next: jest.fn()
});
expect(result).toEqual(null);
@@ -86,7 +87,8 @@ describe("event", () => {
event,
lambdaContext,
request,
- reply
+ reply,
+ next: jest.fn()
});
expect(result).toEqual(null);
diff --git a/packages/api-dynamodb-to-elasticsearch/__tests__/transfer.test.ts b/packages/api-dynamodb-to-elasticsearch/__tests__/transfer.test.ts
new file mode 100644
index 00000000000..3f30a387c25
--- /dev/null
+++ b/packages/api-dynamodb-to-elasticsearch/__tests__/transfer.test.ts
@@ -0,0 +1,56 @@
+import { createEventHandler, Operations } from "~/index";
+import { createElasticsearchClient } from "@webiny/project-utils/testing/elasticsearch/createClient";
+import { ElasticsearchContext } from "@webiny/api-elasticsearch/types";
+import { Context, LambdaContext, Reply, Request } from "@webiny/handler-aws/types";
+import { marshall } from "@webiny/aws-sdk/client-dynamodb";
+import { PluginsContainer } from "@webiny/plugins";
+
+describe("transfer data", () => {
+ it("should transfer data from event to elasticsearch", async () => {
+ const event = createEventHandler();
+
+ const elasticsearch = createElasticsearchClient();
+
+ const context = {
+ elasticsearch,
+ plugins: new PluginsContainer()
+ } as unknown as ElasticsearchContext & Context;
+ /**
+ * Register index which is going to get created, so it can be deleted after the test.
+ */
+ const index = "a-test-index";
+ elasticsearch.indices.registerIndex(index);
+
+ const result = await event.cb({
+ context,
+ reply: {} as Reply,
+ request: {} as Request,
+ event: {
+ Records: [
+ {
+ eventName: Operations.INSERT,
+ dynamodb: {
+ Keys: marshall({
+ PK: "PK_TEST",
+ SK: "SK_TEST"
+ }) as any,
+ NewImage: marshall({
+ index,
+ ignore: false,
+ data: {
+ title: "Hello World"
+ }
+ }) as any
+ }
+ }
+ ]
+ },
+ lambdaContext: {} as LambdaContext,
+ next: jest.fn()
+ });
+
+ expect(result).toEqual(null);
+
+ await elasticsearch.indices.deleteAll();
+ });
+});
diff --git a/packages/api-dynamodb-to-elasticsearch/src/NotEnoughRemainingTimeError.ts b/packages/api-dynamodb-to-elasticsearch/src/NotEnoughRemainingTimeError.ts
new file mode 100644
index 00000000000..1aaef7d8dd2
--- /dev/null
+++ b/packages/api-dynamodb-to-elasticsearch/src/NotEnoughRemainingTimeError.ts
@@ -0,0 +1,3 @@
+import { WebinyError } from "@webiny/error";
+
+export class NotEnoughRemainingTimeError extends WebinyError {}
diff --git a/packages/api-dynamodb-to-elasticsearch/src/index.ts b/packages/api-dynamodb-to-elasticsearch/src/index.ts
index 477bf769cc5..212dec152c0 100644
--- a/packages/api-dynamodb-to-elasticsearch/src/index.ts
+++ b/packages/api-dynamodb-to-elasticsearch/src/index.ts
@@ -1,11 +1,18 @@
import WebinyError from "@webiny/error";
import { AttributeValue, unmarshall as baseUnmarshall } from "@webiny/aws-sdk/client-dynamodb";
-import { decompress } from "@webiny/api-elasticsearch";
+import {
+ createWaitUntilHealthy,
+ decompress,
+ UnhealthyClusterError,
+ WaitingHealthyClusterAbortedError
+} from "@webiny/api-elasticsearch";
import { ApiResponse, ElasticsearchContext } from "@webiny/api-elasticsearch/types";
-import { createDynamoDBEventHandler } from "@webiny/handler-aws";
+import { createDynamoDBEventHandler, timerFactory } from "@webiny/handler-aws";
+import { ElasticsearchCatClusterHealthStatus } from "@webiny/api-elasticsearch/operations/types";
import pRetry from "p-retry";
+import { NotEnoughRemainingTimeError } from "./NotEnoughRemainingTimeError";
-enum Operations {
+export enum Operations {
INSERT = "INSERT",
MODIFY = "MODIFY",
REMOVE = "REMOVE"
@@ -39,15 +46,6 @@ const getError = (item: BulkOperationsResponseBodyItem): string | null => {
return reason;
};
-const getNumberEnvVariable = (name: string, def: number): number => {
- const input = process.env[name];
- const value = Number(input);
- if (value > 0) {
- return value;
- }
- return def;
-};
-
const checkErrors = (result?: ApiResponse): void => {
if (!result || !result.body || !result.body.items) {
return;
@@ -67,6 +65,22 @@ const checkErrors = (result?: ApiResponse): void =>
}
};
+const getNumberEnvVariable = (name: string, def: number): number => {
+ const input = process.env[name];
+ const value = Number(input);
+ if (isNaN(value)) {
+ return def;
+ } else if (value <= 0) {
+ return def;
+ }
+ return value;
+};
+
+const MAX_PROCESSOR_PERCENT = getNumberEnvVariable(
+ "MAX_ES_PROCESSOR",
+ process.env.NODE_ENV === "test" ? 101 : 98
+);
+
interface RecordDynamoDbImage {
data: Record;
ignore?: boolean;
@@ -85,108 +99,182 @@ const unmarshall = (value?: Record): T | undefined =>
return baseUnmarshall(value) as T;
};
+const minRemainingSecondsToTimeout = 120;
+
+/**
+ * Also, we need to set the maximum running time for the Lambda Function.
+ * https://github.com/webiny/webiny-js/blob/f7352d418da2b5ae0b781376be46785aa7ac6ae0/packages/pulumi-aws/src/apps/core/CoreOpenSearch.ts#L232
+ * https://github.com/webiny/webiny-js/blob/f7352d418da2b5ae0b781376be46785aa7ac6ae0/packages/pulumi-aws/src/apps/core/CoreElasticSearch.ts#L218
+ */
+const MAX_RUNNING_TIME = 900;
+
export const createEventHandler = () => {
- return createDynamoDBEventHandler(async ({ event, context: ctx }) => {
+ return createDynamoDBEventHandler(async ({ event, context: ctx, lambdaContext }) => {
+ const timer = timerFactory(lambdaContext);
const context = ctx as unknown as ElasticsearchContext;
if (!context.elasticsearch) {
console.error("Missing elasticsearch definition on context.");
return null;
}
- /**
- * Wrap the code we need to run into the function, so it can be called within itself.
- */
- const execute = async (): Promise => {
- const operations = [];
+ const operations: Record[] = [];
- for (const record of event.Records) {
- const dynamodb = record.dynamodb;
- if (!dynamodb) {
- continue;
- }
+ const operationIdList: string[] = [];
+
+ for (const record of event.Records) {
+ const dynamodb = record.dynamodb;
+ if (!dynamodb) {
+ continue;
+ }
+ /**
+ * TODO: figure out correct types
+ */
+ // @ts-expect-error
+ const newImage = unmarshall(dynamodb.NewImage);
+
+ // Note that with the `REMOVE` event, there is no `NewImage` property. Which means,
+ // if the `newImage` is `undefined`, we are dealing with a `REMOVE` event and we still
+ // need to process it.
+ if (newImage && newImage.ignore === true) {
+ continue;
+ }
+ /**
+ * TODO: figure out correct types
+ */
+ // @ts-expect-error
+ const keys = unmarshall(dynamodb.Keys);
+ if (!keys?.PK || !keys.SK) {
+ continue;
+ }
+ const _id = `${keys.PK}:${keys.SK}`;
+ /**
+ * TODO: figure out correct types
+ */
+ // @ts-expect-error
+ const oldImage = unmarshall(dynamodb.OldImage);
+ const operation = record.eventName;
+
+ /**
+ * On operations other than REMOVE we decompress the data and store it into the Elasticsearch.
+ * No need to try to decompress if operation is REMOVE since there is no data sent into that operation.
+ */
+ let data: any = undefined;
+ if (newImage && operation !== Operations.REMOVE) {
/**
- * TODO: figure out correct types
+ * We must decompress the data that is going into the Elasticsearch.
*/
- // @ts-expect-error
- const newImage = unmarshall(dynamodb.NewImage);
-
- // Note that with the `REMOVE` event, there is no `NewImage` property. Which means,
- // if the `newImage` is `undefined`, we are dealing with a `REMOVE` event and we still
- // need to process it.
- if (newImage && newImage.ignore === true) {
- continue;
- }
+ data = await decompress(context.plugins, newImage.data);
/**
- * TODO: figure out correct types
+ * No point in writing null or undefined data into the Elasticsearch.
+ * This might happen on some error while decompressing. We will log it.
+ *
+ * Data should NEVER be null or undefined in the Elasticsearch DynamoDB table, unless it is a delete operations.
+ * If it is - it is a bug.
*/
- // @ts-expect-error
- const keys = unmarshall(dynamodb.Keys);
- if (!keys?.PK || !keys.SK) {
+ if (data === undefined || data === null) {
+ console.error(
+ `Could not get decompressed data, skipping ES operation "${operation}", ID ${_id}`
+ );
continue;
}
- const _id = `${keys.PK}:${keys.SK}`;
- /**
- * TODO: figure out correct types
- */
- // @ts-expect-error
- const oldImage = unmarshall(dynamodb.OldImage);
- const operation = record.eventName;
+ }
- /**
- * On operations other than REMOVE we decompress the data and store it into the Elasticsearch.
- * No need to try to decompress if operation is REMOVE since there is no data sent into that operation.
- */
- let data: any = undefined;
- if (newImage && operation !== Operations.REMOVE) {
- /**
- * We must decompress the data that is going into the Elasticsearch.
- */
- data = await decompress(context.plugins, newImage.data);
- /**
- * No point in writing null or undefined data into the Elasticsearch.
- * This might happen on some error while decompressing. We will log it.
- *
- * Data should NEVER be null or undefined in the Elasticsearch DynamoDB table, unless it is a delete operations.
- * If it is - it is a bug.
- */
- if (data === undefined || data === null) {
- console.error(
- `Could not get decompressed data, skipping ES operation "${operation}", ID ${_id}`
+ operationIdList.push(_id);
+
+ switch (record.eventName) {
+ case Operations.INSERT:
+ case Operations.MODIFY:
+ if (newImage) {
+ operations.push(
+ {
+ index: {
+ _id,
+ _index: newImage.index
+ }
+ },
+ data
);
- continue;
}
- }
-
- switch (record.eventName) {
- case Operations.INSERT:
- case Operations.MODIFY:
- if (newImage) {
- operations.push(
- {
- index: {
- _id,
- _index: newImage.index
- }
- },
- data
- );
+ break;
+ case Operations.REMOVE:
+ operations.push({
+ delete: {
+ _id,
+ _index: oldImage?.index || "unknown"
}
- break;
- case Operations.REMOVE:
- operations.push({
- delete: {
- _id,
- _index: oldImage?.index || "unknown"
- }
- });
- break;
- default:
- break;
- }
+ });
+ break;
+ default:
+ break;
}
+ }
+ /**
+ * No need to do anything if there are no operations.
+ */
+ if (operations.length === 0) {
+ return null;
+ }
+ /**
+ * Wrap the code we need to run into the function, so it can be called within itself.
+ */
+ const execute = async (): Promise => {
+ const remainingTime = timer.getRemainingSeconds();
+ const runningTime = MAX_RUNNING_TIME - remainingTime;
+ const maxWaitingTime = remainingTime - 90;
- if (!operations.length) {
- return;
+ if (process.env.DEBUG === "true") {
+ console.debug(
+ `The Lambda is already running for ${runningTime}s. Setting Health Check max waiting time: ${maxWaitingTime}s`
+ );
+ }
+
+ const healthCheck = createWaitUntilHealthy(context.elasticsearch, {
+ minClusterHealthStatus: ElasticsearchCatClusterHealthStatus.Yellow,
+ waitingTimeStep: 30,
+ maxProcessorPercent: MAX_PROCESSOR_PERCENT,
+ maxWaitingTime
+ });
+
+ try {
+ await healthCheck.wait({
+ async onUnhealthy({
+ startedAt,
+ runs,
+ mustEndAt,
+ waitingTimeStep,
+ waitingReason
+ }) {
+ console.debug(`Cluster is unhealthy on run #${runs}.`, {
+ startedAt,
+ mustEndAt,
+ waitingTimeStep,
+ waitingReason
+ });
+ },
+ async onTimeout({
+ startedAt,
+ runs,
+ waitingTimeStep,
+ mustEndAt,
+ waitingReason
+ }) {
+ console.error(`Cluster health check timeout on run #${runs}.`, {
+ startedAt,
+ mustEndAt,
+ waitingTimeStep,
+ waitingReason
+ });
+ }
+ });
+ } catch (ex) {
+ if (
+ ex instanceof UnhealthyClusterError ||
+ ex instanceof WaitingHealthyClusterAbortedError
+ ) {
+ throw ex;
+ }
+ console.error(`Cluster health check failed.`, ex);
+ throw ex;
}
try {
@@ -195,13 +283,20 @@ export const createEventHandler = () => {
});
checkErrors(res);
} catch (error) {
- if (process.env.DEBUG === "true") {
- const meta = error?.meta || {};
- delete meta["meta"];
- console.error("Bulk error", JSON.stringify(error, null, 2));
+ if (process.env.DEBUG !== "true") {
+ throw error;
}
+ const meta = error?.meta || {};
+ delete meta["meta"];
+ console.error("Bulk error", JSON.stringify(error, null, 2));
throw error;
}
+ if (process.env.DEBUG !== "true") {
+ return;
+ }
+ console.info(
+ `Transferred ${operations.length / 2} record operations to Elasticsearch.`
+ );
};
const maxRetryTime = getNumberEnvVariable(
@@ -218,22 +313,30 @@ export const createEventHandler = () => {
30000
);
- await pRetry(execute, {
- maxRetryTime,
- retries,
- minTimeout,
- maxTimeout,
- onFailedAttempt: error => {
- /**
- * We will only log attempts which are after 3/4 of total attempts.
- */
- if (error.attemptNumber < retries * 0.75) {
- return;
+ try {
+ await pRetry(execute, {
+ maxRetryTime,
+ retries,
+ minTimeout,
+ maxTimeout,
+ onFailedAttempt: error => {
+ if (timer.getRemainingSeconds() < minRemainingSecondsToTimeout) {
+ throw new NotEnoughRemainingTimeError(error);
+ }
+ /**
+ * We will only log attempts which are after 3/4 of total attempts.
+ */
+ if (error.attemptNumber < retries * 0.75) {
+ return;
+ }
+ console.error(`Attempt #${error.attemptNumber} failed.`);
+ console.error(error);
}
- console.error(`Attempt #${error.attemptNumber} failed.`);
- console.error(error.message);
- }
- });
+ });
+ } catch (ex) {
+ // TODO implement storing of failed operations
+ throw ex;
+ }
return null;
});
diff --git a/packages/api-elasticsearch/__tests__/utils/waitUntilHealthy.test.ts b/packages/api-elasticsearch/__tests__/utils/waitUntilHealthy.test.ts
index f3f173b0ea3..d9666fe5efd 100644
--- a/packages/api-elasticsearch/__tests__/utils/waitUntilHealthy.test.ts
+++ b/packages/api-elasticsearch/__tests__/utils/waitUntilHealthy.test.ts
@@ -1,6 +1,6 @@
import { createWaitUntilHealthy } from "~/utils/waitUntilHealthy";
import { createElasticsearchClient } from "@webiny/project-utils/testing/elasticsearch/createClient";
-import { ElasticsearchCatHealthStatus } from "~/operations/types";
+import { ElasticsearchCatClusterHealthStatus } from "~/operations/types";
import { UnhealthyClusterError } from "~/utils/waitUntilHealthy/UnhealthyClusterError";
import { WaitingHealthyClusterAbortedError } from "~/utils/waitUntilHealthy/WaitingHealthyClusterAbortedError";
@@ -9,11 +9,25 @@ describe("wait until healthy", () => {
it("should wait until the cluster is healthy - single run", async () => {
const waitUntilHealthy = createWaitUntilHealthy(client, {
- minStatus: ElasticsearchCatHealthStatus.Yellow,
+ minClusterHealthStatus: ElasticsearchCatClusterHealthStatus.Yellow,
maxProcessorPercent: 101,
+ maxRamPercent: 101,
maxWaitingTime: 30,
- waitingTimeStep: 5,
- maxRamPercent: 101
+ waitingTimeStep: 5
+ });
+
+ const { runs, runningTime } = await waitUntilHealthy.wait();
+
+ expect(runs).toEqual(1);
+ expect(runningTime).toBeLessThan(30000);
+ });
+
+ it("should wait until the cluster is healthy - no max memory defined", async () => {
+ const waitUntilHealthy = createWaitUntilHealthy(client, {
+ minClusterHealthStatus: ElasticsearchCatClusterHealthStatus.Yellow,
+ maxProcessorPercent: 101,
+ maxWaitingTime: 30,
+ waitingTimeStep: 5
});
const { runs, runningTime } = await waitUntilHealthy.wait();
@@ -25,11 +39,11 @@ describe("wait until healthy", () => {
it("should wait until the cluster is health - processor - max waiting time hit", async () => {
expect.assertions(2);
const waitUntilHealthy = createWaitUntilHealthy(client, {
- minStatus: ElasticsearchCatHealthStatus.Yellow,
+ minClusterHealthStatus: ElasticsearchCatClusterHealthStatus.Yellow,
maxProcessorPercent: 1,
+ maxRamPercent: 99,
maxWaitingTime: 3,
- waitingTimeStep: 1,
- maxRamPercent: 99
+ waitingTimeStep: 1
});
try {
@@ -43,11 +57,11 @@ describe("wait until healthy", () => {
it("should wait until the cluster is health - memory - max waiting time hit", async () => {
expect.assertions(2);
const waitUntilHealthy = createWaitUntilHealthy(client, {
- minStatus: ElasticsearchCatHealthStatus.Yellow,
+ minClusterHealthStatus: ElasticsearchCatClusterHealthStatus.Yellow,
maxProcessorPercent: 99,
+ maxRamPercent: 1,
maxWaitingTime: 3,
- waitingTimeStep: 1,
- maxRamPercent: 1
+ waitingTimeStep: 1
});
try {
@@ -62,11 +76,11 @@ describe("wait until healthy", () => {
it("should trigger onUnhealthy callback - once", async () => {
expect.assertions(2);
const waitUntilHealthy = createWaitUntilHealthy(client, {
- minStatus: ElasticsearchCatHealthStatus.Green,
+ minClusterHealthStatus: ElasticsearchCatClusterHealthStatus.Green,
maxProcessorPercent: 1,
+ maxRamPercent: 1,
maxWaitingTime: 1,
- waitingTimeStep: 3,
- maxRamPercent: 1
+ waitingTimeStep: 3
});
const onUnhealthy = jest.fn();
@@ -88,11 +102,11 @@ describe("wait until healthy", () => {
it("should trigger onUnhealthy callback - multiple times", async () => {
expect.assertions(2);
const waitUntilHealthy = createWaitUntilHealthy(client, {
- minStatus: ElasticsearchCatHealthStatus.Green,
+ minClusterHealthStatus: ElasticsearchCatClusterHealthStatus.Green,
maxProcessorPercent: 1,
+ maxRamPercent: 1,
maxWaitingTime: 3,
- waitingTimeStep: 1,
- maxRamPercent: 1
+ waitingTimeStep: 1
});
const onUnhealthy = jest.fn();
@@ -114,11 +128,11 @@ describe("wait until healthy", () => {
it("should trigger onTimeout callback - once", async () => {
expect.assertions(3);
const waitUntilHealthy = createWaitUntilHealthy(client, {
- minStatus: ElasticsearchCatHealthStatus.Green,
+ minClusterHealthStatus: ElasticsearchCatClusterHealthStatus.Green,
maxProcessorPercent: 1,
+ maxRamPercent: 1,
maxWaitingTime: 3,
- waitingTimeStep: 1,
- maxRamPercent: 1
+ waitingTimeStep: 1
});
const onUnhealthy = jest.fn();
@@ -145,11 +159,11 @@ describe("wait until healthy", () => {
it("should trigger abort even before the checks start", async () => {
expect.assertions(3);
const waitUntilHealthy = createWaitUntilHealthy(client, {
- minStatus: ElasticsearchCatHealthStatus.Green,
+ minClusterHealthStatus: ElasticsearchCatClusterHealthStatus.Green,
maxProcessorPercent: 1,
+ maxRamPercent: 1,
maxWaitingTime: 1,
- waitingTimeStep: 3,
- maxRamPercent: 1
+ waitingTimeStep: 3
});
waitUntilHealthy.abort();
@@ -179,11 +193,11 @@ describe("wait until healthy", () => {
it("should trigger abort in onUnhealthy callback", async () => {
expect.assertions(2);
const waitUntilHealthy = createWaitUntilHealthy(client, {
- minStatus: ElasticsearchCatHealthStatus.Green,
+ minClusterHealthStatus: ElasticsearchCatClusterHealthStatus.Green,
maxProcessorPercent: 1,
+ maxRamPercent: 1,
maxWaitingTime: 1,
- waitingTimeStep: 3,
- maxRamPercent: 1
+ waitingTimeStep: 3
});
const onUnhealthy = jest.fn();
diff --git a/packages/api-elasticsearch/src/client.ts b/packages/api-elasticsearch/src/client.ts
index ef8ba161140..73b84e1a3ce 100644
--- a/packages/api-elasticsearch/src/client.ts
+++ b/packages/api-elasticsearch/src/client.ts
@@ -72,7 +72,7 @@ export const createElasticsearchClient = (options: ElasticsearchClientOptions):
...rest,
auth: undefined
};
- console.log({
+ console.error({
...data
});
throw new WebinyError(
diff --git a/packages/api-elasticsearch/src/operations/index.ts b/packages/api-elasticsearch/src/operations/index.ts
index c0d0520fb51..4a8a803a831 100644
--- a/packages/api-elasticsearch/src/operations/index.ts
+++ b/packages/api-elasticsearch/src/operations/index.ts
@@ -1,2 +1,3 @@
export * from "./ElasticsearchCatHealth";
export * from "./ElasticsearchCatNodes";
+export * from "./types";
diff --git a/packages/api-elasticsearch/src/operations/types.ts b/packages/api-elasticsearch/src/operations/types.ts
index cfc8decc94c..6c2abc67c39 100644
--- a/packages/api-elasticsearch/src/operations/types.ts
+++ b/packages/api-elasticsearch/src/operations/types.ts
@@ -1,4 +1,4 @@
-export enum ElasticsearchCatHealthStatus {
+export enum ElasticsearchCatClusterHealthStatus {
Green = "green",
Yellow = "yellow",
Red = "red"
@@ -8,7 +8,7 @@ export interface IElasticsearchCatHealthResponse {
epoch: number;
timestamp: `${number}:${number}:${number}`;
cluster: string;
- status: ElasticsearchCatHealthStatus;
+ status: ElasticsearchCatClusterHealthStatus;
"node.total": `${number}`;
"node.data": `${number}`;
shards: `${number}`;
diff --git a/packages/api-elasticsearch/src/utils/index.ts b/packages/api-elasticsearch/src/utils/index.ts
index 14d0e3eae28..fb384855b13 100644
--- a/packages/api-elasticsearch/src/utils/index.ts
+++ b/packages/api-elasticsearch/src/utils/index.ts
@@ -1 +1,3 @@
+export * from "./waitUntilHealthy";
export * from "./createIndex";
+export * from "./waitUntilHealthy";
diff --git a/packages/api-elasticsearch/src/utils/waitUntilHealthy/WaitUntilHealthy.ts b/packages/api-elasticsearch/src/utils/waitUntilHealthy/WaitUntilHealthy.ts
index f8bef386cfe..93475f45cec 100644
--- a/packages/api-elasticsearch/src/utils/waitUntilHealthy/WaitUntilHealthy.ts
+++ b/packages/api-elasticsearch/src/utils/waitUntilHealthy/WaitUntilHealthy.ts
@@ -1,17 +1,33 @@
import { Client } from "~/client";
import { ElasticsearchCatHealth } from "~/operations/ElasticsearchCatHealth";
import { ElasticsearchCatNodes } from "~/operations/ElasticsearchCatNodes";
-import { ElasticsearchCatHealthStatus, IElasticsearchCatNodesResponse } from "~/operations/types";
+import {
+ ElasticsearchCatClusterHealthStatus,
+ IElasticsearchCatHealthResponse,
+ IElasticsearchCatNodesResponse
+} from "~/operations/types";
import { UnhealthyClusterError } from "~/utils/waitUntilHealthy/UnhealthyClusterError";
+import {
+ ClusterHealthReason,
+ createClusterHealthStatusReason,
+ createMemoryReason,
+ createProcessorReason,
+ MemoryReason,
+ ProcessorReason
+} from "./reason";
import { WaitingHealthyClusterAbortedError } from "./WaitingHealthyClusterAbortedError";
const WAITING_TIME_STEP = 10;
+export type WaitingReason = ProcessorReason | MemoryReason | ClusterHealthReason;
+
export interface IWaitUntilHealthyParams {
/**
* Minimum status allowed, otherwise the cluster is considered unhealthy.
*/
- minStatus: ElasticsearchCatHealthStatus.Green | ElasticsearchCatHealthStatus.Yellow;
+ minClusterHealthStatus:
+ | ElasticsearchCatClusterHealthStatus.Green
+ | ElasticsearchCatClusterHealthStatus.Yellow;
/**
* Maximum processor percent allowed, otherwise the cluster is considered unhealthy.
*/
@@ -19,7 +35,7 @@ export interface IWaitUntilHealthyParams {
/**
* Maximum RAM percent allowed, otherwise the cluster is considered unhealthy.
*/
- maxRamPercent: number;
+ maxRamPercent?: number;
/**
* Maximum time to wait in seconds.
* This is to prevent infinite waiting in case the cluster never becomes healthy.
@@ -38,6 +54,7 @@ export interface IWaitOptionsOnUnhealthyParams {
mustEndAt: Date;
waitingTimeStep: number;
runs: number;
+ waitingReason: WaitingReason;
}
export interface IWaitOptionsOnTimeoutParams {
@@ -45,6 +62,7 @@ export interface IWaitOptionsOnTimeoutParams {
mustEndAt: Date;
waitingTimeStep: number;
runs: number;
+ waitingReason: WaitingReason;
}
export interface IWaitOptions {
@@ -91,13 +109,15 @@ class WaitUntilHealthy {
const mustEndAt = new Date(startedAt.getTime() + this.options.maxWaitingTime * 1000);
const waitingTimeStep = this.options.waitingTimeStep || WAITING_TIME_STEP;
let runs = 1;
- while (await this.shouldWait()) {
+ let waitingReason: WaitingReason | false;
+ while ((waitingReason = await this.shouldWait())) {
if (new Date() >= mustEndAt) {
if (options?.onTimeout) {
await options.onTimeout({
startedAt,
mustEndAt,
waitingTimeStep,
+ waitingReason,
runs
});
}
@@ -107,6 +127,7 @@ class WaitUntilHealthy {
startedAt,
mustEndAt,
waitingTimeStep,
+ waitingReason,
runs
});
}
@@ -130,22 +151,61 @@ class WaitUntilHealthy {
};
}
- private async shouldWait(): Promise {
- const health = await this.catHealth.getHealth();
- const nodes = await this.catNodes.getNodes();
+ private async shouldWait(): Promise {
+ let health: IElasticsearchCatHealthResponse;
+ let nodes: IElasticsearchCatNodesResponse;
+ try {
+ health = await this.catHealth.getHealth();
+ } catch (ex) {
+ return createClusterHealthStatusReason({
+ description: ex.message,
+ minimum: this.options.minClusterHealthStatus,
+ current: ElasticsearchCatClusterHealthStatus.Red
+ });
+ }
+ try {
+ nodes = await this.catNodes.getNodes();
+ } catch (ex) {
+ return createClusterHealthStatusReason({
+ description: ex.message,
+ minimum: this.options.minClusterHealthStatus,
+ current: ElasticsearchCatClusterHealthStatus.Red
+ });
+ }
- const status = this.transformStatus(health.status);
- if (status > this.transformStatus(this.options.minStatus)) {
- return true;
+ const clusterHealthStatus = this.transformClusterHealthStatus(health.status);
+ const minClusterHealthStatus = this.transformClusterHealthStatus(
+ this.options.minClusterHealthStatus
+ );
+ if (clusterHealthStatus > minClusterHealthStatus) {
+ return createClusterHealthStatusReason({
+ minimum: this.options.minClusterHealthStatus,
+ current: health.status
+ });
}
const processorPercent = this.getProcessorPercent(nodes);
if (processorPercent > this.options.maxProcessorPercent) {
- return true;
+ return createProcessorReason({
+ maximum: this.options.maxProcessorPercent,
+ current: processorPercent
+ });
+ }
+ /**
+ * Possibly no max ram definition?
+ */
+ if (this.options.maxRamPercent === undefined) {
+ return false;
}
const ramPercent = this.getRamPercent(nodes);
- return ramPercent > this.options.maxRamPercent;
+ if (ramPercent > this.options.maxRamPercent) {
+ return createMemoryReason({
+ maximum: this.options.maxRamPercent,
+ current: ramPercent
+ });
+ }
+ return false;
}
private getProcessorPercent(nodes: IElasticsearchCatNodesResponse): number {
@@ -162,13 +222,13 @@ class WaitUntilHealthy {
return total / nodes.length;
}
- private transformStatus(status: ElasticsearchCatHealthStatus): number {
+ private transformClusterHealthStatus(status: ElasticsearchCatClusterHealthStatus): number {
switch (status) {
- case ElasticsearchCatHealthStatus.Green:
+ case ElasticsearchCatClusterHealthStatus.Green:
return 1;
- case ElasticsearchCatHealthStatus.Yellow:
+ case ElasticsearchCatClusterHealthStatus.Yellow:
return 2;
- case ElasticsearchCatHealthStatus.Red:
+ case ElasticsearchCatClusterHealthStatus.Red:
return 3;
default:
return 99;
diff --git a/packages/api-elasticsearch/src/utils/waitUntilHealthy/index.ts b/packages/api-elasticsearch/src/utils/waitUntilHealthy/index.ts
index b260b1e9f80..0d8016d6417 100644
--- a/packages/api-elasticsearch/src/utils/waitUntilHealthy/index.ts
+++ b/packages/api-elasticsearch/src/utils/waitUntilHealthy/index.ts
@@ -1 +1,6 @@
+export * from "./WaitingHealthyClusterAbortedError";
+export * from "./UnhealthyClusterError";
export * from "./WaitUntilHealthy";
+export * from "./UnhealthyClusterError";
+export * from "./WaitUntilHealthy";
+export * from "./reason";
diff --git a/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/ClusterHealthReason.ts b/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/ClusterHealthReason.ts
new file mode 100644
index 00000000000..60861210ff6
--- /dev/null
+++ b/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/ClusterHealthReason.ts
@@ -0,0 +1,27 @@
+import { ElasticsearchCatClusterHealthStatus } from "~/operations";
+import { IReason } from "~/utils/waitUntilHealthy/reason/IReason";
+
+export interface IClusterHealthReasonParams {
+ minimum: ElasticsearchCatClusterHealthStatus;
+ current: ElasticsearchCatClusterHealthStatus;
+ description?: string;
+}
+
+export class ClusterHealthReason implements IReason {
+ public readonly name = "clusterHealth";
+ public readonly minimum: ElasticsearchCatClusterHealthStatus;
+ public readonly current: ElasticsearchCatClusterHealthStatus;
+ public readonly description?: string;
+
+ public constructor(params: IClusterHealthReasonParams) {
+ this.minimum = params.minimum;
+ this.current = params.current;
+ this.description = params.description;
+ }
+}
+
+export const createClusterHealthStatusReason = (
+ params: IClusterHealthReasonParams
+): ClusterHealthReason => {
+ return new ClusterHealthReason(params);
+};
diff --git a/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/IReason.ts b/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/IReason.ts
new file mode 100644
index 00000000000..8677ad4d856
--- /dev/null
+++ b/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/IReason.ts
@@ -0,0 +1,4 @@
+export interface IReason {
+ name: string;
+ description?: string;
+}
diff --git a/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/MemoryReason.ts b/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/MemoryReason.ts
new file mode 100644
index 00000000000..c02edf8fcca
--- /dev/null
+++ b/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/MemoryReason.ts
@@ -0,0 +1,24 @@
+import { IReason } from "~/utils/waitUntilHealthy/reason/IReason";
+
+export interface IMemoryReasonParams {
+ maximum: number;
+ current: number;
+ description?: string;
+}
+
+export class MemoryReason implements IReason {
+ public readonly name = "memory";
+ public readonly maximum: number;
+ public readonly current: number;
+ public readonly description?: string;
+
+ public constructor(params: IMemoryReasonParams) {
+ this.maximum = params.maximum;
+ this.current = params.current;
+ this.description = params.description;
+ }
+}
+
+export const createMemoryReason = (params: IMemoryReasonParams): MemoryReason => {
+ return new MemoryReason(params);
+};
diff --git a/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/ProcessorReason.ts b/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/ProcessorReason.ts
new file mode 100644
index 00000000000..880fc65695f
--- /dev/null
+++ b/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/ProcessorReason.ts
@@ -0,0 +1,24 @@
+import { IReason } from "~/utils/waitUntilHealthy/reason/IReason";
+
+export interface IProcessorReasonParams {
+ maximum: number;
+ current: number;
+ description?: string;
+}
+
+export class ProcessorReason implements IReason {
+ public readonly name = "processor";
+ public readonly maximum: number;
+ public readonly current: number;
+ public readonly description?: string;
+
+ public constructor(params: IProcessorReasonParams) {
+ this.maximum = params.maximum;
+ this.current = params.current;
+ this.description = params.description;
+ }
+}
+
+export const createProcessorReason = (params: IProcessorReasonParams): ProcessorReason => {
+ return new ProcessorReason(params);
+};
diff --git a/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/index.ts b/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/index.ts
new file mode 100644
index 00000000000..3e9ab4f7fb6
--- /dev/null
+++ b/packages/api-elasticsearch/src/utils/waitUntilHealthy/reason/index.ts
@@ -0,0 +1,3 @@
+export * from "./ClusterHealthReason";
+export * from "./MemoryReason";
+export * from "./ProcessorReason";
diff --git a/packages/api-headless-cms-ddb-es/src/operations/entry/index.ts b/packages/api-headless-cms-ddb-es/src/operations/entry/index.ts
index 7cb3a077268..9742c42422a 100644
--- a/packages/api-headless-cms-ddb-es/src/operations/entry/index.ts
+++ b/packages/api-headless-cms-ddb-es/src/operations/entry/index.ts
@@ -68,10 +68,14 @@ const IGNORED_ES_SEARCH_EXCEPTIONS = [
"search_phase_execution_exception"
];
-const shouldIgnoreElasticsearchException = (ex: Pick) => {
+const shouldIgnoreElasticsearchException = (ex: WebinyError) => {
if (IGNORED_ES_SEARCH_EXCEPTIONS.includes(ex.message)) {
console.log(`Ignoring Elasticsearch exception: ${ex.message}`);
- console.log(ex);
+ console.log({
+ code: ex.code,
+ data: ex.data,
+ stack: ex.stack
+ });
return true;
}
return false;
diff --git a/packages/api-headless-cms-es-tasks/.babelrc.js b/packages/api-headless-cms-es-tasks/.babelrc.js
new file mode 100644
index 00000000000..9da7674cb52
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/.babelrc.js
@@ -0,0 +1 @@
+module.exports = require("@webiny/project-utils").createBabelConfigForNode({ path: __dirname });
diff --git a/packages/api-headless-cms-es-tasks/LICENSE b/packages/api-headless-cms-es-tasks/LICENSE
new file mode 100644
index 00000000000..f772d04d4db
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Webiny
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/api-headless-cms-es-tasks/README.md b/packages/api-headless-cms-es-tasks/README.md
new file mode 100644
index 00000000000..c266143a38c
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/README.md
@@ -0,0 +1,15 @@
+# @webiny/api-headless-cms-tasks
+[![](https://img.shields.io/npm/dw/@webiny/api-headless-cms-tasks.svg)](https://www.npmjs.com/package/@webiny/api-headless-cms-tasks)
+[![](https://img.shields.io/npm/v/@webiny/api-headless-cms-tasks.svg)](https://www.npmjs.com/package/@webiny/api-headless-cms-tasks)
+[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
+[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
+
+## Install
+```
+npm install --save @webiny/api-headless-cms-tasks
+```
+
+Or if you prefer yarn:
+```
+yarn add @webiny/api-headless-cms-tasks
+```
diff --git a/packages/api-headless-cms-es-tasks/__tests__/context/helpers.ts b/packages/api-headless-cms-es-tasks/__tests__/context/helpers.ts
new file mode 100644
index 00000000000..688a4588b86
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/__tests__/context/helpers.ts
@@ -0,0 +1,90 @@
+import { SecurityIdentity } from "@webiny/api-security/types";
+import { ContextPlugin } from "@webiny/api";
+import { Context } from "~/types";
+
+export interface PermissionsArg {
+ name: string;
+ locales?: string[];
+ rwd?: string;
+ pw?: string;
+ own?: boolean;
+}
+
+export const identity = {
+ id: "id-12345678",
+ displayName: "John Doe",
+ type: "admin"
+};
+
+const getSecurityIdentity = () => {
+ return identity;
+};
+
+export const createPermissions = (permissions?: PermissionsArg[]): PermissionsArg[] => {
+ if (permissions) {
+ return permissions;
+ }
+ return [
+ {
+ name: "cms.settings"
+ },
+ {
+ name: "cms.contentModel",
+ rwd: "rwd"
+ },
+ {
+ name: "cms.contentModelGroup",
+ rwd: "rwd"
+ },
+ {
+ name: "cms.contentEntry",
+ rwd: "rwd",
+ pw: "rcpu"
+ },
+ {
+ name: "cms.endpoint.read"
+ },
+ {
+ name: "cms.endpoint.manage"
+ },
+ {
+ name: "cms.endpoint.preview"
+ },
+ {
+ name: "content.i18n",
+ locales: ["en-US", "de-DE"]
+ }
+ ];
+};
+
+export const createIdentity = (identity?: SecurityIdentity) => {
+ if (!identity) {
+ return getSecurityIdentity();
+ }
+ return identity;
+};
+
+export const createDummyLocales = () => {
+ return new ContextPlugin(async context => {
+ const { i18n, security } = context;
+
+ await security.authenticate("");
+
+ await security.withoutAuthorization(async () => {
+ const [items] = await i18n.locales.listLocales({
+ where: {}
+ });
+ if (items.length > 0) {
+ return;
+ }
+ await i18n.locales.createLocale({
+ code: "en-US",
+ default: true
+ });
+ await i18n.locales.createLocale({
+ code: "de-DE",
+ default: true
+ });
+ });
+ });
+};
diff --git a/packages/api-headless-cms-es-tasks/__tests__/context/plugins.ts b/packages/api-headless-cms-es-tasks/__tests__/context/plugins.ts
new file mode 100644
index 00000000000..9526cb78e3e
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/__tests__/context/plugins.ts
@@ -0,0 +1,107 @@
+import apiKeyAuthentication from "@webiny/api-security/plugins/apiKeyAuthentication";
+import apiKeyAuthorization from "@webiny/api-security/plugins/apiKeyAuthorization";
+import i18nContext from "@webiny/api-i18n/graphql/context";
+import graphQLHandlerPlugins from "@webiny/handler-graphql";
+import { createHeadlessCmsContext, createHeadlessCmsGraphQL } from "@webiny/api-headless-cms";
+import { createWcpContext } from "@webiny/api-wcp";
+import { createTenancyAndSecurity } from "./tenancySecurity";
+import { createDummyLocales, createPermissions, PermissionsArg } from "./helpers";
+import { ApiKey, SecurityIdentity } from "@webiny/api-security/types";
+import { ContextPlugin } from "@webiny/api";
+import { Context } from "~/types";
+import { mockLocalesPlugins } from "@webiny/api-i18n/graphql/testing";
+import { Plugin, PluginCollection } from "@webiny/plugins/types";
+import { getStorageOps } from "@webiny/project-utils/testing/environment";
+import { createBackgroundTaskContext } from "@webiny/tasks";
+import { HeadlessCmsStorageOperations } from "@webiny/api-headless-cms/types";
+import { createHeadlessCmsEsTasks } from "~/index";
+import { createMockTaskTriggerTransportPlugin } from "@webiny/project-utils/testing/tasks/mockTaskTriggerTransportPlugin";
+
+export interface CreateHandlerCoreParams {
+ setupTenancyAndSecurityGraphQL?: boolean;
+ permissions?: PermissionsArg[];
+ identity?: SecurityIdentity;
+ topPlugins?: Plugin | Plugin[] | Plugin[][] | PluginCollection;
+ plugins?: Plugin | Plugin[] | Plugin[][] | PluginCollection;
+ bottomPlugins?: Plugin | Plugin[] | Plugin[][] | PluginCollection;
+ path?: `manage/${string}-${string}}` | `read/${string}-${string}}` | string;
+}
+
+export const createHandlerCore = (params: CreateHandlerCoreParams = {}) => {
+ const tenant = {
+ id: "root",
+ name: "Root",
+ parent: null
+ };
+ const {
+ permissions,
+ identity,
+ plugins = [],
+ topPlugins = [],
+ bottomPlugins = [],
+ setupTenancyAndSecurityGraphQL
+ } = params;
+
+ const cmsStorage = getStorageOps("cms");
+ const i18nStorage = getStorageOps("i18n");
+
+ return {
+ storageOperations: cmsStorage.storageOperations,
+ tenant,
+ plugins: [
+ topPlugins,
+ createWcpContext(),
+ ...cmsStorage.plugins,
+ ...createTenancyAndSecurity({
+ setupGraphQL: setupTenancyAndSecurityGraphQL,
+ permissions: createPermissions(permissions),
+ identity
+ }),
+ {
+ type: "context",
+ name: "context-security-tenant",
+ async apply(context) {
+ context.security.getApiKeyByToken = async (
+ token: string
+ ): Promise => {
+ if (!token || token !== "aToken") {
+ return null;
+ }
+ const apiKey = "a1234567890";
+ return {
+ id: apiKey,
+ name: apiKey,
+ tenant: tenant.id,
+ permissions: identity?.permissions || [],
+ token,
+ createdBy: {
+ id: "test",
+ displayName: "test",
+ type: "admin"
+ },
+ description: "test",
+ createdOn: new Date().toISOString(),
+ webinyVersion: context.WEBINY_VERSION
+ };
+ };
+ }
+ } as ContextPlugin,
+ apiKeyAuthentication({ identityType: "api-key" }),
+ apiKeyAuthorization({ identityType: "api-key" }),
+ i18nContext(),
+ i18nStorage.storageOperations,
+ createDummyLocales(),
+ mockLocalesPlugins(),
+ createHeadlessCmsContext({
+ storageOperations: cmsStorage.storageOperations
+ }),
+ createBackgroundTaskContext(),
+ createHeadlessCmsGraphQL(),
+ plugins,
+ graphQLHandlerPlugins(),
+ createHeadlessCmsEsTasks(),
+ createMockTaskTriggerTransportPlugin(),
+ bottomPlugins
+ ]
+ };
+};
diff --git a/packages/api-headless-cms-es-tasks/__tests__/context/tenancySecurity.ts b/packages/api-headless-cms-es-tasks/__tests__/context/tenancySecurity.ts
new file mode 100644
index 00000000000..cf869285b1f
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/__tests__/context/tenancySecurity.ts
@@ -0,0 +1,102 @@
+import { Plugin } from "@webiny/plugins/Plugin";
+import { createTenancyContext, createTenancyGraphQL } from "@webiny/api-tenancy";
+import { createSecurityContext, createSecurityGraphQL } from "@webiny/api-security";
+import {
+ SecurityIdentity,
+ SecurityPermission,
+ SecurityStorageOperations
+} from "@webiny/api-security/types";
+import { ContextPlugin } from "@webiny/api";
+import { BeforeHandlerPlugin } from "@webiny/handler";
+import { Context } from "~/types";
+import { getStorageOps } from "@webiny/project-utils/testing/environment";
+import { TenancyStorageOperations, Tenant } from "@webiny/api-tenancy/types";
+
+interface Config {
+ setupGraphQL?: boolean;
+ permissions: SecurityPermission[];
+ identity?: SecurityIdentity | null;
+}
+
+export const defaultIdentity: SecurityIdentity = {
+ id: "id-12345678",
+ type: "admin",
+ displayName: "John Doe"
+};
+
+export const createTenancyAndSecurity = ({
+ setupGraphQL,
+ permissions,
+ identity
+}: Config): Plugin[] => {
+ const tenancyStorage = getStorageOps("tenancy");
+ const securityStorage = getStorageOps("security");
+
+ return [
+ createTenancyContext({ storageOperations: tenancyStorage.storageOperations }),
+ setupGraphQL ? createTenancyGraphQL() : null,
+ createSecurityContext({ storageOperations: securityStorage.storageOperations }),
+ setupGraphQL ? createSecurityGraphQL() : null,
+ new ContextPlugin(async context => {
+ await context.tenancy.createTenant({
+ id: "root",
+ name: "Root",
+ parent: "",
+ description: "Root tenant",
+ tags: []
+ });
+
+ await context.tenancy.createTenant({
+ id: "webiny",
+ name: "Webiny",
+ parent: "",
+ description: "Webiny tenant",
+ tags: []
+ });
+
+ await context.tenancy.createTenant({
+ id: "dev",
+ name: "Dev",
+ parent: "",
+ description: "Dev tenant",
+ tags: []
+ });
+
+ await context.tenancy.createTenant({
+ id: "sales",
+ name: "Sales",
+ parent: "",
+ description: "Sales tenant",
+ tags: []
+ });
+ }),
+ new ContextPlugin(async context => {
+ context.tenancy.setCurrentTenant({
+ id: "root",
+ name: "Root",
+ webinyVersion: context.WEBINY_VERSION
+ } as unknown as Tenant);
+
+ context.security.addAuthenticator(async () => {
+ return identity || defaultIdentity;
+ });
+
+ context.security.addAuthorizer(async () => {
+ const { headers = {} } = context.request || {};
+ if (headers["authorization"]) {
+ return null;
+ }
+
+ return permissions || [{ name: "*" }];
+ });
+ }),
+ new BeforeHandlerPlugin(context => {
+ const { headers = {} } = context.request || {};
+ if (headers["authorization"]) {
+ return context.security.authenticate(headers["authorization"]);
+ }
+
+ return context.security.authenticate("");
+ })
+ ].filter(Boolean) as Plugin[];
+};
diff --git a/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts b/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts
new file mode 100644
index 00000000000..a7d92dd89d7
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/__tests__/context/useHandler.ts
@@ -0,0 +1,51 @@
+import { createHandlerCore, CreateHandlerCoreParams } from "./plugins";
+import { createRawEventHandler, createRawHandler } from "@webiny/handler-aws";
+import { Context } from "~/types";
+import { defaultIdentity } from "./tenancySecurity";
+import { LambdaContext } from "@webiny/handler-aws/types";
+import { getElasticsearchClient } from "@webiny/project-utils/testing/elasticsearch";
+
+interface CmsHandlerEvent {
+ path: string;
+ headers: {
+ ["x-tenant"]: string;
+ [key: string]: string;
+ };
+}
+
+type Params = CreateHandlerCoreParams;
+export const useHandler = (params: Params = {}) => {
+ const core = createHandlerCore(params);
+
+ const plugins = [...core.plugins].concat([
+ createRawEventHandler(async ({ context }) => {
+ return context;
+ })
+ ]);
+
+ const handler = createRawHandler({
+ plugins,
+ debug: process.env.DEBUG === "true"
+ });
+
+ const { elasticsearchClient } = getElasticsearchClient({ name: "api-headless-cms-ddb-es" });
+
+ return {
+ plugins,
+ identity: params.identity || defaultIdentity,
+ tenant: core.tenant,
+ elasticsearch: elasticsearchClient,
+ handler: (input?: CmsHandlerEvent) => {
+ const payload: CmsHandlerEvent = {
+ path: "/cms/manage/en-US",
+ headers: {
+ "x-webiny-cms-endpoint": "manage",
+ "x-webiny-cms-locale": "en-US",
+ "x-tenant": "root"
+ },
+ ...input
+ };
+ return handler(payload, {} as LambdaContext);
+ }
+ };
+};
diff --git a/packages/api-headless-cms-es-tasks/__tests__/graphql/examples.graphql b/packages/api-headless-cms-es-tasks/__tests__/graphql/examples.graphql
new file mode 100644
index 00000000000..11f142f5a17
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/__tests__/graphql/examples.graphql
@@ -0,0 +1,68 @@
+mutation StartMockDataGenerator {
+ backgroundTasks {
+ triggerTask(definition: "mockDataManager", input: {
+ modelId: "cars",
+ amount: 10000
+ }) {
+ data {
+ id
+ }
+ error {
+ message
+ code
+ data
+ }
+ }
+ }
+}
+
+
+mutation AbortMockDataGenerator {
+ backgroundTasks {
+ abortTask(id: "YOUR_TASK_ID") {
+ data {
+ id
+ }
+ error {
+ message
+ code
+ data
+ }
+ }
+ }
+}
+
+
+query GetMockDataGenerator {
+ backgroundTasks {
+ getTask(id: "YOUR_TASK_ID") {
+ data {
+ id
+ taskStatus
+ }
+ error {
+ message
+ code
+ data
+ }
+ }
+ }
+}
+
+query ListChildMockDataCreators {
+ backgroundTasks {
+ listTasks(where: {
+ parentId: "YOUR_TASK_ID"
+ }) {
+ data {
+ id
+ taskStatus
+ }
+ error {
+ message
+ code
+ data
+ }
+ }
+ }
+}
diff --git a/packages/api-headless-cms-es-tasks/__tests__/tasks/MockDataManager/calculateAmounts.test.ts b/packages/api-headless-cms-es-tasks/__tests__/tasks/MockDataManager/calculateAmounts.test.ts
new file mode 100644
index 00000000000..dc6a7147f0a
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/__tests__/tasks/MockDataManager/calculateAmounts.test.ts
@@ -0,0 +1,155 @@
+import { calculateAmounts } from "~/tasks/MockDataManager/calculateAmounts";
+
+describe("calculateAmounts", () => {
+ it.skip("should properly calculate the amount of tasks and records - 50", async () => {
+ const values = calculateAmounts(50);
+
+ expect(values).toEqual({
+ amountOfTasks: 1,
+ amountOfRecords: 50
+ });
+ });
+ it.skip("should properly calculate the amount of tasks and records - 100", async () => {
+ const values = calculateAmounts(100);
+
+ expect(values).toEqual({
+ amountOfTasks: 1,
+ amountOfRecords: 100
+ });
+ });
+ it.skip("should properly calculate the amount of tasks and records - 249", async () => {
+ const values = calculateAmounts(249);
+
+ expect(values).toEqual({
+ amountOfTasks: 1,
+ amountOfRecords: 249
+ });
+ });
+ it.skip("should properly calculate the amount of tasks and records - 251", async () => {
+ const values = calculateAmounts(251);
+
+ expect(values).toEqual({
+ amountOfTasks: 1,
+ amountOfRecords: 251
+ });
+ });
+
+ it.skip("should properly calculate the amount of tasks and records - 500", async () => {
+ const values = calculateAmounts(500);
+
+ expect(values).toEqual({
+ amountOfTasks: 1,
+ amountOfRecords: 500
+ });
+ });
+
+ it.skip("should properly calculate the amount of tasks and records - 999", async () => {
+ const values = calculateAmounts(999);
+
+ expect(values).toEqual({
+ amountOfTasks: 1,
+ amountOfRecords: 999
+ });
+ });
+
+ it.skip("should properly calculate the amount of tasks and records - 9999", async () => {
+ const values = calculateAmounts(9999);
+
+ expect(values).toEqual({
+ amountOfTasks: 5,
+ amountOfRecords: 2000
+ });
+ });
+
+ it.skip("should properly calculate the amount of tasks and records - 10001", async () => {
+ const values = calculateAmounts(10001);
+
+ expect(values).toEqual({
+ amountOfTasks: 5,
+ amountOfRecords: 2000
+ });
+ });
+
+ it.skip("should properly calculate the amount of tasks and records - 25001", async () => {
+ const values = calculateAmounts(25001);
+
+ expect(values).toEqual({
+ amountOfTasks: 5,
+ amountOfRecords: 5000
+ });
+ });
+
+ it.skip("should properly calculate the amount of tasks and records - 250000", async () => {
+ const values = calculateAmounts(250000);
+
+ expect(values).toEqual({
+ amountOfTasks: 10,
+ amountOfRecords: 25000
+ });
+ });
+
+ it.skip("should properly calculate the amount of tasks and records - 990000", async () => {
+ const values = calculateAmounts(990000);
+
+ expect(values).toEqual({
+ amountOfTasks: 50,
+ amountOfRecords: 19800
+ });
+ });
+
+ it.skip("should properly calculate the amount of tasks and records - 2900000", async () => {
+ const values = calculateAmounts(2900000);
+
+ expect(values).toEqual({
+ amountOfTasks: 100,
+ amountOfRecords: 29000
+ });
+ });
+
+ it.skip("should properly calculate the amount of tasks and records - 3100000", async () => {
+ const values = calculateAmounts(3100000);
+
+ expect(values).toEqual({
+ amountOfTasks: 100,
+ amountOfRecords: 31000
+ });
+ });
+
+ it.skip("should properly calculate the amount of tasks and records - 5100000", async () => {
+ const values = calculateAmounts(5100000);
+
+ expect(values).toEqual({
+ amountOfTasks: 200,
+ amountOfRecords: 25500
+ });
+ });
+
+ it.skip("should properly calculate the amount of tasks and records - 10000000", async () => {
+ const values = calculateAmounts(10000000);
+
+ expect(values).toEqual({
+ amountOfTasks: 200,
+ amountOfRecords: 50000
+ });
+ });
+
+ it.skip("should properly calculate the amount of tasks and records - 10000001", async () => {
+ expect.assertions(1);
+
+ try {
+ calculateAmounts(10000001);
+ } catch (ex) {
+ expect(ex.message).toBe(`No valid value found - input value is too large: 10000001.`);
+ }
+ });
+
+ it.skip("should properly calculate the amount of tasks and records - 50000000", async () => {
+ expect.assertions(1);
+
+ try {
+ calculateAmounts(50000000);
+ } catch (ex) {
+ expect(ex.message).toBe(`No valid value found - input value is too large: 50000000.`);
+ }
+ });
+});
diff --git a/packages/api-headless-cms-es-tasks/__tests__/tasks/MockDataManager/calculateSeconds.test.ts b/packages/api-headless-cms-es-tasks/__tests__/tasks/MockDataManager/calculateSeconds.test.ts
new file mode 100644
index 00000000000..a053f162cae
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/__tests__/tasks/MockDataManager/calculateSeconds.test.ts
@@ -0,0 +1,63 @@
+import { calculateSeconds } from "~/tasks/MockDataManager/calculateSeconds";
+
+describe("calculate seconds to wait for task based on amount of records", () => {
+ it("should properly calculate the amount of seconds - 5", async () => {
+ const values = calculateSeconds(5);
+
+ expect(values).toBe(15);
+ });
+
+ it("should properly calculate the amount of seconds - 10", async () => {
+ const values = calculateSeconds(10);
+
+ expect(values).toBe(15);
+ });
+
+ it("should properly calculate the amount of seconds - 14", async () => {
+ const values = calculateSeconds(14);
+
+ expect(values).toBe(15);
+ });
+
+ it("should properly calculate the amount of seconds - 16", async () => {
+ const values = calculateSeconds(16);
+
+ expect(values).toBe(15);
+ });
+
+ it("should properly calculate the amount of seconds - 50", async () => {
+ const values = calculateSeconds(50);
+
+ expect(values).toBe(15);
+ });
+
+ it("should properly calculate the amount of seconds - 100", async () => {
+ const values = calculateSeconds(100);
+
+ expect(values).toBe(25);
+ });
+
+ it("should properly calculate the amount of seconds - 200", async () => {
+ const values = calculateSeconds(200);
+
+ expect(values).toBe(50);
+ });
+
+ it("should properly calculate the amount of seconds - 300", async () => {
+ const values = calculateSeconds(300);
+
+ expect(values).toBe(75);
+ });
+
+ it("should properly calculate the amount of seconds - 400", async () => {
+ const values = calculateSeconds(400);
+
+ expect(values).toBe(90);
+ });
+
+ it("should properly calculate the amount of seconds - 500", async () => {
+ const values = calculateSeconds(500);
+
+ expect(values).toBe(90);
+ });
+});
diff --git a/packages/api-headless-cms-es-tasks/__tests__/tasks/mockDataCreatorTask.test.ts b/packages/api-headless-cms-es-tasks/__tests__/tasks/mockDataCreatorTask.test.ts
new file mode 100644
index 00000000000..472057bdd8a
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/__tests__/tasks/mockDataCreatorTask.test.ts
@@ -0,0 +1,65 @@
+import { useHandler } from "~tests/context/useHandler";
+import { createRunner } from "@webiny/project-utils/testing/tasks";
+import { Context } from "~/types";
+import { IMockDataCreatorInput, IMockDataCreatorOutput } from "~/tasks/MockDataCreator/types";
+import {
+ createMockDataCreatorTask,
+ MOCK_DATA_CREATOR_TASK_ID
+} from "~/tasks/createMockDataCreatorTask";
+import { TaskResponseStatus } from "@webiny/tasks";
+import {
+ createModelAndGroup,
+ ICreateModelAndGroupResultSuccess
+} from "~/tasks/MockDataManager/createModelAndGroup";
+import { CARS_MODEL_ID } from "~/tasks/MockDataManager/constants";
+import { disableIndexing, enableIndexing } from "~/utils";
+
+jest.setTimeout(120000);
+
+describe("mock data creator task", () => {
+ it("should create a mock data creator task", async () => {
+ const { handler } = useHandler();
+
+ const context = await handler();
+
+ const modelAndGroupResult = (await createModelAndGroup({
+ context,
+ modelId: CARS_MODEL_ID
+ })) as ICreateModelAndGroupResultSuccess;
+ expect(modelAndGroupResult).not.toBeInstanceOf(String);
+
+ await disableIndexing({
+ client: context.elasticsearch,
+ model: modelAndGroupResult.model
+ });
+
+ const task = await context.tasks.createTask({
+ definitionId: MOCK_DATA_CREATOR_TASK_ID,
+ name: "Testing of a Mock Data Creator Task",
+ input: {
+ createdAmount: 0,
+ totalAmount: 100
+ }
+ });
+
+ const runner = createRunner({
+ context,
+ task: createMockDataCreatorTask()
+ });
+
+ const result = await runner({
+ webinyTaskId: task.id,
+ tenant: "root",
+ locale: "en-US"
+ });
+
+ await enableIndexing({
+ client: context.elasticsearch,
+ model: modelAndGroupResult.model
+ });
+
+ expect(result).toMatchObject({
+ status: TaskResponseStatus.DONE
+ });
+ });
+});
diff --git a/packages/api-headless-cms-es-tasks/__tests__/tasks/mockDataManagerTask.test.ts b/packages/api-headless-cms-es-tasks/__tests__/tasks/mockDataManagerTask.test.ts
new file mode 100644
index 00000000000..1748d555b84
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/__tests__/tasks/mockDataManagerTask.test.ts
@@ -0,0 +1,65 @@
+import {
+ MOCK_DATA_MANAGER_TASK_ID,
+ createMockDataManagerTask
+} from "~/tasks/createMockDataManagerTask";
+import { useHandler } from "~tests/context/useHandler";
+import { createRunner } from "@webiny/project-utils/testing/tasks";
+import { Context, IMockDataManagerInput, IMockDataManagerOutput } from "~/types";
+import { TaskResponseStatus } from "@webiny/tasks";
+import { CARS_MODEL_ID } from "~/tasks/MockDataManager/constants";
+
+describe("mock data manager task", () => {
+ it("should create a mock data manager task", async () => {
+ const { handler } = useHandler();
+
+ const context = await handler();
+
+ const task = await context.tasks.createTask({
+ definitionId: MOCK_DATA_MANAGER_TASK_ID,
+ name: "Testing of a Mock Data Manager Task",
+ input: {
+ modelId: CARS_MODEL_ID,
+ amount: 1
+ }
+ });
+
+ const runner = createRunner({
+ context,
+ task: createMockDataManagerTask()
+ });
+
+ const result = await runner({
+ webinyTaskId: task.id,
+ tenant: "root",
+ locale: "en-US"
+ });
+
+ expect(result).toMatchObject({
+ status: TaskResponseStatus.CONTINUE,
+ wait: 15,
+ input: {
+ amount: 1,
+ seconds: 15,
+ amountOfTasks: 1,
+ amountOfRecords: 1
+ }
+ });
+
+ const childTasks = await context.tasks.listTasks({
+ where: {
+ parentId: task.id
+ },
+ limit: 10000
+ });
+ expect(childTasks).toMatchObject({
+ items: [
+ {
+ name: "Mock Data Creator Task #1 of 1"
+ }
+ ],
+ meta: {
+ totalCount: 1
+ }
+ });
+ });
+});
diff --git a/packages/api-headless-cms-es-tasks/jest.setup.js b/packages/api-headless-cms-es-tasks/jest.setup.js
new file mode 100644
index 00000000000..07ca953f954
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/jest.setup.js
@@ -0,0 +1,12 @@
+const base = require("../../jest.config.base");
+const presets = require("@webiny/project-utils/testing/presets")(
+ ["@webiny/api-admin-users", "storage-operations"],
+ ["@webiny/api-headless-cms", "storage-operations"],
+ ["@webiny/api-i18n", "storage-operations"],
+ ["@webiny/api-security", "storage-operations"],
+ ["@webiny/api-tenancy", "storage-operations"]
+);
+
+module.exports = {
+ ...base({ path: __dirname }, presets)
+};
diff --git a/packages/api-headless-cms-es-tasks/package.json b/packages/api-headless-cms-es-tasks/package.json
new file mode 100644
index 00000000000..c9dfebabcbf
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/package.json
@@ -0,0 +1,49 @@
+{
+ "name": "@webiny/api-headless-cms-es-tasks",
+ "version": "0.0.0",
+ "main": "index.js",
+ "description": "Elasticsearch Background tasks for Webiny Headless CMS",
+ "keywords": [
+ "api-headless-cms-es-tasks:base"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/webiny/webiny-js.git",
+ "directory": "packages/api-headless-cms-es-tasks"
+ },
+ "license": "MIT",
+ "dependencies": {
+ "@webiny/api-elasticsearch": "0.0.0",
+ "@webiny/api-headless-cms": "0.0.0",
+ "@webiny/api-headless-cms-ddb-es": "0.0.0",
+ "@webiny/handler": "0.0.0",
+ "@webiny/handler-aws": "0.0.0",
+ "@webiny/tasks": "0.0.0",
+ "@webiny/utils": "0.0.0"
+ },
+ "devDependencies": {
+ "@babel/cli": "^7.22.6",
+ "@babel/core": "^7.22.8",
+ "@babel/preset-env": "^7.22.7",
+ "@faker-js/faker": "^8.4.1",
+ "@webiny/api": "0.0.0",
+ "@webiny/api-i18n": "0.0.0",
+ "@webiny/api-security": "0.0.0",
+ "@webiny/api-tenancy": "0.0.0",
+ "@webiny/api-wcp": "0.0.0",
+ "@webiny/cli": "0.0.0",
+ "@webiny/handler-graphql": "0.0.0",
+ "@webiny/plugins": "0.0.0",
+ "@webiny/project-utils": "0.0.0",
+ "ttypescript": "^1.5.13",
+ "typescript": "^4.7.4"
+ },
+ "scripts": {
+ "build": "yarn webiny run build",
+ "watch": "yarn webiny run watch"
+ },
+ "publishConfig": {
+ "access": "public",
+ "directory": "dist"
+ }
+}
diff --git a/packages/api-headless-cms-es-tasks/src/index.ts b/packages/api-headless-cms-es-tasks/src/index.ts
new file mode 100644
index 00000000000..3901b078ae0
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/index.ts
@@ -0,0 +1,10 @@
+import { createMockDataManagerTask } from "~/tasks/createMockDataManagerTask";
+import { createMockDataCreatorTask } from "~/tasks/createMockDataCreatorTask";
+
+export * from "./tasks/createMockDataManagerTask";
+export * from "./tasks/createMockDataCreatorTask";
+
+export const createHeadlessCmsEsTasks = () => [
+ createMockDataManagerTask(),
+ createMockDataCreatorTask()
+];
diff --git a/packages/api-headless-cms-es-tasks/src/tasks/MockDataCreator/MockDataCreator.ts b/packages/api-headless-cms-es-tasks/src/tasks/MockDataCreator/MockDataCreator.ts
new file mode 100644
index 00000000000..885deaee757
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/tasks/MockDataCreator/MockDataCreator.ts
@@ -0,0 +1,109 @@
+import { ITaskResponseResult, ITaskRunParams } from "@webiny/tasks";
+import { IMockDataCreatorInput, IMockDataCreatorOutput } from "./types";
+import { CmsModelManager } from "@webiny/api-headless-cms/types";
+import { mockData } from "./mockData";
+import { createWaitUntilHealthy } from "@webiny/api-elasticsearch/utils/waitUntilHealthy";
+import { Context } from "~/types";
+import { ElasticsearchCatClusterHealthStatus } from "@webiny/api-elasticsearch/operations/types";
+import { mdbid } from "@webiny/utils";
+
+export class MockDataCreator<
+ C extends Context,
+ I extends IMockDataCreatorInput,
+ O extends IMockDataCreatorOutput
+> {
+ public async execute(params: ITaskRunParams): Promise> {
+ const { context, isAborted, input, response, isCloseToTimeout } = params;
+
+ if (isAborted()) {
+ return response.aborted();
+ } else if (isCloseToTimeout()) {
+ return response.continue({
+ ...input
+ });
+ }
+
+ let manager: CmsModelManager;
+ try {
+ manager = await context.cms.getEntryManager("cars");
+ } catch (ex) {
+ return response.error(ex);
+ }
+
+ const healthCheck = createWaitUntilHealthy(context.elasticsearch, {
+ waitingTimeStep: 20,
+ maxWaitingTime: 150,
+ maxProcessorPercent: 80,
+ minClusterHealthStatus: ElasticsearchCatClusterHealthStatus.Yellow,
+ maxRamPercent: 101
+ });
+
+ let createdAmount = input.createdAmount;
+
+ for (; createdAmount < input.totalAmount; createdAmount++) {
+ if (isAborted()) {
+ return response.aborted();
+ } else if (isCloseToTimeout()) {
+ return response.continue({
+ ...input,
+ createdAmount
+ });
+ }
+ if (createdAmount % 50 === 0) {
+ try {
+ await healthCheck.wait({
+ async onUnhealthy({
+ waitingTimeStep,
+ startedAt,
+ mustEndAt,
+ runs,
+ waitingReason
+ }) {
+ console.warn(`Cluster is unhealthy on run #${runs}.`, {
+ startedAt,
+ mustEndAt,
+ waitingTimeStep,
+ waitingReason
+ });
+ },
+ async onTimeout({
+ waitingTimeStep,
+ startedAt,
+ mustEndAt,
+ runs,
+ waitingReason
+ }) {
+ console.warn(`Cluster health check timed out on run #${runs}.`, {
+ startedAt,
+ mustEndAt,
+ waitingTimeStep,
+ waitingReason
+ });
+ }
+ });
+ } catch (ex) {
+ return response.continue(
+ {
+ ...input,
+ createdAmount
+ },
+ {
+ seconds: 30
+ }
+ );
+ }
+ }
+ const taskId = params.store.getTask().id;
+ try {
+ await manager.create({
+ id: `${taskId}${mdbid()}`,
+ ...mockData
+ });
+ } catch (ex) {
+ return response.error(ex);
+ }
+ }
+
+ return params.response.done(`Created ${input.totalAmount} records.`);
+ }
+}
diff --git a/packages/api-headless-cms-es-tasks/src/tasks/MockDataCreator/mockData.ts b/packages/api-headless-cms-es-tasks/src/tasks/MockDataCreator/mockData.ts
new file mode 100644
index 00000000000..861386928ec
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/tasks/MockDataCreator/mockData.ts
@@ -0,0 +1,1361 @@
+import { ROOT_FOLDER } from "@webiny/api-headless-cms/constants";
+
+const text =
+ "orem ipsum dolor sit amet, consectetur adipiscing elit. Sed augue justo, tempor vel aliquet id, sodales ut est. Morbi sodales lacus lacinia justo molestie, a vulputate ligula ornare. Cras commodo augue sed suscipit auctor. Mauris dapibus vulputate nibh, ultrices porta risus ullamcorper in. Praesent iaculis faucibus tellus, eget egestas mauris ultrices in. Ut dapibus felis id tincidunt tempor. Cras imperdiet lectus et mollis facilisis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur vitae nulla ut quam cursus viverra ac sed felis. Cras eget nulla nunc. Phasellus facilisis ante in velit tincidunt posuere. Aenean a cursus ex. In a accumsan metus. Nullam faucibus sapien ac pulvinar volutpat. Sed varius sem quis libero pharetra ullamcorper.";
+
+const paragraph = (): string => {
+ return text;
+};
+
+const paragraphs = (length = 1): string => {
+ return Array.from({ length })
+ .map(() => paragraph())
+ .join("\n");
+};
+
+const createMockData = () => {
+ return {
+ wbyAco_location: {
+ folderId: ROOT_FOLDER
+ },
+ standardTires: "P235/75R15 BSW",
+ newUsedBg: "USED",
+ ymmMaxPriceRange: 23810,
+ carsEditorialRating: null,
+ priceRangeSlug: "under-20000",
+ specifications: {
+ specGvwr: "5,150 lb",
+ stdMpgWithUnits: "16/22 mpg",
+ specHorsepower: "185@5,600",
+ driveTrain: "4WD",
+ rearShoulderRoom: "N/A",
+ specTonnage: "N/A",
+ vehicleClass: "Compact Pickup 4WD",
+ cylinderConfiguration: "In-line",
+ seatingCapacity: "3/3",
+ specWidth: "68.6 in",
+ transmissionType: "Manual",
+ frontShoulderRoom: "57.1 in",
+ heroValue1: "16/22",
+ numberOfCylinders: "4",
+ specWheelase: "111.3 in",
+ rearLegroom: "N/A",
+ fuelCapacity: "19.0",
+ engineType: "Gas",
+ rearHeadroom: "N/A",
+ groundClearance: "7.9 in",
+ payloadCapacity: "1,535 lb",
+ specHeight: "67.6 in",
+ stdEpaMpg: "16/22",
+ curbWeight: "3,615 lb",
+ specTorque: "190@2,800",
+ heroLabel1: "MPG",
+ frontLegroom: "42.2 in",
+ drivingRange: "361 miles",
+ specLength: "192.4 in",
+ fuelType: "Unleaded Regular",
+ engineName: "4-Cyl, 2.9 Liter",
+ cargoCapacity: "N/A",
+ transmissionName: "5 Speed Manual w/Overdrive",
+ frontHeadroom: "39.6 in",
+ towingCapacity: "4,000 lb"
+ },
+ carsVehicle: "Chevrolet-Colorado-2007-LS 4WD Regular Cab",
+ marketingImage: null,
+ priceRangeText: "Under $20K",
+ baseVehicle: 0,
+ carsUid: 756335,
+ bodyTypeText: "Trucks",
+ slugBodyType: "truck",
+ carsMakePageShow: 0,
+ slugYearMakeModel: "2007/chevrolet/colorado",
+ safetyRatings: {
+ nhtsaRatingFrontDriver: "4",
+ nhtsaRatingRollover: "4",
+ nhtsaRatingFrontPassenger: "4",
+ iihsBestPick: "0",
+ nhtsaRatingRearSide: "No Data",
+ iihsOverallSideCrash: "N/R",
+ nhtsaRatingOverall: "N/R",
+ nhtsaRatingFrontSide: "4",
+ iihsFrontModerateOverlap: "N/R",
+ iihsFrontSmallOverlap: "N/R",
+ iihsRearCrash: "N/R",
+ iihsRoofStrength: "N/R"
+ },
+ bodyStyle: "Truck",
+ slugMake: "chevrolet",
+ bodyType: "Truck",
+ secondaryBodyTypeOrder: null,
+ ymmLowestPriceRange: 14085,
+ cpoComparison: {
+ cpoMake: "Chevrolet",
+ cpoYear: 2007,
+ cpoTotalMonthly: null,
+ usedMonthly: null,
+ usedMaintenanceRepairs: null,
+ vehicleRating: "N/A",
+ cpoMaintenanceRepairs: null,
+ usedCarTrim: "LS 4WD Regular Cab",
+ usedTotalMonthly: null,
+ modelName: "Colorado",
+ cpoPrice: "N/R",
+ usedCarPrice: null,
+ cpoMonthly: null
+ },
+ secondaryBodyType: null,
+ slugHybridElectricCategory: null,
+ featuredImage:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-angular-front.png",
+ featuresIntellicar: {
+ driveCategory: [
+ {
+ categorySequenceNmb: 10,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Drivetrain, 4WD",
+ availability: "Std"
+ }
+ ],
+ mirrorsCategory: [
+ {
+ categorySequenceNmb: 16,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Dual Manual",
+ availability: "Std"
+ }
+ ],
+ suspensionCategory: [
+ {
+ categorySequenceNmb: 25,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Springs, Front, 2755-lb Cap",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 25,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Springs, Rear, 2900-lb Cap",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 25,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Stabilizer Bar, Front",
+ availability: "Std"
+ }
+ ],
+ soundCategory: [
+ {
+ categorySequenceNmb: 22,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Radio, AM/FM Stereo",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 22,
+ includesNote: null,
+ invoice: 361.05,
+ sequenceNmb: 1,
+ retail: 435,
+ name: " Radio, AM/FM Stereo w/CD & MP3",
+ availability: "Opt"
+ }
+ ],
+ engineCategory: [
+ {
+ categorySequenceNmb: 2,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Engine: 4-Cyl, 2.9 Liter",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 2,
+ includesNote: null,
+ invoice: 830,
+ sequenceNmb: 1,
+ retail: 1000,
+ name: " Engine: 5-Cyl, 3.7 Liter",
+ availability: "Opt"
+ }
+ ],
+ packageCategory: [
+ {
+ categorySequenceNmb: 1,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Option Pkg",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 1,
+ includesNote: " INCLUDES: [**W] Vinyl Seat Trim",
+ invoice: 141.75,
+ sequenceNmb: 1,
+ retail: 150,
+ name: " Option Pkg, Work Truck",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 1,
+ includesNote: paragraphs(1),
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Street Pack",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 1,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Suspension Pkg, Standard",
+ availability: "Std"
+ }
+ ],
+ otherCategory: [],
+ paintCategory: [
+ {
+ categorySequenceNmb: 19,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Solid",
+ availability: "Std"
+ }
+ ],
+ specialFeesCreditsOptionsCategory: [
+ {
+ categorySequenceNmb: 23,
+ includesNote: null,
+ invoice: 50,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " New Jersey Surcharge",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 23,
+ includesNote: null,
+ invoice: -50,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " New Jersey Surcharge Refund",
+ availability: "Opt"
+ }
+ ],
+ transmissionCategory: [
+ {
+ categorySequenceNmb: 3,
+ includesNote: null,
+ invoice: 908.85,
+ sequenceNmb: 1,
+ retail: 1095,
+ name: " 4 Speed Automatic w/Overdrive",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 3,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " 5 Speed Manual w/Overdrive",
+ availability: "Std"
+ }
+ ],
+ interiorCategory: [
+ {
+ categorySequenceNmb: 13,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Cargo Mat Delete",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 13,
+ includesNote: " ",
+ invoice: 58.1,
+ sequenceNmb: 1,
+ retail: 70,
+ name: " Carpeting",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 13,
+ includesNote: null,
+ invoice: 20.75,
+ sequenceNmb: 1,
+ retail: 25,
+ name: " Floor Mats, Vinyl",
+ availability: "Opt"
+ }
+ ],
+ convenienceCategory: [
+ {
+ categorySequenceNmb: 9,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Air Conditioning, Manual",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 9,
+ includesNote: " ",
+ invoice: 601.75,
+ sequenceNmb: 1,
+ retail: 725,
+ name: " Cargo Cover, Hard",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 9,
+ includesNote: null,
+ invoice: 211.65,
+ sequenceNmb: 1,
+ retail: 255,
+ name: " Cargo Cover, Soft",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 9,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Clock, Digital (w/Radio)",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 9,
+ includesNote: " ",
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Cupholders, (2)",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 9,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Driver's Information Center",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 9,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Headlamp Control, Automatic",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 9,
+ includesNote: " ",
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Mirror, RH Visor Vanity",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 9,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Power Outlets, (2)",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 9,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Speed Control",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 9,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Steering Wheel, Tilt",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 9,
+ includesNote: null,
+ invoice: 145.25,
+ sequenceNmb: 1,
+ retail: 175,
+ name: " Window, Sliding Rear",
+ availability: "Opt"
+ }
+ ],
+ topColorCategory: [],
+ safetyCategory: [
+ {
+ categorySequenceNmb: 20,
+ includesNote: " ",
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Lights, Daytime Running",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 20,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Restraint System, Dual Front Air Bag",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 20,
+ includesNote: null,
+ invoice: 327.85,
+ sequenceNmb: 1,
+ retail: 395,
+ name: " Restraint System, F&R Head Curtain Air Bag",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 20,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Tire Pressure Monitor",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 20,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " W/S Wipers, Intermittent",
+ availability: "Std"
+ }
+ ],
+ truckBedsCategory: [],
+ lightingCategory: [],
+ bodyCategory: [
+ {
+ categorySequenceNmb: 7,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Body, Fleetside",
+ availability: "Std"
+ }
+ ],
+ engineeringCategory: [
+ {
+ categorySequenceNmb: 11,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " 5150-lb GVWR",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 11,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Alternator, 125-Amp",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 11,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Axle Ratio, 3.73",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 11,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Axle, Front, 2753-lb Cap",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 11,
+ includesNote: null,
+ invoice: 244.85,
+ sequenceNmb: 1,
+ retail: 295,
+ name: " Axle, Locking Rear",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 11,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Axle, Rear, 2900-lb Cap",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 11,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Battery, HD 690-cca",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 11,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Fuel Tank, 19.0 Gal Cap",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 11,
+ includesNote: null,
+ invoice: 41.5,
+ sequenceNmb: 1,
+ retail: 50,
+ name: " Heater, Engine Block",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 11,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Tachometer",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 11,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Transfer Case, Electronic Insta-Trac",
+ availability: "Std"
+ }
+ ],
+ brakesCategory: [
+ {
+ categorySequenceNmb: 8,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Power Disc/Drum with 4 Wheel ABS",
+ availability: "Std"
+ }
+ ],
+ exteriorColorCategory: [
+ {
+ categorySequenceNmb: 4,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Birch Silver",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 4,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Black",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 4,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Deep Ruby",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 4,
+ includesNote: " ",
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Granite Blue",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 4,
+ includesNote: " ",
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Imperial Blue",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 4,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Pace Blue",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 4,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Summit White",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 4,
+ includesNote: " ",
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Sunburst Orange",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 4,
+ includesNote: " ",
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Victory Red",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 4,
+ includesNote: null,
+ invoice: 136.95,
+ sequenceNmb: 1,
+ retail: 165,
+ name: " Yellow",
+ availability: "Opt"
+ }
+ ],
+ noteCategory: [],
+ tiresCategory: [
+ {
+ categorySequenceNmb: 26,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " P225/75R15 BSW",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 26,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " P235/75R15 BSW",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 26,
+ includesNote: null,
+ invoice: 78.85,
+ sequenceNmb: 1,
+ retail: 95,
+ name: " Spare Tire, Conventional",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 26,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Spare Tire, Limited Use",
+ availability: "Std"
+ }
+ ],
+ mandatoryCategory: [
+ {
+ categorySequenceNmb: 15,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Emission Equipment Override, CA/MA/ME/NY/VT",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 15,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Emission Equipment Override, Federal",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 15,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Emission Equipment, California",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 15,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Emission Equipment, Federal",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 15,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Emission Equipment, MA/ME/NY/VT",
+ availability: "N/C"
+ }
+ ],
+ steeringCategory: [
+ {
+ categorySequenceNmb: 24,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Steering, Power",
+ availability: "Std"
+ }
+ ],
+ interiorColorCategory: [
+ {
+ categorySequenceNmb: 5,
+ includesNote: " ",
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Medium Pewter",
+ availability: "N/C"
+ }
+ ],
+ towingCategory: [
+ {
+ categorySequenceNmb: 27,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Towing Cap, 4000-lb Max (When Properly Equipped)",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 27,
+ includesNote: " ",
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Trailer Harness",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 27,
+ includesNote: " INCLUDES: Trailer Harness",
+ invoice: 224.1,
+ sequenceNmb: 1,
+ retail: 270,
+ name: " Trailer Hitch",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 27,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Trailer Hitch Delete",
+ availability: "Std"
+ }
+ ],
+ wheelsCategory: [],
+ exteriorCategory: [
+ {
+ categorySequenceNmb: 12,
+ includesNote: " ",
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Bracket, Front License Plate",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 12,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Bumpers, Chrome F&R w/Rear Step",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 12,
+ includesNote: null,
+ invoice: 62.25,
+ sequenceNmb: 1,
+ retail: 75,
+ name: " Glass, Deep Tinted",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 12,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Grille Surround, Dark Smoke Gray",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 12,
+ includesNote: " ",
+ invoice: 83,
+ sequenceNmb: 1,
+ retail: 100,
+ name: " Moldings, Body Side",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 12,
+ includesNote: null,
+ invoice: 170.15,
+ sequenceNmb: 1,
+ retail: 205,
+ name: paragraph(),
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 12,
+ includesNote: " ",
+ invoice: 112.05,
+ sequenceNmb: 1,
+ retail: 135,
+ name: " Pickup Box Protectors, Top Rail",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 12,
+ includesNote: null,
+ invoice: 311.25,
+ sequenceNmb: 1,
+ retail: 375,
+ name: " Running Boards",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 12,
+ includesNote: null,
+ invoice: 332,
+ sequenceNmb: 1,
+ retail: 400,
+ name: paragraph(),
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 12,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Skid Plate, Front Underbody Shield",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 12,
+ includesNote: null,
+ invoice: 83,
+ sequenceNmb: 1,
+ retail: 100,
+ name: " Tailgate Edge Protector",
+ availability: "Opt"
+ },
+ {
+ categorySequenceNmb: 12,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: paragraph(),
+ availability: "Std"
+ }
+ ],
+ seatsCategory: [
+ {
+ categorySequenceNmb: 21,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Seat Trim, Cloth ",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 21,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Seat Trim, Cloth **D",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 21,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 2,
+ retail: 0,
+ name: " Seat Trim, Cloth **D",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 21,
+ includesNote: " ",
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Seat Trim, Vinyl",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 21,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Seat, Split Bench ",
+ availability: "Std"
+ },
+ {
+ categorySequenceNmb: 21,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 1,
+ retail: 0,
+ name: " Seat, Split Bench AM6",
+ availability: "N/C"
+ },
+ {
+ categorySequenceNmb: 21,
+ includesNote: null,
+ invoice: 0,
+ sequenceNmb: 2,
+ retail: 0,
+ name: " Seat, Split Bench AM6",
+ availability: "N/C"
+ }
+ ]
+ },
+ vehicleRankingClass: [],
+ slugMakeModel: null,
+ secondaryBodyTypeText: null,
+ latestYear: 0,
+ ownershipCosts: {
+ depreciationTotal: "N/A",
+ total5YearOcCostLessHybrid: null,
+ total5YearOcCost: "N/A",
+ valueRating: "N/A",
+ repairsTotal: "N/A",
+ hybridTax: "N/A",
+ stateFeesTotal: "N/A",
+ fuelTotal: "N/A",
+ maintenanceTotal: "N/A",
+ similarVehicles: null,
+ financingTotal: "N/A",
+ difference5YearCost: null,
+ insuranceTotal: "N/A"
+ },
+ carsMake: "Chevrolet",
+ carsYear: 2007,
+ slugModelName: "colorado",
+ mainCategory: "Utility/Offroad",
+ vehicleStatus: 1,
+ vehicleNmb: 19335,
+ slugDieselCategory: null,
+ warranty: {
+ roadsideWarrantyMonths: null,
+ fullWarrantyMiles: "36,000",
+ powertrainWarrantyMiles: "100,000",
+ corrosionWarrantyMonths: "72",
+ powertrainWarrantyMonths: "60",
+ corrosionWarrantyMiles: "100,000",
+ maintenanceWarrantyMonths: "None",
+ fullWarrantyMonths: "36",
+ maintenanceWarrantyMiles: "None",
+ roadsideWarrantyMiles: "N/A"
+ },
+ makeDiscontinued: 0,
+ slugSubcategory: "midsize-pickup",
+ makeIcon: "chevrolet.png",
+ slugSecondaryBodyType: null,
+ makeFeaturedImage: "chevy.jpg",
+ carsRebates: [],
+ pricing: {
+ pMsrpValue: "17485.00",
+ pExcellentRetailValue: null,
+ pFmpOrCrvLabel: "Clean Retail Value",
+ pMsrp: 17485,
+ pTotalTargetPrice: 0,
+ pTargetPrice: 0,
+ pGasGuzzlerTax: 0,
+ pMsrpLabel: "Original MSRP",
+ pNewMonthly: 0,
+ pAverageSalesTaxAndFees: 0,
+ pCpoPrice: "N/R",
+ pFmpOrCrvValue: "N/A",
+ pInvoice: 16523.33,
+ pTargetRebate: 0,
+ pEffectiveOn: "2007-03-26T00:00:00.000Z",
+ pDestination: 685
+ },
+ recalls: [
+ {
+ recallsPotaff: 3227,
+ correctiveAction: paragraphs(2),
+ yearText: 2007,
+ rcDate: "2006-08-11T00:00:00.000Z",
+ mfgText: "GENERAL MOTORS CORP.",
+ makeText: "CHEVROLET",
+ modelText: "COLORADO",
+ consequenceDefect: paragraphs(2),
+ descDefect: paragraphs(3),
+ recallsCampNumber: "06V307000",
+ recallId: 63244,
+ compName: "WHEELS:RIM "
+ },
+ {
+ recallsPotaff: 42540,
+ correctiveAction: paragraphs(1),
+ yearText: 2007,
+ rcDate: "2009-05-11T00:00:00.000Z",
+ mfgText: "DOPE, INC.",
+ makeText: "CHEVROLET",
+ modelText: "S10",
+ consequenceDefect: paragraph(),
+ descDefect: paragraphs(4),
+ recallsCampNumber: "09E025000",
+ recallId: 102448,
+ compName: "EXTERIOR LIGHTING:HEADLIGHTS"
+ },
+ {
+ recallsPotaff: 185903,
+ correctiveAction: paragraphs(4),
+ yearText: 2007,
+ rcDate: "2009-07-29T00:00:00.000Z",
+ mfgText: "GENERAL MOTORS CORP.",
+ makeText: "CHEVROLET",
+ modelText: "COLORADO",
+ consequenceDefect: paragraphs(2),
+ descDefect: paragraphs(2),
+ recallsCampNumber: "09V310000",
+ recallId: 102549,
+ compName: "EXTERIOR LIGHTING:BRAKE LIGHTS:SWITCH"
+ },
+ {
+ recallsPotaff: 192676,
+ correctiveAction: paragraphs(2),
+ yearText: 2007,
+ rcDate: "2010-11-18T00:00:00.000Z",
+ mfgText: "GENERAL MOTORS CORP.",
+ makeText: "CHEVROLET",
+ modelText: "COLORADO",
+ consequenceDefect: paragraphs(6),
+ descDefect: paragraphs(2),
+ recallsCampNumber: "10V575000",
+ recallId: 121363,
+ compName: "CHILD SEAT"
+ }
+ ],
+ cpoProgram: {
+ cpoWarrantyBbnc: paragraph(),
+ cpoInspectionPoint: "172",
+ cpoWebsite: "https://www.gmcertified.com",
+ cpoAdditionalBenefits: paragraphs(2),
+ cpoAgeMileage: paragraph(),
+ cpoName: "Chevrolet/Buick/GMC Certified Pre-Owned Vehicles",
+ cpoLease: "No",
+ cpoCustomerServiceNumber: "(866) 694-6546",
+ cpoInspectionScore: 99,
+ cpoWarranty: paragraphs(2),
+ cpoReturnExchange: "3-day/150-mile Vehicle Exchange Program",
+ cpoFinancing: "Yes",
+ cpoWarrantyExtended: "Yes",
+ cpoHistoryReport: 1,
+ cpoParticipation: "3,400 dealerships enrolled (94% of available dealerships)",
+ cpoProgramOverview: paragraphs(6),
+ cpoWarrantyDeductible: "No",
+ cpoWarrantyTransferable: "Yes",
+ cpoRoadside: paragraph()
+ },
+ priceRangeValue: 1,
+ dieselCategory: null,
+ carsPricePageShow: 0,
+ combinedPrice: 18170,
+ carsSubcategory: "Midsize Pickup",
+ hubs: [
+ {
+ hubsImage: "epa.svg",
+ hubsText: "16 / 22 mpg",
+ makeModelHub: 1,
+ hubsName: "Fuel Economy"
+ },
+ {
+ hubsImage: "engine.svg",
+ hubsText: "185@5,600",
+ makeModelHub: 2,
+ hubsName: "Horsepower"
+ },
+ {
+ hubsImage: "torque.svg",
+ hubsText: "190@2,800",
+ makeModelHub: 3,
+ hubsName: "Torque"
+ },
+ {
+ hubsImage: null,
+ hubsText: null,
+ makeModelHub: 4,
+ hubsName: null
+ }
+ ],
+ carsDiscontinued: 0,
+ updatedOn: "2024-01-08T17:09:18.000Z",
+ retainedValue: "N/A",
+ carMatchCustomRankings: [],
+ carsModelName: "Colorado",
+ makeThumbnailUrl: "https://mocks.webiny.com/chevrolet.png",
+ slugBodystyle: "truck",
+ slugMainCategory: "utilityoffroad",
+ powertrains: [
+ {
+ ptCityMpg: 15,
+ ptHwyMpg: 21,
+ ptHorseower: 185
+ },
+ {
+ ptCityMpg: 15,
+ ptHwyMpg: 21,
+ ptHorseower: 242
+ },
+ {
+ ptCityMpg: 16,
+ ptHwyMpg: 22,
+ ptHorseower: 185
+ }
+ ],
+ trimName: "LS 4WD Regular Cab",
+ carsCombinedEpaMpg: 18.7,
+ releaseType: "Complete",
+ ymmPriceRange: "$14,085 - $23,810",
+ seoText: {
+ seoContent: paragraphs(5),
+ seoTitle: "Chevrolet Trucks",
+ seoType: "truck"
+ },
+ slugTrimName: "ls-4wd-regular-cab",
+ oemUrl: "www.chevrolet.com",
+ propertyType: "Standard",
+ bodyTypeOrder: 3,
+ horsePowerVal: 185,
+ images: [
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-angular-front.png",
+ imageAngle: "angular front",
+ imageOrder: 1,
+ imageType: "exterior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-angular-rear.png",
+ imageAngle: "angular rear",
+ imageOrder: 2,
+ imageType: "exterior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-dashboard.png",
+ imageAngle: "dashboard",
+ imageOrder: 3,
+ imageType: "interior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-side-view.png",
+ imageAngle: "side view",
+ imageOrder: 4,
+ imageType: "exterior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-wheel-cap.png",
+ imageAngle: "wheel cap",
+ imageOrder: 5,
+ imageType: "exterior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-front-view.png",
+ imageAngle: "front view",
+ imageOrder: 6,
+ imageType: "exterior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-rear-view.png",
+ imageAngle: "rear view",
+ imageOrder: 7,
+ imageType: "exterior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-steering-wheel.png",
+ imageAngle: "steering wheel",
+ imageOrder: 8,
+ imageType: "interior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-instrument-cluster.png",
+ imageAngle: "instrument cluster",
+ imageOrder: 9,
+ imageType: "interior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-front-seat.png",
+ imageAngle: "front seat",
+ imageOrder: 11,
+ imageType: "interior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-rear-seat.png",
+ imageAngle: "rear seat",
+ imageOrder: 12,
+ imageType: "interior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-instrument-panel.png",
+ imageAngle: "instrument panel",
+ imageOrder: 13,
+ imageType: "interior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-grille.png",
+ imageAngle: "grille",
+ imageOrder: 15,
+ imageType: "exterior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-headlight.png",
+ imageAngle: "headlight",
+ imageOrder: 16,
+ imageType: "exterior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-taillight.png",
+ imageAngle: paragraph(),
+ imageOrder: 17,
+ imageType: "exterior"
+ },
+ {
+ imageUrl: "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-doors.png",
+ imageAngle: "doors",
+ imageOrder: 18,
+ imageType: "exterior"
+ },
+ {
+ imageUrl: "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-trunk.png",
+ imageAngle: "trunk",
+ imageOrder: 19,
+ imageType: "exterior"
+ },
+ {
+ imageUrl:
+ "https://mocks.webiny.com/2007-chevrolet-colorado-ls-2wd-truck-door-controls.png",
+ imageAngle: paragraph(),
+ imageOrder: 22,
+ imageType: "interior"
+ }
+ ],
+ hybridElectricCategory: null,
+ manufacturerCd: "CT15403"
+ };
+};
+
+export const mockData = createMockData();
diff --git a/packages/api-headless-cms-es-tasks/src/tasks/MockDataCreator/types.ts b/packages/api-headless-cms-es-tasks/src/tasks/MockDataCreator/types.ts
new file mode 100644
index 00000000000..7219fe4ae01
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/tasks/MockDataCreator/types.ts
@@ -0,0 +1,8 @@
+import { ITaskResponseDoneResultOutput } from "@webiny/tasks";
+
+export interface IMockDataCreatorInput {
+ totalAmount: number;
+ createdAmount: number;
+}
+
+export type IMockDataCreatorOutput = ITaskResponseDoneResultOutput;
diff --git a/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/MockDataManager.ts b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/MockDataManager.ts
new file mode 100644
index 00000000000..e0857e5696b
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/MockDataManager.ts
@@ -0,0 +1,115 @@
+import { ITask, ITaskResponseResult, ITaskRunParams, TaskDataStatus } from "@webiny/tasks";
+import { IMockDataManagerInput, IMockDataManagerOutput } from "~/tasks/MockDataManager/types";
+import { calculateAmounts } from "./calculateAmounts";
+import { IMockDataCreatorInput } from "~/tasks/MockDataCreator/types";
+import { calculateSeconds, WAIT_MAX_SECONDS } from "./calculateSeconds";
+import { MOCK_DATA_CREATOR_TASK_ID } from "~/tasks/createMockDataCreatorTask";
+import { createModelAndGroup } from "~/tasks/MockDataManager/createModelAndGroup";
+import { Context } from "~/types";
+import { disableIndexing, enableIndexing } from "~/utils";
+
+export class MockDataManager<
+ C extends Context,
+ I extends IMockDataManagerInput,
+ O extends IMockDataManagerOutput
+> {
+ public async execute(params: ITaskRunParams): Promise> {
+ const { context, isAborted, input, response, trigger, store } = params;
+
+ const taskId = store.getTask().id;
+ if (isAborted()) {
+ await this.abortChildTasks(context, taskId);
+ return response.aborted();
+ } else if (input.seconds) {
+ const items = await this.listChildTasksNotDone(context, taskId);
+
+ /**
+ * If there are still running creator tasks, we need to wait a bit more.
+ */
+ if (items.length > 0) {
+ return response.continue(
+ {
+ ...input
+ },
+ {
+ seconds: input.seconds || WAIT_MAX_SECONDS
+ }
+ );
+ }
+ /**
+ * If there are no running tasks, we can enable indexing and finish the manager task.
+ */
+ await enableIndexing({
+ client: context.elasticsearch,
+ model: {
+ modelId: input.modelId,
+ tenant: "root",
+ locale: "en-US"
+ }
+ });
+ return response.done();
+ }
+
+ const result = await createModelAndGroup({
+ context,
+ modelId: input.modelId,
+ overwrite: input.overwrite
+ });
+ if (typeof result === "string") {
+ return response.done(result);
+ }
+
+ await disableIndexing({
+ model: result.model,
+ client: context.elasticsearch
+ });
+
+ const { amountOfTasks, amountOfRecords } = calculateAmounts(input.amount);
+
+ const seconds = calculateSeconds(amountOfRecords);
+
+ for (let current = 0; current < amountOfTasks; current++) {
+ await trigger({
+ definition: MOCK_DATA_CREATOR_TASK_ID,
+ input: {
+ totalAmount: amountOfRecords,
+ createdAmount: 0
+ },
+ name: `Mock Data Creator Task #${current + 1} of ${amountOfTasks}`
+ });
+ }
+
+ return response.continue(
+ {
+ ...input,
+ seconds,
+ amountOfTasks,
+ amountOfRecords
+ },
+ {
+ seconds
+ }
+ );
+ }
+
+ private async listChildTasksNotDone(context: Context, id: string): Promise {
+ const { items } = await context.tasks.listTasks({
+ where: {
+ parentId: id,
+ taskStatus_in: [TaskDataStatus.PENDING, TaskDataStatus.RUNNING]
+ },
+ limit: 10000
+ });
+ return items;
+ }
+
+ private async abortChildTasks(context: Context, id: string): Promise {
+ const items = await this.listChildTasksNotDone(context, id);
+ for (const item of items) {
+ await context.tasks.abort({
+ id: item.id,
+ message: "Aborted by parent task."
+ });
+ }
+ }
+}
diff --git a/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/calculateAmounts.ts b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/calculateAmounts.ts
new file mode 100644
index 00000000000..b85d8b2451e
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/calculateAmounts.ts
@@ -0,0 +1,73 @@
+interface ICalculateAmounts {
+ amountOfTasks: number;
+ amountOfRecords: number;
+}
+
+interface IMaxRecordsPerTask {
+ amount: number;
+ percentagePerTask: number;
+}
+
+const constrains: IMaxRecordsPerTask[] = [
+ {
+ amount: 50,
+ percentagePerTask: 100
+ },
+ {
+ amount: 1000,
+ percentagePerTask: 50
+ },
+ {
+ amount: 100000,
+ percentagePerTask: 20
+ }
+ // {
+ // amount: 50000,
+ // percentagePerTask: 10
+ // },
+ // {
+ // amount: 750000,
+ // percentagePerTask: 10
+ // },
+ // {
+ // amount: 1000000,
+ // percentagePerTask: 2
+ // },
+ // {
+ // amount: 5000000,
+ // percentagePerTask: 1
+ // },
+ // {
+ // amount: 10000000,
+ // percentagePerTask: 0.5
+ // }
+];
+
+const findValue = (input: number): IMaxRecordsPerTask => {
+ for (const value of constrains) {
+ if (input <= value.amount) {
+ return value;
+ }
+ }
+ throw new Error(`No valid value found - input value is too large: ${input}.`);
+};
+
+export const calculateAmounts = (input: number): ICalculateAmounts => {
+ const values = findValue(input);
+
+ const { percentagePerTask } = values;
+ /**
+ * Do not ask...
+ */
+ const amountOfRecords =
+ percentagePerTask < 100
+ ? Math.round(parseFloat(String(input / (100 / percentagePerTask))))
+ : input;
+
+ const amountOfTasks = Math.ceil(100 / percentagePerTask);
+
+ return {
+ amountOfRecords,
+ amountOfTasks
+ };
+};
diff --git a/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/calculateSeconds.ts b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/calculateSeconds.ts
new file mode 100644
index 00000000000..9cb44fcd2fa
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/calculateSeconds.ts
@@ -0,0 +1,15 @@
+const recordsPerSecond = 4;
+export const WAIT_MIN_SECONDS = 15;
+export const WAIT_MAX_SECONDS = 90;
+
+export const calculateSeconds = (records: number): number => {
+ const seconds = Math.ceil(records / recordsPerSecond);
+ if (seconds > WAIT_MAX_SECONDS) {
+ return WAIT_MAX_SECONDS;
+ } else if (seconds < WAIT_MIN_SECONDS) {
+ return WAIT_MIN_SECONDS;
+ } else if (seconds > 0) {
+ return seconds;
+ }
+ return WAIT_MAX_SECONDS;
+};
diff --git a/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/constants.ts b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/constants.ts
new file mode 100644
index 00000000000..bb8925e8a72
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/constants.ts
@@ -0,0 +1 @@
+export const CARS_MODEL_ID = "cars";
diff --git a/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/createModelAndGroup.ts b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/createModelAndGroup.ts
new file mode 100644
index 00000000000..53ce0406b4b
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/createModelAndGroup.ts
@@ -0,0 +1,51 @@
+import { CmsGroup, CmsModel } from "@webiny/api-headless-cms/types";
+import { Context } from "~/types";
+import { createGroupData } from "./group";
+import { createCarsModel } from "./model";
+import { createIndex } from "~/utils";
+
+interface ICreateModelAndGroupParams {
+ context: Context;
+ modelId: string;
+ overwrite?: boolean;
+}
+export interface ICreateModelAndGroupResultSuccess {
+ group: CmsGroup;
+ model: CmsModel;
+}
+export type ICreateModelAndGroupResult = string | ICreateModelAndGroupResultSuccess;
+
+export const createModelAndGroup = async (
+ params: ICreateModelAndGroupParams
+): Promise => {
+ const { context, modelId, overwrite = false } = params;
+ /**
+ * First we need to check if the model already exists in the database. If not, we need to create it.
+ */
+ let model = (await context.cms.listModels()).find(m => m.modelId === modelId);
+ let group: CmsGroup | undefined;
+ if (model && !overwrite) {
+ return `Model "${modelId}" already exists.`;
+ } else if (!model) {
+ group = (await context.cms.listGroups()).find(group => group.slug === "mocks");
+ if (!group) {
+ const groupData = createGroupData();
+ group = await context.cms.createGroup(groupData);
+ }
+ /**
+ * Possibly we need to create the model.
+ */
+ const carsModel = createCarsModel(group);
+ model = await context.cms.createModel(carsModel);
+ }
+ await createIndex({
+ model,
+ client: context.elasticsearch,
+ plugins: context.plugins
+ });
+
+ return {
+ group: group as CmsGroup,
+ model: model as CmsModel
+ };
+};
diff --git a/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/group.ts b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/group.ts
new file mode 100644
index 00000000000..78fbea800f2
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/group.ts
@@ -0,0 +1,11 @@
+import { CmsGroupCreateInput } from "@webiny/api-headless-cms/types";
+
+export const createGroupData = (): CmsGroupCreateInput => {
+ return {
+ id: "mocks",
+ icon: "fas/star",
+ name: "Mocks",
+ description: "A group for mock models",
+ slug: "mocks"
+ };
+};
diff --git a/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/model.ts b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/model.ts
new file mode 100644
index 00000000000..823c6c1a555
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/model.ts
@@ -0,0 +1,5549 @@
+import { CmsModelCreateInput } from "@webiny/api-headless-cms/types";
+import { CmsGroup } from "@webiny/api-headless-cms/types";
+import { CARS_MODEL_ID } from "./constants";
+
+export const createCarsModel = (group: CmsGroup): CmsModelCreateInput => {
+ return {
+ name: "Cars",
+ modelId: CARS_MODEL_ID,
+ singularApiName: "Cars",
+ pluralApiName: "Cars",
+ description: "Cars Data Model",
+ group: group.id,
+ fields: [
+ {
+ id: "carsVehicle",
+ fieldId: "carsVehicle",
+ type: "text",
+ label: "Vehicle",
+ helpText: "Make Model Year and Trim",
+ renderer: {
+ name: "text-input"
+ },
+ validation: [
+ {
+ name: "required",
+ message: "Value is required."
+ }
+ ]
+ },
+ {
+ id: "vehicleNmb",
+ fieldId: "vehicleNmb",
+ type: "number",
+ label: "VehicleNumber",
+ helpText: "A unique vehicle number",
+ renderer: {
+ name: "number-input"
+ },
+ validation: [
+ {
+ name: "required",
+ message: "Value is required."
+ }
+ ]
+ },
+ {
+ id: "carsYear",
+ fieldId: "carsYear",
+ type: "number",
+ label: "Year",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "carsMake",
+ fieldId: "carsMake",
+ type: "text",
+ label: "Make",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "carsModelName",
+ fieldId: "carsModelName",
+ type: "text",
+ label: "ModelName",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "trimName",
+ fieldId: "trimName",
+ type: "text",
+ label: "TrimName",
+ multipleValues: false,
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "bodyStyle",
+ fieldId: "bodyStyle",
+ multipleValues: false,
+ type: "text",
+ label: "BodyStyle",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "manufacturerCd",
+ fieldId: "manufacturerCd",
+ type: "text",
+ label: "Manufacturer Code",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "releaseType",
+ fieldId: "releaseType",
+ type: "text",
+ label: "ReleaseType (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "newUsedBg",
+ fieldId: "newUsedBg",
+ type: "text",
+ label: "NewUsedBg (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "carsUid",
+ fieldId: "carsUid",
+ type: "number",
+ label: "UID",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "carsDiscontinued",
+ fieldId: "carsDiscontinued",
+ type: "number",
+ label: "Discontinued",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "slugMake",
+ fieldId: "slugMake",
+ type: "text",
+ label: "Slug Make",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "slugModelName",
+ fieldId: "slugModelName",
+ type: "text",
+ label: "SlugModelName",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "slugTrimName",
+ fieldId: "slugTrimName",
+ type: "text",
+ label: "SlugTrimName (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "slugBodystyle",
+ fieldId: "slugBodystyle",
+ type: "text",
+ label: "SlugBodystyle (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "makeFeaturedImage",
+ fieldId: "makeFeaturedImage",
+ type: "text",
+ label: "MakeFeaturedImage (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "makeIcon",
+ fieldId: "makeIcon",
+ type: "text",
+ label: "MakeIcon (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "makeDiscontinued",
+ fieldId: "makeDiscontinued",
+ type: "number",
+ label: "Make Discontinued",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "baseVehicle",
+ fieldId: "baseVehicle",
+ type: "number",
+ label: "BaseVehicle (non-jato)",
+ renderer: {
+ name: "number-input"
+ },
+ helpText: "This is a Required Field."
+ },
+ {
+ id: "oemUrl",
+ fieldId: "oemUrl",
+ type: "text",
+ label: "OemUrl (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "carsSubcategory",
+ fieldId: "carsSubcategory",
+ type: "text",
+ label: "Subcategory (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "slugSubcategory",
+ fieldId: "slugSubcategory",
+ type: "text",
+ label: "SlugSubcategory (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "mainCategory",
+ fieldId: "mainCategory",
+ type: "text",
+ label: "MainCategory (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "slugMainCategory",
+ fieldId: "slugMainCategory",
+ type: "text",
+ label: "SlugMainCategory (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "hybridElectricCategory",
+ fieldId: "hybridElectricCategory",
+ type: "text",
+ label: "HybridElectricCategory (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "slugHybridElectricCategory",
+ fieldId: "slugHybridElectricCategory",
+ type: "text",
+ label: "SlugHybridElectricCategory (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "dieselCategory",
+ fieldId: "dieselCategory",
+ type: "text",
+ label: "DieselCategory (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "slugDieselCategory",
+ fieldId: "slugDieselCategory",
+ type: "text",
+ label: "SlugDieselCategory (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "updatedOn",
+ fieldId: "updatedOn",
+ type: "text",
+ label: "UpdatedOn",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "vehicleStatus",
+ fieldId: "vehicleStatus",
+ type: "number",
+ label: "VehicleStatus (non-jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "featuredImage",
+ fieldId: "featuredImage",
+ type: "text",
+ label: "FeaturedImage (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "propertyType",
+ fieldId: "propertyType",
+ type: "text",
+ label: "PropertyType (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "marketingImage",
+ fieldId: "marketingImage",
+ type: "text",
+ label: "MarketingImage (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "priceRangeValue",
+ fieldId: "priceRangeValue",
+ type: "number",
+ label: "PriceRangeValue (non-jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "priceRangeText",
+ fieldId: "priceRangeText",
+ type: "text",
+ label: "PriceRangeText (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "ymmPriceRange",
+ fieldId: "ymmPriceRange",
+ type: "text",
+ label: "YMMPriceRange (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "bodyType",
+ fieldId: "bodyType",
+ type: "text",
+ label: "BodyType (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "bodyTypeText",
+ fieldId: "bodyTypeText",
+ type: "text",
+ label: "BodyType Text (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "slugBodyType",
+ fieldId: "slugBodyType",
+ type: "text",
+ label: "SlugBodyType (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "bodyTypeOrder",
+ fieldId: "bodyTypeOrder",
+ type: "number",
+ label: "BodyTypeOrder (non-jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "secondaryBodyType",
+ fieldId: "secondaryBodyType",
+ type: "text",
+ label: "SecondaryBodyType (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "secondaryBodyTypeText",
+ fieldId: "secondaryBodyTypeText",
+ type: "text",
+ label: "SecondaryBodyTypeText (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "slugSecondaryBodyType",
+ fieldId: "slugSecondaryBodyType",
+ type: "text",
+ label: "SlugSecondaryBodyType (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "secondaryBodyTypeOrder",
+ fieldId: "secondaryBodyTypeOrder",
+ type: "number",
+ label: "SecondaryBodyTypeOrder (non-jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "priceRangeSlug",
+ fieldId: "priceRangeSlug",
+ type: "text",
+ label: "PriceRangeSlug (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "latestYear",
+ fieldId: "latestYear",
+ type: "number",
+ label: "LatestYear (non-jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "ymmLowestPriceRange",
+ fieldId: "ymmLowestPriceRange",
+ type: "number",
+ label: "YMMLowestPriceRange (non-jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "ymmMaxPriceRange",
+ fieldId: "ymmMaxPriceRange",
+ type: "number",
+ label: "YMMMaxPriceRange (non-jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "makeThumbnailUrl",
+ fieldId: "makeThumbnailUrl",
+ type: "text",
+ label: "MakeThumbnailUrl (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "combinedPrice",
+ fieldId: "combinedPrice",
+ type: "number",
+ label: "CombinedPrice (non-jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "carsCombinedEpaMpg",
+ fieldId: "carsCombinedEpaMpg",
+ type: "number",
+ label: "CombinedEpaMPG (non-jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "horsePowerVal",
+ fieldId: "horsePowerVal",
+ type: "number",
+ label: "HorsePowerVal (non-jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "slugMakeModel",
+ fieldId: "slugMakeModel",
+ type: "text",
+ label: "SlugMakeModel (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "slugYearMakeModel",
+ fieldId: "slugYearMakeModel",
+ type: "text",
+ label: "SlugYearMakeModel (non-jato)",
+ renderer: {
+ name: "text-input"
+ },
+ helpText: "This is a Required Field."
+ },
+ {
+ id: "retainedValue",
+ fieldId: "retainedValue",
+ type: "text",
+ label: "RetainedValue (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "standardTires",
+ fieldId: "standardTires",
+ type: "text",
+ label: "StandardTires (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "carsMakePageShow",
+ fieldId: "carsMakePageShow",
+ type: "number",
+ label: "Make Page Show (non-jato)",
+ renderer: {
+ name: "number-input"
+ },
+ helpText: "This is a Required Field."
+ },
+ {
+ id: "carsPricePageShow",
+ fieldId: "carsPricePageShow",
+ type: "number",
+ label: "PriceRange Page Show (non-jato)",
+ renderer: {
+ name: "number-input"
+ },
+ helpText: "This is a Required Field."
+ },
+ {
+ id: "carsEditorialRating",
+ fieldId: "editorialRating",
+ type: "number",
+ label: "Editorial Rating (non-jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "specifications",
+ fieldId: "specifications",
+ type: "object",
+ label: "Specifications",
+ renderer: {
+ name: "object-accordion"
+ },
+ settings: {
+ layout: [
+ ["seatingCapacity", "specWidth", "specLength", "driveTrain"],
+ ["specHeight", "specWheelase", "frontHeadroom"],
+ ["rearHeadroom", "frontShoulderRoom", "rearShoulderRoom"],
+ ["frontLegroom", "rearLegroom", "groundClearance"],
+ ["curbWeight", "cargoCapacity", "specGvwr"],
+ ["engineName", "specHorsepower", "specTonnage"],
+ ["specTorque", "fuelType", "fuelCapacity", "stdEpaMpg"],
+ ["transmissionName", "transmissionType", "towingCapacity"],
+ ["drivingRange", "cylinderConfiguration", "numberOfCylinders"],
+ ["stdMpgWithUnits", "heroLabel1", "heroValue1"],
+ ["payloadCapacity", "vehicleClass", "engineType"]
+ ],
+ fields: [
+ {
+ id: "driveTrain",
+ fieldId: "driveTrain",
+ multipleValues: false,
+ type: "text",
+ label: "Drivetrain",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "seatingCapacity",
+ fieldId: "seatingCapacity",
+ multipleValues: false,
+ type: "text",
+ label: "SeatingCapacity",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "specWidth",
+ fieldId: "specWidth",
+ multipleValues: false,
+ type: "text",
+ label: "Width",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "specLength",
+ fieldId: "specLength",
+ multipleValues: false,
+ type: "text",
+ label: "Length",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "specHeight",
+ fieldId: "specHeight",
+ multipleValues: false,
+ type: "text",
+ label: "Height",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "specWheelase",
+ fieldId: "specWheelbase",
+ type: "text",
+ multipleValues: false,
+ label: "Wheelbase",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "frontHeadroom",
+ fieldId: "frontHeadroom",
+ type: "text",
+ multipleValues: false,
+ label: "FrontHeadroom",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "rearHeadroom",
+ fieldId: "rearHeadroom",
+ type: "text",
+ multipleValues: false,
+ label: "RearHeadroom",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "frontShoulderRoom",
+ fieldId: "frontShoulderRoom",
+ type: "text",
+ multipleValues: false,
+ label: "FrontShoulderRoom",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "rearShoulderRoom",
+ fieldId: "rearShoulderRoom",
+ type: "text",
+ multipleValues: false,
+ label: "RearShoulderRoom",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "frontLegroom",
+ fieldId: "frontLegroom",
+ type: "text",
+ multipleValues: false,
+ label: "FrontLegroom",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "rearLegroom",
+ fieldId: "rearLegroom",
+ type: "text",
+ multipleValues: false,
+ label: "RearLegroom",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "groundClearance",
+ fieldId: "groundClearance",
+ type: "text",
+ multipleValues: false,
+ label: "GroundClearance",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "curbWeight",
+ fieldId: "curbWeight",
+ type: "text",
+ multipleValues: false,
+ label: "CurbWeight",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cargoCapacity",
+ fieldId: "cargoCapacity",
+ type: "text",
+ multipleValues: false,
+ label: "CargoCapacity",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "specGvwr",
+ fieldId: "specGvwr",
+ type: "text",
+ multipleValues: false,
+ label: "GVWR",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "payloadCapacity",
+ fieldId: "payloadCapacity",
+ type: "text",
+ multipleValues: false,
+ label: "PayloadCapacity",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "towingCapacity",
+ fieldId: "towingCapacity",
+ type: "text",
+ multipleValues: false,
+ label: "TowingCapacity",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "engineName",
+ fieldId: "engineName",
+ type: "text",
+ multipleValues: false,
+ label: "EngineName",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "specHorsepower",
+ fieldId: "specHorsepower",
+ type: "text",
+ multipleValues: false,
+ label: "Horsepower",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "specTorque",
+ fieldId: "specTorque",
+ type: "text",
+ multipleValues: false,
+ label: "Torque",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "fuelType",
+ fieldId: "fuelType",
+ multipleValues: false,
+ type: "text",
+ label: "FuelType",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "fuelCapacity",
+ fieldId: "fuelCapacity",
+ multipleValues: false,
+ type: "text",
+ label: "FuelCapacity (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "stdEpaMpg",
+ fieldId: "stdEpaMpg",
+ type: "text",
+ multipleValues: false,
+ label: "StdEpaMpg",
+ renderer: {
+ name: "text-input"
+ },
+ helpText: "This is a Required Field."
+ },
+ {
+ id: "transmissionName",
+ fieldId: "transmissionName",
+ type: "text",
+ multipleValues: false,
+ label: "TransmissionName",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "transmissionType",
+ fieldId: "transmissionType",
+ type: "text",
+ multipleValues: false,
+ label: "TransmissionType",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "drivingRange",
+ fieldId: "drivingRange",
+ type: "text",
+ multipleValues: false,
+ label: "DrivingRange",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cylinderConfiguration",
+ fieldId: "cylinderConfiguration",
+ type: "text",
+ multipleValues: false,
+ label: "CylinderConfiguration",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "numberOfCylinders",
+ fieldId: "numberOfCylinders",
+ type: "text",
+ multipleValues: false,
+ label: "NumberOfCylinders",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "specTonnage",
+ fieldId: "specTonnage",
+ type: "text",
+ multipleValues: false,
+ label: "Tonnage (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "stdMpgWithUnits",
+ fieldId: "stdMpgWithUnits",
+ type: "text",
+ multipleValues: false,
+ label: "StdMpg With Units (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "heroLabel1",
+ fieldId: "heroLabel1",
+ type: "text",
+ multipleValues: false,
+ label: "Hero Label1 (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "heroValue1",
+ fieldId: "heroValue1",
+ type: "text",
+ multipleValues: false,
+ label: "Hero Value1 (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "vehicleClass",
+ fieldId: "vehicleClass",
+ type: "text",
+ multipleValues: false,
+ label: "VehicleClass (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "engineType",
+ fieldId: "engineType",
+ type: "text",
+ multipleValues: false,
+ label: "Engine Type (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "powertrains",
+ fieldId: "powertrains",
+ multipleValues: true,
+ label: "Powertrains (Non-Jato)",
+ renderer: {
+ name: "objects-accordion"
+ },
+ type: "object",
+ settings: {
+ layout: [["ptHorseower", "ptCityMpg", "ptHwyMpg"]],
+ fields: [
+ {
+ id: "ptHorseower",
+ fieldId: "ptHorseower",
+ type: "number",
+ multipleValues: false,
+ label: "Horsepower",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "ptCityMpg",
+ fieldId: "ptCityMpg",
+ type: "number",
+ multipleValues: false,
+ label: "CityMpg",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "ptHwyMpg",
+ fieldId: "ptHwyMpg",
+ type: "number",
+ multipleValues: false,
+ label: "HwyMpg",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "warranty",
+ fieldId: "warranty",
+ type: "object",
+ label: "Warranty",
+ renderer: {
+ name: "object-accordion"
+ },
+ settings: {
+ layout: [
+ ["fullWarrantyMiles", "fullWarrantyMonths", "powertrainWarrantyMiles"],
+ [
+ "powertrainWarrantyMonths",
+ "maintenanceWarrantyMiles",
+ "maintenanceWarrantyMonths"
+ ],
+ ["roadsideWarrantyMiles", "roadsideWarrantyMonths"],
+ ["corrosionWarrantyMiles", "corrosionWarrantyMonths"]
+ ],
+ fields: [
+ {
+ id: "fullWarrantyMiles",
+ fieldId: "fullWarrantyMiles",
+ type: "text",
+ multipleValues: false,
+ label: "FullWarrantyMiles",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "fullWarrantyMonths",
+ fieldId: "fullWarrantyMonths",
+ type: "text",
+ multipleValues: false,
+ label: "FullWarrantyMonths",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "powertrainWarrantyMiles",
+ fieldId: "powertrainWarrantyMiles",
+ type: "text",
+ multipleValues: false,
+ label: "PowertrainWarrantyMiles",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "powertrainWarrantyMonths",
+ fieldId: "powertrainWarrantyMonths",
+ type: "text",
+ multipleValues: false,
+ label: "PowertrainWarrantyMonths",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "maintenanceWarrantyMiles",
+ fieldId: "maintenanceWarrantyMiles",
+ type: "text",
+ multipleValues: false,
+ label: "MaintenanceWarrantyMiles (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "maintenanceWarrantyMonths",
+ fieldId: "maintenanceWarrantyMonths",
+ type: "text",
+ multipleValues: false,
+ label: "MaintenanceWarrantyMonths (non-jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "roadsideWarrantyMiles",
+ fieldId: "roadsideWarrantyMiles",
+ type: "text",
+ multipleValues: false,
+ label: "RoadsideWarrantyMiles",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "roadsideWarrantyMonths",
+ fieldId: "roadsideWarrantyMonths",
+ type: "text",
+ multipleValues: false,
+ label: "RoadsideWarrantyMonths",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "corrosionWarrantyMiles",
+ fieldId: "corrosionWarrantyMiles",
+ type: "text",
+ multipleValues: false,
+ label: "CorrosionWarrantyMiles",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "corrosionWarrantyMonths",
+ fieldId: "corrosionWarrantyMonths",
+ type: "text",
+ multipleValues: false,
+ label: "CorrosionWarrantyMonths",
+ renderer: {
+ name: "text-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "pricing",
+ fieldId: "pricing",
+ type: "object",
+ label: "Pricing",
+ renderer: {
+ name: "object-accordion"
+ },
+ settings: {
+ layout: [
+ ["pInvoice", "pMsrp", "pDestination"],
+ ["pEffectiveOn", "pTargetPrice", "pTotalTargetPrice"],
+ ["pAverageSalesTaxAndFees", "pGasGuzzlerTax", "pTargetRebate"],
+ ["pNewMonthly", "pCpoPrice", "pExcellentRetailValue"],
+ ["pMsrpLabel", "pMsrpValue", "pFmpOrCrvLabel"],
+ ["pFmpOrCrvValue"]
+ ],
+ fields: [
+ {
+ id: "pInvoice",
+ fieldId: "pInvoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "pMsrp",
+ fieldId: "pMsrp",
+ type: "number",
+ multipleValues: false,
+ label: "MSRP",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "pDestination",
+ fieldId: "pDestination",
+ type: "number",
+ multipleValues: false,
+ label: "Destination",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "pEffectiveOn",
+ fieldId: "pEffectiveOn",
+ type: "text",
+ multipleValues: false,
+ label: "PriceEffectiveOn",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "pTargetPrice",
+ fieldId: "pTargetPrice",
+ type: "number",
+ multipleValues: false,
+ label: "Target Price(Non-Jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "pTotalTargetPrice",
+ fieldId: "pTotalTargetPrice",
+ type: "number",
+ multipleValues: false,
+ label: "Total TargetPrice(Non-Jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "pAverageSalesTaxAndFees",
+ fieldId: "pAverageSalesTaxAndFees",
+ type: "number",
+ multipleValues: false,
+ label: "AverageSalesTaxAndFees(Non-Jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "pGasGuzzlerTax",
+ fieldId: "pGasGuzzlerTax",
+ type: "number",
+ multipleValues: false,
+ label: "GasGuzzlerTax(Non-Jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "pTargetRebate",
+ fieldId: "pTargetRebate",
+ type: "number",
+ multipleValues: false,
+ label: "Target Rebate(Non-Jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "pNewMonthly",
+ fieldId: "pNewMonthly",
+ type: "number",
+ multipleValues: false,
+ label: "NewMonthly(Non-Jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "pCpoPrice",
+ fieldId: "pCpoPrice",
+ type: "text",
+ multipleValues: false,
+ label: "CpoPrice(Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "pExcellentRetailValue",
+ fieldId: "pExcellentRetailValue",
+ type: "number",
+ multipleValues: false,
+ label: "ExcellentRetailValue(Non-Jato)",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "pMsrpLabel",
+ fieldId: "pMsrpLabel",
+ type: "text",
+ multipleValues: false,
+ label: "MsrpLabel(Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "pMsrpValue",
+ fieldId: "pMsrpValue",
+ type: "text",
+ multipleValues: false,
+ label: "MsrpValue(Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "pFmpOrCrvLabel",
+ fieldId: "pFmpOrCrvLabel",
+ type: "text",
+ multipleValues: false,
+ label: "FmpOrCrvLabel(Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "pFmpOrCrvValue",
+ fieldId: "pFmpOrCrvValue",
+ type: "text",
+ multipleValues: false,
+ label: "FmpOrCrvValue(Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "safetyRatings",
+ fieldId: "safetyRatings",
+ type: "object",
+ label: "SafetyRatings",
+ renderer: {
+ name: "object-accordion"
+ },
+ settings: {
+ layout: [
+ ["nhtsaRatingOverall", "nhtsaRatingRollover", "nhtsaRatingFrontDriver"],
+ [
+ "nhtsaRatingFrontPassenger",
+ "nhtsaRatingFrontSide",
+ "nhtsaRatingRearSide"
+ ],
+ ["iihsFrontModerateOverlap", "iihsOverallSideCrash", "iihsBestPick"],
+ ["iihsRearCrash", "iihsRoofStrength", "iihsFrontSmallOverlap"]
+ ],
+ fields: [
+ {
+ id: "nhtsaRatingOverall",
+ fieldId: "nhtsaRatingOverall",
+ type: "text",
+ multipleValues: false,
+ label: "NhtsaRatingOverall",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "nhtsaRatingRollover",
+ fieldId: "nhtsaRatingRollover",
+ type: "text",
+ multipleValues: false,
+ label: "NhtsaRatingRollover",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "nhtsaRatingFrontDriver",
+ fieldId: "nhtsaRatingFrontDriver",
+ type: "text",
+ multipleValues: false,
+ label: "NhtsaRatingFrontDriver (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "nhtsaRatingFrontPassenger",
+ fieldId: "nhtsaRatingFrontPassenger",
+ type: "text",
+ multipleValues: false,
+ label: "NhtsaRatingFrontPassenger (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "nhtsaRatingFrontSide",
+ fieldId: "nhtsaRatingFrontSide",
+ type: "text",
+ multipleValues: false,
+ label: "NhtsaRatingFrontSide (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "nhtsaRatingRearSide",
+ fieldId: "nhtsaRatingRearSide",
+ type: "text",
+ multipleValues: false,
+ label: "NhtsaRatingRearSide (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "iihsFrontModerateOverlap",
+ fieldId: "iihsFrontModerateOverlap",
+ type: "text",
+ multipleValues: false,
+ label: "IihsFrontModerateOverlap (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "iihsOverallSideCrash",
+ fieldId: "iihsOverallSideCrash",
+ type: "text",
+ multipleValues: false,
+ label: "IihsOverallSideCrash (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "iihsBestPick",
+ fieldId: "iihsBestPick",
+ type: "text",
+ multipleValues: false,
+ label: "IihsBestPick (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "iihsRearCrash",
+ fieldId: "iihsRearCrash",
+ type: "text",
+ multipleValues: false,
+ label: "IihsRearCrash (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "iihsRoofStrength",
+ fieldId: "iihsRoofStrength",
+ type: "text",
+ multipleValues: false,
+ label: "IihsRoofStrength (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "iihsFrontSmallOverlap",
+ fieldId: "iihsFrontSmallOverlap",
+ type: "text",
+ multipleValues: false,
+ label: "IihsFrontSmallOverlap (Non-Jato)",
+ renderer: {
+ name: "text-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "ownershipCosts",
+ fieldId: "ownershipCosts",
+ type: "object",
+ label: "Ownership Costs (Non-Jato)",
+ renderer: {
+ name: "object-accordion"
+ },
+ settings: {
+ layout: [
+ ["depreciationTotal", "financingTotal", "insuranceTotal"],
+ ["stateFeesTotal", "fuelTotal", "maintenanceTotal"],
+ ["repairsTotal", "total5YearOcCost", "total5YearOcCostLessHybrid"],
+ ["similarVehicles", "difference5YearCost", "hybridTax"],
+ ["valueRating"]
+ ],
+ fields: [
+ {
+ id: "depreciationTotal",
+ fieldId: "depreciationTotal",
+ type: "text",
+ multipleValues: false,
+ label: "DepreciationTotal",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "financingTotal",
+ fieldId: "financingTotal",
+ type: "text",
+ multipleValues: false,
+ label: "FinancingTotal",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "insuranceTotal",
+ fieldId: "insuranceTotal",
+ type: "text",
+ multipleValues: false,
+ label: "InsuranceTotal",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "stateFeesTotal",
+ fieldId: "stateFeesTotal",
+ type: "text",
+ multipleValues: false,
+ label: "StateFeesTotal",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "fuelTotal",
+ fieldId: "fuelTotal",
+ type: "text",
+ multipleValues: false,
+ label: "FuelTotal",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "maintenanceTotal",
+ fieldId: "maintenanceTotal",
+ type: "text",
+ multipleValues: false,
+ label: "MaintenanceTotal",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "repairsTotal",
+ fieldId: "repairsTotal",
+ type: "text",
+ multipleValues: false,
+ label: "RepairsTotal",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "total5YearOcCost",
+ fieldId: "total5YearOcCost",
+ type: "text",
+ multipleValues: false,
+ label: "Total5YearOcCost",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "total5YearOcCostLessHybrid",
+ fieldId: "total5YearOcCostLessHybrid",
+ type: "number",
+ multipleValues: false,
+ label: "Total5YearOcCostLessHybrid",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "similarVehicles",
+ fieldId: "similarVehicles",
+ type: "number",
+ multipleValues: false,
+ label: "SimilarVehicles",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "difference5YearCost",
+ fieldId: "difference5YearCost",
+ type: "number",
+ multipleValues: false,
+ label: "Difference5YearCost",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "hybridTax",
+ fieldId: "hybridTax",
+ type: "text",
+ multipleValues: false,
+ label: "HybridTax",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "valueRating",
+ fieldId: "valueRating",
+ type: "text",
+ multipleValues: false,
+ label: "ValueRating",
+ renderer: {
+ name: "text-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "cpoComparison",
+ fieldId: "cpoComparison",
+ type: "object",
+ label: "CPOComparison (Non-Jato)",
+ renderer: {
+ name: "object-accordion"
+ },
+ settings: {
+ layout: [
+ ["usedMonthly", "cpoMonthly", "usedMaintenanceRepairs"],
+ ["cpoMaintenanceRepairs", "usedTotalMonthly", "cpoTotalMonthly"],
+ ["cpoYear", "cpoMake", "modelName"],
+ ["usedCarTrim", "cpoPrice", "usedCarPrice"],
+ ["vehicleRating"]
+ ],
+ fields: [
+ {
+ id: "usedMonthly",
+ fieldId: "usedMonthly",
+ type: "number",
+ multipleValues: false,
+ label: "UsedMonthly",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "cpoMonthly",
+ fieldId: "cpoMonthly",
+ type: "number",
+ multipleValues: false,
+ label: "CPOMonthly",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "usedMaintenanceRepairs",
+ fieldId: "usedMaintenanceRepairs",
+ type: "number",
+ multipleValues: false,
+ label: "UsedMaintenanceRepairs",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "cpoMaintenanceRepairs",
+ fieldId: "cpoMaintenanceRepairs",
+ type: "number",
+ multipleValues: false,
+ label: "CPOMaintenanceRepairs",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "usedTotalMonthly",
+ fieldId: "usedTotalMonthly",
+ type: "number",
+ multipleValues: false,
+ label: "UsedTotalMonthly",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "cpoTotalMonthly",
+ fieldId: "cpoTotalMonthly",
+ type: "number",
+ multipleValues: false,
+ label: "CPOTotalMonthly",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "cpoYear",
+ fieldId: "cpoYear",
+ type: "number",
+ multipleValues: false,
+ label: "Year",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "cpoMake",
+ fieldId: "cpoMake",
+ type: "text",
+ multipleValues: false,
+ label: "Make",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "modelName",
+ fieldId: "modelName",
+ type: "text",
+ multipleValues: false,
+ label: "ModelName",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "usedCarTrim",
+ fieldId: "usedCarTrim",
+ type: "text",
+ multipleValues: false,
+ label: "UsedCarTrim",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoPrice",
+ fieldId: "cpoPrice",
+ type: "text",
+ multipleValues: false,
+ label: "CPOPrice",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "usedCarPrice",
+ fieldId: "usedCarPrice",
+ type: "number",
+ multipleValues: false,
+ label: "UsedCarPrice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "vehicleRating",
+ fieldId: "vehicleRating",
+ type: "text",
+ multipleValues: false,
+ label: "VehicleRating",
+ renderer: {
+ name: "text-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "historicalMotortrendScores",
+ fieldId: "historicalMotortrendScores",
+ type: "object",
+ label: "HistoricalMotortrendScores (Non-Jato)",
+ renderer: {
+ name: "object-accordion"
+ },
+ settings: {
+ layout: [
+ ["vrPerformance", "toolTipPerformance"],
+ ["overallScore", "toolTipOverallScore"],
+ ["fuelEconomy", "toolTipFuelEconomy"],
+ ["techInnovation", "toolTipTechInnovation"],
+ ["vrValue", "toolTipValue"]
+ ],
+ fields: [
+ {
+ id: "vrPerformance",
+ fieldId: "vrPerformance",
+ type: "number",
+ multipleValues: false,
+ label: "Performance",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "toolTipPerformance",
+ fieldId: "toolTipPerformance",
+ type: "text",
+ multipleValues: false,
+ label: "ToolTipPerformance",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "overallScore",
+ fieldId: "overallScore",
+ type: "number",
+ multipleValues: false,
+ label: "OverallScore",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "toolTipOverallScore",
+ fieldId: "toolTipOverallScore",
+ type: "text",
+ multipleValues: false,
+ label: "ToolTipOverallScore",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "fuelEconomy",
+ fieldId: "fuelEconomy",
+ type: "number",
+ multipleValues: false,
+ label: "fuelEconomy",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "toolTipFuelEconomy",
+ fieldId: "toolTipFuelEconomy",
+ type: "text",
+ multipleValues: false,
+ label: "toolTipFuelEconomy",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "techInnovation",
+ fieldId: "techInnovation",
+ type: "number",
+ multipleValues: false,
+ label: "techInnovation",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "toolTipTechInnovation",
+ fieldId: "toolTipTechInnovation",
+ type: "text",
+ multipleValues: false,
+ label: "toolTipTechInnovation",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "vrValue",
+ fieldId: "vrValue",
+ type: "number",
+ multipleValues: false,
+ label: "Value",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "toolTipValue",
+ fieldId: "toolTipValue",
+ type: "text",
+ multipleValues: false,
+ label: "toolTipValue",
+ renderer: {
+ name: "text-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "recalls",
+ fieldId: "recalls",
+ multipleValues: true,
+ label: "Recalls (Non-Jato)",
+ renderer: {
+ name: "objects-accordion"
+ },
+ type: "object",
+ settings: {
+ layout: [
+ ["recallId", "recallsCampNumber"],
+ ["makeText", "modelText", "yearText", "compName"],
+ ["mfgText", "recallsPotaff", "rcDate"],
+ ["descDefect", "consequenceDefect", "correctiveAction"]
+ ],
+ fields: [
+ {
+ id: "recallId",
+ fieldId: "recallId",
+ type: "number",
+ multipleValues: false,
+ label: "RecallID",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "recallsCampNumber",
+ fieldId: "recallsCampNumber",
+ type: "text",
+ multipleValues: false,
+ label: "Campno",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "makeText",
+ fieldId: "makeText",
+ type: "text",
+ multipleValues: false,
+ label: "Maketxt",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "modelText",
+ fieldId: "modelText",
+ type: "text",
+ multipleValues: false,
+ label: "Modeltxt",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "yearText",
+ fieldId: "yearText",
+ type: "number",
+ multipleValues: false,
+ label: "Yeartxt",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "compName",
+ fieldId: "compName",
+ type: "text",
+ multipleValues: false,
+ label: "Compname",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "mfgText",
+ fieldId: "mfgText",
+ type: "text",
+ multipleValues: false,
+ label: "Mfgtxt",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "recallsPotaff",
+ fieldId: "recallsPotaff",
+ type: "number",
+ multipleValues: false,
+ label: "Potaff",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "rcDate",
+ fieldId: "rcDate",
+ type: "text",
+ multipleValues: false,
+ label: "Rcdate",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "descDefect",
+ fieldId: "descDefect",
+ type: "text",
+ multipleValues: false,
+ label: "DescDefect",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "consequenceDefect",
+ fieldId: "consequenceDefect",
+ type: "text",
+ multipleValues: false,
+ label: "ConsequenceDefect",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "correctiveAction",
+ fieldId: "correctiveAction",
+ type: "text",
+ multipleValues: false,
+ label: "CorrectiveAction",
+ renderer: {
+ name: "text-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "carsRebates",
+ fieldId: "carsRebates",
+ multipleValues: true,
+ label: "Rebates (Non-Jato)",
+ renderer: {
+ name: "objects-accordion"
+ },
+ type: "object",
+ settings: {
+ layout: [
+ ["rebatesLow", "rebatesHigh", "rebateText"],
+ ["nationallyAvailable", "rebatesDescription", "rebatesExpDate"]
+ ],
+ fields: [
+ {
+ id: "rebatesExpDate",
+ fieldId: "rebatesExpDate",
+ type: "text",
+ multipleValues: false,
+ label: "ExpDate",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "rebatesLow",
+ fieldId: "rebatesLow",
+ type: "number",
+ multipleValues: false,
+ label: "Low",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "rebatesHigh",
+ fieldId: "rebatesHigh",
+ type: "number",
+ multipleValues: false,
+ label: "High",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "rebateText",
+ fieldId: "rebateText",
+ type: "text",
+ multipleValues: false,
+ label: "RebateText",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "nationallyAvailable",
+ fieldId: "nationallyAvailable",
+ type: "number",
+ multipleValues: false,
+ label: "Nationally Available",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "rebatesDescription",
+ fieldId: "rebatesDescription",
+ type: "text",
+ multipleValues: false,
+ label: "Description",
+ renderer: {
+ name: "text-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "cpoProgram",
+ fieldId: "cpoProgram",
+ type: "object",
+ label: "CpoProgram (Non-Jato)",
+ renderer: {
+ name: "object-accordion"
+ },
+ settings: {
+ layout: [
+ ["cpoName", "cpoInspectionPoint", "cpoInspectionScore"],
+ ["cpoAgeMileage", "cpoWarranty", "cpoWarrantyDeductible"],
+ ["cpoWarrantyBbnc", "cpoWarrantyTransferable", "cpoWarrantyExtended"],
+ ["cpoRoadside", "cpoReturnExchange", "cpoFinancing"],
+ ["cpoLease", "cpoWebsite", "cpoCustomerServiceNumber"],
+ ["cpoParticipation", "cpoHistoryReport", "cpoAdditionalBenefits"],
+ ["cpoProgramOverview"]
+ ],
+ fields: [
+ {
+ id: "cpoName",
+ fieldId: "cpoName",
+ type: "text",
+ multipleValues: false,
+ label: "CpoName",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoInspectionPoint",
+ fieldId: "cpoInspectionPoint",
+ type: "text",
+ multipleValues: false,
+ label: "CPOInspectionPoint",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoInspectionScore",
+ fieldId: "cpoInspectionScore",
+ type: "number",
+ multipleValues: false,
+ label: "CPOInspectionScore",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "cpoAgeMileage",
+ fieldId: "cpoAgeMileage",
+ type: "text",
+ multipleValues: false,
+ label: "CPOAgeMileage",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoWarranty",
+ fieldId: "cpoWarranty",
+ type: "text",
+ multipleValues: false,
+ label: "CPOWarranty",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoWarrantyDeductible",
+ fieldId: "cpoWarrantyDeductible",
+ type: "text",
+ multipleValues: false,
+ label: "CPOWarrantyDeductible",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoWarrantyBbnc",
+ fieldId: "cpoWarrantyBbnc",
+ type: "text",
+ multipleValues: false,
+ label: "CPOWarrantyBbnc",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoWarrantyTransferable",
+ fieldId: "cpoWarrantyTransferable",
+ type: "text",
+ multipleValues: false,
+ label: "CPOWarrantyTransferable",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoWarrantyExtended",
+ fieldId: "cpoWarrantyExtended",
+ type: "text",
+ multipleValues: false,
+ label: "CPOWarrantyExtended",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoRoadside",
+ fieldId: "cpoRoadside",
+ type: "text",
+ multipleValues: false,
+ label: "CPORoadside",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoReturnExchange",
+ fieldId: "cpoReturnExchange",
+ type: "text",
+ multipleValues: false,
+ label: "CPOReturnExchange",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoFinancing",
+ fieldId: "cpoFinancing",
+ type: "text",
+ multipleValues: false,
+ label: "CPOFinancing",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoLease",
+ fieldId: "cpoLease",
+ type: "text",
+ multipleValues: false,
+ label: "CPOLease",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoWebsite",
+ fieldId: "cpoWebsite",
+ type: "text",
+ multipleValues: false,
+ label: "CPOWebsite",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoCustomerServiceNumber",
+ fieldId: "cpoCustomerServiceNumber",
+ type: "text",
+ multipleValues: false,
+ label: "CPOCustomerServiceNumber",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoParticipation",
+ fieldId: "cpoParticipation",
+ type: "text",
+ multipleValues: false,
+ label: "CPOParticipation",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoHistoryReport",
+ fieldId: "cpoHistoryReport",
+ type: "number",
+ multipleValues: false,
+ label: "CPOHistoryReport",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "cpoAdditionalBenefits",
+ fieldId: "cpoAdditionalBenefits",
+ type: "text",
+ multipleValues: false,
+ label: "CPOAdditionalBenefits",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "cpoProgramOverview",
+ fieldId: "cpoProgramOverview",
+ type: "text",
+ multipleValues: false,
+ label: "CPOProgramOverview",
+ renderer: {
+ name: "text-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "realmpg",
+ fieldId: "realmpg",
+ type: "object",
+ label: "RealMpg (Non-Jato)",
+ renderer: {
+ name: "object-accordion"
+ },
+ settings: {
+ layout: [
+ ["realmpgAverageMpg", "realmpgAverageMpgCity", "realmpgAverageMpgHwy"]
+ ],
+ fields: [
+ {
+ id: "realmpgAverageMpg",
+ fieldId: "realmpgAverageMpg",
+ type: "number",
+ multipleValues: false,
+ label: "RealmpgAverageMpg",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "realmpgAverageMpgCity",
+ fieldId: "realmpgAverageMpgCity",
+ type: "number",
+ multipleValues: false,
+ label: "RealmpgAverageMpgCity",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "realmpgAverageMpgHwy",
+ fieldId: "realmpgAverageMpgHwy",
+ type: "number",
+ multipleValues: false,
+ label: "RealmpgAverageMpgHwy",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "hubs",
+ fieldId: "hubs",
+ multipleValues: true,
+ label: "Hubs (Non-Jato)",
+ renderer: {
+ name: "objects-accordion"
+ },
+ type: "object",
+ settings: {
+ layout: [["hubsImage", "makeModelHub", "hubsName", "hubsText"]],
+ fields: [
+ {
+ id: "hubsImage",
+ fieldId: "hubsImage",
+ type: "text",
+ multipleValues: false,
+ label: "Image",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "makeModelHub",
+ fieldId: "makeModelHub",
+ type: "number",
+ multipleValues: false,
+ label: "MakeModelHub",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "hubsName",
+ fieldId: "hubsName",
+ type: "text",
+ multipleValues: false,
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "hubsText",
+ fieldId: "hubsText",
+ type: "text",
+ multipleValues: false,
+ label: "Text",
+ renderer: {
+ name: "text-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "seoText",
+ fieldId: "seoText",
+ type: "object",
+ label: "Seo",
+ renderer: {
+ name: "object-accordion"
+ },
+ settings: {
+ layout: [["seoType", "seoTitle"], ["seoContent"]],
+ fields: [
+ {
+ id: "seoType",
+ fieldId: "seoType",
+ multipleValues: false,
+ type: "text",
+ label: "Type",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "seoTitle",
+ fieldId: "seoTitle",
+ multipleValues: false,
+ type: "text",
+ label: "Title",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "seoContent",
+ fieldId: "seoContent",
+ multipleValues: false,
+ type: "text",
+ label: "Content",
+ renderer: {
+ name: "text-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "images",
+ fieldId: "images",
+ multipleValues: true,
+ label: "Images (Non-Jato)",
+ renderer: {
+ name: "objects-accordion"
+ },
+ type: "object",
+ settings: {
+ layout: [["imageUrl"], ["imageAngle", "imageType", "imageOrder"]],
+ fields: [
+ {
+ id: "imageUrl",
+ fieldId: "imageUrl",
+ type: "text",
+ label: "Image Url",
+ renderer: {
+ name: "text-input"
+ },
+ helpText: "This is a Required Field."
+ },
+ {
+ id: "imageAngle",
+ fieldId: "imageAngle",
+ type: "text",
+ helpText: "can be front or rear...etc",
+ label: "Image Angle",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "imageType",
+ fieldId: "imageType",
+ type: "text",
+ helpText: "can be exterior or interior",
+ label: "Image Type",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "imageOrder",
+ fieldId: "imageOrder",
+ type: "number",
+ helpText: "can be use for display order",
+ label: "Image Order",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "featuresIntellicar",
+ fieldId: "featuresIntellicar",
+ type: "object",
+ label: "Features(Non-Jato)",
+ multipleValues: false,
+ renderer: {
+ name: "object-accordion"
+ },
+ settings: {
+ layout: [
+ ["packageCategory"],
+ ["engineCategory"],
+ ["transmissionCategory"],
+ ["exteriorColorCategory"],
+ ["interiorColorCategory"],
+ ["topColorCategory"],
+ ["bodyCategory"],
+ ["brakesCategory"],
+ ["convenienceCategory"],
+ ["driveCategory"],
+ ["engineeringCategory"],
+ ["exteriorCategory"],
+ ["interiorCategory"],
+ ["lightingCategory"],
+ ["mandatoryCategory"],
+ ["mirrorsCategory"],
+ ["noteCategory"],
+ ["otherCategory"],
+ ["paintCategory"],
+ ["safetyCategory"],
+ ["seatsCategory"],
+ ["soundCategory"],
+ ["specialFeesCreditsOptionsCategory"],
+ ["steeringCategory"],
+ ["suspensionCategory"],
+ ["tiresCategory"],
+ ["towingCategory"],
+ ["truckBedsCategory"],
+ ["wheelsCategory"]
+ ],
+ fields: [
+ {
+ id: "packageCategory",
+ fieldId: "packageCategory",
+ type: "object",
+ label: "PACKAGE",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "engineCategory",
+ fieldId: "engineCategory",
+ type: "object",
+ label: "ENGINE",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "SequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "transmissionCategory",
+ fieldId: "transmissionCategory",
+ type: "object",
+ label: "TRANSMISSION",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "exteriorColorCategory",
+ fieldId: "exteriorColorCategory",
+ type: "object",
+ label: "EXTERIOR COLOR",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "interiorColorCategory",
+ fieldId: "interiorColorCategory",
+ type: "object",
+ label: "INTERIOR COLOR",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "topColorCategory",
+ fieldId: "topColorCategory",
+ type: "object",
+ label: "TOP COLOR",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "bodyCategory",
+ fieldId: "bodyCategory",
+ type: "object",
+ label: "BODY",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "brakesCategory",
+ fieldId: "brakesCategory",
+ type: "object",
+ label: "BRAKES",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "convenienceCategory",
+ fieldId: "convenienceCategory",
+ type: "object",
+ label: "CONVENIENCE",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "driveCategory",
+ fieldId: "driveCategory",
+ type: "object",
+ label: "DRIVE",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "engineeringCategory",
+ fieldId: "engineeringCategory",
+ type: "object",
+ label: "ENGINEERING",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "exteriorCategory",
+ fieldId: "exteriorCategory",
+ type: "object",
+ label: "EXTERIOR",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "interiorCategory",
+ fieldId: "interiorCategory",
+ type: "object",
+ label: "INTERIOR",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "lightingCategory",
+ fieldId: "lightingCategory",
+ type: "object",
+ label: "LIGHTING",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "mandatoryCategory",
+ fieldId: "mandatoryCategory",
+ type: "object",
+ label: "MANDATORY",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "mirrorsCategory",
+ fieldId: "mirrorsCategory",
+ type: "object",
+ label: "MIRRORS",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "noteCategory",
+ fieldId: "noteCategory",
+ type: "object",
+ label: "NOTE",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "otherCategory",
+ fieldId: "otherCategory",
+ type: "object",
+ label: "OTHER",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "paintCategory",
+ fieldId: "paintCategory",
+ type: "object",
+ label: "PAINT",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "safetyCategory",
+ fieldId: "safetyCategory",
+ type: "object",
+ label: "SAFETY",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "seatsCategory",
+ fieldId: "seatsCategory",
+ type: "object",
+ label: "SEATS",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "soundCategory",
+ fieldId: "soundCategory",
+ type: "object",
+ label: "SOUND",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "specialFeesCreditsOptionsCategory",
+ fieldId: "specialFeesCreditsOptionsCategory",
+ type: "object",
+ label: "SPECIAL FEES CREDITS OPTIONS",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "steeringCategory",
+ fieldId: "steeringCategory",
+ type: "object",
+ label: "STEERING",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "suspensionCategory",
+ fieldId: "suspensionCategory",
+ type: "object",
+ label: "SUSPENSION",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "tiresCategory",
+ fieldId: "tiresCategory",
+ type: "object",
+ label: "TIRES",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "towingCategory",
+ fieldId: "towingCategory",
+ type: "object",
+ label: "TOWING",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "truckBedsCategory",
+ fieldId: "truckBedsCategory",
+ type: "object",
+ label: "TRUCK BEDS",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "wheelsCategory",
+ fieldId: "wheelsCategory",
+ type: "object",
+ label: "WHEELS",
+ multipleValues: true,
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["name", "availability", "invoice"],
+ ["includesNote", "retail"],
+ ["sequenceNmb", "categorySequenceNmb"]
+ ],
+ fields: [
+ {
+ id: "name",
+ fieldId: "name",
+ type: "text",
+ label: "Name",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "availability",
+ fieldId: "availability",
+ type: "text",
+ label: "Availability",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "invoice",
+ fieldId: "invoice",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "includesNote",
+ fieldId: "includesNote",
+ type: "text",
+ label: "IncludesNote",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "retail",
+ fieldId: "retail",
+ type: "number",
+ multipleValues: false,
+ label: "Retail",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "sequenceNmb",
+ fieldId: "sequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "Invoice",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "categorySequenceNmb",
+ fieldId: "categorySequenceNmb",
+ type: "number",
+ multipleValues: false,
+ label: "CategorySequenceNmb",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "vehicleRankingClass",
+ fieldId: "vehicleRankingClass",
+ type: "object",
+ multipleValues: true,
+ label: "Motortrend Scores (Non-Jato)",
+ renderer: {
+ name: "objects-accordion"
+ },
+ settings: {
+ layout: [
+ ["classTitle", "classSlugRedirect", "classPosition"],
+ ["rankClass", "slugClassTitle", "associatedBody"],
+ ["vrcSubclass", "subclassTitle", "vrcSubclassPosition"],
+ ["vrPerformance", "toolTipPerformance"],
+ ["overallScore", "toolTipOverallScore"],
+ ["fuelEconomy", "toolTipFuelEconomy"],
+ ["techInnovation", "toolTipTechInnovation"],
+ ["vrValue", "toolTipValue"],
+ ["vrcClassThumbnailUrl", "vrcClassThumbnailRolloverUrl"],
+ ["vrcIsMakeBodyStyleVehicleShow", "vrcIsRankShow", "vrcIsVehicleShow"],
+ ["vrcRankWithinSubclass", "vrcRankInSubclassText"],
+ ["vrcTopRankingTrophyImage"]
+ ],
+ fields: [
+ {
+ id: "classTitle",
+ fieldId: "classTitle",
+ type: "text",
+ label: "ClassTitle",
+ renderer: {
+ name: "text-input"
+ },
+ helpText: "This is a Required Field."
+ },
+ {
+ id: "classSlugRedirect",
+ fieldId: "classSlugRedirect",
+ type: "text",
+ label: "ClassSlugRedirect",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "associatedBody",
+ fieldId: "associatedBody",
+ type: "number",
+ label: "AssociatedBody",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "classPosition",
+ fieldId: "classPosition",
+ type: "number",
+ label: "ClassPosition",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "rankClass",
+ fieldId: "rankClass",
+ type: "text",
+ label: "RankClass",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "slugClassTitle",
+ fieldId: "slugClassTitle",
+ type: "text",
+ label: "SlugClassTitle",
+ renderer: {
+ name: "text-input"
+ },
+ helpText: "This is a Required Field."
+ },
+ {
+ id: "subclassTitle",
+ fieldId: "subclassTitle",
+ type: "text",
+ label: "SubclassTitle",
+ renderer: {
+ name: "text-input"
+ },
+ helpText: "This is a Required Field."
+ },
+ {
+ id: "vrPerformance",
+ fieldId: "vrPerformance",
+ type: "number",
+ label: "Performance",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "toolTipPerformance",
+ fieldId: "toolTipPerformance",
+ type: "text",
+ label: "ToolTipPerformance",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "overallScore",
+ fieldId: "overallScore",
+ type: "number",
+ label: "OverallScore",
+ renderer: {
+ name: "number-input"
+ },
+ helpText: "This is a Required Field."
+ },
+ {
+ id: "toolTipOverallScore",
+ fieldId: "toolTipOverallScore",
+ type: "text",
+ label: "ToolTipOverallScore",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "fuelEconomy",
+ fieldId: "fuelEconomy",
+ type: "number",
+ label: "fuelEconomy",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "toolTipFuelEconomy",
+ fieldId: "toolTipFuelEconomy",
+ type: "text",
+ label: "toolTipFuelEconomy",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "techInnovation",
+ fieldId: "techInnovation",
+ type: "number",
+ label: "techInnovation",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "toolTipTechInnovation",
+ fieldId: "toolTipTechInnovation",
+ type: "text",
+ label: "toolTipTechInnovation",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "vrValue",
+ fieldId: "vrValue",
+ type: "number",
+ label: "Value",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "toolTipValue",
+ fieldId: "toolTipValue",
+ type: "text",
+ label: "toolTipValue",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "vrcClassThumbnailRolloverUrl",
+ fieldId: "classThumbnailRolloverUrl",
+ type: "text",
+ label: "Class ThumbnailRolloverUrl",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "vrcClassThumbnailUrl",
+ fieldId: "classThumbnailUrl",
+ type: "text",
+ label: "Class ThumbnailUrl",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "vrcIsMakeBodyStyleVehicleShow",
+ fieldId: "isMakeBodyStyleVehicleShow",
+ type: "number",
+ label: "Is MakeBodyStyle VehicleShow",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "vrcIsRankShow",
+ fieldId: "isRankShow",
+ type: "number",
+ label: "Is RankShow",
+ renderer: {
+ name: "number-input"
+ },
+ helpText: "This is a Required Field."
+ },
+ {
+ id: "vrcIsVehicleShow",
+ fieldId: "isVehicleShow",
+ type: "number",
+ label: "Is VehicleShow",
+ renderer: {
+ name: "number-input"
+ },
+ helpText: "This is a Required Field."
+ },
+ {
+ id: "vrcRankInSubclassText",
+ fieldId: "rankInSubclassText",
+ type: "text",
+ label: "RankIn SubclassText",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "vrcRankWithinSubclass",
+ fieldId: "rankWithinSubclass",
+ type: "number",
+ label: "RankWithin Subclass",
+ renderer: {
+ name: "number-input"
+ },
+ helpText: "This is a Required Field."
+ },
+ {
+ id: "vrcSubclass",
+ fieldId: "subclass",
+ type: "text",
+ label: "subclass",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "vrcSubclassPosition",
+ fieldId: "subclassPosition",
+ type: "number",
+ label: "Subclass Position",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "vrcTopRankingTrophyImage",
+ fieldId: "topRankingTrophyImage",
+ type: "text",
+ label: "TopRanking Trophy Image",
+ renderer: {
+ name: "text-input"
+ }
+ }
+ ]
+ }
+ },
+ {
+ id: "carMatchCustomRankings",
+ fieldId: "carMatchCustomRankings",
+ multipleValues: true,
+ label: "carMatchCustomRankings (Non-Jato)",
+ renderer: {
+ name: "objects-accordion"
+ },
+ type: "object",
+ settings: {
+ layout: [
+ ["carMatchBody", "carMatchSeats", "carMatchLuxury"],
+ ["carMatchGreen", "carMatchOffroad", "carMatchBudget"],
+ ["carMatchPriority", "carMatchEstimated", "totalPercentage"],
+ ["seatingCapacity", "carMatchHorsepower", "winnerDescription"],
+ ["priceRange", "carMatchMpg", "carMatchUUID"],
+ ["rankWithinSubclass", "carMatchSubClassTitle"]
+ ],
+ fields: [
+ {
+ id: "carMatchBody",
+ fieldId: "carMatchBody",
+ type: "text",
+ multipleValues: false,
+ label: "Body",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "carMatchSeats",
+ fieldId: "carMatchSeats",
+ type: "text",
+ multipleValues: false,
+ label: "Seats",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "carMatchLuxury",
+ fieldId: "carMatchLuxury",
+ type: "text",
+ multipleValues: false,
+ label: "Luxury",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "carMatchGreen",
+ fieldId: "carMatchGreen",
+ type: "text",
+ multipleValues: false,
+ label: "Green",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "carMatchOffroad",
+ fieldId: "carMatchOffroad",
+ type: "text",
+ multipleValues: false,
+ label: "Offroad",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "carMatchBudget",
+ fieldId: "carMatchBudget",
+ type: "text",
+ multipleValues: false,
+ label: "Budget",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "totalPercentage",
+ fieldId: "totalPercentage",
+ type: "number",
+ multipleValues: false,
+ label: "TotalPercentage",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "carMatchPriority",
+ fieldId: "carMatchPriority",
+ type: "number",
+ multipleValues: false,
+ label: "Priority",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "carMatchEstimated",
+ fieldId: "carMatchEstimated",
+ type: "number",
+ multipleValues: false,
+ label: "Estimated",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "priceRange",
+ fieldId: "priceRange",
+ type: "text",
+ multipleValues: false,
+ label: "PriceRange",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "carMatchMpg",
+ fieldId: "carMatchMpg",
+ type: "text",
+ multipleValues: false,
+ label: "Mpg",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "seatingCapacity",
+ fieldId: "seatingCapacity",
+ type: "text",
+ multipleValues: false,
+ label: "SeatingCapacity",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "carMatchHorsepower",
+ fieldId: "carMatchHorsepower",
+ type: "text",
+ multipleValues: false,
+ label: "horsepower",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "winnerDescription",
+ fieldId: "winnerDescription",
+ type: "text",
+ multipleValues: false,
+ label: "WinnerDescription",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "rankWithinSubclass",
+ fieldId: "rankWithinSubclass",
+ type: "number",
+ multipleValues: false,
+ label: "RankWithinSubclass",
+ renderer: {
+ name: "number-input"
+ }
+ },
+ {
+ id: "carMatchSubClassTitle",
+ fieldId: "carMatchSubClassTitle",
+ type: "text",
+ multipleValues: false,
+ label: "SubClassTitle",
+ renderer: {
+ name: "text-input"
+ }
+ },
+ {
+ id: "carMatchUUID",
+ fieldId: "carMatchUUID",
+ type: "number",
+ label: "UUID (PermaLinkID)",
+ renderer: {
+ name: "number-input"
+ }
+ }
+ ]
+ }
+ }
+ ],
+ layout: [
+ ["carsVehicle"],
+ ["bodyStyle", "carsMakePageShow", "carsPricePageShow"],
+ ["vehicleNmb", "carsUid", "trimName", "carsDiscontinued"],
+ ["carsMake", "carsModelName", "carsYear"],
+ ["slugMake", "slugModelName", "slugTrimName"],
+ ["baseVehicle", "releaseType", "newUsedBg"],
+ ["manufacturerCd", "slugBodystyle", "makeFeaturedImage"],
+ ["makeIcon", "makeDiscontinued", "oemUrl"],
+ ["carsSubcategory", "slugSubcategory", "mainCategory"],
+ ["slugMainCategory", "hybridElectricCategory", "slugHybridElectricCategory"],
+ ["dieselCategory", "slugDieselCategory", "updatedOn"],
+ ["vehicleStatus", "featuredImage", "priceRangeText"],
+ ["propertyType", "marketingImage", "priceRangeValue"],
+ ["ymmPriceRange", "priceRangeSlug", "latestYear"],
+ ["ymmLowestPriceRange", "ymmMaxPriceRange", "makeThumbnailUrl"],
+ ["combinedPrice", "carsCombinedEpaMpg", "horsePowerVal"],
+ ["slugMakeModel", "slugYearMakeModel", "retainedValue", "standardTires"],
+ ["bodyTypeOrder", "bodyType", "bodyTypeText", "slugBodyType"],
+ [
+ "secondaryBodyTypeOrder",
+ "secondaryBodyType",
+ "secondaryBodyTypeText",
+ "slugSecondaryBodyType"
+ ],
+ ["carsEditorialRating"],
+ ["specifications"],
+ ["powertrains"],
+ ["warranty"],
+ ["pricing"],
+ ["safetyRatings"],
+ ["ownershipCosts"],
+ ["cpoComparison"],
+ ["carsRebates"],
+ ["historicalMotortrendScores"],
+ ["recalls"],
+ ["cpoProgram"],
+ ["realmpg"],
+ ["hubs"],
+ ["featuresIntellicar"],
+ ["seoText"],
+ ["images"],
+ ["vehicleRankingClass"],
+ ["carMatchCustomRankings"]
+ ],
+ titleFieldId: "carsVehicle"
+ };
+};
diff --git a/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/types.ts b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/types.ts
new file mode 100644
index 00000000000..37a24aa42d2
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/tasks/MockDataManager/types.ts
@@ -0,0 +1,12 @@
+import { ITaskResponseDoneResultOutput } from "@webiny/tasks";
+
+export interface IMockDataManagerInput {
+ modelId: string;
+ amount: number;
+ seconds?: number;
+ amountOfTasks?: number;
+ amountOfRecords?: number;
+ overwrite?: boolean;
+}
+
+export type IMockDataManagerOutput = ITaskResponseDoneResultOutput;
diff --git a/packages/api-headless-cms-es-tasks/src/tasks/createMockDataCreatorTask.ts b/packages/api-headless-cms-es-tasks/src/tasks/createMockDataCreatorTask.ts
new file mode 100644
index 00000000000..9af62b64c2b
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/tasks/createMockDataCreatorTask.ts
@@ -0,0 +1,30 @@
+import { createTaskDefinition } from "@webiny/tasks";
+import { Context } from "~/types";
+import { IMockDataCreatorInput, IMockDataCreatorOutput } from "~/tasks/MockDataCreator/types";
+
+export const MOCK_DATA_CREATOR_TASK_ID = "mockDataCreator";
+
+export const createMockDataCreatorTask = () => {
+ return createTaskDefinition({
+ id: MOCK_DATA_CREATOR_TASK_ID,
+ title: "Mock Data Creator",
+ maxIterations: 500,
+ async run(params) {
+ const { MockDataCreator } = await import(
+ /* webpackChunkName: "MockDataCreator" */ "./MockDataCreator/MockDataCreator"
+ );
+
+ const carsMock = new MockDataCreator<
+ Context,
+ IMockDataCreatorInput,
+ IMockDataCreatorOutput
+ >();
+
+ try {
+ return await carsMock.execute(params);
+ } catch (ex) {
+ return params.response.error(ex);
+ }
+ }
+ });
+};
diff --git a/packages/api-headless-cms-es-tasks/src/tasks/createMockDataManagerTask.ts b/packages/api-headless-cms-es-tasks/src/tasks/createMockDataManagerTask.ts
new file mode 100644
index 00000000000..c40e1230f2f
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/tasks/createMockDataManagerTask.ts
@@ -0,0 +1,58 @@
+import { createTaskDefinition } from "@webiny/tasks";
+import { Context } from "~/types";
+import { IMockDataManagerInput, IMockDataManagerOutput } from "~/tasks/MockDataManager/types";
+import { CARS_MODEL_ID } from "~/tasks/MockDataManager/constants";
+import { enableIndexing } from "~/utils";
+
+export const MOCK_DATA_MANAGER_TASK_ID = "mockDataManager";
+
+export const createMockDataManagerTask = () => {
+ return createTaskDefinition({
+ id: MOCK_DATA_MANAGER_TASK_ID,
+ title: "Mock Data Manager",
+ maxIterations: 500,
+ async run(params) {
+ const { MockDataManager } = await import(
+ /* webpackChunkName: "MockDataManager" */ "./MockDataManager/MockDataManager"
+ );
+
+ const carsMock = new MockDataManager<
+ Context,
+ IMockDataManagerInput,
+ IMockDataManagerOutput
+ >();
+
+ try {
+ return await carsMock.execute({
+ ...params,
+ input: {
+ ...params.input,
+ modelId: CARS_MODEL_ID
+ }
+ });
+ } catch (ex) {
+ return params.response.error(ex);
+ }
+ },
+ async onError({ context }) {
+ await enableIndexing({
+ client: context.elasticsearch,
+ model: {
+ modelId: CARS_MODEL_ID,
+ tenant: "root",
+ locale: "en-US"
+ }
+ });
+ },
+ async onAbort({ context }) {
+ await enableIndexing({
+ client: context.elasticsearch,
+ model: {
+ modelId: CARS_MODEL_ID,
+ tenant: "root",
+ locale: "en-US"
+ }
+ });
+ }
+ });
+};
diff --git a/packages/api-headless-cms-es-tasks/src/types.ts b/packages/api-headless-cms-es-tasks/src/types.ts
new file mode 100644
index 00000000000..b4a2496a5cf
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/types.ts
@@ -0,0 +1,7 @@
+import { ElasticsearchContext } from "@webiny/api-elasticsearch/types";
+import { CmsContext } from "@webiny/api-headless-cms/types";
+import { Context as TasksContext } from "@webiny/tasks/types";
+
+export * from "./tasks/MockDataManager/types";
+
+export interface Context extends CmsContext, ElasticsearchContext, TasksContext {}
diff --git a/packages/api-headless-cms-es-tasks/src/utils/createIndex.ts b/packages/api-headless-cms-es-tasks/src/utils/createIndex.ts
new file mode 100644
index 00000000000..a62144b10d5
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/utils/createIndex.ts
@@ -0,0 +1,35 @@
+import { Client, createIndex as baseCreateIndex } from "@webiny/api-elasticsearch";
+import { CmsModel } from "@webiny/api-headless-cms/types";
+import { configurations } from "@webiny/api-headless-cms-ddb-es/configurations";
+import { CmsEntryElasticsearchIndexPlugin } from "@webiny/api-headless-cms-ddb-es/plugins";
+import { PluginsContainer } from "@webiny/plugins";
+
+export interface ICreateIndexParams {
+ client: Client;
+ model: Pick;
+ plugins: PluginsContainer;
+}
+
+export const createIndex = async (params: ICreateIndexParams): Promise => {
+ const { client, model, plugins } = params;
+
+ const { index } = configurations.es({
+ model
+ });
+
+ const result = await client.indices.exists({
+ index
+ });
+ if (result.body) {
+ return;
+ }
+
+ await baseCreateIndex({
+ index,
+ client,
+ locale: model.locale,
+ tenant: model.tenant,
+ plugins,
+ type: CmsEntryElasticsearchIndexPlugin.type
+ });
+};
diff --git a/packages/api-headless-cms-es-tasks/src/utils/disableIndexing.ts b/packages/api-headless-cms-es-tasks/src/utils/disableIndexing.ts
new file mode 100644
index 00000000000..2dd54d762ed
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/utils/disableIndexing.ts
@@ -0,0 +1,31 @@
+import { Client } from "@webiny/api-elasticsearch";
+import { configurations } from "@webiny/api-headless-cms-ddb-es/configurations";
+import { CmsModel } from "@webiny/api-headless-cms/types";
+
+export interface IDisableIndexingParams {
+ client: Client;
+ model: Pick;
+}
+
+export const disableIndexing = async (params: IDisableIndexingParams) => {
+ const { client, model } = params;
+
+ const { index } = configurations.es({
+ model
+ });
+
+ try {
+ await client.indices.putSettings({
+ index,
+ body: {
+ index: {
+ number_of_replicas: 0,
+ refresh_interval: "-1"
+ }
+ }
+ });
+ } catch (ex) {
+ console.error(ex);
+ throw ex;
+ }
+};
diff --git a/packages/api-headless-cms-es-tasks/src/utils/enableIndexing.ts b/packages/api-headless-cms-es-tasks/src/utils/enableIndexing.ts
new file mode 100644
index 00000000000..0f7fc18f40f
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/utils/enableIndexing.ts
@@ -0,0 +1,29 @@
+import { Client } from "@webiny/api-elasticsearch";
+import { CmsModel } from "@webiny/api-headless-cms/types";
+import { configurations } from "@webiny/api-headless-cms-ddb-es/configurations";
+
+interface IEnableIndexingParams {
+ client: Client;
+ model: Pick;
+}
+
+export const enableIndexing = async (params: IEnableIndexingParams) => {
+ const { client, model } = params;
+ const { index } = configurations.es({
+ model
+ });
+ try {
+ await client.indices.putSettings({
+ index,
+ body: {
+ index: {
+ number_of_replicas: 1,
+ refresh_interval: "1s"
+ }
+ }
+ });
+ } catch (ex) {
+ console.error(ex);
+ throw ex;
+ }
+};
diff --git a/packages/api-headless-cms-es-tasks/src/utils/index.ts b/packages/api-headless-cms-es-tasks/src/utils/index.ts
new file mode 100644
index 00000000000..fe1ed9e91ea
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/src/utils/index.ts
@@ -0,0 +1,3 @@
+export * from "./createIndex";
+export * from "./disableIndexing";
+export * from "./enableIndexing";
diff --git a/packages/api-headless-cms-es-tasks/tsconfig.build.json b/packages/api-headless-cms-es-tasks/tsconfig.build.json
new file mode 100644
index 00000000000..0d40af37eb7
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/tsconfig.build.json
@@ -0,0 +1,27 @@
+{
+ "extends": "../../tsconfig.build.json",
+ "include": ["src"],
+ "references": [
+ { "path": "../api-elasticsearch/tsconfig.build.json" },
+ { "path": "../api-headless-cms/tsconfig.build.json" },
+ { "path": "../api-headless-cms-ddb-es/tsconfig.build.json" },
+ { "path": "../handler/tsconfig.build.json" },
+ { "path": "../handler-aws/tsconfig.build.json" },
+ { "path": "../tasks/tsconfig.build.json" },
+ { "path": "../utils/tsconfig.build.json" },
+ { "path": "../api/tsconfig.build.json" },
+ { "path": "../api-i18n/tsconfig.build.json" },
+ { "path": "../api-security/tsconfig.build.json" },
+ { "path": "../api-tenancy/tsconfig.build.json" },
+ { "path": "../api-wcp/tsconfig.build.json" },
+ { "path": "../handler-graphql/tsconfig.build.json" },
+ { "path": "../plugins/tsconfig.build.json" }
+ ],
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "./dist",
+ "declarationDir": "./dist",
+ "paths": { "~/*": ["./src/*"], "~tests/*": ["./__tests__/*"] },
+ "baseUrl": "."
+ }
+}
diff --git a/packages/api-headless-cms-es-tasks/tsconfig.json b/packages/api-headless-cms-es-tasks/tsconfig.json
new file mode 100644
index 00000000000..bd40482808c
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/tsconfig.json
@@ -0,0 +1,58 @@
+{
+ "extends": "../../tsconfig.json",
+ "include": ["src", "__tests__"],
+ "references": [
+ { "path": "../api-elasticsearch" },
+ { "path": "../api-headless-cms" },
+ { "path": "../api-headless-cms-ddb-es" },
+ { "path": "../handler" },
+ { "path": "../handler-aws" },
+ { "path": "../tasks" },
+ { "path": "../utils" },
+ { "path": "../api" },
+ { "path": "../api-i18n" },
+ { "path": "../api-security" },
+ { "path": "../api-tenancy" },
+ { "path": "../api-wcp" },
+ { "path": "../handler-graphql" },
+ { "path": "../plugins" }
+ ],
+ "compilerOptions": {
+ "rootDirs": ["./src", "./__tests__"],
+ "outDir": "./dist",
+ "declarationDir": "./dist",
+ "paths": {
+ "~/*": ["./src/*"],
+ "~tests/*": ["./__tests__/*"],
+ "@webiny/api-elasticsearch/*": ["../api-elasticsearch/src/*"],
+ "@webiny/api-elasticsearch": ["../api-elasticsearch/src"],
+ "@webiny/api-headless-cms/*": ["../api-headless-cms/src/*"],
+ "@webiny/api-headless-cms": ["../api-headless-cms/src"],
+ "@webiny/api-headless-cms-ddb-es/*": ["../api-headless-cms-ddb-es/src/*"],
+ "@webiny/api-headless-cms-ddb-es": ["../api-headless-cms-ddb-es/src"],
+ "@webiny/handler/*": ["../handler/src/*"],
+ "@webiny/handler": ["../handler/src"],
+ "@webiny/handler-aws/*": ["../handler-aws/src/*"],
+ "@webiny/handler-aws": ["../handler-aws/src"],
+ "@webiny/tasks/*": ["../tasks/src/*"],
+ "@webiny/tasks": ["../tasks/src"],
+ "@webiny/utils/*": ["../utils/src/*"],
+ "@webiny/utils": ["../utils/src"],
+ "@webiny/api/*": ["../api/src/*"],
+ "@webiny/api": ["../api/src"],
+ "@webiny/api-i18n/*": ["../api-i18n/src/*"],
+ "@webiny/api-i18n": ["../api-i18n/src"],
+ "@webiny/api-security/*": ["../api-security/src/*"],
+ "@webiny/api-security": ["../api-security/src"],
+ "@webiny/api-tenancy/*": ["../api-tenancy/src/*"],
+ "@webiny/api-tenancy": ["../api-tenancy/src"],
+ "@webiny/api-wcp/*": ["../api-wcp/src/*"],
+ "@webiny/api-wcp": ["../api-wcp/src"],
+ "@webiny/handler-graphql/*": ["../handler-graphql/src/*"],
+ "@webiny/handler-graphql": ["../handler-graphql/src"],
+ "@webiny/plugins/*": ["../plugins/src/*"],
+ "@webiny/plugins": ["../plugins/src"]
+ },
+ "baseUrl": "."
+ }
+}
diff --git a/packages/api-headless-cms-es-tasks/webiny.config.js b/packages/api-headless-cms-es-tasks/webiny.config.js
new file mode 100644
index 00000000000..6dff86766c9
--- /dev/null
+++ b/packages/api-headless-cms-es-tasks/webiny.config.js
@@ -0,0 +1,8 @@
+const { createWatchPackage, createBuildPackage } = require("@webiny/project-utils");
+
+module.exports = {
+ commands: {
+ build: createBuildPackage({ cwd: __dirname }),
+ watch: createWatchPackage({ cwd: __dirname })
+ }
+};
diff --git a/packages/api-headless-cms/__tests__/storageOperations/entries.test.ts b/packages/api-headless-cms/__tests__/storageOperations/entries.test.ts
index 19869e681d2..bfab26d276f 100644
--- a/packages/api-headless-cms/__tests__/storageOperations/entries.test.ts
+++ b/packages/api-headless-cms/__tests__/storageOperations/entries.test.ts
@@ -2,7 +2,7 @@ import { createPersonEntries, createPersonModel, deletePersonModel } from "./hel
import { useGraphQLHandler } from "../testHelpers/useGraphQLHandler";
import { CmsContext } from "~/types";
-jest.setTimeout(60000);
+jest.setTimeout(90000);
describe("Entries storage operations", () => {
const { storageOperations, plugins } = useGraphQLHandler({
@@ -34,7 +34,7 @@ describe("Entries storage operations", () => {
it("getRevisions - should get revisions of all the entries", async () => {
const personModel = createPersonModel();
- const amount = 102;
+ const amount = 45;
const results = await createPersonEntries({
amount,
storageOperations,
@@ -115,7 +115,7 @@ describe("Entries storage operations", () => {
it("getByIds - should get all entries by id list", async () => {
const personModel = createPersonModel();
- const amount = 202;
+ const amount = 51;
const results = await createPersonEntries({
amount,
storageOperations,
diff --git a/packages/api-headless-cms/src/types.ts b/packages/api-headless-cms/src/types.ts
index ad290d7ecda..28a88320fc7 100644
--- a/packages/api-headless-cms/src/types.ts
+++ b/packages/api-headless-cms/src/types.ts
@@ -1776,8 +1776,10 @@ export interface CmsModelUpdateDirectParams {
export interface CmsModelContext {
/**
* Get a single content model.
+ *
+ * @throws NotFoundError
*/
- getModel: (modelId: string) => Promise;
+ getModel: (modelId: string) => Promise;
/**
* Get all content models.
*/
diff --git a/packages/create-webiny-project/package.json b/packages/create-webiny-project/package.json
index cd5165b16d2..91b1784b6f8 100644
--- a/packages/create-webiny-project/package.json
+++ b/packages/create-webiny-project/package.json
@@ -23,7 +23,7 @@
"load-json-file": "6.2.0",
"node-fetch": "^2.6.1",
"os": "0.1.1",
- "p-retry": "^4.6.0",
+ "p-retry": "^4.6.2",
"rimraf": "3.0.2",
"semver": "^7.3.5",
"uuid": "8.3.2",
diff --git a/packages/handler-aws/src/index.ts b/packages/handler-aws/src/index.ts
index 6e6e4f3f26a..678d117bf37 100644
--- a/packages/handler-aws/src/index.ts
+++ b/packages/handler-aws/src/index.ts
@@ -5,6 +5,8 @@ import "./sqs/register";
import "./eventBridge/register";
import "./sns/register";
+export * from "./utils";
+
/**
* API Gateway
*/
diff --git a/packages/handler-aws/src/utils/index.ts b/packages/handler-aws/src/utils/index.ts
new file mode 100644
index 00000000000..74b6b0f97f3
--- /dev/null
+++ b/packages/handler-aws/src/utils/index.ts
@@ -0,0 +1,2 @@
+export * from "./composedHandler";
+export * from "./timer";
diff --git a/packages/handler-aws/src/utils/timer/CustomTimer.ts b/packages/handler-aws/src/utils/timer/CustomTimer.ts
new file mode 100644
index 00000000000..55f59105817
--- /dev/null
+++ b/packages/handler-aws/src/utils/timer/CustomTimer.ts
@@ -0,0 +1,14 @@
+const MAX_RUNNING_MINUTES = 14;
+const MAX_RUNNING_MILLISECONDS = MAX_RUNNING_MINUTES * 60 * 1000;
+
+export class CustomTimer {
+ private readonly startTime: number;
+
+ public constructor() {
+ this.startTime = Date.now();
+ }
+
+ public getRemainingMilliseconds(): number {
+ return this.startTime + MAX_RUNNING_MILLISECONDS - Date.now(); // 14 minutes
+ }
+}
diff --git a/packages/tasks/src/timer/Timer.ts b/packages/handler-aws/src/utils/timer/Timer.ts
similarity index 63%
rename from packages/tasks/src/timer/Timer.ts
rename to packages/handler-aws/src/utils/timer/Timer.ts
index 8603cd0c968..f77543cf3f3 100644
--- a/packages/tasks/src/timer/Timer.ts
+++ b/packages/handler-aws/src/utils/timer/Timer.ts
@@ -13,4 +13,12 @@ export class Timer implements ITimer {
public getRemainingMilliseconds(): number {
return this.cb();
}
+
+ public getRemainingSeconds(): number {
+ const result = this.cb();
+ if (result > 0) {
+ return Math.floor(result / 1000);
+ }
+ return 0;
+ }
}
diff --git a/packages/tasks/src/timer/abstractions/ITimer.ts b/packages/handler-aws/src/utils/timer/abstractions/ITimer.ts
similarity index 58%
rename from packages/tasks/src/timer/abstractions/ITimer.ts
rename to packages/handler-aws/src/utils/timer/abstractions/ITimer.ts
index 6bc13211380..5fbe93039f5 100644
--- a/packages/tasks/src/timer/abstractions/ITimer.ts
+++ b/packages/handler-aws/src/utils/timer/abstractions/ITimer.ts
@@ -3,4 +3,8 @@ export interface ITimer {
* Return value must be in milliseconds.
*/
getRemainingMilliseconds(): number;
+ /**
+ * Return value must be in seconds.
+ */
+ getRemainingSeconds(): number;
}
diff --git a/packages/tasks/src/timer/factory.ts b/packages/handler-aws/src/utils/timer/factory.ts
similarity index 91%
rename from packages/tasks/src/timer/factory.ts
rename to packages/handler-aws/src/utils/timer/factory.ts
index b6de1c94a43..c2034a1634d 100644
--- a/packages/tasks/src/timer/factory.ts
+++ b/packages/handler-aws/src/utils/timer/factory.ts
@@ -1,4 +1,4 @@
-import { ITimer } from "~/timer/abstractions/ITimer";
+import { ITimer } from "./abstractions/ITimer";
import { CustomTimer } from "./CustomTimer";
import { Context as LambdaContext } from "aws-lambda/handler";
import { Timer } from "./Timer";
diff --git a/packages/tasks/src/timer/index.ts b/packages/handler-aws/src/utils/timer/index.ts
similarity index 100%
rename from packages/tasks/src/timer/index.ts
rename to packages/handler-aws/src/utils/timer/index.ts
diff --git a/packages/migrations/package.json b/packages/migrations/package.json
index 04e4e45a808..8805655d905 100644
--- a/packages/migrations/package.json
+++ b/packages/migrations/package.json
@@ -25,6 +25,7 @@
"directory": "dist"
},
"devDependencies": {
+ "@types/execa": "^2.0.0",
"@webiny/api-headless-cms": "0.0.0",
"@webiny/api-headless-cms-ddb-es": "0.0.0",
"@webiny/cli": "0.0.0",
diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/getNonNullableFieldsWithMissingValues.ts b/packages/migrations/src/migrations/5.39.0/001/utils/getNonNullableFieldsWithMissingValues.ts
new file mode 100644
index 00000000000..9265ef492a5
--- /dev/null
+++ b/packages/migrations/src/migrations/5.39.0/001/utils/getNonNullableFieldsWithMissingValues.ts
@@ -0,0 +1,21 @@
+import { CmsEntry } from "~/migrations/5.39.0/001/types";
+import {
+ EntryMetaFieldName,
+ isNonNullableEntryMetaField,
+ pickEntryMetaFields
+} from "@webiny/api-headless-cms/constants";
+
+export const getNonNullableFieldsWithMissingValues = (entry: CmsEntry) => {
+ // Only `modifiedX` and `publishedX` fields are nullable.
+ const nonNullableMetaFields = pickEntryMetaFields(entry, isNonNullableEntryMetaField);
+
+ const missingFields: EntryMetaFieldName[] = [];
+ for (const fieldName in nonNullableMetaFields) {
+ const value = nonNullableMetaFields[fieldName as EntryMetaFieldName];
+ if (!value) {
+ missingFields.push(fieldName as EntryMetaFieldName);
+ }
+ }
+
+ return missingFields;
+};
diff --git a/packages/migrations/src/migrations/5.39.0/001/utils/isMigratedEntry.ts b/packages/migrations/src/migrations/5.39.0/001/utils/isMigratedEntry.ts
index 7cdd89245e7..961b8011c53 100644
--- a/packages/migrations/src/migrations/5.39.0/001/utils/isMigratedEntry.ts
+++ b/packages/migrations/src/migrations/5.39.0/001/utils/isMigratedEntry.ts
@@ -1,5 +1,5 @@
import { CmsEntry } from "../types";
export const isMigratedEntry = (entry: CmsEntry) => {
- return "revisionCreatedOn" in entry;
+ return "revisionCreatedOn" in entry && entry.revisionCreatedOn;
};
diff --git a/packages/project-utils/testing/tasks/index.ts b/packages/project-utils/testing/tasks/index.ts
index bd2b893ccbf..8b7cf82e661 100644
--- a/packages/project-utils/testing/tasks/index.ts
+++ b/packages/project-utils/testing/tasks/index.ts
@@ -1 +1,2 @@
export * from "./runner";
+export * from "./mockTaskTriggerTransportPlugin";
diff --git a/packages/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.ts b/packages/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.ts
new file mode 100644
index 00000000000..6665bd4e49d
--- /dev/null
+++ b/packages/project-utils/testing/tasks/mockTaskTriggerTransportPlugin.ts
@@ -0,0 +1,24 @@
+import {
+ ITaskTriggerTransport,
+ TaskTriggerTransportPlugin
+} from "@webiny/tasks/plugins/TaskTriggerTransportPlugin";
+
+class MockTaskTriggerTransportPlugin extends TaskTriggerTransportPlugin {
+ public override name = "tasks.mockTaskTriggerTransport";
+
+ override createTransport(): ITaskTriggerTransport {
+ return {
+ async send() {
+ return {
+ Entries: [],
+ $metadata: {},
+ FailedEntryCount: 0
+ };
+ }
+ };
+ }
+}
+
+export const createMockTaskTriggerTransportPlugin = () => {
+ return [new MockTaskTriggerTransportPlugin()];
+};
diff --git a/packages/project-utils/testing/tasks/runner.ts b/packages/project-utils/testing/tasks/runner.ts
index cee4ea8aede..614f5c480b8 100644
--- a/packages/project-utils/testing/tasks/runner.ts
+++ b/packages/project-utils/testing/tasks/runner.ts
@@ -6,8 +6,9 @@ import {
ITaskResponseDoneResultOutput
} from "@webiny/tasks/types";
import { TaskRunner } from "@webiny/tasks/runner";
-import { timerFactory } from "@webiny/tasks/timer";
+import { timerFactory } from "@webiny/handler-aws/utils";
import { TaskEventValidation } from "@webiny/tasks/runner/TaskEventValidation";
+import { createMockTaskTriggerTransportPlugin } from "./mockTaskTriggerTransportPlugin";
export interface CreateRunnerParams<
C extends Context = Context,
@@ -26,6 +27,7 @@ export const createRunner = <
>(
params: CreateRunnerParams
) => {
+ params.context.plugins.register(createMockTaskTriggerTransportPlugin());
const runner = new TaskRunner(
params.context,
timerFactory({
diff --git a/packages/pulumi-aws/src/apps/core/CoreElasticSearch.ts b/packages/pulumi-aws/src/apps/core/CoreElasticSearch.ts
index 576b7c0b749..751419bfd48 100644
--- a/packages/pulumi-aws/src/apps/core/CoreElasticSearch.ts
+++ b/packages/pulumi-aws/src/apps/core/CoreElasticSearch.ts
@@ -215,8 +215,8 @@ export const ElasticSearch = createAppModule({
role: role.output.arn,
runtime: LAMBDA_RUNTIME,
handler: "handler.handler",
- timeout: 600,
- memorySize: 512,
+ timeout: 900,
+ memorySize: 1024,
environment: {
variables: {
DEBUG: String(process.env.DEBUG),
@@ -245,7 +245,7 @@ export const ElasticSearch = createAppModule({
functionName: lambda.output.arn,
startingPosition: "LATEST",
maximumRetryAttempts: 3,
- batchSize: 200,
+ batchSize: 50,
maximumBatchingWindowInSeconds: 1
}
});
@@ -254,7 +254,8 @@ export const ElasticSearch = createAppModule({
elasticsearchDomainArn: domain.output.arn,
elasticsearchDomainEndpoint: domain.output.endpoint,
elasticsearchDynamodbTableArn: table.output.arn,
- elasticsearchDynamodbTableName: table.output.name
+ elasticsearchDynamodbTableName: table.output.name,
+ elasticsearchDynamoToElasticLambdaName: lambda.output.name
});
return {
@@ -286,6 +287,7 @@ function getDynamoDbToElasticLambdaPolicy(
Sid: "PermissionForES",
Effect: "Allow",
Action: [
+ "es:ESHttpGet",
"es:ESHttpDelete",
"es:ESHttpPatch",
"es:ESHttpPost",
diff --git a/packages/pulumi-aws/src/apps/core/CoreOpenSearch.ts b/packages/pulumi-aws/src/apps/core/CoreOpenSearch.ts
index fd84e97b01d..6eb5d402c94 100644
--- a/packages/pulumi-aws/src/apps/core/CoreOpenSearch.ts
+++ b/packages/pulumi-aws/src/apps/core/CoreOpenSearch.ts
@@ -229,8 +229,8 @@ export const OpenSearch = createAppModule({
role: role.output.arn,
runtime: LAMBDA_RUNTIME,
handler: "handler.handler",
- timeout: 600,
- memorySize: 512,
+ timeout: 900,
+ memorySize: 1024,
environment: {
variables: {
DEBUG: String(process.env.DEBUG),
@@ -259,7 +259,7 @@ export const OpenSearch = createAppModule({
functionName: lambda.output.arn,
startingPosition: "LATEST",
maximumRetryAttempts: 3,
- batchSize: 200,
+ batchSize: 50,
maximumBatchingWindowInSeconds: 1
}
});
@@ -300,6 +300,7 @@ function getDynamoDbToElasticLambdaPolicy(
Sid: "PermissionForES",
Effect: "Allow",
Action: [
+ "es:ESHttpGet",
"es:ESHttpDelete",
"es:ESHttpPatch",
"es:ESHttpPost",
diff --git a/packages/tasks/__tests__/runner/taskRunnerAbort.test.ts b/packages/tasks/__tests__/runner/taskRunnerAbort.test.ts
index ff27e72fc4c..de66e4ad863 100644
--- a/packages/tasks/__tests__/runner/taskRunnerAbort.test.ts
+++ b/packages/tasks/__tests__/runner/taskRunnerAbort.test.ts
@@ -3,7 +3,7 @@ import { createMockEvent } from "~tests/mocks";
import { ResponseAbortedResult } from "~/response";
import { createLiveContextFactory } from "~tests/live";
import { taskDefinition } from "~tests/runner/taskDefinition";
-import { timerFactory } from "~/timer";
+import { timerFactory } from "@webiny/handler-aws/utils";
import { TaskEventValidation } from "~/runner/TaskEventValidation";
describe("task runner abort", () => {
diff --git a/packages/tasks/__tests__/runner/taskRunnerCreate.test.ts b/packages/tasks/__tests__/runner/taskRunnerCreate.test.ts
index 8b9296eb1fe..cb2da41b3d1 100644
--- a/packages/tasks/__tests__/runner/taskRunnerCreate.test.ts
+++ b/packages/tasks/__tests__/runner/taskRunnerCreate.test.ts
@@ -1,7 +1,7 @@
import { TaskRunner } from "~/runner";
import { createLiveContextFactory } from "~tests/live";
import { taskDefinition } from "~tests/runner/taskDefinition";
-import { timerFactory } from "~/timer";
+import { timerFactory } from "@webiny/handler-aws/utils";
import { TaskEventValidation } from "~/runner/TaskEventValidation";
describe("task runner create", () => {
diff --git a/packages/tasks/__tests__/runner/taskRunnerErrorFailedState.test.ts b/packages/tasks/__tests__/runner/taskRunnerErrorFailedState.test.ts
index d25d53316cb..cc91343a758 100644
--- a/packages/tasks/__tests__/runner/taskRunnerErrorFailedState.test.ts
+++ b/packages/tasks/__tests__/runner/taskRunnerErrorFailedState.test.ts
@@ -4,7 +4,7 @@ import { ResponseErrorResult } from "~/response";
import { TaskDataStatus } from "~/types";
import { createLiveContextFactory } from "~tests/live";
import { taskDefinition } from "~tests/runner/taskDefinition";
-import { timerFactory } from "~/timer";
+import { timerFactory } from "@webiny/handler-aws/utils";
import { TaskEventValidation } from "~/runner/TaskEventValidation";
describe("task runner error in failed state", () => {
diff --git a/packages/tasks/__tests__/runner/taskRunnerErrorSuccessState.test.ts b/packages/tasks/__tests__/runner/taskRunnerErrorSuccessState.test.ts
index 80cfa60ca4a..9849514144f 100644
--- a/packages/tasks/__tests__/runner/taskRunnerErrorSuccessState.test.ts
+++ b/packages/tasks/__tests__/runner/taskRunnerErrorSuccessState.test.ts
@@ -4,7 +4,7 @@ import { ResponseErrorResult } from "~/response";
import { TaskDataStatus } from "~/types";
import { createLiveContextFactory } from "~tests/live";
import { taskDefinition } from "~tests/runner/taskDefinition";
-import { timerFactory } from "~/timer";
+import { timerFactory } from "@webiny/handler-aws/utils";
import { TaskEventValidation } from "~/runner/TaskEventValidation";
describe("task runner error in success state", () => {
diff --git a/packages/tasks/__tests__/runner/taskRunnerSuccess.test.ts b/packages/tasks/__tests__/runner/taskRunnerSuccess.test.ts
index 6955d663338..2704d4325d4 100644
--- a/packages/tasks/__tests__/runner/taskRunnerSuccess.test.ts
+++ b/packages/tasks/__tests__/runner/taskRunnerSuccess.test.ts
@@ -5,7 +5,7 @@ import { TaskDataStatus } from "~/types";
import { createLiveContextFactory } from "~tests/live";
import { taskDefinition } from "~tests/runner/taskDefinition";
import { TaskEventValidation } from "~/runner/TaskEventValidation";
-import { timerFactory } from "~/timer";
+import { timerFactory } from "@webiny/handler-aws/utils";
describe("task runner trigger and end successfully", () => {
const contextFactory = createLiveContextFactory({
diff --git a/packages/tasks/__tests__/runner/taskRunnerTaskNotFound.test.ts b/packages/tasks/__tests__/runner/taskRunnerTaskNotFound.test.ts
index e943b16c746..bcc5da7b309 100644
--- a/packages/tasks/__tests__/runner/taskRunnerTaskNotFound.test.ts
+++ b/packages/tasks/__tests__/runner/taskRunnerTaskNotFound.test.ts
@@ -3,7 +3,7 @@ import { createMockEvent } from "~tests/mocks";
import { ResponseErrorResult } from "~/response";
import { createLiveContextFactory } from "~tests/live";
import { taskDefinition } from "~tests/runner/taskDefinition";
-import { timerFactory } from "~/timer";
+import { timerFactory } from "@webiny/handler-aws/utils";
import { TaskEventValidation } from "~/runner/TaskEventValidation";
describe("task runner task not found", () => {
diff --git a/packages/tasks/src/crud/EventBridgeEventTransport.ts b/packages/tasks/src/crud/transport/EventBridgeEventTransportPlugin.ts
similarity index 56%
rename from packages/tasks/src/crud/EventBridgeEventTransport.ts
rename to packages/tasks/src/crud/transport/EventBridgeEventTransportPlugin.ts
index bf9777ac952..76defe367c5 100644
--- a/packages/tasks/src/crud/EventBridgeEventTransport.ts
+++ b/packages/tasks/src/crud/transport/EventBridgeEventTransportPlugin.ts
@@ -1,31 +1,26 @@
-import WebinyError from "@webiny/error";
import {
- EventBridgeClient,
- PutEventsCommand,
- PutEventsCommandOutput
-} from "@webiny/aws-sdk/client-eventbridge";
-import { ITask, ITaskConfig } from "~/types";
-import { ITaskEventInput } from "~/handler/types";
+ ITaskTriggerTransport,
+ ITaskTriggerTransportPluginParams,
+ PutEventsCommandOutput,
+ TaskTriggerTransportPlugin
+} from "~/plugins";
+import { Context, ITask, ITaskConfig, ITaskEventInput } from "~/types";
+import { EventBridgeClient, PutEventsCommand } from "@webiny/aws-sdk/client-eventbridge";
+import { WebinyError } from "@webiny/error";
-export { PutEventsCommandOutput };
-
-export interface IEventBridgeEventTransportParams {
- config: ITaskConfig;
- getTenant: () => string;
- getLocale: () => string;
-}
-
-export class EventBridgeEventTransport {
+class EventBridgeEventTransport implements ITaskTriggerTransport {
+ protected readonly context: Context;
+ protected readonly config: ITaskConfig;
+ protected readonly getTenant: () => string;
+ protected readonly getLocale: () => string;
private readonly client: EventBridgeClient;
- private readonly eventBusName: string;
- private readonly getTenant: () => string;
- private readonly getLocale: () => string;
- public constructor(params: IEventBridgeEventTransportParams) {
+ public constructor(params: ITaskTriggerTransportPluginParams) {
this.client = new EventBridgeClient({
region: process.env.AWS_REGION
});
- this.eventBusName = params.config.eventBusName;
+ this.context = params.context;
+ this.config = params.config;
this.getTenant = params.getTenant;
this.getLocale = params.getLocale;
}
@@ -50,7 +45,7 @@ export class EventBridgeEventTransport {
Entries: [
{
Source: "webiny-api-tasks",
- EventBusName: this.eventBusName,
+ EventBusName: this.config.eventBusName,
DetailType: "WebinyBackgroundTask",
Detail: JSON.stringify(event)
}
@@ -70,3 +65,10 @@ export class EventBridgeEventTransport {
}
}
}
+
+export class EventBridgeEventTransportPlugin extends TaskTriggerTransportPlugin {
+ public override name = "task.eventBridgeEventTransport";
+ public createTransport(params: ITaskTriggerTransportPluginParams): ITaskTriggerTransport {
+ return new EventBridgeEventTransport(params);
+ }
+}
diff --git a/packages/tasks/src/crud/trigger.tasks.ts b/packages/tasks/src/crud/trigger.tasks.ts
index 77c28be5ff5..45e36ee60db 100644
--- a/packages/tasks/src/crud/trigger.tasks.ts
+++ b/packages/tasks/src/crud/trigger.tasks.ts
@@ -10,10 +10,12 @@ import {
ITaskLogItemType,
ITasksContextTriggerObject,
ITaskTriggerParams,
+ PutEventsCommandOutput,
TaskDataStatus
} from "~/types";
import { NotFoundError } from "@webiny/handler-graphql";
-import { EventBridgeEventTransport, PutEventsCommandOutput } from "./EventBridgeEventTransport";
+import { createTransport } from "~/transport/createTransport";
+import { EventBridgeEventTransportPlugin } from "~/crud/transport/EventBridgeEventTransportPlugin";
const MAX_DELAY_DAYS = 355;
const MAX_DELAY_SECONDS = MAX_DELAY_DAYS * 24 * 60 * 60;
@@ -43,16 +45,11 @@ export const createTriggerTasksCrud = (
context: Context,
config: ITaskConfig
): ITasksContextTriggerObject => {
- const getTenant = (): string => {
- return context.tenancy.getCurrentTenant().id;
- };
- const getLocale = (): string => {
- return context.cms.getLocale().code;
- };
- const eventBridgeEventTransport = new EventBridgeEventTransport({
- config,
- getTenant,
- getLocale
+ context.plugins.register(new EventBridgeEventTransportPlugin());
+
+ const transport = createTransport({
+ context,
+ config
});
return {
@@ -85,7 +82,7 @@ export const createTriggerTasksCrud = (
let event: PutEventsCommandOutput | null = null;
try {
- event = await eventBridgeEventTransport.send(task, delay);
+ event = await transport.send(task, delay);
if (!event) {
throw new WebinyError(
diff --git a/packages/tasks/src/handler/index.ts b/packages/tasks/src/handler/index.ts
index 8cfb97b8c2f..ffb26daade9 100644
--- a/packages/tasks/src/handler/index.ts
+++ b/packages/tasks/src/handler/index.ts
@@ -8,7 +8,7 @@ import { Context, TaskResponseStatus } from "~/types";
import { ITaskRawEvent } from "~/handler/types";
import { TaskRunner } from "~/runner";
import WebinyError from "@webiny/error";
-import { timerFactory } from "~/timer";
+import { timerFactory } from "@webiny/handler-aws/utils";
import { TaskEventValidation } from "~/runner/TaskEventValidation";
export interface HandlerCallable {
diff --git a/packages/tasks/src/plugins/TaskTriggerTransportPlugin.ts b/packages/tasks/src/plugins/TaskTriggerTransportPlugin.ts
new file mode 100644
index 00000000000..33ecbbc2923
--- /dev/null
+++ b/packages/tasks/src/plugins/TaskTriggerTransportPlugin.ts
@@ -0,0 +1,24 @@
+import { Plugin } from "@webiny/plugins";
+import { Context, ITask, ITaskConfig } from "~/types";
+import { PutEventsCommandOutput } from "@webiny/aws-sdk/client-eventbridge";
+
+export { PutEventsCommandOutput };
+
+export interface ITaskTriggerTransportPluginParams {
+ context: Context;
+ config: ITaskConfig;
+ getTenant(): string;
+ getLocale(): string;
+}
+
+export interface ITaskTriggerTransport {
+ send(task: Pick, delay: number): Promise;
+}
+
+export abstract class TaskTriggerTransportPlugin extends Plugin {
+ public static override readonly type: string = "tasks.taskTriggerTransport";
+
+ public abstract createTransport(
+ params: ITaskTriggerTransportPluginParams
+ ): ITaskTriggerTransport;
+}
diff --git a/packages/tasks/src/plugins/index.ts b/packages/tasks/src/plugins/index.ts
new file mode 100644
index 00000000000..bcd15a83e5a
--- /dev/null
+++ b/packages/tasks/src/plugins/index.ts
@@ -0,0 +1 @@
+export * from "./TaskTriggerTransportPlugin";
diff --git a/packages/tasks/src/runner/TaskControl.ts b/packages/tasks/src/runner/TaskControl.ts
index 1590739b972..ef8241c1a64 100644
--- a/packages/tasks/src/runner/TaskControl.ts
+++ b/packages/tasks/src/runner/TaskControl.ts
@@ -111,6 +111,8 @@ export class TaskControl implements ITaskControl {
}
try {
+ this.context.security.setIdentity(task.createdBy);
+
const result = await manager.run(definition);
await this.runEvents(result, definition, task);
diff --git a/packages/tasks/src/runner/TaskRunner.ts b/packages/tasks/src/runner/TaskRunner.ts
index 12092ef7ebc..00446353e81 100644
--- a/packages/tasks/src/runner/TaskRunner.ts
+++ b/packages/tasks/src/runner/TaskRunner.ts
@@ -1,11 +1,11 @@
import { ITaskEvent, ITaskRawEvent } from "~/handler/types";
import { ITaskEventValidation, ITaskRunner } from "./abstractions";
import { Context } from "~/types";
-import { Response } from "~/response";
+import { Response, ResponseErrorResult } from "~/response";
import { TaskControl } from "./TaskControl";
import { IResponseResult } from "~/response/abstractions";
import { getErrorProperties } from "~/utils/getErrorProperties";
-import { ITimer } from "~/timer";
+import { ITimer } from "@webiny/handler-aws/utils";
const transformMinutesIntoMilliseconds = (minutes: number) => {
return minutes * 60000;
@@ -67,8 +67,15 @@ export class TaskRunner implements ITaskRunner {
const control = new TaskControl(this, response, this.context);
try {
- return await control.run(event);
+ const result = await control.run(event);
+ if (result instanceof ResponseErrorResult === false) {
+ return result;
+ }
+ console.error(result);
+ return result;
} catch (ex) {
+ console.error(`Failed to execute task "${event.webinyTaskId}".`);
+ console.error(ex);
return response.error({
error: getErrorProperties(ex)
});
diff --git a/packages/tasks/src/timer/CustomTimer.ts b/packages/tasks/src/timer/CustomTimer.ts
deleted file mode 100644
index 00d12473475..00000000000
--- a/packages/tasks/src/timer/CustomTimer.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { ITimer } from "~/timer/abstractions/ITimer";
-
-const MAX_RUNNING_MINUTES = 14;
-const MAX_RUNNING_MILLISECONDS = MAX_RUNNING_MINUTES * 60 * 1000;
-
-export class CustomTimer implements ITimer {
- private readonly startTime: number;
-
- public constructor() {
- this.startTime = Date.now();
- }
-
- public getRemainingMilliseconds(): number {
- const result = this.startTime + MAX_RUNNING_MILLISECONDS - Date.now(); // 14 minutes
- console.log(
- "It looks like the Lambda Context getRemainingTimeInMillis does not exist. Mocked remaining time:",
- result
- );
- return result;
- }
-}
diff --git a/packages/tasks/src/transport/createTransport.ts b/packages/tasks/src/transport/createTransport.ts
new file mode 100644
index 00000000000..f7be33941d3
--- /dev/null
+++ b/packages/tasks/src/transport/createTransport.ts
@@ -0,0 +1,34 @@
+import { Context, ITaskConfig } from "~/types";
+import { ITaskTriggerTransport, TaskTriggerTransportPlugin } from "~/plugins";
+import { WebinyError } from "@webiny/error";
+
+export interface ICreateTransport {
+ context: Context;
+ config: ITaskConfig;
+}
+
+export const createTransport = (params: ICreateTransport): ITaskTriggerTransport => {
+ const plugins = params.context.plugins.byType(
+ TaskTriggerTransportPlugin.type
+ );
+ const [plugin] = plugins;
+ if (!plugin) {
+ throw new WebinyError("Missing TaskTriggerTransportPlugin.", "PLUGIN_ERROR", {
+ type: TaskTriggerTransportPlugin.type
+ });
+ }
+
+ const getTenant = (): string => {
+ return params.context.tenancy.getCurrentTenant().id;
+ };
+ const getLocale = (): string => {
+ return params.context.cms.getLocale().code;
+ };
+
+ return plugin.createTransport({
+ context: params.context,
+ config: params.config,
+ getTenant,
+ getLocale
+ });
+};
diff --git a/packages/tasks/src/utils/getObjectProperties.ts b/packages/tasks/src/utils/getObjectProperties.ts
index 5e080afcea6..9e5a55900ac 100644
--- a/packages/tasks/src/utils/getObjectProperties.ts
+++ b/packages/tasks/src/utils/getObjectProperties.ts
@@ -10,6 +10,9 @@ export const getObjectProperties = (input: unknown): T => {
return {} as unknown as T;
}
return Object.getOwnPropertyNames(input).reduce((acc, key) => {
+ if (key === "stack") {
+ return acc;
+ }
acc[key as keyof T] = (input as unknown as T)[key as keyof T];
return acc;
}, {} as T) as unknown as T;
diff --git a/yarn.lock b/yarn.lock
index 6ccba9a0e15..3bd1858232c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6644,6 +6644,13 @@ __metadata:
languageName: node
linkType: hard
+"@faker-js/faker@npm:^8.4.1":
+ version: 8.4.1
+ resolution: "@faker-js/faker@npm:8.4.1"
+ checksum: d802d531f8929562715adc279cfec763c9a4bc596ec67b0ce43fd0ae61b285d2b0eec6f1f4aa852452a63721a842fe7e81926dce7bd92acca94b01e2a1f55f5a
+ languageName: node
+ linkType: hard
+
"@fastify/accept-negotiator@npm:^1.0.0":
version: 1.1.0
resolution: "@fastify/accept-negotiator@npm:1.1.0"
@@ -6813,46 +6820,27 @@ __metadata:
languageName: node
linkType: hard
-"@grpc/grpc-js@npm:1.9.6":
- version: 1.9.6
- resolution: "@grpc/grpc-js@npm:1.9.6"
+"@grpc/grpc-js@npm:^1.10.1, @grpc/grpc-js@npm:^1.2.7":
+ version: 1.10.8
+ resolution: "@grpc/grpc-js@npm:1.10.8"
dependencies:
- "@grpc/proto-loader": ^0.7.8
- "@types/node": ">=12.12.47"
- checksum: c02981af11e9749bb8f9a71f5f7e125740da9e6addb13b65d006d41d4d7a80d94b6daa45426c6832a2accfd6f9a925d45a4660a88bd908684446ffaf4fe76c68
+ "@grpc/proto-loader": ^0.7.13
+ "@js-sdsl/ordered-map": ^4.4.2
+ checksum: 498d144016eac26fc069bc57d649bf4776ae6bd1a24e62823a8b07b7d39a4414caa72a799f8287278b79e11ec4ecf989dbac01518c3981d8f947db15916c6727
languageName: node
linkType: hard
-"@grpc/grpc-js@npm:^1.2.7":
- version: 1.9.12
- resolution: "@grpc/grpc-js@npm:1.9.12"
- dependencies:
- "@grpc/proto-loader": ^0.7.8
- "@types/node": ">=12.12.47"
- checksum: 1788bdc7256b003261d5cfd6858fe21c06043742a5f512b9855df66998239d645e6eda1612d17dbffa19a7fcce950cd2ff661e9818ce67ca36198501020da06d
- languageName: node
- linkType: hard
-
-"@grpc/grpc-js@npm:~1.3.8":
- version: 1.3.8
- resolution: "@grpc/grpc-js@npm:1.3.8"
- dependencies:
- "@types/node": ">=12.12.47"
- checksum: 12df94227d99ce410dd146f31a27dc34b5dbcbbea6190fd9604ace8d902ce5614272054cead9ddf0ed6db4562ea5bdccf593d71905a23ab1125686d2125d4cd5
- languageName: node
- linkType: hard
-
-"@grpc/proto-loader@npm:^0.7.8":
- version: 0.7.10
- resolution: "@grpc/proto-loader@npm:0.7.10"
+"@grpc/proto-loader@npm:^0.7.13":
+ version: 0.7.13
+ resolution: "@grpc/proto-loader@npm:0.7.13"
dependencies:
lodash.camelcase: ^4.3.0
long: ^5.0.0
- protobufjs: ^7.2.4
+ protobufjs: ^7.2.5
yargs: ^17.7.2
bin:
proto-loader-gen-types: build/bin/proto-loader-gen-types.js
- checksum: 4987e23b57942c2363b6a6a106e63efae636666cefa348778dfafef2ff72da7343c8587667521cb1d52482827bcd001dd535bdc27065110af56d9c7c176334c9
+ checksum: 399c1b8a4627f93dc31660d9636ea6bf58be5675cc7581e3df56a249369e5be02c6cd0d642c5332b0d5673bc8621619bc06fb045aa3e8f57383737b5d35930dc
languageName: node
linkType: hard
@@ -6917,6 +6905,13 @@ __metadata:
languageName: node
linkType: hard
+"@isaacs/string-locale-compare@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "@isaacs/string-locale-compare@npm:1.1.0"
+ checksum: 7287da5d11497b82c542d3c2abe534808015be4f4883e71c26853277b5456f6bbe4108535db847a29f385ad6dc9318ffb0f55ee79bb5f39993233d7dccf8751d
+ languageName: node
+ linkType: hard
+
"@istanbuljs/load-nyc-config@npm:^1.0.0":
version: 1.1.0
resolution: "@istanbuljs/load-nyc-config@npm:1.1.0"
@@ -7260,6 +7255,13 @@ __metadata:
languageName: node
linkType: hard
+"@js-sdsl/ordered-map@npm:^4.4.2":
+ version: 4.4.2
+ resolution: "@js-sdsl/ordered-map@npm:4.4.2"
+ checksum: a927ae4ff8565ecb75355cc6886a4f8fadbf2af1268143c96c0cce3ba01261d241c3f4ba77f21f3f017a00f91dfe9e0673e95f830255945c80a0e96c6d30508a
+ languageName: node
+ linkType: hard
+
"@lerna/add@npm:3.21.0":
version: 3.21.0
resolution: "@lerna/add@npm:3.21.0"
@@ -9125,6 +9127,64 @@ __metadata:
languageName: node
linkType: hard
+"@npmcli/agent@npm:^2.0.0":
+ version: 2.2.2
+ resolution: "@npmcli/agent@npm:2.2.2"
+ dependencies:
+ agent-base: ^7.1.0
+ http-proxy-agent: ^7.0.0
+ https-proxy-agent: ^7.0.1
+ lru-cache: ^10.0.1
+ socks-proxy-agent: ^8.0.3
+ checksum: 67de7b88cc627a79743c88bab35e023e23daf13831a8aa4e15f998b92f5507b644d8ffc3788afc8e64423c612e0785a6a92b74782ce368f49a6746084b50d874
+ languageName: node
+ linkType: hard
+
+"@npmcli/arborist@npm:^7.3.1":
+ version: 7.5.2
+ resolution: "@npmcli/arborist@npm:7.5.2"
+ dependencies:
+ "@isaacs/string-locale-compare": ^1.1.0
+ "@npmcli/fs": ^3.1.1
+ "@npmcli/installed-package-contents": ^2.1.0
+ "@npmcli/map-workspaces": ^3.0.2
+ "@npmcli/metavuln-calculator": ^7.1.1
+ "@npmcli/name-from-folder": ^2.0.0
+ "@npmcli/node-gyp": ^3.0.0
+ "@npmcli/package-json": ^5.1.0
+ "@npmcli/query": ^3.1.0
+ "@npmcli/redact": ^2.0.0
+ "@npmcli/run-script": ^8.1.0
+ bin-links: ^4.0.4
+ cacache: ^18.0.3
+ common-ancestor-path: ^1.0.1
+ hosted-git-info: ^7.0.2
+ json-parse-even-better-errors: ^3.0.2
+ json-stringify-nice: ^1.1.4
+ lru-cache: ^10.2.2
+ minimatch: ^9.0.4
+ nopt: ^7.2.1
+ npm-install-checks: ^6.2.0
+ npm-package-arg: ^11.0.2
+ npm-pick-manifest: ^9.0.1
+ npm-registry-fetch: ^17.0.1
+ pacote: ^18.0.6
+ parse-conflict-json: ^3.0.0
+ proc-log: ^4.2.0
+ proggy: ^2.0.0
+ promise-all-reject-late: ^1.0.0
+ promise-call-limit: ^3.0.1
+ read-package-json-fast: ^3.0.2
+ semver: ^7.3.7
+ ssri: ^10.0.6
+ treeverse: ^3.0.0
+ walk-up-path: ^3.0.1
+ bin:
+ arborist: bin/index.js
+ checksum: 92686b9e947d90ff984afa447cc12977df0f374daa88b2e9a562a8cd2cec23b70883031533cdd898749ddf45345ded384af79843993ccc1ce2dd290b9f9fe692
+ languageName: node
+ linkType: hard
+
"@npmcli/fs@npm:^2.1.0":
version: 2.1.2
resolution: "@npmcli/fs@npm:2.1.2"
@@ -9135,6 +9195,68 @@ __metadata:
languageName: node
linkType: hard
+"@npmcli/fs@npm:^3.1.0, @npmcli/fs@npm:^3.1.1":
+ version: 3.1.1
+ resolution: "@npmcli/fs@npm:3.1.1"
+ dependencies:
+ semver: ^7.3.5
+ checksum: d960cab4b93adcb31ce223bfb75c5714edbd55747342efb67dcc2f25e023d930a7af6ece3e75f2f459b6f38fc14d031c766f116cd124fdc937fd33112579e820
+ languageName: node
+ linkType: hard
+
+"@npmcli/git@npm:^5.0.0":
+ version: 5.0.7
+ resolution: "@npmcli/git@npm:5.0.7"
+ dependencies:
+ "@npmcli/promise-spawn": ^7.0.0
+ lru-cache: ^10.0.1
+ npm-pick-manifest: ^9.0.0
+ proc-log: ^4.0.0
+ promise-inflight: ^1.0.1
+ promise-retry: ^2.0.1
+ semver: ^7.3.5
+ which: ^4.0.0
+ checksum: a83d4e032ca71671615de532b2d62c6bcf6342819a4a25da650ac66f8b5803357e629ad9dacada307891d9428bc5e777cca0b8cbc3ee76b66bbddce3851c30f5
+ languageName: node
+ linkType: hard
+
+"@npmcli/installed-package-contents@npm:^2.0.1, @npmcli/installed-package-contents@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "@npmcli/installed-package-contents@npm:2.1.0"
+ dependencies:
+ npm-bundled: ^3.0.0
+ npm-normalize-package-bin: ^3.0.0
+ bin:
+ installed-package-contents: bin/index.js
+ checksum: d0f307e0c971a4ffaea44d4f38d53b57e19222413f338bab26d4321c4a7b9098318d74719dd1f8747a6de0575ac0ba29aeb388edf6599ac8299506947f53ffb6
+ languageName: node
+ linkType: hard
+
+"@npmcli/map-workspaces@npm:^3.0.2":
+ version: 3.0.6
+ resolution: "@npmcli/map-workspaces@npm:3.0.6"
+ dependencies:
+ "@npmcli/name-from-folder": ^2.0.0
+ glob: ^10.2.2
+ minimatch: ^9.0.0
+ read-package-json-fast: ^3.0.0
+ checksum: bdb09ee1d044bb9b2857d9e2d7ca82f40783a8549b5a7e150e25f874ee354cdbc8109ad7c3df42ec412f7057d95baa05920c4d361c868a93a42146b8e4390d3d
+ languageName: node
+ linkType: hard
+
+"@npmcli/metavuln-calculator@npm:^7.1.1":
+ version: 7.1.1
+ resolution: "@npmcli/metavuln-calculator@npm:7.1.1"
+ dependencies:
+ cacache: ^18.0.0
+ json-parse-even-better-errors: ^3.0.0
+ pacote: ^18.0.0
+ proc-log: ^4.1.0
+ semver: ^7.3.5
+ checksum: c6297e40f914100c4effb574c55ef95cbf15d0c28e73e39f29de317b12a3d3d82571f8aca3f7635cc4c8e97bff35942c71c59a79e1a8abc93475744e61abc399
+ languageName: node
+ linkType: hard
+
"@npmcli/move-file@npm:^2.0.0":
version: 2.0.1
resolution: "@npmcli/move-file@npm:2.0.1"
@@ -9145,6 +9267,74 @@ __metadata:
languageName: node
linkType: hard
+"@npmcli/name-from-folder@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "@npmcli/name-from-folder@npm:2.0.0"
+ checksum: fb3ef891aa57315fb6171866847f298577c8bda98a028e93e458048477133e142b4eb45ce9f3b80454f7c257612cb01754ee782d608507698dd712164436f5bd
+ languageName: node
+ linkType: hard
+
+"@npmcli/node-gyp@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "@npmcli/node-gyp@npm:3.0.0"
+ checksum: fe3802b813eecb4ade7ad77c9396cb56721664275faab027e3bd8a5e15adfbbe39e2ecc19f7885feb3cfa009b96632741cc81caf7850ba74440c6a2eee7b4ffc
+ languageName: node
+ linkType: hard
+
+"@npmcli/package-json@npm:^5.0.0, @npmcli/package-json@npm:^5.1.0":
+ version: 5.1.0
+ resolution: "@npmcli/package-json@npm:5.1.0"
+ dependencies:
+ "@npmcli/git": ^5.0.0
+ glob: ^10.2.2
+ hosted-git-info: ^7.0.0
+ json-parse-even-better-errors: ^3.0.0
+ normalize-package-data: ^6.0.0
+ proc-log: ^4.0.0
+ semver: ^7.5.3
+ checksum: 1482c737aebf318133cff7ea671662eb4438ea82920205d00ff1f1c47ca311e1b48bb157d64e2e24eb76cfc9a0137e8b77b98b50f7a2a23c7db249c7b50dcf88
+ languageName: node
+ linkType: hard
+
+"@npmcli/promise-spawn@npm:^7.0.0":
+ version: 7.0.2
+ resolution: "@npmcli/promise-spawn@npm:7.0.2"
+ dependencies:
+ which: ^4.0.0
+ checksum: 728256506ecbafb53064036e28c2815b9a9e9190ba7a48eec77b011a9f8a899515a6d96760dbde960bc1d3e5b828fd0b0b7fe3b512efaf049d299bacbd732fda
+ languageName: node
+ linkType: hard
+
+"@npmcli/query@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "@npmcli/query@npm:3.1.0"
+ dependencies:
+ postcss-selector-parser: ^6.0.10
+ checksum: 33c018bfcc6d64593e7969847d0442beab4e8a42b6c9f932237c9fd135c95ab55de5c4b5d5d66302dd9fc3c748bc4ead780d3595e5d586fedf9859ed6b5f2744
+ languageName: node
+ linkType: hard
+
+"@npmcli/redact@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "@npmcli/redact@npm:2.0.0"
+ checksum: 7ed760ab0f30c7199d1176b35619e226f6810d3606f75870551486493f4ba388f64dcf2fbcfb0ab2059ea8ed36e6733ebb9c92f883116c45b2e3fd80da7d7106
+ languageName: node
+ linkType: hard
+
+"@npmcli/run-script@npm:^8.0.0, @npmcli/run-script@npm:^8.1.0":
+ version: 8.1.0
+ resolution: "@npmcli/run-script@npm:8.1.0"
+ dependencies:
+ "@npmcli/node-gyp": ^3.0.0
+ "@npmcli/package-json": ^5.0.0
+ "@npmcli/promise-spawn": ^7.0.0
+ node-gyp: ^10.0.0
+ proc-log: ^4.0.0
+ which: ^4.0.0
+ checksum: 21adfb308b9064041d6d2f7f0d53924be0e1466d558de1c9802fab9eb84850bd8e04fdd5695924f331e1a36565461500d912e187909f91c03188cc763a106986
+ languageName: node
+ linkType: hard
+
"@octokit/app@npm:^12.0.4":
version: 12.0.7
resolution: "@octokit/app@npm:12.0.7"
@@ -10184,43 +10374,13 @@ __metadata:
languageName: node
linkType: hard
-"@pulumi/pulumi@npm:^3.0.0":
- version: 3.54.0
- resolution: "@pulumi/pulumi@npm:3.54.0"
- dependencies:
- "@grpc/grpc-js": ~1.3.8
- "@logdna/tail-file": ^2.0.6
- "@opentelemetry/api": ^1.2.0
- "@opentelemetry/exporter-zipkin": ^1.6.0
- "@opentelemetry/instrumentation-grpc": ^0.32.0
- "@opentelemetry/resources": ^1.6.0
- "@opentelemetry/sdk-trace-base": ^1.6.0
- "@opentelemetry/sdk-trace-node": ^1.6.0
- "@opentelemetry/semantic-conventions": ^1.6.0
- "@pulumi/query": ^0.3.0
- execa: ^5.1.0
- google-protobuf: ^3.5.0
- ini: ^2.0.0
- js-yaml: ^3.14.0
- minimist: ^1.2.6
- normalize-package-data: ^2.4.0
- read-package-tree: ^5.3.1
- require-from-string: ^2.0.1
- semver: ^6.1.0
- source-map-support: ^0.5.6
- ts-node: ^7.0.1
- typescript: ~3.8.3
- upath: ^1.1.0
- checksum: 0ee833cf35923794a4c342ddcf1ea37c531466438cfa5dceb20573063d2bb6c124a9078f0375444795c5e4dc518048f6e311b5c3a302cd42edd2e31f1d1f1470
- languageName: node
- linkType: hard
-
-"@pulumi/pulumi@npm:^3.99.0":
- version: 3.99.0
- resolution: "@pulumi/pulumi@npm:3.99.0"
+"@pulumi/pulumi@npm:^3.0.0, @pulumi/pulumi@npm:^3.99.0":
+ version: 3.118.0
+ resolution: "@pulumi/pulumi@npm:3.118.0"
dependencies:
- "@grpc/grpc-js": 1.9.6
+ "@grpc/grpc-js": ^1.10.1
"@logdna/tail-file": ^2.0.6
+ "@npmcli/arborist": ^7.3.1
"@opentelemetry/api": ^1.2.0
"@opentelemetry/exporter-zipkin": ^1.6.0
"@opentelemetry/instrumentation": ^0.32.0
@@ -10231,21 +10391,32 @@ __metadata:
"@opentelemetry/semantic-conventions": ^1.6.0
"@pulumi/query": ^0.3.0
"@types/google-protobuf": ^3.15.5
+ "@types/semver": ^7.5.6
+ "@types/tmp": ^0.2.6
execa: ^5.1.0
+ fdir: ^6.1.1
google-protobuf: ^3.5.0
+ got: ^11.8.6
ini: ^2.0.0
js-yaml: ^3.14.0
minimist: ^1.2.6
- normalize-package-data: ^3.0.0
+ normalize-package-data: ^6.0.0
+ picomatch: ^3.0.1
pkg-dir: ^7.0.0
- read-package-tree: ^5.3.1
require-from-string: ^2.0.1
semver: ^7.5.2
source-map-support: ^0.5.6
- ts-node: ^7.0.1
- typescript: ~3.8.3
+ tmp: ^0.2.1
upath: ^1.1.0
- checksum: b899a4e4f642692302020c3a7016878e806043d8c3a4f00ad198ffba057d60841eefd192545cfa9687f630c5c77e8f5545a618da59bbde9012a66de84beca3f1
+ peerDependencies:
+ ts-node: ">= 7.0.1 < 12"
+ typescript: ">= 3.8.3 < 6"
+ peerDependenciesMeta:
+ ts-node:
+ optional: true
+ typescript:
+ optional: true
+ checksum: 202a39abfacb99ec4ac511a887f1907a50f375fcdced8e0bcfce7a233756d6eed0d1ef085e6ba5b03b2d33820361b46fad2a4fc842158910320085df0c225e9d
languageName: node
linkType: hard
@@ -10839,6 +11010,71 @@ __metadata:
languageName: node
linkType: hard
+"@sec-ant/readable-stream@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "@sec-ant/readable-stream@npm:0.4.1"
+ checksum: eb56f72a70995f725269f1c1c206d6dbeb090e88413b1302a456c600041175a7a484c2f0172454f7bed65a8ab95ffed7647d8ad03e6c23b1e3bbc9845f78cd17
+ languageName: node
+ linkType: hard
+
+"@sigstore/bundle@npm:^2.3.2":
+ version: 2.3.2
+ resolution: "@sigstore/bundle@npm:2.3.2"
+ dependencies:
+ "@sigstore/protobuf-specs": ^0.3.2
+ checksum: 851095ef71473b187df4d8b3374821d53c152646e591557973bd9648a9f08e3e8f686c7523194f513ded9534b4d057aa18697ee11f784ec4e36161907ce6d8ee
+ languageName: node
+ linkType: hard
+
+"@sigstore/core@npm:^1.0.0, @sigstore/core@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "@sigstore/core@npm:1.1.0"
+ checksum: bb870cf11cfb260d9e83f40cc29e6bbaf6ef5211d42eacbb48517ff87b1f647ff687eff557b0b30f9880fac2517d14704ec6036ae4a0d99ef3265b3d40cef29c
+ languageName: node
+ linkType: hard
+
+"@sigstore/protobuf-specs@npm:^0.3.2":
+ version: 0.3.2
+ resolution: "@sigstore/protobuf-specs@npm:0.3.2"
+ checksum: 677b67eb4c3128432169fa168a5daae343a0242ffada3811bfde844644ac2eae0127cbf39349ed59e1a4edd14064416285251abb6acb260b6e3e9b6b40705c13
+ languageName: node
+ linkType: hard
+
+"@sigstore/sign@npm:^2.3.2":
+ version: 2.3.2
+ resolution: "@sigstore/sign@npm:2.3.2"
+ dependencies:
+ "@sigstore/bundle": ^2.3.2
+ "@sigstore/core": ^1.0.0
+ "@sigstore/protobuf-specs": ^0.3.2
+ make-fetch-happen: ^13.0.1
+ proc-log: ^4.2.0
+ promise-retry: ^2.0.1
+ checksum: b8bfc38716956df0aadbba8a78ed4b3a758747e31e1ed775deab0632243ff94aee51f6c17cf344834cf6e5174449358988ce35e3437e80e49867a7821ad5aa45
+ languageName: node
+ linkType: hard
+
+"@sigstore/tuf@npm:^2.3.4":
+ version: 2.3.4
+ resolution: "@sigstore/tuf@npm:2.3.4"
+ dependencies:
+ "@sigstore/protobuf-specs": ^0.3.2
+ tuf-js: ^2.2.1
+ checksum: 62f0b17e116d42d224c7d9f40a4037c7c20f456e026059ce6ebfc155e6d6445396549acd01a6f799943857e900f1bb2b0523d00a9353b8f3f99862f1eba59f6d
+ languageName: node
+ linkType: hard
+
+"@sigstore/verify@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "@sigstore/verify@npm:1.2.1"
+ dependencies:
+ "@sigstore/bundle": ^2.3.2
+ "@sigstore/core": ^1.1.0
+ "@sigstore/protobuf-specs": ^0.3.2
+ checksum: bcd08c152d6166e9c6a019c8cb50afe1b284c01753e219e126665d21b5923cbdba3700daa3cee5197a07af551ecca8b209a6c557fbc0e5f6a4ee6f9c531047fe
+ languageName: node
+ linkType: hard
+
"@sinclair/typebox@npm:^0.25.16":
version: 0.25.24
resolution: "@sinclair/typebox@npm:0.25.24"
@@ -10860,6 +11096,13 @@ __metadata:
languageName: node
linkType: hard
+"@sindresorhus/merge-streams@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "@sindresorhus/merge-streams@npm:4.0.0"
+ checksum: 5759d31dfd822999bbe3ddcf72d4b15dc3d99ea51dd5b3210888f3348234eaff0f44bc999bef6b3c328daeb34e862a63b2c4abe5590acec541f93bc6fa016c9d
+ languageName: node
+ linkType: hard
+
"@sinonjs/commons@npm:^1.6.0, @sinonjs/commons@npm:^1.7.0, @sinonjs/commons@npm:^1.8.1":
version: 1.8.6
resolution: "@sinonjs/commons@npm:1.8.6"
@@ -12871,6 +13114,15 @@ __metadata:
languageName: node
linkType: hard
+"@szmarczak/http-timer@npm:^4.0.5":
+ version: 4.0.6
+ resolution: "@szmarczak/http-timer@npm:4.0.6"
+ dependencies:
+ defer-to-connect: ^2.0.0
+ checksum: c29df3bcec6fc3bdec2b17981d89d9c9fc9bd7d0c9bcfe92821dc533f4440bc890ccde79971838b4ceed1921d456973c4180d7175ee1d0023ad0562240a58d95
+ languageName: node
+ linkType: hard
+
"@tanstack/react-table@npm:^8.5.22":
version: 8.7.9
resolution: "@tanstack/react-table@npm:8.7.9"
@@ -13027,6 +13279,23 @@ __metadata:
languageName: node
linkType: hard
+"@tufjs/canonical-json@npm:2.0.0":
+ version: 2.0.0
+ resolution: "@tufjs/canonical-json@npm:2.0.0"
+ checksum: cc719a1d0d0ae1aa1ba551a82c87dcbefac088e433c03a3d8a1d547ea721350e47dab4ab5b0fca40d5c7ab1f4882e72edc39c9eae15bf47c45c43bcb6ee39f4f
+ languageName: node
+ linkType: hard
+
+"@tufjs/models@npm:2.0.1":
+ version: 2.0.1
+ resolution: "@tufjs/models@npm:2.0.1"
+ dependencies:
+ "@tufjs/canonical-json": 2.0.0
+ minimatch: ^9.0.4
+ checksum: 7a7370ac8dc3c18b66dddca3269d9b9282d891f1c289beb2060649fd50ef74eaa6494bd6d6b3edfe11f0f1efa14ec19c5ec819c7cf1871476c9e002115ffb9a7
+ languageName: node
+ linkType: hard
+
"@types/accept-language-parser@npm:^1.5.3":
version: 1.5.3
resolution: "@types/accept-language-parser@npm:1.5.3"
@@ -13126,6 +13395,18 @@ __metadata:
languageName: node
linkType: hard
+"@types/cacheable-request@npm:^6.0.1":
+ version: 6.0.3
+ resolution: "@types/cacheable-request@npm:6.0.3"
+ dependencies:
+ "@types/http-cache-semantics": "*"
+ "@types/keyv": ^3.1.4
+ "@types/node": "*"
+ "@types/responselike": ^1.0.0
+ checksum: d9b26403fe65ce6b0cb3720b7030104c352bcb37e4fac2a7089a25a97de59c355fa08940658751f2f347a8512aa9d18fdb66ab3ade835975b2f454f2d5befbd9
+ languageName: node
+ linkType: hard
+
"@types/center-align@npm:^1.0.0":
version: 1.0.0
resolution: "@types/center-align@npm:1.0.0"
@@ -13190,6 +13471,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/execa@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "@types/execa@npm:2.0.0"
+ dependencies:
+ execa: "*"
+ checksum: 7c01bd5b0dfd87055548a9cd5290620b11853d385b0adfbf12674edd3322016d6198fde4c80bd0047f2b93424de4e4e299a93bcbe9ec227379d4bc4e906ebdd0
+ languageName: node
+ linkType: hard
+
"@types/extract-zip@npm:^1.6.2":
version: 1.6.2
resolution: "@types/extract-zip@npm:1.6.2"
@@ -13312,6 +13602,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/http-cache-semantics@npm:*":
+ version: 4.0.4
+ resolution: "@types/http-cache-semantics@npm:4.0.4"
+ checksum: 7f4dd832e618bc1e271be49717d7b4066d77c2d4eed5b81198eb987e532bb3e1c7e02f45d77918185bad936f884b700c10cebe06305f50400f382ab75055f9e8
+ languageName: node
+ linkType: hard
+
"@types/http-proxy@npm:^1.17.8":
version: 1.17.9
resolution: "@types/http-proxy@npm:1.17.9"
@@ -13473,7 +13770,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/keyv@npm:^3.1.1":
+"@types/keyv@npm:^3.1.1, @types/keyv@npm:^3.1.4":
version: 3.1.4
resolution: "@types/keyv@npm:3.1.4"
dependencies:
@@ -13571,7 +13868,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/node@npm:*, @types/node@npm:>= 8, @types/node@npm:>=12.12.47, @types/node@npm:>=6":
+"@types/node@npm:*, @types/node@npm:>= 8, @types/node@npm:>=6":
version: 18.13.0
resolution: "@types/node@npm:18.13.0"
checksum: 4ea10f8802848b01672bce938f678b6774ca2cee0c9774f12275ab064ae07818419c3e2e41d6257ce7ba846d1ea26c63214aa1dfa4166fa3746291752b8c6416
@@ -13920,6 +14217,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/semver@npm:^7.5.6":
+ version: 7.5.8
+ resolution: "@types/semver@npm:7.5.8"
+ checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663
+ languageName: node
+ linkType: hard
+
"@types/sharp@npm:^0.32.0":
version: 0.32.0
resolution: "@types/sharp@npm:0.32.0"
@@ -13980,6 +14284,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/tmp@npm:^0.2.6":
+ version: 0.2.6
+ resolution: "@types/tmp@npm:0.2.6"
+ checksum: 0b24bb6040cc289440a609e10ec99a704978c890a5828ff151576489090b2257ce2e2570b0f320ace9c8099c3642ea6221fbdf6d8f2e22b7cd1f4fbf6e989e3e
+ languageName: node
+ linkType: hard
+
"@types/tough-cookie@npm:*":
version: 4.0.2
resolution: "@types/tough-cookie@npm:4.0.2"
@@ -14949,6 +15260,7 @@ __metadata:
"@babel/cli": ^7.22.6
"@babel/core": ^7.22.8
"@webiny/api-elasticsearch-tasks": 0.0.0
+ "@webiny/api-headless-cms-es-tasks": 0.0.0
"@webiny/cli": 0.0.0
"@webiny/plugins": 0.0.0
"@webiny/project-utils": 0.0.0
@@ -14966,6 +15278,7 @@ __metadata:
"@babel/cli": ^7.22.6
"@babel/core": ^7.22.8
"@webiny/api-elasticsearch-tasks": 0.0.0
+ "@webiny/api-headless-cms-es-tasks": 0.0.0
"@webiny/cli": 0.0.0
"@webiny/plugins": 0.0.0
"@webiny/project-utils": 0.0.0
@@ -15356,6 +15669,35 @@ __metadata:
languageName: unknown
linkType: soft
+"@webiny/api-headless-cms-es-tasks@0.0.0, @webiny/api-headless-cms-es-tasks@workspace:packages/api-headless-cms-es-tasks":
+ version: 0.0.0-use.local
+ resolution: "@webiny/api-headless-cms-es-tasks@workspace:packages/api-headless-cms-es-tasks"
+ dependencies:
+ "@babel/cli": ^7.22.6
+ "@babel/core": ^7.22.8
+ "@babel/preset-env": ^7.22.7
+ "@faker-js/faker": ^8.4.1
+ "@webiny/api": 0.0.0
+ "@webiny/api-elasticsearch": 0.0.0
+ "@webiny/api-headless-cms": 0.0.0
+ "@webiny/api-headless-cms-ddb-es": 0.0.0
+ "@webiny/api-i18n": 0.0.0
+ "@webiny/api-security": 0.0.0
+ "@webiny/api-tenancy": 0.0.0
+ "@webiny/api-wcp": 0.0.0
+ "@webiny/cli": 0.0.0
+ "@webiny/handler": 0.0.0
+ "@webiny/handler-aws": 0.0.0
+ "@webiny/handler-graphql": 0.0.0
+ "@webiny/plugins": 0.0.0
+ "@webiny/project-utils": 0.0.0
+ "@webiny/tasks": 0.0.0
+ "@webiny/utils": 0.0.0
+ ttypescript: ^1.5.13
+ typescript: ^4.7.4
+ languageName: unknown
+ linkType: soft
+
"@webiny/api-headless-cms@0.0.0, @webiny/api-headless-cms@workspace:packages/api-headless-cms":
version: 0.0.0-use.local
resolution: "@webiny/api-headless-cms@workspace:packages/api-headless-cms"
@@ -18413,6 +18755,7 @@ __metadata:
resolution: "@webiny/migrations@workspace:packages/migrations"
dependencies:
"@elastic/elasticsearch": 7.12.0
+ "@types/execa": ^2.0.0
"@webiny/api-elasticsearch": 0.0.0
"@webiny/api-headless-cms": 0.0.0
"@webiny/api-headless-cms-ddb-es": 0.0.0
@@ -19174,6 +19517,13 @@ __metadata:
languageName: node
linkType: hard
+"abbrev@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "abbrev@npm:2.0.0"
+ checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36
+ languageName: node
+ linkType: hard
+
"abort-controller@npm:^3.0.0":
version: 3.0.0
resolution: "abort-controller@npm:3.0.0"
@@ -20885,7 +21235,25 @@ __metadata:
languageName: node
linkType: hard
-"aws-sdk@npm:^2.0.0, aws-sdk@npm:^2.814.0":
+"aws-sdk@npm:^2.0.0":
+ version: 2.1632.0
+ resolution: "aws-sdk@npm:2.1632.0"
+ dependencies:
+ buffer: 4.9.2
+ events: 1.1.1
+ ieee754: 1.1.13
+ jmespath: 0.16.0
+ querystring: 0.2.0
+ sax: 1.2.1
+ url: 0.10.3
+ util: ^0.12.4
+ uuid: 8.0.0
+ xml2js: 0.6.2
+ checksum: 23a08c09b78443feee2ccbed0e34d393c5fc44290681261563e4589e592f6d2c20999327e959483dbf65737039ebf8a2d7ef83b7ef44a474a299c636140e6803
+ languageName: node
+ linkType: hard
+
+"aws-sdk@npm:^2.814.0":
version: 2.1310.0
resolution: "aws-sdk@npm:2.1310.0"
dependencies:
@@ -21647,6 +22015,18 @@ __metadata:
languageName: node
linkType: hard
+"bin-links@npm:^4.0.4":
+ version: 4.0.4
+ resolution: "bin-links@npm:4.0.4"
+ dependencies:
+ cmd-shim: ^6.0.0
+ npm-normalize-package-bin: ^3.0.0
+ read-cmd-shim: ^4.0.0
+ write-file-atomic: ^5.0.0
+ checksum: 9fca1fddaa3c1c9f7efd6fd7a6d991e3d8f6aaa9de5d0b9355469c2c594d8d06c9b2e0519bb0304202c14ddbe832d27b6d419d55cea4340e2c26116f9190e5c9
+ languageName: node
+ linkType: hard
+
"binary-extensions@npm:^1.0.0":
version: 1.13.1
resolution: "binary-extensions@npm:1.13.1"
@@ -22402,6 +22782,26 @@ __metadata:
languageName: node
linkType: hard
+"cacache@npm:^18.0.0, cacache@npm:^18.0.3":
+ version: 18.0.3
+ resolution: "cacache@npm:18.0.3"
+ dependencies:
+ "@npmcli/fs": ^3.1.0
+ fs-minipass: ^3.0.0
+ glob: ^10.2.2
+ lru-cache: ^10.0.1
+ minipass: ^7.0.3
+ minipass-collect: ^2.0.1
+ minipass-flush: ^1.0.5
+ minipass-pipeline: ^1.2.4
+ p-map: ^4.0.0
+ ssri: ^10.0.0
+ tar: ^6.1.11
+ unique-filename: ^3.0.0
+ checksum: b717fd9b36e9c3279bfde4545c3a8f6d5a539b084ee26a9504d48f83694beb724057d26e090b97540f9cc62bea18b9f6cf671c50e18fb7dac60eda9db691714f
+ languageName: node
+ linkType: hard
+
"cache-base@npm:^1.0.1":
version: 1.0.1
resolution: "cache-base@npm:1.0.1"
@@ -22419,6 +22819,13 @@ __metadata:
languageName: node
linkType: hard
+"cacheable-lookup@npm:^5.0.3":
+ version: 5.0.4
+ resolution: "cacheable-lookup@npm:5.0.4"
+ checksum: 763e02cf9196bc9afccacd8c418d942fc2677f22261969a4c2c2e760fa44a2351a81557bd908291c3921fe9beb10b976ba8fa50c5ca837c5a0dd945f16468f2d
+ languageName: node
+ linkType: hard
+
"cacheable-request@npm:^6.0.0":
version: 6.1.0
resolution: "cacheable-request@npm:6.1.0"
@@ -22434,6 +22841,21 @@ __metadata:
languageName: node
linkType: hard
+"cacheable-request@npm:^7.0.2":
+ version: 7.0.4
+ resolution: "cacheable-request@npm:7.0.4"
+ dependencies:
+ clone-response: ^1.0.2
+ get-stream: ^5.1.0
+ http-cache-semantics: ^4.0.0
+ keyv: ^4.0.0
+ lowercase-keys: ^2.0.0
+ normalize-url: ^6.0.1
+ responselike: ^2.0.0
+ checksum: 0de9df773fd4e7dd9bd118959878f8f2163867e2e1ab3575ffbecbe6e75e80513dd0c68ba30005e5e5a7b377cc6162bbc00ab1db019bb4e9cb3c2f3f7a6f1ee4
+ languageName: node
+ linkType: hard
+
"cachedir@npm:^1.1.0":
version: 1.3.0
resolution: "cachedir@npm:1.3.0"
@@ -23176,6 +23598,13 @@ __metadata:
languageName: node
linkType: hard
+"cmd-shim@npm:^6.0.0":
+ version: 6.0.3
+ resolution: "cmd-shim@npm:6.0.3"
+ checksum: bd79ac1505fea77cba0caf271c16210ebfbe50f348a1907f4700740876ab2157e00882b9baa685a9fcf9bc92e08a87e21bd757f45a6938f00290422f80f7d27a
+ languageName: node
+ linkType: hard
+
"co@npm:^4.6.0":
version: 4.6.0
resolution: "co@npm:4.6.0"
@@ -23491,6 +23920,13 @@ __metadata:
languageName: node
linkType: hard
+"common-ancestor-path@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "common-ancestor-path@npm:1.0.1"
+ checksum: 1d2e4186067083d8cc413f00fc2908225f04ae4e19417ded67faa6494fb313c4fcd5b28a52326d1a62b466e2b3a4325e92c31133c5fee628cdf8856b3a57c3d7
+ languageName: node
+ linkType: hard
+
"common-path-prefix@npm:^3.0.0":
version: 3.0.0
resolution: "common-path-prefix@npm:3.0.0"
@@ -24210,7 +24646,7 @@ __metadata:
load-json-file: 6.2.0
node-fetch: ^2.6.1
os: 0.1.1
- p-retry: ^4.6.0
+ p-retry: ^4.6.2
rimraf: 3.0.2
semver: ^7.3.5
uuid: 8.3.2
@@ -25359,6 +25795,13 @@ __metadata:
languageName: node
linkType: hard
+"defer-to-connect@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "defer-to-connect@npm:2.0.1"
+ checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b
+ languageName: node
+ linkType: hard
+
"deferred-leveldown@npm:~5.3.0":
version: 5.3.0
resolution: "deferred-leveldown@npm:5.3.0"
@@ -27499,6 +27942,26 @@ __metadata:
languageName: node
linkType: hard
+"execa@npm:*":
+ version: 9.1.0
+ resolution: "execa@npm:9.1.0"
+ dependencies:
+ "@sindresorhus/merge-streams": ^4.0.0
+ cross-spawn: ^7.0.3
+ figures: ^6.1.0
+ get-stream: ^9.0.0
+ human-signals: ^7.0.0
+ is-plain-obj: ^4.1.0
+ is-stream: ^4.0.1
+ npm-run-path: ^5.2.0
+ pretty-ms: ^9.0.0
+ signal-exit: ^4.1.0
+ strip-final-newline: ^4.0.0
+ yoctocolors: ^2.0.0
+ checksum: 3807e5e4a00e117ee5bc85b1860e21ee763de48b0436a14f170342702b5fbb287f432e6418a10072f9b32bd59dfa367fd038431ba9e025c0697a971e8aaa80fc
+ languageName: node
+ linkType: hard
+
"execa@npm:4.1.0":
version: 4.1.0
resolution: "execa@npm:4.1.0"
@@ -27687,6 +28150,13 @@ __metadata:
languageName: node
linkType: hard
+"exponential-backoff@npm:^3.1.1":
+ version: 3.1.1
+ resolution: "exponential-backoff@npm:3.1.1"
+ checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48
+ languageName: node
+ linkType: hard
+
"express@npm:4.17.1":
version: 4.17.1
resolution: "express@npm:4.17.1"
@@ -28194,6 +28664,18 @@ __metadata:
languageName: node
linkType: hard
+"fdir@npm:^6.1.1":
+ version: 6.1.1
+ resolution: "fdir@npm:6.1.1"
+ peerDependencies:
+ picomatch: 3.x
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+ checksum: 2db7e261c95246ea572eaaf1c86bb32c620c3579638a4ae12f427662c4dfbb28891b36a2102c3dd691a4ff98f6ae982a9d26b3af042268238ef7fb77360d8116
+ languageName: node
+ linkType: hard
+
"fecha@npm:^2.3.3":
version: 2.3.3
resolution: "fecha@npm:2.3.3"
@@ -28236,6 +28718,15 @@ __metadata:
languageName: node
linkType: hard
+"figures@npm:^6.1.0":
+ version: 6.1.0
+ resolution: "figures@npm:6.1.0"
+ dependencies:
+ is-unicode-supported: ^2.0.0
+ checksum: 35c81239d4fa40b75c2c7c010833b0bc8861c27187e4c9388fca1d9731103ec9989b70ee3b664ef426ddd9abe02ec5f4fd973424aa8c6fd3ea5d3bf57a2d01b4
+ languageName: node
+ linkType: hard
+
"file-entry-cache@npm:^6.0.1":
version: 6.0.1
resolution: "file-entry-cache@npm:6.0.1"
@@ -29012,6 +29503,15 @@ __metadata:
languageName: node
linkType: hard
+"fs-minipass@npm:^3.0.0":
+ version: 3.0.3
+ resolution: "fs-minipass@npm:3.0.3"
+ dependencies:
+ minipass: ^7.0.3
+ checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802
+ languageName: node
+ linkType: hard
+
"fs-monkey@npm:^1.0.3":
version: 1.0.3
resolution: "fs-monkey@npm:1.0.3"
@@ -29333,6 +29833,16 @@ __metadata:
languageName: node
linkType: hard
+"get-stream@npm:^9.0.0":
+ version: 9.0.1
+ resolution: "get-stream@npm:9.0.1"
+ dependencies:
+ "@sec-ant/readable-stream": ^0.4.1
+ is-stream: ^4.0.1
+ checksum: 631df71d7bd60a7f373094d3c352e2ce412b82d30b1b0ec562e5a4aced976173a4cc0dabef019050e1aceaffb1f0e086349ab3d14377b0b7280510bd75bd3e1e
+ languageName: node
+ linkType: hard
+
"get-symbol-description@npm:^1.0.0":
version: 1.0.0
resolution: "get-symbol-description@npm:1.0.0"
@@ -29633,6 +30143,21 @@ __metadata:
languageName: node
linkType: hard
+"glob@npm:^10.2.2, glob@npm:^10.3.10":
+ version: 10.4.1
+ resolution: "glob@npm:10.4.1"
+ dependencies:
+ foreground-child: ^3.1.0
+ jackspeak: ^3.1.2
+ minimatch: ^9.0.4
+ minipass: ^7.1.2
+ path-scurry: ^1.11.1
+ bin:
+ glob: dist/esm/bin.mjs
+ checksum: 5d33c686c80bf6877f4284adf99a8c3cbb2a6eccbc92342943fe5d4b42c01d78c1881f2223d950c92a938d0f857e12e37b86a8e5483ab2141822e053b67d0dde
+ languageName: node
+ linkType: hard
+
"glob@npm:^5.0.15":
version: 5.0.15
resolution: "glob@npm:5.0.15"
@@ -29858,6 +30383,25 @@ __metadata:
languageName: node
linkType: hard
+"got@npm:^11.8.6":
+ version: 11.8.6
+ resolution: "got@npm:11.8.6"
+ dependencies:
+ "@sindresorhus/is": ^4.0.0
+ "@szmarczak/http-timer": ^4.0.5
+ "@types/cacheable-request": ^6.0.1
+ "@types/responselike": ^1.0.0
+ cacheable-lookup: ^5.0.3
+ cacheable-request: ^7.0.2
+ decompress-response: ^6.0.0
+ http2-wrapper: ^1.0.0-beta.5.2
+ lowercase-keys: ^2.0.0
+ p-cancelable: ^2.0.0
+ responselike: ^2.0.0
+ checksum: bbc783578a8d5030c8164ef7f57ce41b5ad7db2ed13371e1944bef157eeca5a7475530e07c0aaa71610d7085474d0d96222c9f4268d41db333a17e39b463f45d
+ languageName: node
+ linkType: hard
+
"got@npm:^6.3.0":
version: 6.7.1
resolution: "got@npm:6.7.1"
@@ -30344,6 +30888,15 @@ __metadata:
languageName: node
linkType: hard
+"hosted-git-info@npm:^7.0.0, hosted-git-info@npm:^7.0.2":
+ version: 7.0.2
+ resolution: "hosted-git-info@npm:7.0.2"
+ dependencies:
+ lru-cache: ^10.0.1
+ checksum: 467cf908a56556417b18e86ae3b8dee03c2360ef1d51e61c4028fe87f6f309b6ff038589c94b5666af207da9d972d5107698906aabeb78aca134641962a5c6f8
+ languageName: node
+ linkType: hard
+
"hpack.js@npm:^2.1.6":
version: 2.1.6
resolution: "hpack.js@npm:2.1.6"
@@ -30540,7 +31093,7 @@ __metadata:
languageName: node
linkType: hard
-"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0":
+"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1":
version: 4.1.1
resolution: "http-cache-semantics@npm:4.1.1"
checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236
@@ -30725,6 +31278,16 @@ __metadata:
languageName: node
linkType: hard
+"http2-wrapper@npm:^1.0.0-beta.5.2":
+ version: 1.0.3
+ resolution: "http2-wrapper@npm:1.0.3"
+ dependencies:
+ quick-lru: ^5.1.1
+ resolve-alpn: ^1.0.0
+ checksum: 74160b862ec699e3f859739101ff592d52ce1cb207b7950295bf7962e4aa1597ef709b4292c673bece9c9b300efad0559fc86c71b1409c7a1e02b7229456003e
+ languageName: node
+ linkType: hard
+
"https-browserify@npm:^1.0.0":
version: 1.0.0
resolution: "https-browserify@npm:1.0.0"
@@ -30752,7 +31315,7 @@ __metadata:
languageName: node
linkType: hard
-"https-proxy-agent@npm:^7.0.2, https-proxy-agent@npm:^7.0.3":
+"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.2, https-proxy-agent@npm:^7.0.3":
version: 7.0.4
resolution: "https-proxy-agent@npm:7.0.4"
dependencies:
@@ -30776,6 +31339,13 @@ __metadata:
languageName: node
linkType: hard
+"human-signals@npm:^7.0.0":
+ version: 7.0.0
+ resolution: "human-signals@npm:7.0.0"
+ checksum: 5e05a7dbb6d021371ddb854c58b19aa372cc616b34e8eec0d27098d699be0571e29b2b98869053d898badb9594b7ed5058642660b04fb1e41b7bd1f83e472d16
+ languageName: node
+ linkType: hard
+
"humanize-ms@npm:^1.2.1":
version: 1.2.1
resolution: "humanize-ms@npm:1.2.1"
@@ -30902,6 +31472,15 @@ __metadata:
languageName: node
linkType: hard
+"ignore-walk@npm:^6.0.4":
+ version: 6.0.5
+ resolution: "ignore-walk@npm:6.0.5"
+ dependencies:
+ minimatch: ^9.0.0
+ checksum: 06f88a53c412385ca7333276149a7e9461b7fad977c44272d854522b0d456c2aa75d832bd3980a530e2c3881126aa9cc4782b3551ca270fffc0ce7c2b4a2e199
+ languageName: node
+ linkType: hard
+
"ignore@npm:^3.3.5":
version: 3.3.10
resolution: "ignore@npm:3.3.10"
@@ -31594,6 +32173,15 @@ __metadata:
languageName: node
linkType: hard
+"is-core-module@npm:^2.8.1":
+ version: 2.13.1
+ resolution: "is-core-module@npm:2.13.1"
+ dependencies:
+ hasown: ^2.0.0
+ checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c
+ languageName: node
+ linkType: hard
+
"is-data-descriptor@npm:^0.1.4":
version: 0.1.4
resolution: "is-data-descriptor@npm:0.1.4"
@@ -31967,6 +32555,13 @@ __metadata:
languageName: node
linkType: hard
+"is-plain-obj@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "is-plain-obj@npm:4.1.0"
+ checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce
+ languageName: node
+ linkType: hard
+
"is-plain-object@npm:5.0.0, is-plain-object@npm:^5.0.0":
version: 5.0.0
resolution: "is-plain-object@npm:5.0.0"
@@ -32095,6 +32690,13 @@ __metadata:
languageName: node
linkType: hard
+"is-stream@npm:^4.0.1":
+ version: 4.0.1
+ resolution: "is-stream@npm:4.0.1"
+ checksum: cbea3f1fc271b21ceb228819d0c12a0965a02b57f39423925f99530b4eb86935235f258f06310b67cd02b2d10b49e9a0998f5ececf110ab7d3760bae4055ad23
+ languageName: node
+ linkType: hard
+
"is-string@npm:^1.0.5, is-string@npm:^1.0.7":
version: 1.0.7
resolution: "is-string@npm:1.0.7"
@@ -32149,6 +32751,13 @@ __metadata:
languageName: node
linkType: hard
+"is-unicode-supported@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "is-unicode-supported@npm:2.0.0"
+ checksum: 000b80639dedaf59a385f1c0a57f97a4d1435e0723716f24cc19ad94253a7a0a9f838bdc9ac49b10a29ac93b01f52ae9b2ed358a8876caf1eb74d73b4ede92b2
+ languageName: node
+ linkType: hard
+
"is-utf8@npm:^0.2.0":
version: 0.2.1
resolution: "is-utf8@npm:0.2.1"
@@ -32240,6 +32849,13 @@ __metadata:
languageName: node
linkType: hard
+"isexe@npm:^3.1.1":
+ version: 3.1.1
+ resolution: "isexe@npm:3.1.1"
+ checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e
+ languageName: node
+ linkType: hard
+
"isnumeric@npm:^0.3.3":
version: 0.3.3
resolution: "isnumeric@npm:0.3.3"
@@ -32399,6 +33015,19 @@ __metadata:
languageName: node
linkType: hard
+"jackspeak@npm:^3.1.2":
+ version: 3.1.2
+ resolution: "jackspeak@npm:3.1.2"
+ dependencies:
+ "@isaacs/cliui": ^8.0.2
+ "@pkgjs/parseargs": ^0.11.0
+ dependenciesMeta:
+ "@pkgjs/parseargs":
+ optional: true
+ checksum: 134276d5f785c518930701a0dcba1f3b0e9ce3e5b1c3e300898e2ae0bbd9b5195088b77252bf2110768de072c426e9e39f47e13912b0b002da4a3f4ff6e16eac
+ languageName: node
+ linkType: hard
+
"jake@npm:^10.8.5":
version: 10.8.5
resolution: "jake@npm:10.8.5"
@@ -33301,6 +33930,13 @@ __metadata:
languageName: node
linkType: hard
+"json-buffer@npm:3.0.1":
+ version: 3.0.1
+ resolution: "json-buffer@npm:3.0.1"
+ checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581
+ languageName: node
+ linkType: hard
+
"json-parse-better-errors@npm:^1.0.0, json-parse-better-errors@npm:^1.0.1, json-parse-better-errors@npm:^1.0.2":
version: 1.0.2
resolution: "json-parse-better-errors@npm:1.0.2"
@@ -33315,6 +33951,13 @@ __metadata:
languageName: node
linkType: hard
+"json-parse-even-better-errors@npm:^3.0.0, json-parse-even-better-errors@npm:^3.0.2":
+ version: 3.0.2
+ resolution: "json-parse-even-better-errors@npm:3.0.2"
+ checksum: 6f04ea6c9ccb783630a59297959247e921cc90b917b8351197ca7fd058fccc7079268fd9362be21ba876fc26aa5039369dd0a2280aae49aae425784794a94927
+ languageName: node
+ linkType: hard
+
"json-schema-traverse@npm:^0.4.1":
version: 0.4.1
resolution: "json-schema-traverse@npm:0.4.1"
@@ -33343,6 +33986,13 @@ __metadata:
languageName: node
linkType: hard
+"json-stringify-nice@npm:^1.1.4":
+ version: 1.1.4
+ resolution: "json-stringify-nice@npm:1.1.4"
+ checksum: 6ddf781148b46857ab04e97f47be05f14c4304b86eb5478369edbeacd070c21c697269964b982fc977e8989d4c59091103b1d9dc291aba40096d6cbb9a392b72
+ languageName: node
+ linkType: hard
+
"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1":
version: 5.0.1
resolution: "json-stringify-safe@npm:5.0.1"
@@ -33557,6 +34207,20 @@ __metadata:
languageName: node
linkType: hard
+"just-diff-apply@npm:^5.2.0":
+ version: 5.5.0
+ resolution: "just-diff-apply@npm:5.5.0"
+ checksum: ed6bbd59781542ccb786bd843038e4591e8390aa788075beb69d358051f68fbeb122bda050b7f42515d51fb64b907d5c7bea694a0543b87b24ce406cfb5f5bfa
+ languageName: node
+ linkType: hard
+
+"just-diff@npm:^6.0.0":
+ version: 6.0.2
+ resolution: "just-diff@npm:6.0.2"
+ checksum: 1a0c7524f640cb88ab013862733e710f840927834208fd3b85cbc5da2ced97acc75e7dcfe493268ac6a6514c51dd8624d2fd9d057050efba3c02b81a6dcb7ff9
+ languageName: node
+ linkType: hard
+
"just-extend@npm:^4.0.2":
version: 4.2.1
resolution: "just-extend@npm:4.2.1"
@@ -33630,6 +34294,15 @@ __metadata:
languageName: node
linkType: hard
+"keyv@npm:^4.0.0":
+ version: 4.5.4
+ resolution: "keyv@npm:4.5.4"
+ dependencies:
+ json-buffer: 3.0.1
+ checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72
+ languageName: node
+ linkType: hard
+
"kind-of@npm:^2.0.1":
version: 2.0.1
resolution: "kind-of@npm:2.0.1"
@@ -34659,6 +35332,13 @@ __metadata:
languageName: node
linkType: hard
+"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.2.2":
+ version: 10.2.2
+ resolution: "lru-cache@npm:10.2.2"
+ checksum: 98e8fc93691c546f719a76103ef2bee5a3ac823955c755a47641ec41f8c7fafa1baeaba466937cc1cbfa9cfd47e03536d10e2db3158a64ad91ff3a58a32c893e
+ languageName: node
+ linkType: hard
+
"lru-cache@npm:^4.0.1":
version: 4.1.5
resolution: "lru-cache@npm:4.1.5"
@@ -34815,6 +35495,26 @@ __metadata:
languageName: node
linkType: hard
+"make-fetch-happen@npm:^13.0.0, make-fetch-happen@npm:^13.0.1":
+ version: 13.0.1
+ resolution: "make-fetch-happen@npm:13.0.1"
+ dependencies:
+ "@npmcli/agent": ^2.0.0
+ cacache: ^18.0.0
+ http-cache-semantics: ^4.1.1
+ is-lambda: ^1.0.1
+ minipass: ^7.0.2
+ minipass-fetch: ^3.0.0
+ minipass-flush: ^1.0.5
+ minipass-pipeline: ^1.2.4
+ negotiator: ^0.6.3
+ proc-log: ^4.2.0
+ promise-retry: ^2.0.1
+ ssri: ^10.0.0
+ checksum: 5c9fad695579b79488fa100da05777213dd9365222f85e4757630f8dd2a21a79ddd3206c78cfd6f9b37346819681782b67900ac847a57cf04190f52dda5343fd
+ languageName: node
+ linkType: hard
+
"make-fetch-happen@npm:^5.0.0":
version: 5.0.2
resolution: "make-fetch-happen@npm:5.0.2"
@@ -35504,6 +36204,15 @@ __metadata:
languageName: node
linkType: hard
+"minimatch@npm:^9.0.0, minimatch@npm:^9.0.4":
+ version: 9.0.4
+ resolution: "minimatch@npm:9.0.4"
+ dependencies:
+ brace-expansion: ^2.0.1
+ checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5
+ languageName: node
+ linkType: hard
+
"minimatch@npm:^9.0.1":
version: 9.0.3
resolution: "minimatch@npm:9.0.3"
@@ -35573,6 +36282,15 @@ __metadata:
languageName: node
linkType: hard
+"minipass-collect@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "minipass-collect@npm:2.0.1"
+ dependencies:
+ minipass: ^7.0.3
+ checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342
+ languageName: node
+ linkType: hard
+
"minipass-fetch@npm:^2.0.3":
version: 2.1.2
resolution: "minipass-fetch@npm:2.1.2"
@@ -35588,6 +36306,21 @@ __metadata:
languageName: node
linkType: hard
+"minipass-fetch@npm:^3.0.0":
+ version: 3.0.5
+ resolution: "minipass-fetch@npm:3.0.5"
+ dependencies:
+ encoding: ^0.1.13
+ minipass: ^7.0.3
+ minipass-sized: ^1.0.3
+ minizlib: ^2.1.2
+ dependenciesMeta:
+ encoding:
+ optional: true
+ checksum: 8047d273236157aab27ab7cd8eab7ea79e6ecd63e8f80c3366ec076cb9a0fed550a6935bab51764369027c414647fd8256c2a20c5445fb250c483de43350de83
+ languageName: node
+ linkType: hard
+
"minipass-flush@npm:^1.0.5":
version: 1.0.5
resolution: "minipass-flush@npm:1.0.5"
@@ -35597,6 +36330,16 @@ __metadata:
languageName: node
linkType: hard
+"minipass-json-stream@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "minipass-json-stream@npm:1.0.1"
+ dependencies:
+ jsonparse: ^1.3.1
+ minipass: ^3.0.0
+ checksum: 791b696a27d1074c4c08dab1bf5a9f3201145c2933e428f45d880467bce12c60de4703203d2928de4b162d0ae77b0bb4b55f96cb846645800aa0eb4919b3e796
+ languageName: node
+ linkType: hard
+
"minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4":
version: 1.2.4
resolution: "minipass-pipeline@npm:1.2.4"
@@ -35648,6 +36391,13 @@ __metadata:
languageName: node
linkType: hard
+"minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2":
+ version: 7.1.2
+ resolution: "minipass@npm:7.1.2"
+ checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3
+ languageName: node
+ linkType: hard
+
"minizlib@npm:^1.3.3":
version: 1.3.3
resolution: "minizlib@npm:1.3.3"
@@ -36289,6 +37039,26 @@ __metadata:
languageName: node
linkType: hard
+"node-gyp@npm:^10.0.0":
+ version: 10.1.0
+ resolution: "node-gyp@npm:10.1.0"
+ dependencies:
+ env-paths: ^2.2.0
+ exponential-backoff: ^3.1.1
+ glob: ^10.3.10
+ graceful-fs: ^4.2.6
+ make-fetch-happen: ^13.0.0
+ nopt: ^7.0.0
+ proc-log: ^3.0.0
+ semver: ^7.3.5
+ tar: ^6.1.2
+ which: ^4.0.0
+ bin:
+ node-gyp: bin/node-gyp.js
+ checksum: 72e2ab4b23fc32007a763da94018f58069fc0694bf36115d49a2b195c8831e12cf5dd1e7a3718fa85c06969aedf8fc126722d3b672ec1cb27e06ed33caee3c60
+ languageName: node
+ linkType: hard
+
"node-gyp@npm:^5.0.2":
version: 5.1.1
resolution: "node-gyp@npm:5.1.1"
@@ -36433,6 +37203,17 @@ __metadata:
languageName: node
linkType: hard
+"nopt@npm:^7.0.0, nopt@npm:^7.2.1":
+ version: 7.2.1
+ resolution: "nopt@npm:7.2.1"
+ dependencies:
+ abbrev: ^2.0.0
+ bin:
+ nopt: bin/nopt.js
+ checksum: 6fa729cc77ce4162cfad8abbc9ba31d4a0ff6850c3af61d59b505653bef4781ec059f8890ecfe93ee8aa0c511093369cca88bfc998101616a2904e715bbbb7c9
+ languageName: node
+ linkType: hard
+
"nopt@npm:~1.0.10":
version: 1.0.10
resolution: "nopt@npm:1.0.10"
@@ -36486,6 +37267,18 @@ __metadata:
languageName: node
linkType: hard
+"normalize-package-data@npm:^6.0.0":
+ version: 6.0.1
+ resolution: "normalize-package-data@npm:6.0.1"
+ dependencies:
+ hosted-git-info: ^7.0.0
+ is-core-module: ^2.8.1
+ semver: ^7.3.5
+ validate-npm-package-license: ^3.0.4
+ checksum: 4f6bca00b5092b824e1d4a28fb47052b41afaaebabfd0700e47f130cac619d60668aa6ff34dfa9bccc1b06c7adcef44c34a565576b63b578e1e35b3fc67c22ca
+ languageName: node
+ linkType: hard
+
"normalize-path@npm:^2.0.1, normalize-path@npm:^2.1.1":
version: 2.1.1
resolution: "normalize-path@npm:2.1.1"
@@ -36544,6 +37337,15 @@ __metadata:
languageName: node
linkType: hard
+"npm-bundled@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "npm-bundled@npm:3.0.1"
+ dependencies:
+ npm-normalize-package-bin: ^3.0.0
+ checksum: 1f4f7307d0ff2fbd31638689490f1fd673a4540cd1d027c7c5d15e484c71d63c4b27979944b6f8738035260cf5a5477ebaae75b08818420508e7cf317d71416e
+ languageName: node
+ linkType: hard
+
"npm-conf@npm:^1.1.0":
version: 1.1.3
resolution: "npm-conf@npm:1.1.3"
@@ -36554,6 +37356,15 @@ __metadata:
languageName: node
linkType: hard
+"npm-install-checks@npm:^6.0.0, npm-install-checks@npm:^6.2.0":
+ version: 6.3.0
+ resolution: "npm-install-checks@npm:6.3.0"
+ dependencies:
+ semver: ^7.1.1
+ checksum: 6c20dadb878a0d2f1f777405217b6b63af1299d0b43e556af9363ee6eefaa98a17dfb7b612a473a473e96faf7e789c58b221e0d8ffdc1d34903c4f71618df3b4
+ languageName: node
+ linkType: hard
+
"npm-lifecycle@npm:^3.1.2":
version: 3.1.5
resolution: "npm-lifecycle@npm:3.1.5"
@@ -36577,6 +37388,25 @@ __metadata:
languageName: node
linkType: hard
+"npm-normalize-package-bin@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "npm-normalize-package-bin@npm:3.0.1"
+ checksum: de416d720ab22137a36292ff8a333af499ea0933ef2320a8c6f56a73b0f0448227fec4db5c890d702e26d21d04f271415eab6580b5546456861cc0c19498a4bf
+ languageName: node
+ linkType: hard
+
+"npm-package-arg@npm:^11.0.0, npm-package-arg@npm:^11.0.2":
+ version: 11.0.2
+ resolution: "npm-package-arg@npm:11.0.2"
+ dependencies:
+ hosted-git-info: ^7.0.0
+ proc-log: ^4.0.0
+ semver: ^7.3.5
+ validate-npm-package-name: ^5.0.0
+ checksum: cb78da54d42373fc87fcecfc68e74b10be02fea940becddf9fdcc8941334a5d57b5e867da2647e8b74880e1dc2b212d0fcc963fafd41cbccca8da3a1afef5b12
+ languageName: node
+ linkType: hard
+
"npm-package-arg@npm:^4.0.0 || ^5.0.0 || ^6.0.0, npm-package-arg@npm:^6.0.0, npm-package-arg@npm:^6.1.0":
version: 6.1.1
resolution: "npm-package-arg@npm:6.1.1"
@@ -36600,6 +37430,15 @@ __metadata:
languageName: node
linkType: hard
+"npm-packlist@npm:^8.0.0":
+ version: 8.0.2
+ resolution: "npm-packlist@npm:8.0.2"
+ dependencies:
+ ignore-walk: ^6.0.4
+ checksum: c75ae66b285503409e07878274d0580c1915e8db3a52539e7588a00d8c7c27b5c3c8459906d26142ffd772f0e8f291e9aa4ea076bb44a4ab0ba7e0f25b46423b
+ languageName: node
+ linkType: hard
+
"npm-path@npm:^2.0.2":
version: 2.0.4
resolution: "npm-path@npm:2.0.4"
@@ -36622,6 +37461,34 @@ __metadata:
languageName: node
linkType: hard
+"npm-pick-manifest@npm:^9.0.0, npm-pick-manifest@npm:^9.0.1":
+ version: 9.0.1
+ resolution: "npm-pick-manifest@npm:9.0.1"
+ dependencies:
+ npm-install-checks: ^6.0.0
+ npm-normalize-package-bin: ^3.0.0
+ npm-package-arg: ^11.0.0
+ semver: ^7.3.5
+ checksum: acd53d99cb72b39dd2e6aefe32c08a0ba969622911865ff86555dba0cd6e67ca43ae72fd1962084e4344d88596f4faf75128b70347beb29613720445d4063c87
+ languageName: node
+ linkType: hard
+
+"npm-registry-fetch@npm:^17.0.0, npm-registry-fetch@npm:^17.0.1":
+ version: 17.0.1
+ resolution: "npm-registry-fetch@npm:17.0.1"
+ dependencies:
+ "@npmcli/redact": ^2.0.0
+ make-fetch-happen: ^13.0.0
+ minipass: ^7.0.2
+ minipass-fetch: ^3.0.0
+ minipass-json-stream: ^1.0.1
+ minizlib: ^2.1.2
+ npm-package-arg: ^11.0.0
+ proc-log: ^4.0.0
+ checksum: 4a53e96969991f62fa6b5b0a47a6a0288282003ab41e6e752bc0c8ba34a284f216ae290952a032bf143fd6827faef0f204cec32f33e2d0cb348db850dd95d09d
+ languageName: node
+ linkType: hard
+
"npm-run-path@npm:^2.0.0":
version: 2.0.2
resolution: "npm-run-path@npm:2.0.2"
@@ -36640,6 +37507,15 @@ __metadata:
languageName: node
linkType: hard
+"npm-run-path@npm:^5.2.0":
+ version: 5.3.0
+ resolution: "npm-run-path@npm:5.3.0"
+ dependencies:
+ path-key: ^4.0.0
+ checksum: ae8e7a89da9594fb9c308f6555c73f618152340dcaae423e5fb3620026fefbec463618a8b761920382d666fa7a2d8d240b6fe320e8a6cdd54dc3687e2b659d25
+ languageName: node
+ linkType: hard
+
"npm-which@npm:^3.0.1":
version: 3.0.1
resolution: "npm-which@npm:3.0.1"
@@ -37452,7 +38328,7 @@ __metadata:
languageName: node
linkType: hard
-"p-retry@npm:^4.5.0, p-retry@npm:^4.6.0, p-retry@npm:^4.6.2":
+"p-retry@npm:^4.5.0, p-retry@npm:^4.6.2":
version: 4.6.2
resolution: "p-retry@npm:4.6.2"
dependencies:
@@ -37555,6 +38431,33 @@ __metadata:
languageName: node
linkType: hard
+"pacote@npm:^18.0.0, pacote@npm:^18.0.6":
+ version: 18.0.6
+ resolution: "pacote@npm:18.0.6"
+ dependencies:
+ "@npmcli/git": ^5.0.0
+ "@npmcli/installed-package-contents": ^2.0.1
+ "@npmcli/package-json": ^5.1.0
+ "@npmcli/promise-spawn": ^7.0.0
+ "@npmcli/run-script": ^8.0.0
+ cacache: ^18.0.0
+ fs-minipass: ^3.0.0
+ minipass: ^7.0.2
+ npm-package-arg: ^11.0.0
+ npm-packlist: ^8.0.0
+ npm-pick-manifest: ^9.0.0
+ npm-registry-fetch: ^17.0.0
+ proc-log: ^4.0.0
+ promise-retry: ^2.0.1
+ sigstore: ^2.2.0
+ ssri: ^10.0.0
+ tar: ^6.1.11
+ bin:
+ pacote: bin/index.js
+ checksum: a28a7aa0f4e1375d3f11917e5982e576611aa9057999e7b3a7fd18706e43d6ae4ab34b1002dc0a9821df95c3136dec6d2b6b72cfc7b02afcc1273cec006dea39
+ languageName: node
+ linkType: hard
+
"pad-right@npm:^0.2.2":
version: 0.2.2
resolution: "pad-right@npm:0.2.2"
@@ -37628,6 +38531,17 @@ __metadata:
languageName: node
linkType: hard
+"parse-conflict-json@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "parse-conflict-json@npm:3.0.1"
+ dependencies:
+ json-parse-even-better-errors: ^3.0.0
+ just-diff: ^6.0.0
+ just-diff-apply: ^5.2.0
+ checksum: d8d2656bc02d4df36846366baec36b419da2fe944e31298719a4d28d28f772aa7cad2a69d01f6f329918e7c298ac481d1e6a9138d62d5662d5620a74f794af8f
+ languageName: node
+ linkType: hard
+
"parse-entities@npm:^1.1.2":
version: 1.2.2
resolution: "parse-entities@npm:1.2.2"
@@ -37692,6 +38606,13 @@ __metadata:
languageName: node
linkType: hard
+"parse-ms@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "parse-ms@npm:4.0.0"
+ checksum: 673c801d9f957ff79962d71ed5a24850163f4181a90dd30c4e3666b3a804f53b77f1f0556792e8b2adbb5d58757907d1aa51d7d7dc75997c2a56d72937cbc8b7
+ languageName: node
+ linkType: hard
+
"parse-passwd@npm:^1.0.0":
version: 1.0.0
resolution: "parse-passwd@npm:1.0.0"
@@ -37859,6 +38780,13 @@ __metadata:
languageName: node
linkType: hard
+"path-key@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "path-key@npm:4.0.0"
+ checksum: 8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7
+ languageName: node
+ linkType: hard
+
"path-parse@npm:^1.0.6, path-parse@npm:^1.0.7":
version: 1.0.7
resolution: "path-parse@npm:1.0.7"
@@ -37876,6 +38804,16 @@ __metadata:
languageName: node
linkType: hard
+"path-scurry@npm:^1.11.1":
+ version: 1.11.1
+ resolution: "path-scurry@npm:1.11.1"
+ dependencies:
+ lru-cache: ^10.2.0
+ minipass: ^5.0.0 || ^6.0.2 || ^7.0.0
+ checksum: 890d5abcd593a7912dcce7cf7c6bf7a0b5648e3dee6caf0712c126ca0a65c7f3d7b9d769072a4d1baf370f61ce493ab5b038d59988688e0c5f3f646ee3c69023
+ languageName: node
+ linkType: hard
+
"path-to-regexp@npm:0.1.7":
version: 0.1.7
resolution: "path-to-regexp@npm:0.1.7"
@@ -37978,6 +38916,13 @@ __metadata:
languageName: node
linkType: hard
+"picomatch@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "picomatch@npm:3.0.1"
+ checksum: b7fe18174bcc05bbf0ea09cc85623ae395676b3e6bc25636d4c20db79a948586237e429905453bf1ba385bc7a7aa5b56f1b351680e650d2b5c305ceb98dfc914
+ languageName: node
+ linkType: hard
+
"picture-tuber@npm:^1.0.1":
version: 1.0.2
resolution: "picture-tuber@npm:1.0.2"
@@ -39448,6 +40393,15 @@ __metadata:
languageName: node
linkType: hard
+"pretty-ms@npm:^9.0.0":
+ version: 9.0.0
+ resolution: "pretty-ms@npm:9.0.0"
+ dependencies:
+ parse-ms: ^4.0.0
+ checksum: 072b17547e09cb232e8e4c7be0281e256b6d8acd18dfb2fdd715d50330d1689fdaa877f53cf90c62ed419ef842f0f5fb94a2cd8ed1aa6d7608ad48834219435d
+ languageName: node
+ linkType: hard
+
"pretty-time@npm:^1.1.0":
version: 1.1.0
resolution: "pretty-time@npm:1.1.0"
@@ -39481,6 +40435,20 @@ __metadata:
languageName: node
linkType: hard
+"proc-log@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "proc-log@npm:3.0.0"
+ checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02
+ languageName: node
+ linkType: hard
+
+"proc-log@npm:^4.0.0, proc-log@npm:^4.1.0, proc-log@npm:^4.2.0":
+ version: 4.2.0
+ resolution: "proc-log@npm:4.2.0"
+ checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc
+ languageName: node
+ linkType: hard
+
"process-nextick-args@npm:~2.0.0":
version: 2.0.1
resolution: "process-nextick-args@npm:2.0.1"
@@ -39502,6 +40470,13 @@ __metadata:
languageName: node
linkType: hard
+"proggy@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "proggy@npm:2.0.0"
+ checksum: 398f38c5e53d8f3dd8e1f67140dd1044dfde0a8e43edb2df55f7f38b958912841c78a970e61f2ee7222be4f3f1ee0da134e21d0eb537805cb1b10516555c7ac1
+ languageName: node
+ linkType: hard
+
"progress@npm:2.0.3":
version: 2.0.3
resolution: "progress@npm:2.0.3"
@@ -39509,6 +40484,20 @@ __metadata:
languageName: node
linkType: hard
+"promise-all-reject-late@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "promise-all-reject-late@npm:1.0.1"
+ checksum: d7d61ac412352e2c8c3463caa5b1c3ca0f0cc3db15a09f180a3da1446e33d544c4261fc716f772b95e4c27d559cfd2388540f44104feb356584f9c73cfb9ffcb
+ languageName: node
+ linkType: hard
+
+"promise-call-limit@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "promise-call-limit@npm:3.0.1"
+ checksum: f1b3c4d3a9c5482ce27ec5f40311e1389adb9bb10c16166e61c96d29ab22c701691d5225bf6745a162858f45dfb46cc82275fd09e7aa57846fc446c7855c2f06
+ languageName: node
+ linkType: hard
+
"promise-inflight@npm:^1.0.1":
version: 1.0.1
resolution: "promise-inflight@npm:1.0.1"
@@ -39656,9 +40645,9 @@ __metadata:
languageName: node
linkType: hard
-"protobufjs@npm:^7.2.4":
- version: 7.2.5
- resolution: "protobufjs@npm:7.2.5"
+"protobufjs@npm:^7.2.5":
+ version: 7.3.0
+ resolution: "protobufjs@npm:7.3.0"
dependencies:
"@protobufjs/aspromise": ^1.1.2
"@protobufjs/base64": ^1.1.2
@@ -39672,7 +40661,7 @@ __metadata:
"@protobufjs/utf8": ^1.1.0
"@types/node": ">=13.7.0"
long: ^5.0.0
- checksum: 3770a072114061faebbb17cfd135bc4e187b66bc6f40cd8bac624368b0270871ec0cfb43a02b9fb4f029c8335808a840f1afba3c2e7ede7063b98ae6b98a703f
+ checksum: bc7008ec736b0ab68677ced957b7ccbfc96ccd31f10d8a09d41408d8bf432a6132387acca71e657c652d98aaf7bd2a373f355a377762cff1ed04f0def8477c69
languageName: node
linkType: hard
@@ -40027,6 +41016,13 @@ __metadata:
languageName: node
linkType: hard
+"quick-lru@npm:^5.1.1":
+ version: 5.1.1
+ resolution: "quick-lru@npm:5.1.1"
+ checksum: a516faa25574be7947969883e6068dbe4aa19e8ef8e8e0fd96cddd6d36485e9106d85c0041a27153286b0770b381328f4072aa40d3b18a19f5f7d2b78b94b5ed
+ languageName: node
+ linkType: hard
+
"raf@npm:^3.1.0, raf@npm:^3.2.0, raf@npm:^3.4.0":
version: 3.4.1
resolution: "raf@npm:3.4.1"
@@ -41143,6 +42139,13 @@ __metadata:
languageName: node
linkType: hard
+"read-cmd-shim@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "read-cmd-shim@npm:4.0.0"
+ checksum: 2fb5a8a38984088476f559b17c6a73324a5db4e77e210ae0aab6270480fd85c355fc990d1c79102e25e555a8201606ed12844d6e3cd9f35d6a1518791184e05b
+ languageName: node
+ linkType: hard
+
"read-json-sync@npm:2.0.1":
version: 2.0.1
resolution: "read-json-sync@npm:2.0.1"
@@ -41150,6 +42153,16 @@ __metadata:
languageName: node
linkType: hard
+"read-package-json-fast@npm:^3.0.0, read-package-json-fast@npm:^3.0.2":
+ version: 3.0.2
+ resolution: "read-package-json-fast@npm:3.0.2"
+ dependencies:
+ json-parse-even-better-errors: ^3.0.0
+ npm-normalize-package-bin: ^3.0.0
+ checksum: 8d406869f045f1d76e2a99865a8fd1c1af9c1dc06200b94d2b07eef87ed734b22703a8d72e1cd36ea36cc48e22020bdd187f88243c7dd0563f72114d38c17072
+ languageName: node
+ linkType: hard
+
"read-package-json@npm:1 || 2, read-package-json@npm:^2.0.0, read-package-json@npm:^2.0.13":
version: 2.1.2
resolution: "read-package-json@npm:2.1.2"
@@ -41885,6 +42898,13 @@ __metadata:
languageName: node
linkType: hard
+"resolve-alpn@npm:^1.0.0":
+ version: 1.2.1
+ resolution: "resolve-alpn@npm:1.2.1"
+ checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0
+ languageName: node
+ linkType: hard
+
"resolve-cwd@npm:^2.0.0":
version: 2.0.0
resolution: "resolve-cwd@npm:2.0.0"
@@ -42057,6 +43077,15 @@ __metadata:
languageName: node
linkType: hard
+"responselike@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "responselike@npm:2.0.1"
+ dependencies:
+ lowercase-keys: ^2.0.0
+ checksum: b122535466e9c97b55e69c7f18e2be0ce3823c5d47ee8de0d9c0b114aa55741c6db8bfbfce3766a94d1272e61bfb1ebf0a15e9310ac5629fbb7446a861b4fd3a
+ languageName: node
+ linkType: hard
+
"restore-cursor@npm:^1.0.1":
version: 1.0.1
resolution: "restore-cursor@npm:1.0.1"
@@ -43101,13 +44130,27 @@ __metadata:
languageName: node
linkType: hard
-"signal-exit@npm:^4.0.1":
+"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0":
version: 4.1.0
resolution: "signal-exit@npm:4.1.0"
checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549
languageName: node
linkType: hard
+"sigstore@npm:^2.2.0":
+ version: 2.3.1
+ resolution: "sigstore@npm:2.3.1"
+ dependencies:
+ "@sigstore/bundle": ^2.3.2
+ "@sigstore/core": ^1.0.0
+ "@sigstore/protobuf-specs": ^0.3.2
+ "@sigstore/sign": ^2.3.2
+ "@sigstore/tuf": ^2.3.4
+ "@sigstore/verify": ^1.2.1
+ checksum: 9e8c5e60dbe56591770fb26a0d0e987f1859d47d519532578540380d6464499bcd1f1765291d6a360d3ffe9aba171fc8b0c3e559931b0ea262140aff7e892296
+ languageName: node
+ linkType: hard
+
"simple-concat@npm:^1.0.0":
version: 1.0.1
resolution: "simple-concat@npm:1.0.1"
@@ -43347,7 +44390,7 @@ __metadata:
languageName: node
linkType: hard
-"socks-proxy-agent@npm:^8.0.2":
+"socks-proxy-agent@npm:^8.0.2, socks-proxy-agent@npm:^8.0.3":
version: 8.0.3
resolution: "socks-proxy-agent@npm:8.0.3"
dependencies:
@@ -43769,6 +44812,15 @@ __metadata:
languageName: node
linkType: hard
+"ssri@npm:^10.0.0, ssri@npm:^10.0.6":
+ version: 10.0.6
+ resolution: "ssri@npm:10.0.6"
+ dependencies:
+ minipass: ^7.0.3
+ checksum: 4603d53a05bcd44188747d38f1cc43833b9951b5a1ee43ba50535bdfc5fe4a0897472dbe69837570a5417c3c073377ef4f8c1a272683b401857f72738ee57299
+ languageName: node
+ linkType: hard
+
"ssri@npm:^6.0.0, ssri@npm:^6.0.1":
version: 6.0.2
resolution: "ssri@npm:6.0.2"
@@ -44254,6 +45306,13 @@ __metadata:
languageName: node
linkType: hard
+"strip-final-newline@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "strip-final-newline@npm:4.0.0"
+ checksum: b5fe48f695d74863153a3b3155220e6e9bf51f4447832998c8edec38e6559b3af87a9fe5ac0df95570a78a26f5fa91701358842eab3c15480e27980b154a145f
+ languageName: node
+ linkType: hard
+
"strip-indent@npm:^1.0.1":
version: 1.0.1
resolution: "strip-indent@npm:1.0.1"
@@ -45084,6 +46143,13 @@ __metadata:
languageName: node
linkType: hard
+"tmp@npm:^0.2.1":
+ version: 0.2.3
+ resolution: "tmp@npm:0.2.3"
+ checksum: 73b5c96b6e52da7e104d9d44afb5d106bb1e16d9fa7d00dbeb9e6522e61b571fbdb165c756c62164be9a3bbe192b9b268c236d370a2a0955c7689cd2ae377b95
+ languageName: node
+ linkType: hard
+
"tmp@npm:~0.2.1":
version: 0.2.1
resolution: "tmp@npm:0.2.1"
@@ -45314,6 +46380,13 @@ __metadata:
languageName: node
linkType: hard
+"treeverse@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "treeverse@npm:3.0.0"
+ checksum: 73168d9887fa57b0719218f176c5a3cfbaaf310922879acb4adf76665bc17dcdb6ed3e4163f0c27eee17e346886186a1515ea6f87e96cdc10df1dce13bf622a0
+ languageName: node
+ linkType: hard
+
"trim-newlines@npm:^1.0.0":
version: 1.0.0
resolution: "trim-newlines@npm:1.0.0"
@@ -45602,6 +46675,17 @@ __metadata:
languageName: node
linkType: hard
+"tuf-js@npm:^2.2.1":
+ version: 2.2.1
+ resolution: "tuf-js@npm:2.2.1"
+ dependencies:
+ "@tufjs/models": 2.0.1
+ debug: ^4.3.4
+ make-fetch-happen: ^13.0.1
+ checksum: 23a8f84a33f4569296c7d1d6919ea87273923a3d0c6cc837a84fb200041a54bb1b50623f79cc77307325d945dfe10e372ac1cad105956e34d3df2d4984027bd8
+ languageName: node
+ linkType: hard
+
"tunnel-agent@npm:^0.6.0":
version: 0.6.0
resolution: "tunnel-agent@npm:0.6.0"
@@ -45945,6 +47029,15 @@ __metadata:
languageName: node
linkType: hard
+"unique-filename@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "unique-filename@npm:3.0.0"
+ dependencies:
+ unique-slug: ^4.0.0
+ checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df
+ languageName: node
+ linkType: hard
+
"unique-slug@npm:^2.0.0":
version: 2.0.2
resolution: "unique-slug@npm:2.0.2"
@@ -45963,6 +47056,15 @@ __metadata:
languageName: node
linkType: hard
+"unique-slug@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "unique-slug@npm:4.0.0"
+ dependencies:
+ imurmurhash: ^0.1.4
+ checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15
+ languageName: node
+ linkType: hard
+
"universal-cookie@npm:^4.0.4":
version: 4.0.4
resolution: "universal-cookie@npm:4.0.4"
@@ -46426,7 +47528,7 @@ __metadata:
languageName: node
linkType: hard
-"validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.3":
+"validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.3, validate-npm-package-license@npm:^3.0.4":
version: 3.0.4
resolution: "validate-npm-package-license@npm:3.0.4"
dependencies:
@@ -46445,6 +47547,13 @@ __metadata:
languageName: node
linkType: hard
+"validate-npm-package-name@npm:^5.0.0":
+ version: 5.0.1
+ resolution: "validate-npm-package-name@npm:5.0.1"
+ checksum: 0d583a1af23aeffea7748742cf22b6802458736fb8b60323ba5949763824d46f796474b0e1b9206beb716f9d75269e19dbd7795d6b038b29d561be95dd827381
+ languageName: node
+ linkType: hard
+
"value-or-promise@npm:1.0.6":
version: 1.0.6
resolution: "value-or-promise@npm:1.0.6"
@@ -46584,6 +47693,13 @@ __metadata:
languageName: node
linkType: hard
+"walk-up-path@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "walk-up-path@npm:3.0.1"
+ checksum: 9ffca02fe30fb65f6db531260582988c5e766f4c739cf86a6109380a7f791236b5d0b92b1dce37a6f73e22dca6bc9d93bf3700413e16251b2bd6bbd1ca2be316
+ languageName: node
+ linkType: hard
+
"walker@npm:^1.0.8":
version: 1.0.8
resolution: "walker@npm:1.0.8"
@@ -47186,6 +48302,17 @@ __metadata:
languageName: node
linkType: hard
+"which@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "which@npm:4.0.0"
+ dependencies:
+ isexe: ^3.1.1
+ bin:
+ node-which: bin/which.js
+ checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651
+ languageName: node
+ linkType: hard
+
"wicg-inert@npm:^3.0.3":
version: 3.1.2
resolution: "wicg-inert@npm:3.1.2"
@@ -47342,6 +48469,16 @@ __metadata:
languageName: node
linkType: hard
+"write-file-atomic@npm:^5.0.0":
+ version: 5.0.1
+ resolution: "write-file-atomic@npm:5.0.1"
+ dependencies:
+ imurmurhash: ^0.1.4
+ signal-exit: ^4.0.1
+ checksum: 8dbb0e2512c2f72ccc20ccedab9986c7d02d04039ed6e8780c987dc4940b793339c50172a1008eed7747001bfacc0ca47562668a069a7506c46c77d7ba3926a9
+ languageName: node
+ linkType: hard
+
"write-json-file@npm:4.3.0, write-json-file@npm:^4.2.0, write-json-file@npm:^4.3.0":
version: 4.3.0
resolution: "write-json-file@npm:4.3.0"
@@ -47537,6 +48674,16 @@ __metadata:
languageName: node
linkType: hard
+"xml2js@npm:0.6.2":
+ version: 0.6.2
+ resolution: "xml2js@npm:0.6.2"
+ dependencies:
+ sax: ">=0.6.0"
+ xmlbuilder: ~11.0.0
+ checksum: 458a83806193008edff44562c0bdb982801d61ee7867ae58fd35fab781e69e17f40dfeb8fc05391a4648c9c54012066d3955fe5d993ffbe4dc63399023f32ac2
+ languageName: node
+ linkType: hard
+
"xml2js@npm:^0.4.5":
version: 0.4.23
resolution: "xml2js@npm:0.4.23"
@@ -47711,6 +48858,13 @@ __metadata:
languageName: node
linkType: hard
+"yoctocolors@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "yoctocolors@npm:2.0.2"
+ checksum: cac20504b5fc954ff117e3a3fbde09db8ac0807bba59e68c5c08f3a43173ef46ccb1853b15b37bd96d0d8187bc444627f160fee7e5aede0b421382cf379d2438
+ languageName: node
+ linkType: hard
+
"zen-observable-ts@npm:0.8.19":
version: 0.8.19
resolution: "zen-observable-ts@npm:0.8.19"
From 38eee1c2641d07c0eba18afe27a88ae132758b03 Mon Sep 17 00:00:00 2001
From: Adrian Smijulj
Date: Fri, 7 Jun 2024 13:48:58 +0200
Subject: [PATCH 15/26] fix: expect the possibility of `settings`object being
null (#4157)
---
.../settingsGroups/DefaultPages.tsx | 20 ++++++++++++++++---
.../WebsiteSettings/usePbWebsiteSettings.ts | 14 +++----------
2 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/packages/app-page-builder/src/modules/WebsiteSettings/settingsGroups/DefaultPages.tsx b/packages/app-page-builder/src/modules/WebsiteSettings/settingsGroups/DefaultPages.tsx
index 12c5fb137de..29e5cc6919d 100644
--- a/packages/app-page-builder/src/modules/WebsiteSettings/settingsGroups/DefaultPages.tsx
+++ b/packages/app-page-builder/src/modules/WebsiteSettings/settingsGroups/DefaultPages.tsx
@@ -1,4 +1,4 @@
-import React from "react";
+import React, { useCallback } from "react";
import { Bind } from "@webiny/form";
import { ButtonIcon, ButtonPrimary } from "@webiny/ui/Button";
import { AddPbWebsiteSettings } from "../AddPbWebsiteSettings";
@@ -10,6 +10,13 @@ const { Group, Element } = AddPbWebsiteSettings;
const Homepage = () => {
const { settings, editPage } = usePbWebsiteSettings();
+ const homePage = settings.pages?.home;
+
+ const editButtonClickHandler = useCallback(() => {
+ if (homePage) {
+ editPage(homePage);
+ }
+ }, [homePage]);
return (
@@ -17,7 +24,7 @@ const Homepage = () => {
label={"Homepage"}
description={`To set a different page, start typing its title and select it from the dropdown menu. Note that the page must be published in order to appear.`}
trailingIcon={
- editPage(settings.pages.home)}>
+
} />
Edit
@@ -29,6 +36,13 @@ const Homepage = () => {
const NotFoundPage = () => {
const { settings, editPage } = usePbWebsiteSettings();
+ const notFoundPage = settings.pages?.notFound;
+
+ const editButtonClickHandler = useCallback(() => {
+ if (notFoundPage) {
+ editPage(notFoundPage);
+ }
+ }, [notFoundPage]);
return (
@@ -36,7 +50,7 @@ const NotFoundPage = () => {
label={"Not found (404) page"}
description={`To set a different page, start typing its title and select it from the dropdown menu. Note that the page must be published in order to appear.`}
trailingIcon={
- editPage(settings.pages.notFound)}>
+
} />
Edit
diff --git a/packages/app-page-builder/src/modules/WebsiteSettings/usePbWebsiteSettings.ts b/packages/app-page-builder/src/modules/WebsiteSettings/usePbWebsiteSettings.ts
index 057f54e4ee8..722c79707be 100644
--- a/packages/app-page-builder/src/modules/WebsiteSettings/usePbWebsiteSettings.ts
+++ b/packages/app-page-builder/src/modules/WebsiteSettings/usePbWebsiteSettings.ts
@@ -27,17 +27,9 @@ export function usePbWebsiteSettings() {
const [error, setError] = useState(null);
const { data, loading: queryInProgress } = useQuery(GET_SETTINGS);
- const settings = get(
- data,
- "pageBuilder.getSettings.data",
- {}
- ) as unknown as GetSettingsResponseData;
-
- const defaultSettings = get(
- data,
- "pageBuilder.getDefaultSettings.data",
- {}
- ) as unknown as GetSettingsResponseData;
+ const settings: Partial = data?.pageBuilder.getSettings.data || {};
+ const defaultSettings: Partial =
+ data?.pageBuilder.getDefaultSettings.data || {};
const [update, { loading: mutationInProgress }] = useMutation<
UpdateSettingsMutationResponse,
From 6d1cb1c7aa4b841b96eb002da3a00f70e5b5eb18 Mon Sep 17 00:00:00 2001
From: Adrian Smijulj
Date: Fri, 7 Jun 2024 14:15:06 +0200
Subject: [PATCH 16/26] fix: improve 5.39.6 meta fields data migration
performance (#4154)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Bruno Zorić
---
packages/migrations/package.json | 7 +-
.../5.39.6/001/ddb-es/MetaFieldsMigration.ts | 236 +++++++++
.../5.39.6/001/ddb-es/SegmentProcessor.ts | 70 +++
.../src/migrations/5.39.6/001/ddb-es/bin.ts | 78 +++
...teMetaFieldsDataMigrationDeploymentHook.ts | 102 ++++
.../src/migrations/5.39.6/001/ddb-es/utils.ts | 64 +++
.../migrations/5.39.6/001/ddb-es/worker.ts | 447 ++++++++++++++++++
.../src/utils/elasticsearch/esListIndexes.ts | 25 +
.../src/utils/elasticsearch/index.ts | 2 +-
yarn.lock | 5 +
10 files changed, 1034 insertions(+), 2 deletions(-)
create mode 100644 packages/migrations/src/migrations/5.39.6/001/ddb-es/MetaFieldsMigration.ts
create mode 100644 packages/migrations/src/migrations/5.39.6/001/ddb-es/SegmentProcessor.ts
create mode 100644 packages/migrations/src/migrations/5.39.6/001/ddb-es/bin.ts
create mode 100644 packages/migrations/src/migrations/5.39.6/001/ddb-es/createMetaFieldsDataMigrationDeploymentHook.ts
create mode 100644 packages/migrations/src/migrations/5.39.6/001/ddb-es/utils.ts
create mode 100644 packages/migrations/src/migrations/5.39.6/001/ddb-es/worker.ts
create mode 100644 packages/migrations/src/utils/elasticsearch/esListIndexes.ts
diff --git a/packages/migrations/package.json b/packages/migrations/package.json
index 8805655d905..d9fb975aa62 100644
--- a/packages/migrations/package.json
+++ b/packages/migrations/package.json
@@ -10,15 +10,20 @@
"@elastic/elasticsearch": "7.12.0",
"@webiny/api-elasticsearch": "0.0.0",
"@webiny/aws-sdk": "0.0.0",
+ "@webiny/cli-plugin-deploy-pulumi": "0.0.0",
"@webiny/data-migration": "0.0.0",
"@webiny/db-dynamodb": "0.0.0",
"@webiny/error": "0.0.0",
"@webiny/ioc": "0.0.0",
"@webiny/logger": "0.0.0",
"@webiny/utils": "0.0.0",
+ "execa": "^5.0.0",
+ "fast-glob": "^3.2.7",
"jsonpack": "^1.1.5",
"lodash": "^4.17.21",
- "pluralize": "^8.0.0"
+ "pino-pretty": "^9.4.0",
+ "pluralize": "^8.0.0",
+ "yargs": "^17.4.0"
},
"publishConfig": {
"access": "public",
diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/MetaFieldsMigration.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/MetaFieldsMigration.ts
new file mode 100644
index 00000000000..79faf5f4a9a
--- /dev/null
+++ b/packages/migrations/src/migrations/5.39.6/001/ddb-es/MetaFieldsMigration.ts
@@ -0,0 +1,236 @@
+import { Logger } from "@webiny/logger";
+import { SegmentProcessor } from "./SegmentProcessor";
+import {
+ disableElasticsearchIndexing,
+ esListIndexes,
+ fetchOriginalElasticsearchSettings,
+ restoreOriginalElasticsearchSettings
+} from "~/utils";
+import { createElasticsearchClient } from "@webiny/api-elasticsearch";
+import { createWaitUntilHealthy } from "@webiny/api-elasticsearch/utils/waitUntilHealthy";
+import {
+ DEFAULT_ES_HEALTH_CHECKS_PARAMS,
+ EsHealthChecksParams,
+ migrationSkippedDdbRecordExists,
+ createMigrationSkippedDdbRecord
+} from "~/migrations/5.39.6/001/ddb-es/utils";
+import path from "path";
+import os from "os";
+import fs from "fs";
+import glob from "fast-glob";
+import { getDocumentClient } from "@webiny/aws-sdk/client-dynamodb";
+
+export interface MetaFieldsMigrationParams {
+ ddbTable: string;
+ ddbEsTable: string;
+ esEndpoint: string;
+ totalSegments: number;
+ logger: Logger;
+
+ // Elasticsearch health check options.
+ esHealthChecks?: Partial;
+}
+
+export class MetaFieldsMigration {
+ private readonly runId: string;
+ private readonly ddbTable: string;
+ private readonly ddbEsTable: string;
+ private readonly esEndpoint: string;
+ private readonly totalSegments: number;
+ private readonly logger: Logger;
+
+ private readonly esHealthChecks: EsHealthChecksParams;
+
+ constructor(params: MetaFieldsMigrationParams) {
+ this.runId = String(new Date().getTime());
+ this.ddbTable = params.ddbTable;
+ this.ddbEsTable = params.ddbEsTable;
+ this.esEndpoint = params.esEndpoint;
+ this.totalSegments = params.totalSegments;
+ this.logger = params.logger;
+ this.esHealthChecks = {
+ ...DEFAULT_ES_HEALTH_CHECKS_PARAMS,
+ ...params.esHealthChecks
+ };
+ }
+
+ async execute() {
+ const scanProcessesPromises = [];
+
+ const start = Date.now();
+ const getDuration = () => {
+ return (Date.now() - start) / 1000;
+ };
+
+ const documentClient = getDocumentClient();
+
+ // Was the migration already executed?
+ const dataMigrationRecordExists = await migrationSkippedDdbRecordExists({
+ documentClient,
+ ddbTable: this.ddbTable
+ });
+
+ if (dataMigrationRecordExists) {
+ this.logger.info("5.39.6-001 migration has already been executed. Exiting...");
+ return;
+ }
+
+ this.logger.info("Starting 5.39.6-001 meta fields data migration...");
+ this.logger.info(
+ {
+ ddbTable: this.ddbTable,
+ ddbEsTable: this.ddbEsTable,
+ esEndpoint: this.esEndpoint,
+ totalSegments: this.totalSegments,
+ esHealthChecks: this.esHealthChecks
+ },
+ "Received the following parameters:"
+ );
+
+ const elasticsearchClient = createElasticsearchClient({
+ endpoint: `https://${this.esEndpoint}`
+ });
+
+ this.logger.info("Checking Elasticsearch health status...");
+ const waitUntilHealthy = createWaitUntilHealthy(elasticsearchClient, this.esHealthChecks);
+ this.logger.info("Elasticsearch is healthy.");
+
+ await waitUntilHealthy.wait();
+
+ const indexes = await esListIndexes({ elasticsearchClient, match: "-headless-cms-" });
+ const indexSettings: Record = {};
+ for (const indexName of indexes) {
+ this.logger.info(`Disabling indexing for Elasticsearch index "${indexName}"...`);
+ indexSettings[indexName] = await fetchOriginalElasticsearchSettings({
+ elasticsearchClient,
+ index: indexName,
+ logger: this.logger
+ });
+
+ await disableElasticsearchIndexing({
+ elasticsearchClient,
+ index: indexName,
+ logger: this.logger
+ });
+ }
+
+ this.logger.info("Proceeding with the migration...");
+
+ for (let segmentIndex = 0; segmentIndex < this.totalSegments; segmentIndex++) {
+ const segmentProcessor = new SegmentProcessor({
+ segmentIndex,
+ runId: this.runId,
+ totalSegments: this.totalSegments,
+ ddbTable: this.ddbTable,
+ ddbEsTable: this.ddbEsTable,
+ esEndpoint: this.esEndpoint,
+ esHealthChecks: this.esHealthChecks
+ });
+
+ scanProcessesPromises.push(segmentProcessor.execute());
+ }
+
+ await Promise.all(scanProcessesPromises);
+
+ this.logger.info("Restoring original Elasticsearch settings...");
+ await restoreOriginalElasticsearchSettings({
+ elasticsearchClient,
+ indexSettings,
+ logger: this.logger
+ });
+
+ // Insert a record that the migration was executed.
+ await createMigrationSkippedDdbRecord({
+ documentClient,
+ ddbTable: this.ddbTable
+ });
+
+ const duration = getDuration();
+ this.logger.info(`5.39.6-001 migration completed in ${duration}s, here are the results...`);
+
+ // Wait for 1 second.
+ await new Promise(resolve => setTimeout(resolve, 1000));
+
+ this.logger.info(
+ {
+ totalSegments: this.totalSegments,
+ esHealthChecks: this.esHealthChecks
+ },
+ "The migration was performed with the following following parameters:"
+ );
+
+ // Pickup all log files and print a summary of the migration.
+ const logFilePaths = await glob(
+ path.join(
+ os.tmpdir(),
+ `webiny-5-39-6-meta-fields-data-migration-log-${this.runId}-*.log`
+ )
+ );
+
+ const migrationStats = {
+ iterationsCount: 0,
+ avgIterationDuration: 0,
+ recordsScanned: 0,
+ avgRecordsScannedPerIteration: 0,
+ recordsScannedPerSecond: 0,
+ recordsUpdated: 0,
+ recordsSkipped: 0,
+ esHealthChecks: {
+ timeSpentWaiting: 0,
+ checksCount: 0,
+ unhealthyReasons: {} as Record
+ }
+ };
+
+ for (const logFilePath of logFilePaths) {
+ const logFileContent = fs.readFileSync(logFilePath, "utf-8");
+ const logFile = JSON.parse(logFileContent);
+
+ migrationStats.iterationsCount += logFile.iterationsCount;
+ migrationStats.recordsScanned += logFile.recordsScanned;
+ migrationStats.recordsUpdated += logFile.recordsUpdated;
+ migrationStats.recordsSkipped += logFile.recordsSkipped;
+
+ migrationStats.esHealthChecks.timeSpentWaiting +=
+ logFile.esHealthChecks.timeSpentWaiting;
+ migrationStats.esHealthChecks.checksCount += logFile.esHealthChecks.checksCount;
+
+ for (const unhealthyReasonType in logFile.esHealthChecks.unhealthyReasons) {
+ if (!logFile.esHealthChecks.unhealthyReasons.hasOwnProperty(unhealthyReasonType)) {
+ continue;
+ }
+
+ const hasCount =
+ unhealthyReasonType in migrationStats.esHealthChecks.unhealthyReasons;
+ if (hasCount) {
+ migrationStats.esHealthChecks.unhealthyReasons[unhealthyReasonType] +=
+ logFile.esHealthChecks.unhealthyReasons[unhealthyReasonType];
+ } else {
+ migrationStats.esHealthChecks.unhealthyReasons[unhealthyReasonType] =
+ logFile.esHealthChecks.unhealthyReasons[unhealthyReasonType];
+ }
+ }
+ }
+
+ migrationStats.avgIterationDuration = duration / migrationStats.iterationsCount;
+
+ migrationStats.avgRecordsScannedPerIteration =
+ migrationStats.recordsScanned / migrationStats.iterationsCount;
+
+ migrationStats.recordsScannedPerSecond = migrationStats.recordsScanned / duration;
+
+ this.logger.info(
+ migrationStats,
+ `Migration summary (based on ${logFilePaths.length} generated logs):`
+ );
+
+ const logFilePath = path.join(
+ os.tmpdir(),
+ `webiny-5-39-6-meta-fields-data-migration-log-${this.runId}.log`
+ );
+
+ // Save segment processing stats to a file.
+ fs.writeFileSync(logFilePath, JSON.stringify(migrationStats, null, 2));
+ this.logger.trace(`Migration summary saved to "${logFilePath}".`);
+ }
+}
diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/SegmentProcessor.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/SegmentProcessor.ts
new file mode 100644
index 00000000000..7199d35cf3b
--- /dev/null
+++ b/packages/migrations/src/migrations/5.39.6/001/ddb-es/SegmentProcessor.ts
@@ -0,0 +1,70 @@
+import execa from "execa";
+import path from "path";
+import { EsHealthChecksParams } from "~/migrations/5.39.6/001/ddb-es/utils";
+
+interface SegmentProcessorParams {
+ runId: string;
+ ddbTable: string;
+ ddbEsTable: string;
+ esEndpoint: string;
+ segmentIndex: number;
+ totalSegments: number;
+ esHealthChecks: EsHealthChecksParams;
+}
+
+export class SegmentProcessor {
+ private readonly runId: string;
+ private readonly ddbTable: string;
+ private readonly ddbEsTable: string;
+ private readonly esEndpoint: string;
+ private readonly segmentIndex: number;
+ private readonly totalSegments: number;
+ private readonly esHealthChecks: EsHealthChecksParams;
+
+ constructor(params: SegmentProcessorParams) {
+ this.runId = params.runId;
+ this.ddbTable = params.ddbTable;
+ this.ddbEsTable = params.ddbEsTable;
+ this.esEndpoint = params.esEndpoint;
+ this.segmentIndex = params.segmentIndex;
+ this.totalSegments = params.totalSegments;
+ this.esHealthChecks = params.esHealthChecks;
+ }
+
+ execute() {
+ return execa(
+ "node",
+ [
+ path.join(__dirname, "worker"),
+ "--runId",
+ this.runId,
+ "--ddbTable",
+ this.ddbTable,
+ "--ddbEsTable",
+ this.ddbEsTable,
+ "--esEndpoint",
+ this.esEndpoint,
+ "--segmentIndex",
+ String(this.segmentIndex),
+ "--totalSegments",
+ String(this.totalSegments),
+
+ // Elasticsearch health check options.
+ "--esHealthMinClusterHealthStatus",
+ this.esHealthChecks.minClusterHealthStatus,
+ "--esHealthMaxProcessorPercent",
+ String(this.esHealthChecks.maxProcessorPercent),
+ "--esHealthMaxRamPercent",
+ String(this.esHealthChecks.maxRamPercent),
+ "--esHealthMaxWaitingTime",
+ String(this.esHealthChecks.maxWaitingTime),
+ "--esHealthWaitingTimeStep",
+ String(this.esHealthChecks.waitingTimeStep)
+ ],
+ {
+ stdio: "inherit",
+ env: process.env
+ }
+ );
+ }
+}
diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/bin.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/bin.ts
new file mode 100644
index 00000000000..f70fc2efe4d
--- /dev/null
+++ b/packages/migrations/src/migrations/5.39.6/001/ddb-es/bin.ts
@@ -0,0 +1,78 @@
+#!/usr/bin/env node
+import yargs from "yargs/yargs";
+import { hideBin } from "yargs/helpers";
+import { MetaFieldsMigration } from "./MetaFieldsMigration";
+import { createPinoLogger, getLogLevel } from "@webiny/logger";
+import pinoPretty from "pino-pretty";
+import {
+ DEFAULT_ES_HEALTH_CHECKS_PARAMS,
+ EsHealthChecksParams
+} from "~/migrations/5.39.6/001/ddb-es/utils";
+
+const argv = yargs(hideBin(process.argv))
+ .options({
+ ddbTable: { type: "string", demandOption: true },
+ ddbEsTable: { type: "string", demandOption: true },
+ esEndpoint: { type: "string", demandOption: true },
+ segments: { type: "number", demandOption: true },
+
+ // Elasticsearch health check options.
+ esHealthMinClusterHealthStatus: {
+ type: "string",
+ demandOption: false,
+ default: DEFAULT_ES_HEALTH_CHECKS_PARAMS.minClusterHealthStatus,
+ description: `Minimum cluster health status to wait for before proceeding with the migration.`
+ },
+ esHealthMaxProcessorPercent: {
+ type: "number",
+ demandOption: false,
+ default: DEFAULT_ES_HEALTH_CHECKS_PARAMS.maxProcessorPercent,
+ description: `Maximum CPU usage percentage to wait for before proceeding with the migration.`
+ },
+ esHealthMaxRamPercent: {
+ type: "number",
+ demandOption: false,
+ default: DEFAULT_ES_HEALTH_CHECKS_PARAMS.maxRamPercent,
+ description: `Maximum RAM usage percentage to wait for before proceeding with the migration.`
+ },
+ esHealthMaxWaitingTime: {
+ type: "number",
+ demandOption: false,
+ default: DEFAULT_ES_HEALTH_CHECKS_PARAMS.maxWaitingTime,
+ description: `Maximum time to wait (seconds) for before proceeding with the migration.`
+ },
+ esHealthWaitingTimeStep: {
+ type: "number",
+ demandOption: false,
+ default: DEFAULT_ES_HEALTH_CHECKS_PARAMS.waitingTimeStep,
+ description: `Time step (seconds) to wait before checking Elasticsearch health status again.`
+ }
+ })
+ .parseSync();
+
+(async () => {
+ const logger = createPinoLogger(
+ {
+ level: getLogLevel(process.env.MIGRATIONS_LOG_LEVEL, "trace")
+ },
+ pinoPretty({ ignore: "pid,hostname" })
+ );
+
+ const migration = new MetaFieldsMigration({
+ totalSegments: argv.segments,
+ ddbTable: argv.ddbTable,
+ ddbEsTable: argv.ddbEsTable,
+ esEndpoint: argv.esEndpoint,
+ esHealthChecks: {
+ minClusterHealthStatus:
+ argv.esHealthMinClusterHealthStatus as EsHealthChecksParams["minClusterHealthStatus"],
+ maxProcessorPercent: argv.esHealthMaxProcessorPercent,
+ maxRamPercent: argv.esHealthMaxRamPercent,
+ maxWaitingTime: argv.esHealthMaxWaitingTime,
+ waitingTimeStep: argv.esHealthWaitingTimeStep
+ },
+ logger
+ });
+
+ await migration.execute();
+})();
diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/createMetaFieldsDataMigrationDeploymentHook.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/createMetaFieldsDataMigrationDeploymentHook.ts
new file mode 100644
index 00000000000..9d6e22fb61d
--- /dev/null
+++ b/packages/migrations/src/migrations/5.39.6/001/ddb-es/createMetaFieldsDataMigrationDeploymentHook.ts
@@ -0,0 +1,102 @@
+import { CliContext } from "@webiny/cli/types";
+import { getStackOutput } from "@webiny/cli-plugin-deploy-pulumi/utils";
+import { createPinoLogger, getLogLevel } from "@webiny/logger";
+import pinoPretty from "pino-pretty";
+import {
+ MetaFieldsMigrationParams,
+ MetaFieldsMigration
+} from "~/migrations/5.39.6/001/ddb-es/MetaFieldsMigration";
+
+interface CoreOutput {
+ primaryDynamodbTableName: string;
+ elasticsearchDynamodbTableName: string;
+ elasticsearchDomainEndpoint: string;
+}
+
+const REQUIRED_AWS_ENV_VARS = [
+ "AWS_REGION",
+ "AWS_ACCESS_KEY_ID",
+ "AWS_SECRET_ACCESS_KEY",
+ "AWS_SESSION_TOKEN"
+];
+
+const ensureAwsEnvVars = () => {
+ const missingAwsEnvVars = [];
+ for (const variable of REQUIRED_AWS_ENV_VARS) {
+ if (!process.env[variable]) {
+ missingAwsEnvVars.push(variable);
+ }
+ }
+
+ if (missingAwsEnvVars.length > 0) {
+ throw new Error(
+ `Cannot run 5.39.6 meta fields data migration. Missing required environment variables: ${missingAwsEnvVars.join(
+ ", "
+ )}.`
+ );
+ }
+};
+
+/**
+ * Creates an after-deployment hook that triggers the meta fields data migration.
+ * @param params
+ */
+export const createMetaFieldsDataMigrationDeploymentHook = (
+ params: Pick
+) => {
+ return [
+ {
+ type: "hook-before-deploy",
+ name: "hook-before-deploy-skip-5-39-6-001-migration",
+ async hook({ projectApplication }: Record) {
+ // Only run migrations for `api` app
+ if (projectApplication.id !== "api") {
+ return;
+ }
+
+ process.env.WEBINY_MIGRATION_SKIP_5_39_6_001 = "true";
+ }
+ },
+ {
+ type: "hook-after-deploy",
+ name: "hook-after-deploy-api-run-5-39-6-meta-fields-data-migrations",
+ async hook(
+ { inputs, env, projectApplication }: Record,
+ context: CliContext
+ ) {
+ // Only run migrations for `api` app
+ if (projectApplication.id !== "api") {
+ return;
+ }
+
+ // No need to run migrations if we're doing a preview.
+ if (inputs.preview) {
+ return;
+ }
+
+ ensureAwsEnvVars();
+
+ const coreOutput = getStackOutput({ folder: "apps/core", env });
+
+ context.info("Executing 5.39.6-001 meta fields data migration...");
+
+ const logger = createPinoLogger(
+ {
+ level: getLogLevel(process.env.MIGRATIONS_LOG_LEVEL, "trace")
+ },
+ pinoPretty({ ignore: "pid,hostname" })
+ );
+
+ const migration = new MetaFieldsMigration({
+ ddbTable: coreOutput.primaryDynamodbTableName,
+ ddbEsTable: coreOutput.elasticsearchDynamodbTableName,
+ esEndpoint: coreOutput.elasticsearchDomainEndpoint,
+ ...params,
+ logger
+ });
+
+ await migration.execute();
+ }
+ }
+ ];
+};
diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/utils.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/utils.ts
new file mode 100644
index 00000000000..87bb8d59a8a
--- /dev/null
+++ b/packages/migrations/src/migrations/5.39.6/001/ddb-es/utils.ts
@@ -0,0 +1,64 @@
+import { DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb";
+import {
+ ElasticsearchCatClusterHealthStatus,
+ IWaitUntilHealthyParams
+} from "@webiny/api-elasticsearch";
+
+export type EsHealthChecksParams = Required;
+
+export const DEFAULT_ES_HEALTH_CHECKS_PARAMS: EsHealthChecksParams = {
+ minClusterHealthStatus: ElasticsearchCatClusterHealthStatus.Yellow,
+ maxProcessorPercent: 90,
+ maxRamPercent: 100,
+ maxWaitingTime: 90,
+ waitingTimeStep: 2
+};
+
+export const migrationSkippedDdbRecord = {
+ PK: "MIGRATION#5.39.6-001",
+ SK: "A",
+ data: {
+ description: "Meta fields data migration (skipped via improved meta fields migration)",
+ finishedOn: "2024-06-01T12:00:00.000Z",
+ id: "5.39.6-001",
+ reason: "skipped",
+ startedOn: "2024-06-01T12:00:00.000Z"
+ },
+ GSI1_PK: "MIGRATIONS",
+ GSI1_SK: "5.39.6-001",
+ TYPE: "migration",
+ _ct: "2024-06-01T12:00:00.000Z",
+ _et: "Migration",
+ _md: "2024-06-01T12:00:00.000Z"
+};
+
+interface MigrationSkippedDdbRecordParams {
+ documentClient: DynamoDBDocument;
+ ddbTable: string;
+}
+
+export const migrationSkippedDdbRecordExists = async ({
+ documentClient,
+ ddbTable
+}: MigrationSkippedDdbRecordParams) => {
+ // Was the migration already executed?
+ const { Item } = await documentClient.get({
+ TableName: ddbTable,
+ Key: {
+ PK: "MIGRATION#5.39.6-001",
+ SK: "A"
+ }
+ });
+
+ return !!Item;
+};
+
+export const createMigrationSkippedDdbRecord = async ({
+ documentClient,
+ ddbTable
+}: MigrationSkippedDdbRecordParams) => {
+ await documentClient.put({
+ TableName: ddbTable,
+ Item: migrationSkippedDdbRecord
+ });
+};
diff --git a/packages/migrations/src/migrations/5.39.6/001/ddb-es/worker.ts b/packages/migrations/src/migrations/5.39.6/001/ddb-es/worker.ts
new file mode 100644
index 00000000000..9418f20702c
--- /dev/null
+++ b/packages/migrations/src/migrations/5.39.6/001/ddb-es/worker.ts
@@ -0,0 +1,447 @@
+import { executeWithRetry } from "@webiny/utils";
+import { createPinoLogger, getLogLevel } from "@webiny/logger";
+import { createTable } from "@webiny/data-migration";
+import { getDocumentClient } from "@webiny/aws-sdk/client-dynamodb";
+import { createElasticsearchClient } from "@webiny/api-elasticsearch";
+import yargs from "yargs/yargs";
+import { hideBin } from "yargs/helpers";
+import { isMigratedEntry } from "~/migrations/5.39.0/001/utils/isMigratedEntry";
+import { hasValidTypeFieldValue } from "~/migrations/5.39.0/001/utils/hasValidTypeFieldValue";
+import { hasAllNonNullableValues } from "~/migrations/5.39.0/001/utils/hasAllNonNullableValues";
+import { getOldestRevisionCreatedOn } from "~/migrations/5.39.0/001/utils/getOldestRevisionCreatedOn";
+import { getFirstLastPublishedOnBy } from "~/migrations/5.39.0/001/utils/getFirstLastPublishedOn";
+import { assignNewMetaFields } from "~/migrations/5.39.0/001/utils/assignNewMetaFields";
+import { fixTypeFieldValue } from "~/migrations/5.39.0/001/utils/fixTypeFieldValue";
+import { getFallbackIdentity } from "~/migrations/5.39.0/001/utils/getFallbackIdentity";
+import { ensureAllNonNullableValues } from "~/migrations/5.39.0/001/utils/ensureAllNonNullableValues";
+import { getDecompressedData } from "~/migrations/5.39.0/001/utils/getDecompressedData";
+import { getCompressedData } from "~/migrations/5.39.0/001/utils/getCompressedData";
+import { CmsEntry } from "~/migrations/5.39.0/001/types";
+import {
+ createDdbEntryEntity,
+ createDdbEsEntryEntity
+} from "~/migrations/5.39.0/001/entities/createEntryEntity";
+import {
+ batchReadAll,
+ BatchReadItem,
+ batchWriteAll,
+ BatchWriteItem,
+ ddbScanWithCallback
+} from "~/utils";
+import { createWaitUntilHealthy } from "@webiny/api-elasticsearch/utils/waitUntilHealthy";
+import pinoPretty from "pino-pretty";
+import { EsHealthChecksParams } from "~/migrations/5.39.6/001/ddb-es/utils";
+import path from "path";
+import os from "os";
+import fs from "fs";
+import { getNonNullableFieldsWithMissingValues } from "~/migrations/5.39.0/001/utils/getNonNullableFieldsWithMissingValues";
+
+const argv = yargs(hideBin(process.argv))
+ .options({
+ runId: { type: "string", demandOption: true },
+ ddbTable: { type: "string", demandOption: true },
+ ddbEsTable: { type: "string", demandOption: true },
+ esEndpoint: { type: "string", demandOption: true },
+ segmentIndex: { type: "number", demandOption: true },
+ totalSegments: { type: "number", demandOption: true },
+
+ // Elasticsearch health check options.
+ esHealthMinClusterHealthStatus: { type: "string", demandOption: true },
+ esHealthMaxProcessorPercent: { type: "number", demandOption: true },
+ esHealthMaxRamPercent: { type: "number", demandOption: true },
+ esHealthMaxWaitingTime: { type: "number", demandOption: true },
+ esHealthWaitingTimeStep: { type: "number", demandOption: true }
+ })
+ .parseSync();
+
+interface LastEvaluatedKeyObject {
+ PK: string;
+ SK: string;
+ GSI1_PK: string;
+ GSI1_SK: string;
+}
+
+type LastEvaluatedKey = LastEvaluatedKeyObject | true | null;
+
+interface MigrationStatus {
+ lastEvaluatedKey: LastEvaluatedKey;
+ stats: {
+ iterationsCount: number;
+ recordsScanned: number;
+ recordsUpdated: number;
+ recordsSkipped: number;
+ esHealthChecks: {
+ timeSpentWaiting: number;
+ checksCount: number;
+ unhealthyReasons: {
+ [key: string]: number;
+ };
+ };
+ };
+}
+
+interface DynamoDbElasticsearchRecord {
+ PK: string;
+ SK: string;
+ data: string;
+}
+
+const createInitialStatus = (): MigrationStatus => {
+ return {
+ lastEvaluatedKey: null,
+ stats: {
+ iterationsCount: 0,
+ recordsScanned: 0,
+ recordsUpdated: 0,
+ recordsSkipped: 0,
+ esHealthChecks: {
+ timeSpentWaiting: 0,
+ checksCount: 0,
+ unhealthyReasons: {}
+ }
+ }
+ };
+};
+
+(async () => {
+ const logger = createPinoLogger(
+ {
+ level: getLogLevel(process.env.MIGRATIONS_LOG_LEVEL, "trace"),
+ msgPrefix: `[segment #${argv.segmentIndex}] `
+ },
+ pinoPretty({ ignore: "pid,hostname" })
+ );
+
+ const documentClient = getDocumentClient();
+ const elasticsearchClient = createElasticsearchClient({
+ endpoint: `https://${argv.esEndpoint}`
+ });
+
+ const primaryTable = createTable({
+ name: argv.ddbTable,
+ documentClient
+ });
+ const dynamoToEsTable = createTable({
+ name: argv.ddbEsTable,
+ documentClient
+ });
+
+ const ddbEntryEntity = createDdbEntryEntity(primaryTable);
+ const ddbEsEntryEntity = createDdbEsEntryEntity(dynamoToEsTable);
+
+ const status = createInitialStatus();
+
+ const waitUntilHealthy = createWaitUntilHealthy(elasticsearchClient, {
+ minClusterHealthStatus:
+ argv.esHealthMinClusterHealthStatus as EsHealthChecksParams["minClusterHealthStatus"],
+ maxProcessorPercent: argv.esHealthMaxProcessorPercent,
+ maxRamPercent: argv.esHealthMaxRamPercent,
+ maxWaitingTime: argv.esHealthMaxWaitingTime,
+ waitingTimeStep: argv.esHealthWaitingTimeStep
+ });
+
+ await ddbScanWithCallback(
+ {
+ entity: ddbEntryEntity,
+ options: {
+ segment: argv.segmentIndex,
+ segments: argv.totalSegments,
+ filters: [
+ {
+ attr: "_et",
+ eq: "CmsEntries"
+ }
+ ],
+ startKey: status.lastEvaluatedKey || undefined,
+ limit: 100
+ }
+ },
+ async result => {
+ status.stats.iterationsCount++;
+ status.stats.recordsScanned += result.items.length;
+
+ if (status.stats.iterationsCount % 5 === 0) {
+ // We log every 5th iteration.
+ logger.trace(
+ `[iteration #${status.stats.iterationsCount}] Reading ${result.items.length} record(s)...`
+ );
+ }
+
+ const ddbItemsToBatchWrite: BatchWriteItem[] = [];
+ const ddbEsItemsToBatchWrite: BatchWriteItem[] = [];
+ const ddbEsItemsToBatchRead: Record = {};
+
+ const fallbackDateTime = new Date().toISOString();
+
+ // Update records in primary DynamoDB table. Also do preparations for
+ // subsequent updates on DDB-ES DynamoDB table, and in Elasticsearch.
+ for (const item of result.items) {
+ const isFullyMigrated =
+ isMigratedEntry(item) &&
+ hasValidTypeFieldValue(item) &&
+ hasAllNonNullableValues(item);
+
+ if (isFullyMigrated) {
+ status.stats.recordsSkipped++;
+ continue;
+ }
+
+ // 1. Check if the data migration was ever performed. If not, let's perform it.
+ if (!isMigratedEntry(item)) {
+ // Get the oldest revision's `createdOn` value. We use that to set the entry-level `createdOn` value.
+ const createdOn = await getOldestRevisionCreatedOn({
+ entry: item,
+ entryEntity: ddbEntryEntity
+ });
+
+ const firstLastPublishedOnByFields = await getFirstLastPublishedOnBy({
+ entry: item,
+ entryEntity: ddbEntryEntity
+ });
+
+ assignNewMetaFields(item, {
+ createdOn,
+ ...firstLastPublishedOnByFields
+ });
+ }
+
+ // 2. We've noticed some of the records had an invalid `TYPE` field value
+ // in the database. This step addresses this issue.
+ if (!hasValidTypeFieldValue(item)) {
+ // Fixes the value of the `TYPE` field, if it's not valid.
+ fixTypeFieldValue(item);
+ }
+
+ // 3. Finally, once both of the steps were performed, ensure that all
+ // new non-nullable meta fields have a value and nothing is missing.
+ if (!hasAllNonNullableValues(item)) {
+ logger.trace(
+ getNonNullableFieldsWithMissingValues(item),
+ `Detected an entry with missing values for non-nullable meta fields (${item.modelId}/${item.id}).`
+ );
+
+ try {
+ const fallbackIdentity = await getFallbackIdentity({
+ entity: ddbEntryEntity,
+ tenant: item.tenant
+ });
+
+ ensureAllNonNullableValues(item, {
+ dateTime: fallbackDateTime,
+ identity: fallbackIdentity
+ });
+
+ logger.trace(
+ `Successfully ensured all non-nullable meta fields have values (${item.modelId}/${item.id}). Will be saving into the database soon.`
+ );
+ } catch (e) {
+ logger.debug(
+ `Failed to ensure all non-nullable meta fields have values (${item.modelId}/${item.id}): ${e.message}`
+ );
+ }
+ }
+
+ ddbItemsToBatchWrite.push(ddbEntryEntity.putBatch(item));
+
+ /**
+ * Prepare the loading of DynamoDB Elasticsearch part of the records.
+ */
+
+ const ddbEsLatestRecordKey = `${item.entryId}:L`;
+ if (ddbEsItemsToBatchRead[ddbEsLatestRecordKey]) {
+ continue;
+ }
+
+ ddbEsItemsToBatchRead[ddbEsLatestRecordKey] = ddbEsEntryEntity.getBatch({
+ PK: item.PK,
+ SK: "L"
+ });
+
+ const ddbEsPublishedRecordKey = `${item.entryId}:P`;
+ if (item.status === "published" || !!item.locked) {
+ ddbEsItemsToBatchRead[ddbEsPublishedRecordKey] = ddbEsEntryEntity.getBatch({
+ PK: item.PK,
+ SK: "P"
+ });
+ }
+ }
+
+ if (Object.keys(ddbEsItemsToBatchRead).length > 0) {
+ /**
+ * Get all the records from DynamoDB Elasticsearch.
+ */
+ const ddbEsRecords = await batchReadAll({
+ table: ddbEsEntryEntity.table,
+ items: Object.values(ddbEsItemsToBatchRead)
+ });
+
+ for (const ddbEsRecord of ddbEsRecords) {
+ const decompressedData = await getDecompressedData(ddbEsRecord.data);
+ if (!decompressedData) {
+ logger.trace(
+ `[DDB-ES Table] Skipping record "${ddbEsRecord.PK}" as it is not a valid CMS entry...`
+ );
+ continue;
+ }
+
+ // 1. Check if the data migration was ever performed. If not, let's perform it.
+ if (!isMigratedEntry(decompressedData)) {
+ // Get the oldest revision's `createdOn` value. We use that to set the entry-level `createdOn` value.
+ const createdOn = await getOldestRevisionCreatedOn({
+ entry: { ...decompressedData, PK: ddbEsRecord.PK },
+ entryEntity: ddbEntryEntity
+ });
+
+ const firstLastPublishedOnByFields = await getFirstLastPublishedOnBy({
+ entry: { ...decompressedData, PK: ddbEsRecord.PK },
+ entryEntity: ddbEntryEntity
+ });
+
+ assignNewMetaFields(decompressedData, {
+ createdOn,
+ ...firstLastPublishedOnByFields
+ });
+ }
+
+ // 2. Ensure new non-nullable meta fields have a value and nothing is missing.
+ if (!hasAllNonNullableValues(decompressedData)) {
+ logger.trace(
+ getNonNullableFieldsWithMissingValues(decompressedData),
+ [
+ `[DDB-ES Table] Detected an entry with missing values for non-nullable meta fields`,
+ `(${decompressedData.modelId}/${decompressedData.id}).`
+ ].join(" ")
+ );
+
+ try {
+ const fallbackIdentity = await getFallbackIdentity({
+ entity: ddbEntryEntity,
+ tenant: decompressedData.tenant
+ });
+
+ ensureAllNonNullableValues(decompressedData, {
+ dateTime: fallbackDateTime,
+ identity: fallbackIdentity
+ });
+
+ logger.trace(
+ [
+ `[DDB-ES Table] Successfully ensured all non-nullable meta fields`,
+ `have values (${decompressedData.modelId}/${decompressedData.id}).`,
+ "Will be saving the changes soon."
+ ].join(" ")
+ );
+ } catch (e) {
+ logger.error(
+ [
+ "[DDB-ES Table] Failed to ensure all non-nullable meta fields have values",
+ `(${decompressedData.modelId}/${decompressedData.id}): ${e.message}`
+ ].join(" ")
+ );
+ }
+ }
+
+ const compressedData = await getCompressedData(decompressedData);
+
+ ddbEsItemsToBatchWrite.push(
+ ddbEsEntryEntity.putBatch({
+ ...ddbEsRecord,
+ data: compressedData
+ })
+ );
+ }
+ }
+
+ if (ddbItemsToBatchWrite.length) {
+ // Store data in primary DynamoDB table.
+ const execute = () => {
+ return batchWriteAll({
+ table: ddbEntryEntity.table,
+ items: ddbItemsToBatchWrite
+ });
+ };
+
+ logger.trace(
+ `Storing ${ddbItemsToBatchWrite.length} record(s) in primary DynamoDB table...`
+ );
+ await executeWithRetry(execute, {
+ onFailedAttempt: error => {
+ logger.warn(
+ `Batch write attempt #${error.attemptNumber} failed: ${error.message}`
+ );
+ }
+ });
+
+ if (ddbEsItemsToBatchWrite.length) {
+ logger.trace(
+ `Storing ${ddbEsItemsToBatchWrite.length} record(s) in DDB-ES DynamoDB table...`
+ );
+ const results = await waitUntilHealthy.wait({
+ async onUnhealthy(params) {
+ const shouldWaitReason = params.waitingReason.name;
+
+ logger.warn(
+ `Cluster is unhealthy (${shouldWaitReason}). Waiting for the cluster to become healthy...`,
+ params
+ );
+
+ if (status.stats.esHealthChecks.unhealthyReasons[shouldWaitReason]) {
+ status.stats.esHealthChecks.unhealthyReasons[shouldWaitReason]++;
+ } else {
+ status.stats.esHealthChecks.unhealthyReasons[shouldWaitReason] = 1;
+ }
+ }
+ });
+
+ status.stats.esHealthChecks.checksCount++;
+ status.stats.esHealthChecks.timeSpentWaiting += results.runningTime;
+
+ // Store data in DDB-ES DynamoDB table.
+ const executeDdbEs = () => {
+ return batchWriteAll({
+ table: ddbEsEntryEntity.table,
+ items: ddbEsItemsToBatchWrite
+ });
+ };
+
+ await executeWithRetry(executeDdbEs, {
+ onFailedAttempt: error => {
+ logger.warn(
+ `[DDB-ES Table] Batch write attempt #${error.attemptNumber} failed: ${error.message}`
+ );
+ }
+ });
+ }
+
+ status.stats.recordsUpdated += ddbItemsToBatchWrite.length;
+ }
+
+ // Update checkpoint after every batch.
+ let lastEvaluatedKey: LastEvaluatedKey = true;
+ if (result.lastEvaluatedKey) {
+ lastEvaluatedKey = result.lastEvaluatedKey as unknown as LastEvaluatedKeyObject;
+ }
+
+ status.lastEvaluatedKey = lastEvaluatedKey;
+
+ if (lastEvaluatedKey === true) {
+ return false;
+ }
+
+ // Continue further scanning.
+ return true;
+ }
+ );
+
+ // Store status in tmp file.
+ logger.trace({ status }, "Segment processing completed. Saving status to tmp file...");
+ const logFilePath = path.join(
+ os.tmpdir(),
+ `webiny-5-39-6-meta-fields-data-migration-log-${argv.runId}-${argv.segmentIndex}.log`
+ );
+
+ // Save segment processing stats to a file.
+ fs.writeFileSync(logFilePath, JSON.stringify(status.stats, null, 2));
+
+ logger.trace(`Segment processing stats saved in ${logFilePath}.`);
+})();
diff --git a/packages/migrations/src/utils/elasticsearch/esListIndexes.ts b/packages/migrations/src/utils/elasticsearch/esListIndexes.ts
new file mode 100644
index 00000000000..b5aaaf15e03
--- /dev/null
+++ b/packages/migrations/src/utils/elasticsearch/esListIndexes.ts
@@ -0,0 +1,25 @@
+import { Client } from "@elastic/elasticsearch";
+
+export interface ListIndexesParams {
+ elasticsearchClient: Client;
+ match?: string;
+}
+
+type IndicesApiResponse = Array>;
+
+export const esListIndexes = async (params: ListIndexesParams): Promise => {
+ const { elasticsearchClient } = params;
+
+ const response = await elasticsearchClient.cat.indices({
+ format: "json"
+ });
+
+ const listOfIndexes = response.body.map(item => item.index);
+
+ const match = params.match;
+ if (match) {
+ return listOfIndexes.filter(index => index.includes(match));
+ }
+
+ return listOfIndexes;
+};
diff --git a/packages/migrations/src/utils/elasticsearch/index.ts b/packages/migrations/src/utils/elasticsearch/index.ts
index e2c58d4628f..64235c94f5f 100644
--- a/packages/migrations/src/utils/elasticsearch/index.ts
+++ b/packages/migrations/src/utils/elasticsearch/index.ts
@@ -6,7 +6,7 @@ export * from "./esGetIndexSettings";
export * from "./esPutIndexSettings";
export * from "./esQueryAllWithCallback";
export * from "./esQueryAll";
-
+export * from "./esListIndexes";
export * from "./disableEsIndexing";
export * from "./fetchOriginalEsSettings";
export * from "./restoreOriginalEsSettings";
diff --git a/yarn.lock b/yarn.lock
index 3bd1858232c..eec9ca56019 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -18761,6 +18761,7 @@ __metadata:
"@webiny/api-headless-cms-ddb-es": 0.0.0
"@webiny/aws-sdk": 0.0.0
"@webiny/cli": 0.0.0
+ "@webiny/cli-plugin-deploy-pulumi": 0.0.0
"@webiny/data-migration": 0.0.0
"@webiny/db-dynamodb": 0.0.0
"@webiny/error": 0.0.0
@@ -18771,12 +18772,16 @@ __metadata:
"@webiny/project-utils": 0.0.0
"@webiny/utils": 0.0.0
elastic-ts: ^0.8.0
+ execa: ^5.0.0
+ fast-glob: ^3.2.7
jest-dynalite: ^3.2.0
jsonpack: ^1.1.5
lodash: ^4.17.21
+ pino-pretty: ^9.4.0
pluralize: ^8.0.0
ttypescript: ^1.5.13
typescript: 4.7.4
+ yargs: ^17.4.0
languageName: unknown
linkType: soft
From 49e39588e8ccf2acd3351643856692f8011c5136 Mon Sep 17 00:00:00 2001
From: Adrian Smijulj
Date: Fri, 7 Jun 2024 15:29:29 +0200
Subject: [PATCH 17/26] fix: deprecate `publishedOn` and `ownedBy` fields and
make new meta fields nullable (#4156)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Bruno Zorić
---
.../contentAPI/snapshots/category.manage.ts | 23 ++++++++++++-------
.../contentAPI/snapshots/category.read.ts | 23 ++++++++++++-------
.../contentAPI/snapshots/page.manage.ts | 23 ++++++++++++-------
.../contentAPI/snapshots/page.read.ts | 23 ++++++++++++-------
.../contentAPI/snapshots/product.manage.ts | 23 ++++++++++++-------
.../contentAPI/snapshots/product.read.ts | 23 ++++++++++++-------
.../contentAPI/snapshots/review.manage.ts | 23 ++++++++++++-------
.../contentAPI/snapshots/review.read.ts | 23 ++++++++++++-------
.../src/graphql/schema/contentEntries.ts | 5 ++--
.../src/graphql/schema/createManageSDL.ts | 8 ++++---
.../src/graphql/schema/createReadSDL.ts | 12 ++++++----
.../ContentEntry/RevisionListItem.tsx | 3 ++-
packages/migrations/package.json | 1 -
packages/serverless-cms-aws/webiny.config.js | 5 ++++
14 files changed, 141 insertions(+), 77 deletions(-)
diff --git a/packages/api-headless-cms/__tests__/contentAPI/snapshots/category.manage.ts b/packages/api-headless-cms/__tests__/contentAPI/snapshots/category.manage.ts
index 3c23c7b336c..c3f64894029 100644
--- a/packages/api-headless-cms/__tests__/contentAPI/snapshots/category.manage.ts
+++ b/packages/api-headless-cms/__tests__/contentAPI/snapshots/category.manage.ts
@@ -6,27 +6,34 @@ export default /* GraphQL */ `
id: ID!
entryId: String!
- createdOn: DateTime!
+ createdOn: DateTime
modifiedOn: DateTime
- savedOn: DateTime!
+ savedOn: DateTime
firstPublishedOn: DateTime
lastPublishedOn: DateTime
- createdBy: CmsIdentity!
+ createdBy: CmsIdentity
modifiedBy: CmsIdentity
- savedBy: CmsIdentity!
+ savedBy: CmsIdentity
firstPublishedBy: CmsIdentity
lastPublishedBy: CmsIdentity
- revisionCreatedOn: DateTime!
+ revisionCreatedOn: DateTime
revisionModifiedOn: DateTime
- revisionSavedOn: DateTime!
+ revisionSavedOn: DateTime
revisionFirstPublishedOn: DateTime
revisionLastPublishedOn: DateTime
- revisionCreatedBy: CmsIdentity!
+ revisionCreatedBy: CmsIdentity
revisionModifiedBy: CmsIdentity
- revisionSavedBy: CmsIdentity!
+ revisionSavedBy: CmsIdentity
revisionFirstPublishedBy: CmsIdentity
revisionLastPublishedBy: CmsIdentity
+ publishedOn: DateTime
+ @deprecated(
+ reason: "Field was removed with the 5.39.0 release. Use 'firstPublishedOn' or 'lastPublishedOn' field."
+ )
+ ownedBy: CmsIdentity
+ @deprecated(reason: "Field was removed with the 5.39.0 release. Use 'createdBy' field.")
+
meta: CategoryApiNameWhichIsABitDifferentThanModelIdMeta
title: String
slug: String
diff --git a/packages/api-headless-cms/__tests__/contentAPI/snapshots/category.read.ts b/packages/api-headless-cms/__tests__/contentAPI/snapshots/category.read.ts
index f90117705f3..7de8f2863aa 100644
--- a/packages/api-headless-cms/__tests__/contentAPI/snapshots/category.read.ts
+++ b/packages/api-headless-cms/__tests__/contentAPI/snapshots/category.read.ts
@@ -7,27 +7,34 @@ export default /* GraphQL */ `
entryId: String!
modelId: String!
- createdOn: DateTime!
+ createdOn: DateTime
modifiedOn: DateTime
- savedOn: DateTime!
+ savedOn: DateTime
firstPublishedOn: DateTime
lastPublishedOn: DateTime
- createdBy: CmsIdentity!
+ createdBy: CmsIdentity
modifiedBy: CmsIdentity
- savedBy: CmsIdentity!
+ savedBy: CmsIdentity
firstPublishedBy: CmsIdentity
lastPublishedBy: CmsIdentity
- revisionCreatedOn: DateTime!
+ revisionCreatedOn: DateTime
revisionModifiedOn: DateTime
- revisionSavedOn: DateTime!
+ revisionSavedOn: DateTime
revisionFirstPublishedOn: DateTime
revisionLastPublishedOn: DateTime
- revisionCreatedBy: CmsIdentity!
+ revisionCreatedBy: CmsIdentity
revisionModifiedBy: CmsIdentity
- revisionSavedBy: CmsIdentity!
+ revisionSavedBy: CmsIdentity
revisionFirstPublishedBy: CmsIdentity
revisionLastPublishedBy: CmsIdentity
+ publishedOn: DateTime
+ @deprecated(
+ reason: "Field was removed with the 5.39.0 release. Use 'firstPublishedOn' or 'lastPublishedOn' field."
+ )
+ ownedBy: CmsIdentity
+ @deprecated(reason: "Field was removed with the 5.39.0 release. Use 'createdBy' field.")
+
title: String
slug: String
}
diff --git a/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.manage.ts b/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.manage.ts
index 5e32beeeeaa..6b5e46dd221 100644
--- a/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.manage.ts
+++ b/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.manage.ts
@@ -6,27 +6,34 @@ export default /* GraphQL */ `
id: ID!
entryId: String!
- createdOn: DateTime!
+ createdOn: DateTime
modifiedOn: DateTime
- savedOn: DateTime!
+ savedOn: DateTime
firstPublishedOn: DateTime
lastPublishedOn: DateTime
- createdBy: CmsIdentity!
+ createdBy: CmsIdentity
modifiedBy: CmsIdentity
- savedBy: CmsIdentity!
+ savedBy: CmsIdentity
firstPublishedBy: CmsIdentity
lastPublishedBy: CmsIdentity
- revisionCreatedOn: DateTime!
+ revisionCreatedOn: DateTime
revisionModifiedOn: DateTime
- revisionSavedOn: DateTime!
+ revisionSavedOn: DateTime
revisionFirstPublishedOn: DateTime
revisionLastPublishedOn: DateTime
- revisionCreatedBy: CmsIdentity!
+ revisionCreatedBy: CmsIdentity
revisionModifiedBy: CmsIdentity
- revisionSavedBy: CmsIdentity!
+ revisionSavedBy: CmsIdentity
revisionFirstPublishedBy: CmsIdentity
revisionLastPublishedBy: CmsIdentity
+ publishedOn: DateTime
+ @deprecated(
+ reason: "Field was removed with the 5.39.0 release. Use 'firstPublishedOn' or 'lastPublishedOn' field."
+ )
+ ownedBy: CmsIdentity
+ @deprecated(reason: "Field was removed with the 5.39.0 release. Use 'createdBy' field.")
+
meta: PageModelApiNameMeta
content: [PageModelApiName_Content!]
header: PageModelApiName_Header
diff --git a/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.read.ts b/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.read.ts
index 076f8eb527f..e7126235413 100644
--- a/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.read.ts
+++ b/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.read.ts
@@ -7,27 +7,34 @@ export default /* GraphQL */ `
entryId: String!
modelId: String!
- createdOn: DateTime!
+ createdOn: DateTime
modifiedOn: DateTime
- savedOn: DateTime!
+ savedOn: DateTime
firstPublishedOn: DateTime
lastPublishedOn: DateTime
- createdBy: CmsIdentity!
+ createdBy: CmsIdentity
modifiedBy: CmsIdentity
- savedBy: CmsIdentity!
+ savedBy: CmsIdentity
firstPublishedBy: CmsIdentity
lastPublishedBy: CmsIdentity
- revisionCreatedOn: DateTime!
+ revisionCreatedOn: DateTime
revisionModifiedOn: DateTime
- revisionSavedOn: DateTime!
+ revisionSavedOn: DateTime
revisionFirstPublishedOn: DateTime
revisionLastPublishedOn: DateTime
- revisionCreatedBy: CmsIdentity!
+ revisionCreatedBy: CmsIdentity
revisionModifiedBy: CmsIdentity
- revisionSavedBy: CmsIdentity!
+ revisionSavedBy: CmsIdentity
revisionFirstPublishedBy: CmsIdentity
revisionLastPublishedBy: CmsIdentity
+ publishedOn: DateTime
+ @deprecated(
+ reason: "Field was removed with the 5.39.0 release. Use 'firstPublishedOn' or 'lastPublishedOn' field."
+ )
+ ownedBy: CmsIdentity
+ @deprecated(reason: "Field was removed with the 5.39.0 release. Use 'createdBy' field.")
+
content: [PageModelApiName_Content!]
header: PageModelApiName_Header
objective: PageModelApiName_Objective
diff --git a/packages/api-headless-cms/__tests__/contentAPI/snapshots/product.manage.ts b/packages/api-headless-cms/__tests__/contentAPI/snapshots/product.manage.ts
index 1723f40791f..5573282aff8 100644
--- a/packages/api-headless-cms/__tests__/contentAPI/snapshots/product.manage.ts
+++ b/packages/api-headless-cms/__tests__/contentAPI/snapshots/product.manage.ts
@@ -6,27 +6,34 @@ export default /* GraphQL */ `
id: ID!
entryId: String!
- createdOn: DateTime!
+ createdOn: DateTime
modifiedOn: DateTime
- savedOn: DateTime!
+ savedOn: DateTime
firstPublishedOn: DateTime
lastPublishedOn: DateTime
- createdBy: CmsIdentity!
+ createdBy: CmsIdentity
modifiedBy: CmsIdentity
- savedBy: CmsIdentity!
+ savedBy: CmsIdentity
firstPublishedBy: CmsIdentity
lastPublishedBy: CmsIdentity
- revisionCreatedOn: DateTime!
+ revisionCreatedOn: DateTime
revisionModifiedOn: DateTime
- revisionSavedOn: DateTime!
+ revisionSavedOn: DateTime
revisionFirstPublishedOn: DateTime
revisionLastPublishedOn: DateTime
- revisionCreatedBy: CmsIdentity!
+ revisionCreatedBy: CmsIdentity
revisionModifiedBy: CmsIdentity
- revisionSavedBy: CmsIdentity!
+ revisionSavedBy: CmsIdentity
revisionFirstPublishedBy: CmsIdentity
revisionLastPublishedBy: CmsIdentity
+ publishedOn: DateTime
+ @deprecated(
+ reason: "Field was removed with the 5.39.0 release. Use 'firstPublishedOn' or 'lastPublishedOn' field."
+ )
+ ownedBy: CmsIdentity
+ @deprecated(reason: "Field was removed with the 5.39.0 release. Use 'createdBy' field.")
+
meta: ProductApiSingularMeta
title: String
category: RefField
diff --git a/packages/api-headless-cms/__tests__/contentAPI/snapshots/product.read.ts b/packages/api-headless-cms/__tests__/contentAPI/snapshots/product.read.ts
index 1d5de91a282..2d0c7afcb75 100644
--- a/packages/api-headless-cms/__tests__/contentAPI/snapshots/product.read.ts
+++ b/packages/api-headless-cms/__tests__/contentAPI/snapshots/product.read.ts
@@ -7,27 +7,34 @@ export default /* GraphQL */ `
entryId: String!
modelId: String!
- createdOn: DateTime!
+ createdOn: DateTime
modifiedOn: DateTime
- savedOn: DateTime!
+ savedOn: DateTime
firstPublishedOn: DateTime
lastPublishedOn: DateTime
- createdBy: CmsIdentity!
+ createdBy: CmsIdentity
modifiedBy: CmsIdentity
- savedBy: CmsIdentity!
+ savedBy: CmsIdentity
firstPublishedBy: CmsIdentity
lastPublishedBy: CmsIdentity
- revisionCreatedOn: DateTime!
+ revisionCreatedOn: DateTime
revisionModifiedOn: DateTime
- revisionSavedOn: DateTime!
+ revisionSavedOn: DateTime
revisionFirstPublishedOn: DateTime
revisionLastPublishedOn: DateTime
- revisionCreatedBy: CmsIdentity!
+ revisionCreatedBy: CmsIdentity
revisionModifiedBy: CmsIdentity
- revisionSavedBy: CmsIdentity!
+ revisionSavedBy: CmsIdentity
revisionFirstPublishedBy: CmsIdentity
revisionLastPublishedBy: CmsIdentity
+ publishedOn: DateTime
+ @deprecated(
+ reason: "Field was removed with the 5.39.0 release. Use 'firstPublishedOn' or 'lastPublishedOn' field."
+ )
+ ownedBy: CmsIdentity
+ @deprecated(reason: "Field was removed with the 5.39.0 release. Use 'createdBy' field.")
+
title: String
category(populate: Boolean = true): CategoryApiNameWhichIsABitDifferentThanModelId
price: Number
diff --git a/packages/api-headless-cms/__tests__/contentAPI/snapshots/review.manage.ts b/packages/api-headless-cms/__tests__/contentAPI/snapshots/review.manage.ts
index a608d0bdff7..4f2ebc9ad92 100644
--- a/packages/api-headless-cms/__tests__/contentAPI/snapshots/review.manage.ts
+++ b/packages/api-headless-cms/__tests__/contentAPI/snapshots/review.manage.ts
@@ -6,27 +6,34 @@ export default /* GraphQL */ `
id: ID!
entryId: String!
- createdOn: DateTime!
+ createdOn: DateTime
modifiedOn: DateTime
- savedOn: DateTime!
+ savedOn: DateTime
firstPublishedOn: DateTime
lastPublishedOn: DateTime
- createdBy: CmsIdentity!
+ createdBy: CmsIdentity
modifiedBy: CmsIdentity
- savedBy: CmsIdentity!
+ savedBy: CmsIdentity
firstPublishedBy: CmsIdentity
lastPublishedBy: CmsIdentity
- revisionCreatedOn: DateTime!
+ revisionCreatedOn: DateTime
revisionModifiedOn: DateTime
- revisionSavedOn: DateTime!
+ revisionSavedOn: DateTime
revisionFirstPublishedOn: DateTime
revisionLastPublishedOn: DateTime
- revisionCreatedBy: CmsIdentity!
+ revisionCreatedBy: CmsIdentity
revisionModifiedBy: CmsIdentity
- revisionSavedBy: CmsIdentity!
+ revisionSavedBy: CmsIdentity
revisionFirstPublishedBy: CmsIdentity
revisionLastPublishedBy: CmsIdentity
+ publishedOn: DateTime
+ @deprecated(
+ reason: "Field was removed with the 5.39.0 release. Use 'firstPublishedOn' or 'lastPublishedOn' field."
+ )
+ ownedBy: CmsIdentity
+ @deprecated(reason: "Field was removed with the 5.39.0 release. Use 'createdBy' field.")
+
meta: ReviewApiModelMeta
text: String
product: RefField
diff --git a/packages/api-headless-cms/__tests__/contentAPI/snapshots/review.read.ts b/packages/api-headless-cms/__tests__/contentAPI/snapshots/review.read.ts
index d194fb3c122..96dea2264f1 100644
--- a/packages/api-headless-cms/__tests__/contentAPI/snapshots/review.read.ts
+++ b/packages/api-headless-cms/__tests__/contentAPI/snapshots/review.read.ts
@@ -7,27 +7,34 @@ export default /* GraphQL */ `
entryId: String!
modelId: String!
- createdOn: DateTime!
+ createdOn: DateTime
modifiedOn: DateTime
- savedOn: DateTime!
+ savedOn: DateTime
firstPublishedOn: DateTime
lastPublishedOn: DateTime
- createdBy: CmsIdentity!
+ createdBy: CmsIdentity
modifiedBy: CmsIdentity
- savedBy: CmsIdentity!
+ savedBy: CmsIdentity
firstPublishedBy: CmsIdentity
lastPublishedBy: CmsIdentity
- revisionCreatedOn: DateTime!
+ revisionCreatedOn: DateTime
revisionModifiedOn: DateTime
- revisionSavedOn: DateTime!
+ revisionSavedOn: DateTime
revisionFirstPublishedOn: DateTime
revisionLastPublishedOn: DateTime
- revisionCreatedBy: CmsIdentity!
+ revisionCreatedBy: CmsIdentity
revisionModifiedBy: CmsIdentity
- revisionSavedBy: CmsIdentity!
+ revisionSavedBy: CmsIdentity
revisionFirstPublishedBy: CmsIdentity
revisionLastPublishedBy: CmsIdentity
+ publishedOn: DateTime
+ @deprecated(
+ reason: "Field was removed with the 5.39.0 release. Use 'firstPublishedOn' or 'lastPublishedOn' field."
+ )
+ ownedBy: CmsIdentity
+ @deprecated(reason: "Field was removed with the 5.39.0 release. Use 'createdBy' field.")
+
text: String
product(populate: Boolean = true): ProductApiSingular
rating: Number
diff --git a/packages/api-headless-cms/src/graphql/schema/contentEntries.ts b/packages/api-headless-cms/src/graphql/schema/contentEntries.ts
index 4e82f68c218..0c8afa159fa 100644
--- a/packages/api-headless-cms/src/graphql/schema/contentEntries.ts
+++ b/packages/api-headless-cms/src/graphql/schema/contentEntries.ts
@@ -8,7 +8,7 @@ import { getEntryDescription } from "~/utils/getEntryDescription";
import { getEntryImage } from "~/utils/getEntryImage";
import { entryFieldFromStorageTransform } from "~/utils/entryStorage";
import { Resolvers } from "@webiny/handler-graphql/types";
-import { ENTRY_META_FIELDS, isNullableEntryMetaField, isDateTimeEntryMetaField } from "~/constants";
+import { ENTRY_META_FIELDS, isDateTimeEntryMetaField } from "~/constants";
interface EntriesByModel {
[key: string]: string[];
@@ -321,10 +321,9 @@ export const createContentEntriesSchema = ({
}
const onByMetaFields = ENTRY_META_FIELDS.map(field => {
- const isNullable = isNullableEntryMetaField(field) ? "" : "!";
const fieldType = isDateTimeEntryMetaField(field) ? "DateTime" : "CmsIdentity";
- return `${field}: ${fieldType}${isNullable}`;
+ return `${field}: ${fieldType}`;
}).join("\n");
const plugin = new CmsGraphQLSchemaPlugin({
diff --git a/packages/api-headless-cms/src/graphql/schema/createManageSDL.ts b/packages/api-headless-cms/src/graphql/schema/createManageSDL.ts
index 21e1ffd0265..2a15c226a65 100644
--- a/packages/api-headless-cms/src/graphql/schema/createManageSDL.ts
+++ b/packages/api-headless-cms/src/graphql/schema/createManageSDL.ts
@@ -5,7 +5,7 @@ import { renderGetFilterFields } from "~/utils/renderGetFilterFields";
import { renderInputFields } from "~/utils/renderInputFields";
import { renderFields } from "~/utils/renderFields";
import { CmsGraphQLSchemaSorterPlugin } from "~/plugins";
-import { ENTRY_META_FIELDS, isDateTimeEntryMetaField, isNullableEntryMetaField } from "~/constants";
+import { ENTRY_META_FIELDS, isDateTimeEntryMetaField } from "~/constants";
interface CreateManageSDLParams {
models: CmsModel[];
@@ -70,10 +70,9 @@ export const createManageSDL: CreateManageSDL = ({
}).join("\n");
const onByMetaGqlFields = ENTRY_META_FIELDS.map(field => {
- const isNullable = isNullableEntryMetaField(field) ? "" : "!";
const fieldType = isDateTimeEntryMetaField(field) ? "DateTime" : "CmsIdentity";
- return `${field}: ${fieldType}${isNullable}`;
+ return `${field}: ${fieldType}`;
}).join("\n");
// Had to remove /* GraphQL */ because prettier would not format the code correctly.
@@ -85,6 +84,9 @@ export const createManageSDL: CreateManageSDL = ({
${onByMetaGqlFields}
+ publishedOn: DateTime @deprecated(reason: "Field was removed with the 5.39.0 release. Use 'firstPublishedOn' or 'lastPublishedOn' field.")
+ ownedBy: CmsIdentity @deprecated(reason: "Field was removed with the 5.39.0 release. Use 'createdBy' field.")
+
meta: ${singularName}Meta
${fields.map(f => f.fields).join("\n")}
# Advanced Content Organization - make required in 5.38.0
diff --git a/packages/api-headless-cms/src/graphql/schema/createReadSDL.ts b/packages/api-headless-cms/src/graphql/schema/createReadSDL.ts
index 8fac945cdcf..58daebfda8f 100644
--- a/packages/api-headless-cms/src/graphql/schema/createReadSDL.ts
+++ b/packages/api-headless-cms/src/graphql/schema/createReadSDL.ts
@@ -4,7 +4,7 @@ import { renderSortEnum } from "~/utils/renderSortEnum";
import { renderFields } from "~/utils/renderFields";
import { renderGetFilterFields } from "~/utils/renderGetFilterFields";
import { CmsGraphQLSchemaSorterPlugin } from "~/plugins";
-import { ENTRY_META_FIELDS, isDateTimeEntryMetaField, isNullableEntryMetaField } from "~/constants";
+import { ENTRY_META_FIELDS, isDateTimeEntryMetaField } from "~/constants";
interface CreateReadSDLParams {
models: CmsModel[];
@@ -57,11 +57,10 @@ export const createReadSDL: CreateReadSDL = ({
const { singularApiName: singularName, pluralApiName: pluralName } = model;
- const onByMetaFields = ENTRY_META_FIELDS.map(field => {
- const isNullable = isNullableEntryMetaField(field) ? "" : "!";
+ const onByMetaGqlFields = ENTRY_META_FIELDS.map(field => {
const fieldType = isDateTimeEntryMetaField(field) ? "DateTime" : "CmsIdentity";
- return `${field}: ${fieldType}${isNullable}`;
+ return `${field}: ${fieldType}`;
}).join("\n");
return `
@@ -71,7 +70,10 @@ export const createReadSDL: CreateReadSDL = ({
entryId: String!
${hasModelIdField ? "" : "modelId: String!"}
- ${onByMetaFields}
+ ${onByMetaGqlFields}
+
+ publishedOn: DateTime @deprecated(reason: "Field was removed with the 5.39.0 release. Use 'firstPublishedOn' or 'lastPublishedOn' field.")
+ ownedBy: CmsIdentity @deprecated(reason: "Field was removed with the 5.39.0 release. Use 'createdBy' field.")
${fieldsRender.map(f => f.fields).join("\n")}
}
diff --git a/packages/app-headless-cms/src/admin/views/contentEntries/ContentEntry/RevisionListItem.tsx b/packages/app-headless-cms/src/admin/views/contentEntries/ContentEntry/RevisionListItem.tsx
index dff359cda42..9e448d4c45c 100644
--- a/packages/app-headless-cms/src/admin/views/contentEntries/ContentEntry/RevisionListItem.tsx
+++ b/packages/app-headless-cms/src/admin/views/contentEntries/ContentEntry/RevisionListItem.tsx
@@ -102,7 +102,8 @@ const RevisionListItem = ({ revision }: RevisionListItemProps) => {
{revision.meta.title || t`N/A`}
{t`Last modified by {author} on {time} (#{version})`({
- author: revision.revisionCreatedBy.displayName,
+ // Added this because revisionCreatedBy can be returned as null from GraphQL.
+ author: revision.revisionCreatedBy?.displayName,
time: ,
version: revision.meta.version
})}
diff --git a/packages/migrations/package.json b/packages/migrations/package.json
index d9fb975aa62..5ff5ff2df1a 100644
--- a/packages/migrations/package.json
+++ b/packages/migrations/package.json
@@ -1,7 +1,6 @@
{
"name": "@webiny/migrations",
"version": "0.0.0",
- "private": true,
"scripts": {
"build": "yarn webiny run build",
"watch": "yarn webiny run watch"
diff --git a/packages/serverless-cms-aws/webiny.config.js b/packages/serverless-cms-aws/webiny.config.js
index 4bf68f857df..54680f28c53 100644
--- a/packages/serverless-cms-aws/webiny.config.js
+++ b/packages/serverless-cms-aws/webiny.config.js
@@ -4,6 +4,11 @@ const { Listr } = require("listr2");
const { createWatchPackage, createBuildPackage } = require("@webiny/project-utils");
async function buildHandlers(options) {
+ if (process.env.WEBINY_SERVERLESS_CMS_AWS_SKIP_PREPUBLISH_ONLY === "true") {
+ console.log("Skipping building of handlers...");
+ return;
+ }
+
// Bundle all handlers. These are then used directly in real Webiny projects.
const handlerPaths = glob.sync(`${__dirname}/handlers/**/webiny.config.js`);
From 1359b71a00dbe6d0212272f84cfe64174318e960 Mon Sep 17 00:00:00 2001
From: Pavel Denisjuk
Date: Sat, 8 Jun 2024 20:54:42 +0200
Subject: [PATCH 18/26] fix(api-security-auth0): expose tenant access control
---
.../api-security-auth0/src/createAuth0.ts | 14 +++++---
.../src/createGroupAuthorizer.ts | 32 +++++++++++++------
packages/api-security-auth0/src/types.ts | 8 +++++
3 files changed, 40 insertions(+), 14 deletions(-)
diff --git a/packages/api-security-auth0/src/createAuth0.ts b/packages/api-security-auth0/src/createAuth0.ts
index b02bb16580e..7a1cff7e0e4 100644
--- a/packages/api-security-auth0/src/createAuth0.ts
+++ b/packages/api-security-auth0/src/createAuth0.ts
@@ -3,12 +3,17 @@ import { createGroupAuthorizer, GroupAuthorizerConfig } from "~/createGroupAutho
import { createIdentityType } from "~/createIdentityType";
import { createAdminUsersHooks } from "./createAdminUsersHooks";
import { extendTenancy } from "./extendTenancy";
+import { Context } from "~/types";
-export interface CreateAuth0Config extends AuthenticatorConfig, GroupAuthorizerConfig {
+export interface CreateAuth0Config
+ extends AuthenticatorConfig,
+ GroupAuthorizerConfig {
graphQLIdentityType?: string;
}
-export const createAuth0 = (config: CreateAuth0Config) => {
+export const createAuth0 = (
+ config: CreateAuth0Config
+) => {
const identityType = config.identityType || "admin";
const graphQLIdentityType = config.graphQLIdentityType || "Auth0Identity";
@@ -17,10 +22,11 @@ export const createAuth0 = (config: CreateAuth0Config) => {
domain: config.domain,
getIdentity: config.getIdentity
}),
- createGroupAuthorizer({
+ createGroupAuthorizer({
identityType,
getGroupSlug: config.getGroupSlug,
- inheritGroupsFromParentTenant: config.inheritGroupsFromParentTenant
+ inheritGroupsFromParentTenant: config.inheritGroupsFromParentTenant,
+ canAccessTenant: config.canAccessTenant
}),
createIdentityType({
identityType,
diff --git a/packages/api-security-auth0/src/createGroupAuthorizer.ts b/packages/api-security-auth0/src/createGroupAuthorizer.ts
index 0e5fd39284b..1704b7ab701 100644
--- a/packages/api-security-auth0/src/createGroupAuthorizer.ts
+++ b/packages/api-security-auth0/src/createGroupAuthorizer.ts
@@ -1,14 +1,10 @@
-import { SecurityContext } from "@webiny/api-security/types";
import { ContextPlugin } from "@webiny/handler";
-import { TenancyContext } from "@webiny/api-tenancy/types";
-import { I18NContext } from "@webiny/api-i18n/types";
import { getPermissionsFromSecurityGroupsForLocale } from "@webiny/api-security";
-
-type Context = TenancyContext & SecurityContext & I18NContext;
+import { Context } from "~/types";
export type GroupSlug = string | undefined;
-export interface GroupAuthorizerConfig {
+export interface GroupAuthorizerConfig {
/**
* Specify an `identityType` if you want to only run this authorizer for specific identities.
*/
@@ -17,16 +13,23 @@ export interface GroupAuthorizerConfig {
/**
* Get a group slug to load permissions from.
*/
- getGroupSlug(context: Context): Promise | GroupSlug;
+ getGroupSlug?: (context: TContext) => Promise | GroupSlug;
/**
* If a security group is not found, try loading it from a parent tenant (default: true).
*/
inheritGroupsFromParentTenant?: boolean;
+
+ /**
+ * Check whether the current identity is authorized to access the current tenant.
+ */
+ canAccessTenant?: (context: TContext) => boolean | Promise;
}
-export const createGroupAuthorizer = (config: GroupAuthorizerConfig) => {
- return new ContextPlugin(context => {
+export const createGroupAuthorizer = (
+ config: GroupAuthorizerConfig
+) => {
+ return new ContextPlugin(context => {
const { security } = context;
security.addAuthorizer(async () => {
const identity = security.getIdentity();
@@ -46,7 +49,16 @@ export const createGroupAuthorizer = (config: GroupAuthorizerConfig) => {
return null;
}
- const groupSlug = await config.getGroupSlug(context);
+ if (config.canAccessTenant) {
+ const canAccessTenant = await config.canAccessTenant(context);
+ if (!canAccessTenant) {
+ return [];
+ }
+ }
+
+ const groupSlug = config.getGroupSlug
+ ? await config.getGroupSlug(context)
+ : identity.group;
if (!groupSlug) {
return null;
diff --git a/packages/api-security-auth0/src/types.ts b/packages/api-security-auth0/src/types.ts
index ae9745e8963..ca9144be4f8 100644
--- a/packages/api-security-auth0/src/types.ts
+++ b/packages/api-security-auth0/src/types.ts
@@ -1,7 +1,15 @@
import "@webiny/api-tenancy/types";
+import { SecurityContext } from "@webiny/api-security/types";
+import { TenancyContext } from "@webiny/api-tenancy/types";
+import { I18NContext } from "@webiny/api-i18n/types";
declare module "@webiny/api-tenancy/types" {
interface TenantSettings {
appClientId: string;
}
}
+
+/**
+ * @internal
+ */
+export type Context = TenancyContext & SecurityContext & I18NContext;
From c1849b33c04115a12008e1b060f42682435d735b Mon Sep 17 00:00:00 2001
From: Pavel Denisjuk
Date: Mon, 10 Jun 2024 15:15:12 +0200
Subject: [PATCH 19/26] fix(api-form-builder): check both global and form
recaptcha settings
---
.../src/plugins/crud/submissions.crud.ts | 3 ++-
.../src/plugins/crud/utils/isRecaptchaEnabled.ts | 9 +++++++++
packages/api-form-builder/src/types.ts | 9 ++++++++-
3 files changed, 19 insertions(+), 2 deletions(-)
create mode 100644 packages/api-form-builder/src/plugins/crud/utils/isRecaptchaEnabled.ts
diff --git a/packages/api-form-builder/src/plugins/crud/submissions.crud.ts b/packages/api-form-builder/src/plugins/crud/submissions.crud.ts
index 5e858ed1490..9afa8e644b0 100644
--- a/packages/api-form-builder/src/plugins/crud/submissions.crud.ts
+++ b/packages/api-form-builder/src/plugins/crud/submissions.crud.ts
@@ -26,6 +26,7 @@ import { createTopic } from "@webiny/pubsub";
import { sanitizeFormSubmissionData } from "~/plugins/crud/utils/sanitizeFormSubmissionData";
import { mdbid } from "@webiny/utils";
import { FormsPermissions } from "~/plugins/crud/permissions/FormsPermissions";
+import { isRecaptchaEnabled } from "~/plugins/crud/utils/isRecaptchaEnabled";
interface CreateSubmissionsCrudParams {
context: FormBuilderContext;
@@ -185,7 +186,7 @@ export const createSubmissionsCrud = (params: CreateSubmissionsCrudParams): Subm
throwOnNotFound: true
});
- if (settings && settings.reCaptcha && settings.reCaptcha.enabled) {
+ if (settings && isRecaptchaEnabled(settings, form)) {
if (!reCaptchaResponseToken) {
throw new Error("Missing reCAPTCHA response token - cannot verify.");
}
diff --git a/packages/api-form-builder/src/plugins/crud/utils/isRecaptchaEnabled.ts b/packages/api-form-builder/src/plugins/crud/utils/isRecaptchaEnabled.ts
new file mode 100644
index 00000000000..86303d32bbc
--- /dev/null
+++ b/packages/api-form-builder/src/plugins/crud/utils/isRecaptchaEnabled.ts
@@ -0,0 +1,9 @@
+import { FbForm, Settings } from "~/types";
+
+export const isRecaptchaEnabled = (settings: Settings, form: FbForm) => {
+ if (!settings.reCaptcha.enabled) {
+ return false;
+ }
+
+ return form.settings.reCaptcha?.enabled === true;
+};
diff --git a/packages/api-form-builder/src/types.ts b/packages/api-form-builder/src/types.ts
index 8d69c9ba340..9aaf42c72e7 100644
--- a/packages/api-form-builder/src/types.ts
+++ b/packages/api-form-builder/src/types.ts
@@ -94,6 +94,13 @@ export interface FbFormField {
settings?: Record;
}
+export interface ReCaptchaSettings {
+ reCaptcha: {
+ enabled: boolean | null;
+ errorMessage: string;
+ };
+}
+
export interface FbForm {
id: string;
tenant: string;
@@ -112,7 +119,7 @@ export interface FbForm {
fields: FbFormField[];
steps: FbFormStep[];
stats: Omit;
- settings: Record;
+ settings: ReCaptchaSettings | Record;
triggers: Record | null;
formId: string;
webinyVersion: string;
From 96f2f699b6c80a870e085329744cdee0b38f1f3f Mon Sep 17 00:00:00 2001
From: Adrian Smijulj
Date: Tue, 11 Jun 2024 10:32:04 +0200
Subject: [PATCH 20/26] fix: ensure old meta field values are returned (#4161)
---
.../src/definitions/entry.ts | 13 ++
.../src/definitions/entry.ts | 13 ++
...entEntriesDeprecatedOnByMetaFields.test.ts | 163 ++++++++++++++++++
.../useTestModelHandler/manageGql.ts | 3 +
.../useTestModelHandler/readGql.ts | 6 +
packages/api-headless-cms/package.json | 1 +
.../api-headless-cms/src/graphql/getSchema.ts | 44 +----
.../src/graphql/getSchema/generateCacheId.ts | 14 ++
.../src/graphql/getSchema/generateCacheKey.ts | 31 ++++
.../graphql/schema/createManageResolvers.ts | 2 +-
packages/api-headless-cms/src/types.ts | 14 ++
packages/api-headless-cms/tsconfig.build.json | 1 +
packages/api-headless-cms/tsconfig.json | 3 +
.../project-utils/testing/presets/index.js | 3 +
yarn.lock | 1 +
15 files changed, 270 insertions(+), 42 deletions(-)
create mode 100644 packages/api-headless-cms/__tests__/contentAPI/contentEntriesDeprecatedOnByMetaFields.test.ts
create mode 100644 packages/api-headless-cms/src/graphql/getSchema/generateCacheId.ts
create mode 100644 packages/api-headless-cms/src/graphql/getSchema/generateCacheKey.ts
diff --git a/packages/api-headless-cms-ddb-es/src/definitions/entry.ts b/packages/api-headless-cms-ddb-es/src/definitions/entry.ts
index 150d62fc9e8..1878a0cfd4c 100644
--- a/packages/api-headless-cms-ddb-es/src/definitions/entry.ts
+++ b/packages/api-headless-cms-ddb-es/src/definitions/entry.ts
@@ -67,6 +67,19 @@ export const createEntryEntity = (params: CreateEntryEntityParams): Entity
firstPublishedBy: { type: "map" },
lastPublishedBy: { type: "map" },
+ /**
+ * Deprecated fields. 👇
+ */
+ ownedBy: {
+ type: "map"
+ },
+ publishedOn: {
+ type: "string"
+ },
+
+ /**
+ * The rest. 👇
+ */
modelId: {
type: "string"
},
diff --git a/packages/api-headless-cms-ddb/src/definitions/entry.ts b/packages/api-headless-cms-ddb/src/definitions/entry.ts
index 196d681dd1c..e117d8fdda4 100644
--- a/packages/api-headless-cms-ddb/src/definitions/entry.ts
+++ b/packages/api-headless-cms-ddb/src/definitions/entry.ts
@@ -80,6 +80,19 @@ export const createEntryEntity = (params: Params): Entity => {
firstPublishedBy: { type: "map" },
lastPublishedBy: { type: "map" },
+ /**
+ * Deprecated fields. 👇
+ */
+ ownedBy: {
+ type: "map"
+ },
+ publishedOn: {
+ type: "string"
+ },
+
+ /**
+ * The rest. 👇
+ */
version: {
type: "number"
},
diff --git a/packages/api-headless-cms/__tests__/contentAPI/contentEntriesDeprecatedOnByMetaFields.test.ts b/packages/api-headless-cms/__tests__/contentAPI/contentEntriesDeprecatedOnByMetaFields.test.ts
new file mode 100644
index 00000000000..a6ce394ece9
--- /dev/null
+++ b/packages/api-headless-cms/__tests__/contentAPI/contentEntriesDeprecatedOnByMetaFields.test.ts
@@ -0,0 +1,163 @@
+import { SecurityIdentity } from "@webiny/api-security/types";
+import { useTestModelHandler } from "~tests/testHelpers/useTestModelHandler";
+import { getDocumentClient } from "@webiny/project-utils/testing/dynamodb";
+import { PutCommand, QueryCommand, unmarshall } from "@webiny/aws-sdk/client-dynamodb";
+import { CmsGraphQLSchemaPlugin } from "@webiny/api-headless-cms/plugins";
+
+const identityA: SecurityIdentity = { id: "a", type: "admin", displayName: "A" };
+
+jest.mock("~/graphql/getSchema/generateCacheId", () => {
+ return {
+ generateCacheId: () => Date.now()
+ };
+});
+
+describe("Content entries - Entry Meta Fields", () => {
+ const { manage: manageApiIdentityA, read: readApiIdentityA } = useTestModelHandler({
+ identity: identityA
+ });
+
+ beforeEach(async () => {
+ await manageApiIdentityA.setup();
+ });
+
+ test("deprecated 'publishedOn' and 'ownedBy' GraphQL fields should still return values", async () => {
+ const { data: testEntry } = await manageApiIdentityA.createTestEntry();
+
+ // Let's directly insert values for deprecated fields.
+ const client = getDocumentClient();
+
+ // Not pretty, but this test will be removed anyway, in 5.41.0.
+ if (process.env.WEBINY_STORAGE_OPS === "ddb") {
+ const { Items: testEntryDdbRecords } = await client.send(
+ new QueryCommand({
+ TableName: String(process.env.DB_TABLE),
+ KeyConditionExpression: "PK = :PK AND SK > :SK",
+ ExpressionAttributeValues: {
+ ":PK": { S: `T#root#L#en-US#CMS#CME#CME#${testEntry.entryId}` },
+ ":SK": { S: " " }
+ }
+ })
+ );
+
+ for (const testEntryDdbRecord of testEntryDdbRecords!) {
+ await client.send(
+ new PutCommand({
+ TableName: process.env.DB_TABLE,
+ Item: {
+ ...unmarshall(testEntryDdbRecord),
+ publishedOn: "2021-01-01T00:00:00.000Z",
+ ownedBy: identityA
+ }
+ })
+ );
+ }
+ } else {
+ const { Items: testEntryDdbRecords } = await client.send(
+ new QueryCommand({
+ TableName: String(process.env.DB_TABLE),
+ KeyConditionExpression: "PK = :PK AND SK > :SK",
+ ExpressionAttributeValues: {
+ ":PK": { S: `T#root#L#en-US#CMS#CME#${testEntry.entryId}` },
+ ":SK": { S: " " }
+ }
+ })
+ );
+
+ for (const testEntryDdbRecord of testEntryDdbRecords!) {
+ await client.send(
+ new PutCommand({
+ TableName: process.env.DB_TABLE,
+ Item: {
+ ...unmarshall(testEntryDdbRecord),
+ publishedOn: "2021-01-01T00:00:00.000Z",
+ ownedBy: identityA
+ }
+ })
+ );
+ }
+ }
+
+ // Ensure values are visible when data is fetched via GraphQL.
+ {
+ const { data: testEntryWithDeprecatedFields } = await manageApiIdentityA.getTestEntry({
+ revision: testEntry.id
+ });
+
+ expect(testEntryWithDeprecatedFields).toMatchObject({
+ publishedOn: "2021-01-01T00:00:00.000Z",
+ ownedBy: identityA
+ });
+ }
+
+ await manageApiIdentityA.publishTestEntry({ revision: testEntry.id });
+
+ {
+ const { data: testEntryWithDeprecatedFields } = await readApiIdentityA.getTestEntry({
+ where: { entryId: testEntry.entryId }
+ });
+
+ expect(testEntryWithDeprecatedFields).toMatchObject({
+ publishedOn: "2021-01-01T00:00:00.000Z",
+ ownedBy: identityA
+ });
+ }
+ });
+
+ test("deprecated 'publishedOn' and 'ownedBy' GraphQL fields should fall back to new fields if no value is present", async () => {
+ const { data: testEntry } = await manageApiIdentityA.createTestEntry();
+
+ const { data: publishedTestEntry } = await manageApiIdentityA.publishTestEntry({
+ revision: testEntry.id
+ });
+
+ expect(publishedTestEntry).toMatchObject({
+ publishedOn: null,
+ ownedBy: null
+ });
+
+ // Ensure values are visible when data is fetched via GraphQL.
+ const customGqlResolvers = new CmsGraphQLSchemaPlugin({
+ resolvers: {
+ TestEntry: {
+ publishedOn: entry => {
+ return entry.lastPublishedOn;
+ },
+ ownedBy: entry => {
+ return entry.createdBy;
+ }
+ }
+ }
+ });
+
+ customGqlResolvers.name = "cms-test-entry-meta-fields";
+
+ const { manage: manageApiWithGqlResolvers, read: readApiWithGqlResolvers } =
+ useTestModelHandler({
+ identity: identityA,
+ plugins: [customGqlResolvers]
+ });
+
+ const { data: testEntryWithDeprecatedFields } =
+ await manageApiWithGqlResolvers.getTestEntry({
+ revision: testEntry.id
+ });
+
+ expect(testEntryWithDeprecatedFields).toMatchObject({
+ publishedOn: publishedTestEntry.lastPublishedOn,
+ ownedBy: publishedTestEntry.createdBy
+ });
+
+ const { data: readTestEntryWithDeprecatedFields } =
+ await readApiWithGqlResolvers.getTestEntry({
+ where: {
+ entryId: testEntry.entryId
+ }
+ });
+
+ expect(readTestEntryWithDeprecatedFields).toMatchObject({
+ publishedOn: publishedTestEntry.lastPublishedOn,
+ ownedBy: publishedTestEntry.createdBy
+ });
+ });
+});
diff --git a/packages/api-headless-cms/__tests__/testHelpers/useTestModelHandler/manageGql.ts b/packages/api-headless-cms/__tests__/testHelpers/useTestModelHandler/manageGql.ts
index e384e6ac69c..ff229ea6896 100644
--- a/packages/api-headless-cms/__tests__/testHelpers/useTestModelHandler/manageGql.ts
+++ b/packages/api-headless-cms/__tests__/testHelpers/useTestModelHandler/manageGql.ts
@@ -38,6 +38,9 @@ export const fields = /* GraphQL */ `{
revisionFirstPublishedBy ${identityFields}
revisionLastPublishedBy ${identityFields}
+ publishedOn
+ ownedBy ${identityFields}
+
meta {
title
modelId
diff --git a/packages/api-headless-cms/__tests__/testHelpers/useTestModelHandler/readGql.ts b/packages/api-headless-cms/__tests__/testHelpers/useTestModelHandler/readGql.ts
index 06d4fe762a7..ceacad73d50 100644
--- a/packages/api-headless-cms/__tests__/testHelpers/useTestModelHandler/readGql.ts
+++ b/packages/api-headless-cms/__tests__/testHelpers/useTestModelHandler/readGql.ts
@@ -3,6 +3,12 @@ const data = /* GraphQL */ `
id
entryId
createdOn
+ publishedOn
+ ownedBy {
+ id
+ displayName
+ type
+ }
savedOn
title
slug
diff --git a/packages/api-headless-cms/package.json b/packages/api-headless-cms/package.json
index cddf33fc297..352658a0998 100644
--- a/packages/api-headless-cms/package.json
+++ b/packages/api-headless-cms/package.json
@@ -52,6 +52,7 @@
"@babel/core": "^7.22.8",
"@babel/preset-env": "^7.22.7",
"@webiny/api-wcp": "0.0.0",
+ "@webiny/aws-sdk": "0.0.0",
"@webiny/cli": "0.0.0",
"@webiny/project-utils": "0.0.0",
"apollo-graphql": "^0.9.5",
diff --git a/packages/api-headless-cms/src/graphql/getSchema.ts b/packages/api-headless-cms/src/graphql/getSchema.ts
index 970da7af36f..ca4cbb41854 100644
--- a/packages/api-headless-cms/src/graphql/getSchema.ts
+++ b/packages/api-headless-cms/src/graphql/getSchema.ts
@@ -2,11 +2,12 @@
import codeFrame from "code-frame";
import WebinyError from "@webiny/error";
import { generateSchema } from "./generateSchema";
-import { ApiEndpoint, CmsContext, CmsModel } from "~/types";
+import { ApiEndpoint, CmsContext } from "~/types";
import { Tenant } from "@webiny/api-tenancy/types";
import { I18NLocale } from "@webiny/api-i18n/types";
import { GraphQLSchema } from "graphql";
-import crypto from "crypto";
+import { generateCacheId } from "./getSchema/generateCacheId";
+import { generateCacheKey } from "./getSchema/generateCacheKey";
interface SchemaCache {
key: string;
@@ -22,45 +23,6 @@ interface GetSchemaParams {
const schemaList = new Map();
-/**
- * Method generates cache ID based on:
- * - tenant
- * - endpoint type
- * - locale
- */
-type GenerateCacheIdParams = Pick;
-const generateCacheId = (params: GenerateCacheIdParams): string => {
- const { getTenant, type, getLocale } = params;
- return [`tenant:${getTenant().id}`, `endpoint:${type}`, `locale:${getLocale().code}`].join("#");
-};
-/**
- * Method generates cache key based on last model change time.
- * Or sets "unknown" - possible when no models in database.
- */
-interface GenerateCacheKeyParams {
- models: Pick[];
-}
-const generateCacheKey = async (params: GenerateCacheKeyParams): Promise => {
- const { models } = params;
-
- const keys: string[] = [];
- for (const model of models) {
- const savedOn = model.savedOn;
- const value =
- // @ts-expect-error
- savedOn instanceof Date || savedOn?.toISOString
- ? // @ts-expect-error
- savedOn.toISOString()
- : savedOn || "unknown";
- keys.push(model.modelId, model.singularApiName, model.pluralApiName, value);
- }
- const key = keys.join("#");
-
- const hash = crypto.createHash("sha1");
- hash.update(key);
- return hash.digest("hex");
-};
-
/**
* Gets an existing schema or rewrites existing one or creates a completely new one
* depending on the schemaId created from type and locale parameters
diff --git a/packages/api-headless-cms/src/graphql/getSchema/generateCacheId.ts b/packages/api-headless-cms/src/graphql/getSchema/generateCacheId.ts
new file mode 100644
index 00000000000..42d5d43ee17
--- /dev/null
+++ b/packages/api-headless-cms/src/graphql/getSchema/generateCacheId.ts
@@ -0,0 +1,14 @@
+import { ApiEndpoint } from "~/types";
+import { Tenant } from "@webiny/api-tenancy/types";
+import { I18NLocale } from "@webiny/api-i18n/types";
+
+interface GenerateCacheIdParams {
+ type: ApiEndpoint;
+ getTenant: () => Tenant;
+ getLocale: () => I18NLocale;
+}
+
+export const generateCacheId = (params: GenerateCacheIdParams): string => {
+ const { getTenant, type, getLocale } = params;
+ return [`tenant:${getTenant().id}`, `endpoint:${type}`, `locale:${getLocale().code}`].join("#");
+};
diff --git a/packages/api-headless-cms/src/graphql/getSchema/generateCacheKey.ts b/packages/api-headless-cms/src/graphql/getSchema/generateCacheKey.ts
new file mode 100644
index 00000000000..ae6d7adb80f
--- /dev/null
+++ b/packages/api-headless-cms/src/graphql/getSchema/generateCacheKey.ts
@@ -0,0 +1,31 @@
+import { CmsModel } from "~/types";
+import crypto from "crypto";
+
+interface GenerateCacheKeyParams {
+ models: Pick[];
+}
+
+/**
+ * Method generates cache key based on last model change time.
+ * Or sets "unknown" - possible when no models in database.
+ */
+export const generateCacheKey = async (params: GenerateCacheKeyParams): Promise => {
+ const { models } = params;
+
+ const keys: string[] = [];
+ for (const model of models) {
+ const savedOn = model.savedOn;
+ const value =
+ // @ts-expect-error
+ savedOn instanceof Date || savedOn?.toISOString
+ ? // @ts-expect-error
+ savedOn.toISOString()
+ : savedOn || "unknown";
+ keys.push(model.modelId, model.singularApiName, model.pluralApiName, value);
+ }
+ const key = keys.join("#");
+
+ const hash = crypto.createHash("sha1");
+ hash.update(key);
+ return hash.digest("hex");
+};
diff --git a/packages/api-headless-cms/src/graphql/schema/createManageResolvers.ts b/packages/api-headless-cms/src/graphql/schema/createManageResolvers.ts
index 9136a8a103c..8b86070f0b1 100644
--- a/packages/api-headless-cms/src/graphql/schema/createManageResolvers.ts
+++ b/packages/api-headless-cms/src/graphql/schema/createManageResolvers.ts
@@ -56,7 +56,7 @@ export const createManageResolvers: CreateManageResolvers = ({
// These are extra fields we want to apply to field resolvers of "gqlType"
extraResolvers: {
/**
- * Advanced Content Entry
+ * Advanced Content Organization
*/
wbyAco_location: async (entry: CmsEntry) => {
return entry.location || null;
diff --git a/packages/api-headless-cms/src/types.ts b/packages/api-headless-cms/src/types.ts
index 28a88320fc7..dc75b341990 100644
--- a/packages/api-headless-cms/src/types.ts
+++ b/packages/api-headless-cms/src/types.ts
@@ -1571,6 +1571,20 @@ export interface CmsEntry {
*/
lastPublishedBy: CmsIdentity | null;
+ /**
+ * Deprecated fields. 👇
+ */
+
+ /**
+ * @deprecated Will be removed with the 5.41.0 release. Use `createdBy` field instead.
+ */
+ ownedBy?: CmsIdentity | null;
+
+ /**
+ * @deprecated Will be removed with the 5.41.0 release. Use `firstPublishedOn` or `lastPublishedOn` field instead.
+ */
+ publishedOn?: string | null;
+
/**
* Model ID of the definition for the entry.
* @see CmsModel
diff --git a/packages/api-headless-cms/tsconfig.build.json b/packages/api-headless-cms/tsconfig.build.json
index 3f276a8f25a..8df3aa36f37 100644
--- a/packages/api-headless-cms/tsconfig.build.json
+++ b/packages/api-headless-cms/tsconfig.build.json
@@ -6,6 +6,7 @@
{ "path": "../api-i18n/tsconfig.build.json" },
{ "path": "../api-security/tsconfig.build.json" },
{ "path": "../api-tenancy/tsconfig.build.json" },
+ { "path": "../aws-sdk/tsconfig.build.json" },
{ "path": "../error/tsconfig.build.json" },
{ "path": "../handler/tsconfig.build.json" },
{ "path": "../handler-aws/tsconfig.build.json" },
diff --git a/packages/api-headless-cms/tsconfig.json b/packages/api-headless-cms/tsconfig.json
index 657790c79f8..98467300de1 100644
--- a/packages/api-headless-cms/tsconfig.json
+++ b/packages/api-headless-cms/tsconfig.json
@@ -6,6 +6,7 @@
{ "path": "../api-i18n" },
{ "path": "../api-security" },
{ "path": "../api-tenancy" },
+ { "path": "../aws-sdk" },
{ "path": "../error" },
{ "path": "../handler" },
{ "path": "../handler-aws" },
@@ -33,6 +34,8 @@
"@webiny/api-security": ["../api-security/src"],
"@webiny/api-tenancy/*": ["../api-tenancy/src/*"],
"@webiny/api-tenancy": ["../api-tenancy/src"],
+ "@webiny/aws-sdk/*": ["../aws-sdk/src/*"],
+ "@webiny/aws-sdk": ["../aws-sdk/src"],
"@webiny/error/*": ["../error/src/*"],
"@webiny/error": ["../error/src"],
"@webiny/handler/*": ["../handler/src/*"],
diff --git a/packages/project-utils/testing/presets/index.js b/packages/project-utils/testing/presets/index.js
index 875398387cd..bbf6af8f22f 100644
--- a/packages/project-utils/testing/presets/index.js
+++ b/packages/project-utils/testing/presets/index.js
@@ -11,6 +11,9 @@ const getAllPackages = targetKeywords => {
throw Error(`Missing required --storage parameter!`);
}
+ // Set the storage type as an environment variable.
+ process.env.WEBINY_STORAGE_OPS = storage;
+
const storagePriority = storage.split(",");
const packages = getYarnWorkspaces(process.cwd())
diff --git a/yarn.lock b/yarn.lock
index eec9ca56019..fef1ae8fe5b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -15712,6 +15712,7 @@ __metadata:
"@webiny/api-security": 0.0.0
"@webiny/api-tenancy": 0.0.0
"@webiny/api-wcp": 0.0.0
+ "@webiny/aws-sdk": 0.0.0
"@webiny/cli": 0.0.0
"@webiny/error": 0.0.0
"@webiny/handler": 0.0.0
From ce7781a9eaf6378192a20fc0f32939823bcbc595 Mon Sep 17 00:00:00 2001
From: Pavel Denisjuk
Date: Tue, 11 Jun 2024 15:43:40 +0200
Subject: [PATCH 21/26] fix(api-security-cognito): apply admin user plugins to
"admin" identity only
---
packages/api-security-cognito/src/createCognito.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/api-security-cognito/src/createCognito.ts b/packages/api-security-cognito/src/createCognito.ts
index 91d23865dab..e943861dbc6 100644
--- a/packages/api-security-cognito/src/createCognito.ts
+++ b/packages/api-security-cognito/src/createCognito.ts
@@ -49,6 +49,7 @@ export const createCognito = <
});
const { getIdentity, getPermissions } = config;
+ const isAdminIdentity = config.identityType === "admin";
return [
new ContextPlugin(context => {
@@ -95,7 +96,6 @@ export const createCognito = <
const teams = context.wcp.canUseTeams();
context.plugins.register(adminUsersGqlPlugins({ teams }));
}),
- installGqlPlugins,
- createAdminUsersHooks()
+ isAdminIdentity ? [installGqlPlugins, createAdminUsersHooks()] : []
];
};
From 111642994108f6e1dc610f7a8743e75645142968 Mon Sep 17 00:00:00 2001
From: adrians5j
Date: Wed, 12 Jun 2024 16:44:36 +0200
Subject: [PATCH 22/26] chore: update yarn.lock
---
yarn.lock | 1276 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 1272 insertions(+), 4 deletions(-)
diff --git a/yarn.lock b/yarn.lock
index 3d9d2734da9..cef241c66ec 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2288,6 +2288,33 @@ __metadata:
languageName: node
linkType: hard
+"@babel/cli@npm:^7.22.6":
+ version: 7.24.7
+ resolution: "@babel/cli@npm:7.24.7"
+ dependencies:
+ "@jridgewell/trace-mapping": ^0.3.25
+ "@nicolo-ribaudo/chokidar-2": 2.1.8-no-fsevents.3
+ chokidar: ^3.4.0
+ commander: ^6.2.0
+ convert-source-map: ^2.0.0
+ fs-readdir-recursive: ^1.1.0
+ glob: ^7.2.0
+ make-dir: ^2.1.0
+ slash: ^2.0.0
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependenciesMeta:
+ "@nicolo-ribaudo/chokidar-2":
+ optional: true
+ chokidar:
+ optional: true
+ bin:
+ babel: ./bin/babel.js
+ babel-external-helpers: ./bin/babel-external-helpers.js
+ checksum: 40dfde8062de913dc5bb1c65a4d4e88ec2c438f16387c5552b1f8b0524f8af454c3b7bf12364ca0da8509c5edafdabc1527a939587678dc7825659c38d357c1d
+ languageName: node
+ linkType: hard
+
"@babel/cli@npm:^7.23.9":
version: 7.24.1
resolution: "@babel/cli@npm:7.24.1"
@@ -2362,6 +2389,16 @@ __metadata:
languageName: node
linkType: hard
+"@babel/code-frame@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/code-frame@npm:7.24.7"
+ dependencies:
+ "@babel/highlight": ^7.24.7
+ picocolors: ^1.0.0
+ checksum: 830e62cd38775fdf84d612544251ce773d544a8e63df667728cc9e0126eeef14c6ebda79be0f0bc307e8318316b7f58c27ce86702e0a1f5c321d842eb38ffda4
+ languageName: node
+ linkType: hard
+
"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.1, @babel/compat-data@npm:^7.20.5":
version: 7.20.14
resolution: "@babel/compat-data@npm:7.20.14"
@@ -2390,6 +2427,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/compat-data@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/compat-data@npm:7.24.7"
+ checksum: 1fc276825dd434fe044877367dfac84171328e75a8483a6976aa28bf833b32367e90ee6df25bdd97c287d1aa8019757adcccac9153de70b1932c0d243a978ae9
+ languageName: node
+ linkType: hard
+
"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3":
version: 7.20.12
resolution: "@babel/core@npm:7.20.12"
@@ -2436,6 +2480,29 @@ __metadata:
languageName: node
linkType: hard
+"@babel/core@npm:^7.22.8":
+ version: 7.24.7
+ resolution: "@babel/core@npm:7.24.7"
+ dependencies:
+ "@ampproject/remapping": ^2.2.0
+ "@babel/code-frame": ^7.24.7
+ "@babel/generator": ^7.24.7
+ "@babel/helper-compilation-targets": ^7.24.7
+ "@babel/helper-module-transforms": ^7.24.7
+ "@babel/helpers": ^7.24.7
+ "@babel/parser": ^7.24.7
+ "@babel/template": ^7.24.7
+ "@babel/traverse": ^7.24.7
+ "@babel/types": ^7.24.7
+ convert-source-map: ^2.0.0
+ debug: ^4.1.0
+ gensync: ^1.0.0-beta.2
+ json5: ^2.2.3
+ semver: ^6.3.1
+ checksum: 017497e2a1b4683a885219eef7d2aee83c1c0cf353506b2e180b73540ec28841d8ef1ea1837fa69f8c561574b24ddd72f04764b27b87afedfe0a07299ccef24d
+ languageName: node
+ linkType: hard
+
"@babel/core@npm:^7.23.9, @babel/core@npm:^7.24.0":
version: 7.24.3
resolution: "@babel/core@npm:7.24.3"
@@ -2508,6 +2575,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/generator@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/generator@npm:7.24.7"
+ dependencies:
+ "@babel/types": ^7.24.7
+ "@jridgewell/gen-mapping": ^0.3.5
+ "@jridgewell/trace-mapping": ^0.3.25
+ jsesc: ^2.5.1
+ checksum: 0ff31a73b15429f1287e4d57b439bba4a266f8c673bb445fe313b82f6d110f586776997eb723a777cd7adad9d340edd162aea4973a90112c5d0cfcaf6686844b
+ languageName: node
+ linkType: hard
+
"@babel/helper-annotate-as-pure@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/helper-annotate-as-pure@npm:7.18.6"
@@ -2526,6 +2605,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-annotate-as-pure@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-annotate-as-pure@npm:7.24.7"
+ dependencies:
+ "@babel/types": ^7.24.7
+ checksum: 6178566099a6a0657db7a7fa601a54fb4731ca0b8614fbdccfd8e523c210c13963649bc8fdfd53ce7dd14d05e3dda2fb22dea5b30113c488b9eb1a906d60212e
+ languageName: node
+ linkType: hard
+
"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.18.6":
version: 7.18.9
resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.18.9"
@@ -2545,6 +2633,16 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.24.7"
+ dependencies:
+ "@babel/traverse": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: 71a6158a9fdebffb82fdc400d5555ba8f2e370cea81a0d578155877bdc4db7d5252b75c43b2fdf3f72b3f68348891f99bd35ae315542daad1b7ace8322b1abcb
+ languageName: node
+ linkType: hard
+
"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.0, @babel/helper-compilation-targets@npm:^7.20.7":
version: 7.20.7
resolution: "@babel/helper-compilation-targets@npm:7.20.7"
@@ -2603,6 +2701,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-compilation-targets@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-compilation-targets@npm:7.24.7"
+ dependencies:
+ "@babel/compat-data": ^7.24.7
+ "@babel/helper-validator-option": ^7.24.7
+ browserslist: ^4.22.2
+ lru-cache: ^5.1.1
+ semver: ^6.3.1
+ checksum: dfc88bc35e223ade796c7267901728217c665adc5bc2e158f7b0ae850de14f1b7941bec4fe5950ae46236023cfbdeddd9c747c276acf9b39ca31f8dd97dc6cc6
+ languageName: node
+ linkType: hard
+
"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.20.12, @babel/helper-create-class-features-plugin@npm:^7.20.5, @babel/helper-create-class-features-plugin@npm:^7.20.7":
version: 7.20.12
resolution: "@babel/helper-create-class-features-plugin@npm:7.20.12"
@@ -2640,6 +2751,25 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-create-class-features-plugin@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-create-class-features-plugin@npm:7.24.7"
+ dependencies:
+ "@babel/helper-annotate-as-pure": ^7.24.7
+ "@babel/helper-environment-visitor": ^7.24.7
+ "@babel/helper-function-name": ^7.24.7
+ "@babel/helper-member-expression-to-functions": ^7.24.7
+ "@babel/helper-optimise-call-expression": ^7.24.7
+ "@babel/helper-replace-supers": ^7.24.7
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7
+ "@babel/helper-split-export-declaration": ^7.24.7
+ semver: ^6.3.1
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 371a181a1717a9b0cebc97727c8ea9ca6afa34029476a684b6030f9d1ad94dcdafd7de175da10b63ae3ba79e4e82404db8ed968ebf264b768f097e5d64faab71
+ languageName: node
+ linkType: hard
+
"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.20.5":
version: 7.20.5
resolution: "@babel/helper-create-regexp-features-plugin@npm:7.20.5"
@@ -2678,6 +2808,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-create-regexp-features-plugin@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-create-regexp-features-plugin@npm:7.24.7"
+ dependencies:
+ "@babel/helper-annotate-as-pure": ^7.24.7
+ regexpu-core: ^5.3.1
+ semver: ^6.3.1
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 17c59fa222af50f643946eca940ce1d474ff2da1f4afed2312687ab9d708ebbb8c9372754ddbdf44b6e21ead88b8fc144644f3a7b63ccb886de002458cef3974
+ languageName: node
+ linkType: hard
+
"@babel/helper-define-polyfill-provider@npm:^0.3.3":
version: 0.3.3
resolution: "@babel/helper-define-polyfill-provider@npm:0.3.3"
@@ -2730,6 +2873,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-environment-visitor@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-environment-visitor@npm:7.24.7"
+ dependencies:
+ "@babel/types": ^7.24.7
+ checksum: 079d86e65701b29ebc10baf6ed548d17c19b808a07aa6885cc141b690a78581b180ee92b580d755361dc3b16adf975b2d2058b8ce6c86675fcaf43cf22f2f7c6
+ languageName: node
+ linkType: hard
+
"@babel/helper-explode-assignable-expression@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/helper-explode-assignable-expression@npm:7.18.6"
@@ -2769,6 +2921,16 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-function-name@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-function-name@npm:7.24.7"
+ dependencies:
+ "@babel/template": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: 142ee08922074dfdc0ff358e09ef9f07adf3671ab6eef4fca74dcf7a551f1a43717e7efa358c9e28d7eea84c28d7f177b7a58c70452fc312ae3b1893c5dab2a4
+ languageName: node
+ linkType: hard
+
"@babel/helper-hoist-variables@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/helper-hoist-variables@npm:7.18.6"
@@ -2787,6 +2949,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-hoist-variables@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-hoist-variables@npm:7.24.7"
+ dependencies:
+ "@babel/types": ^7.24.7
+ checksum: 6cfdcf2289cd12185dcdbdf2435fa8d3447b797ac75851166de9fc8503e2fd0021db6baf8dfbecad3753e582c08e6a3f805c8d00cbed756060a877d705bd8d8d
+ languageName: node
+ linkType: hard
+
"@babel/helper-member-expression-to-functions@npm:^7.20.7":
version: 7.20.7
resolution: "@babel/helper-member-expression-to-functions@npm:7.20.7"
@@ -2805,6 +2976,16 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-member-expression-to-functions@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-member-expression-to-functions@npm:7.24.7"
+ dependencies:
+ "@babel/traverse": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: 9fecf412f85fa23b7cf55d19eb69de39f8240426a028b141c9df2aed8cfedf20b3ec3318d40312eb7a3dec9eea792828ce0d590e0ff62da3da532482f537192c
+ languageName: node
+ linkType: hard
+
"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/helper-module-imports@npm:7.18.6"
@@ -2850,6 +3031,16 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-module-imports@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-module-imports@npm:7.24.7"
+ dependencies:
+ "@babel/traverse": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: 8ac15d96d262b8940bc469052a048e06430bba1296369be695fabdf6799f201dd0b00151762b56012a218464e706bc033f27c07f6cec20c6f8f5fd6543c67054
+ languageName: node
+ linkType: hard
+
"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.20.11":
version: 7.20.11
resolution: "@babel/helper-module-transforms@npm:7.20.11"
@@ -2897,6 +3088,21 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-module-transforms@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-module-transforms@npm:7.24.7"
+ dependencies:
+ "@babel/helper-environment-visitor": ^7.24.7
+ "@babel/helper-module-imports": ^7.24.7
+ "@babel/helper-simple-access": ^7.24.7
+ "@babel/helper-split-export-declaration": ^7.24.7
+ "@babel/helper-validator-identifier": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: ddff3b41c2667876b4e4e73d961168f48a5ec9560c95c8c2d109e6221f9ca36c6f90c6317eb7a47f2a3c99419c356e529a86b79174cad0d4f7a61960866b88ca
+ languageName: node
+ linkType: hard
+
"@babel/helper-optimise-call-expression@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/helper-optimise-call-expression@npm:7.18.6"
@@ -2915,6 +3121,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-optimise-call-expression@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-optimise-call-expression@npm:7.24.7"
+ dependencies:
+ "@babel/types": ^7.24.7
+ checksum: 280654eaf90e92bf383d7eed49019573fb35a98c9e992668f701ad099957246721044be2068cf6840cb2299e0ad393705a1981c88c23a1048096a8d59e5f79a3
+ languageName: node
+ linkType: hard
+
"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
version: 7.20.2
resolution: "@babel/helper-plugin-utils@npm:7.20.2"
@@ -2936,6 +3151,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-plugin-utils@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-plugin-utils@npm:7.24.7"
+ checksum: 81f2a15751d892e4a8fce25390f973363a5b27596167861d2d6eab0f61856eb2ba389b031a9f19f669c0bd4dd601185828d3cebafd25431be7a1696f2ce3ef68
+ languageName: node
+ linkType: hard
+
"@babel/helper-remap-async-to-generator@npm:^7.18.9":
version: 7.18.9
resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9"
@@ -2963,6 +3185,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-remap-async-to-generator@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-remap-async-to-generator@npm:7.24.7"
+ dependencies:
+ "@babel/helper-annotate-as-pure": ^7.24.7
+ "@babel/helper-environment-visitor": ^7.24.7
+ "@babel/helper-wrap-function": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: bab7be178f875350f22a2cb9248f67fe3a8a8128db77a25607096ca7599fd972bc7049fb11ed9e95b45a3f1dd1fac3846a3279f9cbac16f337ecb0e6ca76e1fc
+ languageName: node
+ linkType: hard
+
"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.20.7":
version: 7.20.7
resolution: "@babel/helper-replace-supers@npm:7.20.7"
@@ -2990,6 +3225,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-replace-supers@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-replace-supers@npm:7.24.7"
+ dependencies:
+ "@babel/helper-environment-visitor": ^7.24.7
+ "@babel/helper-member-expression-to-functions": ^7.24.7
+ "@babel/helper-optimise-call-expression": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 2bf0d113355c60d86a04e930812d36f5691f26c82d4ec1739e5ec0a4c982c9113dad3167f7c74f888a96328bd5e696372232406d8200e5979e6e0dc2af5e7c76
+ languageName: node
+ linkType: hard
+
"@babel/helper-simple-access@npm:^7.20.2":
version: 7.20.2
resolution: "@babel/helper-simple-access@npm:7.20.2"
@@ -3017,6 +3265,16 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-simple-access@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-simple-access@npm:7.24.7"
+ dependencies:
+ "@babel/traverse": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: ddbf55f9dea1900213f2a1a8500fabfd21c5a20f44dcfa957e4b0d8638c730f88751c77f678644f754f1a1dc73f4eb8b766c300deb45a9daad000e4247957819
+ languageName: node
+ linkType: hard
+
"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0":
version: 7.20.0
resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.20.0"
@@ -3035,6 +3293,16 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-skip-transparent-expression-wrappers@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.24.7"
+ dependencies:
+ "@babel/traverse": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: 11b28fe534ce2b1a67c4d8e51a7b5711a2a0a0cae802f74614eee54cca58c744d9a62f6f60103c41759e81c537d270bfd665bf368a6bea214c6052f2094f8407
+ languageName: node
+ linkType: hard
+
"@babel/helper-split-export-declaration@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/helper-split-export-declaration@npm:7.18.6"
@@ -3053,6 +3321,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-split-export-declaration@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-split-export-declaration@npm:7.24.7"
+ dependencies:
+ "@babel/types": ^7.24.7
+ checksum: e3ddc91273e5da67c6953f4aa34154d005a00791dc7afa6f41894e768748540f6ebcac5d16e72541aea0c89bee4b89b4da6a3d65972a0ea8bfd2352eda5b7e22
+ languageName: node
+ linkType: hard
+
"@babel/helper-string-parser@npm:^7.19.4":
version: 7.19.4
resolution: "@babel/helper-string-parser@npm:7.19.4"
@@ -3081,6 +3358,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-string-parser@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-string-parser@npm:7.24.7"
+ checksum: 09568193044a578743dd44bf7397940c27ea693f9812d24acb700890636b376847a611cdd0393a928544e79d7ad5b8b916bd8e6e772bc8a10c48a647a96e7b1a
+ languageName: node
+ linkType: hard
+
"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1":
version: 7.19.1
resolution: "@babel/helper-validator-identifier@npm:7.19.1"
@@ -3102,6 +3386,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-validator-identifier@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-validator-identifier@npm:7.24.7"
+ checksum: 6799ab117cefc0ecd35cd0b40ead320c621a298ecac88686a14cffceaac89d80cdb3c178f969861bf5fa5e4f766648f9161ea0752ecfe080d8e89e3147270257
+ languageName: node
+ linkType: hard
+
"@babel/helper-validator-option@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/helper-validator-option@npm:7.18.6"
@@ -3130,6 +3421,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-validator-option@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-validator-option@npm:7.24.7"
+ checksum: 9689166bf3f777dd424c026841c8cd651e41b21242dbfd4569a53086179a3e744c8eddd56e9d10b54142270141c91581b53af0d7c00c82d552d2540e2a919f7e
+ languageName: node
+ linkType: hard
+
"@babel/helper-wrap-function@npm:^7.18.9":
version: 7.20.5
resolution: "@babel/helper-wrap-function@npm:7.20.5"
@@ -3153,6 +3451,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-wrap-function@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-wrap-function@npm:7.24.7"
+ dependencies:
+ "@babel/helper-function-name": ^7.24.7
+ "@babel/template": ^7.24.7
+ "@babel/traverse": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: 085bf130ed08670336e3976f5841ae44e3e10001131632e22ef234659341978d2fd37e65785f59b6cb1745481347fc3bce84b33a685cacb0a297afbe1d2b03af
+ languageName: node
+ linkType: hard
+
"@babel/helpers@npm:^7.20.7":
version: 7.20.13
resolution: "@babel/helpers@npm:7.20.13"
@@ -3186,6 +3496,16 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helpers@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helpers@npm:7.24.7"
+ dependencies:
+ "@babel/template": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: 934da58098a3670ca7f9f42425b9c44d0ca4f8fad815c0f51d89fc7b64c5e0b4c7d5fec038599de691229ada737edeaf72fad3eba8e16dd5842e8ea447f76b66
+ languageName: node
+ linkType: hard
+
"@babel/highlight@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/highlight@npm:7.18.6"
@@ -3231,6 +3551,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/highlight@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/highlight@npm:7.24.7"
+ dependencies:
+ "@babel/helper-validator-identifier": ^7.24.7
+ chalk: ^2.4.2
+ js-tokens: ^4.0.0
+ picocolors: ^1.0.0
+ checksum: 5cd3a89f143671c4ac129960024ba678b669e6fc673ce078030f5175002d1d3d52bc10b22c5b916a6faf644b5028e9a4bd2bb264d053d9b05b6a98690f1d46f1
+ languageName: node
+ linkType: hard
+
"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.6.4":
version: 7.20.15
resolution: "@babel/parser@npm:7.20.15"
@@ -3276,6 +3608,27 @@ __metadata:
languageName: node
linkType: hard
+"@babel/parser@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/parser@npm:7.24.7"
+ bin:
+ parser: ./bin/babel-parser.js
+ checksum: fc9d2c4c8712f89672edc55c0dc5cf640dcec715b56480f111f85c2bc1d507e251596e4110d65796690a96ac37a4b60432af90b3e97bb47e69d4ef83872dbbd6
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.24.7"
+ dependencies:
+ "@babel/helper-environment-visitor": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 68d315642b53af143aa17a71eb976cf431b51339aee584e29514a462b81c998636dd54219c2713b5f13e1df89eaf130dfab59683f9116825608708c81696b96c
+ languageName: node
+ linkType: hard
+
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6"
@@ -3298,6 +3651,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 7eb4e7ce5e3d6db4b0fdbdfaaa301c2e58f38a7ee39d5a4259a1fda61a612e83d3e4bc90fc36fb0345baf57e1e1a071e0caffeb80218623ad163f2fdc2e53a54
+ languageName: node
+ linkType: hard
+
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.18.9":
version: 7.20.7
resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.20.7"
@@ -3324,6 +3688,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7
+ "@babel/plugin-transform-optional-chaining": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.13.0
+ checksum: 07b92878ac58a98ea1fdf6a8b4ec3413ba4fa66924e28b694d63ec5b84463123fbf4d7153b56cf3cedfef4a3482c082fe3243c04f8fb2c041b32b0e29b4a9e21
+ languageName: node
+ linkType: hard
+
"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.24.1"
@@ -3336,6 +3713,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.24.7"
+ dependencies:
+ "@babel/helper-environment-visitor": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 8324d458db57060590942c7c2e9603880d07718ccb6450ec935105b8bd3c4393c4b8ada88e178c232258d91f33ffdcf2b1043d54e07a86989e50667ee100a32e
+ languageName: node
+ linkType: hard
+
"@babel/plugin-proposal-async-generator-functions@npm:^7.20.1":
version: 7.20.7
resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.7"
@@ -3657,6 +4046,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-syntax-import-assertions@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: c4d67be4eb1d4637e361477dbe01f5b392b037d17c1f861cfa0faa120030e137aab90a9237931b8040fd31d1e5d159e11866fa1165f78beef7a3be876a391a17
+ languageName: node
+ linkType: hard
+
"@babel/plugin-syntax-import-attributes@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.1"
@@ -3668,6 +4068,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-syntax-import-attributes@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 590dbb5d1a15264f74670b427b8d18527672c3d6c91d7bae7e65f80fd810edbc83d90e68065088644cbad3f2457ed265a54a9956fb789fcb9a5b521822b3a275
+ languageName: node
+ linkType: hard
+
"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3":
version: 7.10.4
resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4"
@@ -3889,6 +4300,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-arrow-functions@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 707c209b5331c7dc79bd326128c6a6640dbd62a78da1653c844db20c4f36bf7b68454f1bc4d2d051b3fde9136fa291f276ec03a071bb00ee653069ff82f91010
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-async-generator-functions@npm:^7.24.3":
version: 7.24.3
resolution: "@babel/plugin-transform-async-generator-functions@npm:7.24.3"
@@ -3903,6 +4325,20 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-async-generator-functions@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-async-generator-functions@npm:7.24.7"
+ dependencies:
+ "@babel/helper-environment-visitor": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-remap-async-to-generator": ^7.24.7
+ "@babel/plugin-syntax-async-generators": ^7.8.4
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 112e3b18f9c496ebc01209fc27f0b41a3669c479c7bc44f7249383172b432ebaae1e523caa7c6ecbd2d0d7adcb7e5769fe2798f8cb01c08cd57232d1bb6d8ad4
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-async-to-generator@npm:^7.18.6":
version: 7.20.7
resolution: "@babel/plugin-transform-async-to-generator@npm:7.20.7"
@@ -3929,6 +4365,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-async-to-generator@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.7"
+ dependencies:
+ "@babel/helper-module-imports": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-remap-async-to-generator": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 13704fb3b83effc868db2b71bfb2c77b895c56cb891954fc362e95e200afd523313b0e7cf04ce02f45b05e76017c5b5fa8070c92613727a35131bb542c253a36
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-block-scoped-functions@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.18.6"
@@ -3951,6 +4400,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-block-scoped-functions@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 249cdcbff4e778b177245f9652b014ea4f3cd245d83297f10a7bf6d97790074089aa62bcde8c08eb299c5e68f2faed346b587d3ebac44d625ba9a83a4ee27028
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-block-scoping@npm:^7.20.2":
version: 7.20.15
resolution: "@babel/plugin-transform-block-scoping@npm:7.20.15"
@@ -3973,6 +4433,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-block-scoping@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-block-scoping@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 039206155533600f079f3a455f85888dd7d4970ff7ffa85ef44760f4f5acb9f19c9d848cc1fec1b9bdbc0dfec9e8a080b90d0ab66ad2bdc7138b5ca4ba96e61c
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-class-properties@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-class-properties@npm:7.24.1"
@@ -3985,6 +4456,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-class-properties@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-class-properties@npm:7.24.7"
+ dependencies:
+ "@babel/helper-create-class-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 1348d7ce74da38ba52ea85b3b4289a6a86913748569ef92ef0cff30702a9eb849e5eaf59f1c6f3517059aa68115fb3067e389735dccacca39add4e2b0c67e291
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-class-static-block@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-class-static-block@npm:7.24.1"
@@ -3998,6 +4481,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-class-static-block@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-class-static-block@npm:7.24.7"
+ dependencies:
+ "@babel/helper-create-class-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/plugin-syntax-class-static-block": ^7.14.5
+ peerDependencies:
+ "@babel/core": ^7.12.0
+ checksum: 324049263504f18416f1c3e24033baebfafd05480fdd885c8ebe6f2b415b0fc8e0b98d719360f9e30743cc78ac387fabc0b3c6606d2b54135756ffb92963b382
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-classes@npm:^7.20.2":
version: 7.20.7
resolution: "@babel/plugin-transform-classes@npm:7.20.7"
@@ -4035,6 +4531,24 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-classes@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-classes@npm:7.24.7"
+ dependencies:
+ "@babel/helper-annotate-as-pure": ^7.24.7
+ "@babel/helper-compilation-targets": ^7.24.7
+ "@babel/helper-environment-visitor": ^7.24.7
+ "@babel/helper-function-name": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-replace-supers": ^7.24.7
+ "@babel/helper-split-export-declaration": ^7.24.7
+ globals: ^11.1.0
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: f01cb31143730d425681e9816020cbb519c7ddb3b6ca308dfaf2821eda5699a746637fc6bf19811e2fb42cfdf8b00a21b31c754da83771a5c280077925677354
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-computed-properties@npm:^7.18.9":
version: 7.20.7
resolution: "@babel/plugin-transform-computed-properties@npm:7.20.7"
@@ -4059,6 +4573,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-computed-properties@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-computed-properties@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/template": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 0cf8c1b1e4ea57dec8d4612460d84fd4cdbf71a7499bb61ee34632cf89018a59eee818ffca88a8d99ee7057c20a4257044d7d463fda6daef9bf1db9fa81563cb
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-destructuring@npm:^7.20.2":
version: 7.20.7
resolution: "@babel/plugin-transform-destructuring@npm:7.20.7"
@@ -4081,6 +4607,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-destructuring@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-destructuring@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: b9637b27faf9d24a8119bc5a1f98a2f47c69e6441bd8fc71163500be316253a72173308a93122bcf27d8d314ace43344c976f7291cf6376767f408350c8149d4
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-dotall-regex@npm:^7.18.6, @babel/plugin-transform-dotall-regex@npm:^7.4.4":
version: 7.18.6
resolution: "@babel/plugin-transform-dotall-regex@npm:7.18.6"
@@ -4105,6 +4642,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-dotall-regex@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.7"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 67b10fc6abb1f61f0e765288eb4c6d63d1d0f9fc0660e69f6f2170c56fa16bc74e49857afc644beda112b41771cd90cf52df0940d11e97e52617c77c7dcff171
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-duplicate-keys@npm:^7.18.9":
version: 7.18.9
resolution: "@babel/plugin-transform-duplicate-keys@npm:7.18.9"
@@ -4127,6 +4676,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-duplicate-keys@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: d1da2ff85ecb56a63f4ccfd9dc9ae69400d85f0dadf44ecddd9e71c6e5c7a9178e74e3a9637555f415a2bb14551e563f09f98534ab54f53d25e8439fdde6ba2d
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-dynamic-import@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.1"
@@ -4139,6 +4699,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-dynamic-import@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/plugin-syntax-dynamic-import": ^7.8.3
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 776509ff62ab40c12be814a342fc56a5cc09b91fb63032b2633414b635875fd7da03734657be0f6db2891fe6e3033b75d5ddb6f2baabd1a02e4443754a785002
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-exponentiation-operator@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.18.6"
@@ -4163,6 +4735,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-exponentiation-operator@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.7"
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 23c84a23eb56589fdd35a3540f9a1190615be069110a2270865223c03aee3ba4e0fc68fe14850800cf36f0712b26e4964d3026235261f58f0405a29fe8dac9b1
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-export-namespace-from@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.1"
@@ -4175,6 +4759,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-export-namespace-from@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/plugin-syntax-export-namespace-from": ^7.8.3
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 3bd3a10038f10ae0dea1ee42137f3edcf7036b5e9e570a0d1cbd0865f03658990c6c2d84fa2475f87a754e7dc5b46766c16f7ce5c9b32c3040150b6a21233a80
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-for-of@npm:^7.18.8":
version: 7.18.8
resolution: "@babel/plugin-transform-for-of@npm:7.18.8"
@@ -4198,6 +4794,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-for-of@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-for-of@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: a53b42dc93ab4b7d1ebd3c695b52be22b3d592f6a3dbdb3dc2fea2c8e0a7e1508fe919864c455cde552aec44ce7518625fccbb70c7063373ca228d884f4f49ea
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-function-name@npm:^7.18.9":
version: 7.18.9
resolution: "@babel/plugin-transform-function-name@npm:7.18.9"
@@ -4224,6 +4832,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-function-name@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-function-name@npm:7.24.7"
+ dependencies:
+ "@babel/helper-compilation-targets": ^7.24.7
+ "@babel/helper-function-name": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 8eb1a67894a124910b5a67630bed4307757504381f39f0fb5cf82afc7ae8647dbc03b256d13865b73a749b9071b68e9fb8a28cef2369917b4299ebb93fd66146
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-json-strings@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-json-strings@npm:7.24.1"
@@ -4236,6 +4857,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-json-strings@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-json-strings@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/plugin-syntax-json-strings": ^7.8.3
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 88874d0b7a1ddea66c097fc0abb68801ffae194468aa44b828dde9a0e20ac5d8647943793de86092eabaa2911c96f67a6b373793d4bb9c932ef81b2711c06c2e
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-literals@npm:^7.18.9":
version: 7.18.9
resolution: "@babel/plugin-transform-literals@npm:7.18.9"
@@ -4258,6 +4891,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-literals@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-literals@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 3c075cc093a3dd9e294b8b7d6656e65f889e7ca2179ca27978dcd65b4dc4885ebbfb327408d7d8f483c55547deed00ba840956196f3ac8a3c3d2308a330a8c23
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.1"
@@ -4270,6 +4914,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 3367ce0be243704dc6fce23e86a592c4380f01998ee5dd9f94c54b1ef7b971ac6f8a002901eb51599ac6cbdc0d067af8d1a720224fca1c40fde8bb8aab804aac
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-member-expression-literals@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/plugin-transform-member-expression-literals@npm:7.18.6"
@@ -4292,6 +4948,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-member-expression-literals@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 2720c57aa3bf70576146ba7d6ea03227f4611852122d76d237924f7b008dafc952e6ae61a19e5024f26c665f44384bbd378466f01b6bd1305b3564a3b7fb1a5d
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-modules-amd@npm:^7.19.6":
version: 7.20.11
resolution: "@babel/plugin-transform-modules-amd@npm:7.20.11"
@@ -4316,6 +4983,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-modules-amd@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-modules-amd@npm:7.24.7"
+ dependencies:
+ "@babel/helper-module-transforms": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: f1dd0fb2f46c0f8f21076b8c7ccd5b33a85ce6dcb31518ea4c648d9a5bb2474cd4bd87c9b1b752e68591e24b022e334ba0d07631fef2b6b4d8a4b85cf3d581f5
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-modules-commonjs@npm:^7.19.6":
version: 7.20.11
resolution: "@babel/plugin-transform-modules-commonjs@npm:7.20.11"
@@ -4342,6 +5021,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-modules-commonjs@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.7"
+ dependencies:
+ "@babel/helper-module-transforms": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-simple-access": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: bfda2a0297197ed342e2a02e5f9847a489a3ae40a4a7d7f00f4aeb8544a85e9006e0c5271c8f61f39bc97975ef2717b5594cf9486694377a53433162909d64c1
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-modules-systemjs@npm:^7.19.6":
version: 7.20.11
resolution: "@babel/plugin-transform-modules-systemjs@npm:7.20.11"
@@ -4370,6 +5062,20 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-modules-systemjs@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-modules-systemjs@npm:7.24.7"
+ dependencies:
+ "@babel/helper-hoist-variables": ^7.24.7
+ "@babel/helper-module-transforms": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-validator-identifier": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 8af7a9db2929991d82cfdf41fb175dee344274d39b39122f8c35f24b5d682f98368e3d8f5130401298bd21412df21d416a7d8b33b59c334fae3d3c762118b1d8
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-modules-umd@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/plugin-transform-modules-umd@npm:7.18.6"
@@ -4394,6 +5100,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-modules-umd@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-modules-umd@npm:7.24.7"
+ dependencies:
+ "@babel/helper-module-transforms": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 9ff1c464892efe042952ba778468bda6131b196a2729615bdcc3f24cdc94014f016a4616ee5643c5845bade6ba698f386833e61056d7201314b13a7fd69fac88
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.19.1":
version: 7.20.5
resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.20.5"
@@ -4418,6 +5136,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.24.7"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: f1c6c7b5d60a86b6d7e4dd098798e1d393d55e993a0b57a73b53640c7a94985b601a96bdacee063f809a9a700bcea3a2ff18e98fa561554484ac56b761d774bd
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-new-target@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/plugin-transform-new-target@npm:7.18.6"
@@ -4440,6 +5170,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-new-target@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-new-target@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 3cb94cd1076b270f768f91fdcf9dd2f6d487f8dbfff3df7ca8d07b915900b86d02769a35ba1407d16fe49499012c8f055e1741299e2c880798b953d942a8fa1b
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.1"
@@ -4452,6 +5193,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 4a9221356401d87762afbc37a9e8e764afc2daf09c421117537820f8cfbed6876888372ad3a7bcfae2d45c95f026651f050ab4020b777be31d3ffb00908dbdd3
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-numeric-separator@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.1"
@@ -4464,6 +5217,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-numeric-separator@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/plugin-syntax-numeric-separator": ^7.10.4
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 561b5f1d08b2c3f92ce849f092751558b5e6cfeb7eb55c79e7375c34dd9c3066dce5e630bb439affef6adcf202b6cbcaaa23870070276fa5bb429c8f5b8c7514
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-object-rest-spread@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.1"
@@ -4478,6 +5243,20 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-object-rest-spread@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.7"
+ dependencies:
+ "@babel/helper-compilation-targets": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/plugin-syntax-object-rest-spread": ^7.8.3
+ "@babel/plugin-transform-parameters": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 169d257b9800c13e1feb4c37fb05dae84f702e58b342bb76e19e82e6692b7b5337c9923ee89e3916a97c0dd04a3375bdeca14f5e126f110bbacbeb46d1886ca2
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-object-super@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/plugin-transform-object-super@npm:7.18.6"
@@ -4502,6 +5281,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-object-super@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-object-super@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-replace-supers": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: f71e607a830ee50a22fa1a2686524d3339440cf9dea63032f6efbd865cfe4e35000e1e3f3492459e5c986f7c0c07dc36938bf3ce61fc9ba5f8ab732d0b64ab37
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-optional-catch-binding@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.1"
@@ -4514,6 +5305,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-optional-catch-binding@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/plugin-syntax-optional-catch-binding": ^7.8.3
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 7229f3a5a4facaab40f4fdfc7faabc157dc38a67d66bed7936599f4bc509e0bff636f847ac2aa45294881fce9cf8a0a460b85d2a465b7b977de9739fce9b18f6
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-optional-chaining@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.1"
@@ -4527,6 +5330,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-optional-chaining@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7
+ "@babel/plugin-syntax-optional-chaining": ^7.8.3
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 877e7ce9097d475132c7f4d1244de50bb2fd37993dc4580c735f18f8cbc49282f6e77752821bcad5ca9d3528412d2c8a7ee0aa7ca71bb680ff82648e7a5fed25
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-parameters@npm:^7.20.1, @babel/plugin-transform-parameters@npm:^7.20.7":
version: 7.20.7
resolution: "@babel/plugin-transform-parameters@npm:7.20.7"
@@ -4549,6 +5365,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-parameters@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-parameters@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: ab534b03ac2eff94bc79342b8f39a4584666f5305a6c63c1964afda0b1b004e6b861e49d1683548030defe248e3590d3ff6338ee0552cb90c064f7e1479968c3
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-private-methods@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-private-methods@npm:7.24.1"
@@ -4561,6 +5388,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-private-methods@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-private-methods@npm:7.24.7"
+ dependencies:
+ "@babel/helper-create-class-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: c151548e34909be2adcceb224d8fdd70bafa393bc1559a600906f3f647317575bf40db670470934a360e90ee8084ef36dffa34ec25d387d414afd841e74cf3fe
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-private-property-in-object@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.1"
@@ -4575,6 +5414,20 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-private-property-in-object@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.7"
+ dependencies:
+ "@babel/helper-annotate-as-pure": ^7.24.7
+ "@babel/helper-create-class-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/plugin-syntax-private-property-in-object": ^7.14.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 8cee9473095305cc787bb653fd681719b49363281feabf677db8a552e8e41c94441408055d7e5fd5c7d41b315e634fa70b145ad0c7c54456216049df4ed57350
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-property-literals@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/plugin-transform-property-literals@npm:7.18.6"
@@ -4597,6 +5450,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-property-literals@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-property-literals@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 9aeefc3aab6c6bf9d1fae1cf3a2d38c7d886fd3c6c81b7c608c477f5758aee2e7abf52f32724310fe861da61af934ee2508b78a5b5f234b9740c9134e1c14437
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-react-constant-elements@npm:^7.18.12":
version: 7.21.3
resolution: "@babel/plugin-transform-react-constant-elements@npm:7.21.3"
@@ -4745,6 +5609,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-regenerator@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-regenerator@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ regenerator-transform: ^0.15.2
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 20c6c3fb6fc9f407829087316653388d311e8c1816b007609bb09aeef254092a7157adace8b3aaa8f34be752503717cb85c88a5fe482180a9b11bcbd676063be
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-reserved-words@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/plugin-transform-reserved-words@npm:7.18.6"
@@ -4767,6 +5643,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-reserved-words@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-reserved-words@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 3d5876954d5914d7270819479504f30c4bf5452a65c677f44e2dab2db50b3c9d4b47793c45dfad7abf4f377035dd79e4b3f554ae350df9f422201d370ce9f8dd
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-runtime@npm:^7.24.0":
version: 7.24.3
resolution: "@babel/plugin-transform-runtime@npm:7.24.3"
@@ -4805,6 +5692,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-shorthand-properties@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 7b524245814607188212b8eb86d8c850e5974203328455a30881b4a92c364b93353fae14bc2af5b614ef16300b75b8c1d3b8f3a08355985b4794a7feb240adc3
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-spread@npm:^7.19.0":
version: 7.20.7
resolution: "@babel/plugin-transform-spread@npm:7.20.7"
@@ -4829,6 +5727,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-spread@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-spread@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 4c4254c8b9cceb1a8f975fa9b92257ddb08380a35c0a3721b8f4b9e13a3d82e403af2e0fba577b9f2452dd8f06bc3dea71cc53b1e2c6af595af5db52a13429d6
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-sticky-regex@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/plugin-transform-sticky-regex@npm:7.18.6"
@@ -4851,6 +5761,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-sticky-regex@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 118fc7a7ebf7c20411b670c8a030535fdfe4a88bc5643bb625a584dbc4c8a468da46430a20e6bf78914246962b0f18f1b9d6a62561a7762c4f34a038a5a77179
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-template-literals@npm:^7.18.9":
version: 7.18.9
resolution: "@babel/plugin-transform-template-literals@npm:7.18.9"
@@ -4873,6 +5794,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-template-literals@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-template-literals@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: ad44e5826f5a98c1575832dbdbd033adfe683cdff195e178528ead62507564bf02f479b282976cfd3caebad8b06d5fd7349c1cdb880dec3c56daea4f1f179619
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-typeof-symbol@npm:^7.18.9":
version: 7.18.9
resolution: "@babel/plugin-transform-typeof-symbol@npm:7.18.9"
@@ -4895,6 +5827,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-typeof-symbol@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 6bd16b9347614d44187d8f8ee23ebd7be30dabf3632eed5ff0415f35a482e827de220527089eae9cdfb75e85aa72db0e141ebc2247c4b1187c1abcdacdc34895
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-typescript@npm:^7.18.6":
version: 7.20.13
resolution: "@babel/plugin-transform-typescript@npm:7.20.13"
@@ -4944,6 +5887,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-unicode-escapes@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.7"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 4af0a193e1ddea6ff82b2b15cc2501b872728050bd625740b813c8062fec917d32d530ff6b41de56c15e7296becdf3336a58db81f5ca8e7c445c1306c52f3e01
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-unicode-property-regex@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.1"
@@ -4956,6 +5910,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-unicode-property-regex@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.7"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: aae13350c50973f5802ca7906d022a6a0cc0e3aebac9122d0450bbd51e78252d4c2032ad69385e2759fcbdd3aac5d571bd7e26258907f51f8e1a51b53be626c2
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-unicode-regex@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/plugin-transform-unicode-regex@npm:7.18.6"
@@ -4980,6 +5946,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-unicode-regex@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.7"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 1cb4e70678906e431da0a05ac3f8350025fee290304ad7482d9cfaa1ca67b2e898654de537c9268efbdad5b80d3ebadf42b4a88ea84609bd8a4cce7b11b48afd
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.1":
version: 7.24.1
resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.1"
@@ -4992,6 +5970,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.7"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 08a2844914f33dacd2ce1ab021ce8c1cc35dc6568521a746d8bf29c21571ee5be78787b454231c4bb3526cbbe280f1893223c82726cec5df2be5dae0a3b51837
+ languageName: node
+ linkType: hard
+
"@babel/polyfill@npm:^7.10.1, @babel/polyfill@npm:^7.4.4":
version: 7.12.1
resolution: "@babel/polyfill@npm:7.12.1"
@@ -5087,6 +6077,97 @@ __metadata:
languageName: node
linkType: hard
+"@babel/preset-env@npm:^7.22.7":
+ version: 7.24.7
+ resolution: "@babel/preset-env@npm:7.24.7"
+ dependencies:
+ "@babel/compat-data": ^7.24.7
+ "@babel/helper-compilation-targets": ^7.24.7
+ "@babel/helper-plugin-utils": ^7.24.7
+ "@babel/helper-validator-option": ^7.24.7
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.24.7
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.24.7
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.24.7
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.24.7
+ "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2
+ "@babel/plugin-syntax-async-generators": ^7.8.4
+ "@babel/plugin-syntax-class-properties": ^7.12.13
+ "@babel/plugin-syntax-class-static-block": ^7.14.5
+ "@babel/plugin-syntax-dynamic-import": ^7.8.3
+ "@babel/plugin-syntax-export-namespace-from": ^7.8.3
+ "@babel/plugin-syntax-import-assertions": ^7.24.7
+ "@babel/plugin-syntax-import-attributes": ^7.24.7
+ "@babel/plugin-syntax-import-meta": ^7.10.4
+ "@babel/plugin-syntax-json-strings": ^7.8.3
+ "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4
+ "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3
+ "@babel/plugin-syntax-numeric-separator": ^7.10.4
+ "@babel/plugin-syntax-object-rest-spread": ^7.8.3
+ "@babel/plugin-syntax-optional-catch-binding": ^7.8.3
+ "@babel/plugin-syntax-optional-chaining": ^7.8.3
+ "@babel/plugin-syntax-private-property-in-object": ^7.14.5
+ "@babel/plugin-syntax-top-level-await": ^7.14.5
+ "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6
+ "@babel/plugin-transform-arrow-functions": ^7.24.7
+ "@babel/plugin-transform-async-generator-functions": ^7.24.7
+ "@babel/plugin-transform-async-to-generator": ^7.24.7
+ "@babel/plugin-transform-block-scoped-functions": ^7.24.7
+ "@babel/plugin-transform-block-scoping": ^7.24.7
+ "@babel/plugin-transform-class-properties": ^7.24.7
+ "@babel/plugin-transform-class-static-block": ^7.24.7
+ "@babel/plugin-transform-classes": ^7.24.7
+ "@babel/plugin-transform-computed-properties": ^7.24.7
+ "@babel/plugin-transform-destructuring": ^7.24.7
+ "@babel/plugin-transform-dotall-regex": ^7.24.7
+ "@babel/plugin-transform-duplicate-keys": ^7.24.7
+ "@babel/plugin-transform-dynamic-import": ^7.24.7
+ "@babel/plugin-transform-exponentiation-operator": ^7.24.7
+ "@babel/plugin-transform-export-namespace-from": ^7.24.7
+ "@babel/plugin-transform-for-of": ^7.24.7
+ "@babel/plugin-transform-function-name": ^7.24.7
+ "@babel/plugin-transform-json-strings": ^7.24.7
+ "@babel/plugin-transform-literals": ^7.24.7
+ "@babel/plugin-transform-logical-assignment-operators": ^7.24.7
+ "@babel/plugin-transform-member-expression-literals": ^7.24.7
+ "@babel/plugin-transform-modules-amd": ^7.24.7
+ "@babel/plugin-transform-modules-commonjs": ^7.24.7
+ "@babel/plugin-transform-modules-systemjs": ^7.24.7
+ "@babel/plugin-transform-modules-umd": ^7.24.7
+ "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7
+ "@babel/plugin-transform-new-target": ^7.24.7
+ "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7
+ "@babel/plugin-transform-numeric-separator": ^7.24.7
+ "@babel/plugin-transform-object-rest-spread": ^7.24.7
+ "@babel/plugin-transform-object-super": ^7.24.7
+ "@babel/plugin-transform-optional-catch-binding": ^7.24.7
+ "@babel/plugin-transform-optional-chaining": ^7.24.7
+ "@babel/plugin-transform-parameters": ^7.24.7
+ "@babel/plugin-transform-private-methods": ^7.24.7
+ "@babel/plugin-transform-private-property-in-object": ^7.24.7
+ "@babel/plugin-transform-property-literals": ^7.24.7
+ "@babel/plugin-transform-regenerator": ^7.24.7
+ "@babel/plugin-transform-reserved-words": ^7.24.7
+ "@babel/plugin-transform-shorthand-properties": ^7.24.7
+ "@babel/plugin-transform-spread": ^7.24.7
+ "@babel/plugin-transform-sticky-regex": ^7.24.7
+ "@babel/plugin-transform-template-literals": ^7.24.7
+ "@babel/plugin-transform-typeof-symbol": ^7.24.7
+ "@babel/plugin-transform-unicode-escapes": ^7.24.7
+ "@babel/plugin-transform-unicode-property-regex": ^7.24.7
+ "@babel/plugin-transform-unicode-regex": ^7.24.7
+ "@babel/plugin-transform-unicode-sets-regex": ^7.24.7
+ "@babel/preset-modules": 0.1.6-no-external-plugins
+ babel-plugin-polyfill-corejs2: ^0.4.10
+ babel-plugin-polyfill-corejs3: ^0.10.4
+ babel-plugin-polyfill-regenerator: ^0.6.1
+ core-js-compat: ^3.31.0
+ semver: ^6.3.1
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 1a82c883c7404359b19b7436d0aab05f8dd4e89e8b1f7de127cc65d0ff6a9b1c345211d9c038f5b6e8f93d26f091fa9c73812d82851026ab4ec93f5ed0f0d675
+ languageName: node
+ linkType: hard
+
"@babel/preset-env@npm:^7.24.0":
version: 7.24.3
resolution: "@babel/preset-env@npm:7.24.3"
@@ -5386,6 +6467,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/template@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/template@npm:7.24.7"
+ dependencies:
+ "@babel/code-frame": ^7.24.7
+ "@babel/parser": ^7.24.7
+ "@babel/types": ^7.24.7
+ checksum: ea90792fae708ddf1632e54c25fe1a86643d8c0132311f81265d2bdbdd42f9f4fac65457056c1b6ca87f7aa0d6a795b549566774bba064bdcea2034ab3960ee9
+ languageName: node
+ linkType: hard
+
"@babel/traverse@npm:^7.24.0":
version: 7.24.1
resolution: "@babel/traverse@npm:7.24.1"
@@ -5459,6 +6551,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/types@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/types@npm:7.24.7"
+ dependencies:
+ "@babel/helper-string-parser": ^7.24.7
+ "@babel/helper-validator-identifier": ^7.24.7
+ to-fast-properties: ^2.0.0
+ checksum: 3e4437fced97e02982972ce5bebd318c47d42c9be2152c0fd28c6f786cc74086cc0a8fb83b602b846e41df37f22c36254338eada1a47ef9d8a1ec92332ca3ea8
+ languageName: node
+ linkType: hard
+
"@bcoe/v8-coverage@npm:^0.2.3":
version: 0.2.3
resolution: "@bcoe/v8-coverage@npm:0.2.3"
@@ -6678,6 +7781,13 @@ __metadata:
languageName: node
linkType: hard
+"@faker-js/faker@npm:^8.4.1":
+ version: 8.4.1
+ resolution: "@faker-js/faker@npm:8.4.1"
+ checksum: d802d531f8929562715adc279cfec763c9a4bc596ec67b0ce43fd0ae61b285d2b0eec6f1f4aa852452a63721a842fe7e81926dce7bd92acca94b01e2a1f55f5a
+ languageName: node
+ linkType: hard
+
"@fastify/accept-negotiator@npm:^1.0.0":
version: 1.1.0
resolution: "@fastify/accept-negotiator@npm:1.1.0"
@@ -10470,6 +11580,13 @@ __metadata:
languageName: node
linkType: hard
+"@sec-ant/readable-stream@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "@sec-ant/readable-stream@npm:0.4.1"
+ checksum: eb56f72a70995f725269f1c1c206d6dbeb090e88413b1302a456c600041175a7a484c2f0172454f7bed65a8ab95ffed7647d8ad03e6c23b1e3bbc9845f78cd17
+ languageName: node
+ linkType: hard
+
"@sigstore/bundle@npm:^1.1.0":
version: 1.1.0
resolution: "@sigstore/bundle@npm:1.1.0"
@@ -10584,6 +11701,13 @@ __metadata:
languageName: node
linkType: hard
+"@sindresorhus/merge-streams@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "@sindresorhus/merge-streams@npm:4.0.0"
+ checksum: 5759d31dfd822999bbe3ddcf72d4b15dc3d99ea51dd5b3210888f3348234eaff0f44bc999bef6b3c328daeb34e862a63b2c4abe5590acec541f93bc6fa016c9d
+ languageName: node
+ linkType: hard
+
"@sinonjs/commons@npm:^1.6.0, @sinonjs/commons@npm:^1.7.0, @sinonjs/commons@npm:^1.8.1":
version: 1.8.6
resolution: "@sinonjs/commons@npm:1.8.6"
@@ -11836,6 +12960,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/execa@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "@types/execa@npm:2.0.0"
+ dependencies:
+ execa: "*"
+ checksum: 7c01bd5b0dfd87055548a9cd5290620b11853d385b0adfbf12674edd3322016d6198fde4c80bd0047f2b93424de4e4e299a93bcbe9ec227379d4bc4e906ebdd0
+ languageName: node
+ linkType: hard
+
"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.33":
version: 4.17.43
resolution: "@types/express-serve-static-core@npm:4.17.43"
@@ -13542,6 +14675,7 @@ __metadata:
"@babel/cli": ^7.23.9
"@babel/core": ^7.24.0
"@webiny/api-elasticsearch-tasks": 0.0.0
+ "@webiny/api-headless-cms-es-tasks": 0.0.0
"@webiny/cli": 0.0.0
"@webiny/plugins": 0.0.0
"@webiny/project-utils": 0.0.0
@@ -13559,6 +14693,7 @@ __metadata:
"@babel/cli": ^7.23.9
"@babel/core": ^7.24.0
"@webiny/api-elasticsearch-tasks": 0.0.0
+ "@webiny/api-headless-cms-es-tasks": 0.0.0
"@webiny/cli": 0.0.0
"@webiny/plugins": 0.0.0
"@webiny/project-utils": 0.0.0
@@ -13979,6 +15114,35 @@ __metadata:
languageName: unknown
linkType: soft
+"@webiny/api-headless-cms-es-tasks@0.0.0, @webiny/api-headless-cms-es-tasks@workspace:packages/api-headless-cms-es-tasks":
+ version: 0.0.0-use.local
+ resolution: "@webiny/api-headless-cms-es-tasks@workspace:packages/api-headless-cms-es-tasks"
+ dependencies:
+ "@babel/cli": ^7.22.6
+ "@babel/core": ^7.22.8
+ "@babel/preset-env": ^7.22.7
+ "@faker-js/faker": ^8.4.1
+ "@webiny/api": 0.0.0
+ "@webiny/api-elasticsearch": 0.0.0
+ "@webiny/api-headless-cms": 0.0.0
+ "@webiny/api-headless-cms-ddb-es": 0.0.0
+ "@webiny/api-i18n": 0.0.0
+ "@webiny/api-security": 0.0.0
+ "@webiny/api-tenancy": 0.0.0
+ "@webiny/api-wcp": 0.0.0
+ "@webiny/cli": 0.0.0
+ "@webiny/handler": 0.0.0
+ "@webiny/handler-aws": 0.0.0
+ "@webiny/handler-graphql": 0.0.0
+ "@webiny/plugins": 0.0.0
+ "@webiny/project-utils": 0.0.0
+ "@webiny/tasks": 0.0.0
+ "@webiny/utils": 0.0.0
+ ttypescript: ^1.5.13
+ typescript: ^4.7.4
+ languageName: unknown
+ linkType: soft
+
"@webiny/api-headless-cms-tasks@0.0.0, @webiny/api-headless-cms-tasks@workspace:packages/api-headless-cms-tasks":
version: 0.0.0-use.local
resolution: "@webiny/api-headless-cms-tasks@workspace:packages/api-headless-cms-tasks"
@@ -14023,6 +15187,7 @@ __metadata:
"@webiny/api-security": 0.0.0
"@webiny/api-tenancy": 0.0.0
"@webiny/api-wcp": 0.0.0
+ "@webiny/aws-sdk": 0.0.0
"@webiny/cli": 0.0.0
"@webiny/error": 0.0.0
"@webiny/handler": 0.0.0
@@ -17307,11 +18472,13 @@ __metadata:
resolution: "@webiny/migrations@workspace:packages/migrations"
dependencies:
"@elastic/elasticsearch": 7.12.0
+ "@types/execa": ^2.0.0
"@webiny/api-elasticsearch": 0.0.0
"@webiny/api-headless-cms": 0.0.0
"@webiny/api-headless-cms-ddb-es": 0.0.0
"@webiny/aws-sdk": 0.0.0
"@webiny/cli": 0.0.0
+ "@webiny/cli-plugin-deploy-pulumi": 0.0.0
"@webiny/data-migration": 0.0.0
"@webiny/db-dynamodb": 0.0.0
"@webiny/error": 0.0.0
@@ -17322,12 +18489,16 @@ __metadata:
"@webiny/project-utils": 0.0.0
"@webiny/utils": 0.0.0
elastic-ts: ^0.8.0
+ execa: ^5.0.0
+ fast-glob: ^3.2.7
jest-dynalite: ^3.2.0
jsonpack: ^1.1.5
lodash: ^4.17.21
+ pino-pretty: ^9.4.0
pluralize: ^8.0.0
ttypescript: ^1.5.13
typescript: 4.7.4
+ yargs: ^17.4.0
languageName: unknown
linkType: soft
@@ -21201,7 +22372,7 @@ __metadata:
languageName: node
linkType: hard
-"commander@npm:^6.2.1":
+"commander@npm:^6.2.0, commander@npm:^6.2.1":
version: 6.2.1
resolution: "commander@npm:6.2.1"
checksum: d7090410c0de6bc5c67d3ca41c41760d6d268f3c799e530aafb73b7437d1826bbf0d2a3edac33f8b57cc9887b4a986dce307fa5557e109be40eadb7c43b21742
@@ -21855,7 +23026,7 @@ __metadata:
load-json-file: 6.2.0
node-fetch: ^2.6.13
os: 0.1.1
- p-retry: ^4.6.0
+ p-retry: ^4.6.2
rimraf: ^5.0.5
semver: ^7.3.5
uuid: 8.3.2
@@ -24442,6 +25613,26 @@ __metadata:
languageName: node
linkType: hard
+"execa@npm:*":
+ version: 9.2.0
+ resolution: "execa@npm:9.2.0"
+ dependencies:
+ "@sindresorhus/merge-streams": ^4.0.0
+ cross-spawn: ^7.0.3
+ figures: ^6.1.0
+ get-stream: ^9.0.0
+ human-signals: ^7.0.0
+ is-plain-obj: ^4.1.0
+ is-stream: ^4.0.1
+ npm-run-path: ^5.2.0
+ pretty-ms: ^9.0.0
+ signal-exit: ^4.1.0
+ strip-final-newline: ^4.0.0
+ yoctocolors: ^2.0.0
+ checksum: 3f4eed0eb65a48089bc7bb5c73bd3ce5edd4e7a17c1364e98be78c5a2b34367eab5a2f248ce1556b361953533faeff927fb692de716cda6f73906667c6917873
+ languageName: node
+ linkType: hard
+
"execa@npm:4.1.0":
version: 4.1.0
resolution: "execa@npm:4.1.0"
@@ -25004,6 +26195,15 @@ __metadata:
languageName: node
linkType: hard
+"figures@npm:^6.1.0":
+ version: 6.1.0
+ resolution: "figures@npm:6.1.0"
+ dependencies:
+ is-unicode-supported: ^2.0.0
+ checksum: 35c81239d4fa40b75c2c7c010833b0bc8861c27187e4c9388fca1d9731103ec9989b70ee3b664ef426ddd9abe02ec5f4fd973424aa8c6fd3ea5d3bf57a2d01b4
+ languageName: node
+ linkType: hard
+
"file-entry-cache@npm:^6.0.1":
version: 6.0.1
resolution: "file-entry-cache@npm:6.0.1"
@@ -25736,6 +26936,16 @@ __metadata:
languageName: node
linkType: hard
+"get-stream@npm:^9.0.0":
+ version: 9.0.1
+ resolution: "get-stream@npm:9.0.1"
+ dependencies:
+ "@sec-ant/readable-stream": ^0.4.1
+ is-stream: ^4.0.1
+ checksum: 631df71d7bd60a7f373094d3c352e2ce412b82d30b1b0ec562e5a4aced976173a4cc0dabef019050e1aceaffb1f0e086349ab3d14377b0b7280510bd75bd3e1e
+ languageName: node
+ linkType: hard
+
"get-symbol-description@npm:^1.0.0":
version: 1.0.0
resolution: "get-symbol-description@npm:1.0.0"
@@ -26842,6 +28052,13 @@ __metadata:
languageName: node
linkType: hard
+"human-signals@npm:^7.0.0":
+ version: 7.0.0
+ resolution: "human-signals@npm:7.0.0"
+ checksum: 5e05a7dbb6d021371ddb854c58b19aa372cc616b34e8eec0d27098d699be0571e29b2b98869053d898badb9594b7ed5058642660b04fb1e41b7bd1f83e472d16
+ languageName: node
+ linkType: hard
+
"humanize-duration@npm:^3.31.0":
version: 3.31.0
resolution: "humanize-duration@npm:3.31.0"
@@ -27672,6 +28889,13 @@ __metadata:
languageName: node
linkType: hard
+"is-plain-obj@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "is-plain-obj@npm:4.1.0"
+ checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce
+ languageName: node
+ linkType: hard
+
"is-plain-object@npm:^2.0.4":
version: 2.0.4
resolution: "is-plain-object@npm:2.0.4"
@@ -27772,6 +28996,13 @@ __metadata:
languageName: node
linkType: hard
+"is-stream@npm:^4.0.1":
+ version: 4.0.1
+ resolution: "is-stream@npm:4.0.1"
+ checksum: cbea3f1fc271b21ceb228819d0c12a0965a02b57f39423925f99530b4eb86935235f258f06310b67cd02b2d10b49e9a0998f5ececf110ab7d3760bae4055ad23
+ languageName: node
+ linkType: hard
+
"is-string@npm:^1.0.5, is-string@npm:^1.0.7":
version: 1.0.7
resolution: "is-string@npm:1.0.7"
@@ -27826,6 +29057,13 @@ __metadata:
languageName: node
linkType: hard
+"is-unicode-supported@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "is-unicode-supported@npm:2.0.0"
+ checksum: 000b80639dedaf59a385f1c0a57f97a4d1435e0723716f24cc19ad94253a7a0a9f838bdc9ac49b10a29ac93b01f52ae9b2ed358a8876caf1eb74d73b4ede92b2
+ languageName: node
+ linkType: hard
+
"is-utf8@npm:^0.2.0":
version: 0.2.1
resolution: "is-utf8@npm:0.2.1"
@@ -31640,7 +32878,7 @@ __metadata:
languageName: node
linkType: hard
-"npm-run-path@npm:^5.1.0":
+"npm-run-path@npm:^5.1.0, npm-run-path@npm:^5.2.0":
version: 5.3.0
resolution: "npm-run-path@npm:5.3.0"
dependencies:
@@ -32319,7 +33557,7 @@ __metadata:
languageName: node
linkType: hard
-"p-retry@npm:^4.5.0, p-retry@npm:^4.6.0, p-retry@npm:^4.6.2":
+"p-retry@npm:^4.5.0, p-retry@npm:^4.6.2":
version: 4.6.2
resolution: "p-retry@npm:4.6.2"
dependencies:
@@ -32551,6 +33789,13 @@ __metadata:
languageName: node
linkType: hard
+"parse-ms@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "parse-ms@npm:4.0.0"
+ checksum: 673c801d9f957ff79962d71ed5a24850163f4181a90dd30c4e3666b3a804f53b77f1f0556792e8b2adbb5d58757907d1aa51d7d7dc75997c2a56d72937cbc8b7
+ languageName: node
+ linkType: hard
+
"parse-path@npm:^7.0.0":
version: 7.0.0
resolution: "parse-path@npm:7.0.0"
@@ -34183,6 +35428,15 @@ __metadata:
languageName: node
linkType: hard
+"pretty-ms@npm:^9.0.0":
+ version: 9.0.0
+ resolution: "pretty-ms@npm:9.0.0"
+ dependencies:
+ parse-ms: ^4.0.0
+ checksum: 072b17547e09cb232e8e4c7be0281e256b6d8acd18dfb2fdd715d50330d1689fdaa877f53cf90c62ed419ef842f0f5fb94a2cd8ed1aa6d7608ad48834219435d
+ languageName: node
+ linkType: hard
+
"pretty-time@npm:^1.1.0":
version: 1.1.0
resolution: "pretty-time@npm:1.1.0"
@@ -37802,6 +39056,13 @@ __metadata:
languageName: node
linkType: hard
+"strip-final-newline@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "strip-final-newline@npm:4.0.0"
+ checksum: b5fe48f695d74863153a3b3155220e6e9bf51f4447832998c8edec38e6559b3af87a9fe5ac0df95570a78a26f5fa91701358842eab3c15480e27980b154a145f
+ languageName: node
+ linkType: hard
+
"strip-indent@npm:^2.0.0":
version: 2.0.0
resolution: "strip-indent@npm:2.0.0"
@@ -40508,6 +41769,13 @@ __metadata:
languageName: node
linkType: hard
+"yoctocolors@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "yoctocolors@npm:2.0.2"
+ checksum: cac20504b5fc954ff117e3a3fbde09db8ac0807bba59e68c5c08f3a43173ef46ccb1853b15b37bd96d0d8187bc444627f160fee7e5aede0b421382cf379d2438
+ languageName: node
+ linkType: hard
+
"yup@npm:0.32.11":
version: 0.32.11
resolution: "yup@npm:0.32.11"
From 94337e12720fdb1b24697425541221b2b9161bed Mon Sep 17 00:00:00 2001
From: adrians5j
Date: Wed, 12 Jun 2024 16:54:26 +0200
Subject: [PATCH 23/26] fix: remove duplicate identifier
---
packages/error/src/index.ts | 1 -
1 file changed, 1 deletion(-)
diff --git a/packages/error/src/index.ts b/packages/error/src/index.ts
index 46cc69b76e6..8d5f0dcda60 100644
--- a/packages/error/src/index.ts
+++ b/packages/error/src/index.ts
@@ -2,5 +2,4 @@ import Error, { ErrorOptions } from "./Error";
export { Error as WebinyError };
export default Error;
-export { Error as WebinyError };
export { ErrorOptions };
From 6434b8e6ebba78c6235839cab67f3c84f77131a7 Mon Sep 17 00:00:00 2001
From: adrians5j
Date: Wed, 12 Jun 2024 16:55:21 +0200
Subject: [PATCH 24/26] chore: run prettier
---
.../__tests__/contentAPI/snapshots/page.manage.ts | 2 +-
.../__tests__/contentAPI/snapshots/page.read.ts | 2 +-
.../__tests__/contentAPI/snapshots/product.read.ts | 2 +-
.../__tests__/contentAPI/snapshots/review.manage.ts | 2 +-
packages/api-headless-cms/src/types/types.ts | 6 +++---
5 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.manage.ts b/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.manage.ts
index beff90c3142..13ca67ccf9e 100644
--- a/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.manage.ts
+++ b/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.manage.ts
@@ -41,7 +41,7 @@ export default /* GraphQL */ `
)
ownedBy: CmsIdentity
@deprecated(reason: "Field was removed with the 5.39.0 release. Use 'createdBy' field.")
-
+
meta: PageModelApiNameMeta
content: [PageModelApiName_Content!]
header: PageModelApiName_Header
diff --git a/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.read.ts b/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.read.ts
index 01a3d51c80a..bc501a5c5a0 100644
--- a/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.read.ts
+++ b/packages/api-headless-cms/__tests__/contentAPI/snapshots/page.read.ts
@@ -42,7 +42,7 @@ export default /* GraphQL */ `
)
ownedBy: CmsIdentity
@deprecated(reason: "Field was removed with the 5.39.0 release. Use 'createdBy' field.")
-
+
content: [PageModelApiName_Content!]
header: PageModelApiName_Header
objective: PageModelApiName_Objective
diff --git a/packages/api-headless-cms/__tests__/contentAPI/snapshots/product.read.ts b/packages/api-headless-cms/__tests__/contentAPI/snapshots/product.read.ts
index a6b6f87443d..e86c2b86720 100644
--- a/packages/api-headless-cms/__tests__/contentAPI/snapshots/product.read.ts
+++ b/packages/api-headless-cms/__tests__/contentAPI/snapshots/product.read.ts
@@ -42,7 +42,7 @@ export default /* GraphQL */ `
)
ownedBy: CmsIdentity
@deprecated(reason: "Field was removed with the 5.39.0 release. Use 'createdBy' field.")
-
+
title: String
category(populate: Boolean = true): CategoryApiNameWhichIsABitDifferentThanModelId
price: Number
diff --git a/packages/api-headless-cms/__tests__/contentAPI/snapshots/review.manage.ts b/packages/api-headless-cms/__tests__/contentAPI/snapshots/review.manage.ts
index 7d80f509a01..f17b20200cd 100644
--- a/packages/api-headless-cms/__tests__/contentAPI/snapshots/review.manage.ts
+++ b/packages/api-headless-cms/__tests__/contentAPI/snapshots/review.manage.ts
@@ -41,7 +41,7 @@ export default /* GraphQL */ `
)
ownedBy: CmsIdentity
@deprecated(reason: "Field was removed with the 5.39.0 release. Use 'createdBy' field.")
-
+
meta: ReviewApiModelMeta
text: String
product: RefField
diff --git a/packages/api-headless-cms/src/types/types.ts b/packages/api-headless-cms/src/types/types.ts
index 48de7dfc65e..45b4725654b 100644
--- a/packages/api-headless-cms/src/types/types.ts
+++ b/packages/api-headless-cms/src/types/types.ts
@@ -184,9 +184,9 @@ export interface CmsModelFieldToGraphQLCreateResolver {
(params: CmsModelFieldToGraphQLCreateResolverParams):
| GraphQLFieldResolver
| {
- resolver: GraphQLFieldResolver | null;
- typeResolvers: Resolvers;
- }
+ resolver: GraphQLFieldResolver | null;
+ typeResolvers: Resolvers;
+ }
| false;
}
From eed6a06ebfb6e8e07c1bb4d9ab09be96c222e844 Mon Sep 17 00:00:00 2001
From: adrians5j
Date: Wed, 12 Jun 2024 17:04:19 +0200
Subject: [PATCH 25/26] ci: rebuild workflows
---
.github/workflows/pullRequests.yml | 14 +++++++++-----
.github/workflows/pushDev.yml | 14 +++++++++-----
.github/workflows/pushNext.yml | 14 +++++++++-----
3 files changed, 27 insertions(+), 15 deletions(-)
diff --git a/.github/workflows/pullRequests.yml b/.github/workflows/pullRequests.yml
index bf0d09d0b5c..f7af5259988 100644
--- a/.github/workflows/pullRequests.yml
+++ b/.github/workflows/pullRequests.yml
@@ -177,7 +177,7 @@ jobs:
- 18
package: >-
${{
- fromJson('[{"cmd":"packages/api","id":"api"},{"cmd":"packages/api-admin-settings","id":"api-admin-settings"},{"cmd":"packages/api-authentication","id":"api-authentication"},{"cmd":"packages/api-authentication-cognito","id":"api-authentication-cognito"},{"cmd":"packages/api-dynamodb-to-elasticsearch","id":"api-dynamodb-to-elasticsearch"},{"cmd":"packages/api-headless-cms-ddb","id":"api-headless-cms-ddb"},{"cmd":"packages/api-record-locking","id":"api-record-locking"},{"cmd":"packages/api-wcp","id":"api-wcp"},{"cmd":"packages/api-websockets","id":"api-websockets"},{"cmd":"packages/app-aco","id":"app-aco"},{"cmd":"packages/app-admin","id":"app-admin"},{"cmd":"packages/cwp-template-aws","id":"cwp-template-aws"},{"cmd":"packages/data-migration","id":"data-migration"},{"cmd":"packages/db-dynamodb","id":"db-dynamodb"},{"cmd":"packages/form","id":"form"},{"cmd":"packages/handler","id":"handler"},{"cmd":"packages/handler-aws","id":"handler-aws"},{"cmd":"packages/handler-graphql","id":"handler-graphql"},{"cmd":"packages/handler-logs","id":"handler-logs"},{"cmd":"packages/ioc","id":"ioc"},{"cmd":"packages/lexical-converter","id":"lexical-converter"},{"cmd":"packages/plugins","id":"plugins"},{"cmd":"packages/pubsub","id":"pubsub"},{"cmd":"packages/react-composition","id":"react-composition"},{"cmd":"packages/react-properties","id":"react-properties"},{"cmd":"packages/react-rich-text-lexical-renderer","id":"react-rich-text-lexical-renderer"},{"cmd":"packages/utils","id":"utils"},{"cmd":"packages/validation","id":"validation"}]')
+ fromJson('[{"cmd":"packages/api","id":"api"},{"cmd":"packages/api-admin-settings","id":"api-admin-settings"},{"cmd":"packages/api-authentication","id":"api-authentication"},{"cmd":"packages/api-authentication-cognito","id":"api-authentication-cognito"},{"cmd":"packages/api-headless-cms-ddb","id":"api-headless-cms-ddb"},{"cmd":"packages/api-record-locking","id":"api-record-locking"},{"cmd":"packages/api-wcp","id":"api-wcp"},{"cmd":"packages/api-websockets","id":"api-websockets"},{"cmd":"packages/app-aco","id":"app-aco"},{"cmd":"packages/app-admin","id":"app-admin"},{"cmd":"packages/cwp-template-aws","id":"cwp-template-aws"},{"cmd":"packages/data-migration","id":"data-migration"},{"cmd":"packages/db-dynamodb","id":"db-dynamodb"},{"cmd":"packages/form","id":"form"},{"cmd":"packages/handler","id":"handler"},{"cmd":"packages/handler-aws","id":"handler-aws"},{"cmd":"packages/handler-graphql","id":"handler-graphql"},{"cmd":"packages/handler-logs","id":"handler-logs"},{"cmd":"packages/ioc","id":"ioc"},{"cmd":"packages/lexical-converter","id":"lexical-converter"},{"cmd":"packages/plugins","id":"plugins"},{"cmd":"packages/pubsub","id":"pubsub"},{"cmd":"packages/react-composition","id":"react-composition"},{"cmd":"packages/react-properties","id":"react-properties"},{"cmd":"packages/react-rich-text-lexical-renderer","id":"react-rich-text-lexical-renderer"},{"cmd":"packages/utils","id":"utils"},{"cmd":"packages/validation","id":"validation"}]')
}}
runs-on: ${{ matrix.os }}
env:
@@ -283,14 +283,16 @@ jobs:
package: >-
${{ fromJson('[{"cmd":"packages/api-aco
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-aco_ddb-es_ddb"},{"cmd":"packages/api-audit-logs
- --storage=ddb-es,ddb","storage":"ddb-es","id":"api-audit-logs_ddb-es_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
+ --storage=ddb-es,ddb","storage":"ddb-es","id":"api-audit-logs_ddb-es_ddb"},{"cmd":"packages/api-dynamodb-to-elasticsearch
+ --storage=ddb-es,ddb","storage":["ddb-es"],"id":"api-dynamodb-to-elasticsearch_ddb-es_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-elasticsearch-tasks_ddb-es_ddb"},{"cmd":"packages/api-file-manager
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-file-manager_ddb-es_ddb"},{"cmd":"packages/api-form-builder
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-form-builder_ddb-es_ddb"},{"cmd":"packages/api-form-builder-so-ddb-es
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-form-builder-so-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-aco
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-aco_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-ddb-es
- --storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-tasks
+ --storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-es-tasks
+ --storage=ddb-es,ddb","storage":["ddb-es"],"id":"api-headless-cms-es-tasks_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-tasks
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-tasks_ddb-es_ddb"},{"cmd":"packages/api-mailer
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-mailer_ddb-es_ddb"},{"cmd":"packages/api-page-builder
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-page-builder_ddb-es_ddb"},{"cmd":"packages/api-page-builder-aco
@@ -352,14 +354,16 @@ jobs:
package: >-
${{ fromJson('[{"cmd":"packages/api-aco
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-aco_ddb-os_ddb"},{"cmd":"packages/api-audit-logs
- --storage=ddb-os,ddb","storage":"ddb-os","id":"api-audit-logs_ddb-os_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
+ --storage=ddb-os,ddb","storage":"ddb-os","id":"api-audit-logs_ddb-os_ddb"},{"cmd":"packages/api-dynamodb-to-elasticsearch
+ --storage=ddb-os,ddb","storage":["ddb-os"],"id":"api-dynamodb-to-elasticsearch_ddb-os_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-elasticsearch-tasks_ddb-os_ddb"},{"cmd":"packages/api-file-manager
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-file-manager_ddb-os_ddb"},{"cmd":"packages/api-form-builder
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-form-builder_ddb-os_ddb"},{"cmd":"packages/api-form-builder-so-ddb-es
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-form-builder-so-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-aco
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-aco_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-ddb-es
- --storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-tasks
+ --storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-es-tasks
+ --storage=ddb-os,ddb","storage":["ddb-os"],"id":"api-headless-cms-es-tasks_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-tasks
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-tasks_ddb-os_ddb"},{"cmd":"packages/api-mailer
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-mailer_ddb-os_ddb"},{"cmd":"packages/api-page-builder
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-page-builder_ddb-os_ddb"},{"cmd":"packages/api-page-builder-aco
diff --git a/.github/workflows/pushDev.yml b/.github/workflows/pushDev.yml
index fae212922d5..0bea44b5c2f 100644
--- a/.github/workflows/pushDev.yml
+++ b/.github/workflows/pushDev.yml
@@ -143,7 +143,7 @@ jobs:
- 18
package: >-
${{
- fromJson('[{"cmd":"packages/api","id":"api"},{"cmd":"packages/api-admin-settings","id":"api-admin-settings"},{"cmd":"packages/api-authentication","id":"api-authentication"},{"cmd":"packages/api-authentication-cognito","id":"api-authentication-cognito"},{"cmd":"packages/api-dynamodb-to-elasticsearch","id":"api-dynamodb-to-elasticsearch"},{"cmd":"packages/api-headless-cms-ddb","id":"api-headless-cms-ddb"},{"cmd":"packages/api-record-locking","id":"api-record-locking"},{"cmd":"packages/api-wcp","id":"api-wcp"},{"cmd":"packages/api-websockets","id":"api-websockets"},{"cmd":"packages/app-aco","id":"app-aco"},{"cmd":"packages/app-admin","id":"app-admin"},{"cmd":"packages/cwp-template-aws","id":"cwp-template-aws"},{"cmd":"packages/data-migration","id":"data-migration"},{"cmd":"packages/db-dynamodb","id":"db-dynamodb"},{"cmd":"packages/form","id":"form"},{"cmd":"packages/handler","id":"handler"},{"cmd":"packages/handler-aws","id":"handler-aws"},{"cmd":"packages/handler-graphql","id":"handler-graphql"},{"cmd":"packages/handler-logs","id":"handler-logs"},{"cmd":"packages/ioc","id":"ioc"},{"cmd":"packages/lexical-converter","id":"lexical-converter"},{"cmd":"packages/plugins","id":"plugins"},{"cmd":"packages/pubsub","id":"pubsub"},{"cmd":"packages/react-composition","id":"react-composition"},{"cmd":"packages/react-properties","id":"react-properties"},{"cmd":"packages/react-rich-text-lexical-renderer","id":"react-rich-text-lexical-renderer"},{"cmd":"packages/utils","id":"utils"},{"cmd":"packages/validation","id":"validation"}]')
+ fromJson('[{"cmd":"packages/api","id":"api"},{"cmd":"packages/api-admin-settings","id":"api-admin-settings"},{"cmd":"packages/api-authentication","id":"api-authentication"},{"cmd":"packages/api-authentication-cognito","id":"api-authentication-cognito"},{"cmd":"packages/api-headless-cms-ddb","id":"api-headless-cms-ddb"},{"cmd":"packages/api-record-locking","id":"api-record-locking"},{"cmd":"packages/api-wcp","id":"api-wcp"},{"cmd":"packages/api-websockets","id":"api-websockets"},{"cmd":"packages/app-aco","id":"app-aco"},{"cmd":"packages/app-admin","id":"app-admin"},{"cmd":"packages/cwp-template-aws","id":"cwp-template-aws"},{"cmd":"packages/data-migration","id":"data-migration"},{"cmd":"packages/db-dynamodb","id":"db-dynamodb"},{"cmd":"packages/form","id":"form"},{"cmd":"packages/handler","id":"handler"},{"cmd":"packages/handler-aws","id":"handler-aws"},{"cmd":"packages/handler-graphql","id":"handler-graphql"},{"cmd":"packages/handler-logs","id":"handler-logs"},{"cmd":"packages/ioc","id":"ioc"},{"cmd":"packages/lexical-converter","id":"lexical-converter"},{"cmd":"packages/plugins","id":"plugins"},{"cmd":"packages/pubsub","id":"pubsub"},{"cmd":"packages/react-composition","id":"react-composition"},{"cmd":"packages/react-properties","id":"react-properties"},{"cmd":"packages/react-rich-text-lexical-renderer","id":"react-rich-text-lexical-renderer"},{"cmd":"packages/utils","id":"utils"},{"cmd":"packages/validation","id":"validation"}]')
}}
runs-on: ${{ matrix.os }}
env:
@@ -249,14 +249,16 @@ jobs:
package: >-
${{ fromJson('[{"cmd":"packages/api-aco
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-aco_ddb-es_ddb"},{"cmd":"packages/api-audit-logs
- --storage=ddb-es,ddb","storage":"ddb-es","id":"api-audit-logs_ddb-es_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
+ --storage=ddb-es,ddb","storage":"ddb-es","id":"api-audit-logs_ddb-es_ddb"},{"cmd":"packages/api-dynamodb-to-elasticsearch
+ --storage=ddb-es,ddb","storage":["ddb-es"],"id":"api-dynamodb-to-elasticsearch_ddb-es_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-elasticsearch-tasks_ddb-es_ddb"},{"cmd":"packages/api-file-manager
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-file-manager_ddb-es_ddb"},{"cmd":"packages/api-form-builder
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-form-builder_ddb-es_ddb"},{"cmd":"packages/api-form-builder-so-ddb-es
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-form-builder-so-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-aco
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-aco_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-ddb-es
- --storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-tasks
+ --storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-es-tasks
+ --storage=ddb-es,ddb","storage":["ddb-es"],"id":"api-headless-cms-es-tasks_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-tasks
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-tasks_ddb-es_ddb"},{"cmd":"packages/api-mailer
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-mailer_ddb-es_ddb"},{"cmd":"packages/api-page-builder
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-page-builder_ddb-es_ddb"},{"cmd":"packages/api-page-builder-aco
@@ -317,14 +319,16 @@ jobs:
package: >-
${{ fromJson('[{"cmd":"packages/api-aco
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-aco_ddb-os_ddb"},{"cmd":"packages/api-audit-logs
- --storage=ddb-os,ddb","storage":"ddb-os","id":"api-audit-logs_ddb-os_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
+ --storage=ddb-os,ddb","storage":"ddb-os","id":"api-audit-logs_ddb-os_ddb"},{"cmd":"packages/api-dynamodb-to-elasticsearch
+ --storage=ddb-os,ddb","storage":["ddb-os"],"id":"api-dynamodb-to-elasticsearch_ddb-os_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-elasticsearch-tasks_ddb-os_ddb"},{"cmd":"packages/api-file-manager
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-file-manager_ddb-os_ddb"},{"cmd":"packages/api-form-builder
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-form-builder_ddb-os_ddb"},{"cmd":"packages/api-form-builder-so-ddb-es
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-form-builder-so-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-aco
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-aco_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-ddb-es
- --storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-tasks
+ --storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-es-tasks
+ --storage=ddb-os,ddb","storage":["ddb-os"],"id":"api-headless-cms-es-tasks_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-tasks
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-tasks_ddb-os_ddb"},{"cmd":"packages/api-mailer
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-mailer_ddb-os_ddb"},{"cmd":"packages/api-page-builder
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-page-builder_ddb-os_ddb"},{"cmd":"packages/api-page-builder-aco
diff --git a/.github/workflows/pushNext.yml b/.github/workflows/pushNext.yml
index 3c46cd84448..81164fc8ce3 100644
--- a/.github/workflows/pushNext.yml
+++ b/.github/workflows/pushNext.yml
@@ -143,7 +143,7 @@ jobs:
- 18
package: >-
${{
- fromJson('[{"cmd":"packages/api","id":"api"},{"cmd":"packages/api-admin-settings","id":"api-admin-settings"},{"cmd":"packages/api-authentication","id":"api-authentication"},{"cmd":"packages/api-authentication-cognito","id":"api-authentication-cognito"},{"cmd":"packages/api-dynamodb-to-elasticsearch","id":"api-dynamodb-to-elasticsearch"},{"cmd":"packages/api-headless-cms-ddb","id":"api-headless-cms-ddb"},{"cmd":"packages/api-record-locking","id":"api-record-locking"},{"cmd":"packages/api-wcp","id":"api-wcp"},{"cmd":"packages/api-websockets","id":"api-websockets"},{"cmd":"packages/app-aco","id":"app-aco"},{"cmd":"packages/app-admin","id":"app-admin"},{"cmd":"packages/cwp-template-aws","id":"cwp-template-aws"},{"cmd":"packages/data-migration","id":"data-migration"},{"cmd":"packages/db-dynamodb","id":"db-dynamodb"},{"cmd":"packages/form","id":"form"},{"cmd":"packages/handler","id":"handler"},{"cmd":"packages/handler-aws","id":"handler-aws"},{"cmd":"packages/handler-graphql","id":"handler-graphql"},{"cmd":"packages/handler-logs","id":"handler-logs"},{"cmd":"packages/ioc","id":"ioc"},{"cmd":"packages/lexical-converter","id":"lexical-converter"},{"cmd":"packages/plugins","id":"plugins"},{"cmd":"packages/pubsub","id":"pubsub"},{"cmd":"packages/react-composition","id":"react-composition"},{"cmd":"packages/react-properties","id":"react-properties"},{"cmd":"packages/react-rich-text-lexical-renderer","id":"react-rich-text-lexical-renderer"},{"cmd":"packages/utils","id":"utils"},{"cmd":"packages/validation","id":"validation"}]')
+ fromJson('[{"cmd":"packages/api","id":"api"},{"cmd":"packages/api-admin-settings","id":"api-admin-settings"},{"cmd":"packages/api-authentication","id":"api-authentication"},{"cmd":"packages/api-authentication-cognito","id":"api-authentication-cognito"},{"cmd":"packages/api-headless-cms-ddb","id":"api-headless-cms-ddb"},{"cmd":"packages/api-record-locking","id":"api-record-locking"},{"cmd":"packages/api-wcp","id":"api-wcp"},{"cmd":"packages/api-websockets","id":"api-websockets"},{"cmd":"packages/app-aco","id":"app-aco"},{"cmd":"packages/app-admin","id":"app-admin"},{"cmd":"packages/cwp-template-aws","id":"cwp-template-aws"},{"cmd":"packages/data-migration","id":"data-migration"},{"cmd":"packages/db-dynamodb","id":"db-dynamodb"},{"cmd":"packages/form","id":"form"},{"cmd":"packages/handler","id":"handler"},{"cmd":"packages/handler-aws","id":"handler-aws"},{"cmd":"packages/handler-graphql","id":"handler-graphql"},{"cmd":"packages/handler-logs","id":"handler-logs"},{"cmd":"packages/ioc","id":"ioc"},{"cmd":"packages/lexical-converter","id":"lexical-converter"},{"cmd":"packages/plugins","id":"plugins"},{"cmd":"packages/pubsub","id":"pubsub"},{"cmd":"packages/react-composition","id":"react-composition"},{"cmd":"packages/react-properties","id":"react-properties"},{"cmd":"packages/react-rich-text-lexical-renderer","id":"react-rich-text-lexical-renderer"},{"cmd":"packages/utils","id":"utils"},{"cmd":"packages/validation","id":"validation"}]')
}}
runs-on: ${{ matrix.os }}
env:
@@ -249,14 +249,16 @@ jobs:
package: >-
${{ fromJson('[{"cmd":"packages/api-aco
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-aco_ddb-es_ddb"},{"cmd":"packages/api-audit-logs
- --storage=ddb-es,ddb","storage":"ddb-es","id":"api-audit-logs_ddb-es_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
+ --storage=ddb-es,ddb","storage":"ddb-es","id":"api-audit-logs_ddb-es_ddb"},{"cmd":"packages/api-dynamodb-to-elasticsearch
+ --storage=ddb-es,ddb","storage":["ddb-es"],"id":"api-dynamodb-to-elasticsearch_ddb-es_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-elasticsearch-tasks_ddb-es_ddb"},{"cmd":"packages/api-file-manager
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-file-manager_ddb-es_ddb"},{"cmd":"packages/api-form-builder
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-form-builder_ddb-es_ddb"},{"cmd":"packages/api-form-builder-so-ddb-es
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-form-builder-so-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-aco
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-aco_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-ddb-es
- --storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-tasks
+ --storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-ddb-es_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-es-tasks
+ --storage=ddb-es,ddb","storage":["ddb-es"],"id":"api-headless-cms-es-tasks_ddb-es_ddb"},{"cmd":"packages/api-headless-cms-tasks
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-headless-cms-tasks_ddb-es_ddb"},{"cmd":"packages/api-mailer
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-mailer_ddb-es_ddb"},{"cmd":"packages/api-page-builder
--storage=ddb-es,ddb","storage":"ddb-es","id":"api-page-builder_ddb-es_ddb"},{"cmd":"packages/api-page-builder-aco
@@ -317,14 +319,16 @@ jobs:
package: >-
${{ fromJson('[{"cmd":"packages/api-aco
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-aco_ddb-os_ddb"},{"cmd":"packages/api-audit-logs
- --storage=ddb-os,ddb","storage":"ddb-os","id":"api-audit-logs_ddb-os_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
+ --storage=ddb-os,ddb","storage":"ddb-os","id":"api-audit-logs_ddb-os_ddb"},{"cmd":"packages/api-dynamodb-to-elasticsearch
+ --storage=ddb-os,ddb","storage":["ddb-os"],"id":"api-dynamodb-to-elasticsearch_ddb-os_ddb"},{"cmd":"packages/api-elasticsearch","storage":["ddb-es","ddb-os"],"id":"api-elasticsearch"},{"cmd":"packages/api-elasticsearch-tasks
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-elasticsearch-tasks_ddb-os_ddb"},{"cmd":"packages/api-file-manager
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-file-manager_ddb-os_ddb"},{"cmd":"packages/api-form-builder
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-form-builder_ddb-os_ddb"},{"cmd":"packages/api-form-builder-so-ddb-es
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-form-builder-so-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-aco
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-aco_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-ddb-es
- --storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-tasks
+ --storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-ddb-es_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-es-tasks
+ --storage=ddb-os,ddb","storage":["ddb-os"],"id":"api-headless-cms-es-tasks_ddb-os_ddb"},{"cmd":"packages/api-headless-cms-tasks
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-headless-cms-tasks_ddb-os_ddb"},{"cmd":"packages/api-mailer
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-mailer_ddb-os_ddb"},{"cmd":"packages/api-page-builder
--storage=ddb-os,ddb","storage":"ddb-os","id":"api-page-builder_ddb-os_ddb"},{"cmd":"packages/api-page-builder-aco
From 3d1dade9e82d5d906eaf3f46a282af86909c379c Mon Sep 17 00:00:00 2001
From: adrians5j
Date: Thu, 13 Jun 2024 06:34:54 +0200
Subject: [PATCH 26/26] test: add new deletedX meta fields into entity
definition
---
.../__tests__/migrations/5.39.6/001/ddb-es/001.test.ts | 2 +-
.../migrations/5.39.0/001/entities/createEntryEntity.ts | 8 ++++++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.test.ts b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.test.ts
index d23626a1fd2..6b11f0fca06 100644
--- a/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.test.ts
+++ b/packages/migrations/__tests__/migrations/5.39.6/001/ddb-es/001.test.ts
@@ -49,7 +49,7 @@ const expectModifiedFieldsAreSynced = (entry: Record) => {
expect(hasEntryModifiedOn).toBe(hasEntryModifiedBy);
};
-describe("5.39.2-001", () => {
+describe("5.39.6-001", () => {
const primaryTable = getPrimaryDynamoDbTable();
const dynamoToEsTable = getDynamoToEsTable();
const elasticsearchClient = createElasticsearchClient();
diff --git a/packages/migrations/src/migrations/5.39.0/001/entities/createEntryEntity.ts b/packages/migrations/src/migrations/5.39.0/001/entities/createEntryEntity.ts
index bda469efc7f..3a81dfbd5f1 100644
--- a/packages/migrations/src/migrations/5.39.0/001/entities/createEntryEntity.ts
+++ b/packages/migrations/src/migrations/5.39.0/001/entities/createEntryEntity.ts
@@ -47,11 +47,15 @@ const ddbAttributes: Parameters[2] = {
revisionCreatedOn: { type: "string" },
revisionSavedOn: { type: "string" },
revisionModifiedOn: { type: "string" },
+ revisionDeletedOn: { type: "string" },
+ revisionRestoredOn: { type: "string" },
revisionFirstPublishedOn: { type: "string" },
revisionLastPublishedOn: { type: "string" },
revisionCreatedBy: { type: "map" },
revisionSavedBy: { type: "map" },
revisionModifiedBy: { type: "map" },
+ revisionDeletedBy: { type: "map" },
+ revisionRestoredBy: { type: "map" },
revisionFirstPublishedBy: { type: "map" },
revisionLastPublishedBy: { type: "map" },
@@ -61,11 +65,15 @@ const ddbAttributes: Parameters[2] = {
createdOn: { type: "string" },
savedOn: { type: "string" },
modifiedOn: { type: "string" },
+ deletedOn: { type: "string" },
+ restoredOn: { type: "string" },
firstPublishedOn: { type: "string" },
lastPublishedOn: { type: "string" },
createdBy: { type: "map" },
savedBy: { type: "map" },
modifiedBy: { type: "map" },
+ deletedBy: { type: "map" },
+ restoredBy: { type: "map" },
firstPublishedBy: { type: "map" },
lastPublishedBy: { type: "map" },