directus 9.22.4 → 9.23.3
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/dist/app.js +19 -14
- package/dist/auth/auth.d.ts +3 -3
- package/dist/auth/auth.js +2 -0
- package/dist/auth/drivers/ldap.d.ts +2 -2
- package/dist/auth/drivers/ldap.js +47 -36
- package/dist/auth/drivers/local.d.ts +1 -1
- package/dist/auth/drivers/local.js +13 -10
- package/dist/auth/drivers/oauth2.d.ts +1 -1
- package/dist/auth/drivers/oauth2.js +22 -15
- package/dist/auth/drivers/openid.d.ts +1 -1
- package/dist/auth/drivers/openid.js +23 -16
- package/dist/auth/drivers/saml.d.ts +1 -1
- package/dist/auth/drivers/saml.js +10 -7
- package/dist/auth.d.ts +1 -1
- package/dist/auth.js +4 -4
- package/dist/cache.d.ts +9 -1
- package/dist/cache.js +59 -16
- package/dist/cli/commands/bootstrap/index.js +2 -2
- package/dist/cli/commands/init/index.js +3 -3
- package/dist/cli/commands/schema/apply.js +21 -20
- package/dist/cli/commands/schema/snapshot.js +2 -2
- package/dist/cli/utils/create-db-connection.d.ts +2 -1
- package/dist/cli/utils/create-db-connection.js +2 -1
- package/dist/cli/utils/create-env/env-stub.liquid +1 -1
- package/dist/cli/utils/create-env/index.d.ts +2 -2
- package/dist/cli/utils/drivers.d.ts +3 -9
- package/dist/constants.d.ts +3 -9
- package/dist/constants.js +5 -10
- package/dist/controllers/activity.js +1 -2
- package/dist/controllers/assets.js +17 -12
- package/dist/controllers/auth.js +29 -15
- package/dist/controllers/dashboards.js +5 -2
- package/dist/controllers/extensions.js +7 -7
- package/dist/controllers/fields.js +4 -4
- package/dist/controllers/files.js +11 -6
- package/dist/controllers/flows.js +5 -2
- package/dist/controllers/folders.js +5 -2
- package/dist/controllers/graphql.js +6 -0
- package/dist/controllers/items.js +5 -2
- package/dist/controllers/not-found.d.ts +1 -1
- package/dist/controllers/not-found.js +1 -2
- package/dist/controllers/notifications.js +5 -2
- package/dist/controllers/operations.js +5 -2
- package/dist/controllers/panels.js +5 -2
- package/dist/controllers/permissions.js +5 -2
- package/dist/controllers/presets.js +5 -2
- package/dist/controllers/roles.js +5 -2
- package/dist/controllers/schema.d.ts +2 -0
- package/dist/controllers/schema.js +98 -0
- package/dist/controllers/shares.js +8 -5
- package/dist/controllers/users.js +16 -20
- package/dist/controllers/utils.js +6 -11
- package/dist/controllers/webhooks.js +5 -2
- package/dist/database/helpers/fn/dialects/mssql.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/mssql.js +10 -11
- package/dist/database/helpers/fn/dialects/mysql.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/mysql.js +2 -3
- package/dist/database/helpers/fn/dialects/oracle.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/oracle.js +10 -11
- package/dist/database/helpers/fn/dialects/postgres.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/postgres.js +10 -11
- package/dist/database/helpers/fn/dialects/sqlite.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/sqlite.js +10 -11
- package/dist/database/helpers/fn/types.d.ts +5 -5
- package/dist/database/helpers/fn/types.js +5 -4
- package/dist/database/helpers/geometry/dialects/mssql.d.ts +3 -3
- package/dist/database/helpers/geometry/dialects/mysql.d.ts +1 -1
- package/dist/database/helpers/geometry/dialects/oracle.d.ts +3 -3
- package/dist/database/helpers/geometry/dialects/postgres.d.ts +3 -3
- package/dist/database/helpers/geometry/dialects/postgres.js +1 -2
- package/dist/database/helpers/geometry/dialects/redshift.d.ts +2 -2
- package/dist/database/helpers/geometry/dialects/sqlite.d.ts +1 -1
- package/dist/database/helpers/geometry/types.d.ts +2 -2
- package/dist/database/helpers/geometry/types.js +1 -2
- package/dist/database/helpers/index.d.ts +5 -5
- package/dist/database/helpers/schema/dialects/cockroachdb.d.ts +2 -2
- package/dist/database/helpers/schema/dialects/mssql.d.ts +1 -1
- package/dist/database/helpers/schema/dialects/mysql.d.ts +1 -1
- package/dist/database/helpers/schema/dialects/mysql.js +1 -2
- package/dist/database/helpers/schema/dialects/oracle.d.ts +5 -2
- package/dist/database/helpers/schema/dialects/oracle.js +23 -0
- package/dist/database/helpers/schema/types.d.ts +9 -7
- package/dist/database/helpers/schema/types.js +7 -1
- package/dist/database/helpers/types.d.ts +1 -1
- package/dist/database/helpers/types.js +1 -0
- package/dist/database/index.d.ts +2 -1
- package/dist/database/index.js +8 -8
- package/dist/database/migrations/20201028A-remove-collection-foreign-keys.d.ts +1 -1
- package/dist/database/migrations/20201029A-remove-system-relations.d.ts +1 -1
- package/dist/database/migrations/20201029B-remove-system-collections.d.ts +1 -1
- package/dist/database/migrations/20201029C-remove-system-fields.d.ts +1 -1
- package/dist/database/migrations/20201105A-add-cascade-system-relations.d.ts +1 -1
- package/dist/database/migrations/20201105B-change-webhook-url-type.d.ts +1 -1
- package/dist/database/migrations/20210225A-add-relations-sort-field.d.ts +1 -1
- package/dist/database/migrations/20210225A-add-relations-sort-field.js +1 -2
- package/dist/database/migrations/20210304A-remove-locked-fields.d.ts +1 -1
- package/dist/database/migrations/20210312A-webhooks-collections-text.d.ts +1 -1
- package/dist/database/migrations/20210331A-add-refresh-interval.d.ts +1 -1
- package/dist/database/migrations/20210415A-make-filesize-nullable.d.ts +1 -1
- package/dist/database/migrations/20210416A-add-collections-accountability.d.ts +1 -1
- package/dist/database/migrations/20210422A-remove-files-interface.d.ts +1 -1
- package/dist/database/migrations/20210506A-rename-interfaces.d.ts +1 -1
- package/dist/database/migrations/20210510A-restructure-relations.d.ts +1 -1
- package/dist/database/migrations/20210518A-add-foreign-key-constraints.d.ts +1 -1
- package/dist/database/migrations/20210518A-add-foreign-key-constraints.js +1 -1
- package/dist/database/migrations/20210519A-add-system-fk-triggers.d.ts +1 -1
- package/dist/database/migrations/20210519A-add-system-fk-triggers.js +2 -2
- package/dist/database/migrations/20210521A-add-collections-icon-color.d.ts +1 -1
- package/dist/database/migrations/20210525A-add-insights.d.ts +1 -1
- package/dist/database/migrations/20210608A-add-deep-clone-config.d.ts +1 -1
- package/dist/database/migrations/20210626A-change-filesize-bigint.d.ts +1 -1
- package/dist/database/migrations/20210716A-add-conditions-to-fields.d.ts +1 -1
- package/dist/database/migrations/20210721A-add-default-folder.d.ts +1 -1
- package/dist/database/migrations/20210802A-replace-groups.d.ts +1 -1
- package/dist/database/migrations/20210803A-add-required-to-fields.d.ts +1 -1
- package/dist/database/migrations/20210805A-update-groups.d.ts +1 -1
- package/dist/database/migrations/20210805B-change-image-metadata-structure.d.ts +1 -1
- package/dist/database/migrations/20210811A-add-geometry-config.d.ts +1 -1
- package/dist/database/migrations/20210831A-remove-limit-column.d.ts +1 -1
- package/dist/database/migrations/20210903A-add-auth-provider.d.ts +1 -1
- package/dist/database/migrations/20210907A-webhooks-collections-not-null.d.ts +1 -1
- package/dist/database/migrations/20210910A-move-module-setup.d.ts +1 -1
- package/dist/database/migrations/20210920A-webhooks-url-not-null.d.ts +1 -1
- package/dist/database/migrations/20210924A-add-collection-organization.d.ts +1 -1
- package/dist/database/migrations/20210927A-replace-fields-group.d.ts +1 -1
- package/dist/database/migrations/20210927B-replace-m2m-interface.d.ts +1 -1
- package/dist/database/migrations/20210929A-rename-login-action.d.ts +1 -1
- package/dist/database/migrations/20211007A-update-presets.d.ts +1 -1
- package/dist/database/migrations/20211007A-update-presets.js +7 -9
- package/dist/database/migrations/20211009A-add-auth-data.d.ts +1 -1
- package/dist/database/migrations/20211016A-add-webhook-headers.d.ts +1 -1
- package/dist/database/migrations/20211103A-set-unique-to-user-token.d.ts +1 -1
- package/dist/database/migrations/20211103B-update-special-geometry.d.ts +1 -1
- package/dist/database/migrations/20211104A-remove-collections-listing.d.ts +1 -1
- package/dist/database/migrations/20211118A-add-notifications.d.ts +1 -1
- package/dist/database/migrations/20211211A-add-shares.d.ts +1 -1
- package/dist/database/migrations/20211230A-add-project-descriptor.d.ts +1 -1
- package/dist/database/migrations/20220303A-remove-default-project-color.d.ts +1 -1
- package/dist/database/migrations/20220308A-add-bookmark-icon-and-color.d.ts +1 -1
- package/dist/database/migrations/20220314A-add-translation-strings.d.ts +1 -1
- package/dist/database/migrations/20220322A-rename-field-typecast-flags.d.ts +1 -1
- package/dist/database/migrations/20220323A-add-field-validation.d.ts +1 -1
- package/dist/database/migrations/20220325A-fix-typecast-flags.d.ts +1 -1
- package/dist/database/migrations/20220325B-add-default-language.d.ts +1 -1
- package/dist/database/migrations/20220402A-remove-default-value-panel-icon.d.ts +1 -1
- package/dist/database/migrations/20220429A-add-flows.d.ts +1 -1
- package/dist/database/migrations/20220429B-add-color-to-insights-icon.d.ts +1 -1
- package/dist/database/migrations/20220429C-drop-non-null-from-ip-of-activity.d.ts +1 -1
- package/dist/database/migrations/20220429D-drop-non-null-from-sender-of-notifications.d.ts +1 -1
- package/dist/database/migrations/20220614A-rename-hook-trigger-to-event.d.ts +1 -1
- package/dist/database/migrations/20220801A-update-notifications-timestamp-column.d.ts +1 -1
- package/dist/database/migrations/20220802A-add-custom-aspect-ratios.d.ts +1 -1
- package/dist/database/migrations/20220826A-add-origin-to-accountability.d.ts +1 -1
- package/dist/database/migrations/run.d.ts +1 -1
- package/dist/database/run-ast.d.ts +3 -3
- package/dist/database/run-ast.js +19 -28
- package/dist/database/seeds/run.d.ts +1 -1
- package/dist/database/seeds/run.js +1 -2
- package/dist/database/system-data/app-access-permissions/index.d.ts +1 -1
- package/dist/database/system-data/collections/index.d.ts +1 -1
- package/dist/database/system-data/fields/collections.yaml +2 -0
- package/dist/database/system-data/fields/index.d.ts +1 -1
- package/dist/database/system-data/fields/index.js +1 -2
- package/dist/database/system-data/fields/settings.yaml +4 -0
- package/dist/database/system-data/relations/index.d.ts +1 -1
- package/dist/emitter.d.ts +1 -1
- package/dist/emitter.js +3 -0
- package/dist/env.js +19 -4
- package/dist/exceptions/database/dialects/mssql.d.ts +1 -1
- package/dist/exceptions/database/dialects/mssql.js +5 -6
- package/dist/exceptions/database/dialects/mysql.d.ts +1 -1
- package/dist/exceptions/database/dialects/mysql.js +19 -25
- package/dist/exceptions/database/dialects/oracle.d.ts +1 -1
- package/dist/exceptions/database/dialects/postgres.d.ts +1 -1
- package/dist/exceptions/database/dialects/sqlite.d.ts +1 -1
- package/dist/exceptions/database/translate.d.ts +1 -1
- package/dist/exceptions/database/value-out-of-range.js +1 -1
- package/dist/exceptions/range-not-satisfiable.js +2 -3
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.js +34 -24
- package/dist/flows.js +56 -30
- package/dist/logger.d.ts +1 -1
- package/dist/logger.js +19 -3
- package/dist/messenger.js +8 -6
- package/dist/middleware/authenticate.d.ts +1 -1
- package/dist/middleware/authenticate.js +12 -5
- package/dist/middleware/cache.d.ts +1 -1
- package/dist/middleware/cache.js +7 -7
- package/dist/middleware/check-ip.d.ts +1 -1
- package/dist/middleware/check-ip.js +1 -1
- package/dist/middleware/collection-exists.d.ts +1 -1
- package/dist/middleware/collection-exists.js +2 -2
- package/dist/middleware/cors.d.ts +1 -1
- package/dist/middleware/error-handler.d.ts +1 -1
- package/dist/middleware/error-handler.js +9 -10
- package/dist/middleware/extract-token.d.ts +1 -1
- package/dist/middleware/get-permissions.d.ts +1 -1
- package/dist/middleware/graphql.d.ts +1 -1
- package/dist/middleware/graphql.js +3 -3
- package/dist/middleware/rate-limiter-global.d.ts +5 -0
- package/dist/middleware/rate-limiter-global.js +48 -0
- package/dist/middleware/{rate-limiter.d.ts → rate-limiter-ip.d.ts} +2 -2
- package/dist/middleware/{rate-limiter.js → rate-limiter-ip.js} +3 -3
- package/dist/middleware/respond.d.ts +1 -1
- package/dist/middleware/respond.js +18 -14
- package/dist/middleware/sanitize-query.d.ts +1 -1
- package/dist/middleware/schema.d.ts +1 -1
- package/dist/middleware/use-collection.d.ts +1 -1
- package/dist/operations/condition/index.d.ts +1 -1
- package/dist/operations/exec/index.js +14 -3
- package/dist/operations/item-create/index.js +1 -2
- package/dist/operations/item-delete/index.d.ts +1 -1
- package/dist/operations/item-read/index.d.ts +1 -1
- package/dist/operations/item-update/index.d.ts +1 -1
- package/dist/operations/item-update/index.js +1 -2
- package/dist/operations/notification/index.js +1 -2
- package/dist/operations/request/index.js +21 -20
- package/dist/operations/trigger/index.d.ts +2 -0
- package/dist/operations/trigger/index.js +27 -11
- package/dist/rate-limiter.d.ts +1 -1
- package/dist/rate-limiter.js +8 -8
- package/dist/request/index.d.ts +5 -0
- package/dist/request/index.js +18 -0
- package/dist/request/index.test.d.ts +1 -0
- package/dist/request/request-interceptor.d.ts +2 -0
- package/dist/request/request-interceptor.js +33 -0
- package/dist/request/request-interceptor.test.d.ts +1 -0
- package/dist/request/response-interceptor.d.ts +2 -0
- package/dist/request/response-interceptor.js +9 -0
- package/dist/request/response-interceptor.test.d.ts +1 -0
- package/dist/request/validate-ip.d.ts +1 -0
- package/dist/request/validate-ip.js +27 -0
- package/dist/request/validate-ip.test.d.ts +1 -0
- package/dist/server.js +8 -9
- package/dist/services/activity.d.ts +1 -1
- package/dist/services/activity.js +7 -6
- package/dist/services/assets.d.ts +3 -3
- package/dist/services/assets.js +33 -26
- package/dist/services/authentication.d.ts +2 -2
- package/dist/services/authentication.js +18 -15
- package/dist/services/authorization.d.ts +3 -3
- package/dist/services/authorization.js +27 -31
- package/dist/services/collections.d.ts +5 -5
- package/dist/services/collections.js +52 -48
- package/dist/services/dashboards.d.ts +1 -1
- package/dist/services/fields.d.ts +5 -5
- package/dist/services/fields.js +49 -48
- package/dist/services/files.d.ts +1 -2
- package/dist/services/files.js +70 -108
- package/dist/services/flows.d.ts +2 -2
- package/dist/services/folders.d.ts +1 -1
- package/dist/services/graphql/index.d.ts +4 -4
- package/dist/services/graphql/index.js +181 -170
- package/dist/services/graphql/utils/add-path-to-validation-error.js +1 -2
- package/dist/services/graphql/utils/process-error.d.ts +2 -2
- package/dist/services/graphql/utils/process-error.js +29 -9
- package/dist/services/import-export.d.ts +7 -5
- package/dist/services/import-export.js +41 -24
- package/dist/services/import-export.test.d.ts +1 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.js +1 -0
- package/dist/services/items.d.ts +3 -3
- package/dist/services/items.js +67 -42
- package/dist/services/mail/index.d.ts +4 -4
- package/dist/services/mail/index.js +9 -5
- package/dist/services/meta.d.ts +3 -3
- package/dist/services/meta.js +10 -9
- package/dist/services/notifications.d.ts +3 -3
- package/dist/services/notifications.js +7 -6
- package/dist/services/operations.d.ts +2 -2
- package/dist/services/panels.d.ts +1 -1
- package/dist/services/payload.d.ts +3 -3
- package/dist/services/payload.js +124 -122
- package/dist/services/permissions.d.ts +3 -3
- package/dist/services/permissions.js +11 -11
- package/dist/services/presets.d.ts +1 -1
- package/dist/services/relations.d.ts +6 -6
- package/dist/services/relations.js +47 -43
- package/dist/services/revisions.d.ts +1 -1
- package/dist/services/roles.d.ts +2 -2
- package/dist/services/roles.js +34 -13
- package/dist/services/schema.d.ts +15 -0
- package/dist/services/schema.js +56 -0
- package/dist/services/schema.test.d.ts +1 -0
- package/dist/services/server.d.ts +3 -3
- package/dist/services/server.js +69 -13
- package/dist/services/settings.d.ts +1 -1
- package/dist/services/shares.d.ts +2 -2
- package/dist/services/shares.js +14 -15
- package/dist/services/specifications.d.ts +4 -4
- package/dist/services/specifications.js +132 -116
- package/dist/services/tfa.d.ts +2 -2
- package/dist/services/tfa.js +7 -5
- package/dist/services/users.d.ts +3 -3
- package/dist/services/users.js +89 -62
- package/dist/services/utils.d.ts +3 -3
- package/dist/services/utils.js +10 -8
- package/dist/services/webhooks.d.ts +2 -2
- package/dist/services/webhooks.js +2 -1
- package/dist/types/assets.d.ts +2 -2
- package/dist/types/ast.d.ts +1 -1
- package/dist/types/auth.d.ts +2 -2
- package/dist/types/collection.d.ts +2 -2
- package/dist/types/database.d.ts +3 -0
- package/dist/types/database.js +4 -0
- package/dist/types/events.d.ts +2 -2
- package/dist/types/graphql.d.ts +2 -2
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/items.d.ts +7 -2
- package/dist/types/services.d.ts +5 -5
- package/dist/types/snapshot.d.ts +25 -3
- package/dist/types/snapshot.js +14 -0
- package/dist/utils/apply-diff.d.ts +9 -0
- package/dist/utils/apply-diff.js +256 -0
- package/dist/utils/apply-diff.test.d.ts +1 -0
- package/dist/utils/apply-query.d.ts +3 -3
- package/dist/utils/apply-query.js +15 -16
- package/dist/utils/apply-snapshot.d.ts +3 -5
- package/dist/utils/apply-snapshot.js +9 -240
- package/dist/utils/construct-flow-tree.d.ts +1 -1
- package/dist/utils/construct-flow-tree.js +2 -2
- package/dist/utils/filter-items.d.ts +1 -1
- package/dist/utils/get-accountability-for-role.d.ts +2 -2
- package/dist/utils/get-accountability-for-role.js +1 -1
- package/dist/utils/get-ast-from-query.d.ts +3 -3
- package/dist/utils/get-ast-from-query.js +22 -28
- package/dist/utils/get-cache-headers.d.ts +4 -2
- package/dist/utils/get-cache-headers.js +21 -21
- package/dist/utils/get-cache-headers.test.d.ts +1 -0
- package/dist/utils/get-cache-key.d.ts +1 -1
- package/dist/utils/get-cache-key.js +2 -3
- package/dist/utils/get-collection-from-alias.d.ts +1 -1
- package/dist/utils/get-column-path.d.ts +2 -2
- package/dist/utils/get-column-path.js +3 -4
- package/dist/utils/get-column.d.ts +4 -4
- package/dist/utils/get-column.js +4 -5
- package/dist/utils/get-default-value.d.ts +2 -2
- package/dist/utils/get-default-value.js +1 -2
- package/dist/utils/get-graphql-query-and-variables.d.ts +1 -1
- package/dist/utils/get-graphql-query-and-variables.js +1 -2
- package/dist/utils/get-graphql-type.d.ts +2 -2
- package/dist/utils/get-graphql-type.js +1 -1
- package/dist/utils/get-ip-from-req.d.ts +1 -1
- package/dist/utils/get-local-type.d.ts +1 -1
- package/dist/utils/get-local-type.js +3 -3
- package/dist/utils/get-milliseconds.d.ts +4 -0
- package/dist/utils/get-milliseconds.js +14 -0
- package/dist/utils/get-milliseconds.test.d.ts +1 -0
- package/dist/utils/get-permissions.d.ts +1 -1
- package/dist/utils/get-permissions.js +1 -1
- package/dist/utils/get-relation-info.d.ts +1 -1
- package/dist/utils/get-relation-info.js +3 -5
- package/dist/utils/get-relation-type.d.ts +1 -1
- package/dist/utils/get-relation-type.js +3 -4
- package/dist/utils/get-schema.d.ts +2 -2
- package/dist/utils/get-schema.js +19 -21
- package/dist/utils/get-snapshot-diff.js +10 -7
- package/dist/utils/get-snapshot.d.ts +3 -3
- package/dist/utils/get-snapshot.js +35 -14
- package/dist/utils/get-versioned-hash.d.ts +1 -0
- package/dist/utils/get-versioned-hash.js +12 -0
- package/dist/utils/get-versioned-hash.test.d.ts +1 -0
- package/dist/utils/is-directus-jwt.js +1 -1
- package/dist/utils/job-queue.js +2 -0
- package/dist/utils/jwt.d.ts +1 -1
- package/dist/utils/map-values-deep.d.ts +1 -0
- package/dist/utils/map-values-deep.js +29 -0
- package/dist/utils/map-values-deep.test.d.ts +1 -0
- package/dist/utils/merge-permissions-for-share.d.ts +1 -1
- package/dist/utils/merge-permissions-for-share.js +3 -4
- package/dist/utils/merge-permissions.d.ts +3 -3
- package/dist/utils/redact-header-cookies.d.ts +1 -0
- package/dist/utils/redact-header-cookies.js +11 -0
- package/dist/utils/redact-header-cookies.test.d.ts +1 -0
- package/dist/utils/reduce-schema.d.ts +1 -1
- package/dist/utils/reduce-schema.js +12 -12
- package/dist/utils/sanitize-query.d.ts +1 -1
- package/dist/utils/sanitize-query.js +1 -1
- package/dist/utils/sanitize-schema.d.ts +30 -0
- package/dist/utils/sanitize-schema.js +80 -0
- package/dist/utils/sanitize-schema.test.d.ts +1 -0
- package/dist/utils/should-skip-cache.d.ts +7 -0
- package/dist/utils/should-skip-cache.js +21 -0
- package/dist/utils/should-skip-cache.test.d.ts +1 -0
- package/dist/utils/track.js +3 -3
- package/dist/utils/transformations.d.ts +1 -1
- package/dist/utils/transformations.js +2 -4
- package/dist/utils/url.js +9 -8
- package/dist/utils/url.test.d.ts +1 -0
- package/dist/utils/user-name.d.ts +1 -1
- package/dist/utils/validate-diff.d.ts +7 -0
- package/dist/utils/validate-diff.js +113 -0
- package/dist/utils/validate-diff.test.d.ts +1 -0
- package/dist/utils/validate-keys.d.ts +2 -2
- package/dist/utils/validate-keys.js +1 -1
- package/dist/utils/validate-query.d.ts +1 -1
- package/dist/utils/validate-query.js +3 -3
- package/dist/utils/validate-query.test.d.ts +1 -0
- package/dist/utils/validate-snapshot.d.ts +5 -0
- package/dist/utils/validate-snapshot.js +71 -0
- package/dist/utils/validate-snapshot.test.d.ts +1 -0
- package/dist/webhooks.js +4 -3
- package/package.json +62 -62
|
@@ -4,6 +4,8 @@ exports.FnHelper = void 0;
|
|
|
4
4
|
const apply_query_1 = require("../../../utils/apply-query");
|
|
5
5
|
const types_1 = require("../types");
|
|
6
6
|
class FnHelper extends types_1.DatabaseHelper {
|
|
7
|
+
knex;
|
|
8
|
+
schema;
|
|
7
9
|
constructor(knex, schema) {
|
|
8
10
|
super(knex);
|
|
9
11
|
this.knex = knex;
|
|
@@ -11,9 +13,8 @@ class FnHelper extends types_1.DatabaseHelper {
|
|
|
11
13
|
this.schema = schema;
|
|
12
14
|
}
|
|
13
15
|
_relationalCount(table, column, options) {
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
const relation = this.schema.relations.find((relation) => { var _a; return relation.related_collection === collectionName && ((_a = relation === null || relation === void 0 ? void 0 : relation.meta) === null || _a === void 0 ? void 0 : _a.one_field) === column; });
|
|
16
|
+
const collectionName = options?.originalCollectionName || table;
|
|
17
|
+
const relation = this.schema.relations.find((relation) => relation.related_collection === collectionName && relation?.meta?.one_field === column);
|
|
17
18
|
const currentPrimary = this.schema.collections[collectionName].primary;
|
|
18
19
|
if (!relation) {
|
|
19
20
|
throw new Error(`Field ${collectionName}.${column} isn't a nested relational collection`);
|
|
@@ -22,7 +23,7 @@ class FnHelper extends types_1.DatabaseHelper {
|
|
|
22
23
|
.count('*')
|
|
23
24
|
.from(relation.collection)
|
|
24
25
|
.where(relation.field, '=', this.knex.raw(`??.??`, [table, currentPrimary]));
|
|
25
|
-
if (
|
|
26
|
+
if (options?.query?.filter) {
|
|
26
27
|
countQuery = (0, apply_query_1.applyFilter)(this.knex, this.schema, countQuery, options.query.filter, relation.collection, {}).query;
|
|
27
28
|
}
|
|
28
29
|
return this.knex.raw('(' + countQuery.toQuery() + ')');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import type { Field, RawField } from '@directus/shared/types';
|
|
2
|
+
import type { Knex } from 'knex';
|
|
3
|
+
import type { GeoJSONGeometry } from 'wellknown';
|
|
1
4
|
import { GeometryHelper } from '../types';
|
|
2
|
-
import { Field, RawField } from '@directus/shared/types';
|
|
3
|
-
import { GeoJSONGeometry } from 'wellknown';
|
|
4
|
-
import { Knex } from 'knex';
|
|
5
5
|
export declare class GeometryHelperMSSQL extends GeometryHelper {
|
|
6
6
|
isTrue(expression: Knex.Raw): Knex.Raw<any>;
|
|
7
7
|
isFalse(expression: Knex.Raw): Knex.Raw<any>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import type { Field, RawField } from '@directus/shared/types';
|
|
2
|
+
import type { Knex } from 'knex';
|
|
3
|
+
import type { GeoJSONGeometry } from 'wellknown';
|
|
1
4
|
import { GeometryHelper } from '../types';
|
|
2
|
-
import { Field, RawField } from '@directus/shared/types';
|
|
3
|
-
import { GeoJSONGeometry } from 'wellknown';
|
|
4
|
-
import { Knex } from 'knex';
|
|
5
5
|
export declare class GeometryHelperOracle extends GeometryHelper {
|
|
6
6
|
isTrue(expression: Knex.Raw): Knex.Raw<any>;
|
|
7
7
|
isFalse(expression: Knex.Raw): Knex.Raw<any>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import type { Field, RawField } from '@directus/shared/types';
|
|
2
|
+
import type { Knex } from 'knex';
|
|
3
|
+
import type { GeoJSONGeometry } from 'wellknown';
|
|
1
4
|
import { GeometryHelper } from '../types';
|
|
2
|
-
import { Field, RawField } from '@directus/shared/types';
|
|
3
|
-
import { GeoJSONGeometry } from 'wellknown';
|
|
4
|
-
import { Knex } from 'knex';
|
|
5
5
|
export declare class GeometryHelperPostgres extends GeometryHelper {
|
|
6
6
|
supported(): Promise<boolean>;
|
|
7
7
|
createColumn(table: Knex.CreateTableBuilder, field: RawField | Field): Knex.ColumnBuilder;
|
|
@@ -8,8 +8,7 @@ class GeometryHelperPostgres extends types_1.GeometryHelper {
|
|
|
8
8
|
return res.length > 0;
|
|
9
9
|
}
|
|
10
10
|
createColumn(table, field) {
|
|
11
|
-
|
|
12
|
-
const type = (_a = field.type.split('.')[1]) !== null && _a !== void 0 ? _a : 'geometry';
|
|
11
|
+
const type = field.type.split('.')[1] ?? 'geometry';
|
|
13
12
|
return table.specificType(field.field, `geometry(${type}, 4326)`);
|
|
14
13
|
}
|
|
15
14
|
_intersects_bbox(key, geojson) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { Field, RawField } from '@directus/shared/types';
|
|
2
|
+
import type { Knex } from 'knex';
|
|
1
3
|
import { GeometryHelper } from '../types';
|
|
2
|
-
import { Field, RawField } from '@directus/shared/types';
|
|
3
|
-
import { Knex } from 'knex';
|
|
4
4
|
export declare class GeometryHelperRedshift extends GeometryHelper {
|
|
5
5
|
createColumn(table: Knex.CreateTableBuilder, field: RawField | Field): Knex.ColumnBuilder;
|
|
6
6
|
asGeoJSON(table: string, column: string): Knex.Raw;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import type { Field, RawField } from '@directus/shared/types';
|
|
2
|
+
import type { Knex } from 'knex';
|
|
1
3
|
import { GeoJSONGeometry } from 'wellknown';
|
|
2
|
-
import { Field, RawField } from '@directus/shared/types';
|
|
3
4
|
import { DatabaseHelper } from '../types';
|
|
4
|
-
import { Knex } from 'knex';
|
|
5
5
|
export declare abstract class GeometryHelper extends DatabaseHelper {
|
|
6
6
|
supported(): boolean | Promise<boolean>;
|
|
7
7
|
isTrue(expression: Knex.Raw): Knex.Raw<any>;
|
|
@@ -14,8 +14,7 @@ class GeometryHelper extends types_1.DatabaseHelper {
|
|
|
14
14
|
return expression.wrap('NOT ', '');
|
|
15
15
|
}
|
|
16
16
|
createColumn(table, field) {
|
|
17
|
-
|
|
18
|
-
const type = (_a = field.type.split('.')[1]) !== null && _a !== void 0 ? _a : 'geometry';
|
|
17
|
+
const type = field.type.split('.')[1] ?? 'geometry';
|
|
19
18
|
return table.specificType(field.field, type);
|
|
20
19
|
}
|
|
21
20
|
asText(table, column) {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { SchemaOverview } from '@directus/shared/types';
|
|
2
|
-
import { Knex } from 'knex';
|
|
1
|
+
import type { SchemaOverview } from '@directus/shared/types';
|
|
2
|
+
import type { Knex } from 'knex';
|
|
3
3
|
import * as dateHelpers from './date';
|
|
4
4
|
import * as fnHelpers from './fn';
|
|
5
5
|
import * as geometryHelpers from './geometry';
|
|
6
6
|
import * as schemaHelpers from './schema';
|
|
7
7
|
export declare function getHelpers(database: Knex): {
|
|
8
8
|
date: dateHelpers.postgres | dateHelpers.oracle | dateHelpers.mysql | dateHelpers.mssql | dateHelpers.sqlite;
|
|
9
|
-
st: geometryHelpers.sqlite | geometryHelpers.postgres | geometryHelpers.mysql | geometryHelpers.
|
|
10
|
-
schema: schemaHelpers.sqlite | schemaHelpers.postgres | schemaHelpers.mysql | schemaHelpers.cockroachdb | schemaHelpers.
|
|
9
|
+
st: geometryHelpers.sqlite | geometryHelpers.postgres | geometryHelpers.mysql | geometryHelpers.mssql | geometryHelpers.oracle | geometryHelpers.redshift;
|
|
10
|
+
schema: schemaHelpers.sqlite | schemaHelpers.postgres | schemaHelpers.mysql | schemaHelpers.cockroachdb | schemaHelpers.mssql | schemaHelpers.oracle;
|
|
11
11
|
};
|
|
12
|
-
export declare function getFunctions(database: Knex, schema: SchemaOverview): fnHelpers.sqlite | fnHelpers.postgres | fnHelpers.mysql | fnHelpers.
|
|
12
|
+
export declare function getFunctions(database: Knex, schema: SchemaOverview): fnHelpers.sqlite | fnHelpers.postgres | fnHelpers.mysql | fnHelpers.mssql | fnHelpers.oracle;
|
|
13
13
|
export type Helpers = ReturnType<typeof getHelpers>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { KNEX_TYPES } from '@directus/shared/constants';
|
|
1
|
+
import type { KNEX_TYPES } from '@directus/shared/constants';
|
|
2
2
|
import { Options, SchemaHelper } from '../types';
|
|
3
3
|
export declare class SchemaHelperCockroachDb extends SchemaHelper {
|
|
4
|
-
changeToType(table: string, column: string, type: typeof KNEX_TYPES[number], options?: Options): Promise<void>;
|
|
4
|
+
changeToType(table: string, column: string, type: (typeof KNEX_TYPES)[number], options?: Options): Promise<void>;
|
|
5
5
|
constraintName(existingName: string): string;
|
|
6
6
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Knex } from 'knex';
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
2
|
import { SchemaHelper } from '../types';
|
|
3
3
|
export declare class SchemaHelperMySQL extends SchemaHelper {
|
|
4
4
|
applyMultiRelationalSort(knex: Knex, dbQuery: Knex.QueryBuilder, table: string, primaryKey: string, orderByString: string, orderByFields: Knex.Raw[]): Knex.QueryBuilder;
|
|
@@ -5,8 +5,7 @@ const database_1 = require("../../../../database");
|
|
|
5
5
|
const types_1 = require("../types");
|
|
6
6
|
class SchemaHelperMySQL extends types_1.SchemaHelper {
|
|
7
7
|
applyMultiRelationalSort(knex, dbQuery, table, primaryKey, orderByString, orderByFields) {
|
|
8
|
-
|
|
9
|
-
if ((_a = (0, database_1.getDatabaseVersion)()) === null || _a === void 0 ? void 0 : _a.startsWith('5.7')) {
|
|
8
|
+
if ((0, database_1.getDatabaseVersion)()?.startsWith('5.7')) {
|
|
10
9
|
dbQuery.orderByRaw(`?? asc, ${orderByString}`, [`${table}.${primaryKey}`, ...orderByFields]);
|
|
11
10
|
dbQuery = knex
|
|
12
11
|
.select(knex.raw(`??, ( @rank := IF ( @cur_id = deep.${primaryKey}, @rank + 1, 1 ) ) AS directus_row_number, ( @cur_id := deep.${primaryKey} ) AS current_id`, 'deep.*'))
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { KNEX_TYPES } from '@directus/shared/constants';
|
|
1
|
+
import type { KNEX_TYPES } from '@directus/shared/constants';
|
|
2
|
+
import type { Field, Relation, Type } from '@directus/shared/types';
|
|
2
3
|
import { Options, SchemaHelper } from '../types';
|
|
3
4
|
export declare class SchemaHelperOracle extends SchemaHelper {
|
|
4
|
-
changeToType(table: string, column: string, type: typeof KNEX_TYPES[number], options?: Options): Promise<void>;
|
|
5
|
+
changeToType(table: string, column: string, type: (typeof KNEX_TYPES)[number], options?: Options): Promise<void>;
|
|
5
6
|
castA2oPrimaryKey(): string;
|
|
7
|
+
preRelationChange(relation: Partial<Relation>): void;
|
|
8
|
+
processFieldType(field: Field): Type;
|
|
6
9
|
}
|
|
@@ -9,5 +9,28 @@ class SchemaHelperOracle extends types_1.SchemaHelper {
|
|
|
9
9
|
castA2oPrimaryKey() {
|
|
10
10
|
return 'CAST(?? AS VARCHAR2(255))';
|
|
11
11
|
}
|
|
12
|
+
preRelationChange(relation) {
|
|
13
|
+
if (relation.collection === relation.related_collection) {
|
|
14
|
+
// Constraints are not allowed on self referencing relationships
|
|
15
|
+
// Setting NO ACTION throws - ORA-00905: missing keyword
|
|
16
|
+
if (relation.schema?.on_delete) {
|
|
17
|
+
relation.schema.on_delete = null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
processFieldType(field) {
|
|
22
|
+
if (field.type === 'integer') {
|
|
23
|
+
if (field.schema?.numeric_precision === 20) {
|
|
24
|
+
return 'bigInteger';
|
|
25
|
+
}
|
|
26
|
+
else if (field.schema?.numeric_precision === 1) {
|
|
27
|
+
return 'boolean';
|
|
28
|
+
}
|
|
29
|
+
else if (field.schema?.numeric_precision || field.schema?.numeric_scale) {
|
|
30
|
+
return 'decimal';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return field.type;
|
|
34
|
+
}
|
|
12
35
|
}
|
|
13
36
|
exports.SchemaHelperOracle = SchemaHelperOracle;
|
|
@@ -1,19 +1,22 @@
|
|
|
1
|
+
import type { KNEX_TYPES } from '@directus/shared/constants';
|
|
2
|
+
import type { Field, Relation, Type } from '@directus/shared/types';
|
|
3
|
+
import type { Knex } from 'knex';
|
|
4
|
+
import type { DatabaseClient } from '../../../types';
|
|
1
5
|
import { DatabaseHelper } from '../types';
|
|
2
|
-
import { KNEX_TYPES } from '@directus/shared/constants';
|
|
3
|
-
import { Knex } from 'knex';
|
|
4
|
-
type Clients = 'mysql' | 'postgres' | 'cockroachdb' | 'sqlite' | 'oracle' | 'mssql' | 'redshift';
|
|
5
6
|
export type Options = {
|
|
6
7
|
nullable?: boolean;
|
|
7
8
|
default?: any;
|
|
8
9
|
length?: number;
|
|
9
10
|
};
|
|
10
11
|
export declare abstract class SchemaHelper extends DatabaseHelper {
|
|
11
|
-
isOneOfClients(clients:
|
|
12
|
+
isOneOfClients(clients: DatabaseClient[]): boolean;
|
|
12
13
|
changeNullable(table: string, column: string, nullable: boolean): Promise<void>;
|
|
13
|
-
changeToType(table: string, column: string, type: typeof KNEX_TYPES[number], options?: Options): Promise<void>;
|
|
14
|
-
protected changeToTypeByCopy(table: string, column: string, type: typeof KNEX_TYPES[number], options: Options): Promise<void>;
|
|
14
|
+
changeToType(table: string, column: string, type: (typeof KNEX_TYPES)[number], options?: Options): Promise<void>;
|
|
15
|
+
protected changeToTypeByCopy(table: string, column: string, type: (typeof KNEX_TYPES)[number], options: Options): Promise<void>;
|
|
15
16
|
preColumnChange(): Promise<boolean>;
|
|
16
17
|
postColumnChange(): Promise<void>;
|
|
18
|
+
preRelationChange(_relation: Partial<Relation>): void;
|
|
19
|
+
processFieldType(field: Field): Type;
|
|
17
20
|
constraintName(existingName: string): string;
|
|
18
21
|
applyLimit(rootQuery: Knex.QueryBuilder, limit: number): void;
|
|
19
22
|
applyOffset(rootQuery: Knex.QueryBuilder, offset: number): void;
|
|
@@ -21,4 +24,3 @@ export declare abstract class SchemaHelper extends DatabaseHelper {
|
|
|
21
24
|
applyMultiRelationalSort(knex: Knex, dbQuery: Knex.QueryBuilder, table: string, primaryKey: string, orderByString: string, orderByFields: Knex.Raw[]): Knex.QueryBuilder;
|
|
22
25
|
formatUUID(uuid: string): string;
|
|
23
26
|
}
|
|
24
|
-
export {};
|
|
@@ -62,6 +62,12 @@ class SchemaHelper extends types_1.DatabaseHelper {
|
|
|
62
62
|
async postColumnChange() {
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
65
|
+
preRelationChange(_relation) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
processFieldType(field) {
|
|
69
|
+
return field.type;
|
|
70
|
+
}
|
|
65
71
|
constraintName(existingName) {
|
|
66
72
|
// most vendors allow for dropping/creating constraints with the same name
|
|
67
73
|
// reference issue #14873
|
|
@@ -83,7 +89,7 @@ class SchemaHelper extends types_1.DatabaseHelper {
|
|
|
83
89
|
return dbQuery;
|
|
84
90
|
}
|
|
85
91
|
formatUUID(uuid) {
|
|
86
|
-
return uuid; // no-op by
|
|
92
|
+
return uuid; // no-op by default
|
|
87
93
|
}
|
|
88
94
|
}
|
|
89
95
|
exports.SchemaHelper = SchemaHelper;
|
package/dist/database/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import SchemaInspector from '@directus/schema';
|
|
2
2
|
import { Knex } from 'knex';
|
|
3
|
+
import type { DatabaseClient } from '../types';
|
|
3
4
|
export default function getDatabase(): Knex;
|
|
4
5
|
export declare function getSchemaInspector(): ReturnType<typeof SchemaInspector>;
|
|
5
6
|
/**
|
|
@@ -10,7 +11,7 @@ export declare function getSchemaInspector(): ReturnType<typeof SchemaInspector>
|
|
|
10
11
|
export declare function getDatabaseVersion(): string | null;
|
|
11
12
|
export declare function hasDatabaseConnection(database?: Knex): Promise<boolean>;
|
|
12
13
|
export declare function validateDatabaseConnection(database?: Knex): Promise<void>;
|
|
13
|
-
export declare function getDatabaseClient(database?: Knex):
|
|
14
|
+
export declare function getDatabaseClient(database?: Knex): DatabaseClient;
|
|
14
15
|
export declare function isInstalled(): Promise<boolean>;
|
|
15
16
|
export declare function validateMigrations(): Promise<boolean>;
|
|
16
17
|
/**
|
package/dist/database/index.js
CHANGED
|
@@ -5,16 +5,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.validateDatabaseExtensions = exports.validateMigrations = exports.isInstalled = exports.getDatabaseClient = exports.validateDatabaseConnection = exports.hasDatabaseConnection = exports.getDatabaseVersion = exports.getSchemaInspector = void 0;
|
|
7
7
|
const schema_1 = __importDefault(require("@directus/schema"));
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
9
|
const knex_1 = require("knex");
|
|
10
|
+
const lodash_1 = require("lodash");
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
9
12
|
const perf_hooks_1 = require("perf_hooks");
|
|
13
|
+
const util_1 = require("util");
|
|
10
14
|
const env_1 = __importDefault(require("../env"));
|
|
11
15
|
const logger_1 = __importDefault(require("../logger"));
|
|
12
16
|
const get_config_from_env_1 = require("../utils/get-config-from-env");
|
|
13
17
|
const validate_env_1 = require("../utils/validate-env");
|
|
14
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
15
|
-
const path_1 = __importDefault(require("path"));
|
|
16
|
-
const lodash_1 = require("lodash");
|
|
17
|
-
const util_1 = require("util");
|
|
18
18
|
const helpers_1 = require("./helpers");
|
|
19
19
|
let database = null;
|
|
20
20
|
let inspector = null;
|
|
@@ -145,7 +145,7 @@ function getDatabaseVersion() {
|
|
|
145
145
|
}
|
|
146
146
|
exports.getDatabaseVersion = getDatabaseVersion;
|
|
147
147
|
async function hasDatabaseConnection(database) {
|
|
148
|
-
database = database
|
|
148
|
+
database = database ?? getDatabase();
|
|
149
149
|
try {
|
|
150
150
|
if (getDatabaseClient(database) === 'oracle') {
|
|
151
151
|
await database.raw('select 1 from DUAL');
|
|
@@ -161,7 +161,7 @@ async function hasDatabaseConnection(database) {
|
|
|
161
161
|
}
|
|
162
162
|
exports.hasDatabaseConnection = hasDatabaseConnection;
|
|
163
163
|
async function validateDatabaseConnection(database) {
|
|
164
|
-
database = database
|
|
164
|
+
database = database ?? getDatabase();
|
|
165
165
|
try {
|
|
166
166
|
if (getDatabaseClient(database) === 'oracle') {
|
|
167
167
|
await database.raw('select 1 from DUAL');
|
|
@@ -178,7 +178,7 @@ async function validateDatabaseConnection(database) {
|
|
|
178
178
|
}
|
|
179
179
|
exports.validateDatabaseConnection = validateDatabaseConnection;
|
|
180
180
|
function getDatabaseClient(database) {
|
|
181
|
-
database = database
|
|
181
|
+
database = database ?? getDatabase();
|
|
182
182
|
switch (database.client.constructor.name) {
|
|
183
183
|
case 'Client_MySQL':
|
|
184
184
|
return 'mysql';
|
|
@@ -250,7 +250,7 @@ async function validateDatabaseExtensions() {
|
|
|
250
250
|
}
|
|
251
251
|
exports.validateDatabaseExtensions = validateDatabaseExtensions;
|
|
252
252
|
async function validateDatabaseCharset(database) {
|
|
253
|
-
database = database
|
|
253
|
+
database = database ?? getDatabase();
|
|
254
254
|
if (getDatabaseClient(database) === 'mysql') {
|
|
255
255
|
const { collation } = await database.select(database.raw(`@@collation_database as collation`)).first();
|
|
256
256
|
const tables = await database('information_schema.tables')
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.down = exports.up = void 0;
|
|
4
4
|
const utils_1 = require("@directus/shared/utils");
|
|
5
5
|
async function up(knex) {
|
|
6
|
-
var _a;
|
|
7
6
|
await knex.schema.alterTable('directus_relations', (table) => {
|
|
8
7
|
table.string('sort_field');
|
|
9
8
|
});
|
|
@@ -12,7 +11,7 @@ async function up(knex) {
|
|
|
12
11
|
.from('directus_fields')
|
|
13
12
|
.whereIn('interface', ['one-to-many', 'm2a-builder', 'many-to-many']);
|
|
14
13
|
for (const field of fieldsWithSort) {
|
|
15
|
-
const options = typeof field.options === 'string' ? (0, utils_1.parseJSON)(field.options) :
|
|
14
|
+
const options = typeof field.options === 'string' ? (0, utils_1.parseJSON)(field.options) : field.options ?? {};
|
|
16
15
|
if ('sortField' in options) {
|
|
17
16
|
await knex('directus_relations')
|
|
18
17
|
.update({
|
|
@@ -14,7 +14,7 @@ async function up(knex) {
|
|
|
14
14
|
.select('id', 'many_collection', 'many_field', 'one_collection')
|
|
15
15
|
.from('directus_relations');
|
|
16
16
|
const constraintsToAdd = relations.filter((relation) => {
|
|
17
|
-
const exists = !!foreignKeys.find((fk) => fk.table ===
|
|
17
|
+
const exists = !!foreignKeys.find((fk) => fk.table === relation?.many_collection && fk.column === relation?.many_field);
|
|
18
18
|
return exists === false;
|
|
19
19
|
});
|
|
20
20
|
const corruptedRelations = [];
|
|
@@ -4,8 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.down = exports.up = void 0;
|
|
7
|
-
const logger_1 = __importDefault(require("../../logger"));
|
|
8
7
|
const knex_schema_inspector_1 = __importDefault(require("knex-schema-inspector"));
|
|
8
|
+
const logger_1 = __importDefault(require("../../logger"));
|
|
9
9
|
/**
|
|
10
10
|
* Things to keep in mind:
|
|
11
11
|
*
|
|
@@ -93,7 +93,7 @@ async function up(knex) {
|
|
|
93
93
|
fk.foreign_key_column === constraint.references.split('.')[1]);
|
|
94
94
|
try {
|
|
95
95
|
await knex.schema.alterTable(update.table, (table) => {
|
|
96
|
-
table.dropForeign([constraint.column],
|
|
96
|
+
table.dropForeign([constraint.column], existingForeignKey?.constraint_name || undefined);
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
99
|
catch (err) {
|