@webiny/api-form-builder-so-ddb-es 0.0.0-mt-2 → 0.0.0-unstable.06b2ede40f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/configurations.d.ts +16 -7
  2. package/configurations.js +38 -13
  3. package/configurations.js.map +1 -0
  4. package/definitions/elasticsearch.d.ts +47 -5
  5. package/definitions/elasticsearch.js +8 -16
  6. package/definitions/elasticsearch.js.map +1 -0
  7. package/definitions/form.d.ts +6 -4
  8. package/definitions/form.js +9 -17
  9. package/definitions/form.js.map +1 -0
  10. package/definitions/settings.d.ts +6 -4
  11. package/definitions/settings.js +8 -16
  12. package/definitions/settings.js.map +1 -0
  13. package/definitions/submission.d.ts +6 -4
  14. package/definitions/submission.js +8 -16
  15. package/definitions/submission.js.map +1 -0
  16. package/definitions/system.d.ts +6 -4
  17. package/definitions/system.js +8 -16
  18. package/definitions/system.js.map +1 -0
  19. package/definitions/table.d.ts +7 -6
  20. package/definitions/table.js +7 -6
  21. package/definitions/table.js.map +1 -0
  22. package/definitions/tableElasticsearch.d.ts +6 -5
  23. package/definitions/tableElasticsearch.js +7 -6
  24. package/definitions/tableElasticsearch.js.map +1 -0
  25. package/elasticsearch/createElasticsearchIndex.d.ts +10 -0
  26. package/elasticsearch/createElasticsearchIndex.js +41 -0
  27. package/elasticsearch/createElasticsearchIndex.js.map +1 -0
  28. package/elasticsearch/indices/base.d.ts +2 -0
  29. package/elasticsearch/indices/base.js +13 -0
  30. package/elasticsearch/indices/base.js.map +1 -0
  31. package/elasticsearch/indices/index.d.ts +1 -0
  32. package/elasticsearch/indices/index.js +14 -0
  33. package/elasticsearch/indices/index.js.map +1 -0
  34. package/elasticsearch/indices/japanese.d.ts +2 -0
  35. package/elasticsearch/indices/japanese.js +14 -0
  36. package/elasticsearch/indices/japanese.js.map +1 -0
  37. package/index.d.ts +2 -1
  38. package/index.js +100 -81
  39. package/index.js.map +1 -0
  40. package/operations/form/elasticsearchBody.d.ts +4 -4
  41. package/operations/form/elasticsearchBody.js +19 -63
  42. package/operations/form/elasticsearchBody.js.map +1 -0
  43. package/operations/form/elasticsearchFields.js +2 -3
  44. package/operations/form/elasticsearchFields.js.map +1 -0
  45. package/operations/form/fields.js +2 -3
  46. package/operations/form/fields.js.map +1 -0
  47. package/operations/form/index.d.ts +8 -8
  48. package/operations/form/index.js +196 -243
  49. package/operations/form/index.js.map +1 -0
  50. package/operations/settings/index.d.ts +5 -5
  51. package/operations/settings/index.js +26 -35
  52. package/operations/settings/index.js.map +1 -0
  53. package/operations/submission/elasticsearchBody.d.ts +4 -4
  54. package/operations/submission/elasticsearchBody.js +22 -61
  55. package/operations/submission/elasticsearchBody.js.map +1 -0
  56. package/operations/submission/elasticsearchFields.js +2 -3
  57. package/operations/submission/elasticsearchFields.js.map +1 -0
  58. package/operations/submission/index.d.ts +7 -7
  59. package/operations/submission/index.js +68 -96
  60. package/operations/submission/index.js.map +1 -0
  61. package/operations/system/index.d.ts +5 -5
  62. package/operations/system/index.js +22 -32
  63. package/operations/system/index.js.map +1 -0
  64. package/package.json +28 -35
  65. package/plugins/FormDynamoDbFieldPlugin.js +5 -9
  66. package/plugins/FormDynamoDbFieldPlugin.js.map +1 -0
  67. package/plugins/FormElasticsearchBodyModifierPlugin.d.ts +1 -1
  68. package/plugins/FormElasticsearchBodyModifierPlugin.js +6 -10
  69. package/plugins/FormElasticsearchBodyModifierPlugin.js.map +1 -0
  70. package/plugins/FormElasticsearchFieldPlugin.d.ts +1 -1
  71. package/plugins/FormElasticsearchFieldPlugin.js +6 -10
  72. package/plugins/FormElasticsearchFieldPlugin.js.map +1 -0
  73. package/plugins/FormElasticsearchIndexPlugin.d.ts +4 -0
  74. package/plugins/FormElasticsearchIndexPlugin.js +13 -0
  75. package/plugins/FormElasticsearchIndexPlugin.js.map +1 -0
  76. package/plugins/FormElasticsearchQueryModifierPlugin.d.ts +1 -1
  77. package/plugins/FormElasticsearchQueryModifierPlugin.js +6 -10
  78. package/plugins/FormElasticsearchQueryModifierPlugin.js.map +1 -0
  79. package/plugins/FormElasticsearchSortModifierPlugin.d.ts +1 -1
  80. package/plugins/FormElasticsearchSortModifierPlugin.js +6 -10
  81. package/plugins/FormElasticsearchSortModifierPlugin.js.map +1 -0
  82. package/plugins/SubmissionElasticsearchBodyModifierPlugin.d.ts +1 -1
  83. package/plugins/SubmissionElasticsearchBodyModifierPlugin.js +6 -10
  84. package/plugins/SubmissionElasticsearchBodyModifierPlugin.js.map +1 -0
  85. package/plugins/SubmissionElasticsearchFieldPlugin.d.ts +1 -1
  86. package/plugins/SubmissionElasticsearchFieldPlugin.js +6 -10
  87. package/plugins/SubmissionElasticsearchFieldPlugin.js.map +1 -0
  88. package/plugins/SubmissionElasticsearchQueryModifierPlugin.d.ts +1 -1
  89. package/plugins/SubmissionElasticsearchQueryModifierPlugin.js +6 -10
  90. package/plugins/SubmissionElasticsearchQueryModifierPlugin.js.map +1 -0
  91. package/plugins/SubmissionElasticsearchSortModifierPlugin.d.ts +1 -1
  92. package/plugins/SubmissionElasticsearchSortModifierPlugin.js +6 -10
  93. package/plugins/SubmissionElasticsearchSortModifierPlugin.js.map +1 -0
  94. package/plugins/index.d.ts +10 -0
  95. package/plugins/index.js +117 -0
  96. package/plugins/index.js.map +1 -0
  97. package/tasks/createIndexTaskPlugin.d.ts +2 -0
  98. package/tasks/createIndexTaskPlugin.js +36 -0
  99. package/tasks/createIndexTaskPlugin.js.map +1 -0
  100. package/types.d.ts +17 -15
  101. package/types.js +6 -6
  102. package/types.js.map +1 -0
  103. package/operations/system/createElasticsearchIndex.d.ts +0 -6
  104. package/operations/system/createElasticsearchIndex.js +0 -70
  105. package/upgrades/5.16.0/index.d.ts +0 -8
  106. package/upgrades/5.16.0/index.js +0 -141
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_query","require","_error","_interopRequireDefault","_dbDynamodb","_configurations","_filter","_fields","_sort","_utils","_elasticsearchBody","_apiElasticsearch","getESDataForLatestRevision","form","__type","createFormElasticType","id","createdOn","savedOn","name","slug","published","publishedOn","version","locked","status","createdBy","ownedBy","tenant","locale","webinyVersion","formId","createFormStorageOperations","params","entity","esEntity","plugins","elasticsearch","formDynamoDbFields","fields","createFormPartitionKey","targetId","parseIdentifier","createRevisionSortKey","value","Number","zeroPad","createLatestSortKey","createLatestPublishedSortKey","createFormType","createFormLatestType","createFormLatestPublishedType","createForm","revisionKeys","PK","SK","latestKeys","itemsBatch","createEntityWriteBatch","put","TYPE","execute","ex","WebinyError","message","code","index","configurations","es","item","data","createFormFrom","original","latest","entityBatch","updateForm","latestForm","getForm","where","isLatestForm","sortKey","keys","getClean","listForms","sort","limit","after","body","createElasticsearchBody","decodeCursor","esConfig","query","response","search","hits","total","items","map","_source","hasMoreItems","length","pop","meta","totalCount","cursor","encodeCursor","listFormRevisions","initialWhere","queryAllParams","partitionKey","options","beginsWith","queryAll","undefined","filteredItems","filterItems","sortItems","deleteForm","gte","deleteBatch","delete","deleteEsBatch","deleteFormRevision","revisions","previous","latestPublishedForm","find","rev","isLatest","isLatestPublished","esDataItem","previouslyPublishedForm","filter","f","a","b","Date","getTime","shift","publishForm","latestPublishedKeys","esData","unpublishForm","version_not","publishedOn_not","previouslyPublishedRevision","exports"],"sources":["index.ts"],"sourcesContent":["import type {\n FbForm,\n FormBuilderStorageOperationsCreateFormFromParams,\n FormBuilderStorageOperationsCreateFormParams,\n FormBuilderStorageOperationsDeleteFormParams,\n FormBuilderStorageOperationsDeleteFormRevisionParams,\n FormBuilderStorageOperationsGetFormParams,\n FormBuilderStorageOperationsListFormRevisionsParams,\n FormBuilderStorageOperationsListFormRevisionsParamsWhere,\n FormBuilderStorageOperationsListFormsParams,\n FormBuilderStorageOperationsListFormsResponse,\n FormBuilderStorageOperationsPublishFormParams,\n FormBuilderStorageOperationsUnpublishFormParams,\n FormBuilderStorageOperationsUpdateFormParams\n} from \"@webiny/api-form-builder/types\";\nimport type { Entity, Table } from \"@webiny/db-dynamodb/toolbox\";\nimport type { Client } from \"@elastic/elasticsearch\";\nimport type { QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\nimport { queryAll } from \"@webiny/db-dynamodb/utils/query\";\nimport WebinyError from \"@webiny/error\";\nimport type { IPutParamsItem } from \"@webiny/db-dynamodb\";\nimport { createEntityWriteBatch, getClean, put } from \"@webiny/db-dynamodb\";\nimport { configurations } from \"~/configurations\";\nimport { filterItems } from \"@webiny/db-dynamodb/utils/filter\";\nimport fields from \"./fields\";\nimport { sortItems } from \"@webiny/db-dynamodb/utils/sort\";\nimport { parseIdentifier, zeroPad } from \"@webiny/utils\";\nimport { createElasticsearchBody, createFormElasticType } from \"./elasticsearchBody\";\nimport { decodeCursor, encodeCursor } from \"@webiny/api-elasticsearch\";\nimport type { PluginsContainer } from \"@webiny/plugins\";\nimport type { FormBuilderFormCreateKeyParams, FormBuilderFormStorageOperations } from \"~/types\";\nimport type { ElasticsearchSearchResponse } from \"@webiny/api-elasticsearch/types\";\n\nexport type DbRecord<T = any> = T & {\n PK: string;\n SK: string;\n TYPE: string;\n};\n\nexport interface CreateFormStorageOperationsParams {\n entity: Entity<any>;\n esEntity: Entity<any>;\n table: Table<string, string, string>;\n elasticsearch: Client;\n plugins: PluginsContainer;\n}\n\ntype FbFormElastic = Omit<FbForm, \"triggers\" | \"fields\" | \"settings\" | \"steps\" | \"stats\"> & {\n __type: string;\n};\n\nconst getESDataForLatestRevision = (form: FbForm): FbFormElastic => ({\n __type: createFormElasticType(),\n id: form.id,\n createdOn: form.createdOn,\n savedOn: form.savedOn,\n name: form.name,\n slug: form.slug,\n published: form.published,\n publishedOn: form.publishedOn,\n version: form.version,\n locked: form.locked,\n status: form.status,\n createdBy: form.createdBy,\n ownedBy: form.ownedBy,\n tenant: form.tenant,\n locale: form.locale,\n webinyVersion: form.webinyVersion,\n formId: form.formId\n});\n\nexport const createFormStorageOperations = (\n params: CreateFormStorageOperationsParams\n): FormBuilderFormStorageOperations => {\n const { entity, esEntity, plugins, elasticsearch } = params;\n\n const formDynamoDbFields = fields();\n\n const createFormPartitionKey = (params: FormBuilderFormCreateKeyParams): string => {\n const { tenant, locale, id: targetId } = params;\n\n const { id } = parseIdentifier(targetId);\n\n return `T#${tenant}#L#${locale}#FB#F#${id}`;\n };\n\n const createRevisionSortKey = (value: string | number | undefined): string => {\n const version =\n typeof value === \"number\" ? Number(value) : (parseIdentifier(value).version as number);\n return `REV#${zeroPad(version)}`;\n };\n\n const createLatestSortKey = (): string => {\n return \"L\";\n };\n\n const createLatestPublishedSortKey = (): string => {\n return \"LP\";\n };\n\n const createFormType = (): string => {\n return \"fb.form\";\n };\n\n const createFormLatestType = (): string => {\n return \"fb.form.latest\";\n };\n\n const createFormLatestPublishedType = (): string => {\n return \"fb.form.latestPublished\";\n };\n\n const createForm = async (\n params: FormBuilderStorageOperationsCreateFormParams\n ): Promise<FbForm> => {\n const { form } = params;\n\n const revisionKeys = {\n PK: createFormPartitionKey(form),\n SK: createRevisionSortKey(form.id)\n };\n const latestKeys = {\n PK: createFormPartitionKey(form),\n SK: createLatestSortKey()\n };\n\n const itemsBatch = createEntityWriteBatch({\n entity,\n put: [\n {\n ...form,\n TYPE: createFormType(),\n ...revisionKeys\n },\n {\n ...form,\n TYPE: createFormLatestType(),\n ...latestKeys\n }\n ]\n });\n\n try {\n await itemsBatch.execute();\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not insert form data into regular table.\",\n ex.code || \"CREATE_FORM_ERROR\",\n {\n revisionKeys,\n latestKeys,\n form\n }\n );\n }\n try {\n const { index } = configurations.es({\n tenant: form.tenant,\n locale: form.locale\n });\n await put({\n entity: esEntity,\n item: {\n index,\n data: getESDataForLatestRevision(form),\n TYPE: createFormType(),\n ...latestKeys\n }\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not insert form data into Elasticsearch table.\",\n ex.code || \"CREATE_FORM_ERROR\",\n {\n latestKeys,\n form\n }\n );\n }\n return form;\n };\n\n const createFormFrom = async (\n params: FormBuilderStorageOperationsCreateFormFromParams\n ): Promise<FbForm> => {\n const { form, original, latest } = params;\n\n const revisionKeys = {\n PK: createFormPartitionKey(form),\n SK: createRevisionSortKey(form.version)\n };\n\n const latestKeys = {\n PK: createFormPartitionKey(form),\n SK: createLatestSortKey()\n };\n\n const entityBatch = createEntityWriteBatch({\n entity,\n put: [\n {\n ...form,\n ...revisionKeys,\n TYPE: createFormType()\n },\n {\n ...form,\n ...latestKeys,\n TYPE: createFormLatestType()\n }\n ]\n });\n\n try {\n await entityBatch.execute();\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not create form data in the regular table, from existing form.\",\n ex.code || \"CREATE_FORM_FROM_ERROR\",\n {\n revisionKeys,\n latestKeys,\n original,\n form,\n latest\n }\n );\n }\n\n try {\n const { index } = configurations.es({\n tenant: form.tenant,\n locale: form.locale\n });\n await put({\n entity: esEntity,\n item: {\n index,\n data: getESDataForLatestRevision(form),\n TYPE: createFormLatestType(),\n ...latestKeys\n }\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message ||\n \"Could not create form in the Elasticsearch table, from existing form.\",\n ex.code || \"CREATE_FORM_FROM_ERROR\",\n {\n latestKeys,\n form,\n latest,\n original\n }\n );\n }\n return form;\n };\n\n const updateForm = async (\n params: FormBuilderStorageOperationsUpdateFormParams\n ): Promise<FbForm> => {\n const { form, original } = params;\n\n const revisionKeys = {\n PK: createFormPartitionKey(form),\n SK: createRevisionSortKey(form.id)\n };\n const latestKeys = {\n PK: createFormPartitionKey(form),\n SK: createLatestSortKey()\n };\n\n const { formId, tenant, locale } = form;\n\n const latestForm = await getForm({\n where: {\n formId,\n tenant,\n locale,\n latest: true\n }\n });\n const isLatestForm = latestForm ? latestForm.id === form.id : false;\n\n const entityBatch = createEntityWriteBatch({\n entity,\n put: [\n {\n ...form,\n TYPE: createFormType(),\n ...revisionKeys\n }\n ]\n });\n\n if (isLatestForm) {\n entityBatch.put({\n ...form,\n TYPE: createFormLatestType(),\n ...latestKeys\n });\n }\n try {\n await entityBatch.execute();\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update form data in the regular table.\",\n ex.code || \"UPDATE_FORM_ERROR\",\n {\n revisionKeys,\n latestKeys,\n original,\n form,\n latestForm\n }\n );\n }\n /**\n * No need to go further if its not latest form.\n */\n if (!isLatestForm) {\n return form;\n }\n\n try {\n const { index } = configurations.es({\n tenant: form.tenant,\n locale: form.locale\n });\n await put({\n entity: esEntity,\n item: {\n index,\n data: getESDataForLatestRevision(form),\n TYPE: createFormLatestType(),\n ...latestKeys\n }\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update form data in the Elasticsearch table.\",\n ex.code || \"UPDATE_FORM_ERROR\",\n {\n latestKeys,\n form,\n latestForm,\n original\n }\n );\n }\n return form;\n };\n\n const getForm = async (params: FormBuilderStorageOperationsGetFormParams) => {\n const { where } = params;\n const { id, formId, latest, published, version, tenant, locale } = where;\n if (latest && published) {\n throw new WebinyError(\"Cannot have both latest and published params.\");\n }\n let sortKey: string;\n if (latest) {\n sortKey = createLatestSortKey();\n } else if (published && !version) {\n /**\n * Because of the specifics how DynamoDB works, we must not load the published record if version is sent.\n */\n sortKey = createLatestPublishedSortKey();\n } else if (id || version) {\n sortKey = createRevisionSortKey(version || id);\n } else {\n throw new WebinyError(\n \"Missing parameter to create a sort key.\",\n \"MISSING_WHERE_PARAMETER\",\n {\n where\n }\n );\n }\n\n const keys = {\n PK: createFormPartitionKey({\n tenant,\n locale,\n id: (formId || id) as string\n }),\n SK: sortKey\n };\n\n try {\n return await getClean<FbForm>({\n entity,\n keys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get form by keys.\",\n ex.code || \"GET_FORM_ERROR\",\n {\n keys\n }\n );\n }\n };\n\n const listForms = async (\n params: FormBuilderStorageOperationsListFormsParams\n ): Promise<FormBuilderStorageOperationsListFormsResponse> => {\n const { sort, limit, where, after } = params;\n\n const body = createElasticsearchBody({\n plugins,\n sort,\n limit: limit + 1,\n where,\n after: decodeCursor(after)\n });\n\n const esConfig = configurations.es({\n tenant: where.tenant,\n locale: where.locale\n });\n\n const query = {\n ...esConfig,\n body\n };\n\n let response: ElasticsearchSearchResponse<FbForm>;\n try {\n response = await elasticsearch.search(query);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could list forms.\",\n ex.code || \"LIST_FORMS_ERROR\",\n {\n where,\n query\n }\n );\n }\n\n const { hits, total } = response.body.hits;\n const items = hits.map(item => item._source);\n\n const hasMoreItems = items.length > limit;\n if (hasMoreItems) {\n /**\n * Remove the last item from results, we don't want to include it.\n */\n items.pop();\n }\n /**\n * Cursor is the `sort` value of the last item in the array.\n * https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html#search-after\n */\n\n const meta = {\n hasMoreItems,\n totalCount: total.value,\n cursor: items.length > 0 ? encodeCursor(hits[items.length - 1].sort) || null : null\n };\n\n return {\n items,\n meta\n };\n };\n\n const listFormRevisions = async (\n params: FormBuilderStorageOperationsListFormRevisionsParams\n ): Promise<FbForm[]> => {\n const { where: initialWhere, sort } = params;\n const { id, formId, tenant, locale } = initialWhere;\n const queryAllParams: QueryAllParams = {\n entity,\n partitionKey: createFormPartitionKey({\n tenant,\n locale,\n id: (id || formId) as string\n }),\n options: {\n beginsWith: \"REV#\"\n }\n };\n\n let items: FbForm[] = [];\n try {\n items = await queryAll<FbForm>(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not query forms by given params.\",\n ex.code || \"QUERY_FORMS_ERROR\",\n {\n partitionKey: queryAllParams.partitionKey,\n options: queryAllParams.options\n }\n );\n }\n const where: Partial<FormBuilderStorageOperationsListFormRevisionsParamsWhere> = {\n ...initialWhere,\n id: undefined,\n formId: undefined\n };\n const filteredItems = filterItems({\n plugins,\n items,\n where,\n fields: formDynamoDbFields\n });\n if (!sort || sort.length === 0) {\n return filteredItems;\n }\n return sortItems({\n items: filteredItems,\n sort,\n fields: formDynamoDbFields\n });\n };\n\n const deleteForm = async (\n params: FormBuilderStorageOperationsDeleteFormParams\n ): Promise<FbForm> => {\n const { form } = params;\n let items: any[];\n /**\n * This will find all form and submission records.\n */\n const queryAllParams = {\n entity,\n partitionKey: createFormPartitionKey(form),\n options: {\n gte: \" \"\n }\n };\n try {\n items = await queryAll<DbRecord>(queryAllParams);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not query forms and submissions by given params.\",\n ex.code || \"QUERY_FORM_AND_SUBMISSIONS_ERROR\",\n {\n partitionKey: queryAllParams.partitionKey,\n options: queryAllParams.options\n }\n );\n }\n\n const deleteBatch = createEntityWriteBatch({\n entity,\n delete: items.map(item => {\n return {\n PK: item.PK,\n SK: item.SK\n };\n })\n });\n\n try {\n await deleteBatch.execute();\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete form and it's submissions.\",\n ex.code || \"DELETE_FORM_AND_SUBMISSIONS_ERROR\"\n );\n }\n\n const latestKeys = {\n PK: createFormPartitionKey(form),\n SK: createLatestSortKey()\n };\n const deleteEsBatch = createEntityWriteBatch({\n entity: esEntity,\n delete: [latestKeys]\n });\n\n try {\n await deleteEsBatch.execute();\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete latest form record from Elasticsearch.\",\n ex.code || \"DELETE_FORM_ERROR\",\n {\n latestKeys\n }\n );\n }\n return form;\n };\n /**\n * We need to:\n * - delete current revision\n * - get previously published revision and update the record if it exists or delete if it does not\n * - update latest record if current one is the latest\n */\n const deleteFormRevision = async (\n params: FormBuilderStorageOperationsDeleteFormRevisionParams\n ): Promise<FbForm> => {\n const { form, revisions, previous } = params;\n\n const revisionKeys = {\n PK: createFormPartitionKey(form),\n SK: createRevisionSortKey(form.id)\n };\n\n const latestKeys = {\n PK: createFormPartitionKey(form),\n SK: createLatestSortKey()\n };\n\n const latestForm = revisions[0];\n const latestPublishedForm = revisions.find(rev => rev.published === true);\n\n const isLatest = latestForm ? latestForm.id === form.id : false;\n const isLatestPublished = latestPublishedForm ? latestPublishedForm.id === form.id : false;\n\n const entityBatch = createEntityWriteBatch({\n entity,\n delete: [revisionKeys]\n });\n\n let esDataItem: IPutParamsItem | undefined = undefined;\n\n if (isLatest || isLatestPublished) {\n /**\n * Sort out the latest published record.\n */\n if (isLatestPublished) {\n const previouslyPublishedForm = revisions\n .filter(f => !!f.publishedOn && f.version !== form.version)\n .sort((a, b) => {\n return (\n new Date(b.publishedOn as string).getTime() -\n new Date(a.publishedOn as string).getTime()\n );\n })\n .shift();\n if (previouslyPublishedForm) {\n entityBatch.put({\n ...previouslyPublishedForm,\n PK: createFormPartitionKey(previouslyPublishedForm),\n SK: createLatestPublishedSortKey(),\n TYPE: createFormLatestPublishedType()\n });\n } else {\n entityBatch.delete({\n PK: createFormPartitionKey(form),\n SK: createLatestPublishedSortKey()\n });\n }\n }\n /**\n * Sort out the latest record.\n */\n if (isLatest && previous) {\n entityBatch.put({\n ...previous,\n ...latestKeys,\n TYPE: createFormLatestType()\n });\n\n const { index } = configurations.es({\n tenant: previous.tenant,\n locale: previous.locale\n });\n\n esDataItem = {\n index,\n ...latestKeys,\n data: getESDataForLatestRevision(previous)\n };\n }\n }\n /**\n * Now save the batch data.\n */\n try {\n await entityBatch.execute();\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete form revision from regular table.\",\n ex.code || \"DELETE_FORM_REVISION_ERROR\",\n {\n form,\n latestForm,\n revisionKeys,\n latestKeys\n }\n );\n }\n /**\n * And then the Elasticsearch data, if any.\n */\n if (!esDataItem) {\n return form;\n }\n try {\n await put({\n entity: esEntity,\n item: esDataItem\n });\n return form;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete form from to the Elasticsearch table.\",\n ex.code || \"DELETE_FORM_REVISION_ERROR\",\n {\n form,\n latestForm,\n revisionKeys,\n latestKeys\n }\n );\n }\n };\n\n /**\n * We need to save form in:\n * - regular form record\n * - latest published form record\n * - latest form record - if form is latest one\n * - elasticsearch latest form record\n */\n const publishForm = async (\n params: FormBuilderStorageOperationsPublishFormParams\n ): Promise<FbForm> => {\n const { form, original } = params;\n\n const revisionKeys = {\n PK: createFormPartitionKey(form),\n SK: createRevisionSortKey(form.version)\n };\n\n const latestKeys = {\n PK: createFormPartitionKey(form),\n SK: createLatestSortKey()\n };\n\n const latestPublishedKeys = {\n PK: createFormPartitionKey(form),\n SK: createLatestPublishedSortKey()\n };\n\n const { locale, tenant, formId } = form;\n\n const latestForm = await getForm({\n where: {\n formId,\n tenant,\n locale,\n latest: true\n }\n });\n\n const isLatestForm = latestForm ? latestForm.id === form.id : false;\n /**\n * Update revision and latest published records\n */\n const entityBatch = createEntityWriteBatch({\n entity,\n put: [\n {\n ...form,\n ...revisionKeys,\n TYPE: createFormType()\n },\n {\n ...form,\n ...latestPublishedKeys,\n TYPE: createFormLatestPublishedType()\n }\n ]\n });\n\n /**\n * Update the latest form as well\n */\n if (isLatestForm) {\n entityBatch.put({\n ...form,\n ...latestKeys,\n TYPE: createFormLatestType()\n });\n }\n\n try {\n await entityBatch.execute();\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not publish form.\",\n ex.code || \"PUBLISH_FORM_ERROR\",\n {\n form,\n original,\n latestForm,\n revisionKeys,\n latestKeys,\n latestPublishedKeys\n }\n );\n }\n if (!isLatestForm) {\n return form;\n }\n const { index } = configurations.es({\n tenant: form.tenant,\n locale: form.locale\n });\n const esData = getESDataForLatestRevision(form);\n try {\n await put({\n entity: esEntity,\n item: {\n ...latestKeys,\n index,\n TYPE: createFormLatestType(),\n data: esData\n }\n });\n return form;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not publish form to the Elasticsearch.\",\n ex.code || \"PUBLISH_FORM_ERROR\",\n {\n form,\n original,\n latestForm,\n revisionKeys,\n latestKeys,\n latestPublishedKeys\n }\n );\n }\n };\n\n /**\n * We need to:\n * - update form revision record\n * - if latest published (LP) is current form, find the previously published record and update LP if there is some previously published, delete otherwise\n * - if is latest update the Elasticsearch record\n */\n const unpublishForm = async (\n params: FormBuilderStorageOperationsUnpublishFormParams\n ): Promise<FbForm> => {\n const { form, original } = params;\n\n const revisionKeys = {\n PK: createFormPartitionKey(form),\n SK: createRevisionSortKey(form.version)\n };\n\n const latestKeys = {\n PK: createFormPartitionKey(form),\n SK: createLatestSortKey()\n };\n\n const latestPublishedKeys = {\n PK: createFormPartitionKey(form),\n SK: createLatestPublishedSortKey()\n };\n\n const { formId, tenant, locale } = form;\n\n const latestForm = await getForm({\n where: {\n formId,\n tenant,\n locale,\n latest: true\n }\n });\n\n const latestPublishedForm = await getForm({\n where: {\n formId,\n tenant,\n locale,\n published: true\n }\n });\n\n const isLatest = latestForm ? latestForm.id === form.id : false;\n const isLatestPublished = latestPublishedForm ? latestPublishedForm.id === form.id : false;\n\n const entityBatch = createEntityWriteBatch({\n entity,\n put: [\n {\n ...form,\n ...revisionKeys,\n TYPE: createFormType()\n }\n ]\n });\n\n let esData: FbFormElastic | undefined = undefined;\n if (isLatest) {\n esData = getESDataForLatestRevision(form);\n }\n /**\n * In case previously published revision exists, replace current one with that one.\n * And if it does not, delete the record.\n */\n if (isLatestPublished) {\n const revisions = await listFormRevisions({\n where: {\n formId,\n tenant,\n locale,\n version_not: form.version,\n publishedOn_not: null\n },\n sort: [\"savedOn_DESC\"]\n });\n\n const previouslyPublishedRevision = revisions.shift();\n if (previouslyPublishedRevision) {\n entityBatch.put({\n ...previouslyPublishedRevision,\n ...latestPublishedKeys,\n TYPE: createFormLatestPublishedType()\n });\n } else {\n entityBatch.delete(latestPublishedKeys);\n }\n }\n\n try {\n await entityBatch.execute();\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not unpublish form.\",\n ex.code || \"UNPUBLISH_FORM_ERROR\",\n {\n form,\n original,\n latestForm,\n revisionKeys,\n latestKeys,\n latestPublishedKeys\n }\n );\n }\n /**\n * No need to go further in case of non-existing Elasticsearch data.\n */\n if (!esData) {\n return form;\n }\n const { index } = configurations.es({\n tenant: form.tenant,\n locale: form.locale\n });\n try {\n await put({\n entity: esEntity,\n item: {\n ...latestKeys,\n index,\n TYPE: createFormLatestType(),\n data: esData\n }\n });\n return form;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not unpublish form from the Elasticsearch.\",\n ex.code || \"UNPUBLISH_FORM_ERROR\",\n {\n form,\n original,\n latestForm,\n revisionKeys,\n latestKeys,\n latestPublishedKeys\n }\n );\n }\n };\n\n return {\n createForm,\n createFormFrom,\n updateForm,\n listForms,\n listFormRevisions,\n getForm,\n deleteForm,\n deleteFormRevision,\n publishForm,\n unpublishForm,\n createFormPartitionKey\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
- import { Entity, Table } from "dynamodb-toolbox";
2
- import { FormBuilderSettingsStorageOperations } from "../../types";
3
- export interface Params {
1
+ import type { Entity, Table } from "@webiny/db-dynamodb/toolbox";
2
+ import type { FormBuilderSettingsStorageOperations } from "../../types";
3
+ export interface CreateSettingsStorageOperationsParams {
4
4
  entity: Entity<any>;
5
- table: Table;
5
+ table: Table<string, string, string>;
6
6
  }
7
- export declare const createSettingsStorageOperations: (params: Params) => FormBuilderSettingsStorageOperations;
7
+ export declare const createSettingsStorageOperations: (params: CreateSettingsStorageOperationsParams) => FormBuilderSettingsStorageOperations;
@@ -1,53 +1,44 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.createSettingsStorageOperations = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
8
  var _error = _interopRequireDefault(require("@webiny/error"));
13
-
14
- var _cleanup = require("@webiny/db-dynamodb/utils/cleanup");
15
-
16
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
17
-
18
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
19
-
9
+ var _dbDynamodb = require("@webiny/db-dynamodb");
20
10
  const createSettingsStorageOperations = params => {
21
11
  const {
22
12
  entity
23
13
  } = params;
24
-
25
14
  const createSettingsPartitionKey = ({
26
15
  tenant,
27
16
  locale
28
17
  }) => {
29
18
  return `T#${tenant}#L#${locale}#FB#SETTINGS`;
30
19
  };
31
-
32
20
  const createSettingsSortKey = () => {
33
21
  return "default";
34
22
  };
35
-
36
23
  const createKeys = params => {
37
24
  return {
38
25
  PK: createSettingsPartitionKey(params),
39
26
  SK: createSettingsSortKey()
40
27
  };
41
28
  };
42
-
43
29
  const createSettings = async params => {
44
30
  const {
45
31
  settings
46
32
  } = params;
47
33
  const keys = createKeys(settings);
48
-
49
34
  try {
50
- await entity.put(_objectSpread(_objectSpread({}, settings), keys));
35
+ await (0, _dbDynamodb.put)({
36
+ entity,
37
+ item: {
38
+ ...settings,
39
+ ...keys
40
+ }
41
+ });
51
42
  return settings;
52
43
  } catch (ex) {
53
44
  throw new _error.default(ex.message || "Could not create the settings record by given keys.", ex.code || "CREATE_SETTINGS_ERROR", {
@@ -56,34 +47,33 @@ const createSettingsStorageOperations = params => {
56
47
  });
57
48
  }
58
49
  };
59
-
60
50
  const getSettings = async params => {
61
51
  const keys = createKeys(params);
62
-
63
52
  try {
64
- const result = await entity.get(keys);
65
-
66
- if (!result || !result.Item) {
67
- return null;
68
- }
69
-
70
- return (0, _cleanup.cleanupItem)(entity, result.Item);
53
+ return await (0, _dbDynamodb.getClean)({
54
+ entity,
55
+ keys
56
+ });
71
57
  } catch (ex) {
72
58
  throw new _error.default(ex.message || "Could not get the settings record by given keys.", ex.code || "LOAD_SETTINGS_ERROR", {
73
59
  keys
74
60
  });
75
61
  }
76
62
  };
77
-
78
63
  const updateSettings = async params => {
79
64
  const {
80
65
  settings,
81
66
  original
82
67
  } = params;
83
68
  const keys = createKeys(settings);
84
-
85
69
  try {
86
- await entity.put(_objectSpread(_objectSpread({}, settings), keys));
70
+ await (0, _dbDynamodb.put)({
71
+ entity,
72
+ item: {
73
+ ...settings,
74
+ ...keys
75
+ }
76
+ });
87
77
  return settings;
88
78
  } catch (ex) {
89
79
  throw new _error.default(ex.message || "Could not update the settings record by given keys.", ex.code || "UPDATE_SETTINGS_ERROR", {
@@ -93,22 +83,22 @@ const createSettingsStorageOperations = params => {
93
83
  });
94
84
  }
95
85
  };
96
-
97
86
  const deleteSettings = async params => {
98
87
  const {
99
88
  settings
100
89
  } = params;
101
90
  const keys = createKeys(settings);
102
-
103
91
  try {
104
- await entity.delete();
92
+ await (0, _dbDynamodb.deleteItem)({
93
+ entity,
94
+ keys
95
+ });
105
96
  } catch (ex) {
106
97
  throw new _error.default(ex.message || "Could not delete the settings record by given keys.", ex.code || "DELETE_SETTINGS_ERROR", {
107
98
  keys
108
99
  });
109
100
  }
110
101
  };
111
-
112
102
  return {
113
103
  createSettings,
114
104
  getSettings,
@@ -118,5 +108,6 @@ const createSettingsStorageOperations = params => {
118
108
  createSettingsSortKey
119
109
  };
120
110
  };
111
+ exports.createSettingsStorageOperations = createSettingsStorageOperations;
121
112
 
122
- exports.createSettingsStorageOperations = createSettingsStorageOperations;
113
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_dbDynamodb","createSettingsStorageOperations","params","entity","createSettingsPartitionKey","tenant","locale","createSettingsSortKey","createKeys","PK","SK","createSettings","settings","keys","put","item","ex","WebinyError","message","code","getSettings","getClean","updateSettings","original","deleteSettings","deleteItem","exports"],"sources":["index.ts"],"sourcesContent":["import type {\n FormBuilderStorageOperationsCreateSettingsParams,\n FormBuilderStorageOperationsDeleteSettingsParams,\n FormBuilderStorageOperationsGetSettingsParams,\n FormBuilderStorageOperationsUpdateSettingsParams,\n Settings\n} from \"@webiny/api-form-builder/types\";\nimport type { Entity, Table } from \"@webiny/db-dynamodb/toolbox\";\nimport type {\n FormBuilderSettingsStorageOperations,\n FormBuilderSettingsStorageOperationsCreatePartitionKeyParams\n} from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport { deleteItem, getClean, put } from \"@webiny/db-dynamodb\";\n\nexport interface CreateSettingsStorageOperationsParams {\n entity: Entity<any>;\n table: Table<string, string, string>;\n}\n\nexport const createSettingsStorageOperations = (\n params: CreateSettingsStorageOperationsParams\n): FormBuilderSettingsStorageOperations => {\n const { entity } = params;\n\n const createSettingsPartitionKey = ({\n tenant,\n locale\n }: FormBuilderSettingsStorageOperationsCreatePartitionKeyParams): string => {\n return `T#${tenant}#L#${locale}#FB#SETTINGS`;\n };\n\n const createSettingsSortKey = (): string => {\n return \"default\";\n };\n\n const createKeys = (params: FormBuilderSettingsStorageOperationsCreatePartitionKeyParams) => {\n return {\n PK: createSettingsPartitionKey(params),\n SK: createSettingsSortKey()\n };\n };\n\n const createSettings = async (\n params: FormBuilderStorageOperationsCreateSettingsParams\n ): Promise<Settings> => {\n const { settings } = params;\n const keys = createKeys(settings);\n\n try {\n await put({\n entity,\n item: {\n ...settings,\n ...keys\n }\n });\n return settings;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create the settings record by given keys.\",\n ex.code || \"CREATE_SETTINGS_ERROR\",\n {\n keys,\n settings\n }\n );\n }\n };\n\n const getSettings = async (\n params: FormBuilderStorageOperationsGetSettingsParams\n ): Promise<Settings | null> => {\n const keys = createKeys(params);\n\n try {\n return await getClean<Settings>({\n entity,\n keys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get the settings record by given keys.\",\n ex.code || \"LOAD_SETTINGS_ERROR\",\n {\n keys\n }\n );\n }\n };\n\n const updateSettings = async (\n params: FormBuilderStorageOperationsUpdateSettingsParams\n ): Promise<Settings> => {\n const { settings, original } = params;\n const keys = createKeys(settings);\n\n try {\n await put({\n entity,\n item: {\n ...settings,\n ...keys\n }\n });\n return settings;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update the settings record by given keys.\",\n ex.code || \"UPDATE_SETTINGS_ERROR\",\n {\n keys,\n original,\n settings\n }\n );\n }\n };\n\n const deleteSettings = async (\n params: FormBuilderStorageOperationsDeleteSettingsParams\n ): Promise<void> => {\n const { settings } = params;\n const keys = createKeys(settings);\n try {\n await deleteItem({\n entity,\n keys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete the settings record by given keys.\",\n ex.code || \"DELETE_SETTINGS_ERROR\",\n {\n keys\n }\n );\n }\n };\n\n return {\n createSettings,\n getSettings,\n updateSettings,\n deleteSettings,\n createSettingsPartitionKey,\n createSettingsSortKey\n };\n};\n"],"mappings":";;;;;;;AAYA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAOO,MAAME,+BAA+B,GACxCC,MAA6C,IACN;EACvC,MAAM;IAAEC;EAAO,CAAC,GAAGD,MAAM;EAEzB,MAAME,0BAA0B,GAAGA,CAAC;IAChCC,MAAM;IACNC;EAC0D,CAAC,KAAa;IACxE,OAAO,KAAKD,MAAM,MAAMC,MAAM,cAAc;EAChD,CAAC;EAED,MAAMC,qBAAqB,GAAGA,CAAA,KAAc;IACxC,OAAO,SAAS;EACpB,CAAC;EAED,MAAMC,UAAU,GAAIN,MAAoE,IAAK;IACzF,OAAO;MACHO,EAAE,EAAEL,0BAA0B,CAACF,MAAM,CAAC;MACtCQ,EAAE,EAAEH,qBAAqB,CAAC;IAC9B,CAAC;EACL,CAAC;EAED,MAAMI,cAAc,GAAG,MACnBT,MAAwD,IACpC;IACpB,MAAM;MAAEU;IAAS,CAAC,GAAGV,MAAM;IAC3B,MAAMW,IAAI,GAAGL,UAAU,CAACI,QAAQ,CAAC;IAEjC,IAAI;MACA,MAAM,IAAAE,eAAG,EAAC;QACNX,MAAM;QACNY,IAAI,EAAE;UACF,GAAGH,QAAQ;UACX,GAAGC;QACP;MACJ,CAAC,CAAC;MACF,OAAOD,QAAQ;IACnB,CAAC,CAAC,OAAOI,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,qDAAqD,EACnEF,EAAE,CAACG,IAAI,IAAI,uBAAuB,EAClC;QACIN,IAAI;QACJD;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAMQ,WAAW,GAAG,MAChBlB,MAAqD,IAC1B;IAC3B,MAAMW,IAAI,GAAGL,UAAU,CAACN,MAAM,CAAC;IAE/B,IAAI;MACA,OAAO,MAAM,IAAAmB,oBAAQ,EAAW;QAC5BlB,MAAM;QACNU;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOG,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,kDAAkD,EAChEF,EAAE,CAACG,IAAI,IAAI,qBAAqB,EAChC;QACIN;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAMS,cAAc,GAAG,MACnBpB,MAAwD,IACpC;IACpB,MAAM;MAAEU,QAAQ;MAAEW;IAAS,CAAC,GAAGrB,MAAM;IACrC,MAAMW,IAAI,GAAGL,UAAU,CAACI,QAAQ,CAAC;IAEjC,IAAI;MACA,MAAM,IAAAE,eAAG,EAAC;QACNX,MAAM;QACNY,IAAI,EAAE;UACF,GAAGH,QAAQ;UACX,GAAGC;QACP;MACJ,CAAC,CAAC;MACF,OAAOD,QAAQ;IACnB,CAAC,CAAC,OAAOI,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,qDAAqD,EACnEF,EAAE,CAACG,IAAI,IAAI,uBAAuB,EAClC;QACIN,IAAI;QACJU,QAAQ;QACRX;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAMY,cAAc,GAAG,MACnBtB,MAAwD,IACxC;IAChB,MAAM;MAAEU;IAAS,CAAC,GAAGV,MAAM;IAC3B,MAAMW,IAAI,GAAGL,UAAU,CAACI,QAAQ,CAAC;IACjC,IAAI;MACA,MAAM,IAAAa,sBAAU,EAAC;QACbtB,MAAM;QACNU;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOG,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,qDAAqD,EACnEF,EAAE,CAACG,IAAI,IAAI,uBAAuB,EAClC;QACIN;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,OAAO;IACHF,cAAc;IACdS,WAAW;IACXE,cAAc;IACdE,cAAc;IACdpB,0BAA0B;IAC1BG;EACJ,CAAC;AACL,CAAC;AAACmB,OAAA,CAAAzB,+BAAA,GAAAA,+BAAA","ignoreList":[]}
@@ -1,12 +1,12 @@
1
- import { SearchBody as esSearchBody } from "elastic-ts";
2
- import { FormBuilderStorageOperationsListSubmissionsParams } from "@webiny/api-form-builder/types";
3
- import { PluginsContainer } from "@webiny/plugins";
1
+ import type { PrimitiveValue, SearchBody as esSearchBody } from "elastic-ts";
2
+ import type { FormBuilderStorageOperationsListSubmissionsParams } from "@webiny/api-form-builder/types";
3
+ import type { PluginsContainer } from "@webiny/plugins";
4
4
  export declare const createSubmissionElasticType: () => string;
5
5
  interface CreateElasticsearchBodyParams {
6
6
  plugins: PluginsContainer;
7
7
  where: FormBuilderStorageOperationsListSubmissionsParams["where"];
8
8
  limit: number;
9
- after?: string;
9
+ after?: PrimitiveValue[];
10
10
  sort: string[];
11
11
  }
12
12
  export declare const createElasticsearchBody: (params: CreateElasticsearchBodyParams) => esSearchBody;
@@ -1,36 +1,14 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
6
  exports.createSubmissionElasticType = exports.createElasticsearchBody = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _cursors = require("@webiny/api-elasticsearch/cursors");
13
-
14
- var _sort = require("@webiny/api-elasticsearch/sort");
15
-
16
- var _limit = require("@webiny/api-elasticsearch/limit");
17
-
18
- var _ElasticsearchQueryBuilderOperatorPlugin = require("@webiny/api-elasticsearch/plugins/definition/ElasticsearchQueryBuilderOperatorPlugin");
19
-
7
+ var _apiElasticsearch = require("@webiny/api-elasticsearch");
20
8
  var _SubmissionElasticsearchFieldPlugin = require("../../plugins/SubmissionElasticsearchFieldPlugin");
21
-
22
9
  var _SubmissionElasticsearchSortModifierPlugin = require("../../plugins/SubmissionElasticsearchSortModifierPlugin");
23
-
24
10
  var _SubmissionElasticsearchBodyModifierPlugin = require("../../plugins/SubmissionElasticsearchBodyModifierPlugin");
25
-
26
11
  var _SubmissionElasticsearchQueryModifierPlugin = require("../../plugins/SubmissionElasticsearchQueryModifierPlugin");
27
-
28
- var _where = require("@webiny/api-elasticsearch/where");
29
-
30
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
31
-
32
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
33
-
34
12
  const createInitialQueryValue = () => {
35
13
  return {
36
14
  must: [
@@ -47,13 +25,10 @@ const createInitialQueryValue = () => {
47
25
  filter: []
48
26
  };
49
27
  };
50
-
51
28
  const createSubmissionElasticType = () => {
52
29
  return "fb.submission";
53
30
  };
54
-
55
31
  exports.createSubmissionElasticType = createSubmissionElasticType;
56
-
57
32
  const createElasticsearchQuery = params => {
58
33
  const {
59
34
  plugins,
@@ -64,24 +39,24 @@ const createElasticsearchQuery = params => {
64
39
  /**
65
40
  * Be aware that, if having more registered operator plugins of same type, the last one will be used.
66
41
  */
67
-
68
- const operatorPlugins = plugins.byType(_ElasticsearchQueryBuilderOperatorPlugin.ElasticsearchQueryBuilderOperatorPlugin.type).reduce((acc, plugin) => {
42
+ const operatorPlugins = plugins.byType(_apiElasticsearch.ElasticsearchQueryBuilderOperatorPlugin.type).reduce((acc, plugin) => {
43
+ if (plugin.isLocaleSupported(initialWhere.locale) === false) {
44
+ return acc;
45
+ }
69
46
  acc[plugin.getOperator()] = plugin;
70
47
  return acc;
71
48
  }, {});
72
-
73
- const where = _objectSpread({}, initialWhere);
49
+ const where = {
50
+ ...initialWhere
51
+ };
74
52
  /**
75
53
  * !!! IMPORTANT !!! There are few specific cases where we hardcode the query conditions.
76
54
  *
77
55
  * When ES index is shared between tenants, we need to filter records by tenant ID.
78
56
  * No need for the tenant filtering otherwise as each index is for single tenant.
79
57
  */
80
-
81
-
82
- const sharedIndex = process.env.ELASTICSEARCH_SHARED_INDEXES === "true";
83
-
84
- if (sharedIndex) {
58
+ const sharedIndex = (0, _apiElasticsearch.isSharedElasticsearchIndex)();
59
+ if (sharedIndex && where.tenant) {
85
60
  query.must.push({
86
61
  term: {
87
62
  "tenant.keyword": where.tenant
@@ -92,13 +67,10 @@ const createElasticsearchQuery = params => {
92
67
  * Remove tenant so it is not applied again later.
93
68
  * Possibly tenant is not defined, but just in case, remove it.
94
69
  */
95
-
96
-
97
70
  delete where.tenant;
98
71
  /**
99
72
  * Add the locale to filtering.
100
73
  */
101
-
102
74
  query.must.push({
103
75
  term: {
104
76
  "locale.keyword": where.locale
@@ -108,7 +80,6 @@ const createElasticsearchQuery = params => {
108
80
  /**
109
81
  * And add the parent (form) to the filtering, if it exists.
110
82
  */
111
-
112
83
  query.must.push({
113
84
  term: {
114
85
  "form.parent.keyword": where.formId
@@ -118,8 +89,7 @@ const createElasticsearchQuery = params => {
118
89
  /**
119
90
  * We apply other conditions as they are passed via the where value.
120
91
  */
121
-
122
- (0, _where.applyWhere)({
92
+ (0, _apiElasticsearch.applyWhere)({
123
93
  query,
124
94
  where,
125
95
  fields: fieldPlugins,
@@ -127,7 +97,6 @@ const createElasticsearchQuery = params => {
127
97
  });
128
98
  return query;
129
99
  };
130
-
131
100
  const createElasticsearchBody = params => {
132
101
  const {
133
102
  plugins,
@@ -140,58 +109,50 @@ const createElasticsearchBody = params => {
140
109
  acc[plugin.field] = plugin;
141
110
  return acc;
142
111
  }, {});
143
- const limit = (0, _limit.createLimit)(initialLimit, 100);
144
- const query = createElasticsearchQuery(_objectSpread(_objectSpread({}, params), {}, {
112
+ const limit = (0, _apiElasticsearch.createLimit)(initialLimit, 100);
113
+ const query = createElasticsearchQuery({
114
+ ...params,
145
115
  fieldPlugins
146
- }));
147
- const sort = (0, _sort.createSort)({
116
+ });
117
+ const sort = (0, _apiElasticsearch.createSort)({
148
118
  sort: initialSort,
149
119
  fieldPlugins
150
120
  });
151
121
  const queryModifiers = plugins.byType(_SubmissionElasticsearchQueryModifierPlugin.SubmissionElasticsearchQueryModifierPlugin.type);
152
-
153
122
  for (const plugin of queryModifiers) {
154
123
  plugin.modifyQuery({
155
124
  query,
156
125
  where
157
126
  });
158
127
  }
159
-
160
128
  const sortModifiers = plugins.byType(_SubmissionElasticsearchSortModifierPlugin.SubmissionElasticsearchSortModifierPlugin.type);
161
-
162
129
  for (const plugin of sortModifiers) {
163
130
  plugin.modifySort({
164
131
  sort
165
132
  });
166
133
  }
167
-
168
134
  const body = {
169
135
  query: {
170
136
  constant_score: {
171
137
  filter: {
172
- bool: _objectSpread({}, query)
138
+ bool: {
139
+ ...query
140
+ }
173
141
  }
174
142
  }
175
143
  },
176
144
  size: limit + 1,
177
-
178
- /**
179
- * Casting as any is required due to search_after is accepting an array of values.
180
- * Which is correct in some cases. In our case, it is not.
181
- * https://www.elastic.co/guide/en/elasticsearch/reference/7.13/paginate-search-results.html
182
- */
183
- search_after: (0, _cursors.decodeCursor)(after),
145
+ search_after: after,
184
146
  sort
185
147
  };
186
148
  const bodyModifiers = plugins.byType(_SubmissionElasticsearchBodyModifierPlugin.SubmissionElasticsearchBodyModifierPlugin.type);
187
-
188
149
  for (const plugin of bodyModifiers) {
189
150
  plugin.modifyBody({
190
151
  body
191
152
  });
192
153
  }
193
-
194
154
  return body;
195
155
  };
156
+ exports.createElasticsearchBody = createElasticsearchBody;
196
157
 
197
- exports.createElasticsearchBody = createElasticsearchBody;
158
+ //# sourceMappingURL=elasticsearchBody.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_apiElasticsearch","require","_SubmissionElasticsearchFieldPlugin","_SubmissionElasticsearchSortModifierPlugin","_SubmissionElasticsearchBodyModifierPlugin","_SubmissionElasticsearchQueryModifierPlugin","createInitialQueryValue","must","term","must_not","should","filter","createSubmissionElasticType","exports","createElasticsearchQuery","params","plugins","where","initialWhere","fieldPlugins","query","operatorPlugins","byType","ElasticsearchQueryBuilderOperatorPlugin","type","reduce","acc","plugin","isLocaleSupported","locale","getOperator","sharedIndex","isSharedElasticsearchIndex","tenant","push","formId","applyWhere","fields","operators","createElasticsearchBody","limit","initialLimit","sort","initialSort","after","SubmissionElasticsearchFieldPlugin","field","createLimit","createSort","queryModifiers","SubmissionElasticsearchQueryModifierPlugin","modifyQuery","sortModifiers","SubmissionElasticsearchSortModifierPlugin","modifySort","body","constant_score","bool","size","search_after","bodyModifiers","SubmissionElasticsearchBodyModifierPlugin","modifyBody"],"sources":["elasticsearchBody.ts"],"sourcesContent":["import type { PrimitiveValue, SearchBody as esSearchBody } from \"elastic-ts\";\nimport {\n applyWhere,\n createLimit,\n createSort,\n ElasticsearchQueryBuilderOperatorPlugin,\n isSharedElasticsearchIndex\n} from \"@webiny/api-elasticsearch\";\nimport type { ElasticsearchBoolQueryConfig } from \"@webiny/api-elasticsearch/types\";\nimport { SubmissionElasticsearchFieldPlugin } from \"~/plugins/SubmissionElasticsearchFieldPlugin\";\nimport { SubmissionElasticsearchSortModifierPlugin } from \"~/plugins/SubmissionElasticsearchSortModifierPlugin\";\nimport { SubmissionElasticsearchBodyModifierPlugin } from \"~/plugins/SubmissionElasticsearchBodyModifierPlugin\";\nimport type { FormBuilderStorageOperationsListSubmissionsParams } from \"@webiny/api-form-builder/types\";\nimport { SubmissionElasticsearchQueryModifierPlugin } from \"~/plugins/SubmissionElasticsearchQueryModifierPlugin\";\nimport type { PluginsContainer } from \"@webiny/plugins\";\n\nconst createInitialQueryValue = (): ElasticsearchBoolQueryConfig => {\n return {\n must: [\n /**\n * We add the __type filtering in the initial query because it must be applied.\n */\n {\n term: {\n \"__type.keyword\": \"fb.submission\"\n }\n }\n ],\n must_not: [],\n should: [],\n filter: []\n };\n};\n\nexport const createSubmissionElasticType = (): string => {\n return \"fb.submission\";\n};\n\ninterface CreateElasticsearchQueryParams extends CreateElasticsearchBodyParams {\n fieldPlugins: Record<string, SubmissionElasticsearchFieldPlugin>;\n}\n\nconst createElasticsearchQuery = (params: CreateElasticsearchQueryParams) => {\n const { plugins, where: initialWhere, fieldPlugins } = params;\n const query = createInitialQueryValue();\n /**\n * Be aware that, if having more registered operator plugins of same type, the last one will be used.\n */\n const operatorPlugins = plugins\n .byType<ElasticsearchQueryBuilderOperatorPlugin>(\n ElasticsearchQueryBuilderOperatorPlugin.type\n )\n .reduce((acc, plugin) => {\n if (plugin.isLocaleSupported(initialWhere.locale) === false) {\n return acc;\n }\n acc[plugin.getOperator()] = plugin;\n return acc;\n }, {} as Record<string, ElasticsearchQueryBuilderOperatorPlugin>);\n\n const where: Partial<FormBuilderStorageOperationsListSubmissionsParams[\"where\"]> = {\n ...initialWhere\n };\n /**\n * !!! IMPORTANT !!! There are few specific cases where we hardcode the query conditions.\n *\n * When ES index is shared between tenants, we need to filter records by tenant ID.\n * No need for the tenant filtering otherwise as each index is for single tenant.\n */\n const sharedIndex = isSharedElasticsearchIndex();\n if (sharedIndex && where.tenant) {\n query.must.push({\n term: {\n \"tenant.keyword\": where.tenant\n }\n });\n }\n /**\n * Remove tenant so it is not applied again later.\n * Possibly tenant is not defined, but just in case, remove it.\n */\n delete where.tenant;\n /**\n * Add the locale to filtering.\n */\n query.must.push({\n term: {\n \"locale.keyword\": where.locale as string\n }\n });\n delete where.locale;\n /**\n * And add the parent (form) to the filtering, if it exists.\n */\n query.must.push({\n term: {\n \"form.parent.keyword\": where.formId as string\n }\n });\n delete where.formId;\n /**\n * We apply other conditions as they are passed via the where value.\n */\n applyWhere({\n query,\n where,\n fields: fieldPlugins,\n operators: operatorPlugins\n });\n\n return query;\n};\n\ninterface CreateElasticsearchBodyParams {\n plugins: PluginsContainer;\n where: FormBuilderStorageOperationsListSubmissionsParams[\"where\"];\n limit: number;\n after?: PrimitiveValue[];\n sort: string[];\n}\n\nexport const createElasticsearchBody = (params: CreateElasticsearchBodyParams): esSearchBody => {\n const { plugins, where, limit: initialLimit, sort: initialSort, after } = params;\n\n const fieldPlugins = plugins\n .byType<SubmissionElasticsearchFieldPlugin>(SubmissionElasticsearchFieldPlugin.type)\n .reduce((acc, plugin) => {\n acc[plugin.field] = plugin;\n return acc;\n }, {} as Record<string, SubmissionElasticsearchFieldPlugin>);\n\n const limit = createLimit(initialLimit, 100);\n\n const query = createElasticsearchQuery({\n ...params,\n fieldPlugins\n });\n\n const sort = createSort({\n sort: initialSort,\n fieldPlugins\n });\n\n const queryModifiers = plugins.byType<SubmissionElasticsearchQueryModifierPlugin>(\n SubmissionElasticsearchQueryModifierPlugin.type\n );\n\n for (const plugin of queryModifiers) {\n plugin.modifyQuery({\n query,\n where\n });\n }\n\n const sortModifiers = plugins.byType<SubmissionElasticsearchSortModifierPlugin>(\n SubmissionElasticsearchSortModifierPlugin.type\n );\n\n for (const plugin of sortModifiers) {\n plugin.modifySort({\n sort\n });\n }\n\n const body = {\n query: {\n constant_score: {\n filter: {\n bool: {\n ...query\n }\n }\n }\n },\n size: limit + 1,\n search_after: after,\n sort\n };\n\n const bodyModifiers = plugins.byType<SubmissionElasticsearchBodyModifierPlugin>(\n SubmissionElasticsearchBodyModifierPlugin.type\n );\n\n for (const plugin of bodyModifiers) {\n plugin.modifyBody({\n body\n });\n }\n\n return body;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _SubmissionElasticsearchFieldPlugin = require("../../plugins/SubmissionElasticsearchFieldPlugin");
9
-
10
8
  var _default = () => [new _SubmissionElasticsearchFieldPlugin.SubmissionElasticsearchFieldPlugin({
11
9
  field: "parent",
12
10
  path: "form.parent"
@@ -26,5 +24,6 @@ var _default = () => [new _SubmissionElasticsearchFieldPlugin.SubmissionElastics
26
24
  new _SubmissionElasticsearchFieldPlugin.SubmissionElasticsearchFieldPlugin({
27
25
  field: _SubmissionElasticsearchFieldPlugin.SubmissionElasticsearchFieldPlugin.ALL
28
26
  })];
27
+ exports.default = _default;
29
28
 
30
- exports.default = _default;
29
+ //# sourceMappingURL=elasticsearchFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_SubmissionElasticsearchFieldPlugin","require","_default","SubmissionElasticsearchFieldPlugin","field","path","unmappedType","ALL","exports","default"],"sources":["elasticsearchFields.ts"],"sourcesContent":["import { SubmissionElasticsearchFieldPlugin } from \"~/plugins/SubmissionElasticsearchFieldPlugin\";\n\nexport default () => [\n new SubmissionElasticsearchFieldPlugin({\n field: \"parent\",\n path: \"form.parent\"\n }),\n new SubmissionElasticsearchFieldPlugin({\n field: \"ownedBy\",\n path: \"ownedBy.id\"\n }),\n new SubmissionElasticsearchFieldPlugin({\n field: \"createdOn\",\n unmappedType: \"date\"\n }),\n new SubmissionElasticsearchFieldPlugin({\n field: \"savedOn\",\n unmappedType: \"date\"\n }),\n /**\n * Always add the ALL fields plugin because of the keyword/path build.\n */\n new SubmissionElasticsearchFieldPlugin({\n field: SubmissionElasticsearchFieldPlugin.ALL\n })\n];\n"],"mappings":";;;;;;AAAA,IAAAA,mCAAA,GAAAC,OAAA;AAAkG,IAAAC,QAAA,GAEnFA,CAAA,KAAM,CACjB,IAAIC,sEAAkC,CAAC;EACnCC,KAAK,EAAE,QAAQ;EACfC,IAAI,EAAE;AACV,CAAC,CAAC,EACF,IAAIF,sEAAkC,CAAC;EACnCC,KAAK,EAAE,SAAS;EAChBC,IAAI,EAAE;AACV,CAAC,CAAC,EACF,IAAIF,sEAAkC,CAAC;EACnCC,KAAK,EAAE,WAAW;EAClBE,YAAY,EAAE;AAClB,CAAC,CAAC,EACF,IAAIH,sEAAkC,CAAC;EACnCC,KAAK,EAAE,SAAS;EAChBE,YAAY,EAAE;AAClB,CAAC,CAAC;AACF;AACJ;AACA;AACI,IAAIH,sEAAkC,CAAC;EACnCC,KAAK,EAAED,sEAAkC,CAACI;AAC9C,CAAC,CAAC,CACL;AAAAC,OAAA,CAAAC,OAAA,GAAAP,QAAA","ignoreList":[]}
@@ -1,12 +1,12 @@
1
- import { Entity, Table } from "dynamodb-toolbox";
2
- import { Client } from "@elastic/elasticsearch";
3
- import { PluginsContainer } from "@webiny/plugins";
4
- import { FormBuilderSubmissionStorageOperations } from "../../types";
5
- export interface Params {
1
+ import type { Entity, Table } from "@webiny/db-dynamodb/toolbox";
2
+ import type { Client } from "@elastic/elasticsearch";
3
+ import type { PluginsContainer } from "@webiny/plugins";
4
+ import type { FormBuilderSubmissionStorageOperations } from "../../types";
5
+ export interface CreateSubmissionStorageOperationsParams {
6
6
  entity: Entity<any>;
7
7
  esEntity: Entity<any>;
8
- table: Table;
8
+ table: Table<string, string, string>;
9
9
  elasticsearch: Client;
10
10
  plugins: PluginsContainer;
11
11
  }
12
- export declare const createSubmissionStorageOperations: (params: Params) => FormBuilderSubmissionStorageOperations;
12
+ export declare const createSubmissionStorageOperations: (params: CreateSubmissionStorageOperationsParams) => FormBuilderSubmissionStorageOperations;