nuxt-files-sdk 0.0.4 → 0.0.5

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.
Files changed (48) hide show
  1. package/README.md +17 -2
  2. package/dist/config.d.ts +15 -1
  3. package/dist/config.js +2 -1
  4. package/dist/config.js.map +1 -1
  5. package/dist/devtools/client/app.js +6 -0
  6. package/dist/devtools/client/index.html +389 -72
  7. package/dist/devtools/devframe.js +60 -7
  8. package/dist/devtools/devframe.js.map +1 -1
  9. package/dist/devtools/diagnostics.d.ts +37 -0
  10. package/dist/devtools/diagnostics.js +39 -0
  11. package/dist/devtools/diagnostics.js.map +1 -0
  12. package/dist/devtools/enabled.d.ts +9 -0
  13. package/dist/devtools/enabled.js +3 -2
  14. package/dist/devtools/enabled.js.map +1 -1
  15. package/dist/devtools/files-read.d.ts +5 -0
  16. package/dist/devtools/files-read.js +7 -0
  17. package/dist/devtools/files-read.js.map +1 -0
  18. package/dist/devtools/files-write.d.ts +5 -0
  19. package/dist/devtools/files-write.js +7 -0
  20. package/dist/devtools/files-write.js.map +1 -0
  21. package/dist/devtools/files.js +48 -0
  22. package/dist/devtools/files.js.map +1 -0
  23. package/dist/devtools/index.js +10 -3
  24. package/dist/devtools/index.js.map +1 -1
  25. package/dist/devtools/nuxt-v3-handler.js +16 -4
  26. package/dist/devtools/nuxt-v3-handler.js.map +1 -1
  27. package/dist/devtools/nuxt-v4.js +37 -6
  28. package/dist/devtools/nuxt-v4.js.map +1 -1
  29. package/dist/devtools/snapshot.d.ts +4 -5
  30. package/dist/devtools/snapshot.js +3 -1
  31. package/dist/devtools/snapshot.js.map +1 -1
  32. package/dist/integration/nitro.d.ts +6 -1
  33. package/dist/integration/nitro.js +37 -13
  34. package/dist/integration/nitro.js.map +1 -1
  35. package/dist/module.d.ts +4 -3
  36. package/dist/module.js +15 -3
  37. package/dist/module.js.map +1 -1
  38. package/dist/package.js +1 -1
  39. package/dist/runtime/registry.d.ts +4 -4
  40. package/dist/runtime/registry.js +46 -15
  41. package/dist/runtime/registry.js.map +1 -1
  42. package/dist/runtime.js +13 -8
  43. package/dist/runtime.js.map +1 -1
  44. package/package.json +6 -11
  45. package/dist/plugins/versioning.d.ts +0 -3
  46. package/dist/plugins/versioning.js +0 -2
  47. package/dist/plugins.d.ts +0 -31
  48. package/dist/plugins.js +0 -16
package/dist/module.js CHANGED
@@ -1,4 +1,4 @@
1
- import { shouldEnableFilesDevtools } from "./devtools/enabled.js";
1
+ import { filesDevtoolsWriteEnabled, shouldEnableFilesDevtools } from "./devtools/enabled.js";
2
2
  import { setupNitroFilesIntegration } from "./integration/nitro.js";
3
3
  import { FilesRegistry } from "./runtime/registry.js";
4
4
  import { configureFiles, inspectFiles, useServerFiles } from "./runtime.js";
@@ -19,6 +19,11 @@ var module_default = defineNuxtModule({
19
19
  },
20
20
  async setup(options, nuxt) {
21
21
  const configPath = resolve(nuxt.options.rootDir, options.config);
22
+ (nuxt.options.typescript.tsConfig.include ??= []).push(configPath);
23
+ const filesSdkTypes = resolve(nuxt.options.rootDir, "node_modules/files-sdk/dist").replaceAll("\\", "/");
24
+ const paths = (nuxt.options.typescript.tsConfig.compilerOptions ??= {}).paths ??= {};
25
+ paths["files-sdk"] ??= [`${filesSdkTypes}/index.d.ts`];
26
+ paths["files-sdk/*"] ??= [`${filesSdkTypes}/*/index.d.ts`];
22
27
  nuxt.hook("nitro:init", (nitro) => setupNitroFilesIntegration(nitro, {
23
28
  configPath,
24
29
  development: nuxt.options.dev
@@ -26,9 +31,16 @@ var module_default = defineNuxtModule({
26
31
  nuxt.hook("prepare:types", ({ references }) => {
27
32
  references.push({ path: resolve(nuxt.options.buildDir, "nuxt-files-sdk/storage-registry.d.ts") });
28
33
  });
29
- addServerImports({
34
+ addServerImports([{
35
+ name: "defineFilesConfig",
36
+ from: "nuxt-files-sdk/config"
37
+ }, {
30
38
  name: "useServerFiles",
31
39
  from: "nuxt-files-sdk/runtime"
40
+ }]);
41
+ addImports({
42
+ name: "defineFilesConfig",
43
+ from: "nuxt-files-sdk/config"
32
44
  });
33
45
  for (const name of [
34
46
  "useFiles",
@@ -42,7 +54,7 @@ var module_default = defineNuxtModule({
42
54
  if (shouldEnableFilesDevtools(nuxt.options.dev, options.devtools, nuxt.options.devtools)) {
43
55
  const version = await getNuxtModuleVersion("@nuxt/devtools", nuxt);
44
56
  const { setupFilesDevtools } = await import("./devtools/index.js");
45
- setupFilesDevtools(nuxt, version || "3");
57
+ setupFilesDevtools(nuxt, version || "3", filesDevtoolsWriteEnabled(options.devtools));
46
58
  }
47
59
  }
48
60
  });
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","names":[],"sources":["../src/module.ts"],"sourcesContent":["import { resolve } from 'node:path'\n\nimport { addImports, addServerImports, defineNuxtModule, getNuxtModuleVersion } from '@nuxt/kit'\nimport type { Nuxt } from '@nuxt/schema'\n\nimport { shouldEnableFilesDevtools } from './devtools/enabled'\nimport { setupNitroFilesIntegration, type NitroIntegration } from './integration/nitro'\n\ndeclare module '@nuxt/schema' {\n interface NuxtHooks {\n 'nitro:init': (nitro: NitroIntegration) => void | Promise<void>\n }\n}\n\n/** Options for the Nuxt Files SDK module. */\nexport interface ModuleOptions {\n /** Path to the Files configuration module, relative to the Nuxt root directory. */\n config: string\n /** Enable Files SDK development diagnostics when Nuxt DevTools is available. */\n devtools: boolean\n}\n\n/** Install Files SDK storage configuration, server utilities, Vue composables, and development diagnostics in Nuxt. */\nexport default defineNuxtModule<ModuleOptions>({\n meta: {\n name: 'nuxt-files-sdk',\n configKey: 'files',\n compatibility: { nuxt: '^4.0.0 || ^5.0.0' },\n },\n defaults: {\n config: 'files.config.ts',\n devtools: true,\n },\n async setup(options, nuxt: Nuxt) {\n const configPath = resolve(nuxt.options.rootDir, options.config)\n nuxt.hook('nitro:init', (nitro) =>\n setupNitroFilesIntegration(nitro, {\n configPath,\n development: nuxt.options.dev,\n }),\n )\n nuxt.hook('prepare:types', ({ references }) => {\n references.push({ path: resolve(nuxt.options.buildDir, 'nuxt-files-sdk/storage-registry.d.ts') })\n })\n\n addServerImports({ name: 'useServerFiles', from: 'nuxt-files-sdk/runtime' })\n for (const name of ['useFiles', 'useFile', 'useList', 'useSearch']) {\n addImports({ name, from: 'files-sdk/vue' })\n }\n\n if (shouldEnableFilesDevtools(nuxt.options.dev, options.devtools, nuxt.options.devtools)) {\n const version = await getNuxtModuleVersion('@nuxt/devtools', nuxt)\n const { setupFilesDevtools } = await import('./devtools')\n setupFilesDevtools(nuxt, version || '3')\n }\n },\n})\n\nexport * from 'files-sdk'\nexport * from './runtime'\n"],"mappings":";;;;;;;;;AAuBA,IAAA,iBAAe,iBAAgC;CAC3C,MAAM;EACF,MAAM;EACN,WAAW;EACX,eAAe,EAAE,MAAM,mBAAmB;CAC9C;CACA,UAAU;EACN,QAAQ;EACR,UAAU;CACd;CACA,MAAM,MAAM,SAAS,MAAY;EAC7B,MAAM,aAAa,QAAQ,KAAK,QAAQ,SAAS,QAAQ,MAAM;EAC/D,KAAK,KAAK,eAAe,UACrB,2BAA2B,OAAO;GAC9B;GACA,aAAa,KAAK,QAAQ;EAC9B,CAAC,CACL;EACA,KAAK,KAAK,kBAAkB,EAAE,iBAAiB;GAC3C,WAAW,KAAK,EAAE,MAAM,QAAQ,KAAK,QAAQ,UAAU,sCAAsC,EAAE,CAAC;EACpG,CAAC;EAED,iBAAiB;GAAE,MAAM;GAAkB,MAAM;EAAyB,CAAC;EAC3E,KAAK,MAAM,QAAQ;GAAC;GAAY;GAAW;GAAW;EAAW,GAC7D,WAAW;GAAE;GAAM,MAAM;EAAgB,CAAC;EAG9C,IAAI,0BAA0B,KAAK,QAAQ,KAAK,QAAQ,UAAU,KAAK,QAAQ,QAAQ,GAAG;GACtF,MAAM,UAAU,MAAM,qBAAqB,kBAAkB,IAAI;GACjE,MAAM,EAAE,uBAAuB,MAAM,OAAO;GAC5C,mBAAmB,MAAM,WAAW,GAAG;EAC3C;CACJ;AACJ,CAAC"}
1
+ {"version":3,"file":"module.js","names":[],"sources":["../src/module.ts"],"sourcesContent":["import { resolve } from 'node:path'\n\nimport { addImports, addServerImports, defineNuxtModule, getNuxtModuleVersion } from '@nuxt/kit'\nimport type { Nuxt } from '@nuxt/schema'\n\nimport { filesDevtoolsWriteEnabled, shouldEnableFilesDevtools, type FilesDevtoolsOptions } from './devtools/enabled'\nimport { setupNitroFilesIntegration, type NitroIntegration } from './integration/nitro'\n\ndeclare module '@nuxt/schema' {\n interface NuxtHooks {\n 'nitro:init': (nitro: NitroIntegration) => void | Promise<void>\n }\n}\n\n/** Options for the Nuxt Files SDK module. */\nexport interface ModuleOptions {\n /** Path to the Files configuration module, relative to the Nuxt root directory. */\n config: string\n /** Enable Files SDK development tools. File writes are enabled unless explicitly disabled. */\n devtools: boolean | FilesDevtoolsOptions\n}\n\n/** Install Files SDK storage configuration, server utilities, Vue composables, and development diagnostics in Nuxt. */\nexport default defineNuxtModule<ModuleOptions>({\n meta: {\n name: 'nuxt-files-sdk',\n configKey: 'files',\n compatibility: { nuxt: '^4.0.0 || ^5.0.0' },\n },\n defaults: {\n config: 'files.config.ts',\n devtools: true,\n },\n async setup(options, nuxt: Nuxt) {\n const configPath = resolve(nuxt.options.rootDir, options.config)\n ;(nuxt.options.typescript.tsConfig.include ??= []).push(configPath)\n const filesSdkTypes = resolve(nuxt.options.rootDir, 'node_modules/files-sdk/dist').replaceAll('\\\\', '/')\n const paths = ((nuxt.options.typescript.tsConfig.compilerOptions ??= {}).paths ??= {})\n paths['files-sdk'] ??= [`${filesSdkTypes}/index.d.ts`]\n paths['files-sdk/*'] ??= [`${filesSdkTypes}/*/index.d.ts`]\n nuxt.hook('nitro:init', (nitro) =>\n setupNitroFilesIntegration(nitro, {\n configPath,\n development: nuxt.options.dev,\n }),\n )\n nuxt.hook('prepare:types', ({ references }) => {\n references.push({ path: resolve(nuxt.options.buildDir, 'nuxt-files-sdk/storage-registry.d.ts') })\n })\n\n addServerImports([\n { name: 'defineFilesConfig', from: 'nuxt-files-sdk/config' },\n { name: 'useServerFiles', from: 'nuxt-files-sdk/runtime' },\n ])\n addImports({ name: 'defineFilesConfig', from: 'nuxt-files-sdk/config' })\n for (const name of ['useFiles', 'useFile', 'useList', 'useSearch']) {\n addImports({ name, from: 'files-sdk/vue' })\n }\n\n if (shouldEnableFilesDevtools(nuxt.options.dev, options.devtools, nuxt.options.devtools)) {\n const version = await getNuxtModuleVersion('@nuxt/devtools', nuxt)\n const { setupFilesDevtools } = await import('./devtools')\n setupFilesDevtools(nuxt, version || '3', filesDevtoolsWriteEnabled(options.devtools))\n }\n },\n})\n\nexport type { FilesDevtoolsOptions } from './devtools/enabled'\nexport * from 'files-sdk'\nexport * from './runtime'\n"],"mappings":";;;;;;;;;AAuBA,IAAA,iBAAe,iBAAgC;CAC3C,MAAM;EACF,MAAM;EACN,WAAW;EACX,eAAe,EAAE,MAAM,mBAAmB;CAC9C;CACA,UAAU;EACN,QAAQ;EACR,UAAU;CACd;CACA,MAAM,MAAM,SAAS,MAAY;EAC7B,MAAM,aAAa,QAAQ,KAAK,QAAQ,SAAS,QAAQ,MAAM;EAC9D,CAAC,KAAK,QAAQ,WAAW,SAAS,YAAY,CAAC,EAAA,CAAG,KAAK,UAAU;EAClE,MAAM,gBAAgB,QAAQ,KAAK,QAAQ,SAAS,6BAA6B,CAAC,CAAC,WAAW,MAAM,GAAG;EACvG,MAAM,QAAS,CAAC,KAAK,QAAQ,WAAW,SAAS,oBAAoB,CAAC,EAAA,CAAG,UAAU,CAAC;EACpF,MAAM,iBAAiB,CAAC,GAAG,cAAc,YAAY;EACrD,MAAM,mBAAmB,CAAC,GAAG,cAAc,cAAc;EACzD,KAAK,KAAK,eAAe,UACrB,2BAA2B,OAAO;GAC9B;GACA,aAAa,KAAK,QAAQ;EAC9B,CAAC,CACL;EACA,KAAK,KAAK,kBAAkB,EAAE,iBAAiB;GAC3C,WAAW,KAAK,EAAE,MAAM,QAAQ,KAAK,QAAQ,UAAU,sCAAsC,EAAE,CAAC;EACpG,CAAC;EAED,iBAAiB,CACb;GAAE,MAAM;GAAqB,MAAM;EAAwB,GAC3D;GAAE,MAAM;GAAkB,MAAM;EAAyB,CAC7D,CAAC;EACD,WAAW;GAAE,MAAM;GAAqB,MAAM;EAAwB,CAAC;EACvE,KAAK,MAAM,QAAQ;GAAC;GAAY;GAAW;GAAW;EAAW,GAC7D,WAAW;GAAE;GAAM,MAAM;EAAgB,CAAC;EAG9C,IAAI,0BAA0B,KAAK,QAAQ,KAAK,QAAQ,UAAU,KAAK,QAAQ,QAAQ,GAAG;GACtF,MAAM,UAAU,MAAM,qBAAqB,kBAAkB,IAAI;GACjE,MAAM,EAAE,uBAAuB,MAAM,OAAO;GAC5C,mBAAmB,MAAM,WAAW,KAAK,0BAA0B,QAAQ,QAAQ,CAAC;EACxF;CACJ;AACJ,CAAC"}
package/dist/package.js CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region package.json
2
- var version = "0.0.4";
2
+ var version = "0.0.5";
3
3
  //#endregion
4
4
  export { version };
5
5
 
@@ -1,13 +1,13 @@
1
- import { FilesConfig, NamedFilesConfig, SingleFilesConfig, StorageConfig } from "../config.js";
1
+ import { DevelopmentOnlyNamedFilesConfig, DevelopmentOnlySingleFilesConfig, FilesConfig, NamedFilesConfig, SingleFilesConfig, StorageConfig } from "../config.js";
2
2
  import { FilesDevtoolsSnapshot } from "../devtools/snapshot.js";
3
3
  import { Adapter, ExtensionsOf, Files, FilesActionEvent, FilesErrorEvent, FilesRetryEvent, ProviderSlug } from "files-sdk";
4
4
  //#region src/runtime/registry.d.ts
5
5
  /** Native Files client plus the methods contributed by a storage's plugins. */
6
6
  export type FilesForStorage<T extends StorageConfig> = Files & ExtensionsOf<NonNullable<T['plugins']>>;
7
7
  /** Map each configured storage name to its native Files client and plugin extensions. */
8
- export type StorageRegistry<C extends FilesConfig> = C extends NamedFilesConfig<infer Storages> ? { [Name in keyof Storages]: FilesForStorage<Storages[Name]>; } : Record<never, never>;
8
+ export type StorageRegistry<C extends FilesConfig> = C extends NamedFilesConfig<infer Storages> ? { [Name in keyof Storages]: FilesForStorage<Storages[Name]>; } : C extends DevelopmentOnlyNamedFilesConfig<infer Storages> ? { [Name in keyof Storages]: FilesForStorage<Storages[Name]>; } : Record<never, never>;
9
9
  /** Files client returned by an unnamed single-storage configuration. */
10
- export type SingleStorage<C extends FilesConfig> = C extends SingleFilesConfig<infer Storage> ? FilesForStorage<Storage> : never;
10
+ export type SingleStorage<C extends FilesConfig> = C extends SingleFilesConfig<infer Storage> ? FilesForStorage<Storage> : C extends DevelopmentOnlySingleFilesConfig<infer Storage> ? FilesForStorage<Storage> : never;
11
11
  /** Hooks emitted by the Nuxt/Nitro bridge after the storage's native hooks. */
12
12
  export interface FilesRuntimeHooks {
13
13
  /** Observe a failed native Files operation. */
@@ -31,7 +31,7 @@ export declare class FilesRegistry<const C extends FilesConfig = FilesConfig> {
31
31
  hooks?: FilesRuntimeHooks;
32
32
  });
33
33
  /** Return the client from an unnamed single-storage configuration. */
34
- get(...args: C extends SingleFilesConfig ? [] : [name: never]): SingleStorage<C>;
34
+ get(...args: C extends SingleFilesConfig | DevelopmentOnlySingleFilesConfig ? [] : [name: never]): SingleStorage<C>;
35
35
  /** Return one named storage client. */
36
36
  get<Name extends Extract<keyof StorageRegistry<C>, string>>(name: Name): StorageRegistry<C>[Name];
37
37
  /** Return secret-free storage metadata and initialization state for development diagnostics. */
@@ -1,3 +1,4 @@
1
+ import { createFilesDevtoolsDiagnostic } from "../devtools/diagnostics.js";
1
2
  import { getProvider, listEnvVars } from "files-sdk/providers";
2
3
  import { createFiles } from "files-sdk";
3
4
  //#region src/runtime/registry.ts
@@ -16,16 +17,21 @@ var FilesRegistry = class {
16
17
  #hooks;
17
18
  #instances = /* @__PURE__ */ new Map();
18
19
  #initializing = /* @__PURE__ */ new Set();
20
+ #diagnostics = /* @__PURE__ */ new Map();
19
21
  /** Create a registry without constructing a provider. */
20
22
  constructor(config, options) {
21
23
  if ("default" in config) throw new Error("[nuxt-files-sdk:invalid-config] The default option has been removed.");
22
- if (!config.storage || !isStorageConfig(config.storage) && (!isStorageRecord(config.storage) || Object.keys(config.storage).length === 0)) throw new Error("[nuxt-files-sdk:invalid-config] At least one storage is required.");
23
- if (!isStorageConfig(config.storage)) {
24
+ const development = options.development ?? false;
25
+ if (!config.storage && (!development || !config.devStorage)) throw new Error("[nuxt-files-sdk:invalid-config] At least one storage is required.");
26
+ if (config.storage && !isStorageConfig(config.storage) && (!isStorageRecord(config.storage) || Object.keys(config.storage).length === 0)) throw new Error("[nuxt-files-sdk:invalid-config] At least one storage is required.");
27
+ if (!config.storage && !isStorageConfig(config.devStorage)) {
28
+ if (!isStorageRecord(config.devStorage) || Object.keys(config.devStorage).length === 0) throw new Error("[nuxt-files-sdk:invalid-config] At least one development storage is required.");
29
+ } else if (config.storage && !isStorageConfig(config.storage)) {
24
30
  if (config.devStorage && !isStorageRecord(config.devStorage)) throw new Error("[nuxt-files-sdk:invalid-config] Named storage requires named devStorage overrides.");
25
31
  for (const name of Object.keys(config.devStorage ?? {})) if (!Object.hasOwn(config.storage, name)) throw new Error(`[nuxt-files-sdk:unknown-storage] Unknown storage "${name}".`);
26
32
  }
27
33
  this.#config = config;
28
- this.#development = options.development ?? false;
34
+ this.#development = development;
29
35
  this.#factories = options.factories;
30
36
  this.#hooks = options.hooks ?? {};
31
37
  }
@@ -39,7 +45,12 @@ var FilesRegistry = class {
39
45
  try {
40
46
  const files = this.#create(entry);
41
47
  this.#instances.set(key, files);
48
+ this.#diagnostics.delete(key);
42
49
  return files;
50
+ } catch (error) {
51
+ const label = entry.name === void 0 ? "The single storage" : `Storage "${entry.name}"`;
52
+ this.#diagnostics.set(key, createFilesDevtoolsDiagnostic("NUXT_FILES_ADAPTER_INIT_FAILED", `${label} (${entry.override?.adapter ?? entry.storage.adapter}) could not be initialized.`));
53
+ throw error;
43
54
  } finally {
44
55
  this.#initializing.delete(key);
45
56
  }
@@ -47,38 +58,58 @@ var FilesRegistry = class {
47
58
  /** Return secret-free storage metadata and initialization state for development diagnostics. */
48
59
  inspect() {
49
60
  return {
50
- storages: this.#entries().map(({ name, storage, override }) => ({
61
+ storages: this.#entries().map(({ name, storage, override, source }) => ({
51
62
  ...name === void 0 ? {} : { name },
52
63
  adapter: override?.adapter ?? storage.adapter,
53
64
  plugins: storage.plugins?.map((plugin) => plugin.name) ?? [],
54
- source: override ? "devStorage" : "storage",
65
+ source,
55
66
  initialized: this.#instances.has(name ?? "")
56
67
  })),
57
- diagnostics: []
68
+ diagnostics: [...this.#diagnostics.values()]
58
69
  };
59
70
  }
60
71
  #entries() {
61
72
  const storage = this.#config.storage;
62
73
  const devStorage = this.#config.devStorage;
63
- if (isStorageConfig(storage)) return [{
64
- name: void 0,
65
- storage,
66
- override: this.#development && isStorageConfig(devStorage) ? devStorage : void 0
67
- }];
74
+ if (!storage) {
75
+ if (isStorageConfig(devStorage)) return [{
76
+ name: void 0,
77
+ storage: devStorage,
78
+ override: void 0,
79
+ source: "devStorage"
80
+ }];
81
+ return Object.entries(devStorage ?? {}).map(([name, developmentStorage]) => ({
82
+ name,
83
+ storage: developmentStorage,
84
+ override: void 0,
85
+ source: "devStorage"
86
+ }));
87
+ }
88
+ if (isStorageConfig(storage)) {
89
+ const override = this.#development && isStorageConfig(devStorage) ? devStorage : void 0;
90
+ return [{
91
+ name: void 0,
92
+ storage,
93
+ override,
94
+ source: override ? "devStorage" : "storage"
95
+ }];
96
+ }
68
97
  const overrides = this.#development && isStorageRecord(devStorage) ? devStorage : void 0;
69
98
  return Object.entries(storage).map(([name, namedStorage]) => ({
70
99
  name,
71
100
  storage: namedStorage,
72
- override: overrides?.[name]
101
+ override: overrides?.[name],
102
+ source: overrides?.[name] ? "devStorage" : "storage"
73
103
  }));
74
104
  }
75
105
  #entry(name) {
76
- if (isStorageConfig(this.#config.storage)) {
106
+ const entries = this.#entries();
107
+ if (entries.length === 1 && entries[0]?.name === void 0) {
77
108
  if (name !== void 0) throw new Error(`[nuxt-files-sdk:unknown-storage] Unknown storage "${name}".`);
78
- return this.#entries()[0];
109
+ return entries[0];
79
110
  }
80
111
  if (name === void 0) throw new Error("[nuxt-files-sdk:storage-name-required] A storage name is required.");
81
- const entry = this.#entries().find((candidate) => candidate.name === name);
112
+ const entry = entries.find((candidate) => candidate.name === name);
82
113
  if (!entry) throw new Error(`[nuxt-files-sdk:unknown-storage] Unknown storage "${name}".`);
83
114
  return entry;
84
115
  }
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","names":[],"sources":["../../src/runtime/registry.ts"],"sourcesContent":["import {\n createFiles,\n type Adapter,\n type ExtensionsOf,\n type Files,\n type FilesActionEvent,\n type FilesErrorEvent,\n type FilesRetryEvent,\n type ProviderSlug,\n} from 'files-sdk'\nimport { getProvider, listEnvVars } from 'files-sdk/providers'\n\nimport type { FilesConfig, NamedFilesConfig, SingleFilesConfig, StorageConfig } from '../config'\nimport type { FilesDevtoolsSnapshot } from '../devtools/snapshot'\n\n/** Native Files client plus the methods contributed by a storage's plugins. */\nexport type FilesForStorage<T extends StorageConfig> = Files & ExtensionsOf<NonNullable<T['plugins']>>\n\n/** Map each configured storage name to its native Files client and plugin extensions. */\nexport type StorageRegistry<C extends FilesConfig> =\n C extends NamedFilesConfig<infer Storages>\n ? { [Name in keyof Storages]: FilesForStorage<Storages[Name]> }\n : Record<never, never>\n\n/** Files client returned by an unnamed single-storage configuration. */\nexport type SingleStorage<C extends FilesConfig> =\n C extends SingleFilesConfig<infer Storage> ? FilesForStorage<Storage> : never\n\n/** Hooks emitted by the Nuxt/Nitro bridge after the storage's native hooks. */\nexport interface FilesRuntimeHooks {\n /** Observe a failed native Files operation. */\n onError?: (event: FilesErrorEvent, storage?: string) => void | Promise<void>\n /** Observe a completed native Files operation. */\n onAction?: (event: FilesActionEvent, storage?: string) => void | Promise<void>\n /** Observe a native Files retry. */\n onRetry?: (event: FilesRetryEvent, storage?: string) => void | Promise<void>\n}\n\n/** One provider factory statically supplied by the generated Nitro plugin. */\nexport type FilesProviderFactory = (config: never) => Adapter\n/** Provider factories available in the current build. */\nexport type FilesProviderFactories = Partial<Record<ProviderSlug, FilesProviderFactory>>\n\nconst runHooks = async (...hooks: (() => void | Promise<void> | undefined)[]): Promise<void> => {\n for (const hook of hooks) {\n try {\n // Preserve user-before-bridge ordering without exposing hook failures to native operations.\n // oxlint-disable-next-line no-await-in-loop\n await hook()\n } catch {}\n }\n}\n\nconst isStorageConfig = (value: unknown): value is StorageConfig =>\n Boolean(value && typeof value === 'object' && 'adapter' in value && typeof value.adapter === 'string')\nconst isStorageRecord = (value: unknown): value is Record<string, StorageConfig> =>\n Boolean(value && typeof value === 'object' && Object.values(value).every(isStorageConfig))\n\ntype StorageEntry = { name: string | undefined; storage: StorageConfig; override: StorageConfig | undefined }\n\n/** Lazily construct and memoize native Files clients for a validated project configuration. */\nexport class FilesRegistry<const C extends FilesConfig = FilesConfig> {\n readonly #config: C\n readonly #development: boolean\n readonly #factories: FilesProviderFactories\n readonly #hooks: FilesRuntimeHooks\n readonly #instances = new Map<string, Files>()\n readonly #initializing = new Set<string>()\n\n /** Create a registry without constructing a provider. */\n constructor(\n config: C,\n options: {\n development?: boolean\n factories: FilesProviderFactories\n hooks?: FilesRuntimeHooks\n },\n ) {\n if ('default' in config) {\n throw new Error('[nuxt-files-sdk:invalid-config] The default option has been removed.')\n }\n if (\n !config.storage ||\n (!isStorageConfig(config.storage) &&\n (!isStorageRecord(config.storage) || Object.keys(config.storage).length === 0))\n ) {\n throw new Error('[nuxt-files-sdk:invalid-config] At least one storage is required.')\n }\n if (!isStorageConfig(config.storage)) {\n if (config.devStorage && !isStorageRecord(config.devStorage)) {\n throw new Error('[nuxt-files-sdk:invalid-config] Named storage requires named devStorage overrides.')\n }\n for (const name of Object.keys(config.devStorage ?? {})) {\n if (!Object.hasOwn(config.storage, name)) {\n throw new Error(`[nuxt-files-sdk:unknown-storage] Unknown storage \"${name}\".`)\n }\n }\n }\n this.#config = config\n this.#development = options.development ?? false\n this.#factories = options.factories\n this.#hooks = options.hooks ?? {}\n }\n\n /** Return the client from an unnamed single-storage configuration. */\n get(...args: C extends SingleFilesConfig ? [] : [name: never]): SingleStorage<C>\n /** Return one named storage client. */\n get<Name extends Extract<keyof StorageRegistry<C>, string>>(name: Name): StorageRegistry<C>[Name]\n get(name?: string): Files {\n const entry = this.#entry(name)\n const key = entry.name ?? ''\n const cached = this.#instances.get(key)\n if (cached) return cached\n if (this.#initializing.has(key)) {\n throw new Error('[nuxt-files-sdk:circular-initialization] Storage configuration cannot access itself.')\n }\n this.#initializing.add(key)\n try {\n const files = this.#create(entry)\n this.#instances.set(key, files)\n return files\n } finally {\n this.#initializing.delete(key)\n }\n }\n\n /** Return secret-free storage metadata and initialization state for development diagnostics. */\n inspect(): FilesDevtoolsSnapshot {\n return {\n storages: this.#entries().map(({ name, storage, override }) => ({\n ...(name === undefined ? {} : { name }),\n adapter: override?.adapter ?? storage.adapter,\n plugins: storage.plugins?.map((plugin) => plugin.name) ?? [],\n source: override ? 'devStorage' : 'storage',\n initialized: this.#instances.has(name ?? ''),\n })),\n diagnostics: [],\n }\n }\n\n #entries(): StorageEntry[] {\n const storage = this.#config.storage\n const devStorage = this.#config.devStorage\n if (isStorageConfig(storage)) {\n const override = this.#development && isStorageConfig(devStorage) ? devStorage : undefined\n return [{ name: undefined, storage, override }]\n }\n const overrides = this.#development && isStorageRecord(devStorage) ? devStorage : undefined\n return Object.entries(storage).map(([name, namedStorage]) => ({\n name,\n storage: namedStorage,\n override: overrides?.[name],\n }))\n }\n\n #entry(name?: string): StorageEntry {\n if (isStorageConfig(this.#config.storage)) {\n if (name !== undefined) {\n throw new Error(`[nuxt-files-sdk:unknown-storage] Unknown storage \"${name}\".`)\n }\n return this.#entries()[0]!\n }\n if (name === undefined) {\n throw new Error('[nuxt-files-sdk:storage-name-required] A storage name is required.')\n }\n const entry = this.#entries().find((candidate) => candidate.name === name)\n if (!entry) throw new Error(`[nuxt-files-sdk:unknown-storage] Unknown storage \"${name}\".`)\n return entry\n }\n\n #create({ name, storage, override }: StorageEntry): Files {\n const selected = override ?? storage\n const factory = this.#factories[selected.adapter]\n if (!factory) {\n throw new Error(\n `[nuxt-files-sdk:adapter-not-generated] Adapter \"${selected.adapter}\" is not available in this build.`,\n )\n }\n const adapter = withNuxtEnvironment(selected.adapter, () => {\n const input = typeof selected.config === 'function' ? selected.config() : selected.config\n if (input && typeof input === 'object' && 'then' in input) {\n throw new Error('[nuxt-files-sdk:async-config] Storage config functions must be synchronous.')\n }\n // Generated factories and configs share an adapter key; the broad registry type erases that correlation.\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion\n return factory(input as never)\n })\n return createFiles({\n adapter,\n hooks: {\n onAction: (event) =>\n runHooks(\n () => storage.hooks?.onAction?.(event),\n () => this.#hooks.onAction?.(event, name),\n ),\n onError: (event) =>\n runHooks(\n () => storage.hooks?.onError?.(event),\n () => this.#hooks.onError?.(event, name),\n ),\n onRetry: (event) =>\n runHooks(\n () => storage.hooks?.onRetry?.(event),\n () => this.#hooks.onRetry?.(event, name),\n ),\n },\n ...(storage.plugins ? { plugins: storage.plugins } : {}),\n ...(storage.prefix === undefined ? {} : { prefix: storage.prefix }),\n ...(storage.retries === undefined ? {} : { retries: storage.retries }),\n ...(storage.timeout === undefined ? {} : { timeout: storage.timeout }),\n })\n }\n}\n\n/** Bridge only NUXT_ aliases declared by the configured native provider during synchronous construction. */\nexport const withNuxtEnvironment = <T>(provider: ProviderSlug, load: () => T): T => {\n const metadata = getProvider(provider)\n if (!metadata) return load()\n const variables = listEnvVars(provider)\n if (variables.length === 0) return load()\n const injected: string[] = []\n for (const variable of variables) {\n const keys = [variable.key, ...(variable.aliases ?? [])]\n if (keys.some((key) => process.env[key] !== undefined)) continue\n for (const key of keys) {\n const value = process.env[`NUXT_${key}`]\n if (value !== undefined && process.env[key] === undefined) {\n process.env[key] = value\n injected.push(key)\n }\n }\n }\n try {\n return load()\n } finally {\n for (const key of injected) delete process.env[key]\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","names":[],"sources":["../../src/runtime/registry.ts"],"sourcesContent":["import {\n createFiles,\n type Adapter,\n type ExtensionsOf,\n type Files,\n type FilesActionEvent,\n type FilesErrorEvent,\n type FilesRetryEvent,\n type ProviderSlug,\n} from 'files-sdk'\nimport { getProvider, listEnvVars } from 'files-sdk/providers'\n\nimport type {\n DevelopmentOnlyNamedFilesConfig,\n DevelopmentOnlySingleFilesConfig,\n FilesConfig,\n NamedFilesConfig,\n SingleFilesConfig,\n StorageConfig,\n} from '../config'\nimport { createFilesDevtoolsDiagnostic, type FilesDevtoolsDiagnostic } from '../devtools/diagnostics'\nimport type { FilesDevtoolsSnapshot } from '../devtools/snapshot'\n\n/** Native Files client plus the methods contributed by a storage's plugins. */\nexport type FilesForStorage<T extends StorageConfig> = Files & ExtensionsOf<NonNullable<T['plugins']>>\n\n/** Map each configured storage name to its native Files client and plugin extensions. */\nexport type StorageRegistry<C extends FilesConfig> =\n C extends NamedFilesConfig<infer Storages>\n ? { [Name in keyof Storages]: FilesForStorage<Storages[Name]> }\n : C extends DevelopmentOnlyNamedFilesConfig<infer Storages>\n ? { [Name in keyof Storages]: FilesForStorage<Storages[Name]> }\n : Record<never, never>\n\n/** Files client returned by an unnamed single-storage configuration. */\nexport type SingleStorage<C extends FilesConfig> =\n C extends SingleFilesConfig<infer Storage>\n ? FilesForStorage<Storage>\n : C extends DevelopmentOnlySingleFilesConfig<infer Storage>\n ? FilesForStorage<Storage>\n : never\n\n/** Hooks emitted by the Nuxt/Nitro bridge after the storage's native hooks. */\nexport interface FilesRuntimeHooks {\n /** Observe a failed native Files operation. */\n onError?: (event: FilesErrorEvent, storage?: string) => void | Promise<void>\n /** Observe a completed native Files operation. */\n onAction?: (event: FilesActionEvent, storage?: string) => void | Promise<void>\n /** Observe a native Files retry. */\n onRetry?: (event: FilesRetryEvent, storage?: string) => void | Promise<void>\n}\n\n/** One provider factory statically supplied by the generated Nitro plugin. */\nexport type FilesProviderFactory = (config: never) => Adapter\n/** Provider factories available in the current build. */\nexport type FilesProviderFactories = Partial<Record<ProviderSlug, FilesProviderFactory>>\n\nconst runHooks = async (...hooks: (() => void | Promise<void> | undefined)[]): Promise<void> => {\n for (const hook of hooks) {\n try {\n // Preserve user-before-bridge ordering without exposing hook failures to native operations.\n // oxlint-disable-next-line no-await-in-loop\n await hook()\n } catch {}\n }\n}\n\nconst isStorageConfig = (value: unknown): value is StorageConfig =>\n Boolean(value && typeof value === 'object' && 'adapter' in value && typeof value.adapter === 'string')\nconst isStorageRecord = (value: unknown): value is Record<string, StorageConfig> =>\n Boolean(value && typeof value === 'object' && Object.values(value).every(isStorageConfig))\n\ntype StorageEntry = {\n name: string | undefined\n storage: StorageConfig\n override: StorageConfig | undefined\n source: 'storage' | 'devStorage'\n}\n\n/** Lazily construct and memoize native Files clients for a validated project configuration. */\nexport class FilesRegistry<const C extends FilesConfig = FilesConfig> {\n readonly #config: C\n readonly #development: boolean\n readonly #factories: FilesProviderFactories\n readonly #hooks: FilesRuntimeHooks\n readonly #instances = new Map<string, Files>()\n readonly #initializing = new Set<string>()\n readonly #diagnostics = new Map<string, FilesDevtoolsDiagnostic>()\n\n /** Create a registry without constructing a provider. */\n constructor(\n config: C,\n options: {\n development?: boolean\n factories: FilesProviderFactories\n hooks?: FilesRuntimeHooks\n },\n ) {\n if ('default' in config) {\n throw new Error('[nuxt-files-sdk:invalid-config] The default option has been removed.')\n }\n const development = options.development ?? false\n if (!config.storage && (!development || !config.devStorage)) {\n throw new Error('[nuxt-files-sdk:invalid-config] At least one storage is required.')\n }\n if (\n config.storage &&\n !isStorageConfig(config.storage) &&\n (!isStorageRecord(config.storage) || Object.keys(config.storage).length === 0)\n ) {\n throw new Error('[nuxt-files-sdk:invalid-config] At least one storage is required.')\n }\n if (!config.storage && !isStorageConfig(config.devStorage)) {\n if (!isStorageRecord(config.devStorage) || Object.keys(config.devStorage).length === 0) {\n throw new Error('[nuxt-files-sdk:invalid-config] At least one development storage is required.')\n }\n } else if (config.storage && !isStorageConfig(config.storage)) {\n if (config.devStorage && !isStorageRecord(config.devStorage)) {\n throw new Error('[nuxt-files-sdk:invalid-config] Named storage requires named devStorage overrides.')\n }\n for (const name of Object.keys(config.devStorage ?? {})) {\n if (!Object.hasOwn(config.storage, name)) {\n throw new Error(`[nuxt-files-sdk:unknown-storage] Unknown storage \"${name}\".`)\n }\n }\n }\n this.#config = config\n this.#development = development\n this.#factories = options.factories\n this.#hooks = options.hooks ?? {}\n }\n\n /** Return the client from an unnamed single-storage configuration. */\n get(...args: C extends SingleFilesConfig | DevelopmentOnlySingleFilesConfig ? [] : [name: never]): SingleStorage<C>\n /** Return one named storage client. */\n get<Name extends Extract<keyof StorageRegistry<C>, string>>(name: Name): StorageRegistry<C>[Name]\n get(name?: string): Files {\n const entry = this.#entry(name)\n const key = entry.name ?? ''\n const cached = this.#instances.get(key)\n if (cached) return cached\n if (this.#initializing.has(key)) {\n throw new Error('[nuxt-files-sdk:circular-initialization] Storage configuration cannot access itself.')\n }\n this.#initializing.add(key)\n try {\n const files = this.#create(entry)\n this.#instances.set(key, files)\n this.#diagnostics.delete(key)\n return files\n } catch (error) {\n const label = entry.name === undefined ? 'The single storage' : `Storage \"${entry.name}\"`\n this.#diagnostics.set(\n key,\n createFilesDevtoolsDiagnostic(\n 'NUXT_FILES_ADAPTER_INIT_FAILED',\n `${label} (${entry.override?.adapter ?? entry.storage.adapter}) could not be initialized.`,\n ),\n )\n throw error\n } finally {\n this.#initializing.delete(key)\n }\n }\n\n /** Return secret-free storage metadata and initialization state for development diagnostics. */\n inspect(): FilesDevtoolsSnapshot {\n return {\n storages: this.#entries().map(({ name, storage, override, source }) => ({\n ...(name === undefined ? {} : { name }),\n adapter: override?.adapter ?? storage.adapter,\n plugins: storage.plugins?.map((plugin) => plugin.name) ?? [],\n source,\n initialized: this.#instances.has(name ?? ''),\n })),\n diagnostics: [...this.#diagnostics.values()],\n }\n }\n\n #entries(): StorageEntry[] {\n const storage = this.#config.storage\n const devStorage = this.#config.devStorage\n if (!storage) {\n if (isStorageConfig(devStorage)) {\n return [{ name: undefined, storage: devStorage, override: undefined, source: 'devStorage' }]\n }\n return Object.entries(devStorage ?? {}).map(([name, developmentStorage]) => ({\n name,\n storage: developmentStorage,\n override: undefined,\n source: 'devStorage',\n }))\n }\n if (isStorageConfig(storage)) {\n const override = this.#development && isStorageConfig(devStorage) ? devStorage : undefined\n return [{ name: undefined, storage, override, source: override ? 'devStorage' : 'storage' }]\n }\n const overrides = this.#development && isStorageRecord(devStorage) ? devStorage : undefined\n return Object.entries(storage).map(([name, namedStorage]) => ({\n name,\n storage: namedStorage,\n override: overrides?.[name],\n source: overrides?.[name] ? 'devStorage' : 'storage',\n }))\n }\n\n #entry(name?: string): StorageEntry {\n const entries = this.#entries()\n if (entries.length === 1 && entries[0]?.name === undefined) {\n if (name !== undefined) {\n throw new Error(`[nuxt-files-sdk:unknown-storage] Unknown storage \"${name}\".`)\n }\n return entries[0]!\n }\n if (name === undefined) {\n throw new Error('[nuxt-files-sdk:storage-name-required] A storage name is required.')\n }\n const entry = entries.find((candidate) => candidate.name === name)\n if (!entry) throw new Error(`[nuxt-files-sdk:unknown-storage] Unknown storage \"${name}\".`)\n return entry\n }\n\n #create({ name, storage, override }: StorageEntry): Files {\n const selected = override ?? storage\n const factory = this.#factories[selected.adapter]\n if (!factory) {\n throw new Error(\n `[nuxt-files-sdk:adapter-not-generated] Adapter \"${selected.adapter}\" is not available in this build.`,\n )\n }\n const adapter = withNuxtEnvironment(selected.adapter, () => {\n const input = typeof selected.config === 'function' ? selected.config() : selected.config\n if (input && typeof input === 'object' && 'then' in input) {\n throw new Error('[nuxt-files-sdk:async-config] Storage config functions must be synchronous.')\n }\n // Generated factories and configs share an adapter key; the broad registry type erases that correlation.\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion\n return factory(input as never)\n })\n return createFiles({\n adapter,\n hooks: {\n onAction: (event) =>\n runHooks(\n () => storage.hooks?.onAction?.(event),\n () => this.#hooks.onAction?.(event, name),\n ),\n onError: (event) =>\n runHooks(\n () => storage.hooks?.onError?.(event),\n () => this.#hooks.onError?.(event, name),\n ),\n onRetry: (event) =>\n runHooks(\n () => storage.hooks?.onRetry?.(event),\n () => this.#hooks.onRetry?.(event, name),\n ),\n },\n ...(storage.plugins ? { plugins: storage.plugins } : {}),\n ...(storage.prefix === undefined ? {} : { prefix: storage.prefix }),\n ...(storage.retries === undefined ? {} : { retries: storage.retries }),\n ...(storage.timeout === undefined ? {} : { timeout: storage.timeout }),\n })\n }\n}\n\n/** Bridge only NUXT_ aliases declared by the configured native provider during synchronous construction. */\nexport const withNuxtEnvironment = <T>(provider: ProviderSlug, load: () => T): T => {\n const metadata = getProvider(provider)\n if (!metadata) return load()\n const variables = listEnvVars(provider)\n if (variables.length === 0) return load()\n const injected: string[] = []\n for (const variable of variables) {\n const keys = [variable.key, ...(variable.aliases ?? [])]\n if (keys.some((key) => process.env[key] !== undefined)) continue\n for (const key of keys) {\n const value = process.env[`NUXT_${key}`]\n if (value !== undefined && process.env[key] === undefined) {\n process.env[key] = value\n injected.push(key)\n }\n }\n }\n try {\n return load()\n } finally {\n for (const key of injected) delete process.env[key]\n }\n}\n"],"mappings":"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"}
package/dist/runtime.js CHANGED
@@ -1,20 +1,25 @@
1
+ import { createFilesDevtoolsDiagnostic } from "./devtools/diagnostics.js";
1
2
  import { FilesRegistry } from "./runtime/registry.js";
2
3
  //#region src/runtime.ts
3
4
  let registry;
5
+ let registryDiagnostic;
4
6
  /** Configure the process-local Files registry used by {@link useServerFiles}. */
5
7
  const configureFiles = (config, options) => {
6
- const value = new FilesRegistry(config, options);
7
- registry = value;
8
- return value;
8
+ try {
9
+ const value = new FilesRegistry(config, options);
10
+ registry = value;
11
+ registryDiagnostic = void 0;
12
+ return value;
13
+ } catch (error) {
14
+ registry = void 0;
15
+ registryDiagnostic = createFilesDevtoolsDiagnostic("NUXT_FILES_INVALID_CONFIG");
16
+ throw error;
17
+ }
9
18
  };
10
19
  /** Return secret-free diagnostics for the configured process-local Files registry. */
11
20
  const inspectFiles = () => registry?.inspect() ?? {
12
21
  storages: [],
13
- diagnostics: [{
14
- code: "NUXT_FILES_NOT_CONFIGURED",
15
- level: "warning",
16
- message: "The Files registry has not been configured."
17
- }]
22
+ diagnostics: [registryDiagnostic ?? createFilesDevtoolsDiagnostic("NUXT_FILES_NOT_CONFIGURED")]
18
23
  };
19
24
  function useServerFiles(name) {
20
25
  if (!registry) throw new Error("[nuxt-files-sdk:not-configured] The Files registry has not been configured.");
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","names":[],"sources":["../src/runtime.ts"],"sourcesContent":["import type { Files } from 'files-sdk'\n\nimport type { FilesConfig } from './config'\nimport type { FilesDevtoolsSnapshot } from './devtools/snapshot'\nimport { FilesRegistry } from './runtime/registry'\n\nexport { FilesRegistry } from './runtime/registry'\nexport type {\n FilesForStorage,\n FilesProviderFactories,\n FilesProviderFactory,\n FilesRuntimeHooks,\n SingleStorage,\n StorageRegistry,\n} from './runtime/registry'\n\n/** Project storage names and plugin-extended Files clients supplied by generated declarations. */\nexport interface NuxtFilesStorageRegistry {}\n/** Project single Files client supplied by generated declarations. */\nexport interface NuxtFilesSingleStorage {}\n\nlet registry: FilesRegistry | undefined\n\n/** Configure the process-local Files registry used by {@link useServerFiles}. */\nexport const configureFiles = <const C extends FilesConfig>(\n config: C,\n options: ConstructorParameters<typeof FilesRegistry<C>>[1],\n): FilesRegistry<C> => {\n const value = new FilesRegistry(config, options)\n registry = value\n return value\n}\n\n/** Return secret-free diagnostics for the configured process-local Files registry. */\nexport const inspectFiles = (): FilesDevtoolsSnapshot =>\n registry?.inspect() ?? {\n storages: [],\n diagnostics: [\n {\n code: 'NUXT_FILES_NOT_CONFIGURED',\n level: 'warning',\n message: 'The Files registry has not been configured.',\n },\n ],\n }\n\n/** Return the project's unnamed Files client, including its configured plugin extensions. */\nexport function useServerFiles(\n ...args: keyof NuxtFilesStorageRegistry extends never ? [] : [name: never]\n): NuxtFilesSingleStorage extends { value: infer Single } ? Single : Files\n/** Return a named project Files client, including that storage's configured plugin extensions. */\nexport function useServerFiles<Name extends Extract<keyof NuxtFilesStorageRegistry, string>>(\n name: Name,\n): NuxtFilesStorageRegistry[Name]\nexport function useServerFiles(name?: string): Files {\n if (!registry) {\n throw new Error('[nuxt-files-sdk:not-configured] The Files registry has not been configured.')\n }\n return name === undefined ? registry.get() : (registry.get as (storage: string) => Files)(name)\n}\n"],"mappings":";;AAqBA,IAAI;;AAGJ,MAAa,kBACT,QACA,YACmB;CACnB,MAAM,QAAQ,IAAI,cAAc,QAAQ,OAAO;CAC/C,WAAW;CACX,OAAO;AACX;;AAGA,MAAa,qBACT,UAAU,QAAQ,KAAK;CACnB,UAAU,CAAC;CACX,aAAa,CACT;EACI,MAAM;EACN,OAAO;EACP,SAAS;CACb,CACJ;AACJ;AAUJ,SAAgB,eAAe,MAAsB;CACjD,IAAI,CAAC,UACD,MAAM,IAAI,MAAM,6EAA6E;CAEjG,OAAO,SAAS,KAAA,IAAY,SAAS,IAAI,IAAK,SAAS,IAAmC,IAAI;AAClG"}
1
+ {"version":3,"file":"runtime.js","names":[],"sources":["../src/runtime.ts"],"sourcesContent":["import type { Files } from 'files-sdk'\n\nimport type { FilesConfig } from './config'\nimport { createFilesDevtoolsDiagnostic, type FilesDevtoolsDiagnostic } from './devtools/diagnostics'\nimport type { FilesDevtoolsSnapshot } from './devtools/snapshot'\nimport { FilesRegistry } from './runtime/registry'\n\nexport { FilesRegistry } from './runtime/registry'\nexport type {\n FilesForStorage,\n FilesProviderFactories,\n FilesProviderFactory,\n FilesRuntimeHooks,\n SingleStorage,\n StorageRegistry,\n} from './runtime/registry'\n\n/** Project storage names and plugin-extended Files clients supplied by generated declarations. */\nexport interface NuxtFilesStorageRegistry {}\n/** Project single Files client supplied by generated declarations. */\nexport interface NuxtFilesSingleStorage {}\n\nlet registry: FilesRegistry | undefined\nlet registryDiagnostic: FilesDevtoolsDiagnostic | undefined\n\n/** Configure the process-local Files registry used by {@link useServerFiles}. */\nexport const configureFiles = <const C extends FilesConfig>(\n config: C,\n options: ConstructorParameters<typeof FilesRegistry<C>>[1],\n): FilesRegistry<C> => {\n try {\n const value = new FilesRegistry(config, options)\n registry = value\n registryDiagnostic = undefined\n return value\n } catch (error) {\n registry = undefined\n registryDiagnostic = createFilesDevtoolsDiagnostic('NUXT_FILES_INVALID_CONFIG')\n throw error\n }\n}\n\n/** Return secret-free diagnostics for the configured process-local Files registry. */\nexport const inspectFiles = (): FilesDevtoolsSnapshot =>\n registry?.inspect() ?? {\n storages: [],\n diagnostics: [registryDiagnostic ?? createFilesDevtoolsDiagnostic('NUXT_FILES_NOT_CONFIGURED')],\n }\n\n/** Return the project's unnamed Files client, including its configured plugin extensions. */\nexport function useServerFiles(\n ...args: keyof NuxtFilesStorageRegistry extends never ? [] : [name: never]\n): NuxtFilesSingleStorage extends { value: infer Single } ? Single : Files\n/** Return a named project Files client, including that storage's configured plugin extensions. */\nexport function useServerFiles<Name extends Extract<keyof NuxtFilesStorageRegistry, string>>(\n name: Name,\n): NuxtFilesStorageRegistry[Name]\nexport function useServerFiles(name?: string): Files {\n if (!registry) {\n throw new Error('[nuxt-files-sdk:not-configured] The Files registry has not been configured.')\n }\n return name === undefined ? registry.get() : (registry.get as (storage: string) => Files)(name)\n}\n"],"mappings":";;;AAsBA,IAAI;AACJ,IAAI;;AAGJ,MAAa,kBACT,QACA,YACmB;CACnB,IAAI;EACA,MAAM,QAAQ,IAAI,cAAc,QAAQ,OAAO;EAC/C,WAAW;EACX,qBAAqB,KAAA;EACrB,OAAO;CACX,SAAS,OAAO;EACZ,WAAW,KAAA;EACX,qBAAqB,8BAA8B,2BAA2B;EAC9E,MAAM;CACV;AACJ;;AAGA,MAAa,qBACT,UAAU,QAAQ,KAAK;CACnB,UAAU,CAAC;CACX,aAAa,CAAC,sBAAsB,8BAA8B,2BAA2B,CAAC;AAClG;AAUJ,SAAgB,eAAe,MAAsB;CACjD,IAAI,CAAC,UACD,MAAM,IAAI,MAAM,6EAA6E;CAEjG,OAAO,SAAS,KAAA,IAAY,SAAS,IAAI,IAAK,SAAS,IAAmC,IAAI;AAClG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuxt-files-sdk",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "description": "Native-first Files SDK integration for Nuxt and Nitro",
5
5
  "homepage": "https://github.com/liria24/nuxt-files-sdk#readme",
6
6
  "license": "MIT",
@@ -28,14 +28,6 @@
28
28
  "types": "./dist/nitro.d.ts",
29
29
  "import": "./dist/nitro.js"
30
30
  },
31
- "./plugins": {
32
- "types": "./dist/plugins.d.ts",
33
- "import": "./dist/plugins.js"
34
- },
35
- "./plugins/versioning": {
36
- "types": "./dist/plugins/versioning.d.ts",
37
- "import": "./dist/plugins/versioning.js"
38
- },
39
31
  "./runtime": {
40
32
  "types": "./dist/runtime.d.ts",
41
33
  "import": "./dist/runtime.js"
@@ -53,21 +45,24 @@
53
45
  "typecheck": "tsc --noEmit"
54
46
  },
55
47
  "dependencies": {
48
+ "@nuxt/devtools-kit": "4.0.0-alpha.19",
56
49
  "@nuxt/kit": "^4.5.2",
57
- "devframe": "^0.9.18",
58
- "files-sdk": "^2.4.1",
50
+ "devframe": "^0.9.19",
59
51
  "jiti": "^2.7.0"
60
52
  },
61
53
  "devDependencies": {
62
54
  "@arethetypeswrong/cli": "^0.18.5",
63
55
  "@nuxt/schema": "^4.5.2",
64
56
  "@types/node": "^26.5.1",
57
+ "@vitejs/devtools-kit": "^0.7.3",
58
+ "files-sdk": "^2.4.1",
65
59
  "publint": "^0.3.24",
66
60
  "tsdown": "^0.23.0",
67
61
  "typescript": "^7.0.2",
68
62
  "vue": "^3.5.42"
69
63
  },
70
64
  "peerDependencies": {
65
+ "files-sdk": "^2.4.1",
71
66
  "nuxt": "^4.0.0 || ^5.0.0"
72
67
  },
73
68
  "peerDependenciesMeta": {
@@ -1,3 +0,0 @@
1
- import { versioning } from "files-sdk/versioning";
2
- export type * from "files-sdk/versioning";
3
- export { versioning };
@@ -1,2 +0,0 @@
1
- import { versioning } from "files-sdk/versioning";
2
- export { versioning };
package/dist/plugins.d.ts DELETED
@@ -1,31 +0,0 @@
1
- import { audit } from "files-sdk/audit";
2
- import { cache } from "files-sdk/cache";
3
- import { compression } from "files-sdk/compression";
4
- import { contentType, detectContentType } from "files-sdk/content-type";
5
- import { dedup } from "files-sdk/dedup";
6
- import { encryption, generateEncryptionKey } from "files-sdk/encryption";
7
- import { failover } from "files-sdk/failover";
8
- import { signedUrlPolicy } from "files-sdk/signed-url-policy";
9
- import { softDelete } from "files-sdk/soft-delete";
10
- import { tiering } from "files-sdk/tiering";
11
- import { tracing } from "files-sdk/tracing";
12
- import { usage } from "files-sdk/usage";
13
- import { ValidationError, validation } from "files-sdk/validation";
14
- import { versioning } from "files-sdk/versioning";
15
- import { zip } from "files-sdk/zip";
16
- export type * from "files-sdk/audit";
17
- export type * from "files-sdk/cache";
18
- export type * from "files-sdk/compression";
19
- export type * from "files-sdk/content-type";
20
- export type * from "files-sdk/dedup";
21
- export type * from "files-sdk/encryption";
22
- export type * from "files-sdk/failover";
23
- export type * from "files-sdk/signed-url-policy";
24
- export type * from "files-sdk/soft-delete";
25
- export type * from "files-sdk/tiering";
26
- export type * from "files-sdk/tracing";
27
- export type * from "files-sdk/usage";
28
- export type * from "files-sdk/validation";
29
- export type * from "files-sdk/versioning";
30
- export type * from "files-sdk/zip";
31
- export { ValidationError, audit, cache, compression, contentType, dedup, detectContentType, encryption, failover, generateEncryptionKey, signedUrlPolicy, softDelete, tiering, tracing, usage, validation, versioning, zip };
package/dist/plugins.js DELETED
@@ -1,16 +0,0 @@
1
- import { audit } from "files-sdk/audit";
2
- import { cache } from "files-sdk/cache";
3
- import { compression } from "files-sdk/compression";
4
- import { contentType, detectContentType } from "files-sdk/content-type";
5
- import { dedup } from "files-sdk/dedup";
6
- import { encryption, generateEncryptionKey } from "files-sdk/encryption";
7
- import { failover } from "files-sdk/failover";
8
- import { signedUrlPolicy } from "files-sdk/signed-url-policy";
9
- import { softDelete } from "files-sdk/soft-delete";
10
- import { tiering } from "files-sdk/tiering";
11
- import { tracing } from "files-sdk/tracing";
12
- import { usage } from "files-sdk/usage";
13
- import { ValidationError, validation } from "files-sdk/validation";
14
- import { versioning } from "files-sdk/versioning";
15
- import { zip } from "files-sdk/zip";
16
- export { ValidationError, audit, cache, compression, contentType, dedup, detectContentType, encryption, failover, generateEncryptionKey, signedUrlPolicy, softDelete, tiering, tracing, usage, validation, versioning, zip };