@webiny/api-form-builder-so-ddb-es 5.41.4 → 5.42.0-beta.0

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.
@@ -1 +1 @@
1
- {"version":3,"names":["_error","_interopRequireDefault","require","_apiElasticsearch","_plugins","configurations","exports","es","params","tenant","locale","WebinyError","sharedIndex","isSharedElasticsearchIndex","tenantId","localeCode","process","env","WEBINY_ELASTICSEARCH_INDEX_LOCALE","index","filter","Boolean","join","toLowerCase","prefix","getElasticsearchIndexPrefix","indexSettings","context","plugin","getLastAddedIndexPlugin","container","plugins","type","FormElasticsearchIndexPlugin","body"],"sources":["configurations.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n getElasticsearchIndexPrefix,\n getLastAddedIndexPlugin,\n isSharedElasticsearchIndex\n} from \"@webiny/api-elasticsearch\";\nimport { FormElasticsearchIndexPlugin } from \"~/plugins\";\nimport { ElasticsearchIndexRequestBody } from \"@webiny/api-elasticsearch/types\";\nimport { FormBuilderContext } from \"@webiny/api-form-builder/types\";\n\nexport interface ConfigurationsElasticsearch {\n index: string;\n}\n\nexport interface ConfigurationsElasticsearchParams {\n tenant: string;\n locale: string;\n}\n\nexport interface ConfigurationsIndexSettingsParams {\n context: FormBuilderContext;\n locale: string;\n}\n\nexport interface Configurations {\n es: (params: ConfigurationsElasticsearchParams) => ConfigurationsElasticsearch;\n indexSettings: (\n params: ConfigurationsIndexSettingsParams\n ) => Partial<ElasticsearchIndexRequestBody>;\n}\n\nexport const configurations: Configurations = {\n es(params) {\n const { tenant, locale } = params;\n if (!tenant) {\n throw new WebinyError(\n `Missing \"tenant\" parameter when trying to create Elasticsearch index name.`,\n \"TENANT_ERROR\"\n );\n }\n\n const sharedIndex = isSharedElasticsearchIndex();\n\n const tenantId = sharedIndex ? \"root\" : tenant;\n let localeCode: string | null = null;\n if (process.env.WEBINY_ELASTICSEARCH_INDEX_LOCALE === \"true\") {\n if (!locale) {\n throw new WebinyError(\n `Missing \"locale\" parameter when trying to create Elasticsearch index name.`,\n \"LOCALE_ERROR\"\n );\n }\n localeCode = locale;\n }\n\n const index = [tenantId, localeCode, \"form-builder\"]\n .filter(Boolean)\n .join(\"-\")\n .toLowerCase();\n\n const prefix = getElasticsearchIndexPrefix();\n if (!prefix) {\n return {\n index\n };\n }\n return {\n index: prefix + index\n };\n },\n indexSettings: ({ context, locale }) => {\n const plugin = getLastAddedIndexPlugin<FormElasticsearchIndexPlugin>({\n container: context.plugins,\n type: FormElasticsearchIndexPlugin.type,\n locale\n });\n\n return plugin ? plugin.body : {};\n }\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AAKA,IAAAE,QAAA,GAAAF,OAAA;AAyBO,MAAMG,cAA8B,GAAAC,OAAA,CAAAD,cAAA,GAAG;EAC1CE,EAAEA,CAACC,MAAM,EAAE;IACP,MAAM;MAAEC,MAAM;MAAEC;IAAO,CAAC,GAAGF,MAAM;IACjC,IAAI,CAACC,MAAM,EAAE;MACT,MAAM,IAAIE,cAAW,CAChB,4EAA2E,EAC5E,cACJ,CAAC;IACL;IAEA,MAAMC,WAAW,GAAG,IAAAC,4CAA0B,EAAC,CAAC;IAEhD,MAAMC,QAAQ,GAAGF,WAAW,GAAG,MAAM,GAAGH,MAAM;IAC9C,IAAIM,UAAyB,GAAG,IAAI;IACpC,IAAIC,OAAO,CAACC,GAAG,CAACC,iCAAiC,KAAK,MAAM,EAAE;MAC1D,IAAI,CAACR,MAAM,EAAE;QACT,MAAM,IAAIC,cAAW,CAChB,4EAA2E,EAC5E,cACJ,CAAC;MACL;MACAI,UAAU,GAAGL,MAAM;IACvB;IAEA,MAAMS,KAAK,GAAG,CAACL,QAAQ,EAAEC,UAAU,EAAE,cAAc,CAAC,CAC/CK,MAAM,CAACC,OAAO,CAAC,CACfC,IAAI,CAAC,GAAG,CAAC,CACTC,WAAW,CAAC,CAAC;IAElB,MAAMC,MAAM,GAAG,IAAAC,6CAA2B,EAAC,CAAC;IAC5C,IAAI,CAACD,MAAM,EAAE;MACT,OAAO;QACHL;MACJ,CAAC;IACL;IACA,OAAO;MACHA,KAAK,EAAEK,MAAM,GAAGL;IACpB,CAAC;EACL,CAAC;EACDO,aAAa,EAAEA,CAAC;IAAEC,OAAO;IAAEjB;EAAO,CAAC,KAAK;IACpC,MAAMkB,MAAM,GAAG,IAAAC,yCAAuB,EAA+B;MACjEC,SAAS,EAAEH,OAAO,CAACI,OAAO;MAC1BC,IAAI,EAAEC,qCAA4B,CAACD,IAAI;MACvCtB;IACJ,CAAC,CAAC;IAEF,OAAOkB,MAAM,GAAGA,MAAM,CAACM,IAAI,GAAG,CAAC,CAAC;EACpC;AACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_apiElasticsearch","_plugins","configurations","exports","es","params","tenant","locale","WebinyError","sharedIndex","isSharedElasticsearchIndex","tenantId","localeCode","process","env","WEBINY_ELASTICSEARCH_INDEX_LOCALE","index","filter","Boolean","join","toLowerCase","prefix","getElasticsearchIndexPrefix","indexSettings","context","plugin","getLastAddedIndexPlugin","container","plugins","type","FormElasticsearchIndexPlugin","body"],"sources":["configurations.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n getElasticsearchIndexPrefix,\n getLastAddedIndexPlugin,\n isSharedElasticsearchIndex\n} from \"@webiny/api-elasticsearch\";\nimport { FormElasticsearchIndexPlugin } from \"~/plugins\";\nimport { ElasticsearchIndexRequestBody } from \"@webiny/api-elasticsearch/types\";\nimport { FormBuilderContext } from \"@webiny/api-form-builder/types\";\n\nexport interface ConfigurationsElasticsearch {\n index: string;\n}\n\nexport interface ConfigurationsElasticsearchParams {\n tenant: string;\n locale: string;\n}\n\nexport interface ConfigurationsIndexSettingsParams {\n context: FormBuilderContext;\n locale: string;\n}\n\nexport interface Configurations {\n es: (params: ConfigurationsElasticsearchParams) => ConfigurationsElasticsearch;\n indexSettings: (\n params: ConfigurationsIndexSettingsParams\n ) => Partial<ElasticsearchIndexRequestBody>;\n}\n\nexport const configurations: Configurations = {\n es(params) {\n const { tenant, locale } = params;\n if (!tenant) {\n throw new WebinyError(\n `Missing \"tenant\" parameter when trying to create Elasticsearch index name.`,\n \"TENANT_ERROR\"\n );\n }\n\n const sharedIndex = isSharedElasticsearchIndex();\n\n const tenantId = sharedIndex ? \"root\" : tenant;\n let localeCode: string | null = null;\n if (process.env.WEBINY_ELASTICSEARCH_INDEX_LOCALE === \"true\") {\n if (!locale) {\n throw new WebinyError(\n `Missing \"locale\" parameter when trying to create Elasticsearch index name.`,\n \"LOCALE_ERROR\"\n );\n }\n localeCode = locale;\n }\n\n const index = [tenantId, localeCode, \"form-builder\"]\n .filter(Boolean)\n .join(\"-\")\n .toLowerCase();\n\n const prefix = getElasticsearchIndexPrefix();\n if (!prefix) {\n return {\n index\n };\n }\n return {\n index: prefix + index\n };\n },\n indexSettings: ({ context, locale }) => {\n const plugin = getLastAddedIndexPlugin<FormElasticsearchIndexPlugin>({\n container: context.plugins,\n type: FormElasticsearchIndexPlugin.type,\n locale\n });\n\n return plugin ? plugin.body : {};\n }\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AAKA,IAAAE,QAAA,GAAAF,OAAA;AAyBO,MAAMG,cAA8B,GAAAC,OAAA,CAAAD,cAAA,GAAG;EAC1CE,EAAEA,CAACC,MAAM,EAAE;IACP,MAAM;MAAEC,MAAM;MAAEC;IAAO,CAAC,GAAGF,MAAM;IACjC,IAAI,CAACC,MAAM,EAAE;MACT,MAAM,IAAIE,cAAW,CACjB,4EAA4E,EAC5E,cACJ,CAAC;IACL;IAEA,MAAMC,WAAW,GAAG,IAAAC,4CAA0B,EAAC,CAAC;IAEhD,MAAMC,QAAQ,GAAGF,WAAW,GAAG,MAAM,GAAGH,MAAM;IAC9C,IAAIM,UAAyB,GAAG,IAAI;IACpC,IAAIC,OAAO,CAACC,GAAG,CAACC,iCAAiC,KAAK,MAAM,EAAE;MAC1D,IAAI,CAACR,MAAM,EAAE;QACT,MAAM,IAAIC,cAAW,CACjB,4EAA4E,EAC5E,cACJ,CAAC;MACL;MACAI,UAAU,GAAGL,MAAM;IACvB;IAEA,MAAMS,KAAK,GAAG,CAACL,QAAQ,EAAEC,UAAU,EAAE,cAAc,CAAC,CAC/CK,MAAM,CAACC,OAAO,CAAC,CACfC,IAAI,CAAC,GAAG,CAAC,CACTC,WAAW,CAAC,CAAC;IAElB,MAAMC,MAAM,GAAG,IAAAC,6CAA2B,EAAC,CAAC;IAC5C,IAAI,CAACD,MAAM,EAAE;MACT,OAAO;QACHL;MACJ,CAAC;IACL;IACA,OAAO;MACHA,KAAK,EAAEK,MAAM,GAAGL;IACpB,CAAC;EACL,CAAC;EACDO,aAAa,EAAEA,CAAC;IAAEC,OAAO;IAAEjB;EAAO,CAAC,KAAK;IACpC,MAAMkB,MAAM,GAAG,IAAAC,yCAAuB,EAA+B;MACjEC,SAAS,EAAEH,OAAO,CAACI,OAAO;MAC1BC,IAAI,EAAEC,qCAA4B,CAACD,IAAI;MACvCtB;IACJ,CAAC,CAAC;IAEF,OAAOkB,MAAM,GAAGA,MAAM,CAACM,IAAI,GAAG,CAAC,CAAC;EACpC;AACJ,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_apiElasticsearch","require","_FormElasticsearchIndexPlugin","_configurations","createElasticsearchIndex","params","elasticsearch","plugins","locale","tenant","index","configurations","es","createIndex","client","type","FormElasticsearchIndexPlugin","onExists","console","log","onError","ex","error","exports"],"sources":["createElasticsearchIndex.ts"],"sourcesContent":["import { Client } from \"@elastic/elasticsearch\";\nimport { createIndex } from \"@webiny/api-elasticsearch\";\nimport { FormElasticsearchIndexPlugin } from \"~/plugins/FormElasticsearchIndexPlugin\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { configurations } from \"~/configurations\";\n\ninterface CreateElasticsearchIndexParams {\n elasticsearch: Client;\n plugins: PluginsContainer;\n tenant: string;\n locale: string;\n}\n\nexport const createElasticsearchIndex = async (params: CreateElasticsearchIndexParams) => {\n const { elasticsearch, plugins, locale, tenant } = params;\n\n const { index } = configurations.es({\n locale,\n tenant\n });\n\n await createIndex({\n client: elasticsearch,\n index,\n type: FormElasticsearchIndexPlugin.type,\n tenant,\n locale,\n plugins,\n onExists: () => {\n console.log(`Elasticsearch index \"${index}\" for the Form Builder already exists.`);\n },\n onError: (ex: Error) => {\n console.error(`Could not create the Form Builder Elasticsearch index \"${index}\".`, ex);\n return ex;\n }\n });\n};\n"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,6BAAA,GAAAD,OAAA;AAEA,IAAAE,eAAA,GAAAF,OAAA;AASO,MAAMG,wBAAwB,GAAG,MAAOC,MAAsC,IAAK;EACtF,MAAM;IAAEC,aAAa;IAAEC,OAAO;IAAEC,MAAM;IAAEC;EAAO,CAAC,GAAGJ,MAAM;EAEzD,MAAM;IAAEK;EAAM,CAAC,GAAGC,8BAAc,CAACC,EAAE,CAAC;IAChCJ,MAAM;IACNC;EACJ,CAAC,CAAC;EAEF,MAAM,IAAAI,6BAAW,EAAC;IACdC,MAAM,EAAER,aAAa;IACrBI,KAAK;IACLK,IAAI,EAAEC,0DAA4B,CAACD,IAAI;IACvCN,MAAM;IACND,MAAM;IACND,OAAO;IACPU,QAAQ,EAAEA,CAAA,KAAM;MACZC,OAAO,CAACC,GAAG,CAAE,wBAAuBT,KAAM,wCAAuC,CAAC;IACtF,CAAC;IACDU,OAAO,EAAGC,EAAS,IAAK;MACpBH,OAAO,CAACI,KAAK,CAAE,0DAAyDZ,KAAM,IAAG,EAAEW,EAAE,CAAC;MACtF,OAAOA,EAAE;IACb;EACJ,CAAC,CAAC;AACN,CAAC;AAACE,OAAA,CAAAnB,wBAAA,GAAAA,wBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_apiElasticsearch","require","_FormElasticsearchIndexPlugin","_configurations","createElasticsearchIndex","params","elasticsearch","plugins","locale","tenant","index","configurations","es","createIndex","client","type","FormElasticsearchIndexPlugin","onExists","console","log","onError","ex","error","exports"],"sources":["createElasticsearchIndex.ts"],"sourcesContent":["import { Client } from \"@elastic/elasticsearch\";\nimport { createIndex } from \"@webiny/api-elasticsearch\";\nimport { FormElasticsearchIndexPlugin } from \"~/plugins/FormElasticsearchIndexPlugin\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { configurations } from \"~/configurations\";\n\ninterface CreateElasticsearchIndexParams {\n elasticsearch: Client;\n plugins: PluginsContainer;\n tenant: string;\n locale: string;\n}\n\nexport const createElasticsearchIndex = async (params: CreateElasticsearchIndexParams) => {\n const { elasticsearch, plugins, locale, tenant } = params;\n\n const { index } = configurations.es({\n locale,\n tenant\n });\n\n await createIndex({\n client: elasticsearch,\n index,\n type: FormElasticsearchIndexPlugin.type,\n tenant,\n locale,\n plugins,\n onExists: () => {\n console.log(`Elasticsearch index \"${index}\" for the Form Builder already exists.`);\n },\n onError: (ex: Error) => {\n console.error(`Could not create the Form Builder Elasticsearch index \"${index}\".`, ex);\n return ex;\n }\n });\n};\n"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,6BAAA,GAAAD,OAAA;AAEA,IAAAE,eAAA,GAAAF,OAAA;AASO,MAAMG,wBAAwB,GAAG,MAAOC,MAAsC,IAAK;EACtF,MAAM;IAAEC,aAAa;IAAEC,OAAO;IAAEC,MAAM;IAAEC;EAAO,CAAC,GAAGJ,MAAM;EAEzD,MAAM;IAAEK;EAAM,CAAC,GAAGC,8BAAc,CAACC,EAAE,CAAC;IAChCJ,MAAM;IACNC;EACJ,CAAC,CAAC;EAEF,MAAM,IAAAI,6BAAW,EAAC;IACdC,MAAM,EAAER,aAAa;IACrBI,KAAK;IACLK,IAAI,EAAEC,0DAA4B,CAACD,IAAI;IACvCN,MAAM;IACND,MAAM;IACND,OAAO;IACPU,QAAQ,EAAEA,CAAA,KAAM;MACZC,OAAO,CAACC,GAAG,CAAC,wBAAwBT,KAAK,wCAAwC,CAAC;IACtF,CAAC;IACDU,OAAO,EAAGC,EAAS,IAAK;MACpBH,OAAO,CAACI,KAAK,CAAC,0DAA0DZ,KAAK,IAAI,EAAEW,EAAE,CAAC;MACtF,OAAOA,EAAE;IACb;EACJ,CAAC,CAAC;AACN,CAAC;AAACE,OAAA,CAAAnB,wBAAA,GAAAA,wBAAA","ignoreList":[]}
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_filters","_interopRequireDefault","require","_elasticsearchFields","_elasticsearchFields2","_error","_types","_table","_form","_submission","_system","_settings","_system2","_submission2","_settings2","_form2","_tableElasticsearch","_plugins","_elasticsearch","_apiElasticsearch","_indices","_createElasticsearchIndex","_plugins2","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_createIndexTaskPlugin","reservedFields","isReserved","name","includes","WebinyError","createFormBuilderStorageOperations","params","attributes","table","tableName","esTable","esTableName","documentClient","elasticsearch","plugins","userPlugins","values","attrs","PluginsContainer","submissionElasticsearchFields","formElasticsearchFields","dynamoDbValueFilters","elasticsearchIndexPlugins","createTable","createElasticsearchTable","entities","form","createFormEntity","entityName","ENTITIES","FORM","submission","createSubmissionEntity","SUBMISSION","system","createSystemEntity","SYSTEM","settings","createSettingsEntity","SETTINGS","esForm","createElasticsearchEntity","ES_FORM","esSubmission","ES_SUBMISSION","beforeInit","context","db","registry","register","item","app","tags","types","CompressionPlugin","type","ElasticsearchQueryBuilderOperatorPlugin","FormDynamoDbFieldPlugin","FormElasticsearchBodyModifierPlugin","FormElasticsearchFieldPlugin","FormElasticsearchIndexPlugin","FormElasticsearchQueryModifierPlugin","FormElasticsearchSortModifierPlugin","SubmissionElasticsearchBodyModifierPlugin","SubmissionElasticsearchFieldPlugin","SubmissionElasticsearchQueryModifierPlugin","SubmissionElasticsearchSortModifierPlugin","mergeByType","createIndexTaskPlugin","init","i18n","locales","onLocaleBeforeCreate","subscribe","locale","tenant","createElasticsearchIndex","code","getTable","getEsTable","getEntities","createSystemStorageOperations","entity","createSettingsStorageOperations","createFormStorageOperations","esEntity","createSubmissionStorageOperations"],"sources":["index.ts"],"sourcesContent":["import dynamoDbValueFilters from \"@webiny/db-dynamodb/plugins/filters\";\nimport formElasticsearchFields from \"./operations/form/elasticsearchFields\";\nimport submissionElasticsearchFields from \"./operations/submission/elasticsearchFields\";\nimport WebinyError from \"@webiny/error\";\nimport { ENTITIES, FormBuilderStorageOperationsFactory } from \"~/types\";\nimport { createTable } from \"~/definitions/table\";\nimport { createFormEntity } from \"~/definitions/form\";\nimport { createSubmissionEntity } from \"~/definitions/submission\";\nimport { createSystemEntity } from \"~/definitions/system\";\nimport { createSettingsEntity } from \"~/definitions/settings\";\nimport { createSystemStorageOperations } from \"~/operations/system\";\nimport { createSubmissionStorageOperations } from \"~/operations/submission\";\nimport { createSettingsStorageOperations } from \"~/operations/settings\";\nimport { createFormStorageOperations } from \"~/operations/form\";\nimport { createElasticsearchTable } from \"~/definitions/tableElasticsearch\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { createElasticsearchEntity } from \"~/definitions/elasticsearch\";\nimport {\n CompressionPlugin,\n ElasticsearchQueryBuilderOperatorPlugin\n} from \"@webiny/api-elasticsearch\";\nimport { elasticsearchIndexPlugins } from \"~/elasticsearch/indices\";\nimport { createElasticsearchIndex } from \"~/elasticsearch/createElasticsearchIndex\";\nimport { FormBuilderContext } from \"@webiny/api-form-builder/types\";\nimport {\n FormDynamoDbFieldPlugin,\n FormElasticsearchBodyModifierPlugin,\n FormElasticsearchFieldPlugin,\n FormElasticsearchIndexPlugin,\n FormElasticsearchQueryModifierPlugin,\n FormElasticsearchSortModifierPlugin,\n SubmissionElasticsearchBodyModifierPlugin,\n SubmissionElasticsearchFieldPlugin,\n SubmissionElasticsearchQueryModifierPlugin,\n SubmissionElasticsearchSortModifierPlugin\n} from \"~/plugins\";\nimport { createIndexTaskPlugin } from \"~/tasks/createIndexTaskPlugin\";\n\nconst reservedFields = [\"PK\", \"SK\", \"index\", \"data\", \"TYPE\", \"__type\", \"GSI1_PK\", \"GSI1_SK\"];\n\nconst isReserved = (name: string): void => {\n if (reservedFields.includes(name) === false) {\n return;\n }\n throw new WebinyError(`Attribute name \"${name}\" is not allowed.`, \"ATTRIBUTE_NOT_ALLOWED\", {\n name\n });\n};\n\nexport * from \"./plugins\";\n\nexport const createFormBuilderStorageOperations: FormBuilderStorageOperationsFactory = params => {\n const {\n attributes,\n table: tableName,\n esTable: esTableName,\n documentClient,\n elasticsearch,\n plugins: userPlugins\n } = params;\n\n if (attributes) {\n Object.values(attributes).forEach(attrs => {\n Object.keys(attrs).forEach(isReserved);\n });\n }\n\n const plugins = new PluginsContainer([\n /**\n * User defined plugins.\n */\n userPlugins || [],\n /**\n * Elasticsearch field definitions for the submission record.\n */\n submissionElasticsearchFields(),\n /**\n * Elasticsearch field definitions for the form record.\n */\n formElasticsearchFields(),\n /**\n * DynamoDB filter plugins for the where conditions.\n */\n dynamoDbValueFilters(),\n /**\n * Built-in Elasticsearch index plugins\n */\n elasticsearchIndexPlugins()\n ]);\n\n const table = createTable({\n tableName,\n documentClient\n });\n\n const esTable = createElasticsearchTable({\n tableName: esTableName,\n documentClient\n });\n\n const entities = {\n /**\n * Regular entities.\n */\n form: createFormEntity({\n entityName: ENTITIES.FORM,\n table,\n attributes: attributes ? attributes[ENTITIES.FORM] : {}\n }),\n submission: createSubmissionEntity({\n entityName: ENTITIES.SUBMISSION,\n table,\n attributes: attributes ? attributes[ENTITIES.SUBMISSION] : {}\n }),\n system: createSystemEntity({\n entityName: ENTITIES.SYSTEM,\n table,\n attributes: attributes ? attributes[ENTITIES.SYSTEM] : {}\n }),\n settings: createSettingsEntity({\n entityName: ENTITIES.SETTINGS,\n table,\n attributes: attributes ? attributes[ENTITIES.SETTINGS] : {}\n }),\n /**\n * Elasticsearch entities.\n */\n esForm: createElasticsearchEntity({\n entityName: ENTITIES.ES_FORM,\n table: esTable,\n attributes: attributes ? attributes[ENTITIES.ES_FORM] : {}\n }),\n esSubmission: createElasticsearchEntity({\n entityName: ENTITIES.ES_SUBMISSION,\n table: esTable,\n attributes: attributes ? attributes[ENTITIES.ES_SUBMISSION] : {}\n })\n };\n\n return {\n beforeInit: async (context: FormBuilderContext) => {\n context.db.registry.register({\n item: entities.form,\n app: \"fb\",\n tags: [\"regular\", \"form\", entities.form.name]\n });\n context.db.registry.register({\n item: entities.esForm,\n app: \"fb\",\n tags: [\"es\", \"form\", entities.esForm.name]\n });\n context.db.registry.register({\n item: entities.submission,\n app: \"fb\",\n tags: [\"regular\", \"form-submission\", entities.submission.name]\n });\n context.db.registry.register({\n item: entities.esSubmission,\n app: \"fb\",\n tags: [\"es\", \"form-submission\", entities.esSubmission.name]\n });\n\n const types: string[] = [\n // Elasticsearch\n CompressionPlugin.type,\n ElasticsearchQueryBuilderOperatorPlugin.type,\n // Form Builder\n FormDynamoDbFieldPlugin.type,\n FormElasticsearchBodyModifierPlugin.type,\n FormElasticsearchFieldPlugin.type,\n FormElasticsearchIndexPlugin.type,\n FormElasticsearchQueryModifierPlugin.type,\n FormElasticsearchSortModifierPlugin.type,\n SubmissionElasticsearchBodyModifierPlugin.type,\n SubmissionElasticsearchFieldPlugin.type,\n SubmissionElasticsearchQueryModifierPlugin.type,\n SubmissionElasticsearchSortModifierPlugin.type\n ];\n for (const type of types) {\n plugins.mergeByType(context.plugins, type);\n }\n context.plugins.register([createIndexTaskPlugin(), elasticsearchIndexPlugins()]);\n },\n init: async (context: FormBuilderContext) => {\n context.i18n.locales.onLocaleBeforeCreate.subscribe(async ({ locale, tenant }) => {\n await createElasticsearchIndex({\n elasticsearch,\n plugins,\n tenant,\n locale: locale.code\n });\n });\n },\n getTable: () => table,\n getEsTable: () => esTable,\n getEntities: () => entities,\n ...createSystemStorageOperations({\n table,\n entity: entities.system\n }),\n ...createSettingsStorageOperations({\n table,\n entity: entities.settings\n }),\n ...createFormStorageOperations({\n elasticsearch,\n table,\n entity: entities.form,\n esEntity: entities.esForm,\n plugins\n }),\n ...createSubmissionStorageOperations({\n elasticsearch,\n table,\n entity: entities.submission,\n esEntity: entities.esSubmission,\n plugins\n })\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_filters","_interopRequireDefault","require","_elasticsearchFields","_elasticsearchFields2","_error","_types","_table","_form","_submission","_system","_settings","_system2","_submission2","_settings2","_form2","_tableElasticsearch","_plugins","_elasticsearch","_apiElasticsearch","_indices","_createElasticsearchIndex","_plugins2","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_createIndexTaskPlugin","reservedFields","isReserved","name","includes","WebinyError","createFormBuilderStorageOperations","params","attributes","table","tableName","esTable","esTableName","documentClient","elasticsearch","plugins","userPlugins","values","attrs","PluginsContainer","submissionElasticsearchFields","formElasticsearchFields","dynamoDbValueFilters","elasticsearchIndexPlugins","createTable","createElasticsearchTable","entities","form","createFormEntity","entityName","ENTITIES","FORM","submission","createSubmissionEntity","SUBMISSION","system","createSystemEntity","SYSTEM","settings","createSettingsEntity","SETTINGS","esForm","createElasticsearchEntity","ES_FORM","esSubmission","ES_SUBMISSION","beforeInit","context","db","registry","register","item","app","tags","types","CompressionPlugin","type","ElasticsearchQueryBuilderOperatorPlugin","FormDynamoDbFieldPlugin","FormElasticsearchBodyModifierPlugin","FormElasticsearchFieldPlugin","FormElasticsearchIndexPlugin","FormElasticsearchQueryModifierPlugin","FormElasticsearchSortModifierPlugin","SubmissionElasticsearchBodyModifierPlugin","SubmissionElasticsearchFieldPlugin","SubmissionElasticsearchQueryModifierPlugin","SubmissionElasticsearchSortModifierPlugin","mergeByType","createIndexTaskPlugin","init","i18n","locales","onLocaleBeforeCreate","subscribe","locale","tenant","createElasticsearchIndex","code","getTable","getEsTable","getEntities","createSystemStorageOperations","entity","createSettingsStorageOperations","createFormStorageOperations","esEntity","createSubmissionStorageOperations"],"sources":["index.ts"],"sourcesContent":["import dynamoDbValueFilters from \"@webiny/db-dynamodb/plugins/filters\";\nimport formElasticsearchFields from \"./operations/form/elasticsearchFields\";\nimport submissionElasticsearchFields from \"./operations/submission/elasticsearchFields\";\nimport WebinyError from \"@webiny/error\";\nimport { ENTITIES, FormBuilderStorageOperationsFactory } from \"~/types\";\nimport { createTable } from \"~/definitions/table\";\nimport { createFormEntity } from \"~/definitions/form\";\nimport { createSubmissionEntity } from \"~/definitions/submission\";\nimport { createSystemEntity } from \"~/definitions/system\";\nimport { createSettingsEntity } from \"~/definitions/settings\";\nimport { createSystemStorageOperations } from \"~/operations/system\";\nimport { createSubmissionStorageOperations } from \"~/operations/submission\";\nimport { createSettingsStorageOperations } from \"~/operations/settings\";\nimport { createFormStorageOperations } from \"~/operations/form\";\nimport { createElasticsearchTable } from \"~/definitions/tableElasticsearch\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { createElasticsearchEntity } from \"~/definitions/elasticsearch\";\nimport {\n CompressionPlugin,\n ElasticsearchQueryBuilderOperatorPlugin\n} from \"@webiny/api-elasticsearch\";\nimport { elasticsearchIndexPlugins } from \"~/elasticsearch/indices\";\nimport { createElasticsearchIndex } from \"~/elasticsearch/createElasticsearchIndex\";\nimport { FormBuilderContext } from \"@webiny/api-form-builder/types\";\nimport {\n FormDynamoDbFieldPlugin,\n FormElasticsearchBodyModifierPlugin,\n FormElasticsearchFieldPlugin,\n FormElasticsearchIndexPlugin,\n FormElasticsearchQueryModifierPlugin,\n FormElasticsearchSortModifierPlugin,\n SubmissionElasticsearchBodyModifierPlugin,\n SubmissionElasticsearchFieldPlugin,\n SubmissionElasticsearchQueryModifierPlugin,\n SubmissionElasticsearchSortModifierPlugin\n} from \"~/plugins\";\nimport { createIndexTaskPlugin } from \"~/tasks/createIndexTaskPlugin\";\n\nconst reservedFields = [\"PK\", \"SK\", \"index\", \"data\", \"TYPE\", \"__type\", \"GSI1_PK\", \"GSI1_SK\"];\n\nconst isReserved = (name: string): void => {\n if (reservedFields.includes(name) === false) {\n return;\n }\n throw new WebinyError(`Attribute name \"${name}\" is not allowed.`, \"ATTRIBUTE_NOT_ALLOWED\", {\n name\n });\n};\n\nexport * from \"./plugins\";\n\nexport const createFormBuilderStorageOperations: FormBuilderStorageOperationsFactory = params => {\n const {\n attributes,\n table: tableName,\n esTable: esTableName,\n documentClient,\n elasticsearch,\n plugins: userPlugins\n } = params;\n\n if (attributes) {\n Object.values(attributes).forEach(attrs => {\n Object.keys(attrs).forEach(isReserved);\n });\n }\n\n const plugins = new PluginsContainer([\n /**\n * User defined plugins.\n */\n userPlugins || [],\n /**\n * Elasticsearch field definitions for the submission record.\n */\n submissionElasticsearchFields(),\n /**\n * Elasticsearch field definitions for the form record.\n */\n formElasticsearchFields(),\n /**\n * DynamoDB filter plugins for the where conditions.\n */\n dynamoDbValueFilters(),\n /**\n * Built-in Elasticsearch index plugins\n */\n elasticsearchIndexPlugins()\n ]);\n\n const table = createTable({\n tableName,\n documentClient\n });\n\n const esTable = createElasticsearchTable({\n tableName: esTableName,\n documentClient\n });\n\n const entities = {\n /**\n * Regular entities.\n */\n form: createFormEntity({\n entityName: ENTITIES.FORM,\n table,\n attributes: attributes ? attributes[ENTITIES.FORM] : {}\n }),\n submission: createSubmissionEntity({\n entityName: ENTITIES.SUBMISSION,\n table,\n attributes: attributes ? attributes[ENTITIES.SUBMISSION] : {}\n }),\n system: createSystemEntity({\n entityName: ENTITIES.SYSTEM,\n table,\n attributes: attributes ? attributes[ENTITIES.SYSTEM] : {}\n }),\n settings: createSettingsEntity({\n entityName: ENTITIES.SETTINGS,\n table,\n attributes: attributes ? attributes[ENTITIES.SETTINGS] : {}\n }),\n /**\n * Elasticsearch entities.\n */\n esForm: createElasticsearchEntity({\n entityName: ENTITIES.ES_FORM,\n table: esTable,\n attributes: attributes ? attributes[ENTITIES.ES_FORM] : {}\n }),\n esSubmission: createElasticsearchEntity({\n entityName: ENTITIES.ES_SUBMISSION,\n table: esTable,\n attributes: attributes ? attributes[ENTITIES.ES_SUBMISSION] : {}\n })\n };\n\n return {\n beforeInit: async (context: FormBuilderContext) => {\n context.db.registry.register({\n item: entities.form,\n app: \"fb\",\n tags: [\"regular\", \"form\", entities.form.name]\n });\n context.db.registry.register({\n item: entities.esForm,\n app: \"fb\",\n tags: [\"es\", \"form\", entities.esForm.name]\n });\n context.db.registry.register({\n item: entities.submission,\n app: \"fb\",\n tags: [\"regular\", \"form-submission\", entities.submission.name]\n });\n context.db.registry.register({\n item: entities.esSubmission,\n app: \"fb\",\n tags: [\"es\", \"form-submission\", entities.esSubmission.name]\n });\n\n const types: string[] = [\n // Elasticsearch\n CompressionPlugin.type,\n ElasticsearchQueryBuilderOperatorPlugin.type,\n // Form Builder\n FormDynamoDbFieldPlugin.type,\n FormElasticsearchBodyModifierPlugin.type,\n FormElasticsearchFieldPlugin.type,\n FormElasticsearchIndexPlugin.type,\n FormElasticsearchQueryModifierPlugin.type,\n FormElasticsearchSortModifierPlugin.type,\n SubmissionElasticsearchBodyModifierPlugin.type,\n SubmissionElasticsearchFieldPlugin.type,\n SubmissionElasticsearchQueryModifierPlugin.type,\n SubmissionElasticsearchSortModifierPlugin.type\n ];\n for (const type of types) {\n plugins.mergeByType(context.plugins, type);\n }\n context.plugins.register([createIndexTaskPlugin(), elasticsearchIndexPlugins()]);\n },\n init: async (context: FormBuilderContext) => {\n context.i18n.locales.onLocaleBeforeCreate.subscribe(async ({ locale, tenant }) => {\n await createElasticsearchIndex({\n elasticsearch,\n plugins,\n tenant,\n locale: locale.code\n });\n });\n },\n getTable: () => table,\n getEsTable: () => esTable,\n getEntities: () => entities,\n ...createSystemStorageOperations({\n table,\n entity: entities.system\n }),\n ...createSettingsStorageOperations({\n table,\n entity: entities.settings\n }),\n ...createFormStorageOperations({\n elasticsearch,\n table,\n entity: entities.form,\n esEntity: entities.esForm,\n plugins\n }),\n ...createSubmissionStorageOperations({\n elasticsearch,\n table,\n entity: entities.submission,\n esEntity: entities.esSubmission,\n plugins\n })\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +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 {\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 { Entity, Table } from \"@webiny/db-dynamodb/toolbox\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\nimport WebinyError from \"@webiny/error\";\nimport { createEntityWriteBatch, getClean, IPutParamsItem, 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 { PluginsContainer } from \"@webiny/plugins\";\nimport { FormBuilderFormCreateKeyParams, FormBuilderFormStorageOperations } from \"~/types\";\nimport { 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":";;;;;;;AAiBA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AACA,IAAAI,eAAA,GAAAJ,OAAA;AACA,IAAAK,OAAA,GAAAL,OAAA;AACA,IAAAM,OAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,KAAA,GAAAP,OAAA;AACA,IAAAQ,MAAA,GAAAR,OAAA;AACA,IAAAS,kBAAA,GAAAT,OAAA;AACA,IAAAU,iBAAA,GAAAV,OAAA;AAuBA,MAAMW,0BAA0B,GAAIC,IAAY,KAAqB;EACjEC,MAAM,EAAE,IAAAC,wCAAqB,EAAC,CAAC;EAC/BC,EAAE,EAAEH,IAAI,CAACG,EAAE;EACXC,SAAS,EAAEJ,IAAI,CAACI,SAAS;EACzBC,OAAO,EAAEL,IAAI,CAACK,OAAO;EACrBC,IAAI,EAAEN,IAAI,CAACM,IAAI;EACfC,IAAI,EAAEP,IAAI,CAACO,IAAI;EACfC,SAAS,EAAER,IAAI,CAACQ,SAAS;EACzBC,WAAW,EAAET,IAAI,CAACS,WAAW;EAC7BC,OAAO,EAAEV,IAAI,CAACU,OAAO;EACrBC,MAAM,EAAEX,IAAI,CAACW,MAAM;EACnBC,MAAM,EAAEZ,IAAI,CAACY,MAAM;EACnBC,SAAS,EAAEb,IAAI,CAACa,SAAS;EACzBC,OAAO,EAAEd,IAAI,CAACc,OAAO;EACrBC,MAAM,EAAEf,IAAI,CAACe,MAAM;EACnBC,MAAM,EAAEhB,IAAI,CAACgB,MAAM;EACnBC,aAAa,EAAEjB,IAAI,CAACiB,aAAa;EACjCC,MAAM,EAAElB,IAAI,CAACkB;AACjB,CAAC,CAAC;AAEK,MAAMC,2BAA2B,GACpCC,MAAyC,IACN;EACnC,MAAM;IAAEC,MAAM;IAAEC,QAAQ;IAAEC,OAAO;IAAEC;EAAc,CAAC,GAAGJ,MAAM;EAE3D,MAAMK,kBAAkB,GAAG,IAAAC,eAAM,EAAC,CAAC;EAEnC,MAAMC,sBAAsB,GAAIP,MAAsC,IAAa;IAC/E,MAAM;MAAEL,MAAM;MAAEC,MAAM;MAAEb,EAAE,EAAEyB;IAAS,CAAC,GAAGR,MAAM;IAE/C,MAAM;MAAEjB;IAAG,CAAC,GAAG,IAAA0B,sBAAe,EAACD,QAAQ,CAAC;IAExC,OAAQ,KAAIb,MAAO,MAAKC,MAAO,SAAQb,EAAG,EAAC;EAC/C,CAAC;EAED,MAAM2B,qBAAqB,GAAIC,KAAkC,IAAa;IAC1E,MAAMrB,OAAO,GACT,OAAOqB,KAAK,KAAK,QAAQ,GAAGC,MAAM,CAACD,KAAK,CAAC,GAAI,IAAAF,sBAAe,EAACE,KAAK,CAAC,CAACrB,OAAkB;IAC1F,OAAQ,OAAM,IAAAuB,cAAO,EAACvB,OAAO,CAAE,EAAC;EACpC,CAAC;EAED,MAAMwB,mBAAmB,GAAGA,CAAA,KAAc;IACtC,OAAO,GAAG;EACd,CAAC;EAED,MAAMC,4BAA4B,GAAGA,CAAA,KAAc;IAC/C,OAAO,IAAI;EACf,CAAC;EAED,MAAMC,cAAc,GAAGA,CAAA,KAAc;IACjC,OAAO,SAAS;EACpB,CAAC;EAED,MAAMC,oBAAoB,GAAGA,CAAA,KAAc;IACvC,OAAO,gBAAgB;EAC3B,CAAC;EAED,MAAMC,6BAA6B,GAAGA,CAAA,KAAc;IAChD,OAAO,yBAAyB;EACpC,CAAC;EAED,MAAMC,UAAU,GAAG,MACfnB,MAAoD,IAClC;IAClB,MAAM;MAAEpB;IAAK,CAAC,GAAGoB,MAAM;IAEvB,MAAMoB,YAAY,GAAG;MACjBC,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAEZ,qBAAqB,CAAC9B,IAAI,CAACG,EAAE;IACrC,CAAC;IACD,MAAMwC,UAAU,GAAG;MACfF,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAER,mBAAmB,CAAC;IAC5B,CAAC;IAED,MAAMU,UAAU,GAAG,IAAAC,kCAAsB,EAAC;MACtCxB,MAAM;MACNyB,GAAG,EAAE,CACD;QACI,GAAG9C,IAAI;QACP+C,IAAI,EAAEX,cAAc,CAAC,CAAC;QACtB,GAAGI;MACP,CAAC,EACD;QACI,GAAGxC,IAAI;QACP+C,IAAI,EAAEV,oBAAoB,CAAC,CAAC;QAC5B,GAAGM;MACP,CAAC;IAET,CAAC,CAAC;IAEF,IAAI;MACA,MAAMC,UAAU,CAACI,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,gDAAgD,EAC9DF,EAAE,CAACG,IAAI,IAAI,mBAAmB,EAC9B;QACIZ,YAAY;QACZG,UAAU;QACV3C;MACJ,CACJ,CAAC;IACL;IACA,IAAI;MACA,MAAM;QAAEqD;MAAM,CAAC,GAAGC,8BAAc,CAACC,EAAE,CAAC;QAChCxC,MAAM,EAAEf,IAAI,CAACe,MAAM;QACnBC,MAAM,EAAEhB,IAAI,CAACgB;MACjB,CAAC,CAAC;MACF,MAAM,IAAA8B,eAAG,EAAC;QACNzB,MAAM,EAAEC,QAAQ;QAChBkC,IAAI,EAAE;UACFH,KAAK;UACLI,IAAI,EAAE1D,0BAA0B,CAACC,IAAI,CAAC;UACtC+C,IAAI,EAAEX,cAAc,CAAC,CAAC;UACtB,GAAGO;QACP;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOM,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,sDAAsD,EACpEF,EAAE,CAACG,IAAI,IAAI,mBAAmB,EAC9B;QACIT,UAAU;QACV3C;MACJ,CACJ,CAAC;IACL;IACA,OAAOA,IAAI;EACf,CAAC;EAED,MAAM0D,cAAc,GAAG,MACnBtC,MAAwD,IACtC;IAClB,MAAM;MAAEpB,IAAI;MAAE2D,QAAQ;MAAEC;IAAO,CAAC,GAAGxC,MAAM;IAEzC,MAAMoB,YAAY,GAAG;MACjBC,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAEZ,qBAAqB,CAAC9B,IAAI,CAACU,OAAO;IAC1C,CAAC;IAED,MAAMiC,UAAU,GAAG;MACfF,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAER,mBAAmB,CAAC;IAC5B,CAAC;IAED,MAAM2B,WAAW,GAAG,IAAAhB,kCAAsB,EAAC;MACvCxB,MAAM;MACNyB,GAAG,EAAE,CACD;QACI,GAAG9C,IAAI;QACP,GAAGwC,YAAY;QACfO,IAAI,EAAEX,cAAc,CAAC;MACzB,CAAC,EACD;QACI,GAAGpC,IAAI;QACP,GAAG2C,UAAU;QACbI,IAAI,EAAEV,oBAAoB,CAAC;MAC/B,CAAC;IAET,CAAC,CAAC;IAEF,IAAI;MACA,MAAMwB,WAAW,CAACb,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IACN,sEAAsE,EAC1EF,EAAE,CAACG,IAAI,IAAI,wBAAwB,EACnC;QACIZ,YAAY;QACZG,UAAU;QACVgB,QAAQ;QACR3D,IAAI;QACJ4D;MACJ,CACJ,CAAC;IACL;IAEA,IAAI;MACA,MAAM;QAAEP;MAAM,CAAC,GAAGC,8BAAc,CAACC,EAAE,CAAC;QAChCxC,MAAM,EAAEf,IAAI,CAACe,MAAM;QACnBC,MAAM,EAAEhB,IAAI,CAACgB;MACjB,CAAC,CAAC;MACF,MAAM,IAAA8B,eAAG,EAAC;QACNzB,MAAM,EAAEC,QAAQ;QAChBkC,IAAI,EAAE;UACFH,KAAK;UACLI,IAAI,EAAE1D,0BAA0B,CAACC,IAAI,CAAC;UACtC+C,IAAI,EAAEV,oBAAoB,CAAC,CAAC;UAC5B,GAAGM;QACP;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOM,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IACN,uEAAuE,EAC3EF,EAAE,CAACG,IAAI,IAAI,wBAAwB,EACnC;QACIT,UAAU;QACV3C,IAAI;QACJ4D,MAAM;QACND;MACJ,CACJ,CAAC;IACL;IACA,OAAO3D,IAAI;EACf,CAAC;EAED,MAAM8D,UAAU,GAAG,MACf1C,MAAoD,IAClC;IAClB,MAAM;MAAEpB,IAAI;MAAE2D;IAAS,CAAC,GAAGvC,MAAM;IAEjC,MAAMoB,YAAY,GAAG;MACjBC,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAEZ,qBAAqB,CAAC9B,IAAI,CAACG,EAAE;IACrC,CAAC;IACD,MAAMwC,UAAU,GAAG;MACfF,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAER,mBAAmB,CAAC;IAC5B,CAAC;IAED,MAAM;MAAEhB,MAAM;MAAEH,MAAM;MAAEC;IAAO,CAAC,GAAGhB,IAAI;IAEvC,MAAM+D,UAAU,GAAG,MAAMC,OAAO,CAAC;MAC7BC,KAAK,EAAE;QACH/C,MAAM;QACNH,MAAM;QACNC,MAAM;QACN4C,MAAM,EAAE;MACZ;IACJ,CAAC,CAAC;IACF,MAAMM,YAAY,GAAGH,UAAU,GAAGA,UAAU,CAAC5D,EAAE,KAAKH,IAAI,CAACG,EAAE,GAAG,KAAK;IAEnE,MAAM0D,WAAW,GAAG,IAAAhB,kCAAsB,EAAC;MACvCxB,MAAM;MACNyB,GAAG,EAAE,CACD;QACI,GAAG9C,IAAI;QACP+C,IAAI,EAAEX,cAAc,CAAC,CAAC;QACtB,GAAGI;MACP,CAAC;IAET,CAAC,CAAC;IAEF,IAAI0B,YAAY,EAAE;MACdL,WAAW,CAACf,GAAG,CAAC;QACZ,GAAG9C,IAAI;QACP+C,IAAI,EAAEV,oBAAoB,CAAC,CAAC;QAC5B,GAAGM;MACP,CAAC,CAAC;IACN;IACA,IAAI;MACA,MAAMkB,WAAW,CAACb,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,kDAAkD,EAChEF,EAAE,CAACG,IAAI,IAAI,mBAAmB,EAC9B;QACIZ,YAAY;QACZG,UAAU;QACVgB,QAAQ;QACR3D,IAAI;QACJ+D;MACJ,CACJ,CAAC;IACL;IACA;AACR;AACA;IACQ,IAAI,CAACG,YAAY,EAAE;MACf,OAAOlE,IAAI;IACf;IAEA,IAAI;MACA,MAAM;QAAEqD;MAAM,CAAC,GAAGC,8BAAc,CAACC,EAAE,CAAC;QAChCxC,MAAM,EAAEf,IAAI,CAACe,MAAM;QACnBC,MAAM,EAAEhB,IAAI,CAACgB;MACjB,CAAC,CAAC;MACF,MAAM,IAAA8B,eAAG,EAAC;QACNzB,MAAM,EAAEC,QAAQ;QAChBkC,IAAI,EAAE;UACFH,KAAK;UACLI,IAAI,EAAE1D,0BAA0B,CAACC,IAAI,CAAC;UACtC+C,IAAI,EAAEV,oBAAoB,CAAC,CAAC;UAC5B,GAAGM;QACP;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOM,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,wDAAwD,EACtEF,EAAE,CAACG,IAAI,IAAI,mBAAmB,EAC9B;QACIT,UAAU;QACV3C,IAAI;QACJ+D,UAAU;QACVJ;MACJ,CACJ,CAAC;IACL;IACA,OAAO3D,IAAI;EACf,CAAC;EAED,MAAMgE,OAAO,GAAG,MAAO5C,MAAiD,IAAK;IACzE,MAAM;MAAE6C;IAAM,CAAC,GAAG7C,MAAM;IACxB,MAAM;MAAEjB,EAAE;MAAEe,MAAM;MAAE0C,MAAM;MAAEpD,SAAS;MAAEE,OAAO;MAAEK,MAAM;MAAEC;IAAO,CAAC,GAAGiD,KAAK;IACxE,IAAIL,MAAM,IAAIpD,SAAS,EAAE;MACrB,MAAM,IAAI0C,cAAW,CAAC,+CAA+C,CAAC;IAC1E;IACA,IAAIiB,OAAe;IACnB,IAAIP,MAAM,EAAE;MACRO,OAAO,GAAGjC,mBAAmB,CAAC,CAAC;IACnC,CAAC,MAAM,IAAI1B,SAAS,IAAI,CAACE,OAAO,EAAE;MAC9B;AACZ;AACA;MACYyD,OAAO,GAAGhC,4BAA4B,CAAC,CAAC;IAC5C,CAAC,MAAM,IAAIhC,EAAE,IAAIO,OAAO,EAAE;MACtByD,OAAO,GAAGrC,qBAAqB,CAACpB,OAAO,IAAIP,EAAE,CAAC;IAClD,CAAC,MAAM;MACH,MAAM,IAAI+C,cAAW,CACjB,yCAAyC,EACzC,yBAAyB,EACzB;QACIe;MACJ,CACJ,CAAC;IACL;IAEA,MAAMG,IAAI,GAAG;MACT3B,EAAE,EAAEd,sBAAsB,CAAC;QACvBZ,MAAM;QACNC,MAAM;QACNb,EAAE,EAAGe,MAAM,IAAIf;MACnB,CAAC,CAAC;MACFuC,EAAE,EAAEyB;IACR,CAAC;IAED,IAAI;MACA,OAAO,MAAM,IAAAE,oBAAQ,EAAS;QAC1BhD,MAAM;QACN+C;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOnB,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,6BAA6B,EAC3CF,EAAE,CAACG,IAAI,IAAI,gBAAgB,EAC3B;QACIgB;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAME,SAAS,GAAG,MACdlD,MAAmD,IACM;IACzD,MAAM;MAAEmD,IAAI;MAAEC,KAAK;MAAEP,KAAK;MAAEQ;IAAM,CAAC,GAAGrD,MAAM;IAE5C,MAAMsD,IAAI,GAAG,IAAAC,0CAAuB,EAAC;MACjCpD,OAAO;MACPgD,IAAI;MACJC,KAAK,EAAEA,KAAK,GAAG,CAAC;MAChBP,KAAK;MACLQ,KAAK,EAAE,IAAAG,8BAAY,EAACH,KAAK;IAC7B,CAAC,CAAC;IAEF,MAAMI,QAAQ,GAAGvB,8BAAc,CAACC,EAAE,CAAC;MAC/BxC,MAAM,EAAEkD,KAAK,CAAClD,MAAM;MACpBC,MAAM,EAAEiD,KAAK,CAACjD;IAClB,CAAC,CAAC;IAEF,MAAM8D,KAAK,GAAG;MACV,GAAGD,QAAQ;MACXH;IACJ,CAAC;IAED,IAAIK,QAA6C;IACjD,IAAI;MACAA,QAAQ,GAAG,MAAMvD,aAAa,CAACwD,MAAM,CAACF,KAAK,CAAC;IAChD,CAAC,CAAC,OAAO7B,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,mBAAmB,EACjCF,EAAE,CAACG,IAAI,IAAI,kBAAkB,EAC7B;QACIa,KAAK;QACLa;MACJ,CACJ,CAAC;IACL;IAEA,MAAM;MAAEG,IAAI;MAAEC;IAAM,CAAC,GAAGH,QAAQ,CAACL,IAAI,CAACO,IAAI;IAC1C,MAAME,KAAK,GAAGF,IAAI,CAACG,GAAG,CAAC5B,IAAI,IAAIA,IAAI,CAAC6B,OAAO,CAAC;IAE5C,MAAMC,YAAY,GAAGH,KAAK,CAACI,MAAM,GAAGf,KAAK;IACzC,IAAIc,YAAY,EAAE;MACd;AACZ;AACA;MACYH,KAAK,CAACK,GAAG,CAAC,CAAC;IACf;IACA;AACR;AACA;AACA;;IAEQ,MAAMC,IAAI,GAAG;MACTH,YAAY;MACZI,UAAU,EAAER,KAAK,CAACnD,KAAK;MACvB4D,MAAM,EAAER,KAAK,CAACI,MAAM,GAAG,CAAC,GAAG,IAAAK,8BAAY,EAACX,IAAI,CAACE,KAAK,CAACI,MAAM,GAAG,CAAC,CAAC,CAAChB,IAAI,CAAC,IAAI,IAAI,GAAG;IACnF,CAAC;IAED,OAAO;MACHY,KAAK;MACLM;IACJ,CAAC;EACL,CAAC;EAED,MAAMI,iBAAiB,GAAG,MACtBzE,MAA2D,IACvC;IACpB,MAAM;MAAE6C,KAAK,EAAE6B,YAAY;MAAEvB;IAAK,CAAC,GAAGnD,MAAM;IAC5C,MAAM;MAAEjB,EAAE;MAAEe,MAAM;MAAEH,MAAM;MAAEC;IAAO,CAAC,GAAG8E,YAAY;IACnD,MAAMC,cAA8B,GAAG;MACnC1E,MAAM;MACN2E,YAAY,EAAErE,sBAAsB,CAAC;QACjCZ,MAAM;QACNC,MAAM;QACNb,EAAE,EAAGA,EAAE,IAAIe;MACf,CAAC,CAAC;MACF+E,OAAO,EAAE;QACLC,UAAU,EAAE;MAChB;IACJ,CAAC;IAED,IAAIf,KAAe,GAAG,EAAE;IACxB,IAAI;MACAA,KAAK,GAAG,MAAM,IAAAgB,eAAQ,EAASJ,cAAc,CAAC;IAClD,CAAC,CAAC,OAAO9C,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,wCAAwC,EACtDF,EAAE,CAACG,IAAI,IAAI,mBAAmB,EAC9B;QACI4C,YAAY,EAAED,cAAc,CAACC,YAAY;QACzCC,OAAO,EAAEF,cAAc,CAACE;MAC5B,CACJ,CAAC;IACL;IACA,MAAMhC,KAAwE,GAAG;MAC7E,GAAG6B,YAAY;MACf3F,EAAE,EAAEiG,SAAS;MACblF,MAAM,EAAEkF;IACZ,CAAC;IACD,MAAMC,aAAa,GAAG,IAAAC,mBAAW,EAAC;MAC9B/E,OAAO;MACP4D,KAAK;MACLlB,KAAK;MACLvC,MAAM,EAAED;IACZ,CAAC,CAAC;IACF,IAAI,CAAC8C,IAAI,IAAIA,IAAI,CAACgB,MAAM,KAAK,CAAC,EAAE;MAC5B,OAAOc,aAAa;IACxB;IACA,OAAO,IAAAE,eAAS,EAAC;MACbpB,KAAK,EAAEkB,aAAa;MACpB9B,IAAI;MACJ7C,MAAM,EAAED;IACZ,CAAC,CAAC;EACN,CAAC;EAED,MAAM+E,UAAU,GAAG,MACfpF,MAAoD,IAClC;IAClB,MAAM;MAAEpB;IAAK,CAAC,GAAGoB,MAAM;IACvB,IAAI+D,KAAY;IAChB;AACR;AACA;IACQ,MAAMY,cAAc,GAAG;MACnB1E,MAAM;MACN2E,YAAY,EAAErE,sBAAsB,CAAC3B,IAAI,CAAC;MAC1CiG,OAAO,EAAE;QACLQ,GAAG,EAAE;MACT;IACJ,CAAC;IACD,IAAI;MACAtB,KAAK,GAAG,MAAM,IAAAgB,eAAQ,EAAWJ,cAAc,CAAC;IACpD,CAAC,CAAC,OAAO9C,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,wDAAwD,EACtEF,EAAE,CAACG,IAAI,IAAI,kCAAkC,EAC7C;QACI4C,YAAY,EAAED,cAAc,CAACC,YAAY;QACzCC,OAAO,EAAEF,cAAc,CAACE;MAC5B,CACJ,CAAC;IACL;IAEA,MAAMS,WAAW,GAAG,IAAA7D,kCAAsB,EAAC;MACvCxB,MAAM;MACNsF,MAAM,EAAExB,KAAK,CAACC,GAAG,CAAC5B,IAAI,IAAI;QACtB,OAAO;UACHf,EAAE,EAAEe,IAAI,CAACf,EAAE;UACXC,EAAE,EAAEc,IAAI,CAACd;QACb,CAAC;MACL,CAAC;IACL,CAAC,CAAC;IAEF,IAAI;MACA,MAAMgE,WAAW,CAAC1D,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,6CAA6C,EAC3DF,EAAE,CAACG,IAAI,IAAI,mCACf,CAAC;IACL;IAEA,MAAMT,UAAU,GAAG;MACfF,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAER,mBAAmB,CAAC;IAC5B,CAAC;IACD,MAAM0E,aAAa,GAAG,IAAA/D,kCAAsB,EAAC;MACzCxB,MAAM,EAAEC,QAAQ;MAChBqF,MAAM,EAAE,CAAChE,UAAU;IACvB,CAAC,CAAC;IAEF,IAAI;MACA,MAAMiE,aAAa,CAAC5D,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,yDAAyD,EACvEF,EAAE,CAACG,IAAI,IAAI,mBAAmB,EAC9B;QACIT;MACJ,CACJ,CAAC;IACL;IACA,OAAO3C,IAAI;EACf,CAAC;EACD;AACJ;AACA;AACA;AACA;AACA;EACI,MAAM6G,kBAAkB,GAAG,MACvBzF,MAA4D,IAC1C;IAClB,MAAM;MAAEpB,IAAI;MAAE8G,SAAS;MAAEC;IAAS,CAAC,GAAG3F,MAAM;IAE5C,MAAMoB,YAAY,GAAG;MACjBC,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAEZ,qBAAqB,CAAC9B,IAAI,CAACG,EAAE;IACrC,CAAC;IAED,MAAMwC,UAAU,GAAG;MACfF,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAER,mBAAmB,CAAC;IAC5B,CAAC;IAED,MAAM6B,UAAU,GAAG+C,SAAS,CAAC,CAAC,CAAC;IAC/B,MAAME,mBAAmB,GAAGF,SAAS,CAACG,IAAI,CAACC,GAAG,IAAIA,GAAG,CAAC1G,SAAS,KAAK,IAAI,CAAC;IAEzE,MAAM2G,QAAQ,GAAGpD,UAAU,GAAGA,UAAU,CAAC5D,EAAE,KAAKH,IAAI,CAACG,EAAE,GAAG,KAAK;IAC/D,MAAMiH,iBAAiB,GAAGJ,mBAAmB,GAAGA,mBAAmB,CAAC7G,EAAE,KAAKH,IAAI,CAACG,EAAE,GAAG,KAAK;IAE1F,MAAM0D,WAAW,GAAG,IAAAhB,kCAAsB,EAAC;MACvCxB,MAAM;MACNsF,MAAM,EAAE,CAACnE,YAAY;IACzB,CAAC,CAAC;IAEF,IAAI6E,UAAsC,GAAGjB,SAAS;IAEtD,IAAIe,QAAQ,IAAIC,iBAAiB,EAAE;MAC/B;AACZ;AACA;MACY,IAAIA,iBAAiB,EAAE;QACnB,MAAME,uBAAuB,GAAGR,SAAS,CACpCS,MAAM,CAACC,CAAC,IAAI,CAAC,CAACA,CAAC,CAAC/G,WAAW,IAAI+G,CAAC,CAAC9G,OAAO,KAAKV,IAAI,CAACU,OAAO,CAAC,CAC1D6D,IAAI,CAAC,CAACkD,CAAC,EAAEC,CAAC,KAAK;UACZ,OACI,IAAIC,IAAI,CAACD,CAAC,CAACjH,WAAqB,CAAC,CAACmH,OAAO,CAAC,CAAC,GAC3C,IAAID,IAAI,CAACF,CAAC,CAAChH,WAAqB,CAAC,CAACmH,OAAO,CAAC,CAAC;QAEnD,CAAC,CAAC,CACDC,KAAK,CAAC,CAAC;QACZ,IAAIP,uBAAuB,EAAE;UACzBzD,WAAW,CAACf,GAAG,CAAC;YACZ,GAAGwE,uBAAuB;YAC1B7E,EAAE,EAAEd,sBAAsB,CAAC2F,uBAAuB,CAAC;YACnD5E,EAAE,EAAEP,4BAA4B,CAAC,CAAC;YAClCY,IAAI,EAAET,6BAA6B,CAAC;UACxC,CAAC,CAAC;QACN,CAAC,MAAM;UACHuB,WAAW,CAAC8C,MAAM,CAAC;YACflE,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;YAChC0C,EAAE,EAAEP,4BAA4B,CAAC;UACrC,CAAC,CAAC;QACN;MACJ;MACA;AACZ;AACA;MACY,IAAIgF,QAAQ,IAAIJ,QAAQ,EAAE;QACtBlD,WAAW,CAACf,GAAG,CAAC;UACZ,GAAGiE,QAAQ;UACX,GAAGpE,UAAU;UACbI,IAAI,EAAEV,oBAAoB,CAAC;QAC/B,CAAC,CAAC;QAEF,MAAM;UAAEgB;QAAM,CAAC,GAAGC,8BAAc,CAACC,EAAE,CAAC;UAChCxC,MAAM,EAAEgG,QAAQ,CAAChG,MAAM;UACvBC,MAAM,EAAE+F,QAAQ,CAAC/F;QACrB,CAAC,CAAC;QAEFqG,UAAU,GAAG;UACThE,KAAK;UACL,GAAGV,UAAU;UACbc,IAAI,EAAE1D,0BAA0B,CAACgH,QAAQ;QAC7C,CAAC;MACL;IACJ;IACA;AACR;AACA;IACQ,IAAI;MACA,MAAMlD,WAAW,CAACb,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,oDAAoD,EAClEF,EAAE,CAACG,IAAI,IAAI,4BAA4B,EACvC;QACIpD,IAAI;QACJ+D,UAAU;QACVvB,YAAY;QACZG;MACJ,CACJ,CAAC;IACL;IACA;AACR;AACA;IACQ,IAAI,CAAC0E,UAAU,EAAE;MACb,OAAOrH,IAAI;IACf;IACA,IAAI;MACA,MAAM,IAAA8C,eAAG,EAAC;QACNzB,MAAM,EAAEC,QAAQ;QAChBkC,IAAI,EAAE6D;MACV,CAAC,CAAC;MACF,OAAOrH,IAAI;IACf,CAAC,CAAC,OAAOiD,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,wDAAwD,EACtEF,EAAE,CAACG,IAAI,IAAI,4BAA4B,EACvC;QACIpD,IAAI;QACJ+D,UAAU;QACVvB,YAAY;QACZG;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;;EAED;AACJ;AACA;AACA;AACA;AACA;AACA;EACI,MAAMmF,WAAW,GAAG,MAChB1G,MAAqD,IACnC;IAClB,MAAM;MAAEpB,IAAI;MAAE2D;IAAS,CAAC,GAAGvC,MAAM;IAEjC,MAAMoB,YAAY,GAAG;MACjBC,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAEZ,qBAAqB,CAAC9B,IAAI,CAACU,OAAO;IAC1C,CAAC;IAED,MAAMiC,UAAU,GAAG;MACfF,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAER,mBAAmB,CAAC;IAC5B,CAAC;IAED,MAAM6F,mBAAmB,GAAG;MACxBtF,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAEP,4BAA4B,CAAC;IACrC,CAAC;IAED,MAAM;MAAEnB,MAAM;MAAED,MAAM;MAAEG;IAAO,CAAC,GAAGlB,IAAI;IAEvC,MAAM+D,UAAU,GAAG,MAAMC,OAAO,CAAC;MAC7BC,KAAK,EAAE;QACH/C,MAAM;QACNH,MAAM;QACNC,MAAM;QACN4C,MAAM,EAAE;MACZ;IACJ,CAAC,CAAC;IAEF,MAAMM,YAAY,GAAGH,UAAU,GAAGA,UAAU,CAAC5D,EAAE,KAAKH,IAAI,CAACG,EAAE,GAAG,KAAK;IACnE;AACR;AACA;IACQ,MAAM0D,WAAW,GAAG,IAAAhB,kCAAsB,EAAC;MACvCxB,MAAM;MACNyB,GAAG,EAAE,CACD;QACI,GAAG9C,IAAI;QACP,GAAGwC,YAAY;QACfO,IAAI,EAAEX,cAAc,CAAC;MACzB,CAAC,EACD;QACI,GAAGpC,IAAI;QACP,GAAG+H,mBAAmB;QACtBhF,IAAI,EAAET,6BAA6B,CAAC;MACxC,CAAC;IAET,CAAC,CAAC;;IAEF;AACR;AACA;IACQ,IAAI4B,YAAY,EAAE;MACdL,WAAW,CAACf,GAAG,CAAC;QACZ,GAAG9C,IAAI;QACP,GAAG2C,UAAU;QACbI,IAAI,EAAEV,oBAAoB,CAAC;MAC/B,CAAC,CAAC;IACN;IAEA,IAAI;MACA,MAAMwB,WAAW,CAACb,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,yBAAyB,EACvCF,EAAE,CAACG,IAAI,IAAI,oBAAoB,EAC/B;QACIpD,IAAI;QACJ2D,QAAQ;QACRI,UAAU;QACVvB,YAAY;QACZG,UAAU;QACVoF;MACJ,CACJ,CAAC;IACL;IACA,IAAI,CAAC7D,YAAY,EAAE;MACf,OAAOlE,IAAI;IACf;IACA,MAAM;MAAEqD;IAAM,CAAC,GAAGC,8BAAc,CAACC,EAAE,CAAC;MAChCxC,MAAM,EAAEf,IAAI,CAACe,MAAM;MACnBC,MAAM,EAAEhB,IAAI,CAACgB;IACjB,CAAC,CAAC;IACF,MAAMgH,MAAM,GAAGjI,0BAA0B,CAACC,IAAI,CAAC;IAC/C,IAAI;MACA,MAAM,IAAA8C,eAAG,EAAC;QACNzB,MAAM,EAAEC,QAAQ;QAChBkC,IAAI,EAAE;UACF,GAAGb,UAAU;UACbU,KAAK;UACLN,IAAI,EAAEV,oBAAoB,CAAC,CAAC;UAC5BoB,IAAI,EAAEuE;QACV;MACJ,CAAC,CAAC;MACF,OAAOhI,IAAI;IACf,CAAC,CAAC,OAAOiD,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,8CAA8C,EAC5DF,EAAE,CAACG,IAAI,IAAI,oBAAoB,EAC/B;QACIpD,IAAI;QACJ2D,QAAQ;QACRI,UAAU;QACVvB,YAAY;QACZG,UAAU;QACVoF;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;;EAED;AACJ;AACA;AACA;AACA;AACA;EACI,MAAME,aAAa,GAAG,MAClB7G,MAAuD,IACrC;IAClB,MAAM;MAAEpB,IAAI;MAAE2D;IAAS,CAAC,GAAGvC,MAAM;IAEjC,MAAMoB,YAAY,GAAG;MACjBC,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAEZ,qBAAqB,CAAC9B,IAAI,CAACU,OAAO;IAC1C,CAAC;IAED,MAAMiC,UAAU,GAAG;MACfF,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAER,mBAAmB,CAAC;IAC5B,CAAC;IAED,MAAM6F,mBAAmB,GAAG;MACxBtF,EAAE,EAAEd,sBAAsB,CAAC3B,IAAI,CAAC;MAChC0C,EAAE,EAAEP,4BAA4B,CAAC;IACrC,CAAC;IAED,MAAM;MAAEjB,MAAM;MAAEH,MAAM;MAAEC;IAAO,CAAC,GAAGhB,IAAI;IAEvC,MAAM+D,UAAU,GAAG,MAAMC,OAAO,CAAC;MAC7BC,KAAK,EAAE;QACH/C,MAAM;QACNH,MAAM;QACNC,MAAM;QACN4C,MAAM,EAAE;MACZ;IACJ,CAAC,CAAC;IAEF,MAAMoD,mBAAmB,GAAG,MAAMhD,OAAO,CAAC;MACtCC,KAAK,EAAE;QACH/C,MAAM;QACNH,MAAM;QACNC,MAAM;QACNR,SAAS,EAAE;MACf;IACJ,CAAC,CAAC;IAEF,MAAM2G,QAAQ,GAAGpD,UAAU,GAAGA,UAAU,CAAC5D,EAAE,KAAKH,IAAI,CAACG,EAAE,GAAG,KAAK;IAC/D,MAAMiH,iBAAiB,GAAGJ,mBAAmB,GAAGA,mBAAmB,CAAC7G,EAAE,KAAKH,IAAI,CAACG,EAAE,GAAG,KAAK;IAE1F,MAAM0D,WAAW,GAAG,IAAAhB,kCAAsB,EAAC;MACvCxB,MAAM;MACNyB,GAAG,EAAE,CACD;QACI,GAAG9C,IAAI;QACP,GAAGwC,YAAY;QACfO,IAAI,EAAEX,cAAc,CAAC;MACzB,CAAC;IAET,CAAC,CAAC;IAEF,IAAI4F,MAAiC,GAAG5B,SAAS;IACjD,IAAIe,QAAQ,EAAE;MACVa,MAAM,GAAGjI,0BAA0B,CAACC,IAAI,CAAC;IAC7C;IACA;AACR;AACA;AACA;IACQ,IAAIoH,iBAAiB,EAAE;MACnB,MAAMN,SAAS,GAAG,MAAMjB,iBAAiB,CAAC;QACtC5B,KAAK,EAAE;UACH/C,MAAM;UACNH,MAAM;UACNC,MAAM;UACNkH,WAAW,EAAElI,IAAI,CAACU,OAAO;UACzByH,eAAe,EAAE;QACrB,CAAC;QACD5D,IAAI,EAAE,CAAC,cAAc;MACzB,CAAC,CAAC;MAEF,MAAM6D,2BAA2B,GAAGtB,SAAS,CAACe,KAAK,CAAC,CAAC;MACrD,IAAIO,2BAA2B,EAAE;QAC7BvE,WAAW,CAACf,GAAG,CAAC;UACZ,GAAGsF,2BAA2B;UAC9B,GAAGL,mBAAmB;UACtBhF,IAAI,EAAET,6BAA6B,CAAC;QACxC,CAAC,CAAC;MACN,CAAC,MAAM;QACHuB,WAAW,CAAC8C,MAAM,CAACoB,mBAAmB,CAAC;MAC3C;IACJ;IAEA,IAAI;MACA,MAAMlE,WAAW,CAACb,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,2BAA2B,EACzCF,EAAE,CAACG,IAAI,IAAI,sBAAsB,EACjC;QACIpD,IAAI;QACJ2D,QAAQ;QACRI,UAAU;QACVvB,YAAY;QACZG,UAAU;QACVoF;MACJ,CACJ,CAAC;IACL;IACA;AACR;AACA;IACQ,IAAI,CAACC,MAAM,EAAE;MACT,OAAOhI,IAAI;IACf;IACA,MAAM;MAAEqD;IAAM,CAAC,GAAGC,8BAAc,CAACC,EAAE,CAAC;MAChCxC,MAAM,EAAEf,IAAI,CAACe,MAAM;MACnBC,MAAM,EAAEhB,IAAI,CAACgB;IACjB,CAAC,CAAC;IACF,IAAI;MACA,MAAM,IAAA8B,eAAG,EAAC;QACNzB,MAAM,EAAEC,QAAQ;QAChBkC,IAAI,EAAE;UACF,GAAGb,UAAU;UACbU,KAAK;UACLN,IAAI,EAAEV,oBAAoB,CAAC,CAAC;UAC5BoB,IAAI,EAAEuE;QACV;MACJ,CAAC,CAAC;MACF,OAAOhI,IAAI;IACf,CAAC,CAAC,OAAOiD,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,kDAAkD,EAChEF,EAAE,CAACG,IAAI,IAAI,sBAAsB,EACjC;QACIpD,IAAI;QACJ2D,QAAQ;QACRI,UAAU;QACVvB,YAAY;QACZG,UAAU;QACVoF;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,OAAO;IACHxF,UAAU;IACVmB,cAAc;IACdI,UAAU;IACVQ,SAAS;IACTuB,iBAAiB;IACjB7B,OAAO;IACPwC,UAAU;IACVK,kBAAkB;IAClBiB,WAAW;IACXG,aAAa;IACbtG;EACJ,CAAC;AACL,CAAC;AAAC0G,OAAA,CAAAlH,2BAAA,GAAAA,2BAAA","ignoreList":[]}
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 {\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 { Entity, Table } from \"@webiny/db-dynamodb/toolbox\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport { queryAll, QueryAllParams } from \"@webiny/db-dynamodb/utils/query\";\nimport WebinyError from \"@webiny/error\";\nimport { createEntityWriteBatch, getClean, IPutParamsItem, 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 { PluginsContainer } from \"@webiny/plugins\";\nimport { FormBuilderFormCreateKeyParams, FormBuilderFormStorageOperations } from \"~/types\";\nimport { 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 +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 {\n FormBuilderStorageOperationsCreateSettingsParams,\n FormBuilderStorageOperationsDeleteSettingsParams,\n FormBuilderStorageOperationsGetSettingsParams,\n FormBuilderStorageOperationsUpdateSettingsParams,\n Settings\n} from \"@webiny/api-form-builder/types\";\nimport { Entity, Table } from \"@webiny/db-dynamodb/toolbox\";\nimport {\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":"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","ignoreList":[]}
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 {\n FormBuilderStorageOperationsCreateSettingsParams,\n FormBuilderStorageOperationsDeleteSettingsParams,\n FormBuilderStorageOperationsGetSettingsParams,\n FormBuilderStorageOperationsUpdateSettingsParams,\n Settings\n} from \"@webiny/api-form-builder/types\";\nimport { Entity, Table } from \"@webiny/db-dynamodb/toolbox\";\nimport {\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":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_error","_interopRequireDefault","require","_dbDynamodb","_sort","_apiElasticsearch","_elasticsearchBody","_configurations","_cleanup","_utils","createSubmissionStorageOperations","params","entity","esEntity","table","elasticsearch","plugins","createSubmissionPartitionKey","tenant","locale","formId","id","parseIdentifier","createSubmissionSortKey","createSubmissionType","createSubmission","submission","form","keys","PK","SK","put","item","TYPE","ex","WebinyError","message","code","index","configurations","es","data","__type","createSubmissionElasticType","updateSubmission","original","deleteSubmission","deleteItem","listSubmissionsByIds","where","sort","items","id_in","map","getBatch","results","batchReadAll","submissions","filter","Boolean","cleanupItem","sortItems","fields","listSubmissions","limit","initialLimit","after","meta","hasMoreItems","cursor","totalCount","length","createLimit","body","createElasticsearchBody","decodeCursor","esConfig","query","response","search","hits","total","_source","pop","value","encodeCursor","getSubmission","getClean","exports"],"sources":["index.ts"],"sourcesContent":["import {\n FbSubmission,\n FormBuilderStorageOperationsCreateSubmissionParams,\n FormBuilderStorageOperationsDeleteSubmissionParams,\n FormBuilderStorageOperationsGetSubmissionParams,\n FormBuilderStorageOperationsListSubmissionsParams,\n FormBuilderStorageOperationsListSubmissionsResponse,\n FormBuilderStorageOperationsUpdateSubmissionParams\n} from \"@webiny/api-form-builder/types\";\nimport { Entity, Table } from \"@webiny/db-dynamodb/toolbox\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport WebinyError from \"@webiny/error\";\nimport { batchReadAll } from \"@webiny/db-dynamodb\";\nimport { sortItems } from \"@webiny/db-dynamodb/utils/sort\";\nimport { createLimit, decodeCursor, encodeCursor } from \"@webiny/api-elasticsearch\";\nimport {\n createElasticsearchBody,\n createSubmissionElasticType\n} from \"~/operations/submission/elasticsearchBody\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport {\n FormBuilderSubmissionStorageOperations,\n FormBuilderSubmissionStorageOperationsCreatePartitionKeyParams\n} from \"~/types\";\nimport { configurations } from \"~/configurations\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { ElasticsearchSearchResponse } from \"@webiny/api-elasticsearch/types\";\nimport { deleteItem, getClean, put } from \"@webiny/db-dynamodb\";\n\nexport interface CreateSubmissionStorageOperationsParams {\n entity: Entity<any>;\n esEntity: Entity<any>;\n table: Table<string, string, string>;\n elasticsearch: Client;\n plugins: PluginsContainer;\n}\n\nexport const createSubmissionStorageOperations = (\n params: CreateSubmissionStorageOperationsParams\n): FormBuilderSubmissionStorageOperations => {\n const { entity, esEntity, table, elasticsearch, plugins } = params;\n\n const createSubmissionPartitionKey = (\n params: FormBuilderSubmissionStorageOperationsCreatePartitionKeyParams\n ) => {\n const { tenant, locale, formId } = params;\n\n const { id } = parseIdentifier(formId);\n\n return `T#${tenant}#L#${locale}#FB#F#${id}`;\n };\n const createSubmissionSortKey = (id: string) => {\n return `FS#${id}`;\n };\n\n const createSubmissionType = () => {\n return \"fb.formSubmission\";\n };\n\n const createSubmission = async (\n params: FormBuilderStorageOperationsCreateSubmissionParams\n ): Promise<FbSubmission> => {\n const { submission, form } = params;\n const keys = {\n PK: createSubmissionPartitionKey(form),\n SK: createSubmissionSortKey(submission.id)\n };\n\n try {\n await put({\n entity,\n item: {\n ...submission,\n ...keys,\n TYPE: createSubmissionType()\n }\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create form submission in the DynamoDB.\",\n ex.code || \"UPDATE_FORM_SUBMISSION_ERROR\",\n {\n submission,\n form,\n keys\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: {\n ...submission,\n __type: createSubmissionElasticType()\n },\n TYPE: createSubmissionType(),\n ...keys\n }\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create form submission in the Elasticsearch.\",\n ex.code || \"UPDATE_FORM_SUBMISSION_ERROR\",\n {\n submission,\n form,\n keys\n }\n );\n }\n\n return submission;\n };\n /**\n * We do not save the data in the Elasticsearch because there is no need for that.\n */\n const updateSubmission = async (\n params: FormBuilderStorageOperationsUpdateSubmissionParams\n ): Promise<FbSubmission> => {\n const { submission, form, original } = params;\n const keys = {\n PK: createSubmissionPartitionKey(form),\n SK: createSubmissionSortKey(submission.id)\n };\n\n try {\n await put({\n entity,\n item: {\n ...submission,\n ...keys,\n TYPE: createSubmissionType()\n }\n });\n return submission;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update form submission in the DynamoDB.\",\n ex.code || \"UPDATE_FORM_SUBMISSION_ERROR\",\n {\n submission,\n original,\n form,\n keys\n }\n );\n }\n };\n\n const deleteSubmission = async (\n params: FormBuilderStorageOperationsDeleteSubmissionParams\n ): Promise<FbSubmission> => {\n const { submission, form } = params;\n\n const keys = {\n PK: createSubmissionPartitionKey(form),\n SK: createSubmissionSortKey(submission.id)\n };\n\n try {\n await deleteItem({\n entity,\n keys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete form submission from DynamoDB.\",\n ex.code || \"DELETE_FORM_SUBMISSION_ERROR\",\n {\n submission,\n form,\n keys\n }\n );\n }\n\n try {\n await deleteItem({\n entity: esEntity,\n keys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete form submission from Elasticsearch.\",\n ex.code || \"DELETE_FORM_SUBMISSION_ERROR\",\n {\n submission,\n form,\n keys\n }\n );\n }\n\n return submission;\n };\n\n /**\n *\n * We are using this method because it is faster to fetch the exact data from the DynamoDB than Elasticsearch.\n *\n * @internal\n */\n const listSubmissionsByIds = async (\n params: FormBuilderStorageOperationsListSubmissionsParams\n ): Promise<FbSubmission[]> => {\n const { where, sort } = params;\n const items = (where.id_in || []).map(id => {\n return entity.getBatch({\n PK: createSubmissionPartitionKey({\n ...where\n }),\n SK: createSubmissionSortKey(id)\n });\n });\n\n let results: FbSubmission[] = [];\n\n try {\n results = await batchReadAll<FbSubmission>({\n table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not batch read form submissions.\",\n ex.code || \"BATCH_READ_SUBMISSIONS_ERROR\",\n {\n where,\n sort\n }\n );\n }\n /**\n * We need to remove empty results because it is a possibility that batch read returned null for non-existing record.\n */\n const submissions = results.filter(Boolean).map(submission => {\n return cleanupItem(entity, submission);\n }) as FbSubmission[];\n if (!sort) {\n return submissions;\n }\n return sortItems<FbSubmission>({\n items: submissions,\n sort,\n fields: []\n });\n };\n\n const listSubmissions = async (\n params: FormBuilderStorageOperationsListSubmissionsParams\n ): Promise<FormBuilderStorageOperationsListSubmissionsResponse> => {\n const { where, sort = [], limit: initialLimit, after } = params;\n\n if (where.id_in) {\n const items = await listSubmissionsByIds(params);\n\n return {\n items,\n meta: {\n hasMoreItems: false,\n cursor: null,\n totalCount: items.length\n }\n };\n }\n\n const limit = createLimit(initialLimit);\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<FbSubmission>;\n try {\n response = await elasticsearch.search(query);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could list form submissions.\",\n ex.code || \"LIST_SUBMISSIONS_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 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 getSubmission = async (\n params: FormBuilderStorageOperationsGetSubmissionParams\n ): Promise<FbSubmission | null> => {\n const { where } = params;\n\n const keys = {\n PK: createSubmissionPartitionKey({\n ...where,\n formId: where.formId as string\n }),\n SK: createSubmissionSortKey(where.id)\n };\n\n try {\n return await getClean<FbSubmission>({\n entity,\n keys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not oad submission.\",\n ex.code || \"GET_SUBMISSION_ERROR\",\n {\n where,\n keys\n }\n );\n }\n };\n\n return {\n createSubmission,\n deleteSubmission,\n updateSubmission,\n listSubmissions,\n getSubmission,\n createSubmissionPartitionKey,\n createSubmissionSortKey\n };\n};\n"],"mappings":";;;;;;;AAWA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AACA,IAAAI,kBAAA,GAAAJ,OAAA;AASA,IAAAK,eAAA,GAAAL,OAAA;AACA,IAAAM,QAAA,GAAAN,OAAA;AACA,IAAAO,MAAA,GAAAP,OAAA;AAYO,MAAMQ,iCAAiC,GAC1CC,MAA+C,IACN;EACzC,MAAM;IAAEC,MAAM;IAAEC,QAAQ;IAAEC,KAAK;IAAEC,aAAa;IAAEC;EAAQ,CAAC,GAAGL,MAAM;EAElE,MAAMM,4BAA4B,GAC9BN,MAAsE,IACrE;IACD,MAAM;MAAEO,MAAM;MAAEC,MAAM;MAAEC;IAAO,CAAC,GAAGT,MAAM;IAEzC,MAAM;MAAEU;IAAG,CAAC,GAAG,IAAAC,sBAAe,EAACF,MAAM,CAAC;IAEtC,OAAQ,KAAIF,MAAO,MAAKC,MAAO,SAAQE,EAAG,EAAC;EAC/C,CAAC;EACD,MAAME,uBAAuB,GAAIF,EAAU,IAAK;IAC5C,OAAQ,MAAKA,EAAG,EAAC;EACrB,CAAC;EAED,MAAMG,oBAAoB,GAAGA,CAAA,KAAM;IAC/B,OAAO,mBAAmB;EAC9B,CAAC;EAED,MAAMC,gBAAgB,GAAG,MACrBd,MAA0D,IAClC;IACxB,MAAM;MAAEe,UAAU;MAAEC;IAAK,CAAC,GAAGhB,MAAM;IACnC,MAAMiB,IAAI,GAAG;MACTC,EAAE,EAAEZ,4BAA4B,CAACU,IAAI,CAAC;MACtCG,EAAE,EAAEP,uBAAuB,CAACG,UAAU,CAACL,EAAE;IAC7C,CAAC;IAED,IAAI;MACA,MAAM,IAAAU,eAAG,EAAC;QACNnB,MAAM;QACNoB,IAAI,EAAE;UACF,GAAGN,UAAU;UACb,GAAGE,IAAI;UACPK,IAAI,EAAET,oBAAoB,CAAC;QAC/B;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOU,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,mDAAmD,EACjEF,EAAE,CAACG,IAAI,IAAI,8BAA8B,EACzC;QACIX,UAAU;QACVC,IAAI;QACJC;MACJ,CACJ,CAAC;IACL;IAEA,IAAI;MACA,MAAM;QAAEU;MAAM,CAAC,GAAGC,8BAAc,CAACC,EAAE,CAAC;QAChCtB,MAAM,EAAES,IAAI,CAACT,MAAM;QACnBC,MAAM,EAAEQ,IAAI,CAACR;MACjB,CAAC,CAAC;MACF,MAAM,IAAAY,eAAG,EAAC;QACNnB,MAAM,EAAEC,QAAQ;QAChBmB,IAAI,EAAE;UACFM,KAAK;UACLG,IAAI,EAAE;YACF,GAAGf,UAAU;YACbgB,MAAM,EAAE,IAAAC,8CAA2B,EAAC;UACxC,CAAC;UACDV,IAAI,EAAET,oBAAoB,CAAC,CAAC;UAC5B,GAAGI;QACP;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOM,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,wDAAwD,EACtEF,EAAE,CAACG,IAAI,IAAI,8BAA8B,EACzC;QACIX,UAAU;QACVC,IAAI;QACJC;MACJ,CACJ,CAAC;IACL;IAEA,OAAOF,UAAU;EACrB,CAAC;EACD;AACJ;AACA;EACI,MAAMkB,gBAAgB,GAAG,MACrBjC,MAA0D,IAClC;IACxB,MAAM;MAAEe,UAAU;MAAEC,IAAI;MAAEkB;IAAS,CAAC,GAAGlC,MAAM;IAC7C,MAAMiB,IAAI,GAAG;MACTC,EAAE,EAAEZ,4BAA4B,CAACU,IAAI,CAAC;MACtCG,EAAE,EAAEP,uBAAuB,CAACG,UAAU,CAACL,EAAE;IAC7C,CAAC;IAED,IAAI;MACA,MAAM,IAAAU,eAAG,EAAC;QACNnB,MAAM;QACNoB,IAAI,EAAE;UACF,GAAGN,UAAU;UACb,GAAGE,IAAI;UACPK,IAAI,EAAET,oBAAoB,CAAC;QAC/B;MACJ,CAAC,CAAC;MACF,OAAOE,UAAU;IACrB,CAAC,CAAC,OAAOQ,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,mDAAmD,EACjEF,EAAE,CAACG,IAAI,IAAI,8BAA8B,EACzC;QACIX,UAAU;QACVmB,QAAQ;QACRlB,IAAI;QACJC;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAMkB,gBAAgB,GAAG,MACrBnC,MAA0D,IAClC;IACxB,MAAM;MAAEe,UAAU;MAAEC;IAAK,CAAC,GAAGhB,MAAM;IAEnC,MAAMiB,IAAI,GAAG;MACTC,EAAE,EAAEZ,4BAA4B,CAACU,IAAI,CAAC;MACtCG,EAAE,EAAEP,uBAAuB,CAACG,UAAU,CAACL,EAAE;IAC7C,CAAC;IAED,IAAI;MACA,MAAM,IAAA0B,sBAAU,EAAC;QACbnC,MAAM;QACNgB;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOM,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,iDAAiD,EAC/DF,EAAE,CAACG,IAAI,IAAI,8BAA8B,EACzC;QACIX,UAAU;QACVC,IAAI;QACJC;MACJ,CACJ,CAAC;IACL;IAEA,IAAI;MACA,MAAM,IAAAmB,sBAAU,EAAC;QACbnC,MAAM,EAAEC,QAAQ;QAChBe;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOM,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,sDAAsD,EACpEF,EAAE,CAACG,IAAI,IAAI,8BAA8B,EACzC;QACIX,UAAU;QACVC,IAAI;QACJC;MACJ,CACJ,CAAC;IACL;IAEA,OAAOF,UAAU;EACrB,CAAC;;EAED;AACJ;AACA;AACA;AACA;AACA;EACI,MAAMsB,oBAAoB,GAAG,MACzBrC,MAAyD,IAC/B;IAC1B,MAAM;MAAEsC,KAAK;MAAEC;IAAK,CAAC,GAAGvC,MAAM;IAC9B,MAAMwC,KAAK,GAAG,CAACF,KAAK,CAACG,KAAK,IAAI,EAAE,EAAEC,GAAG,CAAChC,EAAE,IAAI;MACxC,OAAOT,MAAM,CAAC0C,QAAQ,CAAC;QACnBzB,EAAE,EAAEZ,4BAA4B,CAAC;UAC7B,GAAGgC;QACP,CAAC,CAAC;QACFnB,EAAE,EAAEP,uBAAuB,CAACF,EAAE;MAClC,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,IAAIkC,OAAuB,GAAG,EAAE;IAEhC,IAAI;MACAA,OAAO,GAAG,MAAM,IAAAC,wBAAY,EAAe;QACvC1C,KAAK;QACLqC;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOjB,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,wCAAwC,EACtDF,EAAE,CAACG,IAAI,IAAI,8BAA8B,EACzC;QACIY,KAAK;QACLC;MACJ,CACJ,CAAC;IACL;IACA;AACR;AACA;IACQ,MAAMO,WAAW,GAAGF,OAAO,CAACG,MAAM,CAACC,OAAO,CAAC,CAACN,GAAG,CAAC3B,UAAU,IAAI;MAC1D,OAAO,IAAAkC,oBAAW,EAAChD,MAAM,EAAEc,UAAU,CAAC;IAC1C,CAAC,CAAmB;IACpB,IAAI,CAACwB,IAAI,EAAE;MACP,OAAOO,WAAW;IACtB;IACA,OAAO,IAAAI,eAAS,EAAe;MAC3BV,KAAK,EAAEM,WAAW;MAClBP,IAAI;MACJY,MAAM,EAAE;IACZ,CAAC,CAAC;EACN,CAAC;EAED,MAAMC,eAAe,GAAG,MACpBpD,MAAyD,IACM;IAC/D,MAAM;MAAEsC,KAAK;MAAEC,IAAI,GAAG,EAAE;MAAEc,KAAK,EAAEC,YAAY;MAAEC;IAAM,CAAC,GAAGvD,MAAM;IAE/D,IAAIsC,KAAK,CAACG,KAAK,EAAE;MACb,MAAMD,KAAK,GAAG,MAAMH,oBAAoB,CAACrC,MAAM,CAAC;MAEhD,OAAO;QACHwC,KAAK;QACLgB,IAAI,EAAE;UACFC,YAAY,EAAE,KAAK;UACnBC,MAAM,EAAE,IAAI;UACZC,UAAU,EAAEnB,KAAK,CAACoB;QACtB;MACJ,CAAC;IACL;IAEA,MAAMP,KAAK,GAAG,IAAAQ,6BAAW,EAACP,YAAY,CAAC;IAEvC,MAAMQ,IAAI,GAAG,IAAAC,0CAAuB,EAAC;MACjC1D,OAAO;MACPkC,IAAI;MACJc,KAAK,EAAEA,KAAK,GAAG,CAAC;MAChBf,KAAK;MACLiB,KAAK,EAAE,IAAAS,8BAAY,EAACT,KAAK;IAC7B,CAAC,CAAC;IAEF,MAAMU,QAAQ,GAAGrC,8BAAc,CAACC,EAAE,CAAC;MAC/BtB,MAAM,EAAE+B,KAAK,CAAC/B,MAAM;MACpBC,MAAM,EAAE8B,KAAK,CAAC9B;IAClB,CAAC,CAAC;IAEF,MAAM0D,KAAK,GAAG;MACV,GAAGD,QAAQ;MACXH;IACJ,CAAC;IAED,IAAIK,QAAmD;IACvD,IAAI;MACAA,QAAQ,GAAG,MAAM/D,aAAa,CAACgE,MAAM,CAACF,KAAK,CAAC;IAChD,CAAC,CAAC,OAAO3C,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,8BAA8B,EAC5CF,EAAE,CAACG,IAAI,IAAI,wBAAwB,EACnC;QACIY,KAAK;QACL4B;MACJ,CACJ,CAAC;IACL;IAEA,MAAM;MAAEG,IAAI;MAAEC;IAAM,CAAC,GAAGH,QAAQ,CAACL,IAAI,CAACO,IAAI;IAC1C,MAAM7B,KAAK,GAAG6B,IAAI,CAAC3B,GAAG,CAACrB,IAAI,IAAIA,IAAI,CAACkD,OAAO,CAAC;IAE5C,MAAMd,YAAY,GAAGjB,KAAK,CAACoB,MAAM,GAAGP,KAAK;IACzC,IAAII,YAAY,EAAE;MACd;AACZ;AACA;MACYjB,KAAK,CAACgC,GAAG,CAAC,CAAC;IACf;IACA;AACR;AACA;AACA;IACQ,MAAMhB,IAAI,GAAG;MACTC,YAAY;MACZE,UAAU,EAAEW,KAAK,CAACG,KAAK;MACvBf,MAAM,EAAElB,KAAK,CAACoB,MAAM,GAAG,CAAC,GAAG,IAAAc,8BAAY,EAACL,IAAI,CAAC7B,KAAK,CAACoB,MAAM,GAAG,CAAC,CAAC,CAACrB,IAAI,CAAC,IAAI,IAAI,GAAG;IACnF,CAAC;IAED,OAAO;MACHC,KAAK;MACLgB;IACJ,CAAC;EACL,CAAC;EAED,MAAMmB,aAAa,GAAG,MAClB3E,MAAuD,IACxB;IAC/B,MAAM;MAAEsC;IAAM,CAAC,GAAGtC,MAAM;IAExB,MAAMiB,IAAI,GAAG;MACTC,EAAE,EAAEZ,4BAA4B,CAAC;QAC7B,GAAGgC,KAAK;QACR7B,MAAM,EAAE6B,KAAK,CAAC7B;MAClB,CAAC,CAAC;MACFU,EAAE,EAAEP,uBAAuB,CAAC0B,KAAK,CAAC5B,EAAE;IACxC,CAAC;IAED,IAAI;MACA,OAAO,MAAM,IAAAkE,oBAAQ,EAAe;QAChC3E,MAAM;QACNgB;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOM,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,2BAA2B,EACzCF,EAAE,CAACG,IAAI,IAAI,sBAAsB,EACjC;QACIY,KAAK;QACLrB;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,OAAO;IACHH,gBAAgB;IAChBqB,gBAAgB;IAChBF,gBAAgB;IAChBmB,eAAe;IACfuB,aAAa;IACbrE,4BAA4B;IAC5BM;EACJ,CAAC;AACL,CAAC;AAACiE,OAAA,CAAA9E,iCAAA,GAAAA,iCAAA","ignoreList":[]}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_dbDynamodb","_sort","_apiElasticsearch","_elasticsearchBody","_configurations","_cleanup","_utils","createSubmissionStorageOperations","params","entity","esEntity","table","elasticsearch","plugins","createSubmissionPartitionKey","tenant","locale","formId","id","parseIdentifier","createSubmissionSortKey","createSubmissionType","createSubmission","submission","form","keys","PK","SK","put","item","TYPE","ex","WebinyError","message","code","index","configurations","es","data","__type","createSubmissionElasticType","updateSubmission","original","deleteSubmission","deleteItem","listSubmissionsByIds","where","sort","items","id_in","map","getBatch","results","batchReadAll","submissions","filter","Boolean","cleanupItem","sortItems","fields","listSubmissions","limit","initialLimit","after","meta","hasMoreItems","cursor","totalCount","length","createLimit","body","createElasticsearchBody","decodeCursor","esConfig","query","response","search","hits","total","_source","pop","value","encodeCursor","getSubmission","getClean","exports"],"sources":["index.ts"],"sourcesContent":["import {\n FbSubmission,\n FormBuilderStorageOperationsCreateSubmissionParams,\n FormBuilderStorageOperationsDeleteSubmissionParams,\n FormBuilderStorageOperationsGetSubmissionParams,\n FormBuilderStorageOperationsListSubmissionsParams,\n FormBuilderStorageOperationsListSubmissionsResponse,\n FormBuilderStorageOperationsUpdateSubmissionParams\n} from \"@webiny/api-form-builder/types\";\nimport { Entity, Table } from \"@webiny/db-dynamodb/toolbox\";\nimport { Client } from \"@elastic/elasticsearch\";\nimport WebinyError from \"@webiny/error\";\nimport { batchReadAll } from \"@webiny/db-dynamodb\";\nimport { sortItems } from \"@webiny/db-dynamodb/utils/sort\";\nimport { createLimit, decodeCursor, encodeCursor } from \"@webiny/api-elasticsearch\";\nimport {\n createElasticsearchBody,\n createSubmissionElasticType\n} from \"~/operations/submission/elasticsearchBody\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport {\n FormBuilderSubmissionStorageOperations,\n FormBuilderSubmissionStorageOperationsCreatePartitionKeyParams\n} from \"~/types\";\nimport { configurations } from \"~/configurations\";\nimport { cleanupItem } from \"@webiny/db-dynamodb/utils/cleanup\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { ElasticsearchSearchResponse } from \"@webiny/api-elasticsearch/types\";\nimport { deleteItem, getClean, put } from \"@webiny/db-dynamodb\";\n\nexport interface CreateSubmissionStorageOperationsParams {\n entity: Entity<any>;\n esEntity: Entity<any>;\n table: Table<string, string, string>;\n elasticsearch: Client;\n plugins: PluginsContainer;\n}\n\nexport const createSubmissionStorageOperations = (\n params: CreateSubmissionStorageOperationsParams\n): FormBuilderSubmissionStorageOperations => {\n const { entity, esEntity, table, elasticsearch, plugins } = params;\n\n const createSubmissionPartitionKey = (\n params: FormBuilderSubmissionStorageOperationsCreatePartitionKeyParams\n ) => {\n const { tenant, locale, formId } = params;\n\n const { id } = parseIdentifier(formId);\n\n return `T#${tenant}#L#${locale}#FB#F#${id}`;\n };\n const createSubmissionSortKey = (id: string) => {\n return `FS#${id}`;\n };\n\n const createSubmissionType = () => {\n return \"fb.formSubmission\";\n };\n\n const createSubmission = async (\n params: FormBuilderStorageOperationsCreateSubmissionParams\n ): Promise<FbSubmission> => {\n const { submission, form } = params;\n const keys = {\n PK: createSubmissionPartitionKey(form),\n SK: createSubmissionSortKey(submission.id)\n };\n\n try {\n await put({\n entity,\n item: {\n ...submission,\n ...keys,\n TYPE: createSubmissionType()\n }\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create form submission in the DynamoDB.\",\n ex.code || \"UPDATE_FORM_SUBMISSION_ERROR\",\n {\n submission,\n form,\n keys\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: {\n ...submission,\n __type: createSubmissionElasticType()\n },\n TYPE: createSubmissionType(),\n ...keys\n }\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create form submission in the Elasticsearch.\",\n ex.code || \"UPDATE_FORM_SUBMISSION_ERROR\",\n {\n submission,\n form,\n keys\n }\n );\n }\n\n return submission;\n };\n /**\n * We do not save the data in the Elasticsearch because there is no need for that.\n */\n const updateSubmission = async (\n params: FormBuilderStorageOperationsUpdateSubmissionParams\n ): Promise<FbSubmission> => {\n const { submission, form, original } = params;\n const keys = {\n PK: createSubmissionPartitionKey(form),\n SK: createSubmissionSortKey(submission.id)\n };\n\n try {\n await put({\n entity,\n item: {\n ...submission,\n ...keys,\n TYPE: createSubmissionType()\n }\n });\n return submission;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update form submission in the DynamoDB.\",\n ex.code || \"UPDATE_FORM_SUBMISSION_ERROR\",\n {\n submission,\n original,\n form,\n keys\n }\n );\n }\n };\n\n const deleteSubmission = async (\n params: FormBuilderStorageOperationsDeleteSubmissionParams\n ): Promise<FbSubmission> => {\n const { submission, form } = params;\n\n const keys = {\n PK: createSubmissionPartitionKey(form),\n SK: createSubmissionSortKey(submission.id)\n };\n\n try {\n await deleteItem({\n entity,\n keys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete form submission from DynamoDB.\",\n ex.code || \"DELETE_FORM_SUBMISSION_ERROR\",\n {\n submission,\n form,\n keys\n }\n );\n }\n\n try {\n await deleteItem({\n entity: esEntity,\n keys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not delete form submission from Elasticsearch.\",\n ex.code || \"DELETE_FORM_SUBMISSION_ERROR\",\n {\n submission,\n form,\n keys\n }\n );\n }\n\n return submission;\n };\n\n /**\n *\n * We are using this method because it is faster to fetch the exact data from the DynamoDB than Elasticsearch.\n *\n * @internal\n */\n const listSubmissionsByIds = async (\n params: FormBuilderStorageOperationsListSubmissionsParams\n ): Promise<FbSubmission[]> => {\n const { where, sort } = params;\n const items = (where.id_in || []).map(id => {\n return entity.getBatch({\n PK: createSubmissionPartitionKey({\n ...where\n }),\n SK: createSubmissionSortKey(id)\n });\n });\n\n let results: FbSubmission[] = [];\n\n try {\n results = await batchReadAll<FbSubmission>({\n table,\n items\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not batch read form submissions.\",\n ex.code || \"BATCH_READ_SUBMISSIONS_ERROR\",\n {\n where,\n sort\n }\n );\n }\n /**\n * We need to remove empty results because it is a possibility that batch read returned null for non-existing record.\n */\n const submissions = results.filter(Boolean).map(submission => {\n return cleanupItem(entity, submission);\n }) as FbSubmission[];\n if (!sort) {\n return submissions;\n }\n return sortItems<FbSubmission>({\n items: submissions,\n sort,\n fields: []\n });\n };\n\n const listSubmissions = async (\n params: FormBuilderStorageOperationsListSubmissionsParams\n ): Promise<FormBuilderStorageOperationsListSubmissionsResponse> => {\n const { where, sort = [], limit: initialLimit, after } = params;\n\n if (where.id_in) {\n const items = await listSubmissionsByIds(params);\n\n return {\n items,\n meta: {\n hasMoreItems: false,\n cursor: null,\n totalCount: items.length\n }\n };\n }\n\n const limit = createLimit(initialLimit);\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<FbSubmission>;\n try {\n response = await elasticsearch.search(query);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could list form submissions.\",\n ex.code || \"LIST_SUBMISSIONS_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 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 getSubmission = async (\n params: FormBuilderStorageOperationsGetSubmissionParams\n ): Promise<FbSubmission | null> => {\n const { where } = params;\n\n const keys = {\n PK: createSubmissionPartitionKey({\n ...where,\n formId: where.formId as string\n }),\n SK: createSubmissionSortKey(where.id)\n };\n\n try {\n return await getClean<FbSubmission>({\n entity,\n keys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not oad submission.\",\n ex.code || \"GET_SUBMISSION_ERROR\",\n {\n where,\n keys\n }\n );\n }\n };\n\n return {\n createSubmission,\n deleteSubmission,\n updateSubmission,\n listSubmissions,\n getSubmission,\n createSubmissionPartitionKey,\n createSubmissionSortKey\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_error","_interopRequireDefault","require","_dbDynamodb","createSystemStorageOperations","params","entity","createSystemPartitionKey","tenant","createSystemSortKey","createKeys","PK","SK","createSystem","system","keys","put","item","ex","WebinyError","message","code","getSystem","getClean","updateSystem","original","exports"],"sources":["index.ts"],"sourcesContent":["import {\n FormBuilderStorageOperationsCreateSystemParams,\n FormBuilderStorageOperationsGetSystemParams,\n FormBuilderStorageOperationsUpdateSystemParams,\n System\n} from \"@webiny/api-form-builder/types\";\nimport { Entity, Table } from \"@webiny/db-dynamodb/toolbox\";\nimport { FormBuilderSystemCreateKeysParams, FormBuilderSystemStorageOperations } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport { getClean, put } from \"@webiny/db-dynamodb\";\n\nexport interface CreateSystemStorageOperationsParams {\n entity: Entity<any>;\n table: Table<string, string, string>;\n}\n\nexport const createSystemStorageOperations = (\n params: CreateSystemStorageOperationsParams\n): FormBuilderSystemStorageOperations => {\n const { entity } = params;\n\n const createSystemPartitionKey = ({ tenant }: FormBuilderSystemCreateKeysParams): string => {\n return `T#${tenant}#SYSTEM`;\n };\n\n const createSystemSortKey = (): string => {\n return \"FB\";\n };\n\n const createKeys = (params: FormBuilderSystemCreateKeysParams) => {\n return {\n PK: createSystemPartitionKey(params),\n SK: createSystemSortKey()\n };\n };\n\n const createSystem = async (\n params: FormBuilderStorageOperationsCreateSystemParams\n ): Promise<System> => {\n const { system } = params;\n const keys = createKeys(system);\n\n try {\n await put({\n entity,\n item: {\n ...system,\n ...keys\n }\n });\n return system;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create the system record by given keys.\",\n ex.code || \"CREATE_SYSTEM_ERROR\",\n {\n keys,\n system\n }\n );\n }\n };\n\n const getSystem = async (\n params: FormBuilderStorageOperationsGetSystemParams\n ): Promise<System | null> => {\n const keys = createKeys(params);\n\n try {\n return await getClean<System>({\n entity,\n keys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get the system record by given keys.\",\n ex.code || \"LOAD_SYSTEM_ERROR\",\n {\n keys\n }\n );\n }\n };\n\n const updateSystem = async (\n params: FormBuilderStorageOperationsUpdateSystemParams\n ): Promise<System> => {\n const { system, original } = params;\n const keys = createKeys(system);\n\n try {\n await put({\n entity,\n item: {\n ...system,\n ...keys\n }\n });\n return system;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update the system record by given keys.\",\n ex.code || \"UPDATE_SYSTEM_ERROR\",\n {\n keys,\n original,\n system\n }\n );\n }\n };\n\n return {\n createSystem,\n getSystem,\n updateSystem,\n createSystemPartitionKey,\n createSystemSortKey\n };\n};\n"],"mappings":";;;;;;;AAQA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAOO,MAAME,6BAA6B,GACtCC,MAA2C,IACN;EACrC,MAAM;IAAEC;EAAO,CAAC,GAAGD,MAAM;EAEzB,MAAME,wBAAwB,GAAGA,CAAC;IAAEC;EAA0C,CAAC,KAAa;IACxF,OAAQ,KAAIA,MAAO,SAAQ;EAC/B,CAAC;EAED,MAAMC,mBAAmB,GAAGA,CAAA,KAAc;IACtC,OAAO,IAAI;EACf,CAAC;EAED,MAAMC,UAAU,GAAIL,MAAyC,IAAK;IAC9D,OAAO;MACHM,EAAE,EAAEJ,wBAAwB,CAACF,MAAM,CAAC;MACpCO,EAAE,EAAEH,mBAAmB,CAAC;IAC5B,CAAC;EACL,CAAC;EAED,MAAMI,YAAY,GAAG,MACjBR,MAAsD,IACpC;IAClB,MAAM;MAAES;IAAO,CAAC,GAAGT,MAAM;IACzB,MAAMU,IAAI,GAAGL,UAAU,CAACI,MAAM,CAAC;IAE/B,IAAI;MACA,MAAM,IAAAE,eAAG,EAAC;QACNV,MAAM;QACNW,IAAI,EAAE;UACF,GAAGH,MAAM;UACT,GAAGC;QACP;MACJ,CAAC,CAAC;MACF,OAAOD,MAAM;IACjB,CAAC,CAAC,OAAOI,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,mDAAmD,EACjEF,EAAE,CAACG,IAAI,IAAI,qBAAqB,EAChC;QACIN,IAAI;QACJD;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAMQ,SAAS,GAAG,MACdjB,MAAmD,IAC1B;IACzB,MAAMU,IAAI,GAAGL,UAAU,CAACL,MAAM,CAAC;IAE/B,IAAI;MACA,OAAO,MAAM,IAAAkB,oBAAQ,EAAS;QAC1BjB,MAAM;QACNS;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOG,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,gDAAgD,EAC9DF,EAAE,CAACG,IAAI,IAAI,mBAAmB,EAC9B;QACIN;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAMS,YAAY,GAAG,MACjBnB,MAAsD,IACpC;IAClB,MAAM;MAAES,MAAM;MAAEW;IAAS,CAAC,GAAGpB,MAAM;IACnC,MAAMU,IAAI,GAAGL,UAAU,CAACI,MAAM,CAAC;IAE/B,IAAI;MACA,MAAM,IAAAE,eAAG,EAAC;QACNV,MAAM;QACNW,IAAI,EAAE;UACF,GAAGH,MAAM;UACT,GAAGC;QACP;MACJ,CAAC,CAAC;MACF,OAAOD,MAAM;IACjB,CAAC,CAAC,OAAOI,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,mDAAmD,EACjEF,EAAE,CAACG,IAAI,IAAI,qBAAqB,EAChC;QACIN,IAAI;QACJU,QAAQ;QACRX;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,OAAO;IACHD,YAAY;IACZS,SAAS;IACTE,YAAY;IACZjB,wBAAwB;IACxBE;EACJ,CAAC;AACL,CAAC;AAACiB,OAAA,CAAAtB,6BAAA,GAAAA,6BAAA","ignoreList":[]}
1
+ {"version":3,"names":["_error","_interopRequireDefault","require","_dbDynamodb","createSystemStorageOperations","params","entity","createSystemPartitionKey","tenant","createSystemSortKey","createKeys","PK","SK","createSystem","system","keys","put","item","ex","WebinyError","message","code","getSystem","getClean","updateSystem","original","exports"],"sources":["index.ts"],"sourcesContent":["import {\n FormBuilderStorageOperationsCreateSystemParams,\n FormBuilderStorageOperationsGetSystemParams,\n FormBuilderStorageOperationsUpdateSystemParams,\n System\n} from \"@webiny/api-form-builder/types\";\nimport { Entity, Table } from \"@webiny/db-dynamodb/toolbox\";\nimport { FormBuilderSystemCreateKeysParams, FormBuilderSystemStorageOperations } from \"~/types\";\nimport WebinyError from \"@webiny/error\";\nimport { getClean, put } from \"@webiny/db-dynamodb\";\n\nexport interface CreateSystemStorageOperationsParams {\n entity: Entity<any>;\n table: Table<string, string, string>;\n}\n\nexport const createSystemStorageOperations = (\n params: CreateSystemStorageOperationsParams\n): FormBuilderSystemStorageOperations => {\n const { entity } = params;\n\n const createSystemPartitionKey = ({ tenant }: FormBuilderSystemCreateKeysParams): string => {\n return `T#${tenant}#SYSTEM`;\n };\n\n const createSystemSortKey = (): string => {\n return \"FB\";\n };\n\n const createKeys = (params: FormBuilderSystemCreateKeysParams) => {\n return {\n PK: createSystemPartitionKey(params),\n SK: createSystemSortKey()\n };\n };\n\n const createSystem = async (\n params: FormBuilderStorageOperationsCreateSystemParams\n ): Promise<System> => {\n const { system } = params;\n const keys = createKeys(system);\n\n try {\n await put({\n entity,\n item: {\n ...system,\n ...keys\n }\n });\n return system;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not create the system record by given keys.\",\n ex.code || \"CREATE_SYSTEM_ERROR\",\n {\n keys,\n system\n }\n );\n }\n };\n\n const getSystem = async (\n params: FormBuilderStorageOperationsGetSystemParams\n ): Promise<System | null> => {\n const keys = createKeys(params);\n\n try {\n return await getClean<System>({\n entity,\n keys\n });\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not get the system record by given keys.\",\n ex.code || \"LOAD_SYSTEM_ERROR\",\n {\n keys\n }\n );\n }\n };\n\n const updateSystem = async (\n params: FormBuilderStorageOperationsUpdateSystemParams\n ): Promise<System> => {\n const { system, original } = params;\n const keys = createKeys(system);\n\n try {\n await put({\n entity,\n item: {\n ...system,\n ...keys\n }\n });\n return system;\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not update the system record by given keys.\",\n ex.code || \"UPDATE_SYSTEM_ERROR\",\n {\n keys,\n original,\n system\n }\n );\n }\n };\n\n return {\n createSystem,\n getSystem,\n updateSystem,\n createSystemPartitionKey,\n createSystemSortKey\n };\n};\n"],"mappings":";;;;;;;AAQA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAOO,MAAME,6BAA6B,GACtCC,MAA2C,IACN;EACrC,MAAM;IAAEC;EAAO,CAAC,GAAGD,MAAM;EAEzB,MAAME,wBAAwB,GAAGA,CAAC;IAAEC;EAA0C,CAAC,KAAa;IACxF,OAAO,KAAKA,MAAM,SAAS;EAC/B,CAAC;EAED,MAAMC,mBAAmB,GAAGA,CAAA,KAAc;IACtC,OAAO,IAAI;EACf,CAAC;EAED,MAAMC,UAAU,GAAIL,MAAyC,IAAK;IAC9D,OAAO;MACHM,EAAE,EAAEJ,wBAAwB,CAACF,MAAM,CAAC;MACpCO,EAAE,EAAEH,mBAAmB,CAAC;IAC5B,CAAC;EACL,CAAC;EAED,MAAMI,YAAY,GAAG,MACjBR,MAAsD,IACpC;IAClB,MAAM;MAAES;IAAO,CAAC,GAAGT,MAAM;IACzB,MAAMU,IAAI,GAAGL,UAAU,CAACI,MAAM,CAAC;IAE/B,IAAI;MACA,MAAM,IAAAE,eAAG,EAAC;QACNV,MAAM;QACNW,IAAI,EAAE;UACF,GAAGH,MAAM;UACT,GAAGC;QACP;MACJ,CAAC,CAAC;MACF,OAAOD,MAAM;IACjB,CAAC,CAAC,OAAOI,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,mDAAmD,EACjEF,EAAE,CAACG,IAAI,IAAI,qBAAqB,EAChC;QACIN,IAAI;QACJD;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAMQ,SAAS,GAAG,MACdjB,MAAmD,IAC1B;IACzB,MAAMU,IAAI,GAAGL,UAAU,CAACL,MAAM,CAAC;IAE/B,IAAI;MACA,OAAO,MAAM,IAAAkB,oBAAQ,EAAS;QAC1BjB,MAAM;QACNS;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOG,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,gDAAgD,EAC9DF,EAAE,CAACG,IAAI,IAAI,mBAAmB,EAC9B;QACIN;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,MAAMS,YAAY,GAAG,MACjBnB,MAAsD,IACpC;IAClB,MAAM;MAAES,MAAM;MAAEW;IAAS,CAAC,GAAGpB,MAAM;IACnC,MAAMU,IAAI,GAAGL,UAAU,CAACI,MAAM,CAAC;IAE/B,IAAI;MACA,MAAM,IAAAE,eAAG,EAAC;QACNV,MAAM;QACNW,IAAI,EAAE;UACF,GAAGH,MAAM;UACT,GAAGC;QACP;MACJ,CAAC,CAAC;MACF,OAAOD,MAAM;IACjB,CAAC,CAAC,OAAOI,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,mDAAmD,EACjEF,EAAE,CAACG,IAAI,IAAI,qBAAqB,EAChC;QACIN,IAAI;QACJU,QAAQ;QACRX;MACJ,CACJ,CAAC;IACL;EACJ,CAAC;EAED,OAAO;IACHD,YAAY;IACZS,SAAS;IACTE,YAAY;IACZjB,wBAAwB;IACxBE;EACJ,CAAC;AACL,CAAC;AAACiB,OAAA,CAAAtB,6BAAA,GAAAA,6BAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-form-builder-so-ddb-es",
3
- "version": "5.41.4",
3
+ "version": "5.42.0-beta.0",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "@webiny/api-form-builder",
@@ -25,32 +25,27 @@
25
25
  ],
26
26
  "license": "MIT",
27
27
  "dependencies": {
28
- "@babel/runtime": "7.24.1",
29
28
  "@elastic/elasticsearch": "7.12.0",
30
- "@webiny/api-elasticsearch": "5.41.4",
31
- "@webiny/api-elasticsearch-tasks": "5.41.4",
32
- "@webiny/api-form-builder": "5.41.4",
33
- "@webiny/aws-sdk": "5.41.4",
34
- "@webiny/db-dynamodb": "5.41.4",
35
- "@webiny/error": "5.41.4",
36
- "@webiny/plugins": "5.41.4",
37
- "@webiny/utils": "5.41.4",
38
- "elastic-ts": "0.8.0"
29
+ "@webiny/api-elasticsearch": "5.42.0-beta.0",
30
+ "@webiny/api-elasticsearch-tasks": "5.42.0-beta.0",
31
+ "@webiny/api-form-builder": "5.42.0-beta.0",
32
+ "@webiny/aws-sdk": "5.42.0-beta.0",
33
+ "@webiny/db-dynamodb": "5.42.0-beta.0",
34
+ "@webiny/error": "5.42.0-beta.0",
35
+ "@webiny/plugins": "5.42.0-beta.0",
36
+ "@webiny/utils": "5.42.0-beta.0",
37
+ "elastic-ts": "0.12.0"
39
38
  },
40
39
  "devDependencies": {
41
- "@babel/cli": "7.24.1",
42
- "@babel/core": "7.24.3",
43
- "@babel/preset-env": "7.24.3",
44
- "@babel/preset-typescript": "7.24.1",
45
- "@webiny/api-dynamodb-to-elasticsearch": "5.41.4",
46
- "@webiny/cli": "5.41.4",
47
- "@webiny/handler-aws": "5.41.4",
48
- "@webiny/handler-db": "5.41.4",
49
- "@webiny/project-utils": "5.41.4",
40
+ "@webiny/api-dynamodb-to-elasticsearch": "5.42.0-beta.0",
41
+ "@webiny/cli": "5.42.0-beta.0",
42
+ "@webiny/handler-aws": "5.42.0-beta.0",
43
+ "@webiny/handler-db": "5.42.0-beta.0",
44
+ "@webiny/project-utils": "5.42.0-beta.0",
50
45
  "csvtojson": "2.0.10",
51
46
  "jest": "29.7.0",
52
47
  "jest-dynalite": "3.6.1",
53
- "rimraf": "5.0.5",
48
+ "rimraf": "6.0.1",
54
49
  "ttypescript": "1.5.15",
55
50
  "typescript": "4.9.5"
56
51
  },
@@ -62,5 +57,5 @@
62
57
  "build": "yarn webiny run build",
63
58
  "watch": "yarn webiny run watch"
64
59
  },
65
- "gitHead": "94922b33af59db5afe75127bb07443ce7f1448c4"
60
+ "gitHead": "ebf90f62ed3f28114ffdb012b7e5f80988af53d3"
66
61
  }