@budibase/server 2.3.9 → 2.3.11-alpha.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.
- package/__mocks__/aws-sdk.ts +1 -1
- package/builder/assets/{index.4488f38d.css → index.a534ca24.css} +1 -1
- package/builder/assets/{index.7e735cc5.js → index.a7877207.js} +146 -146
- package/builder/index.html +2 -2
- package/coverage/clover.xml +11331 -6595
- package/coverage/coverage-final.json +356 -271
- package/coverage/lcov-report/index.html +428 -203
- package/coverage/lcov-report/src/api/controllers/analytics.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/application.ts.html +140 -140
- package/coverage/lcov-report/src/api/controllers/auth.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/automation.ts.html +47 -47
- package/coverage/lcov-report/src/api/controllers/backup.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/cloud.ts.html +26 -26
- package/coverage/lcov-report/src/api/controllers/component.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/datasource.ts.html +37 -37
- package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +14 -14
- package/coverage/lcov-report/src/api/controllers/deploy/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +81 -81
- package/coverage/lcov-report/src/api/controllers/dev.ts.html +26 -26
- package/coverage/lcov-report/src/api/controllers/index.html +37 -37
- package/coverage/lcov-report/src/api/controllers/integration.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/layout.ts.html +15 -15
- package/coverage/lcov-report/src/api/controllers/metadata.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/migrations.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/permission.ts.html +34 -34
- package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/plugin/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +18 -18
- package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +3 -3
- package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +3 -3
- package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/public/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/public/users.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/query/import/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +3 -3
- package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +13 -13
- package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/curl/curl.spec.js.html +391 -0
- package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/curl/index.html +116 -0
- package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi2/index.html +116 -0
- package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi2/openapi2.spec.js.html +796 -0
- package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi3/index.html +116 -0
- package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi3/openapi3.spec.js.html +805 -0
- package/coverage/lcov-report/src/api/controllers/query/import/tests/index.html +116 -0
- package/coverage/lcov-report/src/api/controllers/query/import/tests/index.spec.js.html +568 -0
- package/coverage/lcov-report/src/api/controllers/query/index.html +10 -10
- package/coverage/lcov-report/src/api/controllers/query/index.ts.html +61 -55
- package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/role.ts.html +8 -8
- package/coverage/lcov-report/src/api/controllers/routing.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +431 -419
- package/coverage/lcov-report/src/api/controllers/row/external.ts.html +211 -175
- package/coverage/lcov-report/src/api/controllers/row/index.html +42 -42
- package/coverage/lcov-report/src/api/controllers/row/index.ts.html +79 -79
- package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +34 -34
- package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +6 -6
- package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +22 -22
- package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +31 -31
- package/coverage/lcov-report/src/api/controllers/screen.ts.html +26 -26
- package/coverage/lcov-report/src/api/controllers/script.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/static/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/static/index.ts.html +22 -22
- package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +51 -51
- package/coverage/lcov-report/src/api/controllers/table/external.ts.html +198 -195
- package/coverage/lcov-report/src/api/controllers/table/index.html +47 -47
- package/coverage/lcov-report/src/api/controllers/table/index.ts.html +42 -42
- package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +61 -61
- package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +63 -63
- package/coverage/lcov-report/src/api/controllers/templates.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/user.ts.html +28 -28
- package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +2 -2
- package/coverage/lcov-report/src/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/src/api/controllers/view/index.ts.html +16 -16
- package/coverage/lcov-report/src/api/controllers/view/tests/index.html +116 -0
- package/coverage/lcov-report/src/api/controllers/view/tests/viewBuilder.spec.js.html +277 -0
- package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +7 -7
- package/coverage/lcov-report/src/api/controllers/webhook.ts.html +25 -25
- package/coverage/lcov-report/src/api/index.html +1 -1
- package/coverage/lcov-report/src/api/index.ts.html +27 -27
- package/coverage/lcov-report/src/api/routes/analytics.ts.html +7 -7
- package/coverage/lcov-report/src/api/routes/apikeys.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/application.ts.html +10 -10
- package/coverage/lcov-report/src/api/routes/auth.ts.html +6 -6
- package/coverage/lcov-report/src/api/routes/automation.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/backup.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/cloud.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/component.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/datasource.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/deploy.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/dev.ts.html +13 -13
- package/coverage/lcov-report/src/api/routes/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/index.ts.html +35 -35
- package/coverage/lcov-report/src/api/routes/integration.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/layout.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/metadata.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/migrations.ts.html +7 -7
- package/coverage/lcov-report/src/api/routes/permission.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/plugin.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/public/applications.ts.html +14 -17
- package/coverage/lcov-report/src/api/routes/public/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/index.ts.html +52 -52
- package/coverage/lcov-report/src/api/routes/public/middleware/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +4 -4
- package/coverage/lcov-report/src/api/routes/public/queries.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/public/rows.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/public/tables.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/public/tests/compare.spec.js.html +583 -0
- package/coverage/lcov-report/src/api/routes/public/tests/index.html +42 -12
- package/coverage/lcov-report/src/api/routes/public/tests/users.spec.js.html +199 -0
- package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +78 -27
- package/coverage/lcov-report/src/api/routes/public/users.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +19 -19
- package/coverage/lcov-report/src/api/routes/public/utils/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/query.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/role.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/routing.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/row.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/screen.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/script.ts.html +1 -1
- package/coverage/lcov-report/src/api/routes/static.ts.html +14 -14
- package/coverage/lcov-report/src/api/routes/table.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/templates.ts.html +8 -8
- package/coverage/lcov-report/src/api/routes/tests/analytics.spec.js.html +271 -0
- package/coverage/lcov-report/src/api/routes/tests/apikeys.spec.js.html +259 -0
- package/coverage/lcov-report/src/api/routes/tests/application.spec.ts.html +1066 -0
- package/coverage/lcov-report/src/api/routes/tests/auth.spec.js.html +154 -0
- package/coverage/lcov-report/src/api/routes/tests/automation.spec.js.html +1123 -0
- package/coverage/lcov-report/src/api/routes/tests/backup.spec.ts.html +223 -0
- package/coverage/lcov-report/src/api/routes/tests/cloud.seq.spec.ts.html +268 -0
- package/coverage/lcov-report/src/api/routes/tests/component.spec.js.html +178 -0
- package/coverage/lcov-report/src/api/routes/tests/datasource.spec.ts.html +799 -0
- package/coverage/lcov-report/src/api/routes/tests/dev.spec.js.html +202 -0
- package/coverage/lcov-report/src/api/routes/tests/environmentVariables.spec.ts.html +517 -0
- package/coverage/lcov-report/src/api/routes/tests/index.html +536 -0
- package/coverage/lcov-report/src/api/routes/tests/integration.spec.js.html +238 -0
- package/coverage/lcov-report/src/api/routes/tests/internalSearch.spec.js.html +670 -0
- package/coverage/lcov-report/src/api/routes/tests/layout.spec.js.html +259 -0
- package/coverage/lcov-report/src/api/routes/tests/metadata.spec.js.html +280 -0
- package/coverage/lcov-report/src/api/routes/tests/misc.spec.js.html +358 -0
- package/coverage/lcov-report/src/api/routes/tests/permissions.spec.js.html +484 -0
- package/coverage/lcov-report/src/api/routes/tests/plugin.spec.ts.html +622 -0
- package/coverage/lcov-report/src/api/routes/tests/query.seq.spec.js.html +1699 -0
- package/coverage/lcov-report/src/api/routes/tests/role.spec.js.html +478 -0
- package/coverage/lcov-report/src/api/routes/tests/routing.spec.js.html +430 -0
- package/coverage/lcov-report/src/api/routes/tests/row.spec.js.html +1804 -0
- package/coverage/lcov-report/src/api/routes/tests/screen.spec.js.html +391 -0
- package/coverage/lcov-report/src/api/routes/tests/static.spec.js.html +541 -0
- package/coverage/lcov-report/src/api/routes/tests/table.spec.js.html +991 -0
- package/coverage/lcov-report/src/api/routes/tests/templates.spec.js.html +154 -0
- package/coverage/lcov-report/src/api/routes/tests/user.spec.js.html +679 -0
- package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +110 -41
- package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +19 -19
- package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +29 -23
- package/coverage/lcov-report/src/api/routes/tests/view.spec.js.html +1342 -0
- package/coverage/lcov-report/src/api/routes/tests/webhook.spec.js.html +484 -0
- package/coverage/lcov-report/src/api/routes/user.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/utils/index.html +1 -1
- package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +42 -42
- package/coverage/lcov-report/src/api/routes/view.ts.html +10 -10
- package/coverage/lcov-report/src/api/routes/webhook.ts.html +10 -10
- package/coverage/lcov-report/src/app.ts.html +38 -35
- package/coverage/lcov-report/src/automations/actions.ts.html +24 -24
- package/coverage/lcov-report/src/automations/automationUtils.ts.html +4 -4
- package/coverage/lcov-report/src/automations/bullboard.ts.html +9 -9
- package/coverage/lcov-report/src/automations/index.html +27 -27
- package/coverage/lcov-report/src/automations/index.ts.html +5 -5
- package/coverage/lcov-report/src/automations/logging/index.html +1 -1
- package/coverage/lcov-report/src/automations/logging/index.ts.html +10 -10
- package/coverage/lcov-report/src/automations/steps/bash.ts.html +8 -8
- package/coverage/lcov-report/src/automations/steps/createRow.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/delay.ts.html +5 -5
- package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/discord.ts.html +8 -8
- package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/filter.ts.html +6 -6
- package/coverage/lcov-report/src/automations/steps/index.html +1 -1
- package/coverage/lcov-report/src/automations/steps/integromat.ts.html +6 -6
- package/coverage/lcov-report/src/automations/steps/loop.ts.html +3 -3
- package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +9 -9
- package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +13 -13
- package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +6 -6
- package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +4 -4
- package/coverage/lcov-report/src/automations/steps/slack.ts.html +6 -6
- package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +7 -7
- package/coverage/lcov-report/src/automations/steps/utils.ts.html +1 -1
- package/coverage/lcov-report/src/automations/steps/zapier.ts.html +6 -6
- package/coverage/lcov-report/src/automations/tests/automation.spec.js.html +337 -0
- package/coverage/lcov-report/src/automations/tests/bash.spec.js.html +187 -0
- package/coverage/lcov-report/src/automations/tests/createRow.spec.ts.html +223 -0
- package/coverage/lcov-report/src/automations/tests/delay.spec.js.html +133 -0
- package/coverage/lcov-report/src/automations/tests/deleteRow.spec.ts.html +250 -0
- package/coverage/lcov-report/src/automations/tests/discord.spec.js.html +166 -0
- package/coverage/lcov-report/src/automations/tests/executeQuery.spec.js.html +229 -0
- package/coverage/lcov-report/src/automations/tests/executeScript.spec.js.html +229 -0
- package/coverage/lcov-report/src/automations/tests/filter.spec.js.html +232 -0
- package/coverage/lcov-report/src/automations/tests/index.html +341 -0
- package/coverage/lcov-report/src/automations/tests/loop.spec.ts.html +220 -0
- package/coverage/lcov-report/src/automations/tests/outgoingWebhook.spec.js.html +202 -0
- package/coverage/lcov-report/src/automations/tests/queryRows.spec.js.html +436 -0
- package/coverage/lcov-report/src/automations/tests/sendSmtpEmail.spec.js.html +298 -0
- package/coverage/lcov-report/src/automations/tests/serverLog.spec.js.html +151 -0
- package/coverage/lcov-report/src/automations/tests/updateRow.spec.js.html +217 -0
- package/coverage/lcov-report/src/automations/tests/utilities/index.html +1 -1
- package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +1 -1
- package/coverage/lcov-report/src/automations/tests/zapier.spec.js.html +166 -0
- package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +8 -8
- package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +3 -3
- package/coverage/lcov-report/src/automations/triggers.ts.html +44 -44
- package/coverage/lcov-report/src/automations/unitTests/automationUtils.spec.ts.html +280 -0
- package/coverage/lcov-report/src/automations/unitTests/index.html +116 -0
- package/coverage/lcov-report/src/automations/utils.ts.html +63 -63
- package/coverage/lcov-report/src/constants/index.html +16 -16
- package/coverage/lcov-report/src/constants/index.ts.html +33 -99
- package/coverage/lcov-report/src/constants/layouts.ts.html +4 -4
- package/coverage/lcov-report/src/constants/screens.ts.html +5 -5
- package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +33 -45
- package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +2 -2
- package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +2 -2
- package/coverage/lcov-report/src/db/defaultData/index.html +11 -11
- package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +2 -2
- package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +2 -2
- package/coverage/lcov-report/src/db/dynamoClient.ts.html +15 -15
- package/coverage/lcov-report/src/db/inMemoryView.ts.html +4 -4
- package/coverage/lcov-report/src/db/index.html +16 -16
- package/coverage/lcov-report/src/db/index.ts.html +19 -19
- package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +26 -23
- package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +4 -4
- package/coverage/lcov-report/src/db/linkedRows/index.html +10 -10
- package/coverage/lcov-report/src/db/linkedRows/index.ts.html +23 -23
- package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +10 -10
- package/coverage/lcov-report/src/db/newid.ts.html +4 -4
- package/coverage/lcov-report/src/db/tests/index.html +131 -0
- package/coverage/lcov-report/src/db/tests/linkController.spec.js.html +793 -0
- package/coverage/lcov-report/src/db/tests/linkTests.spec.js.html +277 -0
- package/coverage/lcov-report/src/db/utils.ts.html +52 -52
- package/coverage/lcov-report/src/definitions/automations.ts.html +2 -2
- package/coverage/lcov-report/src/definitions/index.html +1 -1
- package/coverage/lcov-report/src/environment.ts.html +31 -31
- package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +8 -8
- package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +6 -6
- package/coverage/lcov-report/src/events/index.html +1 -1
- package/coverage/lcov-report/src/events/index.ts.html +4 -4
- package/coverage/lcov-report/src/events/utils.ts.html +10 -10
- package/coverage/lcov-report/src/index.html +16 -16
- package/coverage/lcov-report/src/index.ts.html +1 -1
- package/coverage/lcov-report/src/integration-test/index.html +116 -0
- package/coverage/lcov-report/src/integration-test/postgres.spec.ts.html +2341 -0
- package/coverage/lcov-report/src/integrations/airtable.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/arangodb.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/base/index.html +30 -30
- package/coverage/lcov-report/src/integrations/base/query.ts.html +9 -9
- package/coverage/lcov-report/src/integrations/base/sql.ts.html +217 -187
- package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +107 -107
- package/coverage/lcov-report/src/integrations/base/utils.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/couchdb.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/dynamodb.ts.html +6 -6
- package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/firebase.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/googlesheets.ts.html +11 -11
- package/coverage/lcov-report/src/integrations/index.html +27 -27
- package/coverage/lcov-report/src/integrations/index.ts.html +40 -40
- package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +8 -8
- package/coverage/lcov-report/src/integrations/mongodb.ts.html +11 -11
- package/coverage/lcov-report/src/integrations/mysql.ts.html +10 -10
- package/coverage/lcov-report/src/integrations/oracle.ts.html +14 -14
- package/coverage/lcov-report/src/integrations/postgres.ts.html +68 -68
- package/coverage/lcov-report/src/integrations/queries/index.html +1 -1
- package/coverage/lcov-report/src/integrations/queries/sql.ts.html +8 -8
- package/coverage/lcov-report/src/integrations/redis.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/rest.ts.html +15 -15
- package/coverage/lcov-report/src/integrations/s3.ts.html +6 -6
- package/coverage/lcov-report/src/integrations/snowflake.ts.html +5 -5
- package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/src/integrations/tests/airtable.spec.ts.html +310 -0
- package/coverage/lcov-report/src/integrations/tests/arangodb.spec.ts.html +199 -0
- package/coverage/lcov-report/src/integrations/tests/couchdb.spec.ts.html +349 -0
- package/coverage/lcov-report/src/integrations/tests/dynamodb.spec.ts.html +550 -0
- package/coverage/lcov-report/src/integrations/tests/elasticsearch.spec.ts.html +331 -0
- package/coverage/lcov-report/src/integrations/tests/firebase.spec.ts.html +376 -0
- package/coverage/lcov-report/src/integrations/tests/index.html +230 -5
- package/coverage/lcov-report/src/integrations/tests/microsoftSqlServer.spec.ts.html +253 -0
- package/coverage/lcov-report/src/integrations/tests/mongo.spec.ts.html +1087 -0
- package/coverage/lcov-report/src/integrations/tests/mysql.spec.ts.html +484 -0
- package/coverage/lcov-report/src/integrations/tests/oracle.spec.ts.html +373 -0
- package/coverage/lcov-report/src/integrations/tests/postgres.spec.ts.html +328 -0
- package/coverage/lcov-report/src/integrations/tests/redis.spec.ts.html +337 -0
- package/coverage/lcov-report/src/integrations/tests/rest.spec.ts.html +1870 -0
- package/coverage/lcov-report/src/integrations/tests/s3.spec.ts.html +421 -0
- package/coverage/lcov-report/src/integrations/tests/sql.spec.ts.html +1753 -0
- package/coverage/lcov-report/src/integrations/utils.ts.html +77 -77
- package/coverage/lcov-report/src/middleware/appInfo.ts.html +5 -5
- package/coverage/lcov-report/src/middleware/authorized.ts.html +29 -29
- package/coverage/lcov-report/src/middleware/builder.ts.html +17 -17
- package/coverage/lcov-report/src/middleware/currentapp.ts.html +53 -53
- package/coverage/lcov-report/src/middleware/index.html +15 -15
- package/coverage/lcov-report/src/middleware/joi-validator.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/publicApi.ts.html +4 -4
- package/coverage/lcov-report/src/middleware/resourceId.ts.html +28 -28
- package/coverage/lcov-report/src/middleware/selfhost.ts.html +1 -1
- package/coverage/lcov-report/src/middleware/tests/authorized.spec.js.html +574 -0
- package/coverage/lcov-report/src/middleware/tests/currentapp.spec.js.html +814 -0
- package/coverage/lcov-report/src/middleware/tests/index.html +161 -0
- package/coverage/lcov-report/src/middleware/tests/resourceId.spec.js.html +397 -0
- package/coverage/lcov-report/src/middleware/tests/selfhost.spec.js.html +214 -0
- package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
- package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +4 -4
- package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +7 -7
- package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +4 -4
- package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +19 -19
- package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +7 -7
- package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +15 -15
- package/coverage/lcov-report/src/migrations/functions/backfill/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +8 -8
- package/coverage/lcov-report/src/migrations/functions/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/tests/appUrls.spec.js.html +163 -0
- package/coverage/lcov-report/src/migrations/functions/tests/index.html +161 -0
- package/coverage/lcov-report/src/migrations/functions/tests/syncQuotas.spec.js.html +163 -0
- package/coverage/lcov-report/src/migrations/functions/tests/tableSettings.spec.ts.html +517 -0
- package/coverage/lcov-report/src/migrations/functions/tests/userEmailViewCasing.spec.js.html +190 -0
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +2 -2
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +5 -5
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +4 -4
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +6 -6
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/index.html +131 -0
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts.html +190 -0
- package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts.html +244 -0
- package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +3 -3
- package/coverage/lcov-report/src/migrations/index.html +1 -1
- package/coverage/lcov-report/src/migrations/index.ts.html +32 -32
- package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +1 -1
- package/coverage/lcov-report/src/migrations/tests/index.html +23 -8
- package/coverage/lcov-report/src/migrations/tests/index.spec.ts.html +511 -0
- package/coverage/lcov-report/src/migrations/tests/structures.ts.html +1 -1
- package/coverage/lcov-report/src/sdk/app/applications/index.html +1 -1
- package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +4 -4
- package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +22 -22
- package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +9 -9
- package/coverage/lcov-report/src/sdk/app/automations/index.html +1 -1
- package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +3 -3
- package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +10 -10
- package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +3 -3
- package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +41 -23
- package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +18 -18
- package/coverage/lcov-report/src/sdk/app/backups/index.html +10 -10
- package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +5 -5
- package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +7 -7
- package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +69 -60
- package/coverage/lcov-report/src/sdk/app/datasources/index.html +19 -19
- package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +3 -3
- package/coverage/lcov-report/src/sdk/app/queries/index.html +1 -1
- package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +3 -3
- package/coverage/lcov-report/src/sdk/app/queries/queries.ts.html +11 -11
- package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +6 -6
- package/coverage/lcov-report/src/sdk/app/rows/index.html +1 -1
- package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +4 -4
- package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +4 -4
- package/coverage/lcov-report/src/sdk/app/tables/index.html +1 -1
- package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +10 -10
- package/coverage/lcov-report/src/sdk/index.html +1 -1
- package/coverage/lcov-report/src/sdk/index.ts.html +11 -11
- package/coverage/lcov-report/src/sdk/tests/attachments.spec.ts.html +313 -0
- package/coverage/lcov-report/src/sdk/tests/index.html +116 -0
- package/coverage/lcov-report/src/sdk/users/index.html +1 -1
- package/coverage/lcov-report/src/sdk/users/index.ts.html +3 -3
- package/coverage/lcov-report/src/sdk/users/utils.ts.html +31 -31
- package/coverage/lcov-report/src/sdk/utils/index.html +1 -1
- package/coverage/lcov-report/src/sdk/utils/index.ts.html +11 -11
- package/coverage/lcov-report/src/startup.ts.html +42 -42
- package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +421 -193
- package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +15 -15
- package/coverage/lcov-report/src/tests/utilities/index.html +28 -28
- package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
- package/coverage/lcov-report/src/tests/utilities/structures.ts.html +77 -35
- package/coverage/lcov-report/src/threads/automation.ts.html +71 -71
- package/coverage/lcov-report/src/threads/index.html +15 -15
- package/coverage/lcov-report/src/threads/index.ts.html +24 -24
- package/coverage/lcov-report/src/threads/query.ts.html +76 -76
- package/coverage/lcov-report/src/threads/utils.ts.html +12 -12
- package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +3 -3
- package/coverage/lcov-report/src/utilities/centralPath.ts.html +2 -2
- package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +17 -17
- package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +8 -8
- package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +25 -25
- package/coverage/lcov-report/src/utilities/fileSystem/index.html +1 -1
- package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +6 -6
- package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +8 -8
- package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +7 -7
- package/coverage/lcov-report/src/utilities/global.ts.html +40 -40
- package/coverage/lcov-report/src/utilities/index.html +34 -19
- package/coverage/lcov-report/src/utilities/index.ts.html +26 -26
- package/coverage/lcov-report/src/utilities/redis.ts.html +12 -12
- package/coverage/lcov-report/src/utilities/retry.ts.html +139 -0
- package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/src/utilities/routing/index.ts.html +4 -4
- package/coverage/lcov-report/src/utilities/rowProcessor/index.html +19 -19
- package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +49 -49
- package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +3 -3
- package/coverage/lcov-report/src/utilities/rowProcessor/tests/index.html +116 -0
- package/coverage/lcov-report/src/utilities/rowProcessor/tests/utils.spec.ts.html +256 -0
- package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +38 -38
- package/coverage/lcov-report/src/utilities/schema.ts.html +3 -3
- package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +5 -5
- package/coverage/lcov-report/src/utilities/security.ts.html +22 -22
- package/coverage/lcov-report/src/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +35 -35
- package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
- package/coverage/lcov-report/src/utilities/users.ts.html +4 -4
- package/coverage/lcov-report/src/utilities/workerRequests.ts.html +15 -15
- package/coverage/lcov-report/src/watch.ts.html +7 -7
- package/coverage/lcov-report/src/websocket.ts.html +5 -5
- package/coverage/lcov.info +21832 -14106
- package/dist/api/controllers/query/index.js +2 -0
- package/dist/api/controllers/row/ExternalRequest.js +4 -2
- package/dist/api/controllers/row/external.js +12 -1
- package/dist/api/controllers/table/external.js +8 -8
- package/dist/api/routes/public/tests/utils.js +29 -2
- package/dist/api/routes/tests/utilities/index.js +131 -0
- package/dist/app.js +1 -1
- package/dist/constants/index.js +4 -24
- package/dist/db/defaultData/datasource_bb_default.js +6 -5
- package/dist/db/linkedRows/LinkController.js +9 -8
- package/dist/integrations/base/sql.js +10 -3
- package/dist/package.json +8 -6
- package/dist/sdk/app/backups/exports.js +8 -2
- package/dist/sdk/app/datasources/datasources.js +3 -0
- package/dist/tests/utilities/TestConfiguration.js +626 -0
- package/dist/tests/utilities/controllers.js +40 -0
- package/dist/tests/utilities/structures.js +234 -0
- package/dist/threads/automation.js +14 -14
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utilities/retry.js +30 -0
- package/jest-testcontainers-config.js +8 -0
- package/jest.config.ts +28 -11
- package/package.json +9 -7
- package/scripts/load/create-many-apps.js +24 -0
- package/scripts/load/create-many-rows.js +30 -0
- package/scripts/load/utils.js +66 -0
- package/specs/openapi.json +6 -6
- package/specs/openapi.yaml +3 -3
- package/src/api/controllers/query/import/tests/index.spec.js +1 -1
- package/src/api/controllers/query/index.ts +2 -0
- package/src/api/controllers/row/ExternalRequest.ts +6 -2
- package/src/api/controllers/row/external.ts +13 -1
- package/src/api/controllers/table/external.ts +3 -2
- package/src/api/routes/public/applications.ts +0 -1
- package/src/api/routes/public/tests/compare.spec.js +1 -1
- package/src/api/routes/public/tests/users.spec.js +1 -1
- package/src/api/routes/public/tests/utils.ts +25 -8
- package/src/api/routes/tests/__snapshots__/datasource.spec.ts.snap +1 -1
- package/src/api/routes/tests/analytics.spec.js +4 -1
- package/src/api/routes/tests/apikeys.spec.js +1 -1
- package/src/api/routes/tests/application.spec.ts +20 -6
- package/src/api/routes/tests/auth.spec.js +2 -2
- package/src/api/routes/tests/automation.spec.js +6 -2
- package/src/api/routes/tests/backup.spec.ts +4 -13
- package/src/api/routes/tests/{cloud.spec.ts → cloud.seq.spec.ts} +11 -15
- package/src/api/routes/tests/component.spec.js +1 -1
- package/src/api/routes/tests/datasource.spec.ts +20 -3
- package/src/api/routes/tests/dev.spec.js +1 -1
- package/src/api/routes/tests/environmentVariables.spec.ts +144 -0
- package/src/api/routes/tests/integration.spec.js +1 -1
- package/src/api/routes/tests/layout.spec.js +1 -1
- package/src/api/routes/tests/metadata.spec.js +1 -1
- package/src/api/routes/tests/misc.spec.js +1 -1
- package/src/api/routes/tests/permissions.spec.js +4 -1
- package/src/api/routes/tests/{query.spec.js → query.seq.spec.js} +22 -1
- package/src/api/routes/tests/role.spec.js +6 -1
- package/src/api/routes/tests/routing.spec.js +1 -1
- package/src/api/routes/tests/row.spec.js +11 -3
- package/src/api/routes/tests/screen.spec.js +1 -1
- package/src/api/routes/tests/static.spec.js +2 -1
- package/src/api/routes/tests/table.spec.js +1 -1
- package/src/api/routes/tests/templates.spec.js +1 -1
- package/src/api/routes/tests/user.spec.js +12 -12
- package/src/api/routes/tests/utilities/TestFunctions.ts +25 -2
- package/src/api/routes/tests/utilities/index.ts +5 -3
- package/src/api/routes/tests/view.spec.js +4 -1
- package/src/api/routes/tests/webhook.spec.js +11 -2
- package/src/app.ts +2 -1
- package/src/automations/tests/automation.spec.js +4 -4
- package/src/automations/tests/bash.spec.js +1 -1
- package/src/automations/tests/discord.spec.js +1 -1
- package/src/automations/tests/executeQuery.spec.js +2 -3
- package/src/automations/tests/executeScript.spec.js +1 -1
- package/src/automations/tests/outgoingWebhook.spec.js +1 -1
- package/src/automations/tests/sendSmtpEmail.spec.js +1 -1
- package/src/automations/tests/serverLog.spec.js +1 -1
- package/src/automations/tests/updateRow.spec.js +1 -1
- package/src/automations/tests/zapier.spec.js +1 -1
- package/src/constants/index.ts +1 -23
- package/src/db/defaultData/datasource_bb_default.ts +6 -10
- package/src/db/linkedRows/LinkController.ts +2 -1
- package/src/db/tests/linkController.spec.js +4 -1
- package/src/db/tests/linkTests.spec.js +1 -1
- package/src/integration-test/postgres.spec.ts +752 -0
- package/src/integrations/base/sql.ts +15 -5
- package/src/integrations/oracle.ts +1 -1
- package/src/migrations/functions/tests/appUrls.spec.js +1 -1
- package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
- package/src/migrations/functions/tests/userEmailViewCasing.spec.js +1 -1
- package/src/migrations/tests/index.spec.ts +13 -20
- package/src/sdk/app/backups/exports.ts +8 -2
- package/src/sdk/app/datasources/datasources.ts +3 -0
- package/src/tests/jestEnv.ts +2 -6
- package/src/tests/jestSetup.ts +8 -7
- package/src/tests/utilities/TestConfiguration.ts +126 -50
- package/src/tests/utilities/structures.ts +16 -2
- package/src/threads/automation.ts +13 -13
- package/src/utilities/retry.ts +18 -0
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">67.57% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>198/293</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">53.22% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>99/186</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">81.81% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>27/33</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">67.35% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>196/291</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line medium'></div>
|
|
65
65
|
<pre><table class="coverage">
|
|
66
66
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
67
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -803,7 +803,11 @@
|
|
|
803
803
|
<a name='L738'></a><a href='#L738'>738</a>
|
|
804
804
|
<a name='L739'></a><a href='#L739'>739</a>
|
|
805
805
|
<a name='L740'></a><a href='#L740'>740</a>
|
|
806
|
-
<a name='L741'></a><a href='#L741'>741</a
|
|
806
|
+
<a name='L741'></a><a href='#L741'>741</a>
|
|
807
|
+
<a name='L742'></a><a href='#L742'>742</a>
|
|
808
|
+
<a name='L743'></a><a href='#L743'>743</a>
|
|
809
|
+
<a name='L744'></a><a href='#L744'>744</a>
|
|
810
|
+
<a name='L745'></a><a href='#L745'>745</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
807
811
|
<span class="cline-any cline-neutral"> </span>
|
|
808
812
|
<span class="cline-any cline-neutral"> </span>
|
|
809
813
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -815,23 +819,23 @@
|
|
|
815
819
|
<span class="cline-any cline-neutral"> </span>
|
|
816
820
|
<span class="cline-any cline-neutral"> </span>
|
|
817
821
|
<span class="cline-any cline-neutral"> </span>
|
|
818
|
-
<span class="cline-any cline-yes">56x</span>
|
|
819
822
|
<span class="cline-any cline-neutral"> </span>
|
|
823
|
+
<span class="cline-any cline-yes">58x</span>
|
|
820
824
|
<span class="cline-any cline-neutral"> </span>
|
|
821
825
|
<span class="cline-any cline-neutral"> </span>
|
|
822
826
|
<span class="cline-any cline-neutral"> </span>
|
|
823
827
|
<span class="cline-any cline-neutral"> </span>
|
|
824
|
-
<span class="cline-any cline-yes">56x</span>
|
|
825
|
-
<span class="cline-any cline-yes">56x</span>
|
|
826
|
-
<span class="cline-any cline-yes">56x</span>
|
|
827
828
|
<span class="cline-any cline-neutral"> </span>
|
|
828
|
-
<span class="cline-any cline-yes">
|
|
829
|
-
<span class="cline-any cline-yes">
|
|
830
|
-
<span class="cline-any cline-yes">
|
|
829
|
+
<span class="cline-any cline-yes">58x</span>
|
|
830
|
+
<span class="cline-any cline-yes">58x</span>
|
|
831
|
+
<span class="cline-any cline-yes">58x</span>
|
|
831
832
|
<span class="cline-any cline-neutral"> </span>
|
|
833
|
+
<span class="cline-any cline-yes">58x</span>
|
|
834
|
+
<span class="cline-any cline-yes">58x</span>
|
|
835
|
+
<span class="cline-any cline-yes">58x</span>
|
|
832
836
|
<span class="cline-any cline-neutral"> </span>
|
|
833
|
-
<span class="cline-any cline-yes">56x</span>
|
|
834
837
|
<span class="cline-any cline-neutral"> </span>
|
|
838
|
+
<span class="cline-any cline-yes">58x</span>
|
|
835
839
|
<span class="cline-any cline-neutral"> </span>
|
|
836
840
|
<span class="cline-any cline-neutral"> </span>
|
|
837
841
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -856,15 +860,17 @@
|
|
|
856
860
|
<span class="cline-any cline-neutral"> </span>
|
|
857
861
|
<span class="cline-any cline-neutral"> </span>
|
|
858
862
|
<span class="cline-any cline-neutral"> </span>
|
|
859
|
-
<span class="cline-any cline-no"> </span>
|
|
860
863
|
<span class="cline-any cline-neutral"> </span>
|
|
861
|
-
<span class="cline-any cline-no"> </span>
|
|
862
|
-
<span class="cline-any cline-no"> </span>
|
|
863
864
|
<span class="cline-any cline-neutral"> </span>
|
|
864
|
-
<span class="cline-any cline-
|
|
865
|
-
<span class="cline-any cline-
|
|
866
|
-
<span class="cline-any cline-
|
|
867
|
-
<span class="cline-any cline-
|
|
865
|
+
<span class="cline-any cline-yes">264x</span>
|
|
866
|
+
<span class="cline-any cline-neutral"> </span>
|
|
867
|
+
<span class="cline-any cline-yes">264x</span>
|
|
868
|
+
<span class="cline-any cline-yes">264x</span>
|
|
869
|
+
<span class="cline-any cline-neutral"> </span>
|
|
870
|
+
<span class="cline-any cline-yes">264x</span>
|
|
871
|
+
<span class="cline-any cline-yes">264x</span>
|
|
872
|
+
<span class="cline-any cline-yes">2x</span>
|
|
873
|
+
<span class="cline-any cline-yes">2x</span>
|
|
868
874
|
<span class="cline-any cline-no"> </span>
|
|
869
875
|
<span class="cline-any cline-no"> </span>
|
|
870
876
|
<span class="cline-any cline-no"> </span>
|
|
@@ -879,21 +885,21 @@
|
|
|
879
885
|
<span class="cline-any cline-neutral"> </span>
|
|
880
886
|
<span class="cline-any cline-neutral"> </span>
|
|
881
887
|
<span class="cline-any cline-neutral"> </span>
|
|
882
|
-
<span class="cline-any cline-
|
|
883
|
-
<span class="cline-any cline-
|
|
888
|
+
<span class="cline-any cline-yes">264x</span>
|
|
889
|
+
<span class="cline-any cline-yes">244x</span>
|
|
884
890
|
<span class="cline-any cline-neutral"> </span>
|
|
885
891
|
<span class="cline-any cline-neutral"> </span>
|
|
886
|
-
<span class="cline-any cline-
|
|
887
|
-
<span class="cline-any cline-
|
|
892
|
+
<span class="cline-any cline-yes">20x</span>
|
|
893
|
+
<span class="cline-any cline-yes">2x</span>
|
|
888
894
|
<span class="cline-any cline-neutral"> </span>
|
|
889
|
-
<span class="cline-any cline-
|
|
890
|
-
<span class="cline-any cline-
|
|
891
|
-
<span class="cline-any cline-
|
|
895
|
+
<span class="cline-any cline-yes">20x</span>
|
|
896
|
+
<span class="cline-any cline-yes">20x</span>
|
|
897
|
+
<span class="cline-any cline-yes">20x</span>
|
|
892
898
|
<span class="cline-any cline-neutral"> </span>
|
|
893
|
-
<span class="cline-any cline-
|
|
899
|
+
<span class="cline-any cline-yes">20x</span>
|
|
894
900
|
<span class="cline-any cline-neutral"> </span>
|
|
895
901
|
<span class="cline-any cline-neutral"> </span>
|
|
896
|
-
<span class="cline-any cline-
|
|
902
|
+
<span class="cline-any cline-yes">20x</span>
|
|
897
903
|
<span class="cline-any cline-neutral"> </span>
|
|
898
904
|
<span class="cline-any cline-neutral"> </span>
|
|
899
905
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -907,62 +913,62 @@
|
|
|
907
913
|
<span class="cline-any cline-neutral"> </span>
|
|
908
914
|
<span class="cline-any cline-neutral"> </span>
|
|
909
915
|
<span class="cline-any cline-neutral"> </span>
|
|
910
|
-
<span class="cline-any cline-
|
|
916
|
+
<span class="cline-any cline-yes">132x</span>
|
|
911
917
|
<span class="cline-any cline-neutral"> </span>
|
|
912
918
|
<span class="cline-any cline-neutral"> </span>
|
|
913
919
|
<span class="cline-any cline-neutral"> </span>
|
|
914
920
|
<span class="cline-any cline-neutral"> </span>
|
|
915
921
|
<span class="cline-any cline-neutral"> </span>
|
|
916
922
|
<span class="cline-any cline-neutral"> </span>
|
|
917
|
-
<span class="cline-any cline-
|
|
918
|
-
<span class="cline-any cline-
|
|
919
|
-
<span class="cline-any cline-
|
|
920
|
-
<span class="cline-any cline-
|
|
921
|
-
<span class="cline-any cline-
|
|
922
|
-
<span class="cline-any cline-
|
|
923
|
+
<span class="cline-any cline-yes">132x</span>
|
|
924
|
+
<span class="cline-any cline-yes">2267x</span>
|
|
925
|
+
<span class="cline-any cline-yes">499x</span>
|
|
926
|
+
<span class="cline-any cline-yes">132x</span>
|
|
927
|
+
<span class="cline-any cline-yes">107x</span>
|
|
928
|
+
<span class="cline-any cline-yes">967x</span>
|
|
923
929
|
<span class="cline-any cline-no"> </span>
|
|
924
930
|
<span class="cline-any cline-neutral"> </span>
|
|
925
931
|
<span class="cline-any cline-neutral"> </span>
|
|
926
932
|
<span class="cline-any cline-neutral"> </span>
|
|
927
933
|
<span class="cline-any cline-neutral"> </span>
|
|
928
|
-
<span class="cline-any cline-
|
|
929
|
-
<span class="cline-any cline-
|
|
934
|
+
<span class="cline-any cline-yes">132x</span>
|
|
935
|
+
<span class="cline-any cline-yes">2x</span>
|
|
930
936
|
<span class="cline-any cline-neutral"> </span>
|
|
931
|
-
<span class="cline-any cline-
|
|
937
|
+
<span class="cline-any cline-yes">2x</span>
|
|
932
938
|
<span class="cline-any cline-neutral"> </span>
|
|
933
939
|
<span class="cline-any cline-neutral"> </span>
|
|
934
940
|
<span class="cline-any cline-neutral"> </span>
|
|
935
941
|
<span class="cline-any cline-neutral"> </span>
|
|
936
|
-
<span class="cline-any cline-
|
|
942
|
+
<span class="cline-any cline-yes">1x</span>
|
|
937
943
|
<span class="cline-any cline-neutral"> </span>
|
|
938
|
-
<span class="cline-any cline-
|
|
944
|
+
<span class="cline-any cline-yes">1x</span>
|
|
939
945
|
<span class="cline-any cline-neutral"> </span>
|
|
940
946
|
<span class="cline-any cline-neutral"> </span>
|
|
941
|
-
<span class="cline-any cline-
|
|
942
|
-
<span class="cline-any cline-
|
|
947
|
+
<span class="cline-any cline-yes">132x</span>
|
|
948
|
+
<span class="cline-any cline-yes">106x</span>
|
|
943
949
|
<span class="cline-any cline-neutral"> </span>
|
|
944
950
|
<span class="cline-any cline-neutral"> </span>
|
|
945
|
-
<span class="cline-any cline-
|
|
951
|
+
<span class="cline-any cline-yes">132x</span>
|
|
946
952
|
<span class="cline-any cline-neutral"> </span>
|
|
947
953
|
<span class="cline-any cline-neutral"> </span>
|
|
948
954
|
<span class="cline-any cline-neutral"> </span>
|
|
949
|
-
<span class="cline-any cline-
|
|
950
|
-
<span class="cline-any cline-
|
|
951
|
-
<span class="cline-any cline-
|
|
955
|
+
<span class="cline-any cline-yes">648x</span>
|
|
956
|
+
<span class="cline-any cline-yes">648x</span>
|
|
957
|
+
<span class="cline-any cline-yes">17x</span>
|
|
952
958
|
<span class="cline-any cline-neutral"> </span>
|
|
953
959
|
<span class="cline-any cline-neutral"> </span>
|
|
954
|
-
<span class="cline-any cline-
|
|
955
|
-
<span class="cline-any cline-
|
|
960
|
+
<span class="cline-any cline-yes">631x</span>
|
|
961
|
+
<span class="cline-any cline-yes">631x</span>
|
|
956
962
|
<span class="cline-any cline-neutral"> </span>
|
|
957
|
-
<span class="cline-any cline-
|
|
958
|
-
<span class="cline-any cline-
|
|
959
|
-
<span class="cline-any cline-
|
|
963
|
+
<span class="cline-any cline-yes">631x</span>
|
|
964
|
+
<span class="cline-any cline-yes">631x</span>
|
|
965
|
+
<span class="cline-any cline-yes">359x</span>
|
|
960
966
|
<span class="cline-any cline-neutral"> </span>
|
|
961
967
|
<span class="cline-any cline-neutral"> </span>
|
|
962
|
-
<span class="cline-any cline-
|
|
963
|
-
<span class="cline-any cline-
|
|
968
|
+
<span class="cline-any cline-yes">631x</span>
|
|
969
|
+
<span class="cline-any cline-yes">272x</span>
|
|
964
970
|
<span class="cline-any cline-neutral"> </span>
|
|
965
|
-
<span class="cline-any cline-
|
|
971
|
+
<span class="cline-any cline-yes">359x</span>
|
|
966
972
|
<span class="cline-any cline-neutral"> </span>
|
|
967
973
|
<span class="cline-any cline-neutral"> </span>
|
|
968
974
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -978,25 +984,25 @@
|
|
|
978
984
|
<span class="cline-any cline-neutral"> </span>
|
|
979
985
|
<span class="cline-any cline-neutral"> </span>
|
|
980
986
|
<span class="cline-any cline-neutral"> </span>
|
|
981
|
-
<span class="cline-any cline-
|
|
987
|
+
<span class="cline-any cline-yes">347x</span>
|
|
982
988
|
<span class="cline-any cline-neutral"> </span>
|
|
983
|
-
<span class="cline-any cline-
|
|
984
|
-
<span class="cline-any cline-
|
|
985
|
-
<span class="cline-any cline-
|
|
989
|
+
<span class="cline-any cline-yes">347x</span>
|
|
990
|
+
<span class="cline-any cline-yes">1373x</span>
|
|
991
|
+
<span class="cline-any cline-yes">1373x</span>
|
|
986
992
|
<span class="cline-any cline-neutral"> </span>
|
|
987
|
-
<span class="cline-any cline-
|
|
988
|
-
<span class="cline-any cline-
|
|
993
|
+
<span class="cline-any cline-yes">1373x</span>
|
|
994
|
+
<span class="cline-any cline-yes">701x</span>
|
|
989
995
|
<span class="cline-any cline-neutral"> </span>
|
|
990
996
|
<span class="cline-any cline-neutral"> </span>
|
|
991
|
-
<span class="cline-any cline-
|
|
992
|
-
<span class="cline-any cline-
|
|
993
|
-
<span class="cline-any cline-
|
|
994
|
-
<span class="cline-any cline-
|
|
997
|
+
<span class="cline-any cline-yes">347x</span>
|
|
998
|
+
<span class="cline-any cline-yes">347x</span>
|
|
999
|
+
<span class="cline-any cline-yes">347x</span>
|
|
1000
|
+
<span class="cline-any cline-yes">347x</span>
|
|
995
1001
|
<span class="cline-any cline-neutral"> </span>
|
|
996
1002
|
<span class="cline-any cline-neutral"> </span>
|
|
997
1003
|
<span class="cline-any cline-neutral"> </span>
|
|
998
|
-
<span class="cline-any cline-
|
|
999
|
-
<span class="cline-any cline-
|
|
1004
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1005
|
+
<span class="cline-any cline-yes">1037x</span>
|
|
1000
1006
|
<span class="cline-any cline-neutral"> </span>
|
|
1001
1007
|
<span class="cline-any cline-neutral"> </span>
|
|
1002
1008
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1008,27 +1014,27 @@
|
|
|
1008
1014
|
<span class="cline-any cline-neutral"> </span>
|
|
1009
1015
|
<span class="cline-any cline-neutral"> </span>
|
|
1010
1016
|
<span class="cline-any cline-neutral"> </span>
|
|
1011
|
-
<span class="cline-any cline-
|
|
1017
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1012
1018
|
<span class="cline-any cline-neutral"> </span>
|
|
1013
1019
|
<span class="cline-any cline-neutral"> </span>
|
|
1014
1020
|
<span class="cline-any cline-neutral"> </span>
|
|
1015
|
-
<span class="cline-any cline-
|
|
1021
|
+
<span class="cline-any cline-yes">103x</span>
|
|
1016
1022
|
<span class="cline-any cline-neutral"> </span>
|
|
1017
1023
|
<span class="cline-any cline-neutral"> </span>
|
|
1018
1024
|
<span class="cline-any cline-neutral"> </span>
|
|
1019
1025
|
<span class="cline-any cline-neutral"> </span>
|
|
1020
|
-
<span class="cline-any cline-
|
|
1026
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1021
1027
|
<span class="cline-any cline-neutral"> </span>
|
|
1022
1028
|
<span class="cline-any cline-neutral"> </span>
|
|
1023
1029
|
<span class="cline-any cline-neutral"> </span>
|
|
1024
|
-
<span class="cline-any cline-
|
|
1030
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1025
1031
|
<span class="cline-any cline-neutral"> </span>
|
|
1026
1032
|
<span class="cline-any cline-neutral"> </span>
|
|
1027
|
-
<span class="cline-any cline-
|
|
1028
|
-
<span class="cline-any cline-
|
|
1029
|
-
<span class="cline-any cline-
|
|
1030
|
-
<span class="cline-any cline-
|
|
1031
|
-
<span class="cline-any cline-
|
|
1033
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1034
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1035
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1036
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1037
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1032
1038
|
<span class="cline-any cline-neutral"> </span>
|
|
1033
1039
|
<span class="cline-any cline-neutral"> </span>
|
|
1034
1040
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1043,37 +1049,37 @@
|
|
|
1043
1049
|
<span class="cline-any cline-neutral"> </span>
|
|
1044
1050
|
<span class="cline-any cline-neutral"> </span>
|
|
1045
1051
|
<span class="cline-any cline-neutral"> </span>
|
|
1046
|
-
<span class="cline-any cline-
|
|
1047
|
-
<span class="cline-any cline-
|
|
1052
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1053
|
+
<span class="cline-any cline-yes">26x</span>
|
|
1048
1054
|
<span class="cline-any cline-neutral"> </span>
|
|
1049
1055
|
<span class="cline-any cline-neutral"> </span>
|
|
1050
1056
|
<span class="cline-any cline-neutral"> </span>
|
|
1051
|
-
<span class="cline-any cline-
|
|
1052
|
-
<span class="cline-any cline-
|
|
1053
|
-
<span class="cline-any cline-
|
|
1054
|
-
<span class="cline-any cline-
|
|
1057
|
+
<span class="cline-any cline-yes">106x</span>
|
|
1058
|
+
<span class="cline-any cline-yes">106x</span>
|
|
1059
|
+
<span class="cline-any cline-yes">106x</span>
|
|
1060
|
+
<span class="cline-any cline-yes">106x</span>
|
|
1055
1061
|
<span class="cline-any cline-neutral"> </span>
|
|
1056
|
-
<span class="cline-any cline-
|
|
1062
|
+
<span class="cline-any cline-yes">603x</span>
|
|
1057
1063
|
<span class="cline-any cline-neutral"> </span>
|
|
1058
1064
|
<span class="cline-any cline-neutral"> </span>
|
|
1059
1065
|
<span class="cline-any cline-neutral"> </span>
|
|
1060
1066
|
<span class="cline-any cline-neutral"> </span>
|
|
1061
1067
|
<span class="cline-any cline-neutral"> </span>
|
|
1062
|
-
<span class="cline-any cline-
|
|
1068
|
+
<span class="cline-any cline-yes">301x</span>
|
|
1063
1069
|
<span class="cline-any cline-neutral"> </span>
|
|
1064
1070
|
<span class="cline-any cline-neutral"> </span>
|
|
1065
|
-
<span class="cline-any cline-
|
|
1071
|
+
<span class="cline-any cline-yes">302x</span>
|
|
1066
1072
|
<span class="cline-any cline-no"> </span>
|
|
1067
1073
|
<span class="cline-any cline-no"> </span>
|
|
1068
1074
|
<span class="cline-any cline-neutral"> </span>
|
|
1069
1075
|
<span class="cline-any cline-neutral"> </span>
|
|
1070
|
-
<span class="cline-any cline-
|
|
1071
|
-
<span class="cline-any cline-
|
|
1076
|
+
<span class="cline-any cline-yes">302x</span>
|
|
1077
|
+
<span class="cline-any cline-yes">101x</span>
|
|
1072
1078
|
<span class="cline-any cline-neutral"> </span>
|
|
1073
1079
|
<span class="cline-any cline-neutral"> </span>
|
|
1074
|
-
<span class="cline-any cline-
|
|
1075
|
-
<span class="cline-any cline-
|
|
1076
|
-
<span class="cline-any cline-
|
|
1080
|
+
<span class="cline-any cline-yes">302x</span>
|
|
1081
|
+
<span class="cline-any cline-yes">302x</span>
|
|
1082
|
+
<span class="cline-any cline-yes">302x</span>
|
|
1077
1083
|
<span class="cline-any cline-neutral"> </span>
|
|
1078
1084
|
<span class="cline-any cline-no"> </span>
|
|
1079
1085
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1127,7 +1133,7 @@
|
|
|
1127
1133
|
<span class="cline-any cline-neutral"> </span>
|
|
1128
1134
|
<span class="cline-any cline-neutral"> </span>
|
|
1129
1135
|
<span class="cline-any cline-neutral"> </span>
|
|
1130
|
-
<span class="cline-any cline-
|
|
1136
|
+
<span class="cline-any cline-yes">106x</span>
|
|
1131
1137
|
<span class="cline-any cline-neutral"> </span>
|
|
1132
1138
|
<span class="cline-any cline-neutral"> </span>
|
|
1133
1139
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1135,21 +1141,21 @@
|
|
|
1135
1141
|
<span class="cline-any cline-neutral"> </span>
|
|
1136
1142
|
<span class="cline-any cline-neutral"> </span>
|
|
1137
1143
|
<span class="cline-any cline-neutral"> </span>
|
|
1138
|
-
<span class="cline-any cline-
|
|
1139
|
-
<span class="cline-any cline-
|
|
1140
|
-
<span class="cline-any cline-
|
|
1141
|
-
<span class="cline-any cline-
|
|
1144
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1145
|
+
<span class="cline-any cline-yes">171x</span>
|
|
1146
|
+
<span class="cline-any cline-yes">171x</span>
|
|
1147
|
+
<span class="cline-any cline-yes">170x</span>
|
|
1142
1148
|
<span class="cline-any cline-neutral"> </span>
|
|
1143
|
-
<span class="cline-any cline-
|
|
1144
|
-
<span class="cline-any cline-
|
|
1145
|
-
<span class="cline-any cline-
|
|
1146
|
-
<span class="cline-any cline-
|
|
1149
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1150
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1151
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1152
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1147
1153
|
<span class="cline-any cline-neutral"> </span>
|
|
1148
1154
|
<span class="cline-any cline-neutral"> </span>
|
|
1149
1155
|
<span class="cline-any cline-neutral"> </span>
|
|
1150
1156
|
<span class="cline-any cline-neutral"> </span>
|
|
1151
1157
|
<span class="cline-any cline-neutral"> </span>
|
|
1152
|
-
<span class="cline-any cline-
|
|
1158
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1153
1159
|
<span class="cline-any cline-neutral"> </span>
|
|
1154
1160
|
<span class="cline-any cline-neutral"> </span>
|
|
1155
1161
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1166,46 +1172,46 @@
|
|
|
1166
1172
|
<span class="cline-any cline-neutral"> </span>
|
|
1167
1173
|
<span class="cline-any cline-neutral"> </span>
|
|
1168
1174
|
<span class="cline-any cline-neutral"> </span>
|
|
1169
|
-
<span class="cline-any cline-
|
|
1170
|
-
<span class="cline-any cline-
|
|
1171
|
-
<span class="cline-any cline-
|
|
1172
|
-
<span class="cline-any cline-
|
|
1175
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1176
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1177
|
+
<span class="cline-any cline-yes">171x</span>
|
|
1178
|
+
<span class="cline-any cline-yes">171x</span>
|
|
1173
1179
|
<span class="cline-any cline-no"> </span>
|
|
1174
1180
|
<span class="cline-any cline-neutral"> </span>
|
|
1175
|
-
<span class="cline-any cline-
|
|
1176
|
-
<span class="cline-any cline-
|
|
1181
|
+
<span class="cline-any cline-yes">171x</span>
|
|
1182
|
+
<span class="cline-any cline-yes">171x</span>
|
|
1177
1183
|
<span class="cline-any cline-neutral"> </span>
|
|
1178
1184
|
<span class="cline-any cline-neutral"> </span>
|
|
1179
|
-
<span class="cline-any cline-
|
|
1185
|
+
<span class="cline-any cline-yes">171x</span>
|
|
1180
1186
|
<span class="cline-any cline-neutral"> </span>
|
|
1181
1187
|
<span class="cline-any cline-neutral"> </span>
|
|
1182
1188
|
<span class="cline-any cline-neutral"> </span>
|
|
1183
|
-
<span class="cline-any cline-
|
|
1189
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1184
1190
|
<span class="cline-any cline-neutral"> </span>
|
|
1185
|
-
<span class="cline-any cline-
|
|
1186
|
-
<span class="cline-any cline-
|
|
1187
|
-
<span class="cline-any cline-
|
|
1191
|
+
<span class="cline-any cline-yes">168x</span>
|
|
1192
|
+
<span class="cline-any cline-yes">168x</span>
|
|
1193
|
+
<span class="cline-any cline-yes">167x</span>
|
|
1188
1194
|
<span class="cline-any cline-neutral"> </span>
|
|
1189
|
-
<span class="cline-any cline-
|
|
1195
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1190
1196
|
<span class="cline-any cline-neutral"> </span>
|
|
1191
|
-
<span class="cline-any cline-
|
|
1192
|
-
<span class="cline-any cline-
|
|
1197
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1198
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1193
1199
|
<span class="cline-any cline-no"> </span>
|
|
1194
1200
|
<span class="cline-any cline-neutral"> </span>
|
|
1195
|
-
<span class="cline-any cline-
|
|
1196
|
-
<span class="cline-any cline-
|
|
1197
|
-
<span class="cline-any cline-
|
|
1201
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1202
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1203
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1198
1204
|
<span class="cline-any cline-neutral"> </span>
|
|
1199
1205
|
<span class="cline-any cline-neutral"> </span>
|
|
1200
|
-
<span class="cline-any cline-
|
|
1206
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1201
1207
|
<span class="cline-any cline-neutral"> </span>
|
|
1202
1208
|
<span class="cline-any cline-no"> </span>
|
|
1203
1209
|
<span class="cline-any cline-neutral"> </span>
|
|
1204
1210
|
<span class="cline-any cline-neutral"> </span>
|
|
1205
|
-
<span class="cline-any cline-
|
|
1211
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1206
1212
|
<span class="cline-any cline-neutral"> </span>
|
|
1207
1213
|
<span class="cline-any cline-neutral"> </span>
|
|
1208
|
-
<span class="cline-any cline-
|
|
1214
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1209
1215
|
<span class="cline-any cline-neutral"> </span>
|
|
1210
1216
|
<span class="cline-any cline-neutral"> </span>
|
|
1211
1217
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1213,15 +1219,15 @@
|
|
|
1213
1219
|
<span class="cline-any cline-neutral"> </span>
|
|
1214
1220
|
<span class="cline-any cline-neutral"> </span>
|
|
1215
1221
|
<span class="cline-any cline-neutral"> </span>
|
|
1216
|
-
<span class="cline-any cline-
|
|
1217
|
-
<span class="cline-any cline-
|
|
1222
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1223
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1218
1224
|
<span class="cline-any cline-neutral"> </span>
|
|
1219
|
-
<span class="cline-any cline-
|
|
1220
|
-
<span class="cline-any cline-
|
|
1221
|
-
<span class="cline-any cline-
|
|
1222
|
-
<span class="cline-any cline-
|
|
1225
|
+
<span class="cline-any cline-yes">130x</span>
|
|
1226
|
+
<span class="cline-any cline-yes">130x</span>
|
|
1227
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1228
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1223
1229
|
<span class="cline-any cline-neutral"> </span>
|
|
1224
|
-
<span class="cline-any cline-
|
|
1230
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1225
1231
|
<span class="cline-any cline-no"> </span>
|
|
1226
1232
|
<span class="cline-any cline-neutral"> </span>
|
|
1227
1233
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1230,13 +1236,13 @@
|
|
|
1230
1236
|
<span class="cline-any cline-neutral"> </span>
|
|
1231
1237
|
<span class="cline-any cline-no"> </span>
|
|
1232
1238
|
<span class="cline-any cline-neutral"> </span>
|
|
1233
|
-
<span class="cline-any cline-
|
|
1234
|
-
<span class="cline-any cline-
|
|
1239
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1240
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1235
1241
|
<span class="cline-any cline-no"> </span>
|
|
1236
1242
|
<span class="cline-any cline-neutral"> </span>
|
|
1237
|
-
<span class="cline-any cline-
|
|
1243
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1238
1244
|
<span class="cline-any cline-neutral"> </span>
|
|
1239
|
-
<span class="cline-any cline-
|
|
1245
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1240
1246
|
<span class="cline-any cline-neutral"> </span>
|
|
1241
1247
|
<span class="cline-any cline-neutral"> </span>
|
|
1242
1248
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1245,12 +1251,12 @@
|
|
|
1245
1251
|
<span class="cline-any cline-neutral"> </span>
|
|
1246
1252
|
<span class="cline-any cline-neutral"> </span>
|
|
1247
1253
|
<span class="cline-any cline-neutral"> </span>
|
|
1248
|
-
<span class="cline-any cline-
|
|
1249
|
-
<span class="cline-any cline-
|
|
1250
|
-
<span class="cline-any cline-
|
|
1254
|
+
<span class="cline-any cline-yes">130x</span>
|
|
1255
|
+
<span class="cline-any cline-yes">130x</span>
|
|
1256
|
+
<span class="cline-any cline-yes">130x</span>
|
|
1251
1257
|
<span class="cline-any cline-neutral"> </span>
|
|
1252
|
-
<span class="cline-any cline-
|
|
1253
|
-
<span class="cline-any cline-
|
|
1258
|
+
<span class="cline-any cline-yes">130x</span>
|
|
1259
|
+
<span class="cline-any cline-yes">179x</span>
|
|
1254
1260
|
<span class="cline-any cline-neutral"> </span>
|
|
1255
1261
|
<span class="cline-any cline-neutral"> </span>
|
|
1256
1262
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1260,21 +1266,21 @@
|
|
|
1260
1266
|
<span class="cline-any cline-neutral"> </span>
|
|
1261
1267
|
<span class="cline-any cline-neutral"> </span>
|
|
1262
1268
|
<span class="cline-any cline-neutral"> </span>
|
|
1263
|
-
<span class="cline-any cline-
|
|
1264
|
-
<span class="cline-any cline-
|
|
1265
|
-
<span class="cline-any cline-
|
|
1266
|
-
<span class="cline-any cline-
|
|
1269
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1270
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1271
|
+
<span class="cline-any cline-yes">755x</span>
|
|
1272
|
+
<span class="cline-any cline-yes">631x</span>
|
|
1267
1273
|
<span class="cline-any cline-neutral"> </span>
|
|
1268
|
-
<span class="cline-any cline-
|
|
1274
|
+
<span class="cline-any cline-yes">124x</span>
|
|
1269
1275
|
<span class="cline-any cline-neutral"> </span>
|
|
1270
|
-
<span class="cline-any cline-
|
|
1276
|
+
<span class="cline-any cline-yes">124x</span>
|
|
1271
1277
|
<span class="cline-any cline-no"> </span>
|
|
1272
1278
|
<span class="cline-any cline-neutral"> </span>
|
|
1273
|
-
<span class="cline-any cline-
|
|
1274
|
-
<span class="cline-any cline-
|
|
1279
|
+
<span class="cline-any cline-yes">124x</span>
|
|
1280
|
+
<span class="cline-any cline-yes">124x</span>
|
|
1275
1281
|
<span class="cline-any cline-no"> </span>
|
|
1276
1282
|
<span class="cline-any cline-neutral"> </span>
|
|
1277
|
-
<span class="cline-any cline-
|
|
1283
|
+
<span class="cline-any cline-yes">124x</span>
|
|
1278
1284
|
<span class="cline-any cline-neutral"> </span>
|
|
1279
1285
|
<span class="cline-any cline-neutral"> </span>
|
|
1280
1286
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1282,7 +1288,7 @@
|
|
|
1282
1288
|
<span class="cline-any cline-neutral"> </span>
|
|
1283
1289
|
<span class="cline-any cline-neutral"> </span>
|
|
1284
1290
|
<span class="cline-any cline-neutral"> </span>
|
|
1285
|
-
<span class="cline-any cline-
|
|
1291
|
+
<span class="cline-any cline-yes">124x</span>
|
|
1286
1292
|
<span class="cline-any cline-no"> </span>
|
|
1287
1293
|
<span class="cline-any cline-neutral"> </span>
|
|
1288
1294
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1293,9 +1299,9 @@
|
|
|
1293
1299
|
<span class="cline-any cline-no"> </span>
|
|
1294
1300
|
<span class="cline-any cline-no"> </span>
|
|
1295
1301
|
<span class="cline-any cline-neutral"> </span>
|
|
1296
|
-
<span class="cline-any cline-
|
|
1302
|
+
<span class="cline-any cline-yes">124x</span>
|
|
1297
1303
|
<span class="cline-any cline-neutral"> </span>
|
|
1298
|
-
<span class="cline-any cline-
|
|
1304
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1299
1305
|
<span class="cline-any cline-neutral"> </span>
|
|
1300
1306
|
<span class="cline-any cline-neutral"> </span>
|
|
1301
1307
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1303,23 +1309,23 @@
|
|
|
1303
1309
|
<span class="cline-any cline-neutral"> </span>
|
|
1304
1310
|
<span class="cline-any cline-neutral"> </span>
|
|
1305
1311
|
<span class="cline-any cline-neutral"> </span>
|
|
1306
|
-
<span class="cline-any cline-
|
|
1307
|
-
<span class="cline-any cline-
|
|
1308
|
-
<span class="cline-any cline-
|
|
1312
|
+
<span class="cline-any cline-yes">110x</span>
|
|
1313
|
+
<span class="cline-any cline-yes">110x</span>
|
|
1314
|
+
<span class="cline-any cline-yes">110x</span>
|
|
1309
1315
|
<span class="cline-any cline-no"> </span>
|
|
1310
1316
|
<span class="cline-any cline-neutral"> </span>
|
|
1311
|
-
<span class="cline-any cline-
|
|
1317
|
+
<span class="cline-any cline-yes">110x</span>
|
|
1312
1318
|
<span class="cline-any cline-neutral"> </span>
|
|
1313
|
-
<span class="cline-any cline-
|
|
1319
|
+
<span class="cline-any cline-yes">110x</span>
|
|
1314
1320
|
<span class="cline-any cline-neutral"> </span>
|
|
1315
1321
|
<span class="cline-any cline-neutral"> </span>
|
|
1316
|
-
<span class="cline-any cline-
|
|
1317
|
-
<span class="cline-any cline-
|
|
1322
|
+
<span class="cline-any cline-yes">110x</span>
|
|
1323
|
+
<span class="cline-any cline-yes">627x</span>
|
|
1318
1324
|
<span class="cline-any cline-neutral"> </span>
|
|
1319
1325
|
<span class="cline-any cline-neutral"> </span>
|
|
1320
1326
|
<span class="cline-any cline-neutral"> </span>
|
|
1321
1327
|
<span class="cline-any cline-neutral"> </span>
|
|
1322
|
-
<span class="cline-any cline-
|
|
1328
|
+
<span class="cline-any cline-yes">627x</span>
|
|
1323
1329
|
<span class="cline-any cline-neutral"> </span>
|
|
1324
1330
|
<span class="cline-any cline-no"> </span>
|
|
1325
1331
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1345,7 +1351,7 @@
|
|
|
1345
1351
|
<span class="cline-any cline-no"> </span>
|
|
1346
1352
|
<span class="cline-any cline-no"> </span>
|
|
1347
1353
|
<span class="cline-any cline-neutral"> </span>
|
|
1348
|
-
<span class="cline-any cline-
|
|
1354
|
+
<span class="cline-any cline-yes">110x</span>
|
|
1349
1355
|
<span class="cline-any cline-neutral"> </span>
|
|
1350
1356
|
<span class="cline-any cline-neutral"> </span>
|
|
1351
1357
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1364,9 +1370,9 @@
|
|
|
1364
1370
|
<span class="cline-any cline-neutral"> </span>
|
|
1365
1371
|
<span class="cline-any cline-neutral"> </span>
|
|
1366
1372
|
<span class="cline-any cline-neutral"> </span>
|
|
1367
|
-
<span class="cline-any cline-
|
|
1368
|
-
<span class="cline-any cline-
|
|
1369
|
-
<span class="cline-any cline-
|
|
1373
|
+
<span class="cline-any cline-yes">110x</span>
|
|
1374
|
+
<span class="cline-any cline-yes">110x</span>
|
|
1375
|
+
<span class="cline-any cline-yes">110x</span>
|
|
1370
1376
|
<span class="cline-any cline-no"> </span>
|
|
1371
1377
|
<span class="cline-any cline-no"> </span>
|
|
1372
1378
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1397,7 +1403,7 @@
|
|
|
1397
1403
|
<span class="cline-any cline-neutral"> </span>
|
|
1398
1404
|
<span class="cline-any cline-neutral"> </span>
|
|
1399
1405
|
<span class="cline-any cline-neutral"> </span>
|
|
1400
|
-
<span class="cline-any cline-
|
|
1406
|
+
<span class="cline-any cline-yes">110x</span>
|
|
1401
1407
|
<span class="cline-any cline-no"> </span>
|
|
1402
1408
|
<span class="cline-any cline-neutral"> </span>
|
|
1403
1409
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1422,7 +1428,7 @@
|
|
|
1422
1428
|
<span class="cline-any cline-neutral"> </span>
|
|
1423
1429
|
<span class="cline-any cline-neutral"> </span>
|
|
1424
1430
|
<span class="cline-any cline-neutral"> </span>
|
|
1425
|
-
<span class="cline-any cline-
|
|
1431
|
+
<span class="cline-any cline-yes">110x</span>
|
|
1426
1432
|
<span class="cline-any cline-neutral"> </span>
|
|
1427
1433
|
<span class="cline-any cline-neutral"> </span>
|
|
1428
1434
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1437,73 +1443,73 @@
|
|
|
1437
1443
|
<span class="cline-any cline-neutral"> </span>
|
|
1438
1444
|
<span class="cline-any cline-neutral"> </span>
|
|
1439
1445
|
<span class="cline-any cline-neutral"> </span>
|
|
1440
|
-
<span class="cline-any cline-
|
|
1446
|
+
<span class="cline-any cline-yes">149x</span>
|
|
1441
1447
|
<span class="cline-any cline-neutral"> </span>
|
|
1442
1448
|
<span class="cline-any cline-neutral"> </span>
|
|
1443
|
-
<span class="cline-any cline-
|
|
1449
|
+
<span class="cline-any cline-yes">789x</span>
|
|
1444
1450
|
<span class="cline-any cline-neutral"> </span>
|
|
1445
|
-
<span class="cline-any cline-
|
|
1451
|
+
<span class="cline-any cline-yes">170x</span>
|
|
1446
1452
|
<span class="cline-any cline-neutral"> </span>
|
|
1447
|
-
<span class="cline-any cline-
|
|
1453
|
+
<span class="cline-any cline-yes">665x</span>
|
|
1448
1454
|
<span class="cline-any cline-neutral"> </span>
|
|
1449
|
-
<span class="cline-any cline-
|
|
1450
|
-
<span class="cline-any cline-
|
|
1451
|
-
<span class="cline-any cline-
|
|
1452
|
-
<span class="cline-any cline-
|
|
1455
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1456
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1457
|
+
<span class="cline-any cline-yes">755x</span>
|
|
1458
|
+
<span class="cline-any cline-yes">738x</span>
|
|
1453
1459
|
<span class="cline-any cline-neutral"> </span>
|
|
1454
|
-
<span class="cline-any cline-
|
|
1455
|
-
<span class="cline-any cline-
|
|
1456
|
-
<span class="cline-any cline-
|
|
1457
|
-
<span class="cline-any cline-
|
|
1458
|
-
<span class="cline-any cline-
|
|
1459
|
-
<span class="cline-any cline-
|
|
1460
|
+
<span class="cline-any cline-yes">17x</span>
|
|
1461
|
+
<span class="cline-any cline-yes">17x</span>
|
|
1462
|
+
<span class="cline-any cline-yes">17x</span>
|
|
1463
|
+
<span class="cline-any cline-yes">17x</span>
|
|
1464
|
+
<span class="cline-any cline-yes">17x</span>
|
|
1465
|
+
<span class="cline-any cline-yes">17x</span>
|
|
1460
1466
|
<span class="cline-any cline-neutral"> </span>
|
|
1461
1467
|
<span class="cline-any cline-neutral"> </span>
|
|
1462
1468
|
<span class="cline-any cline-neutral"> </span>
|
|
1463
|
-
<span class="cline-any cline-
|
|
1469
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1464
1470
|
<span class="cline-any cline-neutral"> </span>
|
|
1465
1471
|
<span class="cline-any cline-neutral"> </span>
|
|
1466
1472
|
<span class="cline-any cline-neutral"> </span>
|
|
1467
|
-
<span class="cline-any cline-
|
|
1468
|
-
<span class="cline-any cline-
|
|
1469
|
-
<span class="cline-any cline-
|
|
1473
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1474
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1475
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1470
1476
|
<span class="cline-any cline-no"> </span>
|
|
1471
1477
|
<span class="cline-any cline-neutral"> </span>
|
|
1472
|
-
<span class="cline-any cline-
|
|
1473
|
-
<span class="cline-any cline-
|
|
1474
|
-
<span class="cline-any cline-
|
|
1478
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1479
|
+
<span class="cline-any cline-yes">131x</span>
|
|
1480
|
+
<span class="cline-any cline-yes">131x</span>
|
|
1475
1481
|
<span class="cline-any cline-no"> </span>
|
|
1476
1482
|
<span class="cline-any cline-neutral"> </span>
|
|
1477
|
-
<span class="cline-any cline-
|
|
1483
|
+
<span class="cline-any cline-yes">131x</span>
|
|
1478
1484
|
<span class="cline-any cline-neutral"> </span>
|
|
1479
|
-
<span class="cline-any cline-
|
|
1480
|
-
<span class="cline-any cline-
|
|
1481
|
-
<span class="cline-any cline-
|
|
1485
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1486
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1487
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1482
1488
|
<span class="cline-any cline-no"> </span>
|
|
1483
1489
|
<span class="cline-any cline-neutral"> </span>
|
|
1484
1490
|
<span class="cline-any cline-neutral"> </span>
|
|
1485
|
-
<span class="cline-any cline-
|
|
1491
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1486
1492
|
<span class="cline-any cline-neutral"> </span>
|
|
1487
1493
|
<span class="cline-any cline-neutral"> </span>
|
|
1488
1494
|
<span class="cline-any cline-neutral"> </span>
|
|
1489
1495
|
<span class="cline-any cline-neutral"> </span>
|
|
1490
|
-
<span class="cline-any cline-
|
|
1491
|
-
<span class="cline-any cline-
|
|
1496
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1497
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1492
1498
|
<span class="cline-any cline-no"> </span>
|
|
1493
1499
|
<span class="cline-any cline-neutral"> </span>
|
|
1494
1500
|
<span class="cline-any cline-neutral"> </span>
|
|
1495
|
-
<span class="cline-any cline-
|
|
1496
|
-
<span class="cline-any cline-
|
|
1501
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1502
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1497
1503
|
<span class="cline-any cline-neutral"> </span>
|
|
1498
|
-
<span class="cline-any cline-
|
|
1499
|
-
<span class="cline-any cline-
|
|
1500
|
-
<span class="cline-any cline-
|
|
1504
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1505
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1506
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1501
1507
|
<span class="cline-any cline-neutral"> </span>
|
|
1502
1508
|
<span class="cline-any cline-neutral"> </span>
|
|
1503
1509
|
<span class="cline-any cline-neutral"> </span>
|
|
1504
1510
|
<span class="cline-any cline-no"> </span>
|
|
1505
1511
|
<span class="cline-any cline-neutral"> </span>
|
|
1506
|
-
<span class="cline-any cline-
|
|
1512
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1507
1513
|
<span class="cline-any cline-neutral"> </span>
|
|
1508
1514
|
<span class="cline-any cline-neutral"> </span>
|
|
1509
1515
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1527,18 +1533,20 @@
|
|
|
1527
1533
|
<span class="cline-any cline-neutral"> </span>
|
|
1528
1534
|
<span class="cline-any cline-neutral"> </span>
|
|
1529
1535
|
<span class="cline-any cline-neutral"> </span>
|
|
1530
|
-
<span class="cline-any cline-no"> </span>
|
|
1531
1536
|
<span class="cline-any cline-neutral"> </span>
|
|
1532
|
-
<span class="cline-any cline-no"> </span>
|
|
1533
|
-
<span class="cline-any cline-no"> </span>
|
|
1534
1537
|
<span class="cline-any cline-neutral"> </span>
|
|
1538
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1535
1539
|
<span class="cline-any cline-neutral"> </span>
|
|
1540
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1541
|
+
<span class="cline-any cline-yes">110x</span>
|
|
1536
1542
|
<span class="cline-any cline-neutral"> </span>
|
|
1537
1543
|
<span class="cline-any cline-neutral"> </span>
|
|
1538
1544
|
<span class="cline-any cline-neutral"> </span>
|
|
1539
|
-
<span class="cline-any cline-no"> </span>
|
|
1540
1545
|
<span class="cline-any cline-neutral"> </span>
|
|
1541
|
-
<span class="cline-any cline-
|
|
1546
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1547
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1548
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1549
|
+
<span class="cline-any cline-yes">132x</span>
|
|
1542
1550
|
<span class="cline-any cline-neutral"> </span>
|
|
1543
1551
|
<span class="cline-any cline-neutral"> </span>
|
|
1544
1552
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1555,6 +1563,7 @@
|
|
|
1555
1563
|
FieldSchema,
|
|
1556
1564
|
Row,
|
|
1557
1565
|
Table,
|
|
1566
|
+
RelationshipTypes,
|
|
1558
1567
|
} from "@budibase/types"
|
|
1559
1568
|
import {
|
|
1560
1569
|
breakRowIdField,
|
|
@@ -1563,7 +1572,7 @@ import {
|
|
|
1563
1572
|
convertRowId,
|
|
1564
1573
|
} from "../../../integrations/utils"
|
|
1565
1574
|
import { getDatasourceAndQuery } from "./utils"
|
|
1566
|
-
import { FieldTypes
|
|
1575
|
+
import { FieldTypes } from "../../../constants"
|
|
1567
1576
|
import { breakExternalTableId, isSQL } from "../../../integrations/utils"
|
|
1568
1577
|
import { processObjectSync } from "@budibase/string-templates"
|
|
1569
1578
|
import { cloneDeep } from "lodash/fp"
|
|
@@ -1589,22 +1598,23 @@ export interface RunConfig {
|
|
|
1589
1598
|
row?: Row
|
|
1590
1599
|
rows?: Row[]
|
|
1591
1600
|
tables?: Record<string, Table>
|
|
1601
|
+
includeSqlRelationships?: IncludeRelationship
|
|
1592
1602
|
}
|
|
1593
1603
|
|
|
1594
|
-
function
|
|
1604
|
+
function buildFilters(
|
|
1595
1605
|
id: string | undefined | string[],
|
|
1596
1606
|
filters: SearchFilters,
|
|
1597
1607
|
table: Table
|
|
1598
1608
|
) {
|
|
1599
|
-
const primary =
|
|
1609
|
+
const primary = table.primary
|
|
1600
1610
|
// if passed in array need to copy for shifting etc
|
|
1601
|
-
let idCopy: undefined | string | any[] =
|
|
1602
|
-
|
|
1611
|
+
let idCopy: undefined | string | any[] = cloneDeep(id)
|
|
1612
|
+
if (filters) {
|
|
1603
1613
|
// need to map over the filters and make sure the _id field isn't present
|
|
1604
|
-
let prefix =
|
|
1605
|
-
|
|
1606
|
-
<span class="
|
|
1607
|
-
|
|
1614
|
+
let prefix = 1
|
|
1615
|
+
for (let operator of Object.values(filters)) {
|
|
1616
|
+
for (let field of Object.keys(operator || <span class="branch-1 cbranch-no" title="branch not covered" >{})) {</span>
|
|
1617
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (removeKeyNumbering(field) === "_id") {
|
|
1608
1618
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (primary) {</span>
|
|
1609
1619
|
const parts = <span class="cstat-no" title="statement not covered" >breakRowIdField(operator[field])</span>
|
|
1610
1620
|
<span class="cstat-no" title="statement not covered" > for (let field of primary) {</span>
|
|
@@ -1619,21 +1629,21 @@ function <span class="fstat-no" title="function not covered" >buildFilters(</spa
|
|
|
1619
1629
|
}
|
|
1620
1630
|
}
|
|
1621
1631
|
// there is no id, just use the user provided filters
|
|
1622
|
-
|
|
1623
|
-
|
|
1632
|
+
if (!idCopy || !table) {
|
|
1633
|
+
return filters
|
|
1624
1634
|
}
|
|
1625
1635
|
// if used as URL parameter it will have been joined
|
|
1626
|
-
|
|
1627
|
-
|
|
1636
|
+
if (!Array.isArray(idCopy)) {
|
|
1637
|
+
idCopy = breakRowIdField(idCopy)
|
|
1628
1638
|
}
|
|
1629
|
-
const equal: any =
|
|
1630
|
-
|
|
1631
|
-
|
|
1639
|
+
const equal: any = {}
|
|
1640
|
+
if (primary && idCopy) {
|
|
1641
|
+
for (let field of primary) {
|
|
1632
1642
|
// work through the ID and get the parts
|
|
1633
|
-
|
|
1643
|
+
equal[field] = idCopy.shift()
|
|
1634
1644
|
}
|
|
1635
1645
|
}
|
|
1636
|
-
|
|
1646
|
+
return {
|
|
1637
1647
|
equal,
|
|
1638
1648
|
}
|
|
1639
1649
|
}
|
|
@@ -1646,63 +1656,63 @@ function <span class="fstat-no" title="function not covered" >buildFilters(</spa
|
|
|
1646
1656
|
* simplify it down to the requirements. This function is quite complex as we try to be
|
|
1647
1657
|
* relatively restrictive over what types of columns we will perform this action for.
|
|
1648
1658
|
*/
|
|
1649
|
-
function
|
|
1650
|
-
const primaryOptions =
|
|
1659
|
+
function cleanupConfig(config: RunConfig, table: Table): RunConfig {
|
|
1660
|
+
const primaryOptions = [
|
|
1651
1661
|
FieldTypes.STRING,
|
|
1652
1662
|
FieldTypes.LONGFORM,
|
|
1653
1663
|
FieldTypes.OPTIONS,
|
|
1654
1664
|
FieldTypes.NUMBER,
|
|
1655
1665
|
]
|
|
1656
1666
|
// filter out fields which cannot be keys
|
|
1657
|
-
const fieldNames =
|
|
1658
|
-
.filter(
|
|
1659
|
-
.map(
|
|
1660
|
-
const iterateObject =
|
|
1661
|
-
|
|
1662
|
-
|
|
1667
|
+
const fieldNames = Object.entries(table.schema)
|
|
1668
|
+
.filter(schema => primaryOptions.find(val => val === schema[1].type))
|
|
1669
|
+
.map(([fieldName]) => fieldName)
|
|
1670
|
+
const iterateObject = (obj: { [key: string]: any }) => {
|
|
1671
|
+
for (let [field, value] of Object.entries(obj)) {
|
|
1672
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (fieldNames.find(name => name === field) && isRowId(value)) {
|
|
1663
1673
|
<span class="cstat-no" title="statement not covered" > obj[field] = convertRowId(value)</span>
|
|
1664
1674
|
}
|
|
1665
1675
|
}
|
|
1666
1676
|
}
|
|
1667
1677
|
// check the row and filters to make sure they aren't a key of some sort
|
|
1668
|
-
|
|
1669
|
-
|
|
1678
|
+
if (config.filters) {
|
|
1679
|
+
for (let [key, filter] of Object.entries(config.filters)) {
|
|
1670
1680
|
// oneOf is an array, don't iterate it
|
|
1671
|
-
|
|
1681
|
+
if (
|
|
1672
1682
|
typeof filter !== "object" ||
|
|
1673
1683
|
Object.keys(filter).length === 0 ||
|
|
1674
1684
|
key === FilterType.ONE_OF
|
|
1675
1685
|
) {
|
|
1676
|
-
|
|
1686
|
+
continue
|
|
1677
1687
|
}
|
|
1678
|
-
|
|
1688
|
+
iterateObject(filter)
|
|
1679
1689
|
}
|
|
1680
1690
|
}
|
|
1681
|
-
|
|
1682
|
-
|
|
1691
|
+
if (config.row) {
|
|
1692
|
+
iterateObject(config.row)
|
|
1683
1693
|
}
|
|
1684
1694
|
|
|
1685
|
-
|
|
1695
|
+
return config
|
|
1686
1696
|
}
|
|
1687
1697
|
|
|
1688
|
-
function
|
|
1689
|
-
const primary =
|
|
1690
|
-
|
|
1691
|
-
|
|
1698
|
+
function generateIdForRow(row: Row | undefined, table: Table): string {
|
|
1699
|
+
const primary = table.primary
|
|
1700
|
+
if (!row || !primary) {
|
|
1701
|
+
return ""
|
|
1692
1702
|
}
|
|
1693
1703
|
// build id array
|
|
1694
|
-
let idParts =
|
|
1695
|
-
|
|
1704
|
+
let idParts = []
|
|
1705
|
+
for (let field of primary) {
|
|
1696
1706
|
// need to handle table name + field or just field, depending on if relationships used
|
|
1697
|
-
const fieldValue =
|
|
1698
|
-
|
|
1699
|
-
|
|
1707
|
+
const fieldValue = row[`${table.name}.${field}`] || row[field]
|
|
1708
|
+
if (fieldValue) {
|
|
1709
|
+
idParts.push(fieldValue)
|
|
1700
1710
|
}
|
|
1701
1711
|
}
|
|
1702
|
-
|
|
1703
|
-
|
|
1712
|
+
if (idParts.length === 0) {
|
|
1713
|
+
return ""
|
|
1704
1714
|
}
|
|
1705
|
-
|
|
1715
|
+
return generateRowIdField(idParts)
|
|
1706
1716
|
}
|
|
1707
1717
|
|
|
1708
1718
|
function <span class="fstat-no" title="function not covered" >getEndpoint(t</span>ableId: string | undefined, operation: string) {
|
|
@@ -1717,28 +1727,28 @@ function <span class="fstat-no" title="function not covered" >getEndpoint(t</spa
|
|
|
1717
1727
|
}
|
|
1718
1728
|
}
|
|
1719
1729
|
|
|
1720
|
-
function
|
|
1721
|
-
const thisRow: Row =
|
|
1730
|
+
function basicProcessing(row: Row, table: Table): Row {
|
|
1731
|
+
const thisRow: Row = {}
|
|
1722
1732
|
// filter the row down to what is actually the row (not joined)
|
|
1723
|
-
|
|
1724
|
-
const pathValue =
|
|
1725
|
-
const value =
|
|
1733
|
+
for (let fieldName of Object.keys(table.schema)) {
|
|
1734
|
+
const pathValue = row[`${table.name}.${fieldName}`]
|
|
1735
|
+
const value = pathValue != null ? pathValue : row[fieldName]
|
|
1726
1736
|
// all responses include "select col as table.col" so that overlaps are handled
|
|
1727
|
-
|
|
1728
|
-
|
|
1737
|
+
if (value != null) {
|
|
1738
|
+
thisRow[fieldName] = value
|
|
1729
1739
|
}
|
|
1730
1740
|
}
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1741
|
+
thisRow._id = generateIdForRow(row, table)
|
|
1742
|
+
thisRow.tableId = table._id
|
|
1743
|
+
thisRow._rev = "rev"
|
|
1744
|
+
return processFormulas(table, thisRow)
|
|
1735
1745
|
}
|
|
1736
1746
|
|
|
1737
|
-
function
|
|
1738
|
-
|
|
1739
|
-
|
|
1747
|
+
function fixArrayTypes(row: Row, table: Table) {
|
|
1748
|
+
for (let [fieldName, schema] of Object.entries(table.schema)) {
|
|
1749
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (
|
|
1740
1750
|
schema.type === FieldTypes.ARRAY &&
|
|
1741
|
-
typeof row[fieldName] === "string"
|
|
1751
|
+
<span class="branch-1 cbranch-no" title="branch not covered" > typeof row[fieldName] === "string"</span>
|
|
1742
1752
|
) {
|
|
1743
1753
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1744
1754
|
<span class="cstat-no" title="statement not covered" > row[fieldName] = JSON.parse(row[fieldName])</span>
|
|
@@ -1748,27 +1758,27 @@ function <span class="fstat-no" title="function not covered" >fixArrayTypes(r</s
|
|
|
1748
1758
|
}
|
|
1749
1759
|
}
|
|
1750
1760
|
}
|
|
1751
|
-
|
|
1761
|
+
return row
|
|
1752
1762
|
}
|
|
1753
1763
|
|
|
1754
|
-
function
|
|
1755
|
-
|
|
1764
|
+
function isOneSide(field: FieldSchema) {
|
|
1765
|
+
return (
|
|
1756
1766
|
field.relationshipType && field.relationshipType.split("-")[0] === "one"
|
|
1757
1767
|
)
|
|
1758
1768
|
}
|
|
1759
1769
|
|
|
1760
|
-
export class
|
|
1770
|
+
export class ExternalRequest {
|
|
1761
1771
|
private operation: Operation
|
|
1762
1772
|
private tableId: string
|
|
1763
1773
|
private datasource?: Datasource
|
|
1764
|
-
private
|
|
1774
|
+
private tables: { [key: string]: Table } = {}
|
|
1765
1775
|
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1776
|
+
constructor(operation: Operation, tableId: string, datasource?: Datasource) {
|
|
1777
|
+
this.operation = operation
|
|
1778
|
+
this.tableId = tableId
|
|
1779
|
+
this.datasource = datasource
|
|
1780
|
+
if (datasource && datasource.entities) {
|
|
1781
|
+
this.tables = datasource.entities
|
|
1772
1782
|
}
|
|
1773
1783
|
}
|
|
1774
1784
|
|
|
@@ -1782,38 +1792,38 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
1782
1792
|
}
|
|
1783
1793
|
}
|
|
1784
1794
|
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1795
|
+
inputProcessing(row: Row | undefined, table: Table) {
|
|
1796
|
+
if (!row) {
|
|
1797
|
+
return { row, manyRelationships: [] }
|
|
1788
1798
|
}
|
|
1789
1799
|
// we don't really support composite keys for relationships, this is why [0] is used
|
|
1790
1800
|
// @ts-ignore
|
|
1791
|
-
const tablePrimary: string =
|
|
1792
|
-
let newRow: Row =
|
|
1793
|
-
manyRelationships: ManyRelationship[] =
|
|
1794
|
-
|
|
1801
|
+
const tablePrimary: string = table.primary[0]
|
|
1802
|
+
let newRow: Row = {},
|
|
1803
|
+
manyRelationships: ManyRelationship[] = []
|
|
1804
|
+
for (let [key, field] of Object.entries(table.schema)) {
|
|
1795
1805
|
// if set already, or not set just skip it
|
|
1796
|
-
|
|
1806
|
+
if (
|
|
1797
1807
|
row[key] == null ||
|
|
1798
1808
|
newRow[key] ||
|
|
1799
1809
|
field.autocolumn ||
|
|
1800
1810
|
field.type === FieldTypes.FORMULA
|
|
1801
1811
|
) {
|
|
1802
|
-
|
|
1812
|
+
continue
|
|
1803
1813
|
}
|
|
1804
1814
|
// if its an empty string then it means return the column to null (if possible)
|
|
1805
|
-
|
|
1815
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (row[key] === "") {
|
|
1806
1816
|
<span class="cstat-no" title="statement not covered" > newRow[key] = null</span>
|
|
1807
1817
|
<span class="cstat-no" title="statement not covered" > continue</span>
|
|
1808
1818
|
}
|
|
1809
1819
|
// parse floats/numbers
|
|
1810
|
-
|
|
1811
|
-
|
|
1820
|
+
if (field.type === FieldTypes.NUMBER && !isNaN(parseFloat(row[key]))) {
|
|
1821
|
+
newRow[key] = parseFloat(row[key])
|
|
1812
1822
|
}
|
|
1813
1823
|
// if its not a link then just copy it over
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1824
|
+
if (field.type !== FieldTypes.LINK) {
|
|
1825
|
+
newRow[key] = row[key]
|
|
1826
|
+
continue
|
|
1817
1827
|
}
|
|
1818
1828
|
const { tableName: linkTableName } = <span class="cstat-no" title="statement not covered" >breakExternalTableId(field?.tableId)</span>
|
|
1819
1829
|
// table has to exist for many to many
|
|
@@ -1867,29 +1877,29 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
1867
1877
|
// we return the relationships that may need to be created in the through table
|
|
1868
1878
|
// we do this so that if the ID is generated by the DB it can be inserted
|
|
1869
1879
|
// after the fact
|
|
1870
|
-
|
|
1880
|
+
return { row: newRow, manyRelationships }
|
|
1871
1881
|
}
|
|
1872
1882
|
|
|
1873
|
-
|
|
1883
|
+
squashRelationshipColumns(
|
|
1874
1884
|
table: Table,
|
|
1875
1885
|
row: Row,
|
|
1876
1886
|
relationships: RelationshipsJson[]
|
|
1877
1887
|
): Row {
|
|
1878
|
-
|
|
1879
|
-
const linkedTable =
|
|
1880
|
-
|
|
1881
|
-
|
|
1888
|
+
for (let relationship of relationships) {
|
|
1889
|
+
const linkedTable = this.tables[relationship.tableName]
|
|
1890
|
+
if (!linkedTable || !row[relationship.column]) {
|
|
1891
|
+
continue
|
|
1882
1892
|
}
|
|
1883
|
-
const display =
|
|
1884
|
-
|
|
1885
|
-
const related: Row =
|
|
1886
|
-
|
|
1887
|
-
primaryDisplay: display ? related[display]
|
|
1893
|
+
const display = linkedTable.primaryDisplay
|
|
1894
|
+
for (let key of Object.keys(row[relationship.column])) {
|
|
1895
|
+
const related: Row = row[relationship.column][key]
|
|
1896
|
+
row[relationship.column][key] = {
|
|
1897
|
+
primaryDisplay: display ? <span class="branch-0 cbranch-no" title="branch not covered" >related[display] </span>: undefined,
|
|
1888
1898
|
_id: related._id,
|
|
1889
1899
|
}
|
|
1890
1900
|
}
|
|
1891
1901
|
}
|
|
1892
|
-
|
|
1902
|
+
return row
|
|
1893
1903
|
}
|
|
1894
1904
|
|
|
1895
1905
|
/**
|
|
@@ -1900,68 +1910,68 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
1900
1910
|
* will be separate rows, with all of the data in each row. We have to decipher what comes
|
|
1901
1911
|
* from where (which tables) and how to convert that into budibase columns.
|
|
1902
1912
|
*/
|
|
1903
|
-
|
|
1913
|
+
updateRelationshipColumns(
|
|
1904
1914
|
table: Table,
|
|
1905
1915
|
row: Row,
|
|
1906
1916
|
rows: { [key: string]: Row },
|
|
1907
1917
|
relationships: RelationshipsJson[]
|
|
1908
1918
|
) {
|
|
1909
|
-
const columns: { [key: string]: any } =
|
|
1910
|
-
|
|
1911
|
-
const linkedTable =
|
|
1912
|
-
|
|
1919
|
+
const columns: { [key: string]: any } = {}
|
|
1920
|
+
for (let relationship of relationships) {
|
|
1921
|
+
const linkedTable = this.tables[relationship.tableName]
|
|
1922
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!linkedTable) {
|
|
1913
1923
|
<span class="cstat-no" title="statement not covered" > continue</span>
|
|
1914
1924
|
}
|
|
1915
|
-
const fromColumn =
|
|
1916
|
-
const toColumn =
|
|
1925
|
+
const fromColumn = `${table.name}.${relationship.from}`
|
|
1926
|
+
const toColumn = `${linkedTable.name}.${relationship.to}`
|
|
1917
1927
|
// this is important when working with multiple relationships
|
|
1918
1928
|
// between the same tables, don't want to overlap/multiply the relations
|
|
1919
|
-
|
|
1929
|
+
if (
|
|
1920
1930
|
!relationship.through &&
|
|
1921
1931
|
row[fromColumn]?.toString() !== row[toColumn]?.toString()
|
|
1922
1932
|
) {
|
|
1923
|
-
|
|
1933
|
+
continue
|
|
1924
1934
|
}
|
|
1925
|
-
let linked =
|
|
1926
|
-
|
|
1927
|
-
|
|
1935
|
+
let linked = basicProcessing(row, linkedTable)
|
|
1936
|
+
if (!linked._id) {
|
|
1937
|
+
continue
|
|
1928
1938
|
}
|
|
1929
|
-
|
|
1939
|
+
columns[relationship.column] = linked
|
|
1930
1940
|
}
|
|
1931
|
-
|
|
1932
|
-
|
|
1941
|
+
for (let [column, related] of Object.entries(columns)) {
|
|
1942
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!row._id) {
|
|
1933
1943
|
<span class="cstat-no" title="statement not covered" > continue</span>
|
|
1934
1944
|
}
|
|
1935
|
-
const rowId: string =
|
|
1936
|
-
|
|
1937
|
-
|
|
1945
|
+
const rowId: string = row._id
|
|
1946
|
+
if (!Array.isArray(rows[rowId][column])) {
|
|
1947
|
+
rows[rowId][column] = []
|
|
1938
1948
|
}
|
|
1939
1949
|
// make sure relationship hasn't been found already
|
|
1940
|
-
|
|
1950
|
+
if (
|
|
1941
1951
|
!rows[rowId][column].find(
|
|
1942
1952
|
<span class="fstat-no" title="function not covered" > (r</span>elation: Row) => <span class="cstat-no" title="statement not covered" >relation._id === related._id</span>
|
|
1943
1953
|
)
|
|
1944
1954
|
) {
|
|
1945
|
-
|
|
1955
|
+
rows[rowId][column].push(related)
|
|
1946
1956
|
}
|
|
1947
1957
|
}
|
|
1948
|
-
|
|
1958
|
+
return rows
|
|
1949
1959
|
}
|
|
1950
1960
|
|
|
1951
|
-
|
|
1961
|
+
outputProcessing(
|
|
1952
1962
|
rows: Row[] = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span>
|
|
1953
1963
|
table: Table,
|
|
1954
1964
|
relationships: RelationshipsJson[]
|
|
1955
1965
|
) {
|
|
1956
|
-
|
|
1957
|
-
|
|
1966
|
+
if (!rows || rows.length === 0 || rows[0].read === true) {
|
|
1967
|
+
return []
|
|
1958
1968
|
}
|
|
1959
|
-
let finalRows: { [key: string]: Row } =
|
|
1960
|
-
|
|
1961
|
-
const rowId =
|
|
1962
|
-
|
|
1969
|
+
let finalRows: { [key: string]: Row } = {}
|
|
1970
|
+
for (let row of rows) {
|
|
1971
|
+
const rowId = generateIdForRow(row, table)
|
|
1972
|
+
row._id = rowId
|
|
1963
1973
|
// this is a relationship of some sort
|
|
1964
|
-
|
|
1974
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (finalRows[rowId]) {
|
|
1965
1975
|
<span class="cstat-no" title="statement not covered" > finalRows = this.updateRelationshipColumns(</span>
|
|
1966
1976
|
table,
|
|
1967
1977
|
row,
|
|
@@ -1970,13 +1980,13 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
1970
1980
|
)
|
|
1971
1981
|
<span class="cstat-no" title="statement not covered" > continue</span>
|
|
1972
1982
|
}
|
|
1973
|
-
const thisRow =
|
|
1974
|
-
|
|
1983
|
+
const thisRow = fixArrayTypes(basicProcessing(row, table), table)
|
|
1984
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (thisRow._id == null) {
|
|
1975
1985
|
<span class="cstat-no" title="statement not covered" > throw "Unable to generate row ID for SQL rows"</span>
|
|
1976
1986
|
}
|
|
1977
|
-
|
|
1987
|
+
finalRows[thisRow._id] = thisRow
|
|
1978
1988
|
// do this at end once its been added to the final rows
|
|
1979
|
-
|
|
1989
|
+
finalRows = this.updateRelationshipColumns(
|
|
1980
1990
|
table,
|
|
1981
1991
|
row,
|
|
1982
1992
|
finalRows,
|
|
@@ -1985,12 +1995,12 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
1985
1995
|
}
|
|
1986
1996
|
|
|
1987
1997
|
// Process some additional data types
|
|
1988
|
-
let finalRowArray =
|
|
1989
|
-
|
|
1990
|
-
|
|
1998
|
+
let finalRowArray = Object.values(finalRows)
|
|
1999
|
+
finalRowArray = processDates(table, finalRowArray)
|
|
2000
|
+
finalRowArray = processFormulas(table, finalRowArray) as Row[]
|
|
1991
2001
|
|
|
1992
|
-
|
|
1993
|
-
|
|
2002
|
+
return finalRowArray.map((row: Row) =>
|
|
2003
|
+
this.squashRelationshipColumns(table, row, relationships)
|
|
1994
2004
|
)
|
|
1995
2005
|
}
|
|
1996
2006
|
|
|
@@ -1999,30 +2009,30 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
1999
2009
|
* this will be used by the underlying library to build whatever relationship mechanism
|
|
2000
2010
|
* it has (e.g. SQL joins).
|
|
2001
2011
|
*/
|
|
2002
|
-
|
|
2003
|
-
const relationships =
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2012
|
+
buildRelationships(table: Table): RelationshipsJson[] {
|
|
2013
|
+
const relationships = []
|
|
2014
|
+
for (let [fieldName, field] of Object.entries(table.schema)) {
|
|
2015
|
+
if (field.type !== FieldTypes.LINK) {
|
|
2016
|
+
continue
|
|
2007
2017
|
}
|
|
2008
|
-
const { tableName: linkTableName } =
|
|
2018
|
+
const { tableName: linkTableName } = breakExternalTableId(field.tableId)
|
|
2009
2019
|
// no table to link to, this is not a valid relationships
|
|
2010
|
-
|
|
2020
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!linkTableName || !this.tables[linkTableName]) {
|
|
2011
2021
|
<span class="cstat-no" title="statement not covered" > continue</span>
|
|
2012
2022
|
}
|
|
2013
|
-
const linkTable =
|
|
2014
|
-
|
|
2023
|
+
const linkTable = this.tables[linkTableName]
|
|
2024
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!table.primary || !linkTable.primary) {
|
|
2015
2025
|
<span class="cstat-no" title="statement not covered" > continue</span>
|
|
2016
2026
|
}
|
|
2017
|
-
const definition: any =
|
|
2027
|
+
const definition: any = {
|
|
2018
2028
|
// if no foreign key specified then use the name of the field in other table
|
|
2019
|
-
from: field.foreignKey || table.primary[0]
|
|
2029
|
+
from: field.foreignKey || <span class="branch-1 cbranch-no" title="branch not covered" >table.primary[0],</span>
|
|
2020
2030
|
to: field.fieldName,
|
|
2021
2031
|
tableName: linkTableName,
|
|
2022
2032
|
// need to specify where to put this back into
|
|
2023
2033
|
column: fieldName,
|
|
2024
2034
|
}
|
|
2025
|
-
|
|
2035
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (field.through) {
|
|
2026
2036
|
const { tableName: throughTableName } = <span class="cstat-no" title="statement not covered" >breakExternalTableId(</span>
|
|
2027
2037
|
field.through
|
|
2028
2038
|
)
|
|
@@ -2033,33 +2043,33 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
2033
2043
|
<span class="cstat-no" title="statement not covered" > definition.fromPrimary = table.primary[0]</span>
|
|
2034
2044
|
<span class="cstat-no" title="statement not covered" > definition.toPrimary = linkTable.primary[0]</span>
|
|
2035
2045
|
}
|
|
2036
|
-
|
|
2046
|
+
relationships.push(definition)
|
|
2037
2047
|
}
|
|
2038
|
-
|
|
2048
|
+
return relationships
|
|
2039
2049
|
}
|
|
2040
2050
|
|
|
2041
2051
|
/**
|
|
2042
2052
|
* This is a cached lookup, of relationship records, this is mainly for creating/deleting junction
|
|
2043
2053
|
* information.
|
|
2044
2054
|
*/
|
|
2045
|
-
|
|
2046
|
-
const related: { [key: string]: any } =
|
|
2047
|
-
const { tableName } =
|
|
2048
|
-
|
|
2055
|
+
async lookupRelations(tableId: string, row: Row) {
|
|
2056
|
+
const related: { [key: string]: any } = {}
|
|
2057
|
+
const { tableName } = breakExternalTableId(tableId)
|
|
2058
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!tableName) {
|
|
2049
2059
|
<span class="cstat-no" title="statement not covered" > return related</span>
|
|
2050
2060
|
}
|
|
2051
|
-
const table =
|
|
2061
|
+
const table = this.tables[tableName]
|
|
2052
2062
|
// @ts-ignore
|
|
2053
|
-
const primaryKey =
|
|
2063
|
+
const primaryKey = table.primary[0]
|
|
2054
2064
|
// make a new request to get the row with all its relationships
|
|
2055
2065
|
// we need this to work out if any relationships need removed
|
|
2056
|
-
|
|
2057
|
-
|
|
2066
|
+
for (let field of Object.values(table.schema)) {
|
|
2067
|
+
if (
|
|
2058
2068
|
field.type !== FieldTypes.LINK ||
|
|
2059
2069
|
!field.fieldName ||
|
|
2060
2070
|
isOneSide(field)
|
|
2061
2071
|
) {
|
|
2062
|
-
|
|
2072
|
+
continue
|
|
2063
2073
|
}
|
|
2064
2074
|
const isMany = <span class="cstat-no" title="statement not covered" >field.relationshipType === RelationshipTypes.MANY_TO_MANY</span>
|
|
2065
2075
|
const tableId = <span class="cstat-no" title="statement not covered" >isMany ? field.through : field.tableId</span>
|
|
@@ -2085,7 +2095,7 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
2085
2095
|
const storeTo = <span class="cstat-no" title="statement not covered" >isMany ? field.throughFrom || linkPrimaryKey : fieldName</span>
|
|
2086
2096
|
<span class="cstat-no" title="statement not covered" > related[storeTo] = { rows, isMany, tableId }</span>
|
|
2087
2097
|
}
|
|
2088
|
-
|
|
2098
|
+
return related
|
|
2089
2099
|
}
|
|
2090
2100
|
|
|
2091
2101
|
/**
|
|
@@ -2098,15 +2108,15 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
2098
2108
|
* isn't supposed to exist anymore and delete those. This is better than the usual method of delete them
|
|
2099
2109
|
* all and then re-create, as theres no chance of losing data (e.g. delete succeed, but write fail).
|
|
2100
2110
|
*/
|
|
2101
|
-
|
|
2111
|
+
async handleManyRelationships(
|
|
2102
2112
|
mainTableId: string,
|
|
2103
2113
|
row: Row,
|
|
2104
2114
|
relationships: ManyRelationship[]
|
|
2105
2115
|
) {
|
|
2106
2116
|
// if we're creating (in a through table) need to wipe the existing ones first
|
|
2107
|
-
const promises =
|
|
2108
|
-
const related =
|
|
2109
|
-
|
|
2117
|
+
const promises = []
|
|
2118
|
+
const related = await this.lookupRelations(mainTableId, row)
|
|
2119
|
+
for (let relationship of relationships) {
|
|
2110
2120
|
const { key, tableId, isUpdate, id, ...rest } = <span class="cstat-no" title="statement not covered" >relationship</span>
|
|
2111
2121
|
const body: { [key: string]: any } = <span class="cstat-no" title="statement not covered" >processObjectSync(rest, row, {})</span>
|
|
2112
2122
|
const linkTable = <span class="cstat-no" title="statement not covered" >this.getTable(tableId)</span>
|
|
@@ -2137,7 +2147,7 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
2137
2147
|
}
|
|
2138
2148
|
}
|
|
2139
2149
|
// finally cleanup anything that needs to be removed
|
|
2140
|
-
|
|
2150
|
+
for (let [colName, { isMany, rows, tableId }] of Object.entries(related)) {
|
|
2141
2151
|
const table: Table | undefined = <span class="cstat-no" title="statement not covered" >this.getTable(tableId)</span>
|
|
2142
2152
|
// if its not the foreign key skip it, nothing to do
|
|
2143
2153
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
@@ -2162,7 +2172,7 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
2162
2172
|
}
|
|
2163
2173
|
}
|
|
2164
2174
|
}
|
|
2165
|
-
|
|
2175
|
+
await Promise.all(promises)
|
|
2166
2176
|
}
|
|
2167
2177
|
|
|
2168
2178
|
/**
|
|
@@ -2172,78 +2182,78 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
2172
2182
|
* Creating the specific list of fields that we desire, and excluding the ones that are no use to us
|
|
2173
2183
|
* is more performant and has the added benefit of protecting against this scenario.
|
|
2174
2184
|
*/
|
|
2175
|
-
|
|
2185
|
+
buildFields(
|
|
2176
2186
|
table: Table,
|
|
2177
2187
|
includeRelations: IncludeRelationship = <span class="branch-0 cbranch-no" title="branch not covered" >IncludeRelationship.INCLUDE</span>
|
|
2178
2188
|
) {
|
|
2179
|
-
function
|
|
2180
|
-
|
|
2189
|
+
function extractRealFields(table: Table, existing: string[] = []) {
|
|
2190
|
+
return Object.entries(table.schema)
|
|
2181
2191
|
.filter(
|
|
2182
|
-
|
|
2183
|
-
|
|
2192
|
+
column =>
|
|
2193
|
+
column[1].type !== FieldTypes.LINK &&
|
|
2184
2194
|
column[1].type !== FieldTypes.FORMULA &&
|
|
2185
|
-
!existing.find(
|
|
2195
|
+
!existing.find((field: string) => field === column[0])
|
|
2186
2196
|
)
|
|
2187
|
-
.map(
|
|
2197
|
+
.map(column => `${table.name}.${column[0]}`)
|
|
2188
2198
|
}
|
|
2189
|
-
let fields =
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2199
|
+
let fields = extractRealFields(table)
|
|
2200
|
+
for (let field of Object.values(table.schema)) {
|
|
2201
|
+
if (field.type !== FieldTypes.LINK || !includeRelations) {
|
|
2202
|
+
continue
|
|
2193
2203
|
}
|
|
2194
|
-
const { tableName: linkTableName } =
|
|
2195
|
-
|
|
2196
|
-
const linkTable =
|
|
2197
|
-
|
|
2198
|
-
const linkedFields =
|
|
2199
|
-
|
|
2204
|
+
const { tableName: linkTableName } = breakExternalTableId(field.tableId)
|
|
2205
|
+
if (linkTableName) {
|
|
2206
|
+
const linkTable = this.tables[linkTableName]
|
|
2207
|
+
if (linkTable) {
|
|
2208
|
+
const linkedFields = extractRealFields(linkTable, fields)
|
|
2209
|
+
fields = fields.concat(linkedFields)
|
|
2200
2210
|
}
|
|
2201
2211
|
}
|
|
2202
2212
|
}
|
|
2203
|
-
|
|
2213
|
+
return fields
|
|
2204
2214
|
}
|
|
2205
2215
|
|
|
2206
|
-
|
|
2207
|
-
const { operation, tableId } =
|
|
2208
|
-
let { datasourceId, tableName } =
|
|
2209
|
-
|
|
2216
|
+
async run(config: RunConfig) {
|
|
2217
|
+
const { operation, tableId } = this
|
|
2218
|
+
let { datasourceId, tableName } = breakExternalTableId(tableId)
|
|
2219
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!tableName) {
|
|
2210
2220
|
<span class="cstat-no" title="statement not covered" > throw "Unable to run without a table name"</span>
|
|
2211
2221
|
}
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2222
|
+
if (!this.datasource) {
|
|
2223
|
+
this.datasource = await sdk.datasources.get(datasourceId!)
|
|
2224
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!this.datasource || !this.datasource.entities) {
|
|
2215
2225
|
<span class="cstat-no" title="statement not covered" > throw "No tables found, fetch tables before query."</span>
|
|
2216
2226
|
}
|
|
2217
|
-
|
|
2227
|
+
this.tables = this.datasource.entities
|
|
2218
2228
|
}
|
|
2219
|
-
const table =
|
|
2220
|
-
let isSql =
|
|
2221
|
-
|
|
2229
|
+
const table = this.tables[tableName]
|
|
2230
|
+
let isSql = isSQL(this.datasource)
|
|
2231
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!table) {
|
|
2222
2232
|
<span class="cstat-no" title="statement not covered" > throw `Unable to process query, table "${tableName}" not defined.`</span>
|
|
2223
2233
|
}
|
|
2224
2234
|
// look for specific components of config which may not be considered acceptable
|
|
2225
|
-
let { id, row, filters, sort, paginate, rows } =
|
|
2235
|
+
let { id, row, filters, sort, paginate, rows } = cleanupConfig(
|
|
2226
2236
|
config,
|
|
2227
2237
|
table
|
|
2228
2238
|
)
|
|
2229
2239
|
//if the sort column is a formula, remove it
|
|
2230
|
-
|
|
2231
|
-
|
|
2240
|
+
for (let sortColumn of Object.keys(sort || {})) {
|
|
2241
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (table.schema[sortColumn]?.type === "formula") {
|
|
2232
2242
|
<span class="cstat-no" title="statement not covered" > delete sort?.[sortColumn]</span>
|
|
2233
2243
|
}
|
|
2234
2244
|
}
|
|
2235
|
-
|
|
2236
|
-
const relationships =
|
|
2245
|
+
filters = buildFilters(id, filters || {}, table)
|
|
2246
|
+
const relationships = this.buildRelationships(table)
|
|
2237
2247
|
// clean up row on ingress using schema
|
|
2238
|
-
const processed =
|
|
2239
|
-
|
|
2240
|
-
|
|
2248
|
+
const processed = this.inputProcessing(row, table)
|
|
2249
|
+
row = processed.row
|
|
2250
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (
|
|
2241
2251
|
operation === Operation.DELETE &&
|
|
2242
2252
|
(filters == null || Object.keys(filters).length === 0)
|
|
2243
2253
|
) {
|
|
2244
2254
|
<span class="cstat-no" title="statement not covered" > throw "Deletion must be filtered"</span>
|
|
2245
2255
|
}
|
|
2246
|
-
let json =
|
|
2256
|
+
let json = {
|
|
2247
2257
|
endpoint: {
|
|
2248
2258
|
datasourceId,
|
|
2249
2259
|
entityId: tableName,
|
|
@@ -2251,7 +2261,9 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
2251
2261
|
},
|
|
2252
2262
|
resource: {
|
|
2253
2263
|
// have to specify the fields to avoid column overlap (for SQL)
|
|
2254
|
-
fields: isSql
|
|
2264
|
+
fields: isSql
|
|
2265
|
+
? this.buildFields(table, config.includeSqlRelationships)
|
|
2266
|
+
: <span class="branch-1 cbranch-no" title="branch not covered" >[],</span>
|
|
2255
2267
|
},
|
|
2256
2268
|
filters,
|
|
2257
2269
|
sort,
|
|
@@ -2267,18 +2279,18 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
2267
2279
|
},
|
|
2268
2280
|
}
|
|
2269
2281
|
// can't really use response right now
|
|
2270
|
-
const response =
|
|
2282
|
+
const response = await getDatasourceAndQuery(json)
|
|
2271
2283
|
// handle many to many relationships now if we know the ID (could be auto increment)
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
table._id || ""
|
|
2284
|
+
if (operation !== Operation.READ && processed.manyRelationships) {
|
|
2285
|
+
await this.handleManyRelationships(
|
|
2286
|
+
table._id || <span class="branch-1 cbranch-no" title="branch not covered" >"",</span>
|
|
2275
2287
|
response[0],
|
|
2276
2288
|
processed.manyRelationships
|
|
2277
2289
|
)
|
|
2278
2290
|
}
|
|
2279
|
-
const output =
|
|
2291
|
+
const output = this.outputProcessing(response, table, relationships)
|
|
2280
2292
|
// if reading it'll just be an array of rows, return whole thing
|
|
2281
|
-
|
|
2293
|
+
return operation === Operation.READ && Array.isArray(response)
|
|
2282
2294
|
? output
|
|
2283
2295
|
: { row: output[0], table }
|
|
2284
2296
|
}
|
|
@@ -2290,7 +2302,7 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
2290
2302
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
2291
2303
|
Code coverage generated by
|
|
2292
2304
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2293
|
-
at Fri Feb 10 2023 13:
|
|
2305
|
+
at Fri Feb 10 2023 19:13:10 GMT+0000 (Coordinated Universal Time)
|
|
2294
2306
|
</div>
|
|
2295
2307
|
<script src="../../../../prettify.js"></script>
|
|
2296
2308
|
<script>
|