From c9105eaead24657fdd2dffe605be24633b520a37 Mon Sep 17 00:00:00 2001 From: Pascal Jufer Date: Mon, 8 Apr 2024 10:12:26 +0200 Subject: [PATCH] Use Item/PrimaryKey from and move Alterations to `@directus/types` (#22027) Co-authored-by: ian --- .changeset/stale-fishes-watch.md | 5 +++++ api/src/controllers/collections.ts | 5 ++--- api/src/controllers/dashboards.ts | 5 ++--- api/src/controllers/files.ts | 3 +-- api/src/controllers/flows.ts | 5 ++--- api/src/controllers/folders.ts | 5 ++--- api/src/controllers/items.ts | 9 ++++----- api/src/controllers/notifications.ts | 5 ++--- api/src/controllers/operations.ts | 5 ++--- api/src/controllers/panels.ts | 5 ++--- api/src/controllers/permissions.ts | 2 +- api/src/controllers/presets.ts | 5 ++--- api/src/controllers/roles.ts | 5 ++--- api/src/controllers/shares.ts | 3 ++- api/src/controllers/translations.ts | 5 ++--- api/src/controllers/users.ts | 12 +++++++---- api/src/controllers/versions.ts | 2 +- api/src/operations/item-create/index.ts | 3 +-- api/src/operations/item-read/index.ts | 3 +-- api/src/operations/item-update/index.ts | 3 +-- api/src/services/activity.ts | 4 ++-- api/src/services/authorization.ts | 4 ++-- api/src/services/files.ts | 4 ++-- api/src/services/flows.ts | 4 ++-- api/src/services/graphql/index.ts | 4 ++-- api/src/services/items.ts | 20 +++++++++---------- api/src/services/notifications.ts | 4 ++-- api/src/services/operations.ts | 4 ++-- api/src/services/payload.ts | 11 ++-------- api/src/services/permissions/index.ts | 4 ++-- api/src/services/revisions.ts | 3 ++- api/src/services/roles.ts | 4 ++-- api/src/services/shares.ts | 5 ++--- api/src/services/tfa.ts | 5 +++-- api/src/services/users.ts | 6 +++--- api/src/services/utils.ts | 8 ++++---- api/src/services/webhooks.ts | 3 ++- api/src/types/items.ts | 12 +---------- api/src/types/services.ts | 3 +-- api/src/utils/merge-version-data.ts | 5 ++--- api/src/utils/validate-keys.ts | 3 +-- .../views/private/components/drawer-item.vue | 8 ++++---- packages/types/src/items.ts | 6 ++++++ 43 files changed, 106 insertions(+), 123 deletions(-) create mode 100644 .changeset/stale-fishes-watch.md diff --git a/.changeset/stale-fishes-watch.md b/.changeset/stale-fishes-watch.md new file mode 100644 index 0000000000..506e88a87b --- /dev/null +++ b/.changeset/stale-fishes-watch.md @@ -0,0 +1,5 @@ +--- +"@directus/types": minor +--- + +Added `Alterations` type diff --git a/api/src/controllers/collections.ts b/api/src/controllers/collections.ts index a9cf0be0f7..9ba5260dbb 100644 --- a/api/src/controllers/collections.ts +++ b/api/src/controllers/collections.ts @@ -1,11 +1,10 @@ -import { isDirectusError } from '@directus/errors'; +import { ErrorCode, isDirectusError } from '@directus/errors'; +import type { Item } from '@directus/types'; import { Router } from 'express'; -import { ErrorCode } from '@directus/errors'; import { respond } from '../middleware/respond.js'; import { validateBatch } from '../middleware/validate-batch.js'; import { CollectionsService } from '../services/collections.js'; import { MetaService } from '../services/meta.js'; -import type { Item } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; const router = Router(); diff --git a/api/src/controllers/dashboards.ts b/api/src/controllers/dashboards.ts index 247168561f..9b49088fb5 100644 --- a/api/src/controllers/dashboards.ts +++ b/api/src/controllers/dashboards.ts @@ -1,12 +1,11 @@ -import { isDirectusError } from '@directus/errors'; +import { ErrorCode, isDirectusError } from '@directus/errors'; +import type { PrimaryKey } from '@directus/types'; import express from 'express'; -import { ErrorCode } from '@directus/errors'; import { respond } from '../middleware/respond.js'; import useCollection from '../middleware/use-collection.js'; import { validateBatch } from '../middleware/validate-batch.js'; import { DashboardsService } from '../services/dashboards.js'; import { MetaService } from '../services/meta.js'; -import type { PrimaryKey } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; diff --git a/api/src/controllers/files.ts b/api/src/controllers/files.ts index f297d0106b..ddb83a55c9 100644 --- a/api/src/controllers/files.ts +++ b/api/src/controllers/files.ts @@ -1,7 +1,7 @@ import { useEnv } from '@directus/env'; import { ErrorCode, InvalidPayloadError, isDirectusError } from '@directus/errors'; import formatTitle from '@directus/format-title'; -import type { BusboyFileStream } from '@directus/types'; +import type { BusboyFileStream, PrimaryKey } from '@directus/types'; import { toArray } from '@directus/utils'; import Busboy from 'busboy'; import bytes from 'bytes'; @@ -15,7 +15,6 @@ import useCollection from '../middleware/use-collection.js'; import { validateBatch } from '../middleware/validate-batch.js'; import { FilesService } from '../services/files.js'; import { MetaService } from '../services/meta.js'; -import type { PrimaryKey } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; diff --git a/api/src/controllers/flows.ts b/api/src/controllers/flows.ts index 95abf6ddd4..ca398a5021 100644 --- a/api/src/controllers/flows.ts +++ b/api/src/controllers/flows.ts @@ -1,14 +1,13 @@ -import { isDirectusError } from '@directus/errors'; +import { ErrorCode, isDirectusError } from '@directus/errors'; +import type { PrimaryKey } from '@directus/types'; import express from 'express'; import { UUID_REGEX } from '../constants.js'; -import { ErrorCode } from '@directus/errors'; import { getFlowManager } from '../flows.js'; import { respond } from '../middleware/respond.js'; import useCollection from '../middleware/use-collection.js'; import { validateBatch } from '../middleware/validate-batch.js'; import { FlowsService } from '../services/flows.js'; import { MetaService } from '../services/meta.js'; -import type { PrimaryKey } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; diff --git a/api/src/controllers/folders.ts b/api/src/controllers/folders.ts index 483f150a43..5ee6e5effe 100644 --- a/api/src/controllers/folders.ts +++ b/api/src/controllers/folders.ts @@ -1,12 +1,11 @@ -import { isDirectusError } from '@directus/errors'; +import { ErrorCode, isDirectusError } from '@directus/errors'; +import type { PrimaryKey } from '@directus/types'; import express from 'express'; -import { ErrorCode } from '@directus/errors'; import { respond } from '../middleware/respond.js'; import useCollection from '../middleware/use-collection.js'; import { validateBatch } from '../middleware/validate-batch.js'; import { FoldersService } from '../services/folders.js'; import { MetaService } from '../services/meta.js'; -import type { PrimaryKey } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; diff --git a/api/src/controllers/items.ts b/api/src/controllers/items.ts index a15dfb7aff..fea022fed0 100644 --- a/api/src/controllers/items.ts +++ b/api/src/controllers/items.ts @@ -1,16 +1,15 @@ -import { isDirectusError } from '@directus/errors'; +import { ErrorCode, ForbiddenError, RouteNotFoundError, isDirectusError } from '@directus/errors'; +import { isSystemCollection } from '@directus/system-data'; +import type { PrimaryKey } from '@directus/types'; import express from 'express'; -import { ErrorCode, ForbiddenError, RouteNotFoundError } from '@directus/errors'; import collectionExists from '../middleware/collection-exists.js'; +import { mergeContentVersions } from '../middleware/merge-content-versions.js'; import { respond } from '../middleware/respond.js'; import { validateBatch } from '../middleware/validate-batch.js'; -import { mergeContentVersions } from '../middleware/merge-content-versions.js'; import { ItemsService } from '../services/items.js'; import { MetaService } from '../services/meta.js'; -import type { PrimaryKey } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; -import { isSystemCollection } from '@directus/system-data'; const router = express.Router(); diff --git a/api/src/controllers/notifications.ts b/api/src/controllers/notifications.ts index bc5494ec02..d4de87196f 100644 --- a/api/src/controllers/notifications.ts +++ b/api/src/controllers/notifications.ts @@ -1,12 +1,11 @@ -import { isDirectusError } from '@directus/errors'; +import { ErrorCode, isDirectusError } from '@directus/errors'; +import type { PrimaryKey } from '@directus/types'; import express from 'express'; -import { ErrorCode } from '@directus/errors'; import { respond } from '../middleware/respond.js'; import useCollection from '../middleware/use-collection.js'; import { validateBatch } from '../middleware/validate-batch.js'; import { MetaService } from '../services/meta.js'; import { NotificationsService } from '../services/notifications.js'; -import type { PrimaryKey } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; diff --git a/api/src/controllers/operations.ts b/api/src/controllers/operations.ts index fc8508ae2a..e1a104497a 100644 --- a/api/src/controllers/operations.ts +++ b/api/src/controllers/operations.ts @@ -1,12 +1,11 @@ +import { ErrorCode, isDirectusError } from '@directus/errors'; +import type { PrimaryKey } from '@directus/types'; import express from 'express'; -import { isDirectusError } from '@directus/errors'; -import { ErrorCode } from '@directus/errors'; import { respond } from '../middleware/respond.js'; import useCollection from '../middleware/use-collection.js'; import { validateBatch } from '../middleware/validate-batch.js'; import { MetaService } from '../services/meta.js'; import { OperationsService } from '../services/operations.js'; -import type { PrimaryKey } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; diff --git a/api/src/controllers/panels.ts b/api/src/controllers/panels.ts index 4ffc5b3681..d70be53385 100644 --- a/api/src/controllers/panels.ts +++ b/api/src/controllers/panels.ts @@ -1,12 +1,11 @@ -import { isDirectusError } from '@directus/errors'; +import { ErrorCode, isDirectusError } from '@directus/errors'; +import type { PrimaryKey } from '@directus/types'; import express from 'express'; -import { ErrorCode } from '@directus/errors'; import { respond } from '../middleware/respond.js'; import useCollection from '../middleware/use-collection.js'; import { validateBatch } from '../middleware/validate-batch.js'; import { MetaService } from '../services/meta.js'; import { PanelsService } from '../services/panels.js'; -import type { PrimaryKey } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; diff --git a/api/src/controllers/permissions.ts b/api/src/controllers/permissions.ts index 9f13f5bc67..1c24c18556 100644 --- a/api/src/controllers/permissions.ts +++ b/api/src/controllers/permissions.ts @@ -1,11 +1,11 @@ import { ErrorCode, isDirectusError } from '@directus/errors'; +import type { PrimaryKey } from '@directus/types'; import express from 'express'; import { respond } from '../middleware/respond.js'; import useCollection from '../middleware/use-collection.js'; import { validateBatch } from '../middleware/validate-batch.js'; import { MetaService } from '../services/meta.js'; import { PermissionsService } from '../services/permissions/index.js'; -import type { PrimaryKey } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; diff --git a/api/src/controllers/presets.ts b/api/src/controllers/presets.ts index 2044f012d2..ce2b1de3fa 100644 --- a/api/src/controllers/presets.ts +++ b/api/src/controllers/presets.ts @@ -1,12 +1,11 @@ -import { isDirectusError } from '@directus/errors'; +import { ErrorCode, isDirectusError } from '@directus/errors'; +import type { PrimaryKey } from '@directus/types'; import express from 'express'; -import { ErrorCode } from '@directus/errors'; import { respond } from '../middleware/respond.js'; import useCollection from '../middleware/use-collection.js'; import { validateBatch } from '../middleware/validate-batch.js'; import { MetaService } from '../services/meta.js'; import { PresetsService } from '../services/presets.js'; -import type { PrimaryKey } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; diff --git a/api/src/controllers/roles.ts b/api/src/controllers/roles.ts index 1b5f1f0a86..1bdb4e213b 100644 --- a/api/src/controllers/roles.ts +++ b/api/src/controllers/roles.ts @@ -1,12 +1,11 @@ -import { isDirectusError } from '@directus/errors'; +import { ErrorCode, isDirectusError } from '@directus/errors'; +import type { PrimaryKey } from '@directus/types'; import express from 'express'; -import { ErrorCode } from '@directus/errors'; import { respond } from '../middleware/respond.js'; import useCollection from '../middleware/use-collection.js'; import { validateBatch } from '../middleware/validate-batch.js'; import { MetaService } from '../services/meta.js'; import { RolesService } from '../services/roles.js'; -import type { PrimaryKey } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; diff --git a/api/src/controllers/shares.ts b/api/src/controllers/shares.ts index 7ce3042b72..4d7360f703 100644 --- a/api/src/controllers/shares.ts +++ b/api/src/controllers/shares.ts @@ -1,5 +1,6 @@ import { useEnv } from '@directus/env'; import { ErrorCode, InvalidPayloadError, isDirectusError } from '@directus/errors'; +import type { PrimaryKey } from '@directus/types'; import express from 'express'; import Joi from 'joi'; import { REFRESH_COOKIE_OPTIONS, SESSION_COOKIE_OPTIONS, UUID_REGEX } from '../constants.js'; @@ -7,7 +8,7 @@ import { respond } from '../middleware/respond.js'; import useCollection from '../middleware/use-collection.js'; import { validateBatch } from '../middleware/validate-batch.js'; import { SharesService } from '../services/shares.js'; -import type { AuthenticationMode, PrimaryKey } from '../types/index.js'; +import type { AuthenticationMode } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; diff --git a/api/src/controllers/translations.ts b/api/src/controllers/translations.ts index 5ad72ce284..b8bde2096b 100644 --- a/api/src/controllers/translations.ts +++ b/api/src/controllers/translations.ts @@ -1,12 +1,11 @@ -import { isDirectusError } from '@directus/errors'; +import { ErrorCode, isDirectusError } from '@directus/errors'; +import type { PrimaryKey } from '@directus/types'; import express from 'express'; -import { ErrorCode } from '@directus/errors'; import { respond } from '../middleware/respond.js'; import useCollection from '../middleware/use-collection.js'; import { validateBatch } from '../middleware/validate-batch.js'; import { MetaService } from '../services/meta.js'; import { TranslationsService } from '../services/translations.js'; -import type { PrimaryKey } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; diff --git a/api/src/controllers/users.ts b/api/src/controllers/users.ts index 9444e91597..0cd7834154 100644 --- a/api/src/controllers/users.ts +++ b/api/src/controllers/users.ts @@ -1,8 +1,13 @@ -import { isDirectusError } from '@directus/errors'; -import type { Role } from '@directus/types'; +import { + ErrorCode, + ForbiddenError, + InvalidCredentialsError, + InvalidPayloadError, + isDirectusError, +} from '@directus/errors'; +import type { PrimaryKey, Role } from '@directus/types'; import express from 'express'; import Joi from 'joi'; -import { ErrorCode, ForbiddenError, InvalidCredentialsError, InvalidPayloadError } from '@directus/errors'; import { respond } from '../middleware/respond.js'; import useCollection from '../middleware/use-collection.js'; import { validateBatch } from '../middleware/validate-batch.js'; @@ -11,7 +16,6 @@ import { MetaService } from '../services/meta.js'; import { RolesService } from '../services/roles.js'; import { TFAService } from '../services/tfa.js'; import { UsersService } from '../services/users.js'; -import type { PrimaryKey } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; diff --git a/api/src/controllers/versions.ts b/api/src/controllers/versions.ts index f620d56db9..9b38cb2542 100644 --- a/api/src/controllers/versions.ts +++ b/api/src/controllers/versions.ts @@ -1,4 +1,5 @@ import { ErrorCode, InvalidPayloadError, isDirectusError } from '@directus/errors'; +import type { PrimaryKey } from '@directus/types'; import express from 'express'; import { assign } from 'lodash-es'; import { respond } from '../middleware/respond.js'; @@ -6,7 +7,6 @@ import useCollection from '../middleware/use-collection.js'; import { validateBatch } from '../middleware/validate-batch.js'; import { MetaService } from '../services/meta.js'; import { VersionsService } from '../services/versions.js'; -import type { PrimaryKey } from '../types/index.js'; import asyncHandler from '../utils/async-handler.js'; import { sanitizeQuery } from '../utils/sanitize-query.js'; diff --git a/api/src/operations/item-create/index.ts b/api/src/operations/item-create/index.ts index 9824ad9bba..67b80684e4 100644 --- a/api/src/operations/item-create/index.ts +++ b/api/src/operations/item-create/index.ts @@ -1,8 +1,7 @@ import { defineOperationApi } from '@directus/extensions'; -import type { Accountability, PrimaryKey } from '@directus/types'; +import type { Accountability, Item, PrimaryKey } from '@directus/types'; import { optionToObject, toArray } from '@directus/utils'; import { ItemsService } from '../../services/items.js'; -import type { Item } from '../../types/index.js'; import { getAccountabilityForRole } from '../../utils/get-accountability-for-role.js'; type Options = { diff --git a/api/src/operations/item-read/index.ts b/api/src/operations/item-read/index.ts index 76e870d5e5..d945090d02 100644 --- a/api/src/operations/item-read/index.ts +++ b/api/src/operations/item-read/index.ts @@ -1,8 +1,7 @@ import { defineOperationApi } from '@directus/extensions'; -import type { Accountability, PrimaryKey } from '@directus/types'; +import type { Accountability, Item, PrimaryKey } from '@directus/types'; import { optionToObject, toArray } from '@directus/utils'; import { ItemsService } from '../../services/items.js'; -import type { Item } from '../../types/index.js'; import { getAccountabilityForRole } from '../../utils/get-accountability-for-role.js'; import { sanitizeQuery } from '../../utils/sanitize-query.js'; diff --git a/api/src/operations/item-update/index.ts b/api/src/operations/item-update/index.ts index 4331bbd946..7203dc3f7d 100644 --- a/api/src/operations/item-update/index.ts +++ b/api/src/operations/item-update/index.ts @@ -1,8 +1,7 @@ import { defineOperationApi } from '@directus/extensions'; -import type { Accountability, PrimaryKey } from '@directus/types'; +import type { Accountability, Item, PrimaryKey } from '@directus/types'; import { optionToObject, toArray } from '@directus/utils'; import { ItemsService } from '../../services/items.js'; -import type { Item } from '../../types/index.js'; import { getAccountabilityForRole } from '../../utils/get-accountability-for-role.js'; import { sanitizeQuery } from '../../utils/sanitize-query.js'; diff --git a/api/src/services/activity.ts b/api/src/services/activity.ts index fd0b6d9da0..6dad410aba 100644 --- a/api/src/services/activity.ts +++ b/api/src/services/activity.ts @@ -1,10 +1,10 @@ import { Action } from '@directus/constants'; import { useEnv } from '@directus/env'; import { ErrorCode, isDirectusError } from '@directus/errors'; -import type { Accountability } from '@directus/types'; +import type { Accountability, Item, PrimaryKey } from '@directus/types'; import { uniq } from 'lodash-es'; import { useLogger } from '../logger.js'; -import type { AbstractServiceOptions, Item, MutationOptions, PrimaryKey } from '../types/index.js'; +import type { AbstractServiceOptions, MutationOptions } from '../types/index.js'; import { getPermissions } from '../utils/get-permissions.js'; import { isValidUuid } from '../utils/is-valid-uuid.js'; import { Url } from '../utils/url.js'; diff --git a/api/src/services/authorization.ts b/api/src/services/authorization.ts index 98dd9ef610..8dfe6c68dd 100644 --- a/api/src/services/authorization.ts +++ b/api/src/services/authorization.ts @@ -3,8 +3,10 @@ import type { Accountability, Aggregate, Filter, + Item, Permission, PermissionsAction, + PrimaryKey, Query, SchemaOverview, } from '@directus/types'; @@ -19,9 +21,7 @@ import type { AbstractServiceOptions, FieldNode, FunctionFieldNode, - Item, NestedCollectionNode, - PrimaryKey, } from '../types/index.js'; import { getRelationInfo } from '../utils/get-relation-info.js'; import { stripFunction } from '../utils/strip-function.js'; diff --git a/api/src/services/files.ts b/api/src/services/files.ts index 68ac8a73da..3ec9f04192 100644 --- a/api/src/services/files.ts +++ b/api/src/services/files.ts @@ -1,7 +1,7 @@ import { useEnv } from '@directus/env'; import { ContentTooLargeError, ForbiddenError, InvalidPayloadError, ServiceUnavailableError } from '@directus/errors'; import formatTitle from '@directus/format-title'; -import type { BusboyFileStream, File } from '@directus/types'; +import type { BusboyFileStream, File, PrimaryKey } from '@directus/types'; import { toArray } from '@directus/utils'; import type { AxiosResponse } from 'axios'; import encodeURL from 'encodeurl'; @@ -22,7 +22,7 @@ import emitter from '../emitter.js'; import { useLogger } from '../logger.js'; import { getAxios } from '../request/index.js'; import { getStorage } from '../storage/index.js'; -import type { AbstractServiceOptions, MutationOptions, PrimaryKey } from '../types/index.js'; +import type { AbstractServiceOptions, MutationOptions } from '../types/index.js'; import { parseIptc, parseXmp } from '../utils/parse-image-metadata.js'; import { ItemsService } from './items.js'; diff --git a/api/src/services/flows.ts b/api/src/services/flows.ts index 230cb9ba13..9034d6db6b 100644 --- a/api/src/services/flows.ts +++ b/api/src/services/flows.ts @@ -1,6 +1,6 @@ -import type { FlowRaw } from '@directus/types'; +import type { FlowRaw, Item, PrimaryKey } from '@directus/types'; import { getFlowManager } from '../flows.js'; -import type { AbstractServiceOptions, Item, MutationOptions, PrimaryKey } from '../types/index.js'; +import type { AbstractServiceOptions, MutationOptions } from '../types/index.js'; import { ItemsService } from './items.js'; export class FlowsService extends ItemsService { diff --git a/api/src/services/graphql/index.ts b/api/src/services/graphql/index.ts index 982a268b41..773283d1a6 100644 --- a/api/src/services/graphql/index.ts +++ b/api/src/services/graphql/index.ts @@ -2,7 +2,7 @@ import { Action, FUNCTIONS } from '@directus/constants'; import { useEnv } from '@directus/env'; import { ErrorCode, ForbiddenError, InvalidPayloadError, isDirectusError, type DirectusError } from '@directus/errors'; import { isSystemCollection } from '@directus/system-data'; -import type { Accountability, Aggregate, Filter, PrimaryKey, Query, SchemaOverview } from '@directus/types'; +import type { Accountability, Aggregate, Filter, Item, PrimaryKey, Query, SchemaOverview } from '@directus/types'; import { parseFilterFunctionPath, toBoolean } from '@directus/utils'; import argon2 from 'argon2'; import type { @@ -54,7 +54,7 @@ import { SESSION_COOKIE_OPTIONS, } from '../../constants.js'; import getDatabase from '../../database/index.js'; -import type { AbstractServiceOptions, AuthenticationMode, GraphQLParams, Item } from '../../types/index.js'; +import type { AbstractServiceOptions, AuthenticationMode, GraphQLParams } from '../../types/index.js'; import { generateHash } from '../../utils/generate-hash.js'; import { getGraphQLType } from '../../utils/get-graphql-type.js'; import { getService } from '../../utils/get-service.js'; diff --git a/api/src/services/items.ts b/api/src/services/items.ts index b31c420d56..a0eb7e6ea7 100644 --- a/api/src/services/items.ts +++ b/api/src/services/items.ts @@ -1,7 +1,15 @@ import { Action } from '@directus/constants'; import { useEnv } from '@directus/env'; import { ForbiddenError, InvalidPayloadError } from '@directus/errors'; -import type { Accountability, PermissionsAction, Query, SchemaOverview } from '@directus/types'; +import { isSystemCollection } from '@directus/system-data'; +import type { + Accountability, + Item as AnyItem, + PermissionsAction, + PrimaryKey, + Query, + SchemaOverview, +} from '@directus/types'; import type Keyv from 'keyv'; import type { Knex } from 'knex'; import { assign, clone, cloneDeep, omit, pick, without } from 'lodash-es'; @@ -11,20 +19,12 @@ import { getHelpers } from '../database/helpers/index.js'; import getDatabase from '../database/index.js'; import runAST from '../database/run-ast.js'; import emitter from '../emitter.js'; -import type { - AbstractService, - AbstractServiceOptions, - ActionEventParams, - Item as AnyItem, - MutationOptions, - PrimaryKey, -} from '../types/index.js'; +import type { AbstractService, AbstractServiceOptions, ActionEventParams, MutationOptions } from '../types/index.js'; import getASTFromQuery from '../utils/get-ast-from-query.js'; import { shouldClearCache } from '../utils/should-clear-cache.js'; import { validateKeys } from '../utils/validate-keys.js'; import { AuthorizationService } from './authorization.js'; import { PayloadService } from './payload.js'; -import { isSystemCollection } from '@directus/system-data'; const env = useEnv(); diff --git a/api/src/services/notifications.ts b/api/src/services/notifications.ts index 620185b31f..d00ca7c789 100644 --- a/api/src/services/notifications.ts +++ b/api/src/services/notifications.ts @@ -1,7 +1,7 @@ import { useEnv } from '@directus/env'; -import type { Notification } from '@directus/types'; +import type { Notification, PrimaryKey } from '@directus/types'; import { useLogger } from '../logger.js'; -import type { AbstractServiceOptions, MutationOptions, PrimaryKey } from '../types/index.js'; +import type { AbstractServiceOptions, MutationOptions } from '../types/index.js'; import { md } from '../utils/md.js'; import { Url } from '../utils/url.js'; import { ItemsService } from './items.js'; diff --git a/api/src/services/operations.ts b/api/src/services/operations.ts index 48a2906d0d..16663c224c 100644 --- a/api/src/services/operations.ts +++ b/api/src/services/operations.ts @@ -1,6 +1,6 @@ -import type { OperationRaw } from '@directus/types'; +import type { Item, OperationRaw, PrimaryKey } from '@directus/types'; import { getFlowManager } from '../flows.js'; -import type { AbstractServiceOptions, Item, MutationOptions, PrimaryKey } from '../types/index.js'; +import type { AbstractServiceOptions, MutationOptions } from '../types/index.js'; import { ItemsService } from './items.js'; export class OperationsService extends ItemsService { diff --git a/api/src/services/payload.ts b/api/src/services/payload.ts index ec0139b02b..a1fe061690 100644 --- a/api/src/services/payload.ts +++ b/api/src/services/payload.ts @@ -1,5 +1,5 @@ import { ForbiddenError, InvalidPayloadError } from '@directus/errors'; -import type { Accountability, Query, SchemaOverview } from '@directus/types'; +import type { Accountability, Alterations, Item, PrimaryKey, Query, SchemaOverview } from '@directus/types'; import { parseJSON, toArray } from '@directus/utils'; import { format, isValid, parseISO } from 'date-fns'; import { unflatten } from 'flat'; @@ -11,14 +11,7 @@ import { parse as wktToGeoJSON } from 'wellknown'; import type { Helpers } from '../database/helpers/index.js'; import { getHelpers } from '../database/helpers/index.js'; import getDatabase from '../database/index.js'; -import type { - AbstractServiceOptions, - ActionEventParams, - Alterations, - Item, - MutationOptions, - PrimaryKey, -} from '../types/index.js'; +import type { AbstractServiceOptions, ActionEventParams, MutationOptions } from '../types/index.js'; import { generateHash } from '../utils/generate-hash.js'; import { ItemsService } from './items.js'; diff --git a/api/src/services/permissions/index.ts b/api/src/services/permissions/index.ts index f10331013f..adaec96c1f 100644 --- a/api/src/services/permissions/index.ts +++ b/api/src/services/permissions/index.ts @@ -1,8 +1,8 @@ import { ForbiddenError } from '@directus/errors'; -import type { ItemPermissions, Permission, PermissionsAction, Query } from '@directus/types'; +import type { Item, ItemPermissions, Permission, PermissionsAction, PrimaryKey, Query } from '@directus/types'; import type Keyv from 'keyv'; import { clearSystemCache, getCache } from '../../cache.js'; -import type { AbstractServiceOptions, Item, MutationOptions, PrimaryKey } from '../../types/index.js'; +import type { AbstractServiceOptions, MutationOptions } from '../../types/index.js'; import { AuthorizationService } from '../authorization.js'; import type { QueryOptions } from '../items.js'; import { ItemsService } from '../items.js'; diff --git a/api/src/services/revisions.ts b/api/src/services/revisions.ts index 635654c9d3..3e89713455 100644 --- a/api/src/services/revisions.ts +++ b/api/src/services/revisions.ts @@ -1,5 +1,6 @@ import { ForbiddenError, InvalidPayloadError } from '@directus/errors'; -import type { AbstractServiceOptions, Item, MutationOptions, PrimaryKey } from '../types/index.js'; +import type { Item, PrimaryKey } from '@directus/types'; +import type { AbstractServiceOptions, MutationOptions } from '../types/index.js'; import { ItemsService } from './items.js'; export class RevisionsService extends ItemsService { diff --git a/api/src/services/roles.ts b/api/src/services/roles.ts index ec33274267..fe7053daf7 100644 --- a/api/src/services/roles.ts +++ b/api/src/services/roles.ts @@ -1,7 +1,7 @@ import { ForbiddenError, InvalidPayloadError, UnprocessableContentError } from '@directus/errors'; -import type { Query, User } from '@directus/types'; +import type { Alterations, Item, PrimaryKey, Query, User } from '@directus/types'; import { getMatch } from 'ip-matching'; -import type { AbstractServiceOptions, Alterations, Item, MutationOptions, PrimaryKey } from '../types/index.js'; +import type { AbstractServiceOptions, MutationOptions } from '../types/index.js'; import { ItemsService } from './items.js'; import { PermissionsService } from './permissions/index.js'; import { PresetsService } from './presets.js'; diff --git a/api/src/services/shares.ts b/api/src/services/shares.ts index e04cdda52c..71521b5fa1 100644 --- a/api/src/services/shares.ts +++ b/api/src/services/shares.ts @@ -1,14 +1,14 @@ import { useEnv } from '@directus/env'; import { ForbiddenError, InvalidCredentialsError } from '@directus/errors'; +import type { Item, PrimaryKey } from '@directus/types'; import argon2 from 'argon2'; import jwt from 'jsonwebtoken'; +import { useLogger } from '../logger.js'; import type { AbstractServiceOptions, DirectusTokenPayload, - Item, LoginResult, MutationOptions, - PrimaryKey, ShareData, } from '../types/index.js'; import { getMilliseconds } from '../utils/get-milliseconds.js'; @@ -19,7 +19,6 @@ import { AuthorizationService } from './authorization.js'; import { ItemsService } from './items.js'; import { MailService } from './mail/index.js'; import { UsersService } from './users.js'; -import { useLogger } from '../logger.js'; const env = useEnv(); const logger = useLogger(); diff --git a/api/src/services/tfa.ts b/api/src/services/tfa.ts index 84e8de7acd..d858b9a251 100644 --- a/api/src/services/tfa.ts +++ b/api/src/services/tfa.ts @@ -1,8 +1,9 @@ +import { InvalidPayloadError } from '@directus/errors'; +import type { PrimaryKey } from '@directus/types'; import type { Knex } from 'knex'; import { authenticator } from 'otplib'; import getDatabase from '../database/index.js'; -import { InvalidPayloadError } from '@directus/errors'; -import type { AbstractServiceOptions, PrimaryKey } from '../types/index.js'; +import type { AbstractServiceOptions } from '../types/index.js'; import { ItemsService } from './items.js'; export class TFAService { diff --git a/api/src/services/users.ts b/api/src/services/users.ts index adb8c4f88d..8b0ad09b58 100644 --- a/api/src/services/users.ts +++ b/api/src/services/users.ts @@ -1,6 +1,6 @@ import { useEnv } from '@directus/env'; import { ForbiddenError, InvalidPayloadError, RecordNotUniqueError, UnprocessableContentError } from '@directus/errors'; -import type { Query } from '@directus/types'; +import type { Item, PrimaryKey, Query } from '@directus/types'; import { getSimpleHash, toArray } from '@directus/utils'; import { FailedValidationError, joiValidationErrorItemToErrorExtensions } from '@directus/validation'; import Joi from 'joi'; @@ -8,7 +8,8 @@ import jwt from 'jsonwebtoken'; import { cloneDeep, isEmpty } from 'lodash-es'; import { performance } from 'perf_hooks'; import getDatabase from '../database/index.js'; -import type { AbstractServiceOptions, Item, MutationOptions, PrimaryKey } from '../types/index.js'; +import { useLogger } from '../logger.js'; +import type { AbstractServiceOptions, MutationOptions } from '../types/index.js'; import isUrlAllowed from '../utils/is-url-allowed.js'; import { verifyJWT } from '../utils/jwt.js'; import { stall } from '../utils/stall.js'; @@ -16,7 +17,6 @@ import { Url } from '../utils/url.js'; import { ItemsService } from './items.js'; import { MailService } from './mail/index.js'; import { SettingsService } from './settings.js'; -import { useLogger } from '../logger.js'; const env = useEnv(); const logger = useLogger(); diff --git a/api/src/services/utils.ts b/api/src/services/utils.ts index ac0a519e8a..4cf1b93507 100644 --- a/api/src/services/utils.ts +++ b/api/src/services/utils.ts @@ -1,11 +1,11 @@ -import type { Accountability, SchemaOverview } from '@directus/types'; +import { ForbiddenError, InvalidPayloadError } from '@directus/errors'; +import { systemCollectionRows } from '@directus/system-data'; +import type { Accountability, PrimaryKey, SchemaOverview } from '@directus/types'; import type { Knex } from 'knex'; import { flushCaches, getCache } from '../cache.js'; import getDatabase from '../database/index.js'; -import { systemCollectionRows } from '@directus/system-data'; import emitter from '../emitter.js'; -import { ForbiddenError, InvalidPayloadError } from '@directus/errors'; -import type { AbstractServiceOptions, PrimaryKey } from '../types/index.js'; +import type { AbstractServiceOptions } from '../types/index.js'; import { shouldClearCache } from '../utils/should-clear-cache.js'; export class UtilsService { diff --git a/api/src/services/webhooks.ts b/api/src/services/webhooks.ts index eb68dd1f8d..dcd7410097 100644 --- a/api/src/services/webhooks.ts +++ b/api/src/services/webhooks.ts @@ -1,8 +1,9 @@ import { ErrorCode, createError, type DirectusError } from '@directus/errors'; import type { Bus } from '@directus/memory'; +import type { PrimaryKey } from '@directus/types'; import { useBus } from '../bus/index.js'; import { useLogger } from '../logger.js'; -import type { AbstractServiceOptions, MutationOptions, PrimaryKey, Webhook } from '../types/index.js'; +import type { AbstractServiceOptions, MutationOptions, Webhook } from '../types/index.js'; import { ItemsService } from './items.js'; const logger = useLogger(); diff --git a/api/src/types/items.ts b/api/src/types/items.ts index 2495d10e9c..5ab528e628 100644 --- a/api/src/types/items.ts +++ b/api/src/types/items.ts @@ -1,17 +1,7 @@ import type { DirectusError } from '@directus/errors'; -import type { EventContext } from '@directus/types'; +import type { EventContext, PrimaryKey } from '@directus/types'; import type { MutationTracker } from '../services/items.js'; -export type Item = Record; - -export type PrimaryKey = string | number; - -export type Alterations = { - create: Partial[]; - update: (K extends keyof T ? Partial & Pick : Partial)[]; - delete: (K extends keyof T ? T[K] : PrimaryKey)[]; -}; - export type MutationOptions = { /** * Callback function that's fired whenever a revision is made in the mutation diff --git a/api/src/types/services.ts b/api/src/types/services.ts index 8995e5ed6f..bfeec2b13b 100644 --- a/api/src/types/services.ts +++ b/api/src/types/services.ts @@ -1,6 +1,5 @@ -import type { Accountability, Query, SchemaOverview } from '@directus/types'; +import type { Accountability, Item, PrimaryKey, Query, SchemaOverview } from '@directus/types'; import type { Knex } from 'knex'; -import type { Item, PrimaryKey } from './items.js'; export type AbstractServiceOptions = { knex?: Knex | undefined; diff --git a/api/src/utils/merge-version-data.ts b/api/src/utils/merge-version-data.ts index 266c39a35b..a37b22de9a 100644 --- a/api/src/utils/merge-version-data.ts +++ b/api/src/utils/merge-version-data.ts @@ -1,7 +1,6 @@ -import type { Item, SchemaOverview } from '@directus/types'; -import Joi from 'joi'; -import type { Alterations } from '../types/index.js'; +import type { Alterations, Item, SchemaOverview } from '@directus/types'; import { isObject } from '@directus/utils'; +import Joi from 'joi'; import { cloneDeep } from 'lodash-es'; const alterationSchema = Joi.object({ diff --git a/api/src/utils/validate-keys.ts b/api/src/utils/validate-keys.ts index f587fe1e83..8eda8a5418 100644 --- a/api/src/utils/validate-keys.ts +++ b/api/src/utils/validate-keys.ts @@ -1,6 +1,5 @@ import { ForbiddenError } from '@directus/errors'; -import type { SchemaOverview } from '@directus/types'; -import type { PrimaryKey } from '../types/index.js'; +import type { PrimaryKey, SchemaOverview } from '@directus/types'; import { isValidUuid } from './is-valid-uuid.js'; /** diff --git a/app/src/views/private/components/drawer-item.vue b/app/src/views/private/components/drawer-item.vue index 6c6763f96e..3d77a02a31 100644 --- a/app/src/views/private/components/drawer-item.vue +++ b/app/src/views/private/components/drawer-item.vue @@ -3,7 +3,6 @@ import api from '@/api'; import { useEditsGuard } from '@/composables/use-edits-guard'; import { useItemPermissions } from '@/composables/use-permissions'; import { useTemplateData } from '@/composables/use-template-data'; -import { isSystemCollection } from '@directus/system-data'; import { useFieldsStore } from '@/stores/fields'; import { useRelationsStore } from '@/stores/relations'; import { getDefaultValuesFromFields } from '@/utils/get-default-values-from-fields'; @@ -11,7 +10,8 @@ import { unexpectedError } from '@/utils/unexpected-error'; import { validateItem } from '@/utils/validate-item'; import FilePreviewReplace from '@/views/private/components/file-preview-replace.vue'; import { useCollection } from '@directus/composables'; -import { Field, Relation } from '@directus/types'; +import { isSystemCollection } from '@directus/system-data'; +import { Field, PrimaryKey, Relation } from '@directus/types'; import { getEndpoint } from '@directus/utils'; import { isEmpty, merge, set } from 'lodash'; import { Ref, computed, ref, toRefs, watch } from 'vue'; @@ -21,14 +21,14 @@ import { useRouter } from 'vue-router'; interface Props { collection: string; active?: boolean; - primaryKey?: string | number | null; + primaryKey?: PrimaryKey | null; edits?: Record; junctionField?: string | null; disabled?: boolean; // There's an interesting case where the main form can be a newly created item ('+'), while // it has a pre-selected related item it needs to alter. In that case, we have to fetch the // related data anyway. - relatedPrimaryKey?: string | number; + relatedPrimaryKey?: PrimaryKey; // If this drawer-item is opened from a relational interface, we need to force-block the field // that relates back to the parent item. circularField?: string | null; diff --git a/packages/types/src/items.ts b/packages/types/src/items.ts index e46e12624f..e223da7f7e 100644 --- a/packages/types/src/items.ts +++ b/packages/types/src/items.ts @@ -1,3 +1,9 @@ export type Item = Record; export type PrimaryKey = string | number; + +export type Alterations = { + create: Partial[]; + update: (K extends keyof T ? Partial & Pick : Partial)[]; + delete: (K extends keyof T ? T[K] : PrimaryKey)[]; +};