nuxt-directus-sdk 6.0.0-beta.1 → 6.0.0-beta.2

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.
@@ -3,7 +3,7 @@ import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'node:fs';
3
3
  import { resolve, dirname } from 'node:path';
4
4
  import { parseArgs } from 'node:util';
5
5
  import { createDirectus, staticToken, rest } from '@directus/sdk';
6
- import { d as diffRemoteRules, e as formatDiff, c as compareRulesPayloads, f as fetchRemoteRules, k as loadRulesFromPayload, o as pushRules, g as formatPushResult, b as fetchRemoteRulesAsJson } from '../shared/nuxt-directus-sdk.1qEbZAZ_.mjs';
6
+ import { d as diffRemoteRules, e as formatDiff, c as compareRulesPayloads, f as fetchRemoteRules, k as loadRulesFromPayload, o as pushRules, g as formatPushResult, b as fetchRemoteRulesAsJson } from '../shared/nuxt-directus-sdk.BzXguU5u.mjs';
7
7
  import { generateTypesFromDirectus } from '../../dist/runtime/types/generate.js';
8
8
 
9
9
  function parseCsv(raw) {
package/dist/module.d.mts CHANGED
@@ -1,12 +1,12 @@
1
1
  import * as _nuxt_schema from '@nuxt/schema';
2
- import { Query } from '@directus/sdk';
2
+ import { Query, DirectusUser } from '@directus/sdk';
3
3
  import { ImageProviders, ImageModifiers } from '@nuxt/image';
4
4
 
5
5
  type DirectusUrl = string | {
6
6
  client: string;
7
7
  server: string;
8
8
  };
9
- type ReadMeFields = Query<DirectusSchema, DirectusSchema['directus_users']>['fields'];
9
+ type ReadMeFields = Query<DirectusSchema, DirectusUser<DirectusSchema>>['fields'];
10
10
  interface ModuleOptions {
11
11
  /**
12
12
  * Directus API URL
@@ -189,6 +189,26 @@ interface ModuleOptions {
189
189
  */
190
190
  verbose?: boolean;
191
191
  };
192
+ /**
193
+ * Auto-import functions from `@directus/sdk`.
194
+ *
195
+ * - `true` (default) — auto-imports every SDK function except those wrapped by
196
+ * this module (e.g. `createDirectus`, `rest`, `authentication`) or explicitly
197
+ * unsupported (e.g. `graphql`, `readGraphqlSdl`).
198
+ * - `false` — disables auto-imports entirely. You import from `@directus/sdk`
199
+ * manually wherever you use SDK functions.
200
+ * - `{ exclude: [...] }` — auto-imports with additional functions excluded.
201
+ * Useful if an SDK function name collides with something else in your app.
202
+ *
203
+ * @default true
204
+ */
205
+ autoImportSdk?: boolean | {
206
+ /**
207
+ * Additional SDK function names to exclude from auto-import.
208
+ * Added on top of the module's built-in exclusions.
209
+ */
210
+ exclude?: string[];
211
+ };
192
212
  }
193
213
  declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
194
214
 
package/dist/module.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import * as _nuxt_schema from '@nuxt/schema';
2
- import { Query } from '@directus/sdk';
2
+ import { Query, DirectusUser } from '@directus/sdk';
3
3
  import { ImageProviders, ImageModifiers } from '@nuxt/image';
4
4
 
5
5
  type DirectusUrl = string | {
6
6
  client: string;
7
7
  server: string;
8
8
  };
9
- type ReadMeFields = Query<DirectusSchema, DirectusSchema['directus_users']>['fields'];
9
+ type ReadMeFields = Query<DirectusSchema, DirectusUser<DirectusSchema>>['fields'];
10
10
  interface ModuleOptions {
11
11
  /**
12
12
  * Directus API URL
@@ -189,6 +189,26 @@ interface ModuleOptions {
189
189
  */
190
190
  verbose?: boolean;
191
191
  };
192
+ /**
193
+ * Auto-import functions from `@directus/sdk`.
194
+ *
195
+ * - `true` (default) — auto-imports every SDK function except those wrapped by
196
+ * this module (e.g. `createDirectus`, `rest`, `authentication`) or explicitly
197
+ * unsupported (e.g. `graphql`, `readGraphqlSdl`).
198
+ * - `false` — disables auto-imports entirely. You import from `@directus/sdk`
199
+ * manually wherever you use SDK functions.
200
+ * - `{ exclude: [...] }` — auto-imports with additional functions excluded.
201
+ * Useful if an SDK function name collides with something else in your app.
202
+ *
203
+ * @default true
204
+ */
205
+ autoImportSdk?: boolean | {
206
+ /**
207
+ * Additional SDK function names to exclude from auto-import.
208
+ * Added on top of the module's built-in exclusions.
209
+ */
210
+ exclude?: string[];
211
+ };
192
212
  }
193
213
  declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
194
214
 
package/dist/module.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuxt-directus-sdk",
3
- "version": "6.0.0-beta.1",
3
+ "version": "6.0.0-beta.2",
4
4
  "configKey": "directus",
5
5
  "compatibility": {
6
6
  "nuxt": "^4.0.0"
package/dist/module.mjs CHANGED
@@ -1,3 +1,4 @@
1
+ import * as directusSdk from '@directus/sdk';
1
2
  import { useLogger, defineNuxtModule, createResolver, addServerHandler, hasNuxtModule, tryResolveModule, addPlugin, addComponentsDir, addRouteMiddleware, addImportsDir, addImportsSources, addTypeTemplate, installModule } from '@nuxt/kit';
2
3
  import { colors } from 'consola/utils';
3
4
  import { defu } from 'defu';
@@ -6,7 +7,52 @@ import { generateTypesFromDirectus } from '../dist/runtime/types/index.js';
6
7
  import { useUrl } from '../dist/runtime/utils/index.js';
7
8
 
8
9
  const name = "nuxt-directus-sdk";
9
- const version = "6.0.0-beta.1";
10
+ const version = "6.0.0-beta.2";
11
+
12
+ const SDK_CLIENT_FACTORIES = /* @__PURE__ */ new Set([
13
+ "createDirectus",
14
+ "rest",
15
+ "graphql",
16
+ "authentication",
17
+ "staticToken",
18
+ "realtime",
19
+ "memoryStorage",
20
+ "readGraphqlSdl"
21
+ ]);
22
+ const SDK_REALTIME_INTERNALS = /* @__PURE__ */ new Set([
23
+ "auth",
24
+ "pong",
25
+ "sleep",
26
+ "messageCallback"
27
+ ]);
28
+ const SDK_INTERNALS = /* @__PURE__ */ new Set([
29
+ "throwIfEmpty",
30
+ "throwIfCoreCollection",
31
+ "getAuthEndpoint",
32
+ "formatFields",
33
+ "queryToParams"
34
+ ]);
35
+ const SDK_COMPOSABLE_WRAPPED = /* @__PURE__ */ new Set([
36
+ "readMe",
37
+ "updateMe",
38
+ "createUser",
39
+ "inviteUser",
40
+ "acceptUserInvite",
41
+ "passwordRequest",
42
+ "passwordReset",
43
+ "uploadFiles"
44
+ ]);
45
+ const SDK_DENYLIST = /* @__PURE__ */ new Set([
46
+ ...SDK_CLIENT_FACTORIES,
47
+ ...SDK_REALTIME_INTERNALS,
48
+ ...SDK_INTERNALS,
49
+ ...SDK_COMPOSABLE_WRAPPED
50
+ ]);
51
+ function discoverSdkImports(sdkModule, userExclude = /* @__PURE__ */ new Set()) {
52
+ return Object.keys(sdkModule).filter(
53
+ (key) => typeof sdkModule[key] === "function" && !SDK_DENYLIST.has(key) && !userExclude.has(key)
54
+ );
55
+ }
10
56
 
11
57
  const configKey = "directus";
12
58
  const logger = useLogger("nuxt-directus-sdk");
@@ -31,6 +77,7 @@ const module$1 = defineNuxtModule({
31
77
  enabled: true,
32
78
  prefix: ""
33
79
  },
80
+ autoImportSdk: true,
34
81
  auth: {
35
82
  enabled: true,
36
83
  enableGlobalAuthMiddleware: false,
@@ -46,10 +93,11 @@ const module$1 = defineNuxtModule({
46
93
  }
47
94
  },
48
95
  async setup(options, nuxtApp) {
96
+ const loggerMessage = [];
49
97
  const clientUrl = typeof options.url === "string" ? options.url : options.url?.client;
50
98
  const serverUrl = typeof options.url === "string" ? options.url : options.url?.server;
51
99
  if (!clientUrl) {
52
- logger.warn("No Directus URL found at build time. Set it in config options, .env file as DIRECTUS_URL, or at runtime via NUXT_PUBLIC_DIRECTUS_URL.");
100
+ loggerMessage.push(`\u26A0\uFE0F No Directus URL found at build time:`, ` - Set it in config options, .env file as DIRECTUS_URL or at runtime via NUXT_PUBLIC_DIRECTUS_URL.`, "");
53
101
  }
54
102
  const resolver = createResolver(import.meta.url);
55
103
  async function registerModule(name2, key, moduleOptions) {
@@ -59,7 +107,6 @@ const module$1 = defineNuxtModule({
59
107
  nuxtApp.options[key] = defu(nuxtApp.options[key], moduleOptions);
60
108
  }
61
109
  }
62
- const loggerMessage = [];
63
110
  const devProxyConfig = typeof options.devProxy === "boolean" ? { enabled: options.devProxy } : { ...options.devProxy };
64
111
  const directusUrl = serverUrl || clientUrl;
65
112
  const devProxyEnabled = devProxyConfig.enabled ?? nuxtApp.options.dev;
@@ -104,8 +151,8 @@ const module$1 = defineNuxtModule({
104
151
  if (req.url?.startsWith(wsProxyPath)) {
105
152
  try {
106
153
  proxy.ws(req, socket, head);
107
- } catch (err) {
108
- logger.error("WebSocket proxy error:", err.message);
154
+ } catch (error) {
155
+ logger.error("WebSocket proxy error:", error instanceof Error ? error.message : String(error));
109
156
  if (!socket.destroyed) {
110
157
  socket.destroy();
111
158
  }
@@ -127,7 +174,7 @@ const module$1 = defineNuxtModule({
127
174
  path: devProxyPath,
128
175
  wsPath: wsProxyPath
129
176
  };
130
- } else if (!nuxtApp.options.dev) {
177
+ } else if (!nuxtApp.options.dev && directusUrl) {
131
178
  loggerMessage.push(`\u{1F310} Production Mode:`, ` - SDK connects directly to ${colors.dim(`${directusUrl}`)}`, "");
132
179
  options.devProxy = false;
133
180
  }
@@ -165,7 +212,7 @@ const module$1 = defineNuxtModule({
165
212
  prefix: "",
166
213
  global: true
167
214
  });
168
- loggerMessage.push("\u{1F4DD} Visual Editor Components Added", "");
215
+ loggerMessage.push("\u{1F4DD} Visual Editor Component Added", "");
169
216
  }
170
217
  if (options.auth?.enableGlobalAuthMiddleware) {
171
218
  loggerMessage.push("\u{1F512} Auth middleware installed globally.", "");
@@ -180,69 +227,24 @@ const module$1 = defineNuxtModule({
180
227
  path: resolver.resolve("./runtime/middleware/guest")
181
228
  });
182
229
  addImportsDir(resolver.resolve("./runtime/composables"));
183
- const directusSdkImports = {
230
+ const autoImportSdk = options.autoImportSdk ?? true;
231
+ const userExclude = new Set(
232
+ typeof autoImportSdk === "object" && autoImportSdk?.exclude ? autoImportSdk.exclude : []
233
+ );
234
+ const directusSdkImports = autoImportSdk === false ? null : {
184
235
  from: "@directus/sdk",
185
- imports: [
186
- "aggregate",
187
- "generateUid",
188
- "createComment",
189
- "updateComment",
190
- "deleteComment",
191
- "createField",
192
- "createItem",
193
- "createItems",
194
- "deleteField",
195
- "deleteFile",
196
- "deleteFiles",
197
- "readActivities",
198
- "readActivity",
199
- "deleteItem",
200
- "deleteItems",
201
- "deleteUser",
202
- "deleteUsers",
203
- "importFile",
204
- "readCollection",
205
- "readCollections",
206
- "createCollection",
207
- "updateCollection",
208
- "deleteCollection",
209
- "readField",
210
- "readFieldsByCollection",
211
- "readFields",
212
- "readFile",
213
- "readFiles",
214
- "readItem",
215
- "readItems",
216
- "readSingleton",
217
- "readMe",
218
- "createUser",
219
- "createUsers",
220
- "readUser",
221
- "readUsers",
222
- "readProviders",
223
- "readFolder",
224
- "readFolders",
225
- "uploadFiles",
226
- "updateField",
227
- "updateFile",
228
- "updateFiles",
229
- "updateFolder",
230
- "updateFolders",
231
- "updateItem",
232
- "updateItems",
233
- "updateSingleton",
234
- "updateMe",
235
- "updateUser",
236
- "updateUsers",
237
- "withToken"
238
- ]
236
+ imports: discoverSdkImports(directusSdk, userExclude)
239
237
  };
240
- addImportsSources(directusSdkImports);
238
+ if (directusSdkImports) {
239
+ addImportsSources(directusSdkImports);
240
+ }
241
241
  nuxtApp.hook("nitro:config", (nitroConfig) => {
242
242
  nitroConfig.alias = nitroConfig.alias || {};
243
243
  nitroConfig.imports = nitroConfig.imports || {};
244
244
  nitroConfig.imports.presets = nitroConfig.imports.presets || [];
245
- nitroConfig.imports.presets.push(directusSdkImports);
245
+ if (directusSdkImports) {
246
+ nitroConfig.imports.presets.push(directusSdkImports);
247
+ }
246
248
  nitroConfig.imports.presets.push({
247
249
  from: resolver.resolve("./runtime/server/services"),
248
250
  imports: [
@@ -98,8 +98,8 @@ interface PermissionConfig<Schema, Collection extends keyof Schema> {
98
98
  fields?: '*' | (keyof CollectionItem<Schema, Collection>)[];
99
99
  /** Filter that restricts which items can be accessed */
100
100
  filter?: QueryFilter<Schema, CollectionItem<Schema, Collection>>;
101
- /** Default values applied when creating/updating items */
102
- presets?: Partial<CollectionItem<Schema, Collection>>;
101
+ /** Default values applied when creating/updating items. Accepts schema-typed values or Directus Dynamic Variables (e.g. `$CURRENT_USER`) */
102
+ presets?: Partial<CollectionItem<Schema, Collection>> | Record<string, unknown>;
103
103
  /** Validation rules using Standard Schema or Directus format */
104
104
  validation?: StandardSchemaV1<Partial<CollectionItem<Schema, Collection>>> | DirectusValidation;
105
105
  }
@@ -301,8 +301,8 @@ interface PermissionConfigInput<Schema, K extends keyof Schema> {
301
301
  fields?: '*' | (keyof CollectionItem<Schema, K>)[];
302
302
  /** Filter that restricts which items can be accessed */
303
303
  filter?: QueryFilter<Schema, CollectionItem<Schema, K>>;
304
- /** Default values applied when creating/updating items */
305
- presets?: Partial<CollectionItem<Schema, K>>;
304
+ /** Default values applied when creating/updating items. Accepts schema-typed values or Directus Dynamic Variables (e.g. `$CURRENT_USER`) */
305
+ presets?: Partial<CollectionItem<Schema, K>> | Record<string, unknown>;
306
306
  /** Validation rules using Standard Schema or Directus format */
307
307
  validation?: StandardSchemaV1<Partial<CollectionItem<Schema, K>>> | DirectusValidation;
308
308
  }
@@ -605,11 +605,9 @@ interface DiffChange<T> {
605
605
  remote?: T;
606
606
  }
607
607
  /** Role diff change */
608
- interface RoleDiffChange extends DiffChange<DirectusRolePayload> {
609
- }
608
+ type RoleDiffChange = DiffChange<DirectusRolePayload>;
610
609
  /** Policy diff change */
611
- interface PolicyDiffChange extends DiffChange<DirectusPolicyPayload> {
612
- }
610
+ type PolicyDiffChange = DiffChange<DirectusPolicyPayload>;
613
611
  /** Permission diff change */
614
612
  interface PermissionDiffChange extends DiffChange<DirectusPermissionPayload> {
615
613
  collection: string;
@@ -98,8 +98,8 @@ interface PermissionConfig<Schema, Collection extends keyof Schema> {
98
98
  fields?: '*' | (keyof CollectionItem<Schema, Collection>)[];
99
99
  /** Filter that restricts which items can be accessed */
100
100
  filter?: QueryFilter<Schema, CollectionItem<Schema, Collection>>;
101
- /** Default values applied when creating/updating items */
102
- presets?: Partial<CollectionItem<Schema, Collection>>;
101
+ /** Default values applied when creating/updating items. Accepts schema-typed values or Directus Dynamic Variables (e.g. `$CURRENT_USER`) */
102
+ presets?: Partial<CollectionItem<Schema, Collection>> | Record<string, unknown>;
103
103
  /** Validation rules using Standard Schema or Directus format */
104
104
  validation?: StandardSchemaV1<Partial<CollectionItem<Schema, Collection>>> | DirectusValidation;
105
105
  }
@@ -301,8 +301,8 @@ interface PermissionConfigInput<Schema, K extends keyof Schema> {
301
301
  fields?: '*' | (keyof CollectionItem<Schema, K>)[];
302
302
  /** Filter that restricts which items can be accessed */
303
303
  filter?: QueryFilter<Schema, CollectionItem<Schema, K>>;
304
- /** Default values applied when creating/updating items */
305
- presets?: Partial<CollectionItem<Schema, K>>;
304
+ /** Default values applied when creating/updating items. Accepts schema-typed values or Directus Dynamic Variables (e.g. `$CURRENT_USER`) */
305
+ presets?: Partial<CollectionItem<Schema, K>> | Record<string, unknown>;
306
306
  /** Validation rules using Standard Schema or Directus format */
307
307
  validation?: StandardSchemaV1<Partial<CollectionItem<Schema, K>>> | DirectusValidation;
308
308
  }
@@ -605,11 +605,9 @@ interface DiffChange<T> {
605
605
  remote?: T;
606
606
  }
607
607
  /** Role diff change */
608
- interface RoleDiffChange extends DiffChange<DirectusRolePayload> {
609
- }
608
+ type RoleDiffChange = DiffChange<DirectusRolePayload>;
610
609
  /** Policy diff change */
611
- interface PolicyDiffChange extends DiffChange<DirectusPolicyPayload> {
612
- }
610
+ type PolicyDiffChange = DiffChange<DirectusPolicyPayload>;
613
611
  /** Permission diff change */
614
612
  interface PermissionDiffChange extends DiffChange<DirectusPermissionPayload> {
615
613
  collection: string;
@@ -1,5 +1,5 @@
1
- import { i as isStandardSchema } from '../shared/nuxt-directus-sdk.1qEbZAZ_.mjs';
2
- export { c as compareRulesPayloads, d as diffRemoteRules, a as diffRules, f as fetchRemoteRules, b as fetchRemoteRulesAsJson, e as formatDiff, g as formatPushResult, h as isValidationStandardSchema, l as loadRulesFromJson, j as loadRulesFromJsonFile, k as loadRulesFromPayload, m as loadRulesFromPayloadFile, n as normalizeRules, p as pullRules, o as pushRules, r as rulesToJson, s as serializeToDirectusApi, q as serializeToJson, t as toDirectusValidation } from '../shared/nuxt-directus-sdk.1qEbZAZ_.mjs';
1
+ import { i as isStandardSchema } from '../shared/nuxt-directus-sdk.BzXguU5u.mjs';
2
+ export { c as compareRulesPayloads, d as diffRemoteRules, a as diffRules, f as fetchRemoteRules, b as fetchRemoteRulesAsJson, e as formatDiff, g as formatPushResult, h as isValidationStandardSchema, l as loadRulesFromJson, j as loadRulesFromJsonFile, k as loadRulesFromPayload, m as loadRulesFromPayloadFile, n as normalizeRules, p as pullRules, o as pushRules, r as rulesToJson, s as serializeToDirectusApi, q as serializeToJson, t as toDirectusValidation } from '../shared/nuxt-directus-sdk.BzXguU5u.mjs';
3
3
  import '@directus/sdk';
4
4
 
5
5
  function isPolicyReference(input) {
@@ -1,19 +1,31 @@
1
1
  import type { ComputedRef, Ref } from '#imports';
2
2
  import type { RouteLocationRaw } from '#vue-router';
3
- import type { LoginOptions } from '@directus/sdk';
4
- import type { DirectusError, RegisterUserInput } from '@directus/types';
3
+ import type { DirectusUser as DirectusUserSDK, NestedPartial, LoginOptions } from '@directus/sdk';
4
+ import type { RegisterUserInput } from '@directus/types';
5
+ /**
6
+ * Fields that can be passed to {@link useDirectusAuth.updateMe}.
7
+ *
8
+ * `role` and `policies` are intentionally excluded — users cannot elevate their
9
+ * own privileges via this composable.
10
+ *
11
+ * `avatar` accepts a pre-uploaded file ID (`string`). To change a user's avatar,
12
+ * first upload the file via the files endpoint to get its ID, then pass that ID here.
13
+ */
14
+ export type UpdateMeInput = Omit<NestedPartial<DirectusUserSDK<DirectusSchema>>, 'id' | 'role' | 'policies' | 'avatar'> & {
15
+ avatar?: string | null;
16
+ };
5
17
  export interface DirectusAuth {
6
18
  user: Ref<DirectusUser | null>;
7
19
  loggedIn: ComputedRef<boolean>;
8
- readMe: () => Promise<DirectusUser | DirectusError | null>;
9
- updateMe: (data: Partial<DirectusUser>) => Promise<DirectusUser | DirectusError | null>;
20
+ readMe: () => Promise<DirectusUser | null>;
21
+ updateMe: (data: UpdateMeInput) => Promise<DirectusUser>;
10
22
  login: (email: string, password: string, options?: LoginOptions & {
11
23
  redirect?: boolean | RouteLocationRaw;
12
24
  }) => Promise<DirectusUser | null>;
13
25
  loginWithProvider: (provider: string, redirectOnLogin?: boolean | string) => Promise<void>;
14
26
  logout: (redirect?: boolean | RouteLocationRaw) => Promise<void>;
15
- createUser: (data: RegisterUserInput & Partial<Omit<DirectusUser, 'id' | 'email' | 'password'>>) => Promise<DirectusUser>;
16
- register: (data: RegisterUserInput & Partial<Omit<DirectusUser, 'id' | 'email' | 'password'>>) => Promise<DirectusUser>;
27
+ createUser: (data: RegisterUserInput) => Promise<DirectusUser>;
28
+ register: (data: RegisterUserInput) => Promise<DirectusUser>;
17
29
  inviteUser: (email: string, role: string, inviteUrl?: string | undefined) => Promise<void>;
18
30
  acceptUserInvite: (token: string, password: string) => Promise<void>;
19
31
  passwordRequest: (email: string, resetUrl?: string | undefined) => Promise<void>;
@@ -30,7 +30,8 @@ export function useDirectusAuth() {
30
30
  }
31
31
  loading.value = true;
32
32
  try {
33
- const response = await directus.request(directusReadMe({ fields: config.public.directus.auth?.readMeFields ?? ["*"] }));
33
+ const fields = config.public.directus.auth?.readMeFields;
34
+ const response = await directus.request(directusReadMe(fields?.length ? { fields } : void 0));
34
35
  if (!response.id) {
35
36
  console.warn("Directus is not configured to return the 'id' field for DirectusUsers.");
36
37
  }
@@ -47,7 +48,8 @@ export function useDirectusAuth() {
47
48
  const currentUser = user.value;
48
49
  if (!currentUser?.id)
49
50
  throw new Error("No user available");
50
- const response = await directus.request(directusUpdateMe(data, { fields: config.public.directus.auth?.readMeFields ?? ["*"] }));
51
+ const fields = config.public.directus.auth?.readMeFields;
52
+ const response = await directus.request(directusUpdateMe(data, fields?.length ? { fields } : void 0));
51
53
  user.value = response;
52
54
  return user.value;
53
55
  }
@@ -1,11 +1,11 @@
1
1
  import type { DirectusFile, DirectusSchema } from '#build/types/directus';
2
- import type { Query } from '@directus/sdk';
2
+ import type { DirectusFile as DirectusSdkFile, Query } from '@directus/sdk';
3
3
  interface DirectusFileUpload {
4
4
  file: File;
5
- data?: Record<keyof DirectusFile, string>;
5
+ data?: Partial<Record<keyof DirectusFile, string>>;
6
6
  }
7
- export declare function uploadDirectusFile(file: DirectusFileUpload, query?: Query<DirectusSchema, DirectusSchema['directus_files']>): Promise<any>;
8
- export declare function uploadDirectusFiles(files: DirectusFileUpload[], query?: Query<DirectusSchema, DirectusSchema['directus_files']>): Promise<any>;
7
+ export declare function uploadDirectusFile(file: DirectusFileUpload, query?: Query<DirectusSchema, DirectusSdkFile<DirectusSchema>>): Promise<any>;
8
+ export declare function uploadDirectusFiles(files: DirectusFileUpload[], query?: Query<DirectusSchema, DirectusSdkFile<DirectusSchema>>): Promise<any>;
9
9
  export type DirectusThumbnailFormat = 'jpg' | 'png' | 'webp' | 'tiff' | 'avif';
10
10
  export type DirectusThumbnailFit = 'cover' | 'contain' | 'inside' | 'outside';
11
11
  export interface DirectusFileOptions {
@@ -1,2 +1,2 @@
1
- declare const _default: import("nuxt/app").RouteMiddleware;
1
+ declare const _default: import("#app").RouteMiddleware;
2
2
  export default _default;
@@ -1,2 +1,2 @@
1
- declare const _default: import("nuxt/app").RouteMiddleware;
1
+ declare const _default: import("#app").RouteMiddleware;
2
2
  export default _default;
@@ -1,2 +1,2 @@
1
- declare const _default: import("nuxt/app").Plugin<Record<string, unknown>> & import("nuxt/app").ObjectPlugin<Record<string, unknown>>;
1
+ declare const _default: import("#app").Plugin<Record<string, unknown>> & import("#app").ObjectPlugin<Record<string, unknown>>;
2
2
  export default _default;
@@ -1,8 +1,8 @@
1
- declare const _default: import("nuxt/app").Plugin<{
1
+ declare const _default: import("#app").Plugin<{
2
2
  directusVisualEditing: {
3
3
  refresh: () => Promise<void>;
4
4
  };
5
- }> & import("nuxt/app").ObjectPlugin<{
5
+ }> & import("#app").ObjectPlugin<{
6
6
  directusVisualEditing: {
7
7
  refresh: () => Promise<void>;
8
8
  };
@@ -1,5 +1,8 @@
1
- export interface FallbackSchema {
2
- directus_users?: Record<string, never>
3
- }
1
+ export {}
4
2
 
5
- declare global { interface DirectusSchema extends FallbackSchema { } }
3
+ declare global {
4
+ // Empty by design — generated types augment this; the fallback keeps DirectusSchema always declared.
5
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
6
+ interface DirectusSchema {
7
+ }
8
+ }
@@ -132,7 +132,7 @@ export function transformSnapshotToTypeString(collections, fields, relations, pr
132
132
  });
133
133
  const customInterfaceBlocks = generatedCollections.map((g) => g.interfaceBlock);
134
134
  const directusSchemaBlock = generateDirectusSchemaInterface(allCollectionsForSchema, prefix, singletonCollectionNames);
135
- const allCollectionNames = allCollectionsForSchema.map((c) => c.collection);
135
+ const allCollectionNames = allCollectionsForSchema.filter((c) => !collectionIsDirectusSystem(c.collection)).map((c) => c.collection);
136
136
  const enumBlock = generateCollectionNamesEnum(allCollectionNames, prefix);
137
137
  const bodyParts = [
138
138
  ...uniqueExtensionOutputs,
@@ -305,8 +305,9 @@ ${fieldLines.join("\n")}
305
305
  function generateDirectusSchemaInterface(allCollections, prefix, singletons = /* @__PURE__ */ new Set()) {
306
306
  const entries = allCollections.map((collection) => {
307
307
  const isSingleton = collection.meta?.singleton === true;
308
+ const isDirectusSystemCollection = collectionIsDirectusSystem(collection.collection);
308
309
  const interfaceName = collectionNameToInterfaceName(collection.collection, prefix, singletons);
309
- const valueType = isSingleton ? interfaceName : `${interfaceName}[]`;
310
+ const valueType = isSingleton || isDirectusSystemCollection ? interfaceName : `${interfaceName}[]`;
310
311
  return ` ${collection.collection}: ${valueType};`;
311
312
  });
312
313
  return `interface DirectusSchema {
@@ -1,3 +1,3 @@
1
1
  export { Slot } from './slot.js';
2
2
  export declare function useUrl(base: string, ...paths: string[]): string;
3
- export declare function isQueryParamEnabled(value: any): boolean;
3
+ export declare function isQueryParamEnabled(value: unknown): value is true | 1 | "true" | "1";
@@ -215,8 +215,8 @@ function convertPayloadPermission(perm) {
215
215
  }
216
216
  return {
217
217
  fields: perm.fields ? perm.fields.includes("*") ? "*" : perm.fields : void 0,
218
- filter: perm.permissions,
219
- presets: perm.presets,
218
+ filter: perm.permissions ?? void 0,
219
+ presets: perm.presets ?? void 0,
220
220
  validation: perm.validation ?? void 0
221
221
  };
222
222
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nuxt-directus-sdk",
3
3
  "type": "module",
4
- "version": "6.0.0-beta.1",
4
+ "version": "6.0.0-beta.2",
5
5
  "packageManager": "pnpm@10.32.1",
6
6
  "description": "A Nuxt module for Directus with built-in authentication, realtime, file management, type generation, and visual editor support.",
7
7
  "author": "Matthew Rollinson <matt@rolley.io>",
@@ -84,7 +84,7 @@
84
84
  "ufo": "^1.6.3"
85
85
  },
86
86
  "devDependencies": {
87
- "@antfu/eslint-config": "^4.10.0",
87
+ "@nuxt/eslint-config": "^1.15.2",
88
88
  "@directus/sdk": "^21.2.2",
89
89
  "@directus/types": "^15.0.2",
90
90
  "@directus/visual-editing": "^2.0.0",
@@ -95,7 +95,7 @@
95
95
  "@nuxt/test-utils": "^4.0.2",
96
96
  "@types/http-proxy": "^1.17.17",
97
97
  "changelogen": "^0.6.1",
98
- "eslint": "^9.22.0",
98
+ "eslint": "^10.2.1",
99
99
  "nuxt": "^4.4.2",
100
100
  "typescript": "^6.0.3",
101
101
  "vitepress": "^1.6.4",