nuxt-files-sdk 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/evaluate.js +149 -0
- package/dist/config/load.js +22 -40
- package/dist/config/merge.d.ts +1 -2
- package/dist/config/merge.js +0 -2
- package/dist/config/prepare.js +58 -0
- package/dist/config/prune.js +8 -9
- package/dist/config.d.ts +11 -6
- package/dist/config.js +0 -2
- package/dist/devtools/auth.js +0 -2
- package/dist/devtools/client/app.js +2 -2
- package/dist/devtools/client/index.html +4 -0
- package/dist/devtools/devframe.js +1 -3
- package/dist/devtools/diagnostics.d.ts +1 -2
- package/dist/devtools/diagnostics.js +0 -2
- package/dist/devtools/enabled.d.ts +1 -2
- package/dist/devtools/enabled.js +0 -2
- package/dist/devtools/files-read.d.ts +2 -3
- package/dist/devtools/files-read.js +0 -2
- package/dist/devtools/files-write.d.ts +2 -3
- package/dist/devtools/files-write.js +0 -2
- package/dist/devtools/files.js +7 -10
- package/dist/devtools/index.js +24 -26
- package/dist/devtools/nuxt-v3-handler.d.ts +1 -2
- package/dist/devtools/nuxt-v3-handler.js +0 -2
- package/dist/devtools/nuxt-v3.js +1 -3
- package/dist/devtools/nuxt-v4.js +4 -7
- package/dist/devtools/paths.js +8 -0
- package/dist/devtools/snapshot.d.ts +5 -14
- package/dist/devtools/snapshot.js +2 -9
- package/dist/devtools/token.d.ts +1 -2
- package/dist/devtools/token.js +0 -2
- package/dist/integration/capabilities.js +17 -0
- package/dist/integration/dependencies.d.ts +12 -0
- package/dist/integration/dependencies.js +67 -0
- package/dist/integration/diagnostics.d.ts +9 -0
- package/dist/integration/diagnostics.js +80 -0
- package/dist/integration/imports.js +83 -0
- package/dist/integration/nitro-dev-close.js +13 -0
- package/dist/integration/nitro-event.d.ts +7 -0
- package/dist/integration/nitro-event.js +24 -0
- package/dist/integration/nitro.d.ts +9 -2
- package/dist/integration/nitro.js +170 -91
- package/dist/integration/nuxt-diagnostics.js +23 -0
- package/dist/integration/nuxt.js +235 -0
- package/dist/integration/resolve.d.ts +1 -0
- package/dist/integration/resolve.js +113 -0
- package/dist/integration/terminal.js +20 -0
- package/dist/integration/update.js +59 -0
- package/dist/meta.js +8 -0
- package/dist/module.d.ts +1 -8
- package/dist/module.js +74 -59
- package/dist/module.json +8 -0
- package/dist/nitro.d.ts +1 -2
- package/dist/nitro.js +7 -7
- package/dist/package.js +1 -3
- package/dist/runtime/development.d.ts +5 -0
- package/dist/runtime/development.js +14 -0
- package/dist/runtime/gateway-secret.d.ts +4 -0
- package/dist/runtime/gateway-secret.js +10 -0
- package/dist/runtime/internal.d.ts +1 -2
- package/dist/runtime/internal.js +1 -2
- package/dist/runtime/normalize.d.ts +1 -0
- package/dist/runtime/normalize.js +0 -2
- package/dist/runtime/provider-types.d.ts +1 -2
- package/dist/runtime/registry.d.ts +9 -22
- package/dist/runtime/registry.js +23 -28
- package/dist/runtime.d.ts +1 -2
- package/dist/runtime.js +0 -2
- package/package.json +247 -13
- package/dist/config/load.js.map +0 -1
- package/dist/config/merge.js.map +0 -1
- package/dist/config/prune.js.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/devtools/auth.js.map +0 -1
- package/dist/devtools/devframe.js.map +0 -1
- package/dist/devtools/diagnostics.js.map +0 -1
- package/dist/devtools/enabled.js.map +0 -1
- package/dist/devtools/files-read.js.map +0 -1
- package/dist/devtools/files-write.js.map +0 -1
- package/dist/devtools/files.js.map +0 -1
- package/dist/devtools/index.js.map +0 -1
- package/dist/devtools/nuxt-v3-handler.js.map +0 -1
- package/dist/devtools/nuxt-v3.js.map +0 -1
- package/dist/devtools/nuxt-v4.js.map +0 -1
- package/dist/devtools/snapshot.js.map +0 -1
- package/dist/devtools/token.js.map +0 -1
- package/dist/integration/nitro.js.map +0 -1
- package/dist/module.js.map +0 -1
- package/dist/nitro.js.map +0 -1
- package/dist/package.js.map +0 -1
- package/dist/runtime/internal.js.map +0 -1
- package/dist/runtime/normalize.js.map +0 -1
- package/dist/runtime/registry.js.map +0 -1
- package/dist/runtime.js.map +0 -1
package/dist/runtime/registry.js
CHANGED
|
@@ -13,54 +13,50 @@ var FilesRegistry = class {
|
|
|
13
13
|
#environment;
|
|
14
14
|
#factories;
|
|
15
15
|
#hooks;
|
|
16
|
-
#
|
|
17
|
-
#adapterInitializing = /* @__PURE__ */ new Set();
|
|
18
|
-
#instances = /* @__PURE__ */ new Map();
|
|
19
|
-
#filesInitializing = /* @__PURE__ */ new Set();
|
|
20
|
-
#pluginNames = /* @__PURE__ */ new Map();
|
|
21
|
-
#diagnostics = /* @__PURE__ */ new Map();
|
|
16
|
+
#dependencies;
|
|
22
17
|
/** Create a registry without constructing a provider. */
|
|
23
18
|
constructor(config, options) {
|
|
24
19
|
this.#entries = normalizeFilesConfig(config);
|
|
25
|
-
if (!this.#entries.size) throw new Error("[nuxt-files-sdk:invalid-config] At least one storage is required.");
|
|
26
20
|
this.#environment = options.environment ?? {};
|
|
27
21
|
this.#factories = options.factories;
|
|
28
22
|
this.#hooks = options.hooks ?? {};
|
|
23
|
+
this.#dependencies = options.dependencies ?? [];
|
|
29
24
|
}
|
|
30
25
|
get(...args) {
|
|
31
26
|
const name = args[0];
|
|
32
27
|
const entry = this.#entry(name);
|
|
33
28
|
const key = entry.name;
|
|
34
|
-
const cached =
|
|
29
|
+
const cached = entry.files;
|
|
35
30
|
if (cached) return cached;
|
|
36
|
-
if (
|
|
37
|
-
|
|
31
|
+
if (entry.filesInitializing) throw this.#circular(key);
|
|
32
|
+
entry.filesInitializing = true;
|
|
38
33
|
try {
|
|
39
34
|
const files = this.#create(entry);
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
entry.files = files;
|
|
36
|
+
delete entry.diagnostic;
|
|
42
37
|
return files;
|
|
43
38
|
} catch (error) {
|
|
44
|
-
|
|
39
|
+
entry.diagnostic = {
|
|
45
40
|
code: "NUXT_FILES_ADAPTER_INIT_FAILED",
|
|
46
41
|
...entry.name === void 0 ? {} : { name: entry.name },
|
|
47
42
|
adapter: typeof entry.storage.adapter === "string" ? entry.storage.adapter : "custom"
|
|
48
|
-
}
|
|
43
|
+
};
|
|
49
44
|
throw error;
|
|
50
45
|
} finally {
|
|
51
|
-
|
|
46
|
+
entry.filesInitializing = false;
|
|
52
47
|
}
|
|
53
48
|
}
|
|
54
49
|
/** Return secret-free storage metadata and initialization state for development diagnostics. */
|
|
55
50
|
inspect() {
|
|
56
51
|
return {
|
|
57
|
-
storages: [...this.#entries.values()].map(({ name, storage }) => ({
|
|
52
|
+
storages: [...this.#entries.values()].map(({ name, storage, files, pluginNames }) => ({
|
|
58
53
|
...name === void 0 ? {} : { name },
|
|
59
54
|
adapter: typeof storage.adapter === "string" ? storage.adapter : "custom",
|
|
60
|
-
plugins:
|
|
61
|
-
initialized:
|
|
55
|
+
plugins: pluginNames ?? (Array.isArray(storage.plugins) ? storage.plugins.map((plugin) => plugin.name) : []),
|
|
56
|
+
initialized: !!files
|
|
62
57
|
})),
|
|
63
|
-
diagnostics: [...this.#
|
|
58
|
+
diagnostics: [...this.#entries.values()].flatMap(({ diagnostic }) => diagnostic ? [diagnostic] : []),
|
|
59
|
+
dependencies: this.#dependencies
|
|
64
60
|
};
|
|
65
61
|
}
|
|
66
62
|
#entry(name) {
|
|
@@ -73,16 +69,16 @@ var FilesRegistry = class {
|
|
|
73
69
|
resolveAdapter(name) {
|
|
74
70
|
const entry = this.#entry(name);
|
|
75
71
|
const key = entry.name;
|
|
76
|
-
const cached =
|
|
72
|
+
const cached = entry.adapter;
|
|
77
73
|
if (cached) return cached;
|
|
78
|
-
if (
|
|
79
|
-
|
|
74
|
+
if (entry.adapterInitializing) throw this.#circular(key);
|
|
75
|
+
entry.adapterInitializing = true;
|
|
80
76
|
try {
|
|
81
77
|
const adapter = this.#createAdapter(entry);
|
|
82
|
-
|
|
78
|
+
entry.adapter = adapter;
|
|
83
79
|
return adapter;
|
|
84
80
|
} finally {
|
|
85
|
-
|
|
81
|
+
entry.adapterInitializing = false;
|
|
86
82
|
}
|
|
87
83
|
}
|
|
88
84
|
#circular(name) {
|
|
@@ -99,7 +95,8 @@ var FilesRegistry = class {
|
|
|
99
95
|
return factory(value);
|
|
100
96
|
});
|
|
101
97
|
}
|
|
102
|
-
#create(
|
|
98
|
+
#create(entry) {
|
|
99
|
+
const { name, storage } = entry;
|
|
103
100
|
const adapter = this.resolveAdapter(name);
|
|
104
101
|
const plugins = typeof storage.plugins === "function" ? storage.plugins({ storage: (storageName) => this.resolveAdapter(storageName) }) : storage.plugins;
|
|
105
102
|
const files = createFiles({
|
|
@@ -112,7 +109,7 @@ var FilesRegistry = class {
|
|
|
112
109
|
},
|
|
113
110
|
...plugins ? { plugins } : {}
|
|
114
111
|
});
|
|
115
|
-
if (plugins)
|
|
112
|
+
if (plugins) entry.pluginNames = plugins.map((plugin) => plugin.name);
|
|
116
113
|
return files;
|
|
117
114
|
}
|
|
118
115
|
};
|
|
@@ -197,5 +194,3 @@ const withNuxtEnvironment = (variables, load) => {
|
|
|
197
194
|
};
|
|
198
195
|
//#endregion
|
|
199
196
|
export { FilesRegistry, withNuxtEnvironment };
|
|
200
|
-
|
|
201
|
-
//# sourceMappingURL=registry.js.map
|
package/dist/runtime.d.ts
CHANGED
|
@@ -17,5 +17,4 @@ export declare const syncFiles: (source: FilesInput, destination: FilesInput, op
|
|
|
17
17
|
/** Delegate a transfer operation to the native Files SDK. */
|
|
18
18
|
export declare const transferFiles: (source: FilesInput, destination: FilesInput, options?: TransferOptions) => Promise<import("files-sdk").TransferResult>;
|
|
19
19
|
//#endregion
|
|
20
|
-
export type { FilesForStorage, SingleStorage, StorageRegistry };
|
|
21
|
-
//# sourceMappingURL=runtime.d.ts.map
|
|
20
|
+
export type { FilesForStorage, SingleStorage, StorageRegistry };
|
package/dist/runtime.js
CHANGED
|
@@ -10,5 +10,3 @@ const syncFiles = (source, destination, options) => sync(typeof source === "stri
|
|
|
10
10
|
const transferFiles = (source, destination, options) => transfer(typeof source === "string" ? getFiles(source) : source, typeof destination === "string" ? getFiles(destination) : destination, options);
|
|
11
11
|
//#endregion
|
|
12
12
|
export { syncFiles, transferFiles, useServerFiles };
|
|
13
|
-
|
|
14
|
-
//# sourceMappingURL=runtime.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nuxt-files-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Files SDK integration for Nuxt with DevTools",
|
|
5
5
|
"homepage": "https://nuxt-files-sdk.liria.me",
|
|
6
6
|
"license": "MIT",
|
|
@@ -36,7 +36,8 @@
|
|
|
36
36
|
"import": "./dist/runtime.js",
|
|
37
37
|
"default": "./dist/runtime.js"
|
|
38
38
|
},
|
|
39
|
-
"./package.json": "./package.json"
|
|
39
|
+
"./package.json": "./package.json",
|
|
40
|
+
"./module.json": "./dist/module.json"
|
|
40
41
|
},
|
|
41
42
|
"publishConfig": {
|
|
42
43
|
"access": "public",
|
|
@@ -45,23 +46,27 @@
|
|
|
45
46
|
"scripts": {
|
|
46
47
|
"build": "tsdown",
|
|
47
48
|
"dev": "tsdown --watch",
|
|
48
|
-
"prepack": "bun run build",
|
|
49
|
+
"prepack": "bun ../../scripts/sync-optional-peers.ts --check && bun run build",
|
|
49
50
|
"typecheck": "tsc --noEmit"
|
|
50
51
|
},
|
|
51
52
|
"dependencies": {
|
|
52
|
-
"@nuxt/
|
|
53
|
-
"@nuxt/
|
|
54
|
-
"c12": "
|
|
53
|
+
"@nuxt/kit": "^4.6.0",
|
|
54
|
+
"@nuxt/schema": "^4.6.0",
|
|
55
|
+
"c12": "4.0.0-rc.2",
|
|
55
56
|
"devframe": "^1.1.0",
|
|
57
|
+
"exsolve": "^1.1.1",
|
|
58
|
+
"files-sdk": "2.6.2",
|
|
56
59
|
"jiti": "^2.7.0",
|
|
57
|
-
"
|
|
60
|
+
"local-pkg": "^1.2.1",
|
|
61
|
+
"oxc-parser": "^0.152.0",
|
|
62
|
+
"resolve.exports": "^2.0.3",
|
|
63
|
+
"verkit": "^0.5.0"
|
|
58
64
|
},
|
|
59
65
|
"devDependencies": {
|
|
60
66
|
"@arethetypeswrong/cli": "^0.18.5",
|
|
61
|
-
"@nuxt/
|
|
67
|
+
"@nuxt/devtools-kit": "4.0.0-beta.2",
|
|
62
68
|
"@types/node": "^26.6.3",
|
|
63
69
|
"@vitejs/devtools-kit": "^0.7.6",
|
|
64
|
-
"files-sdk": "^2.6.0",
|
|
65
70
|
"h3": "^1.15.11",
|
|
66
71
|
"publint": "^0.3.24",
|
|
67
72
|
"tsdown": "^0.23.0",
|
|
@@ -69,16 +74,245 @@
|
|
|
69
74
|
"vue": "^3.5.43"
|
|
70
75
|
},
|
|
71
76
|
"peerDependencies": {
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
77
|
+
"@anthropic-ai/claude-agent-sdk": "^0.3.0",
|
|
78
|
+
"@aws-sdk/client-s3": "^3.1079.0",
|
|
79
|
+
"@aws-sdk/lib-storage": "^3.700.0",
|
|
80
|
+
"@aws-sdk/s3-presigned-post": "^3.700.0",
|
|
81
|
+
"@aws-sdk/s3-request-presigner": "^3.700.0",
|
|
82
|
+
"@azure/core-auth": "^1.9.0",
|
|
83
|
+
"@azure/identity": "^4.5.0",
|
|
84
|
+
"@azure/storage-blob": "^12.26.0",
|
|
85
|
+
"@bunny.net/storage-sdk": "^0.3.1",
|
|
86
|
+
"@google-cloud/storage": "^7.19.0 || ^8.0.0",
|
|
87
|
+
"@googleapis/drive": "^20.0.0 || ^21.0.0 || ^22.0.0",
|
|
88
|
+
"@microsoft/microsoft-graph-client": "^3.0.7",
|
|
89
|
+
"@nestjs/common": "^10.0.0 || ^11.0.0 || ^12.0.0",
|
|
90
|
+
"@netlify/blobs": "^10.7.4 || ^11.0.0",
|
|
91
|
+
"@openai/agents": ">=0.11.0 <1.0.0",
|
|
92
|
+
"@opentelemetry/api": "^1.9.0",
|
|
93
|
+
"@supabase/storage-js": "^2.105.4",
|
|
94
|
+
"@sveltejs/kit": "^2.0.0",
|
|
95
|
+
"@tanstack/react-start": "^1.0.0",
|
|
96
|
+
"@vercel/blob": "^2.4.0",
|
|
97
|
+
"ai": "^6.0.0 || ^7.0.0",
|
|
98
|
+
"astro": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0",
|
|
99
|
+
"basic-ftp": "^6.0.1",
|
|
100
|
+
"box-typescript-sdk-gen": "^1.19.1",
|
|
101
|
+
"cloudinary": "^2.10.0",
|
|
102
|
+
"convex": "^1.16.0",
|
|
103
|
+
"disk": "^0.8.18 || ^1.0.0",
|
|
104
|
+
"dropbox": "^10.34.0",
|
|
105
|
+
"fastify": "^4.0.0 || ^5.0.0",
|
|
106
|
+
"firebase-admin": "^14.1.0",
|
|
107
|
+
"google-auth-library": "^10.0.0 || ^11.0.0",
|
|
108
|
+
"h3": "^1.0.0",
|
|
109
|
+
"hono": "^4.0.0",
|
|
110
|
+
"koa": "^2.0.0 || ^3.0.0",
|
|
111
|
+
"next": "^14.0.0 || ^15.0.0 || ^16.0.0",
|
|
112
|
+
"node-appwrite": "^26.0.0 || ^27.0.0 || ^28.0.0 || ^29.0.0",
|
|
113
|
+
"openai": "^6.0.0 || ^7.0.0",
|
|
114
|
+
"pocketbase": "^0.27.0 || ^0.28.0",
|
|
115
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
116
|
+
"react-dom": "^18.0.0 || ^19.0.0",
|
|
117
|
+
"ssh2-sftp-client": "^12.1.1",
|
|
118
|
+
"svelte": "^4.0.0 || ^5.0.0",
|
|
119
|
+
"uploadthing": "^7",
|
|
120
|
+
"vue": "^3.4.0",
|
|
121
|
+
"webdav": "^5.10.0",
|
|
122
|
+
"zod": "^3.23.0 || ^4.0.0"
|
|
75
123
|
},
|
|
76
124
|
"peerDependenciesMeta": {
|
|
125
|
+
"@anthropic-ai/claude-agent-sdk": {
|
|
126
|
+
"optional": true
|
|
127
|
+
},
|
|
128
|
+
"@aws-sdk/client-s3": {
|
|
129
|
+
"optional": true
|
|
130
|
+
},
|
|
131
|
+
"@aws-sdk/lib-storage": {
|
|
132
|
+
"optional": true
|
|
133
|
+
},
|
|
134
|
+
"@aws-sdk/s3-presigned-post": {
|
|
135
|
+
"optional": true
|
|
136
|
+
},
|
|
137
|
+
"@aws-sdk/s3-request-presigner": {
|
|
138
|
+
"optional": true
|
|
139
|
+
},
|
|
140
|
+
"@azure/core-auth": {
|
|
141
|
+
"optional": true
|
|
142
|
+
},
|
|
143
|
+
"@azure/identity": {
|
|
144
|
+
"optional": true
|
|
145
|
+
},
|
|
146
|
+
"@azure/storage-blob": {
|
|
147
|
+
"optional": true
|
|
148
|
+
},
|
|
149
|
+
"@bunny.net/storage-sdk": {
|
|
150
|
+
"optional": true
|
|
151
|
+
},
|
|
152
|
+
"@google-cloud/storage": {
|
|
153
|
+
"optional": true
|
|
154
|
+
},
|
|
155
|
+
"@googleapis/drive": {
|
|
156
|
+
"optional": true
|
|
157
|
+
},
|
|
158
|
+
"@microsoft/microsoft-graph-client": {
|
|
159
|
+
"optional": true
|
|
160
|
+
},
|
|
161
|
+
"@nestjs/common": {
|
|
162
|
+
"optional": true
|
|
163
|
+
},
|
|
164
|
+
"@netlify/blobs": {
|
|
165
|
+
"optional": true
|
|
166
|
+
},
|
|
167
|
+
"@openai/agents": {
|
|
168
|
+
"optional": true
|
|
169
|
+
},
|
|
170
|
+
"@opentelemetry/api": {
|
|
171
|
+
"optional": true
|
|
172
|
+
},
|
|
173
|
+
"@supabase/storage-js": {
|
|
174
|
+
"optional": true
|
|
175
|
+
},
|
|
176
|
+
"@sveltejs/kit": {
|
|
177
|
+
"optional": true
|
|
178
|
+
},
|
|
179
|
+
"@tanstack/react-start": {
|
|
180
|
+
"optional": true
|
|
181
|
+
},
|
|
182
|
+
"@vercel/blob": {
|
|
183
|
+
"optional": true
|
|
184
|
+
},
|
|
185
|
+
"ai": {
|
|
186
|
+
"optional": true
|
|
187
|
+
},
|
|
188
|
+
"astro": {
|
|
189
|
+
"optional": true
|
|
190
|
+
},
|
|
191
|
+
"basic-ftp": {
|
|
192
|
+
"optional": true
|
|
193
|
+
},
|
|
194
|
+
"box-typescript-sdk-gen": {
|
|
195
|
+
"optional": true
|
|
196
|
+
},
|
|
197
|
+
"cloudinary": {
|
|
198
|
+
"optional": true
|
|
199
|
+
},
|
|
200
|
+
"convex": {
|
|
201
|
+
"optional": true
|
|
202
|
+
},
|
|
203
|
+
"disk": {
|
|
204
|
+
"optional": true
|
|
205
|
+
},
|
|
206
|
+
"dropbox": {
|
|
207
|
+
"optional": true
|
|
208
|
+
},
|
|
209
|
+
"fastify": {
|
|
210
|
+
"optional": true
|
|
211
|
+
},
|
|
212
|
+
"firebase-admin": {
|
|
213
|
+
"optional": true
|
|
214
|
+
},
|
|
215
|
+
"google-auth-library": {
|
|
216
|
+
"optional": true
|
|
217
|
+
},
|
|
77
218
|
"h3": {
|
|
78
219
|
"optional": true
|
|
79
220
|
},
|
|
80
|
-
"
|
|
221
|
+
"hono": {
|
|
222
|
+
"optional": true
|
|
223
|
+
},
|
|
224
|
+
"koa": {
|
|
225
|
+
"optional": true
|
|
226
|
+
},
|
|
227
|
+
"next": {
|
|
228
|
+
"optional": true
|
|
229
|
+
},
|
|
230
|
+
"node-appwrite": {
|
|
231
|
+
"optional": true
|
|
232
|
+
},
|
|
233
|
+
"openai": {
|
|
234
|
+
"optional": true
|
|
235
|
+
},
|
|
236
|
+
"pocketbase": {
|
|
237
|
+
"optional": true
|
|
238
|
+
},
|
|
239
|
+
"react": {
|
|
240
|
+
"optional": true
|
|
241
|
+
},
|
|
242
|
+
"react-dom": {
|
|
243
|
+
"optional": true
|
|
244
|
+
},
|
|
245
|
+
"ssh2-sftp-client": {
|
|
246
|
+
"optional": true
|
|
247
|
+
},
|
|
248
|
+
"svelte": {
|
|
249
|
+
"optional": true
|
|
250
|
+
},
|
|
251
|
+
"uploadthing": {
|
|
252
|
+
"optional": true
|
|
253
|
+
},
|
|
254
|
+
"vue": {
|
|
255
|
+
"optional": true
|
|
256
|
+
},
|
|
257
|
+
"webdav": {
|
|
258
|
+
"optional": true
|
|
259
|
+
},
|
|
260
|
+
"zod": {
|
|
81
261
|
"optional": true
|
|
82
262
|
}
|
|
263
|
+
},
|
|
264
|
+
"engines": {
|
|
265
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
266
|
+
},
|
|
267
|
+
"filesSdkOptionalPeers": {
|
|
268
|
+
"version": "2.6.2",
|
|
269
|
+
"keys": [
|
|
270
|
+
"@anthropic-ai/claude-agent-sdk",
|
|
271
|
+
"@aws-sdk/client-s3",
|
|
272
|
+
"@aws-sdk/lib-storage",
|
|
273
|
+
"@aws-sdk/s3-presigned-post",
|
|
274
|
+
"@aws-sdk/s3-request-presigner",
|
|
275
|
+
"@azure/core-auth",
|
|
276
|
+
"@azure/identity",
|
|
277
|
+
"@azure/storage-blob",
|
|
278
|
+
"@bunny.net/storage-sdk",
|
|
279
|
+
"@google-cloud/storage",
|
|
280
|
+
"@googleapis/drive",
|
|
281
|
+
"@microsoft/microsoft-graph-client",
|
|
282
|
+
"@nestjs/common",
|
|
283
|
+
"@netlify/blobs",
|
|
284
|
+
"@openai/agents",
|
|
285
|
+
"@opentelemetry/api",
|
|
286
|
+
"@supabase/storage-js",
|
|
287
|
+
"@sveltejs/kit",
|
|
288
|
+
"@tanstack/react-start",
|
|
289
|
+
"@vercel/blob",
|
|
290
|
+
"ai",
|
|
291
|
+
"astro",
|
|
292
|
+
"basic-ftp",
|
|
293
|
+
"box-typescript-sdk-gen",
|
|
294
|
+
"cloudinary",
|
|
295
|
+
"convex",
|
|
296
|
+
"disk",
|
|
297
|
+
"dropbox",
|
|
298
|
+
"fastify",
|
|
299
|
+
"firebase-admin",
|
|
300
|
+
"google-auth-library",
|
|
301
|
+
"h3",
|
|
302
|
+
"hono",
|
|
303
|
+
"koa",
|
|
304
|
+
"next",
|
|
305
|
+
"node-appwrite",
|
|
306
|
+
"openai",
|
|
307
|
+
"pocketbase",
|
|
308
|
+
"react",
|
|
309
|
+
"react-dom",
|
|
310
|
+
"ssh2-sftp-client",
|
|
311
|
+
"svelte",
|
|
312
|
+
"uploadthing",
|
|
313
|
+
"vue",
|
|
314
|
+
"webdav",
|
|
315
|
+
"zod"
|
|
316
|
+
]
|
|
83
317
|
}
|
|
84
318
|
}
|
package/dist/config/load.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load.js","names":[],"sources":["../../src/config/load.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises'\nimport { basename, dirname } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nimport { loadConfig } from 'c12'\nimport { createJiti } from 'jiti'\n\nimport type { FilesConfig } from '../config'\nimport { normalizeFilesConfig } from '../runtime/normalize'\nimport { mergeFilesConfig } from './merge'\n\nexport interface FilesConfigLoaderOptions {\n configPath: string\n environments: readonly string[]\n alias?: Record<string, string> | undefined\n injectImports?: ((code: string, id?: string) => Promise<{ code: string }>) | undefined\n}\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === 'object' && !Array.isArray(value)\nconst isResolvedFilesConfig = (value: unknown): value is FilesConfig => {\n normalizeFilesConfig(value)\n return true\n}\n\nconst hasEnvironmentStorage = (config: Record<string, unknown>): boolean =>\n [\n config.$development,\n config.$production,\n config.$test,\n config.$prerender,\n ...(isObject(config.$env) ? Object.values(config.$env) : []),\n ].some((branch) => isObject(branch) && branch.storage !== undefined)\n\n/** c12 selects the first environment; a later prerender override is applied with the same merger. */\nexport const loadFilesConfig = async ({\n configPath,\n environments,\n alias,\n injectImports,\n}: FilesConfigLoaderOptions): Promise<FilesConfig | undefined> => {\n const jiti = createJiti(import.meta.url, {\n alias: {\n ...alias,\n 'nuxt-files-sdk/config': fileURLToPath(new URL('../config.js', import.meta.url)),\n },\n interopDefault: true,\n moduleCache: false,\n })\n const importer = Object.assign(jiti, {\n import: async (id: string) => {\n const source = await readFile(id, 'utf8')\n const code = injectImports ? (await injectImports(source, id)).code : source\n const loaded: unknown = await jiti.evalModule(code, { filename: id, async: true })\n return loaded && typeof loaded === 'object' && 'default' in loaded ? loaded.default : loaded\n },\n })\n const { config } = await loadConfig<Record<string, unknown>>({\n cwd: dirname(configPath),\n configFile: basename(configPath),\n configFileRequired: true,\n rcFile: false,\n extend: false,\n envName: environments[0] ?? false,\n jiti: importer,\n merger: mergeFilesConfig,\n })\n let resolved: Record<string, unknown> = config\n for (const environment of environments.slice(1)) {\n const direct = resolved[`$${environment}`]\n const named = isObject(resolved.$env) ? resolved.$env[environment] : undefined\n resolved = mergeFilesConfig(\n { ...(isObject(direct) ? direct : {}), ...(isObject(named) ? named : {}) },\n resolved,\n )\n }\n const result: unknown = Object.fromEntries(Object.entries(resolved).filter(([key]) => !key.startsWith('$')))\n if (isObject(result) && result.storage === undefined && hasEnvironmentStorage(resolved)) return undefined\n if (!isResolvedFilesConfig(result))\n throw new Error('[nuxt-files-sdk:invalid-config] Invalid resolved configuration.')\n return result\n}\n"],"mappings":";;;;;;;;AAkBA,MAAM,YAAY,UACd,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AACvE,MAAM,yBAAyB,UAAyC;CACpE,qBAAqB,KAAK;CAC1B,OAAO;AACX;AAEA,MAAM,yBAAyB,WAC3B;CACI,OAAO;CACP,OAAO;CACP,OAAO;CACP,OAAO;CACP,GAAI,SAAS,OAAO,IAAI,IAAI,OAAO,OAAO,OAAO,IAAI,IAAI,CAAC;AAC9D,CAAC,CAAC,MAAM,WAAW,SAAS,MAAM,KAAK,OAAO,YAAY,KAAA,CAAS;;AAGvE,MAAa,kBAAkB,OAAO,EAClC,YACA,cACA,OACA,oBAC8D;CAC9D,MAAM,OAAO,WAAW,YAAY,KAAK;EACrC,OAAO;GACH,GAAG;GACH,yBAAyB,cAAc,IAAI,IAAI,gBAAgB,YAAY,GAAG,CAAC;EACnF;EACA,gBAAgB;EAChB,aAAa;CACjB,CAAC;CACD,MAAM,WAAW,OAAO,OAAO,MAAM,EACjC,QAAQ,OAAO,OAAe;EAC1B,MAAM,SAAS,MAAM,SAAS,IAAI,MAAM;EACxC,MAAM,OAAO,iBAAiB,MAAM,cAAc,QAAQ,EAAE,EAAA,CAAG,OAAO;EACtE,MAAM,SAAkB,MAAM,KAAK,WAAW,MAAM;GAAE,UAAU;GAAI,OAAO;EAAK,CAAC;EACjF,OAAO,UAAU,OAAO,WAAW,YAAY,aAAa,SAAS,OAAO,UAAU;CAC1F,EACJ,CAAC;CACD,MAAM,EAAE,WAAW,MAAM,WAAoC;EACzD,KAAK,QAAQ,UAAU;EACvB,YAAY,SAAS,UAAU;EAC/B,oBAAoB;EACpB,QAAQ;EACR,QAAQ;EACR,SAAS,aAAa,MAAM;EAC5B,MAAM;EACN,QAAQ;CACZ,CAAC;CACD,IAAI,WAAoC;CACxC,KAAK,MAAM,eAAe,aAAa,MAAM,CAAC,GAAG;EAC7C,MAAM,SAAS,SAAS,IAAI;EAC5B,MAAM,QAAQ,SAAS,SAAS,IAAI,IAAI,SAAS,KAAK,eAAe,KAAA;EACrE,WAAW,iBACP;GAAE,GAAI,SAAS,MAAM,IAAI,SAAS,CAAC;GAAI,GAAI,SAAS,KAAK,IAAI,QAAQ,CAAC;EAAG,GACzE,QACJ;CACJ;CACA,MAAM,SAAkB,OAAO,YAAY,OAAO,QAAQ,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC;CAC3G,IAAI,SAAS,MAAM,KAAK,OAAO,YAAY,KAAA,KAAa,sBAAsB,QAAQ,GAAG,OAAO,KAAA;CAChG,IAAI,CAAC,sBAAsB,MAAM,GAC7B,MAAM,IAAI,MAAM,iEAAiE;CACrF,OAAO;AACX"}
|
package/dist/config/merge.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge.js","names":[],"sources":["../../src/config/merge.ts"],"sourcesContent":["const isObject = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === 'object' && !Array.isArray(value)\n\nconst merge = (override: unknown, base: unknown, path: string[]): unknown => {\n if (override === undefined) return base\n if (!isObject(override) || !isObject(base)) return override\n const providerChanged =\n path[0] === 'storage' && path.length <= 2 && 'adapter' in override && override.adapter !== base.adapter\n const result: Record<string, unknown> = { ...base }\n if (providerChanged) delete result.config\n for (const [key, value] of Object.entries(override)) {\n result[key] = merge(value, result[key], [...path, key])\n }\n return result\n}\n\n/** c12 merger with Files provider boundaries and replacement arrays. Sources are highest priority first. */\nexport const mergeFilesConfig = (\n ...sources: Array<Record<string, unknown> | null | undefined>\n): Record<string, unknown> => {\n return sources.reduceRight<Record<string, unknown>>((base, source) => {\n const value = merge(source, base, [])\n return isObject(value) ? value : base\n }, {})\n}\n"],"mappings":";AAAA,MAAM,YAAY,UACd,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAEvE,MAAM,SAAS,UAAmB,MAAe,SAA4B;CACzE,IAAI,aAAa,KAAA,GAAW,OAAO;CACnC,IAAI,CAAC,SAAS,QAAQ,KAAK,CAAC,SAAS,IAAI,GAAG,OAAO;CACnD,MAAM,kBACF,KAAK,OAAO,aAAa,KAAK,UAAU,KAAK,aAAa,YAAY,SAAS,YAAY,KAAK;CACpG,MAAM,SAAkC,EAAE,GAAG,KAAK;CAClD,IAAI,iBAAiB,OAAO,OAAO;CACnC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,GAC9C,OAAO,OAAO,MAAM,OAAO,OAAO,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC;CAE1D,OAAO;AACX;;AAGA,MAAa,oBACT,GAAG,YACuB;CAC1B,OAAO,QAAQ,aAAsC,MAAM,WAAW;EAClE,MAAM,QAAQ,MAAM,QAAQ,MAAM,CAAC,CAAC;EACpC,OAAO,SAAS,KAAK,IAAI,QAAQ;CACrC,GAAG,CAAC,CAAC;AACT"}
|
package/dist/config/prune.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prune.js","names":[],"sources":["../../src/config/prune.ts"],"sourcesContent":["import { dirname, resolve } from 'node:path'\n\nimport { parseSync } from 'oxc-parser'\n\ninterface SyntaxNode {\n type: string\n start: number\n end: number\n name?: string\n value?: unknown\n key?: SyntaxNode\n source?: SyntaxNode\n declaration?: SyntaxNode\n declarations?: SyntaxNode[]\n id?: SyntaxNode\n init?: SyntaxNode\n expression?: SyntaxNode\n callee?: SyntaxNode\n arguments?: SyntaxNode[]\n properties?: SyntaxNode[]\n body?: SyntaxNode[]\n}\n\nconst unwrap = (node: SyntaxNode): SyntaxNode =>\n node.type === 'TSAsExpression' || node.type === 'TSSatisfiesExpression' || node.type === 'ParenthesizedExpression'\n ? unwrap(node.expression!)\n : node\nconst keyOf = (node: SyntaxNode): string | undefined =>\n node.key?.type === 'Identifier' ? node.key.name : typeof node.key?.value === 'string' ? node.key.value : undefined\n\n/** Remove inactive environment literals before bundling the user config. */\nexport const pruneFilesConfigSource = (source: string, configPath: string, environments: readonly string[]): string => {\n const parsed = parseSync(configPath, source, { sourceType: 'module', lang: 'ts' })\n if (parsed.errors.length > 0) {\n throw new Error(`[nuxt-files-sdk:invalid-config] ${parsed.errors[0]!.message}`)\n }\n // Oxc's node union is wider than the fields inspected here.\n // oxlint-disable typescript/no-unsafe-type-assertion\n const body = (parsed.program as unknown as SyntaxNode).body!\n // oxlint-enable typescript/no-unsafe-type-assertion\n const exported = body.find((node) => node.type === 'ExportDefaultDeclaration')?.declaration\n if (!exported) throw new Error('[nuxt-files-sdk:invalid-config] files.config.ts needs a default export.')\n let root = unwrap(exported)\n if (root.type === 'CallExpression') root = unwrap(root.arguments?.[0] ?? root)\n if (root.type === 'Identifier') {\n const declaration = body.flatMap((node) => node.declarations ?? []).find((node) => node.id?.name === root.name)\n if (declaration?.init) root = unwrap(declaration.init)\n }\n if (root.type !== 'ObjectExpression') {\n throw new Error('[nuxt-files-sdk:invalid-config] The default Files config must be a static object literal.')\n }\n const edits: Array<{ start: number; end: number; text: string }> = []\n const active = new Set(environments)\n for (const property of root.properties ?? []) {\n const key = keyOf(property)\n if (!key?.startsWith('$')) continue\n if (key === '$env' && property.value) {\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion\n const env = unwrap(property.value as SyntaxNode)\n if (env.type !== 'ObjectExpression')\n throw new Error('[nuxt-files-sdk:invalid-config] $env must be an object.')\n for (const entry of env.properties ?? []) {\n if (!active.has(keyOf(entry) ?? '')) edits.push({ start: entry.start, end: entry.end, text: '...{}' })\n }\n } else if (!active.has(key.slice(1))) {\n edits.push({ start: property.start, end: property.end, text: '...{}' })\n }\n }\n // The selected module lives under the build directory; preserve relative import resolution.\n for (const node of body) {\n if (!node.source || typeof node.source.value !== 'string' || !node.source.value.startsWith('.')) continue\n edits.push({\n start: node.source.start,\n end: node.source.end,\n text: JSON.stringify(resolve(dirname(configPath), node.source.value).replaceAll('\\\\', '/')),\n })\n }\n let result = source\n for (const edit of edits.toSorted((left, right) => right.start - left.start)) {\n result = result.slice(0, edit.start) + edit.text + result.slice(edit.end)\n }\n return result\n}\n"],"mappings":";;;AAuBA,MAAM,UAAU,SACZ,KAAK,SAAS,oBAAoB,KAAK,SAAS,2BAA2B,KAAK,SAAS,4BACnF,OAAO,KAAK,UAAW,IACvB;AACV,MAAM,SAAS,SACX,KAAK,KAAK,SAAS,eAAe,KAAK,IAAI,OAAO,OAAO,KAAK,KAAK,UAAU,WAAW,KAAK,IAAI,QAAQ,KAAA;;AAG7G,MAAa,0BAA0B,QAAgB,YAAoB,iBAA4C;CACnH,MAAM,SAAS,UAAU,YAAY,QAAQ;EAAE,YAAY;EAAU,MAAM;CAAK,CAAC;CACjF,IAAI,OAAO,OAAO,SAAS,GACvB,MAAM,IAAI,MAAM,mCAAmC,OAAO,OAAO,EAAE,CAAE,SAAS;CAIlF,MAAM,OAAQ,OAAO,QAAkC;CAEvD,MAAM,WAAW,KAAK,MAAM,SAAS,KAAK,SAAS,0BAA0B,CAAC,EAAE;CAChF,IAAI,CAAC,UAAU,MAAM,IAAI,MAAM,yEAAyE;CACxG,IAAI,OAAO,OAAO,QAAQ;CAC1B,IAAI,KAAK,SAAS,kBAAkB,OAAO,OAAO,KAAK,YAAY,MAAM,IAAI;CAC7E,IAAI,KAAK,SAAS,cAAc;EAC5B,MAAM,cAAc,KAAK,SAAS,SAAS,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS,KAAK,IAAI,SAAS,KAAK,IAAI;EAC9G,IAAI,aAAa,MAAM,OAAO,OAAO,YAAY,IAAI;CACzD;CACA,IAAI,KAAK,SAAS,oBACd,MAAM,IAAI,MAAM,2FAA2F;CAE/G,MAAM,QAA6D,CAAC;CACpE,MAAM,SAAS,IAAI,IAAI,YAAY;CACnC,KAAK,MAAM,YAAY,KAAK,cAAc,CAAC,GAAG;EAC1C,MAAM,MAAM,MAAM,QAAQ;EAC1B,IAAI,CAAC,KAAK,WAAW,GAAG,GAAG;EAC3B,IAAI,QAAQ,UAAU,SAAS,OAAO;GAElC,MAAM,MAAM,OAAO,SAAS,KAAmB;GAC/C,IAAI,IAAI,SAAS,oBACb,MAAM,IAAI,MAAM,yDAAyD;GAC7E,KAAK,MAAM,SAAS,IAAI,cAAc,CAAC,GACnC,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,KAAK,EAAE,GAAG,MAAM,KAAK;IAAE,OAAO,MAAM;IAAO,KAAK,MAAM;IAAK,MAAM;GAAQ,CAAC;EAE7G,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,MAAM,CAAC,CAAC,GAC/B,MAAM,KAAK;GAAE,OAAO,SAAS;GAAO,KAAK,SAAS;GAAK,MAAM;EAAQ,CAAC;CAE9E;CAEA,KAAK,MAAM,QAAQ,MAAM;EACrB,IAAI,CAAC,KAAK,UAAU,OAAO,KAAK,OAAO,UAAU,YAAY,CAAC,KAAK,OAAO,MAAM,WAAW,GAAG,GAAG;EACjG,MAAM,KAAK;GACP,OAAO,KAAK,OAAO;GACnB,KAAK,KAAK,OAAO;GACjB,MAAM,KAAK,UAAU,QAAQ,QAAQ,UAAU,GAAG,KAAK,OAAO,KAAK,CAAC,CAAC,WAAW,MAAM,GAAG,CAAC;EAC9F,CAAC;CACL;CACA,IAAI,SAAS;CACb,KAAK,MAAM,QAAQ,MAAM,UAAU,MAAM,UAAU,MAAM,QAAQ,KAAK,KAAK,GACvE,SAAS,OAAO,MAAM,GAAG,KAAK,KAAK,IAAI,KAAK,OAAO,OAAO,MAAM,KAAK,GAAG;CAE5E,OAAO;AACX"}
|
package/dist/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":[],"sources":["../src/config.ts"],"sourcesContent":["import type { Adapter, FilesHooks, FilesOptions, FilesPlugin, ProviderSlug } from 'files-sdk'\nimport type { AuthorizeContext, AuthorizeResult, CreateFilesRouterOptions } from 'files-sdk/api'\nimport type { H3Event } from 'h3'\n\nimport type { ProviderFactories } from './runtime/provider-types'\n\nexport type AdapterFactory = (...args: never[]) => Adapter\ntype StorageAdapter = ProviderSlug | AdapterFactory\nexport type FilesPluginContext = { storage: (name: string) => Adapter }\ntype FactoryFor<A extends StorageAdapter> = A extends ProviderSlug ? ProviderFactories[A] : A\ntype AdapterOptions<A extends StorageAdapter> =\n Parameters<FactoryFor<A>> extends []\n ? undefined\n : [Parameters<FactoryFor<A>>[0]] extends [never]\n ? unknown\n : Parameters<FactoryFor<A>>[0]\ntype AdapterConfig<A extends StorageAdapter> = {\n /** Native adapter factory options, or a synchronous runtime resolver for them. */\n config?: Exclude<AdapterOptions<A>, undefined> | (() => Exclude<AdapterOptions<A>, undefined>)\n} & (undefined extends AdapterOptions<A>\n ? unknown\n : { config: Exclude<AdapterOptions<A>, undefined> | (() => Exclude<AdapterOptions<A>, undefined>) })\ntype CommonFilesOptions<A extends StorageAdapter> = Omit<\n FilesOptions<ReturnType<FactoryFor<A>>>,\n 'adapter' | 'hooks' | 'plugins'\n>\n\n/** Configuration for one Files SDK storage. */\nexport type StorageConfig<\n Provider extends StorageAdapter = StorageAdapter,\n Plugins extends readonly FilesPlugin[] = readonly FilesPlugin[],\n> = Provider extends StorageAdapter\n ? {\n /** Files SDK provider slug or a compatible adapter factory. */\n adapter: Provider\n plugins?: Plugins | ((context: FilesPluginContext) => Plugins)\n hooks?: FilesHooks\n } & CommonFilesOptions<Provider> &\n AdapterConfig<Provider>\n : never\n\nexport type FilesRoute = Omit<CreateFilesRouterOptions, 'files' | 'authorize'> & {\n path: string\n storage?: string\n authorize?: (context: AuthorizeContext & { event: H3Event }) => AuthorizeResult | Promise<AuthorizeResult>\n}\n\nexport type StorageSet = StorageConfig | Record<string, StorageConfig>\n/** One environment's Files options, before or after resolution. */\nexport interface FilesEnvironmentConfig {\n storage?: StorageSet\n routes?: readonly FilesRoute[]\n}\n/** User-authored configuration. Environment blocks can override every Files option. */\nexport interface FilesConfigInput extends FilesEnvironmentConfig {\n /** Overrides applied by the development server. */\n $development?: FilesEnvironmentConfig\n $production?: FilesEnvironmentConfig\n $test?: FilesEnvironmentConfig\n $prerender?: FilesEnvironmentConfig\n $env?: Record<string, FilesEnvironmentConfig>\n}\n/** Environment-resolved runtime configuration. */\nexport interface FilesConfig extends FilesEnvironmentConfig {\n storage: StorageSet\n}\nexport interface SingleFilesConfig extends FilesConfig {\n /** Files SDK storage configuration. */\n storage: StorageConfig\n}\nexport interface NamedFilesConfig extends FilesConfig {\n storage: Record<string, StorageConfig>\n}\n\ntype EntryCheck<T> = T extends { adapter: infer A extends StorageAdapter }\n ? T extends StorageConfig<A>\n ? Record<Exclude<keyof T, keyof StorageConfig<A>>, never>\n : StorageConfig<A>\n : never\ntype StorageCheck<T> = T extends { adapter: unknown }\n ? EntryCheck<T>\n : T extends Record<string, unknown>\n ? { [K in keyof T]: EntryCheck<T[K]> }\n : never\ntype StorageOf<T> = T extends { storage: infer S } ? S : never\ntype StorageBranches<T> =\n | StorageOf<T>\n | StorageOf<T extends { $development: infer E } ? E : never>\n | StorageOf<T extends { $production: infer E } ? E : never>\n | StorageOf<T extends { $test: infer E } ? E : never>\n | StorageOf<T extends { $prerender: infer E } ? E : never>\n | StorageOf<T extends { $env: infer E } ? E[keyof E] : never>\ntype StorageNames<T> =\n StorageBranches<T> extends infer S\n ? S extends { adapter: unknown }\n ? never\n : S extends object\n ? Extract<keyof S, string>\n : never\n : never\ntype RouteCheck<T> = FilesRoute &\n ([StorageNames<T>] extends [never] ? { storage?: never } : { storage: StorageNames<T> })\ntype EnvironmentCheck<T, Root> = T extends object\n ? Record<Exclude<keyof T, 'storage' | 'routes'>, never> &\n (T extends { storage: infer S } ? { storage: S & StorageCheck<S> } : unknown) &\n (T extends { routes: unknown } ? { routes: readonly RouteCheck<Root>[] } : unknown)\n : never\ntype InputCheck<T> = Record<\n Exclude<keyof T, 'storage' | 'routes' | '$development' | '$production' | '$test' | '$prerender' | '$env'>,\n never\n> &\n (T extends { storage: infer S } ? { storage: S & StorageCheck<S> } : unknown) &\n (T extends { routes: unknown } ? { routes: readonly RouteCheck<T>[] } : unknown) & {\n [K in Extract<keyof T, '$development' | '$production' | '$test' | '$prerender'>]: T[K] &\n EnvironmentCheck<T[K], T>\n } & (T extends { $env: infer E extends Record<string, unknown> }\n ? { $env: { [K in keyof E]: E[K] & EnvironmentCheck<E[K], T> } }\n : unknown)\n\n/** Preserve storage names, adapters, and plugin literals without resolving an environment. */\nexport function defineFilesConfig<const C extends object>(config: C & FilesConfigInput & InputCheck<NoInfer<C>>): C {\n return config\n}\n"],"mappings":";;AAwHA,SAAgB,kBAA0C,QAA0D;CAChH,OAAO;AACX"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","names":[],"sources":["../../src/devtools/auth.ts"],"sourcesContent":["export interface FilesDevtoolsToken {\n token: string\n expiresAt: number\n}\n\nexport const FILES_DEVTOOLS_TOKEN_TTL = 60_000\n\nconst encoder = new TextEncoder()\nconst base64Url = (bytes: Uint8Array): string =>\n btoa(String.fromCharCode(...bytes))\n .replaceAll('+', '-')\n .replaceAll('/', '_')\n .replaceAll('=', '')\nconst decodeBase64Url = (value: string): ArrayBuffer => {\n const base64 = value.replaceAll('-', '+').replaceAll('_', '/')\n const decoded = atob(`${base64}${'='.repeat((4 - (base64.length % 4)) % 4)}`)\n const bytes = new Uint8Array(new ArrayBuffer(decoded.length))\n for (let index = 0; index < decoded.length; index += 1) bytes[index] = decoded.charCodeAt(index)\n return bytes.buffer\n}\nconst key = (secret: string): Promise<CryptoKey> =>\n crypto.subtle.importKey('raw', encoder.encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign', 'verify'])\n\nexport const createFilesDevtoolsToken = async (secret: string, now = Date.now()): Promise<FilesDevtoolsToken> => {\n const expiresAt = now + FILES_DEVTOOLS_TOKEN_TTL\n const payload = String(expiresAt)\n const signature = await crypto.subtle.sign('HMAC', await key(secret), encoder.encode(payload))\n return { token: `${payload}.${base64Url(new Uint8Array(signature))}`, expiresAt }\n}\n\nexport const verifyFilesDevtoolsToken = async (token: string, secret: string, now = Date.now()): Promise<boolean> => {\n const separator = token.indexOf('.')\n if (separator < 1) return false\n const payload = token.slice(0, separator)\n const expiresAt = Number(payload)\n if (!Number.isSafeInteger(expiresAt) || expiresAt <= now || expiresAt > now + FILES_DEVTOOLS_TOKEN_TTL) return false\n try {\n return await crypto.subtle.verify(\n 'HMAC',\n await key(secret),\n decodeBase64Url(token.slice(separator + 1)),\n encoder.encode(payload),\n )\n } catch {\n return false\n }\n}\n\ntype RequestHeaders =\n | Headers\n | {\n authorization?: string | string[] | undefined\n get?: ((name: string) => string | null | undefined) | undefined\n }\n\nconst authorizationHeader = (headers: RequestHeaders): string | undefined => {\n if (headers instanceof Headers) return headers.get('authorization') ?? undefined\n const value = headers.get?.('authorization') ?? headers.authorization\n return Array.isArray(value) ? value[0] : value\n}\n\nexport const authorizeFilesDevtoolsRequest = async (\n request: { headers: RequestHeaders },\n secret: string,\n): Promise<boolean> => {\n const authorization = authorizationHeader(request.headers)\n return authorization?.startsWith('Bearer ')\n ? verifyFilesDevtoolsToken(authorization.slice('Bearer '.length), secret)\n : false\n}\n"],"mappings":";AAKA,MAAa,2BAA2B;AAExC,MAAM,UAAU,IAAI,YAAY;AAChC,MAAM,aAAa,UACf,KAAK,OAAO,aAAa,GAAG,KAAK,CAAC,CAAC,CAC9B,WAAW,KAAK,GAAG,CAAC,CACpB,WAAW,KAAK,GAAG,CAAC,CACpB,WAAW,KAAK,EAAE;AAC3B,MAAM,mBAAmB,UAA+B;CACpD,MAAM,SAAS,MAAM,WAAW,KAAK,GAAG,CAAC,CAAC,WAAW,KAAK,GAAG;CAC7D,MAAM,UAAU,KAAK,GAAG,SAAS,IAAI,QAAQ,IAAK,OAAO,SAAS,KAAM,CAAC,GAAG;CAC5E,MAAM,QAAQ,IAAI,WAAW,IAAI,YAAY,QAAQ,MAAM,CAAC;CAC5D,KAAK,IAAI,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,GAAG,MAAM,SAAS,QAAQ,WAAW,KAAK;CAC/F,OAAO,MAAM;AACjB;AACA,MAAM,OAAO,WACT,OAAO,OAAO,UAAU,OAAO,QAAQ,OAAO,MAAM,GAAG;CAAE,MAAM;CAAQ,MAAM;AAAU,GAAG,OAAO,CAAC,QAAQ,QAAQ,CAAC;AAEvH,MAAa,2BAA2B,OAAO,QAAgB,MAAM,KAAK,IAAI,MAAmC;CAC7G,MAAM,YAAY,MAAM;CACxB,MAAM,UAAU,OAAO,SAAS;CAChC,MAAM,YAAY,MAAM,OAAO,OAAO,KAAK,QAAQ,MAAM,IAAI,MAAM,GAAG,QAAQ,OAAO,OAAO,CAAC;CAC7F,OAAO;EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,IAAI,WAAW,SAAS,CAAC;EAAK;CAAU;AACpF;AAEA,MAAa,2BAA2B,OAAO,OAAe,QAAgB,MAAM,KAAK,IAAI,MAAwB;CACjH,MAAM,YAAY,MAAM,QAAQ,GAAG;CACnC,IAAI,YAAY,GAAG,OAAO;CAC1B,MAAM,UAAU,MAAM,MAAM,GAAG,SAAS;CACxC,MAAM,YAAY,OAAO,OAAO;CAChC,IAAI,CAAC,OAAO,cAAc,SAAS,KAAK,aAAa,OAAO,YAAY,MAAA,KAAgC,OAAO;CAC/G,IAAI;EACA,OAAO,MAAM,OAAO,OAAO,OACvB,QACA,MAAM,IAAI,MAAM,GAChB,gBAAgB,MAAM,MAAM,YAAY,CAAC,CAAC,GAC1C,QAAQ,OAAO,OAAO,CAC1B;CACJ,QAAQ;EACJ,OAAO;CACX;AACJ;AASA,MAAM,uBAAuB,YAAgD;CACzE,IAAI,mBAAmB,SAAS,OAAO,QAAQ,IAAI,eAAe,KAAK,KAAA;CACvE,MAAM,QAAQ,QAAQ,MAAM,eAAe,KAAK,QAAQ;CACxD,OAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK;AAC7C;AAEA,MAAa,gCAAgC,OACzC,SACA,WACmB;CACnB,MAAM,gBAAgB,oBAAoB,QAAQ,OAAO;CACzD,OAAO,eAAe,WAAW,SAAS,IACpC,yBAAyB,cAAc,MAAM,CAAgB,GAAG,MAAM,IACtE;AACV"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"devframe.js","names":[],"sources":["../../src/devtools/devframe.ts"],"sourcesContent":["import { fileURLToPath } from 'node:url'\n\nimport { defineDevframe, defineRpcFunction } from 'devframe'\n\nimport { version } from '../../package.json'\nimport { createFilesDevtoolsToken } from './auth'\nimport {\n createFilesDevtoolsDiagnostic,\n FILES_DEVTOOLS_DIAGNOSTICS,\n isFilesDevtoolsDiagnostic,\n isFilesDevtoolsFailure,\n type FilesDevtoolsDiagnostic,\n} from './diagnostics'\nimport { FILES_DEVTOOLS_PATH } from './snapshot'\n\ninterface FilesDevframeMessage {\n id: string\n message: string\n level: 'error'\n description: string\n category: string\n labels: string[]\n notify: true\n}\n\nexport interface FilesDevframeOptions {\n write: boolean\n maxUploadSize: number\n tokenSecret: string\n notifyFailure: (message: FilesDevframeMessage) => unknown\n}\n\nconst clientAssets = fileURLToPath(new URL('./client', import.meta.url))\nconst messageTitles = {\n upload: 'Files upload failed',\n delete: 'Files delete failed',\n initialization: 'Files storage initialization failed',\n gateway: 'Files DevTools gateway failed',\n} as const\n\nexport const createFilesDevframe = ({ write, maxUploadSize, tokenSecret, notifyFailure }: FilesDevframeOptions) =>\n defineDevframe({\n id: 'nuxt-files-sdk',\n name: 'Files',\n version,\n packageName: 'nuxt-files-sdk',\n importMetaUrl: import.meta.url,\n homepage: 'https://github.com/liria24/nuxt-files-sdk',\n description: 'Files SDK storage and integration diagnostics for Nuxt.',\n icon: 'ph:files-duotone',\n clientAssets,\n async setup(context) {\n await context.host.mountConnectionMeta?.(FILES_DEVTOOLS_PATH)\n context.views.hostStatic(FILES_DEVTOOLS_PATH, clientAssets)\n\n const definitions = Object.fromEntries(\n Object.entries(FILES_DEVTOOLS_DIAGNOSTICS).map(([code, diagnostic]) => [\n code,\n {\n why: ({ message }: { message?: string }) => message ?? diagnostic.message,\n fix: diagnostic.hint,\n docs: diagnostic.docs,\n },\n ]),\n )\n const diagnostics = context.diagnostics.defineDiagnostics({ codes: definitions })\n context.diagnostics.register(diagnostics)\n const reported = new Set<string>()\n const reportDiagnostic = (diagnostic: FilesDevtoolsDiagnostic, cause?: unknown): void => {\n const key = `${diagnostic.code}:${diagnostic.message}`\n if (reported.has(key)) return\n reported.add(key)\n diagnostics[diagnostic.code]?.(\n { message: diagnostic.message, ...(cause === undefined ? {} : { cause }) },\n { method: diagnostic.level === 'info' ? 'log' : diagnostic.level === 'warning' ? 'warn' : 'error' },\n )\n }\n\n const scoped = context.scope('nuxt-files-sdk')\n scoped.rpc.register(\n defineRpcFunction({\n name: 'issue-http-token',\n type: 'query',\n handler: () => createFilesDevtoolsToken(tokenSecret),\n }),\n )\n scoped.rpc.register(\n defineRpcFunction({\n name: 'report-diagnostics',\n type: 'event',\n handler(value: unknown) {\n if (Array.isArray(value))\n value.filter(isFilesDevtoolsDiagnostic).forEach((item) => reportDiagnostic(item))\n },\n }),\n )\n scoped.rpc.register(\n defineRpcFunction({\n name: 'report-failure',\n type: 'event',\n handler(value: unknown) {\n if (!isFilesDevtoolsFailure(value)) return\n if (!write && (value.kind === 'upload' || value.kind === 'delete')) return\n const description =\n value.kind === 'upload'\n ? `${value.message}\\nMaximum upload size: ${maxUploadSize} bytes.`\n : value.message\n void notifyFailure({\n id: `nuxt-files-sdk:${value.kind}:${value.target ?? 'default'}`,\n message: messageTitles[value.kind],\n level: 'error',\n description,\n category: 'nuxt-files-sdk',\n labels: ['nuxt-files-sdk', value.kind],\n notify: true,\n })\n if (value.kind === 'initialization') {\n reportDiagnostic(\n createFilesDevtoolsDiagnostic('NUXT_FILES_ADAPTER_INIT_FAILED'),\n value.message,\n )\n } else if (value.kind === 'gateway') {\n reportDiagnostic(createFilesDevtoolsDiagnostic('NUXT_FILES_GATEWAY_FAILED'), value.message)\n }\n },\n }),\n )\n },\n })\n"],"mappings":";;;;;;;AAgCA,MAAM,eAAe,cAAc,IAAI,IAAI,YAAY,YAAY,GAAG,CAAC;AACvE,MAAM,gBAAgB;CAClB,QAAQ;CACR,QAAQ;CACR,gBAAgB;CAChB,SAAS;AACb;AAEA,MAAa,uBAAuB,EAAE,OAAO,eAAe,aAAa,oBACrE,eAAe;CACX,IAAI;CACJ,MAAM;CACN;CACA,aAAa;CACb,eAAe,YAAY;CAC3B,UAAU;CACV,aAAa;CACb,MAAM;CACN;CACA,MAAM,MAAM,SAAS;EACjB,MAAM,QAAQ,KAAK,sBAAsB,mBAAmB;EAC5D,QAAQ,MAAM,WAAW,qBAAqB,YAAY;EAE1D,MAAM,cAAc,OAAO,YACvB,OAAO,QAAQ,0BAA0B,CAAC,CAAC,KAAK,CAAC,MAAM,gBAAgB,CACnE,MACA;GACI,MAAM,EAAE,cAAoC,WAAW,WAAW;GAClE,KAAK,WAAW;GAChB,MAAM,WAAW;EACrB,CACJ,CAAC,CACL;EACA,MAAM,cAAc,QAAQ,YAAY,kBAAkB,EAAE,OAAO,YAAY,CAAC;EAChF,QAAQ,YAAY,SAAS,WAAW;EACxC,MAAM,2BAAW,IAAI,IAAY;EACjC,MAAM,oBAAoB,YAAqC,UAA0B;GACrF,MAAM,MAAM,GAAG,WAAW,KAAK,GAAG,WAAW;GAC7C,IAAI,SAAS,IAAI,GAAG,GAAG;GACvB,SAAS,IAAI,GAAG;GAChB,YAAY,WAAW,KAAK,GACxB;IAAE,SAAS,WAAW;IAAS,GAAI,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM;GAAG,GACzE,EAAE,QAAQ,WAAW,UAAU,SAAS,QAAQ,WAAW,UAAU,YAAY,SAAS,QAAQ,CACtG;EACJ;EAEA,MAAM,SAAS,QAAQ,MAAM,gBAAgB;EAC7C,OAAO,IAAI,SACP,kBAAkB;GACd,MAAM;GACN,MAAM;GACN,eAAe,yBAAyB,WAAW;EACvD,CAAC,CACL;EACA,OAAO,IAAI,SACP,kBAAkB;GACd,MAAM;GACN,MAAM;GACN,QAAQ,OAAgB;IACpB,IAAI,MAAM,QAAQ,KAAK,GACnB,MAAM,OAAO,yBAAyB,CAAC,CAAC,SAAS,SAAS,iBAAiB,IAAI,CAAC;GACxF;EACJ,CAAC,CACL;EACA,OAAO,IAAI,SACP,kBAAkB;GACd,MAAM;GACN,MAAM;GACN,QAAQ,OAAgB;IACpB,IAAI,CAAC,uBAAuB,KAAK,GAAG;IACpC,IAAI,CAAC,UAAU,MAAM,SAAS,YAAY,MAAM,SAAS,WAAW;IACpE,MAAM,cACF,MAAM,SAAS,WACT,GAAG,MAAM,QAAQ,yBAAyB,cAAc,WACxD,MAAM;IAChB,cAAmB;KACf,IAAI,kBAAkB,MAAM,KAAK,GAAG,MAAM,UAAU;KACpD,SAAS,cAAc,MAAM;KAC7B,OAAO;KACP;KACA,UAAU;KACV,QAAQ,CAAC,kBAAkB,MAAM,IAAI;KACrC,QAAQ;IACZ,CAAC;IACD,IAAI,MAAM,SAAS,kBACf,iBACI,8BAA8B,gCAAgC,GAC9D,MAAM,OACV;SACG,IAAI,MAAM,SAAS,WACtB,iBAAiB,8BAA8B,2BAA2B,GAAG,MAAM,OAAO;GAElG;EACJ,CAAC,CACL;CACJ;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","names":[],"sources":["../../src/devtools/diagnostics.ts"],"sourcesContent":["const troubleshooting =\n 'https://github.com/liria24/nuxt-files-sdk/blob/main/docs/content/4.reference/4.troubleshooting.md'\n\nexport interface FilesDevtoolsDiagnostic {\n code: FilesDevtoolsDiagnosticCode\n level: 'info' | 'warning' | 'error'\n message: string\n hint?: string\n docs?: string\n}\n\nexport const FILES_DEVTOOLS_DIAGNOSTICS = {\n NUXT_FILES_NOT_CONFIGURED: {\n level: 'warning',\n message: 'The Files registry has not been configured.',\n hint: 'Check that files.config.ts is loaded by the Nuxt or Nitro integration.',\n docs: troubleshooting,\n },\n NUXT_FILES_INVALID_CONFIG: {\n level: 'error',\n message: 'The Files registry rejected the storage configuration.',\n hint: 'Check the storage shape in the active files.config.ts environment.',\n docs: troubleshooting,\n },\n NUXT_FILES_ADAPTER_INIT_FAILED: {\n level: 'error',\n message: 'A configured storage adapter could not be initialized.',\n hint: 'Check the provider package, runtime support, and required configuration.',\n docs: troubleshooting,\n },\n NUXT_FILES_GATEWAY_FAILED: {\n level: 'error',\n message: 'The Files DevTools gateway could not complete a request.',\n hint: 'Check the Nitro development server and the Files registry diagnostics.',\n docs: troubleshooting,\n },\n} as const satisfies Record<string, Omit<FilesDevtoolsDiagnostic, 'code'>>\n\nexport type FilesDevtoolsDiagnosticCode = keyof typeof FILES_DEVTOOLS_DIAGNOSTICS\n\nexport const createFilesDevtoolsDiagnostic = (\n code: FilesDevtoolsDiagnosticCode,\n message?: string,\n): FilesDevtoolsDiagnostic => ({ code, ...FILES_DEVTOOLS_DIAGNOSTICS[code], ...(message ? { message } : {}) })\n\nexport const isFilesDevtoolsDiagnostic = (value: unknown): value is FilesDevtoolsDiagnostic =>\n Boolean(\n value &&\n typeof value === 'object' &&\n 'code' in value &&\n typeof value.code === 'string' &&\n Object.hasOwn(FILES_DEVTOOLS_DIAGNOSTICS, value.code) &&\n 'level' in value &&\n (value.level === 'info' || value.level === 'warning' || value.level === 'error') &&\n 'message' in value &&\n typeof value.message === 'string',\n )\n\nexport type FilesDevtoolsFailureKind = 'upload' | 'delete' | 'initialization' | 'gateway'\n\nexport interface FilesDevtoolsFailure {\n kind: FilesDevtoolsFailureKind\n message: string\n target?: string\n}\n\nexport const isFilesDevtoolsFailure = (value: unknown): value is FilesDevtoolsFailure =>\n Boolean(\n value &&\n typeof value === 'object' &&\n 'kind' in value &&\n (value.kind === 'upload' ||\n value.kind === 'delete' ||\n value.kind === 'initialization' ||\n value.kind === 'gateway') &&\n 'message' in value &&\n typeof value.message === 'string' &&\n (!('target' in value) || value.target === undefined || typeof value.target === 'string'),\n )\n"],"mappings":";AAAA,MAAM,kBACF;AAUJ,MAAa,6BAA6B;CACtC,2BAA2B;EACvB,OAAO;EACP,SAAS;EACT,MAAM;EACN,MAAM;CACV;CACA,2BAA2B;EACvB,OAAO;EACP,SAAS;EACT,MAAM;EACN,MAAM;CACV;CACA,gCAAgC;EAC5B,OAAO;EACP,SAAS;EACT,MAAM;EACN,MAAM;CACV;CACA,2BAA2B;EACvB,OAAO;EACP,SAAS;EACT,MAAM;EACN,MAAM;CACV;AACJ;AAIA,MAAa,iCACT,MACA,aAC2B;CAAE;CAAM,GAAG,2BAA2B;CAAO,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAG;AAE5G,MAAa,6BAA6B,UACtC,QACI,SACA,OAAO,UAAU,YACjB,UAAU,SACV,OAAO,MAAM,SAAS,YACtB,OAAO,OAAO,4BAA4B,MAAM,IAAI,KACpD,WAAW,UACV,MAAM,UAAU,UAAU,MAAM,UAAU,aAAa,MAAM,UAAU,YACxE,aAAa,SACb,OAAO,MAAM,YAAY,QAC7B;AAUJ,MAAa,0BAA0B,UACnC,QACI,SACA,OAAO,UAAU,YACjB,UAAU,UACT,MAAM,SAAS,YACZ,MAAM,SAAS,YACf,MAAM,SAAS,oBACf,MAAM,SAAS,cACnB,aAAa,SACb,OAAO,MAAM,YAAY,aACxB,EAAE,YAAY,UAAU,MAAM,WAAW,KAAA,KAAa,OAAO,MAAM,WAAW,SACnF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enabled.js","names":[],"sources":["../../src/devtools/enabled.ts"],"sourcesContent":["export interface FilesDevtoolsOptions {\n /** Enable Files SDK development tools when Nuxt DevTools is available. */\n enabled?: boolean\n /** Allow uploads and deletes from the development-only file browser. Defaults to true. */\n write?: boolean\n}\n\nexport type FilesDevtoolsSetting = boolean | FilesDevtoolsOptions\n\nexport const shouldEnableFilesDevtools = (\n development: boolean,\n moduleDevtools: FilesDevtoolsSetting,\n nuxtDevtools?: boolean | { enabled?: boolean },\n): boolean =>\n development &&\n (typeof moduleDevtools === 'boolean' ? moduleDevtools : moduleDevtools.enabled !== false) &&\n (typeof nuxtDevtools === 'boolean' ? nuxtDevtools : nuxtDevtools?.enabled !== false)\n\nexport const filesDevtoolsWriteEnabled = (setting: FilesDevtoolsSetting): boolean =>\n typeof setting === 'boolean' ? setting : setting.enabled !== false && setting.write !== false\n"],"mappings":";AASA,MAAa,6BACT,aACA,gBACA,iBAEA,gBACC,OAAO,mBAAmB,YAAY,iBAAiB,eAAe,YAAY,WAClF,OAAO,iBAAiB,YAAY,eAAe,cAAc,YAAY;AAElF,MAAa,6BAA6B,YACtC,OAAO,YAAY,YAAY,UAAU,QAAQ,YAAY,SAAS,QAAQ,UAAU"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"files-read.js","names":[],"sources":["../../src/devtools/files-read.ts"],"sourcesContent":["import { createFilesDevtoolsHandler } from './files'\n\nexport default createFilesDevtoolsHandler(false)\n"],"mappings":";;AAEA,IAAA,qBAAe,2BAA2B,KAAK"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"files-write.js","names":[],"sources":["../../src/devtools/files-write.ts"],"sourcesContent":["import { createFilesDevtoolsHandler } from './files'\n\nexport default createFilesDevtoolsHandler(true)\n"],"mappings":";;AAEA,IAAA,sBAAe,2BAA2B,IAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","names":[],"sources":["../../src/devtools/files.ts"],"sourcesContent":["import type { Files } from 'files-sdk'\nimport { createFilesRouter, type FilesOperation } from 'files-sdk/api'\nimport { createRouteHandler } from 'files-sdk/nitro'\n\nimport { useServerFiles } from '../runtime'\nimport { inspectFiles } from '../runtime/internal'\nimport { authorizeFilesDevtoolsRequest } from './auth'\nimport { FILES_DEVTOOLS_MAX_UPLOAD_SIZE } from './snapshot'\n\nconst readOperations = ['capabilities', 'list', 'exists', 'download'] as const satisfies readonly FilesOperation[]\nconst writeOperations = [...readOperations, 'upload', 'delete'] as const satisfies readonly FilesOperation[]\nexport const filesDevtoolsOperations = (write: boolean): readonly FilesOperation[] =>\n write ? writeOperations : readOperations\nconst getFiles: (name?: string) => Files = useServerFiles\n\nconst resolveFiles = (request: Request): Files => {\n const requested = new URL(request.url).searchParams.get('storage') ?? undefined\n const storages = inspectFiles().storages\n if (storages.length === 1 && storages[0]?.name === undefined) {\n if (requested !== undefined) throw new Error(`[nuxt-files-sdk:unknown-storage] Unknown storage \"${requested}\".`)\n return getFiles()\n }\n if (requested === undefined || !storages.some(({ name }) => name === requested)) {\n throw new Error('[nuxt-files-sdk:unknown-storage] Select a configured storage.')\n }\n return getFiles(requested)\n}\n\nexport const createFilesDevtoolsHandler = (write: boolean) => {\n const handleFiles = createRouteHandler(\n createFilesRouter({\n files: resolveFiles,\n operations: filesDevtoolsOperations(write),\n maxUploadSize: FILES_DEVTOOLS_MAX_UPLOAD_SIZE,\n secret: crypto.randomUUID(),\n }),\n )\n return async (event: Parameters<typeof handleFiles>[0], secret: string): Promise<Response> => {\n if (!(await authorizeFilesDevtoolsRequest(event.node.req, secret))) {\n return new Response(null, { status: 401 })\n }\n const url = new URL(event.node.req.url ?? '/', 'http://nuxt-files-sdk.local')\n if (event.node.req.method === 'GET' && url.searchParams.get('op') === 'devtools') {\n return Response.json({ write, maxUploadSize: FILES_DEVTOOLS_MAX_UPLOAD_SIZE })\n }\n return handleFiles(event)\n }\n}\n"],"mappings":";;;;;;;AASA,MAAM,iBAAiB;CAAC;CAAgB;CAAQ;CAAU;AAAU;AACpE,MAAM,kBAAkB;CAAC,GAAG;CAAgB;CAAU;AAAQ;AAC9D,MAAa,2BAA2B,UACpC,QAAQ,kBAAkB;AAC9B,MAAM,WAAqC;AAE3C,MAAM,gBAAgB,YAA4B;CAC9C,MAAM,YAAY,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC,aAAa,IAAI,SAAS,KAAK,KAAA;CACtE,MAAM,WAAW,aAAa,CAAC,CAAC;CAChC,IAAI,SAAS,WAAW,KAAK,SAAS,EAAE,EAAE,SAAS,KAAA,GAAW;EAC1D,IAAI,cAAc,KAAA,GAAW,MAAM,IAAI,MAAM,qDAAqD,UAAU,GAAG;EAC/G,OAAO,SAAS;CACpB;CACA,IAAI,cAAc,KAAA,KAAa,CAAC,SAAS,MAAM,EAAE,WAAW,SAAS,SAAS,GAC1E,MAAM,IAAI,MAAM,+DAA+D;CAEnF,OAAO,SAAS,SAAS;AAC7B;AAEA,MAAa,8BAA8B,UAAmB;CAC1D,MAAM,cAAc,mBAChB,kBAAkB;EACd,OAAO;EACP,YAAY,wBAAwB,KAAK;EACzC,eAAe;EACf,QAAQ,OAAO,WAAW;CAC9B,CAAC,CACL;CACA,OAAO,OAAO,OAA0C,WAAsC;EAC1F,IAAI,CAAE,MAAM,8BAA8B,MAAM,KAAK,KAAK,MAAM,GAC5D,OAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI,CAAC;EAE7C,MAAM,MAAM,IAAI,IAAI,MAAM,KAAK,IAAI,OAAO,KAAK,6BAA6B;EAC5E,IAAI,MAAM,KAAK,IAAI,WAAW,SAAS,IAAI,aAAa,IAAI,IAAI,MAAM,YAClE,OAAO,SAAS,KAAK;GAAE;GAAO,eAAe;EAA+B,CAAC;EAEjF,OAAO,YAAY,KAAK;CAC5B;AACJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["tokenHandler","uiHandler"],"sources":["../../src/devtools/index.ts"],"sourcesContent":["import { fileURLToPath } from 'node:url'\n\nimport { addDevServerHandler, addServerHandler, addServerTemplate } from '@nuxt/kit'\nimport type { Nuxt } from '@nuxt/schema'\n\nimport { setupNuxtV3Devtools } from './nuxt-v3'\nimport uiHandler from './nuxt-v3-handler'\nimport { setupNuxtV4Devtools } from './nuxt-v4'\nimport {\n FILES_DEVTOOLS_MAX_UPLOAD_SIZE,\n FILES_DEVTOOLS_PATH,\n FILES_GATEWAY_PATH,\n FILES_SNAPSHOT_PATH,\n FILES_TOKEN_PATH,\n} from './snapshot'\nimport tokenHandler from './token'\n\nconst authenticatedHandler = (name: string, path: string, arguments_: string[]): string => {\n const filename = `#nuxt-files-sdk/${name}`\n addServerTemplate({\n filename,\n getContents: () =>\n `import handler from ${JSON.stringify(path.replaceAll('\\\\', '/'))}\\nexport default event => handler(event, ${arguments_.map((value) => JSON.stringify(value)).join(', ')})\\n`,\n })\n return filename\n}\n\nexport const setupFilesDevtools = (nuxt: Nuxt, version: string, write: boolean, secrets: { token: string }): void => {\n // Snapshot must run inside Nitro's worker, where the runtime registry lives.\n addServerHandler({\n route: FILES_SNAPSHOT_PATH,\n handler: authenticatedHandler('snapshot', fileURLToPath(new URL('./snapshot.js', import.meta.url)), [\n secrets.token,\n ]),\n })\n addServerHandler({\n route: FILES_GATEWAY_PATH,\n handler: authenticatedHandler(\n 'files',\n fileURLToPath(new URL(write ? './files-write.js' : './files-read.js', import.meta.url)),\n [secrets.token],\n ),\n })\n if (Number.parseInt(version) >= 4) {\n setupNuxtV4Devtools(nuxt, {\n write,\n maxUploadSize: FILES_DEVTOOLS_MAX_UPLOAD_SIZE,\n tokenSecret: secrets.token,\n })\n } else {\n addDevServerHandler({\n route: FILES_TOKEN_PATH,\n handler: (event) =>\n tokenHandler(event, secrets.token, async (token) => {\n const host = 'devtools' in nuxt ? nuxt.devtools : undefined\n if (\n !host ||\n typeof host !== 'object' ||\n !('ensureDevAuthToken' in host) ||\n typeof host.ensureDevAuthToken !== 'function'\n ) {\n throw new Error('Nuxt DevTools authentication is unavailable.')\n }\n await host.ensureDevAuthToken(token)\n }),\n })\n addDevServerHandler({\n route: FILES_DEVTOOLS_PATH,\n handler: uiHandler,\n })\n setupNuxtV3Devtools(nuxt)\n }\n}\n"],"mappings":";;;;;;;;AAiBA,MAAM,wBAAwB,MAAc,MAAc,eAAiC;CACvF,MAAM,WAAW,mBAAmB;CACpC,kBAAkB;EACd;EACA,mBACI,uBAAuB,KAAK,UAAU,KAAK,WAAW,MAAM,GAAG,CAAC,EAAE,2CAA2C,WAAW,KAAK,UAAU,KAAK,UAAU,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;CACjL,CAAC;CACD,OAAO;AACX;AAEA,MAAa,sBAAsB,MAAY,SAAiB,OAAgB,YAAqC;CAEjH,iBAAiB;EACb,OAAO;EACP,SAAS,qBAAqB,YAAY,cAAc,IAAI,IAAI,iBAAiB,YAAY,GAAG,CAAC,GAAG,CAChG,QAAQ,KACZ,CAAC;CACL,CAAC;CACD,iBAAiB;EACb,OAAO;EACP,SAAS,qBACL,SACA,cAAc,IAAI,IAAI,QAAQ,qBAAqB,mBAAmB,YAAY,GAAG,CAAC,GACtF,CAAC,QAAQ,KAAK,CAClB;CACJ,CAAC;CACD,IAAI,OAAO,SAAS,OAAO,KAAK,GAC5B,oBAAoB,MAAM;EACtB;EACA,eAAe;EACf,aAAa,QAAQ;CACzB,CAAC;MACE;EACH,oBAAoB;GAChB,OAAO;GACP,UAAU,UACNA,cAAa,OAAO,QAAQ,OAAO,OAAO,UAAU;IAChD,MAAM,OAAO,cAAc,OAAO,KAAK,WAAW,KAAA;IAClD,IACI,CAAC,QACD,OAAO,SAAS,YAChB,EAAE,wBAAwB,SAC1B,OAAO,KAAK,uBAAuB,YAEnC,MAAM,IAAI,MAAM,8CAA8C;IAElE,MAAM,KAAK,mBAAmB,KAAK;GACvC,CAAC;EACT,CAAC;EACD,oBAAoB;GAChB,OAAO;GACP,SAASC;EACb,CAAC;EACD,oBAAoB,IAAI;CAC5B;AACJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt-v3-handler.js","names":[],"sources":["../../src/devtools/nuxt-v3-handler.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises'\n\nconst html = {\n contentType: 'text/html; charset=utf-8',\n content: readFile(new URL('./client/index.html', import.meta.url), 'utf8'),\n}\nconst assets = new Map([\n ['/', html],\n ['/index.html', html],\n [\n '/app.js',\n {\n contentType: 'text/javascript; charset=utf-8',\n content: readFile(new URL('./client/app.js', import.meta.url), 'utf8'),\n },\n ],\n])\n\nexport default async (event: { path: string; node: { res: { setHeader(name: string, value: string): void } } }) => {\n const asset = assets.get(new URL(event.path, 'http://localhost').pathname)\n if (!asset) return undefined\n event.node.res.setHeader('content-type', asset.contentType)\n return asset.content\n}\n"],"mappings":";;AAEA,MAAM,OAAO;CACT,aAAa;CACb,SAAS,SAAS,IAAI,IAAI,uBAAuB,YAAY,GAAG,GAAG,MAAM;AAC7E;AACA,MAAM,yBAAS,IAAI,IAAI;CACnB,CAAC,KAAK,IAAI;CACV,CAAC,eAAe,IAAI;CACpB,CACI,WACA;EACI,aAAa;EACb,SAAS,SAAS,IAAI,IAAI,mBAAmB,YAAY,GAAG,GAAG,MAAM;CACzE,CACJ;AACJ,CAAC;AAED,IAAA,0BAAe,OAAO,UAA6F;CAC/G,MAAM,QAAQ,OAAO,IAAI,IAAI,IAAI,MAAM,MAAM,kBAAkB,CAAC,CAAC,QAAQ;CACzE,IAAI,CAAC,OAAO,OAAO,KAAA;CACnB,MAAM,KAAK,IAAI,UAAU,gBAAgB,MAAM,WAAW;CAC1D,OAAO,MAAM;AACjB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt-v3.js","names":[],"sources":["../../src/devtools/nuxt-v3.ts"],"sourcesContent":["import type { Nuxt } from '@nuxt/schema'\n\nimport { FILES_DEVTOOLS_PATH } from './snapshot'\n\ninterface CustomTab {\n name: string\n title: string\n icon: string\n view: { type: 'iframe'; src: string }\n}\n\ndeclare module '@nuxt/schema' {\n interface NuxtHooks {\n 'devtools:customTabs': (tabs: CustomTab[]) => void\n }\n}\n\nexport const setupNuxtV3Devtools = (nuxt: Nuxt): void => {\n nuxt.hook('devtools:customTabs', (tabs) => {\n tabs.push({\n name: 'nuxt-files-sdk',\n title: 'Files',\n icon: 'ph:files-duotone',\n view: { type: 'iframe', src: `${FILES_DEVTOOLS_PATH}?host=nuxt-v3` },\n })\n })\n}\n"],"mappings":";;AAiBA,MAAa,uBAAuB,SAAqB;CACrD,KAAK,KAAK,wBAAwB,SAAS;EACvC,KAAK,KAAK;GACN,MAAM;GACN,OAAO;GACP,MAAM;GACN,MAAM;IAAE,MAAM;IAAU,KAAK,GAAG,oBAAoB;GAAe;EACvE,CAAC;CACL,CAAC;AACL"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt-v4.js","names":[],"sources":["../../src/devtools/nuxt-v4.ts"],"sourcesContent":["import { NUXT_DEVTOOLS_GROUP_ID, onDevtoolsReady } from '@nuxt/devtools-kit'\nimport type { Nuxt } from '@nuxt/schema'\nimport { createEmbedded } from 'devframe/adapters/embedded'\n\nimport { createFilesDevframe } from './devframe'\nimport { FILES_DEVTOOLS_PATH } from './snapshot'\n\nexport const setupNuxtV4Devtools = (\n nuxt: Nuxt,\n options: { write: boolean; maxUploadSize: number; tokenSecret: string },\n): void => {\n onDevtoolsReady(async (context) => {\n await createEmbedded(\n createFilesDevframe({\n ...options,\n notifyFailure: (message) => context.messages.add(message),\n }),\n { ctx: context },\n )\n context.docks.register({\n id: 'nuxt-files-sdk',\n title: 'Files',\n icon: 'ph:files-duotone',\n type: 'iframe',\n url: FILES_DEVTOOLS_PATH,\n groupId: NUXT_DEVTOOLS_GROUP_ID,\n })\n\n const broadcast = (method: 'refresh' | 'copy-diagnostics') =>\n context.scope('nuxt-files-sdk').rpc.broadcast({ method, args: [], optional: true, event: true })\n context.commands.register({\n id: 'nuxt-files-sdk:open',\n title: 'Files: Open',\n icon: 'ph:files-duotone',\n category: 'tools',\n handler: () => context.docks.activate('nuxt-files-sdk'),\n })\n context.commands.register({\n id: 'nuxt-files-sdk:refresh',\n title: 'Files: Refresh',\n icon: 'ph:arrow-clockwise-duotone',\n category: 'tools',\n handler: () => broadcast('refresh'),\n })\n context.commands.register({\n id: 'nuxt-files-sdk:copy-diagnostics',\n title: 'Files: Copy Diagnostics',\n icon: 'ph:copy-duotone',\n category: 'tools',\n handler: () => broadcast('copy-diagnostics'),\n })\n }, nuxt)\n}\n"],"mappings":";;;;;AAOA,MAAa,uBACT,MACA,YACO;CACP,gBAAgB,OAAO,YAAY;EAC/B,MAAM,eACF,oBAAoB;GAChB,GAAG;GACH,gBAAgB,YAAY,QAAQ,SAAS,IAAI,OAAO;EAC5D,CAAC,GACD,EAAE,KAAK,QAAQ,CACnB;EACA,QAAQ,MAAM,SAAS;GACnB,IAAI;GACJ,OAAO;GACP,MAAM;GACN,MAAM;GACN,KAAK;GACL,SAAS;EACb,CAAC;EAED,MAAM,aAAa,WACf,QAAQ,MAAM,gBAAgB,CAAC,CAAC,IAAI,UAAU;GAAE;GAAQ,MAAM,CAAC;GAAG,UAAU;GAAM,OAAO;EAAK,CAAC;EACnG,QAAQ,SAAS,SAAS;GACtB,IAAI;GACJ,OAAO;GACP,MAAM;GACN,UAAU;GACV,eAAe,QAAQ,MAAM,SAAS,gBAAgB;EAC1D,CAAC;EACD,QAAQ,SAAS,SAAS;GACtB,IAAI;GACJ,OAAO;GACP,MAAM;GACN,UAAU;GACV,eAAe,UAAU,SAAS;EACtC,CAAC;EACD,QAAQ,SAAS,SAAS;GACtB,IAAI;GACJ,OAAO;GACP,MAAM;GACN,UAAU;GACV,eAAe,UAAU,kBAAkB;EAC/C,CAAC;CACL,GAAG,IAAI;AACX"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","names":[],"sources":["../../src/devtools/snapshot.ts"],"sourcesContent":["import { inspectFiles } from '../runtime/internal'\nimport { authorizeFilesDevtoolsRequest } from './auth'\nimport { createFilesDevtoolsDiagnostic, type FilesDevtoolsDiagnostic } from './diagnostics'\n\nexport interface FilesDevtoolsSnapshot {\n storages: Array<{\n name?: string\n adapter: string\n plugins: string[]\n initialized: boolean\n }>\n diagnostics: FilesDevtoolsDiagnostic[]\n}\n\nexport const FILES_DEVTOOLS_PATH = '/__nuxt-files-sdk/'\nexport const FILES_SNAPSHOT_PATH = `${FILES_DEVTOOLS_PATH}snapshot`\nexport const FILES_GATEWAY_PATH = `${FILES_DEVTOOLS_PATH}files`\nexport const FILES_TOKEN_PATH = `${FILES_DEVTOOLS_PATH}token`\nexport const FILES_DEVTOOLS_MAX_UPLOAD_SIZE = 10 * 1024 * 1024\n\nexport default async (event: { node: { req: { headers: Headers } } }, secret: string) => {\n if (!(await authorizeFilesDevtoolsRequest(event.node.req, secret))) {\n return new Response(null, { status: 401 })\n }\n const snapshot = inspectFiles()\n return Response.json({\n ...snapshot,\n diagnostics: snapshot.diagnostics.map(({ code, name, adapter }) =>\n createFilesDevtoolsDiagnostic(\n code,\n adapter\n ? `${name === undefined ? 'The single storage' : `Storage \"${name}\"`} (${adapter}) could not be initialized.`\n : undefined,\n ),\n ),\n })\n}\n"],"mappings":";;;;AAcA,MAAa,sBAAsB;AACnC,MAAa,sBAAsB,GAAG,oBAAoB;AAC1D,MAAa,qBAAqB,GAAG,oBAAoB;AACzD,MAAa,mBAAmB,GAAG,oBAAoB;AACvD,MAAa,iCAAiC;AAE9C,IAAA,mBAAe,OAAO,OAAgD,WAAmB;CACrF,IAAI,CAAE,MAAM,8BAA8B,MAAM,KAAK,KAAK,MAAM,GAC5D,OAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI,CAAC;CAE7C,MAAM,WAAW,aAAa;CAC9B,OAAO,SAAS,KAAK;EACjB,GAAG;EACH,aAAa,SAAS,YAAY,KAAK,EAAE,MAAM,MAAM,cACjD,8BACI,MACA,UACM,GAAG,SAAS,KAAA,IAAY,uBAAuB,YAAY,KAAK,GAAG,IAAI,QAAQ,+BAC/E,KAAA,CACV,CACJ;CACJ,CAAC;AACL"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","names":[],"sources":["../../src/devtools/token.ts"],"sourcesContent":["import { createFilesDevtoolsToken } from './auth'\n\nexport default async (\n event: {\n node: { req: { headers: { get?: (name: string) => string | null | undefined; [key: string]: unknown } } }\n },\n secret: string,\n authorize: (token: string) => Promise<void>,\n) => {\n const headers = event.node.req.headers\n const received = headers.get?.('x-nuxt-devtools-token') ?? headers['x-nuxt-devtools-token']\n if (typeof received !== 'string' || !received) return new Response(null, { status: 401 })\n try {\n await authorize(received)\n } catch {\n return new Response(null, { status: 401 })\n }\n return Response.json(await createFilesDevtoolsToken(secret), { headers: { 'cache-control': 'no-store' } })\n}\n"],"mappings":";;AAEA,IAAA,gBAAe,OACX,OAGA,QACA,cACC;CACD,MAAM,UAAU,MAAM,KAAK,IAAI;CAC/B,MAAM,WAAW,QAAQ,MAAM,uBAAuB,KAAK,QAAQ;CACnE,IAAI,OAAO,aAAa,YAAY,CAAC,UAAU,OAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI,CAAC;CACxF,IAAI;EACA,MAAM,UAAU,QAAQ;CAC5B,QAAQ;EACJ,OAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI,CAAC;CAC7C;CACA,OAAO,SAAS,KAAK,MAAM,yBAAyB,MAAM,GAAG,EAAE,SAAS,EAAE,iBAAiB,WAAW,EAAE,CAAC;AAC7G"}
|