From 32972f4c01b788b284266d1199fc161ee68c32ea Mon Sep 17 00:00:00 2001 From: Nicola Krumschmidt Date: Thu, 22 Jul 2021 17:02:29 +0200 Subject: [PATCH] Move define extension functions to shared and expose them through extension-sdk (#6880) * Move defineInterface to shared * Split up utils into node and browser utils * Move defineDisplay to shared * Move defineLayout to shared * Move defineModule to shared * Add defineEndpoint and defineHook to define-extensions * Expose define extension functions through extension-sdk * Make route type of defineEndpoint more specific * Simplify define extension functions * Deduplicate types and local types definition * Do not allow functional components in display handler * Make interface options nullable * Deduplicate extension types definition * Fix utils/node exports --- .../v-field-select/v-field-select.vue | 3 +- .../v-field-template/v-field-template.vue | 3 +- .../v-form/form-field-interface.vue | 3 +- .../components/v-form/form-field-label.vue | 2 +- app/src/components/v-form/form-field-menu.vue | 2 +- app/src/components/v-form/form-field.vue | 2 +- app/src/components/v-form/types.ts | 3 +- app/src/components/v-form/v-form.vue | 2 +- .../use-collection/use-collection.ts | 3 +- .../use-field-tree/use-field-tree.ts | 3 +- .../use-form-fields/use-form-fields.ts | 3 +- app/src/composables/use-permissions.ts | 2 +- app/src/displays/boolean/index.ts | 2 +- app/src/displays/collection/index.ts | 2 +- app/src/displays/color/index.ts | 2 +- app/src/displays/datetime/index.ts | 2 +- app/src/displays/define.ts | 13 ---- app/src/displays/file/index.ts | 2 +- app/src/displays/filesize/index.ts | 2 +- .../displays/formatted-json-value/index.ts | 2 +- app/src/displays/formatted-value/index.ts | 2 +- app/src/displays/icon/index.ts | 2 +- app/src/displays/image/index.ts | 2 +- app/src/displays/index.ts | 2 +- app/src/displays/labels/index.ts | 2 +- app/src/displays/mime-type/index.ts | 2 +- app/src/displays/rating/index.ts | 2 +- app/src/displays/raw/index.ts | 6 +- app/src/displays/register.ts | 2 +- app/src/displays/related-values/index.ts | 6 +- app/src/displays/related-values/options.vue | 3 +- app/src/displays/types.ts | 38 ---------- app/src/displays/user/index.ts | 2 +- .../_system/system-collection/index.ts | 2 +- .../_system/system-collections/index.ts | 2 +- .../_system/system-display-template/index.ts | 2 +- .../_system/system-field-tree/index.ts | 2 +- .../interfaces/_system/system-field/index.ts | 2 +- .../_system/system-field/system-field.vue | 2 +- .../interfaces/_system/system-folder/index.ts | 2 +- .../_system/system-interface-options/index.ts | 2 +- .../system-interface-options.vue | 2 +- .../_system/system-interface/index.ts | 2 +- .../system-interface/system-interface.vue | 2 +- .../_system/system-language/index.ts | 2 +- .../_system/system-mfa-setup/index.ts | 2 +- .../interfaces/_system/system-scope/index.ts | 2 +- app/src/interfaces/boolean/index.ts | 2 +- app/src/interfaces/datetime/index.ts | 2 +- app/src/interfaces/define.ts | 13 ---- app/src/interfaces/file-image/index.ts | 2 +- app/src/interfaces/file/index.ts | 2 +- .../group-divider/group-divider.vue | 3 +- app/src/interfaces/group-divider/index.ts | 2 +- app/src/interfaces/group-raw/group-raw.vue | 2 +- app/src/interfaces/group-raw/index.ts | 2 +- app/src/interfaces/index.ts | 2 +- .../input-autocomplete-api/index.ts | 2 +- app/src/interfaces/input-code/index.ts | 2 +- app/src/interfaces/input-hash/index.ts | 2 +- app/src/interfaces/input-multiline/index.ts | 2 +- .../interfaces/input-rich-text-html/index.ts | 2 +- .../interfaces/input-rich-text-md/index.ts | 2 +- app/src/interfaces/input/index.ts | 2 +- app/src/interfaces/input/options.vue | 2 +- app/src/interfaces/list-m2a/index.ts | 2 +- app/src/interfaces/list-m2a/list-m2a.vue | 2 +- app/src/interfaces/list-m2m/index.ts | 2 +- app/src/interfaces/list-m2m/list-m2m.vue | 2 +- app/src/interfaces/list-m2m/options.vue | 3 +- app/src/interfaces/list-m2m/use-preview.ts | 2 +- app/src/interfaces/list-m2m/use-relation.ts | 3 +- .../interfaces/list-o2m-tree-view/index.ts | 2 +- .../interfaces/list-o2m-tree-view/options.vue | 3 +- app/src/interfaces/list-o2m/index.ts | 2 +- app/src/interfaces/list-o2m/list-o2m.vue | 3 +- app/src/interfaces/list-o2m/options.vue | 3 +- app/src/interfaces/list/index.ts | 2 +- app/src/interfaces/list/list.vue | 2 +- app/src/interfaces/list/options.vue | 2 +- .../interfaces/presentation-divider/index.ts | 2 +- .../interfaces/presentation-links/index.ts | 2 +- .../interfaces/presentation-notice/index.ts | 2 +- app/src/interfaces/register.ts | 4 +- app/src/interfaces/select-color/index.ts | 2 +- .../interfaces/select-dropdown-m2o/index.ts | 2 +- .../select-dropdown-m2o/options.vue | 3 +- app/src/interfaces/select-dropdown/index.ts | 2 +- app/src/interfaces/select-icon/index.ts | 2 +- .../select-multiple-checkbox-tree/index.ts | 5 +- .../select-multiple-checkbox/index.ts | 2 +- .../select-multiple-dropdown/index.ts | 2 +- app/src/interfaces/select-radio/index.ts | 2 +- app/src/interfaces/slider/index.ts | 2 +- app/src/interfaces/tags/index.ts | 2 +- app/src/interfaces/translations/index.ts | 2 +- app/src/interfaces/translations/options.vue | 3 +- app/src/interfaces/types.ts | 22 ------ app/src/layouts/calendar/index.ts | 5 +- app/src/layouts/cards/components/header.vue | 2 +- app/src/layouts/cards/index.ts | 2 +- app/src/layouts/define.ts | 16 ---- app/src/layouts/index.ts | 2 +- app/src/layouts/register.ts | 2 +- app/src/layouts/tabular/index.ts | 4 +- app/src/layouts/types.ts | 25 ------- app/src/modules/activity/index.ts | 2 +- app/src/modules/collections/index.ts | 2 +- app/src/modules/define.ts | 13 ---- app/src/modules/docs/index.ts | 70 +++++++++--------- app/src/modules/files/index.ts | 2 +- app/src/modules/files/routes/item.vue | 2 +- app/src/modules/index.ts | 2 +- app/src/modules/register.ts | 2 +- app/src/modules/settings/index.ts | 2 +- .../field-detail/components/display.vue | 3 +- .../field-detail/components/interface.vue | 2 +- .../components/relationship-m2a.vue | 2 +- .../components/relationship-m2m.vue | 2 +- .../components/relationship-o2m.vue | 2 +- .../field-detail/components/translations.vue | 2 +- .../data-model/field-detail/field-detail.vue | 4 +- .../routes/data-model/field-detail/store.ts | 9 +-- .../fields/components/field-select-menu.vue | 2 +- .../fields/components/field-select.vue | 3 +- .../fields/components/fields-management.vue | 2 +- .../routes/data-model/get-local-type.ts | 5 +- .../routes/data-model/new-collection.vue | 3 +- .../settings/routes/roles/app-permissions.ts | 2 +- .../components/permissions-overview-row.vue | 3 +- .../permissions-overview-toggle.vue | 3 +- .../item/components/permissions-overview.vue | 2 +- .../roles/item/composables/use-permissions.ts | 2 +- .../composables/use-update-permissions.ts | 3 +- .../permissions-detail/components/actions.vue | 2 +- .../permissions-detail/components/fields.vue | 3 +- .../components/permissions.vue | 2 +- .../permissions-detail/components/presets.vue | 2 +- .../components/validation.vue | 2 +- .../permissions-detail/permissions-detail.vue | 2 +- .../users/composables/use-navigation.ts | 2 +- app/src/modules/users/index.ts | 2 +- app/src/modules/users/routes/collection.vue | 2 +- app/src/modules/users/routes/item.vue | 2 +- app/src/shims.d.ts | 8 +- app/src/stores/fields.ts | 3 +- app/src/stores/permissions.ts | 2 +- app/src/stores/user.ts | 2 +- app/src/types/fields.ts | 74 ------------------- app/src/types/index.ts | 2 - .../adjust-fields-for-displays.ts | 3 +- app/src/utils/get-default-display-for-type.ts | 6 +- .../utils/get-default-interface-for-type.ts | 6 +- app/src/utils/get-js-type.ts | 4 +- app/src/utils/is-allowed.ts | 2 +- app/src/utils/user-name.ts | 2 +- .../comments-sidebar-detail/types.ts | 2 +- .../components/drawer-item/drawer-item.vue | 3 +- .../filter-sidebar-detail/filter-input.vue | 5 +- .../filter-sidebar-detail.vue | 3 +- .../get-available-operators-for-type.ts | 4 +- .../components/module-bar/module-bar.vue | 2 +- .../render-display/render-display.vue | 2 +- .../render-template/render-template.vue | 7 +- package-lock.json | 18 +++-- packages/extension-sdk/src/index.ts | 8 ++ packages/shared/package.json | 21 ++++-- packages/shared/src/constants/extensions.ts | 10 +-- packages/shared/src/constants/fields.ts | 33 +++++++++ packages/shared/src/constants/index.ts | 1 + packages/shared/src/types/displays.ts | 35 +++++++++ packages/shared/src/types/endpoints.ts | 4 + packages/shared/src/types/extensions.ts | 24 ++++-- packages/shared/src/types/fields.ts | 45 +++++++++++ packages/shared/src/types/hooks.ts | 3 + packages/shared/src/types/index.ts | 8 ++ packages/shared/src/types/interfaces.ts | 19 +++++ packages/shared/src/types/layouts.ts | 14 ++++ .../shared/src/types/modules.ts | 6 +- .../shared}/src/types/permissions.ts | 0 {app => packages/shared}/src/types/users.ts | 0 .../src/utils/browser/define-extension.ts | 34 +++++++++ packages/shared/src/utils/browser/index.ts | 4 + .../src/utils/{ => browser}/is-extension.ts | 12 +-- .../src/utils/{ => browser}/pluralize.ts | 2 +- .../validate-extension-manifest.ts | 4 +- packages/shared/src/utils/index.ts | 10 +-- .../utils/{ => node}/ensure-extension-dirs.ts | 4 +- .../{ => node}/generate-extensions-entry.ts | 2 +- .../src/utils/{ => node}/get-extensions.ts | 7 +- packages/shared/src/utils/node/index.ts | 5 ++ .../src/utils/{ => node}/list-folders.ts | 0 .../src/utils/{ => node}/resolve-package.ts | 0 packages/shared/utils/browser.ts | 1 + packages/shared/utils/node.ts | 1 + 195 files changed, 515 insertions(+), 497 deletions(-) delete mode 100644 app/src/displays/define.ts delete mode 100644 app/src/displays/types.ts delete mode 100644 app/src/interfaces/define.ts delete mode 100644 app/src/interfaces/types.ts delete mode 100644 app/src/layouts/define.ts delete mode 100644 app/src/layouts/types.ts delete mode 100644 app/src/modules/define.ts create mode 100644 packages/shared/src/constants/fields.ts create mode 100644 packages/shared/src/types/displays.ts create mode 100644 packages/shared/src/types/endpoints.ts create mode 100644 packages/shared/src/types/fields.ts create mode 100644 packages/shared/src/types/hooks.ts create mode 100644 packages/shared/src/types/interfaces.ts rename app/src/modules/types.ts => packages/shared/src/types/modules.ts (69%) rename {app => packages/shared}/src/types/permissions.ts (100%) rename {app => packages/shared}/src/types/users.ts (100%) create mode 100644 packages/shared/src/utils/browser/define-extension.ts create mode 100644 packages/shared/src/utils/browser/index.ts rename packages/shared/src/utils/{ => browser}/is-extension.ts (54%) rename packages/shared/src/utils/{ => browser}/pluralize.ts (83%) rename packages/shared/src/utils/{ => browser}/validate-extension-manifest.ts (85%) rename packages/shared/src/utils/{ => node}/ensure-extension-dirs.ts (81%) rename packages/shared/src/utils/{ => node}/generate-extensions-entry.ts (90%) rename packages/shared/src/utils/{ => node}/get-extensions.ts (93%) create mode 100644 packages/shared/src/utils/node/index.ts rename packages/shared/src/utils/{ => node}/list-folders.ts (100%) rename packages/shared/src/utils/{ => node}/resolve-package.ts (100%) create mode 100644 packages/shared/utils/browser.ts create mode 100644 packages/shared/utils/node.ts diff --git a/app/src/components/v-field-select/v-field-select.vue b/app/src/components/v-field-select/v-field-select.vue index 7e8a4ecd1b..4d81c5dfc9 100644 --- a/app/src/components/v-field-select/v-field-select.vue +++ b/app/src/components/v-field-select/v-field-select.vue @@ -45,7 +45,8 @@ import { useI18n } from 'vue-i18n'; import { defineComponent, toRefs, ref, PropType, computed } from 'vue'; import FieldListItem from '../v-field-template/field-list-item.vue'; -import { Field, Collection, Relation } from '@/types'; +import { Collection, Relation } from '@/types'; +import { Field } from '@directus/shared/types'; import Draggable from 'vuedraggable'; import useFieldTree from '@/composables/use-field-tree'; import useCollection from '@/composables/use-collection'; diff --git a/app/src/components/v-field-template/v-field-template.vue b/app/src/components/v-field-template/v-field-template.vue index f08aebbb9b..7b8481679b 100644 --- a/app/src/components/v-field-template/v-field-template.vue +++ b/app/src/components/v-field-template/v-field-template.vue @@ -33,7 +33,8 @@ import { defineComponent, toRefs, ref, watch, onMounted, onUnmounted, PropType } import FieldListItem from './field-list-item.vue'; import useFieldTree from '@/composables/use-field-tree'; import { FieldTree } from './types'; -import { Field, Relation } from '@/types'; +import { Relation } from '@/types'; +import { Field } from '@directus/shared/types'; export default defineComponent({ components: { FieldListItem }, diff --git a/app/src/components/v-form/form-field-interface.vue b/app/src/components/v-form/form-field-interface.vue index 49de3d32bc..ae5a3ef70f 100644 --- a/app/src/components/v-form/form-field-interface.vue +++ b/app/src/components/v-form/form-field-interface.vue @@ -37,10 +37,9 @@