@nuxt/devtools 1.0.2 → 1.0.4
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/README.md +2 -1
- package/dist/chunks/module-main.mjs +145 -103
- package/dist/chunks/vscode.mjs +5 -5
- package/dist/client/200.html +35 -35
- package/dist/client/404.html +35 -35
- package/dist/client/_nuxt/{CodeDiff.vue.495a2700.js → CodeDiff.vue.d8722166.js} +2 -2
- package/dist/client/_nuxt/{ComposableItem.vue.09c56ec4.js → ComposableItem.vue.a0062ecc.js} +1 -1
- package/dist/client/_nuxt/{DataSchemaButton.vue.058ff215.js → DataSchemaButton.vue.baec9a00.js} +1 -1
- package/dist/client/_nuxt/{DataSchemaDrawer.d62bbda3.js → DataSchemaDrawer.b2c7e5f0.js} +3 -3
- package/dist/client/_nuxt/{DurationDisplay.vue.e7d2f90b.js → DurationDisplay.vue.75bf04c2.js} +1 -1
- package/dist/client/_nuxt/{FilepathItem.vue.feb8a13c.js → FilepathItem.vue.7a091e26.js} +1 -1
- package/dist/client/_nuxt/{HelpFab.vue.70bfd8f0.js → HelpFab.vue.07720a44.js} +1 -1
- package/dist/client/_nuxt/LaunchPage.vue.51fc4c47.js +1 -0
- package/dist/client/_nuxt/NBadge.ce033599.js +1 -0
- package/dist/client/_nuxt/NCheckbox.vue.0f5a8440.js +1 -0
- package/dist/client/_nuxt/{NCodeBlock.vue.c114d969.js → NCodeBlock.vue.4697f7e4.js} +2 -2
- package/dist/client/_nuxt/{NDrawer.vue.4bcebe5d.js → NDrawer.vue.4b4bd813.js} +1 -1
- package/dist/client/_nuxt/NDropdown.vue.ddbb4404.js +1 -0
- package/dist/client/_nuxt/{NIconTitle.vue.dcd70230.js → NIconTitle.vue.8be5866f.js} +1 -1
- package/dist/client/_nuxt/{NLink.vue.353afc82.js → NLink.vue.99516332.js} +1 -1
- package/dist/client/_nuxt/{NMarkdown.vue.4e215b1f.js → NMarkdown.vue.d386a844.js} +1 -1
- package/dist/client/_nuxt/{NNavbar.vue.29f03776.js → NNavbar.vue.a82b9c01.js} +1 -1
- package/dist/client/_nuxt/NSectionBlock.1609c1ec.js +1 -0
- package/dist/client/_nuxt/NSelect.vue.7cf27fe7.js +1 -0
- package/dist/client/_nuxt/NSelectTabs.vue.8f4924f6.js +1 -0
- package/dist/client/_nuxt/NSwitch.vue.6fd7c26d.js +1 -0
- package/dist/client/_nuxt/StacktraceList.vue.a2e4171d.js +1 -0
- package/dist/client/_nuxt/StateEditor.vue.777f604e.js +1 -0
- package/dist/client/_nuxt/{__blank.961dc152.js → __blank.2e21a1a7.js} +1 -1
- package/dist/client/_nuxt/analyze-build.371a5734.js +1 -0
- package/dist/client/_nuxt/assets.439f186c.js +16 -0
- package/dist/client/_nuxt/builds/latest.json +1 -1
- package/dist/client/_nuxt/builds/meta/f35e8543-749e-4b65-87f9-0ac9fa3dd3ab.json +1 -0
- package/dist/client/_nuxt/{client.4841a079.js → client.bd4053bc.js} +1 -1
- package/dist/client/_nuxt/{components.3821affe.js → components.ccf2fad3.js} +5 -5
- package/dist/client/_nuxt/{custom-_name_.45e0e481.js → custom-_name_.b0891a20.js} +1 -1
- package/dist/client/_nuxt/{default.551695d6.js → default.97700872.js} +1 -1
- package/dist/client/_nuxt/{entry.aa8c94e8.css → entry.2732f55b.css} +1 -1
- package/dist/client/_nuxt/entry.35c58391.js +27 -0
- package/dist/client/_nuxt/{error-404.c4b39504.js → error-404.576aef72.js} +1 -1
- package/dist/client/_nuxt/{error-500.4029de92.js → error-500.61e43a5a.js} +1 -1
- package/dist/client/_nuxt/error.82c66fee.js +9 -0
- package/dist/client/_nuxt/full.72d92407.js +1 -0
- package/dist/client/_nuxt/{hooks.ad652487.js → hooks.889b91ae.js} +1 -1
- package/dist/client/_nuxt/{imports.779c7207.js → imports.8a1177ed.js} +1 -1
- package/dist/client/_nuxt/{index.07112662.js → index.0214b01d.js} +1 -1
- package/dist/client/_nuxt/{index.8874e47c.js → index.11f08f78.js} +1 -1
- package/dist/client/_nuxt/{json-editor-vue.b1851782.js → json-editor-vue.24ac60a9.js} +1 -1
- package/dist/client/_nuxt/modules.0ea1264b.js +2 -0
- package/dist/client/_nuxt/{none.48f4e2a5.js → none.9d86a5c5.js} +1 -1
- package/dist/client/_nuxt/{open-graph.545307be.js → open-graph.ce924f19.js} +2 -2
- package/dist/client/_nuxt/overview.811117a6.js +1 -0
- package/dist/client/_nuxt/{pages.065c5174.js → pages.f870c402.js} +1 -1
- package/dist/client/_nuxt/{payload.f3ad6ba9.js → payload.ae9699f5.js} +1 -1
- package/dist/client/_nuxt/{plugins.97361fa6.js → plugins.a8eafa2c.js} +1 -1
- package/dist/client/_nuxt/{runtime-configs.04157e18.js → runtime-configs.344cb73a.js} +1 -1
- package/dist/client/_nuxt/server-routes.d5948352.js +9 -0
- package/dist/client/_nuxt/settings.a887e1c0.js +1 -0
- package/dist/client/_nuxt/{state-components.9496e3b2.js → state-components.295d8108.js} +1 -1
- package/dist/client/_nuxt/state-modules.a1a00874.js +1 -0
- package/dist/client/_nuxt/storage-options.835c9b2d.js +1 -0
- package/dist/client/_nuxt/storage.d4c1d127.js +1 -0
- package/dist/client/_nuxt/{terminals.ad730beb.js → terminals.3c6722c6.js} +1 -1
- package/dist/client/_nuxt/timeline.cebcddc5.js +29 -0
- package/dist/client/_nuxt/unocss-runtime.eab56c8d.js +2 -0
- package/dist/client/_nuxt/virtual-files.33dacdaf.js +1 -0
- package/dist/client/index.html +35 -35
- package/dist/module.json +1 -1
- package/dist/module.mjs +1 -1
- package/dist/runtime/plugins/devtools.client.mjs +2 -2
- package/dist/runtime/plugins/view/FrameBox.vue +1 -1
- package/dist/runtime/plugins/view/Main.vue +2 -0
- package/dist/runtime/plugins/view/client.mjs +3 -2
- package/dist/shared/devtools.371fa152.mjs +111 -0
- package/package.json +25 -25
- package/dist/client/__blank/index.html +0 -42
- package/dist/client/_nuxt/LaunchPage.vue.68d99ad2.js +0 -1
- package/dist/client/_nuxt/NBadge.b912de36.js +0 -1
- package/dist/client/_nuxt/NCheckbox.vue.a65a9466.js +0 -1
- package/dist/client/_nuxt/NDropdown.vue.32f13066.js +0 -1
- package/dist/client/_nuxt/NSectionBlock.56f7fa97.js +0 -1
- package/dist/client/_nuxt/NSelect.vue.d4b5d548.js +0 -1
- package/dist/client/_nuxt/NSelectTabs.vue.f4ae464e.js +0 -1
- package/dist/client/_nuxt/NSwitch.vue.95382b67.js +0 -1
- package/dist/client/_nuxt/NTip.vue.fbfe6de9.js +0 -1
- package/dist/client/_nuxt/StateEditor.vue.9d7dcb3f.js +0 -1
- package/dist/client/_nuxt/analyze-build.29ca822b.js +0 -1
- package/dist/client/_nuxt/assets.5182b2b7.js +0 -16
- package/dist/client/_nuxt/builds/meta/9c2bc90a-5134-40c2-becb-286bd0304a77.json +0 -1
- package/dist/client/_nuxt/entry.5d59ff5c.js +0 -27
- package/dist/client/_nuxt/full.b09bb7d2.js +0 -1
- package/dist/client/_nuxt/modules.53d23733.js +0 -2
- package/dist/client/_nuxt/overview.60692331.js +0 -1
- package/dist/client/_nuxt/server-routes.631067b9.js +0 -9
- package/dist/client/_nuxt/settings.72bdb2b5.js +0 -1
- package/dist/client/_nuxt/state-modules.3599ee72.js +0 -1
- package/dist/client/_nuxt/storage-options.5fca38da.js +0 -1
- package/dist/client/_nuxt/storage.be53a14a.js +0 -1
- package/dist/client/_nuxt/timeline.b8cc1d67.js +0 -29
- package/dist/client/_nuxt/unocss-runtime.55c74b5c.js +0 -2
- package/dist/client/_nuxt/virtual-files.7fd05201.js +0 -1
- package/dist/client/modules/analyze-build/index.html +0 -42
- package/dist/client/modules/assets/index.html +0 -42
- package/dist/client/modules/components/index.html +0 -42
- package/dist/client/modules/hooks/index.html +0 -42
- package/dist/client/modules/imports/index.html +0 -42
- package/dist/client/modules/modules/index.html +0 -42
- package/dist/client/modules/open-graph/index.html +0 -42
- package/dist/client/modules/overview/index.html +0 -42
- package/dist/client/modules/pages/index.html +0 -42
- package/dist/client/modules/payload/index.html +0 -42
- package/dist/client/modules/plugins/index.html +0 -42
- package/dist/client/modules/runtime-configs/index.html +0 -42
- package/dist/client/modules/server-routes/index.html +0 -42
- package/dist/client/modules/storage/index.html +0 -42
- package/dist/client/modules/terminals/index.html +0 -42
- package/dist/client/modules/timeline/index.html +0 -42
- package/dist/client/modules/virtual-files/index.html +0 -42
- package/dist/client/settings/index.html +0 -42
- package/dist/shared/devtools.ca660ec5.mjs +0 -114
package/README.md
CHANGED
|
@@ -16,6 +16,7 @@ Unleash Nuxt Developer Experience.
|
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
18
|
<p>
|
|
19
|
+
<a href="https://nuxt.com/blog/nuxt-devtools-v1-0">👋 Introduction</a> |
|
|
19
20
|
<a href="https://github.com/nuxt/devtools/discussions/29">💡 Ideas & Suggestions</a> |
|
|
20
21
|
<a href="https://github.com/nuxt/devtools/discussions/31">🗺️ Project Roadmap</a> |
|
|
21
22
|
<a href="https://devtools.nuxt.com/">📚 Documentation</a>
|
|
@@ -77,7 +78,7 @@ For all options available, please refer to TSDocs in your IDE, or the [type defi
|
|
|
77
78
|
|
|
78
79
|
## Features
|
|
79
80
|
|
|
80
|
-
Read the [**Announcement Blog Post 🎊**](https://nuxt.com/blog/
|
|
81
|
+
Read the [**Announcement Blog Post 🎊**](https://nuxt.com/blog/nuxt-devtools-v1-0) for why we built Nuxt DevTools and what it can do!
|
|
81
82
|
|
|
82
83
|
## Module Authors
|
|
83
84
|
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import fs, { existsSync } from 'node:fs';
|
|
1
|
+
import fs$1, { existsSync } from 'node:fs';
|
|
2
2
|
import os, { homedir } from 'node:os';
|
|
3
|
-
import
|
|
3
|
+
import fs from 'node:fs/promises';
|
|
4
|
+
import { join, resolve, dirname as dirname$1 } from 'pathe';
|
|
4
5
|
import { logger, useNuxt, addPlugin, addTemplate, addVitePlugin } from '@nuxt/kit';
|
|
5
6
|
import { searchForWorkspaceRoot } from 'vite';
|
|
6
7
|
import sirv from 'sirv';
|
|
7
8
|
import { colors } from 'consola/utils';
|
|
8
9
|
import { createBirpcGroup } from 'birpc';
|
|
9
10
|
import { stringify, parse as parse$1 } from 'flatted';
|
|
10
|
-
import { d as defaultAllowedExtensions,
|
|
11
|
-
import {
|
|
12
|
-
import fsp from 'node:fs/promises';
|
|
11
|
+
import { d as defaultAllowedExtensions, a as defaultTabOptions, W as WS_EVENT_NAME } from '../shared/devtools.371fa152.mjs';
|
|
12
|
+
import { dirname, join as join$1, parse } from 'node:path';
|
|
13
13
|
import { randomStr } from '@antfu/utils';
|
|
14
|
+
import { hash } from 'ohash';
|
|
14
15
|
import { imageMeta } from 'image-meta';
|
|
15
16
|
import { debounce } from 'perfect-debounce';
|
|
16
17
|
import fg from 'fast-glob';
|
|
@@ -27,24 +28,80 @@ import { resolveBuiltinPresets } from 'unimport';
|
|
|
27
28
|
import destr from 'destr';
|
|
28
29
|
import { snakeCase } from 'scule';
|
|
29
30
|
import Git from 'simple-git';
|
|
30
|
-
import { hash } from 'ohash';
|
|
31
31
|
import { runtimeDir, clientDir, packageDir, isGlobalInstall } from '../dirs.mjs';
|
|
32
32
|
|
|
33
|
-
const version = "1.0.
|
|
33
|
+
const version = "1.0.4";
|
|
34
|
+
|
|
35
|
+
function getHomeDir() {
|
|
36
|
+
return process.env.XDG_CONFIG_HOME || homedir();
|
|
37
|
+
}
|
|
38
|
+
async function readLocalOptions(defaults, options) {
|
|
39
|
+
const { filePath } = getOptionsFilepath(options);
|
|
40
|
+
if (existsSync(filePath)) {
|
|
41
|
+
try {
|
|
42
|
+
const options2 = {
|
|
43
|
+
...defaults,
|
|
44
|
+
...JSON.parse(await fs.readFile(filePath, "utf-8")).settings || {}
|
|
45
|
+
};
|
|
46
|
+
return options2;
|
|
47
|
+
} catch (e) {
|
|
48
|
+
console.error(`[DevTools] failed to parse local options file: ${filePath}, fallback to defaults`);
|
|
49
|
+
console.error(e);
|
|
50
|
+
return { ...defaults };
|
|
51
|
+
}
|
|
52
|
+
} else {
|
|
53
|
+
return { ...defaults };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function getOptionsFilepath(options) {
|
|
57
|
+
let hashedKey;
|
|
58
|
+
if (options.key)
|
|
59
|
+
hashedKey = hash(`${options.root}:${options.key}`);
|
|
60
|
+
else
|
|
61
|
+
hashedKey = hash(options.root);
|
|
62
|
+
const home = getHomeDir();
|
|
63
|
+
const filePath = join(home, ".nuxt/devtools", `${hashedKey}.json`);
|
|
64
|
+
return {
|
|
65
|
+
filePath,
|
|
66
|
+
hashedKey
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async function clearLocalOptions(options) {
|
|
70
|
+
const { filePath } = getOptionsFilepath(options);
|
|
71
|
+
if (existsSync(filePath))
|
|
72
|
+
await fs.unlink(filePath);
|
|
73
|
+
}
|
|
74
|
+
async function writeLocalOptions(settings, options) {
|
|
75
|
+
const { filePath, hashedKey } = getOptionsFilepath(options);
|
|
76
|
+
await fs.mkdir(dirname(filePath), { recursive: true });
|
|
77
|
+
await fs.writeFile(
|
|
78
|
+
filePath,
|
|
79
|
+
JSON.stringify(
|
|
80
|
+
{
|
|
81
|
+
root: options.root,
|
|
82
|
+
hash: hashedKey,
|
|
83
|
+
settings
|
|
84
|
+
},
|
|
85
|
+
null,
|
|
86
|
+
2
|
|
87
|
+
),
|
|
88
|
+
"utf-8"
|
|
89
|
+
);
|
|
90
|
+
}
|
|
34
91
|
|
|
35
92
|
let token;
|
|
36
93
|
async function getDevAuthToken() {
|
|
37
94
|
if (token)
|
|
38
95
|
return token;
|
|
39
|
-
const home =
|
|
40
|
-
const dir = join(home, ".nuxt/devtools");
|
|
41
|
-
const filepath = join(dir, "dev-auth-token.txt");
|
|
96
|
+
const home = getHomeDir();
|
|
97
|
+
const dir = join$1(home, ".nuxt/devtools");
|
|
98
|
+
const filepath = join$1(dir, "dev-auth-token.txt");
|
|
42
99
|
if (existsSync(filepath))
|
|
43
|
-
token = (await
|
|
100
|
+
token = (await fs.readFile(filepath, "utf-8")).trim();
|
|
44
101
|
if (!token)
|
|
45
102
|
token = randomStr(16);
|
|
46
|
-
await
|
|
47
|
-
await
|
|
103
|
+
await fs.mkdir(dir, { recursive: true });
|
|
104
|
+
await fs.writeFile(filepath, token, "utf-8");
|
|
48
105
|
return token;
|
|
49
106
|
}
|
|
50
107
|
|
|
@@ -150,10 +207,10 @@ function setupAssetsRPC({ nuxt, ensureDevAuthToken, refresh, options }) {
|
|
|
150
207
|
}
|
|
151
208
|
cache = await Promise.all(files.map(async (path) => {
|
|
152
209
|
const filePath = resolve(publicDir, path);
|
|
153
|
-
const stat = await
|
|
210
|
+
const stat = await fs.lstat(filePath);
|
|
154
211
|
return {
|
|
155
212
|
path,
|
|
156
|
-
publicPath: join
|
|
213
|
+
publicPath: join(baseURL, path),
|
|
157
214
|
filePath,
|
|
158
215
|
type: guessType(path),
|
|
159
216
|
size: stat.size,
|
|
@@ -166,11 +223,12 @@ function setupAssetsRPC({ nuxt, ensureDevAuthToken, refresh, options }) {
|
|
|
166
223
|
async getStaticAssets() {
|
|
167
224
|
return await scan();
|
|
168
225
|
},
|
|
169
|
-
async getImageMeta(filepath) {
|
|
226
|
+
async getImageMeta(token, filepath) {
|
|
227
|
+
await ensureDevAuthToken(token);
|
|
170
228
|
if (_imageMetaCache.has(filepath))
|
|
171
229
|
return _imageMetaCache.get(filepath);
|
|
172
230
|
try {
|
|
173
|
-
const meta = imageMeta(await
|
|
231
|
+
const meta = imageMeta(await fs.readFile(filepath));
|
|
174
232
|
_imageMetaCache.set(filepath, meta);
|
|
175
233
|
return meta;
|
|
176
234
|
} catch (e) {
|
|
@@ -179,9 +237,10 @@ function setupAssetsRPC({ nuxt, ensureDevAuthToken, refresh, options }) {
|
|
|
179
237
|
return void 0;
|
|
180
238
|
}
|
|
181
239
|
},
|
|
182
|
-
async getTextAssetContent(filepath, limit = 300) {
|
|
240
|
+
async getTextAssetContent(token, filepath, limit = 300) {
|
|
241
|
+
await ensureDevAuthToken(token);
|
|
183
242
|
try {
|
|
184
|
-
const content = await
|
|
243
|
+
const content = await fs.readFile(filepath, "utf-8");
|
|
185
244
|
return content.slice(0, limit);
|
|
186
245
|
} catch (e) {
|
|
187
246
|
console.error(e);
|
|
@@ -202,16 +261,16 @@ You can configure it in Nuxt config at \`devtools.assets.uploadExtensions\`.`);
|
|
|
202
261
|
}
|
|
203
262
|
if (!override) {
|
|
204
263
|
try {
|
|
205
|
-
await
|
|
264
|
+
await fs.stat(finalPath);
|
|
206
265
|
const base = finalPath.slice(0, finalPath.length - ext.length - 1);
|
|
207
266
|
let i = 1;
|
|
208
|
-
while (await
|
|
267
|
+
while (await fs.access(`${base}-${i}.${ext}`).then(() => true).catch(() => false))
|
|
209
268
|
i++;
|
|
210
269
|
finalPath = `${base}-${i}.${ext}`;
|
|
211
270
|
} catch (err) {
|
|
212
271
|
}
|
|
213
272
|
}
|
|
214
|
-
await
|
|
273
|
+
await fs.writeFile(finalPath, content, {
|
|
215
274
|
encoding: encoding ?? "utf-8"
|
|
216
275
|
});
|
|
217
276
|
return finalPath;
|
|
@@ -220,14 +279,14 @@ You can configure it in Nuxt config at \`devtools.assets.uploadExtensions\`.`);
|
|
|
220
279
|
},
|
|
221
280
|
async deleteStaticAsset(token, path) {
|
|
222
281
|
await ensureDevAuthToken(token);
|
|
223
|
-
return await
|
|
282
|
+
return await fs.unlink(path);
|
|
224
283
|
},
|
|
225
284
|
async renameStaticAsset(token, oldPath, newPath) {
|
|
226
285
|
await ensureDevAuthToken(token);
|
|
227
286
|
const exist = cache?.find((asset) => asset.filePath === newPath);
|
|
228
287
|
if (exist)
|
|
229
288
|
throw new Error(`File ${newPath} already exists`);
|
|
230
|
-
return await
|
|
289
|
+
return await fs.rename(oldPath, newPath);
|
|
231
290
|
}
|
|
232
291
|
};
|
|
233
292
|
}
|
|
@@ -341,7 +400,7 @@ function setupNpmRPC({ nuxt, ensureDevAuthToken }) {
|
|
|
341
400
|
const filepath = nuxt.options._nuxtConfigFile;
|
|
342
401
|
let source = latestGenerated;
|
|
343
402
|
if (source == null)
|
|
344
|
-
source = await
|
|
403
|
+
source = await fs.readFile(filepath, "utf-8");
|
|
345
404
|
const generated = await magicastGuard(async () => {
|
|
346
405
|
const mod = parseModule(source, { sourceFileName: filepath });
|
|
347
406
|
addNuxtModule(mod, name);
|
|
@@ -371,7 +430,7 @@ function setupNpmRPC({ nuxt, ensureDevAuthToken }) {
|
|
|
371
430
|
}
|
|
372
431
|
if (installSet.size === 0) {
|
|
373
432
|
latestGenerated = null;
|
|
374
|
-
await
|
|
433
|
+
await fs.writeFile(filepath, generated, "utf-8");
|
|
375
434
|
}
|
|
376
435
|
}
|
|
377
436
|
return {
|
|
@@ -385,7 +444,7 @@ function setupNpmRPC({ nuxt, ensureDevAuthToken }) {
|
|
|
385
444
|
await ensureDevAuthToken(token);
|
|
386
445
|
const commands = await getNpmCommand("uninstall", name);
|
|
387
446
|
const filepath = nuxt.options._nuxtConfigFile;
|
|
388
|
-
const source = await
|
|
447
|
+
const source = await fs.readFile(filepath, "utf-8");
|
|
389
448
|
const generated = await magicastGuard(async () => {
|
|
390
449
|
const mod = parseModule(source, { sourceFileName: filepath });
|
|
391
450
|
const config = getDefaultExportOptions(mod);
|
|
@@ -417,7 +476,7 @@ function setupNpmRPC({ nuxt, ensureDevAuthToken }) {
|
|
|
417
476
|
console.error(result.stderr);
|
|
418
477
|
throw new Error(`Failed to uninstall module', process exited with ${code}`);
|
|
419
478
|
}
|
|
420
|
-
await
|
|
479
|
+
await fs.writeFile(filepath, generated, "utf-8");
|
|
421
480
|
}
|
|
422
481
|
return {
|
|
423
482
|
configOriginal: source,
|
|
@@ -513,7 +572,13 @@ function setupHooksDebug(hooks) {
|
|
|
513
572
|
return serverHooks;
|
|
514
573
|
}
|
|
515
574
|
|
|
516
|
-
function setupGeneralRPC({
|
|
575
|
+
function setupGeneralRPC({
|
|
576
|
+
nuxt,
|
|
577
|
+
options,
|
|
578
|
+
refresh,
|
|
579
|
+
ensureDevAuthToken,
|
|
580
|
+
openInEditorHooks
|
|
581
|
+
}) {
|
|
517
582
|
const components = [];
|
|
518
583
|
const imports = [];
|
|
519
584
|
const importPresets = [];
|
|
@@ -660,7 +725,8 @@ function setupGeneralRPC({ nuxt, options, refresh, openInEditorHooks }) {
|
|
|
660
725
|
return false;
|
|
661
726
|
}
|
|
662
727
|
},
|
|
663
|
-
restartNuxt(hard = true) {
|
|
728
|
+
async restartNuxt(token, hard = true) {
|
|
729
|
+
await ensureDevAuthToken(token);
|
|
664
730
|
logger.info("Restarting Nuxt...");
|
|
665
731
|
return nuxt.callHook("restart", { hard });
|
|
666
732
|
},
|
|
@@ -669,6 +735,7 @@ function setupGeneralRPC({ nuxt, options, refresh, openInEditorHooks }) {
|
|
|
669
735
|
return;
|
|
670
736
|
const token = await getDevAuthToken();
|
|
671
737
|
origin ||= `${nuxt.options.devServer.https ? "https" : "http"}://${nuxt.options.devServer.host === "::" ? "localhost" : nuxt.options.devServer.host || "localhost"}:${nuxt.options.devServer.port}`;
|
|
738
|
+
const ROUTE_AUTH = `${nuxt.options.app.baseURL || "/"}/__nuxt_devtools__/auth`.replace(/\/+/g, "/");
|
|
672
739
|
const message = [
|
|
673
740
|
`A browser is requesting permissions of ${colors.bold(colors.yellow("writing files and running commands"))} from the DevTools UI.`,
|
|
674
741
|
colors.bold(info),
|
|
@@ -709,18 +776,18 @@ const route = useRoute()
|
|
|
709
776
|
</template>
|
|
710
777
|
`;
|
|
711
778
|
async function enablePages(nuxt) {
|
|
712
|
-
const pathApp = join
|
|
713
|
-
const pathPageIndex = join
|
|
714
|
-
if (fs.existsSync(pathPageIndex)) {
|
|
779
|
+
const pathApp = join(nuxt.options.srcDir, "app.vue");
|
|
780
|
+
const pathPageIndex = join(nuxt.options.srcDir, "pages/index.vue");
|
|
781
|
+
if (fs$1.existsSync(pathPageIndex)) {
|
|
715
782
|
logger.warn("pages/index.vue already exists, skipping");
|
|
716
783
|
return;
|
|
717
784
|
}
|
|
718
|
-
let appContent = fs.existsSync(pathApp) ? await
|
|
719
|
-
await
|
|
720
|
-
await
|
|
785
|
+
let appContent = fs$1.existsSync(pathApp) ? await fs.readFile(pathApp, "utf-8") : void 0;
|
|
786
|
+
await fs.mkdir(dirname$1(pathPageIndex), { recursive: true });
|
|
787
|
+
await fs.writeFile(pathPageIndex, pagesIndexTemplate, "utf-8");
|
|
721
788
|
if (appContent && !appContent.includes("<NuxtPage")) {
|
|
722
789
|
appContent = appContent.replace("</template>", " <NuxtPage />\n</template>").replace(/<NuxtWelcome\s*\/>/, "");
|
|
723
|
-
await
|
|
790
|
+
await fs.writeFile(pathApp, appContent, "utf-8");
|
|
724
791
|
}
|
|
725
792
|
logger.success("Routing creation wizard completed");
|
|
726
793
|
}
|
|
@@ -879,7 +946,7 @@ function setupAnalyzeBuildRPC({ nuxt, refresh, ensureDevAuthToken }) {
|
|
|
879
946
|
let promise;
|
|
880
947
|
let initalized;
|
|
881
948
|
const processId = "devtools:analyze-build";
|
|
882
|
-
const analyzeDir = join
|
|
949
|
+
const analyzeDir = join(nuxt.options.rootDir, ".nuxt/analyze");
|
|
883
950
|
async function startAnalyzeBuild(name) {
|
|
884
951
|
if (promise)
|
|
885
952
|
throw new Error("Already building");
|
|
@@ -906,14 +973,14 @@ function setupAnalyzeBuildRPC({ nuxt, refresh, ensureDevAuthToken }) {
|
|
|
906
973
|
async function readBuildInfo() {
|
|
907
974
|
const files = await fg("*/meta.json", { cwd: analyzeDir, onlyFiles: true, absolute: true });
|
|
908
975
|
builds = await Promise.all(files.map(async (file) => {
|
|
909
|
-
const dir = dirname(file);
|
|
910
|
-
const json = JSON.parse(await
|
|
976
|
+
const dir = dirname$1(file);
|
|
977
|
+
const json = JSON.parse(await fs.readFile(file, "utf-8"));
|
|
911
978
|
return {
|
|
912
979
|
...json,
|
|
913
980
|
features: {
|
|
914
|
-
bundleClient: fs.existsSync(join
|
|
915
|
-
bundleNitro: fs.existsSync(join
|
|
916
|
-
viteInspect: fs.existsSync(join
|
|
981
|
+
bundleClient: fs$1.existsSync(join(dir, "client.html")),
|
|
982
|
+
bundleNitro: fs$1.existsSync(join(dir, "nitro.html")),
|
|
983
|
+
viteInspect: fs$1.existsSync(join(dir, ".vite-inspect"))
|
|
917
984
|
}
|
|
918
985
|
};
|
|
919
986
|
}));
|
|
@@ -946,10 +1013,10 @@ function setupAnalyzeBuildRPC({ nuxt, refresh, ensureDevAuthToken }) {
|
|
|
946
1013
|
async clearAnalyzeBuilds(token, names) {
|
|
947
1014
|
await ensureDevAuthToken(token);
|
|
948
1015
|
if (!names) {
|
|
949
|
-
await
|
|
1016
|
+
await fs.rm(analyzeDir, { recursive: true, force: true });
|
|
950
1017
|
} else {
|
|
951
1018
|
const targets = builds.filter((build) => names.includes(build.name));
|
|
952
|
-
await Promise.all(targets.map((target) =>
|
|
1019
|
+
await Promise.all(targets.map((target) => fs.rm(join(analyzeDir, target.slug), { recursive: true, force: true })));
|
|
953
1020
|
}
|
|
954
1021
|
initalized = readBuildInfo();
|
|
955
1022
|
refresh("getAnalyzeBuildInfo");
|
|
@@ -962,53 +1029,6 @@ function setupAnalyzeBuildRPC({ nuxt, refresh, ensureDevAuthToken }) {
|
|
|
962
1029
|
};
|
|
963
1030
|
}
|
|
964
1031
|
|
|
965
|
-
async function readLocalOptions(defaults, options) {
|
|
966
|
-
const { filePath } = getOptionsFilepath(options);
|
|
967
|
-
if (existsSync(filePath)) {
|
|
968
|
-
const options2 = {
|
|
969
|
-
...defaults,
|
|
970
|
-
...JSON.parse(await fsp.readFile(filePath, "utf-8")).settings || {}
|
|
971
|
-
};
|
|
972
|
-
return options2;
|
|
973
|
-
} else {
|
|
974
|
-
return { ...defaults };
|
|
975
|
-
}
|
|
976
|
-
}
|
|
977
|
-
function getOptionsFilepath(options) {
|
|
978
|
-
let hashedKey;
|
|
979
|
-
if (options.key)
|
|
980
|
-
hashedKey = hash(`${options.root}:${options.key}`);
|
|
981
|
-
else
|
|
982
|
-
hashedKey = hash(options.root);
|
|
983
|
-
const filePath = join$1(homedir(), ".nuxt/devtools", `${hashedKey}.json`);
|
|
984
|
-
return {
|
|
985
|
-
filePath,
|
|
986
|
-
hashedKey
|
|
987
|
-
};
|
|
988
|
-
}
|
|
989
|
-
async function clearLocalOptions(options) {
|
|
990
|
-
const { filePath } = getOptionsFilepath(options);
|
|
991
|
-
if (existsSync(filePath))
|
|
992
|
-
await fsp.unlink(filePath);
|
|
993
|
-
}
|
|
994
|
-
async function writeLocalOptions(settings, options) {
|
|
995
|
-
const { filePath, hashedKey } = getOptionsFilepath(options);
|
|
996
|
-
await fsp.mkdir(dirname$1(filePath), { recursive: true });
|
|
997
|
-
await fsp.writeFile(
|
|
998
|
-
filePath,
|
|
999
|
-
JSON.stringify(
|
|
1000
|
-
{
|
|
1001
|
-
root: options.root,
|
|
1002
|
-
hash: hashedKey,
|
|
1003
|
-
settings
|
|
1004
|
-
},
|
|
1005
|
-
null,
|
|
1006
|
-
2
|
|
1007
|
-
),
|
|
1008
|
-
"utf-8"
|
|
1009
|
-
);
|
|
1010
|
-
}
|
|
1011
|
-
|
|
1012
1032
|
let options;
|
|
1013
1033
|
function getOptions() {
|
|
1014
1034
|
return options;
|
|
@@ -1061,7 +1081,7 @@ function setupTimelineRPC({ nuxt }) {
|
|
|
1061
1081
|
return {
|
|
1062
1082
|
async enableTimeline(dry) {
|
|
1063
1083
|
const filepath = nuxt.options._nuxtConfigFile;
|
|
1064
|
-
const source = await
|
|
1084
|
+
const source = await fs.readFile(filepath, "utf-8");
|
|
1065
1085
|
const generated = await magicastGuard(async () => {
|
|
1066
1086
|
const mod = parseModule(source, { sourceFileName: filepath });
|
|
1067
1087
|
const options = getDefaultExportOptions(mod);
|
|
@@ -1071,7 +1091,7 @@ function setupTimelineRPC({ nuxt }) {
|
|
|
1071
1091
|
return mod.generate().code;
|
|
1072
1092
|
}, "\nYou can enable timeline manually by adding `devtools: { timeline: { enabled: true } }`");
|
|
1073
1093
|
if (!dry) {
|
|
1074
|
-
await
|
|
1094
|
+
await fs.writeFile(filepath, generated, "utf-8");
|
|
1075
1095
|
await nuxt.callHook("restart", { hard: true });
|
|
1076
1096
|
}
|
|
1077
1097
|
return [source, generated];
|
|
@@ -1257,11 +1277,11 @@ async function enableModule(options, nuxt) {
|
|
|
1257
1277
|
await nuxt.callHook("devtools:before");
|
|
1258
1278
|
nuxt.options.imports.collectMeta = true;
|
|
1259
1279
|
addPlugin({
|
|
1260
|
-
src: join
|
|
1280
|
+
src: join(runtimeDir, "plugins/devtools.client"),
|
|
1261
1281
|
mode: "client"
|
|
1262
1282
|
});
|
|
1263
1283
|
addPlugin({
|
|
1264
|
-
src: join
|
|
1284
|
+
src: join(runtimeDir, "plugins/devtools.server"),
|
|
1265
1285
|
mode: "server"
|
|
1266
1286
|
});
|
|
1267
1287
|
addTemplate({
|
|
@@ -1283,7 +1303,7 @@ async function enableModule(options, nuxt) {
|
|
|
1283
1303
|
nuxt.hook("nitro:config", (config) => {
|
|
1284
1304
|
config.externals = config.externals || {};
|
|
1285
1305
|
config.externals.inline = config.externals.inline || [];
|
|
1286
|
-
config.externals.inline.push(join
|
|
1306
|
+
config.externals.inline.push(join(runtimeDir, "nitro"));
|
|
1287
1307
|
config.virtual = config.virtual || {};
|
|
1288
1308
|
config.virtual["#nuxt-devtools-inline"] = `export const script = \`
|
|
1289
1309
|
if (!window.__NUXT_DEVTOOLS_TIME_METRIC__) {
|
|
@@ -1296,7 +1316,7 @@ if (!window.__NUXT_DEVTOOLS_TIME_METRIC__) {
|
|
|
1296
1316
|
window.__NUXT_DEVTOOLS_TIME_METRIC__.appInit = Date.now()
|
|
1297
1317
|
\``;
|
|
1298
1318
|
config.plugins = config.plugins || [];
|
|
1299
|
-
config.plugins.unshift(join
|
|
1319
|
+
config.plugins.unshift(join(runtimeDir, "nitro/inline"));
|
|
1300
1320
|
});
|
|
1301
1321
|
const {
|
|
1302
1322
|
vitePlugin,
|
|
@@ -1304,7 +1324,7 @@ window.__NUXT_DEVTOOLS_TIME_METRIC__.appInit = Date.now()
|
|
|
1304
1324
|
} = setupRPC(nuxt, options);
|
|
1305
1325
|
addVitePlugin(vitePlugin);
|
|
1306
1326
|
const clientDirExists = existsSync(clientDir);
|
|
1307
|
-
const analyzeDir = join
|
|
1327
|
+
const analyzeDir = join(nuxt.options.rootDir, ".nuxt/analyze");
|
|
1308
1328
|
nuxt.hook("vite:extendConfig", (config) => {
|
|
1309
1329
|
config.server ||= {};
|
|
1310
1330
|
config.server.fs ||= {};
|
|
@@ -1321,14 +1341,36 @@ window.__NUXT_DEVTOOLS_TIME_METRIC__.appInit = Date.now()
|
|
|
1321
1341
|
nuxt.hook("imports:extend", (imports) => {
|
|
1322
1342
|
imports.push({
|
|
1323
1343
|
name: "useNuxtDevTools",
|
|
1324
|
-
from: join
|
|
1344
|
+
from: join(runtimeDir, "use-nuxt-devtools")
|
|
1325
1345
|
});
|
|
1326
1346
|
});
|
|
1347
|
+
const ROUTE_PATH = `${nuxt.options.app.baseURL || "/"}/__nuxt_devtools__`.replace(/\/+/g, "/");
|
|
1348
|
+
const ROUTE_CLIENT = `${ROUTE_PATH}/client`;
|
|
1349
|
+
const ROUTE_AUTH = `${ROUTE_PATH}/auth`;
|
|
1350
|
+
const ROUTE_AUTH_VERIFY = `${ROUTE_PATH}/auth-verify`;
|
|
1351
|
+
const ROUTE_ANALYZE = `${ROUTE_PATH}/analyze`;
|
|
1327
1352
|
nuxt.hook("vite:serverCreated", (server) => {
|
|
1328
1353
|
server.middlewares.use(ROUTE_ANALYZE, sirv(analyzeDir, { single: false, dev: true }));
|
|
1329
|
-
if (clientDirExists)
|
|
1330
|
-
|
|
1331
|
-
|
|
1354
|
+
if (clientDirExists) {
|
|
1355
|
+
const indexHtmlPath = join(clientDir, "index.html");
|
|
1356
|
+
const indexContent = fs.readFile(indexHtmlPath, "utf-8");
|
|
1357
|
+
const handleStatic = sirv(clientDir, {
|
|
1358
|
+
dev: true,
|
|
1359
|
+
single: false
|
|
1360
|
+
});
|
|
1361
|
+
const handleIndex = async (res) => {
|
|
1362
|
+
res.setHeader("Content-Type", "text/html");
|
|
1363
|
+
res.statusCode = 200;
|
|
1364
|
+
res.write((await indexContent).replace(/\/__NUXT_DEVTOOLS_BASE__\//g, `${ROUTE_CLIENT}/`));
|
|
1365
|
+
res.end();
|
|
1366
|
+
};
|
|
1367
|
+
server.middlewares.use(ROUTE_CLIENT, (req, res) => {
|
|
1368
|
+
if (req.url === "/")
|
|
1369
|
+
return handleIndex(res);
|
|
1370
|
+
return handleStatic(req, res, () => handleIndex(res));
|
|
1371
|
+
});
|
|
1372
|
+
}
|
|
1373
|
+
server.middlewares.use(ROUTE_AUTH, sirv(join(runtimeDir, "auth"), { single: true, dev: true }));
|
|
1332
1374
|
server.middlewares.use(ROUTE_AUTH_VERIFY, async (req, res) => {
|
|
1333
1375
|
const search = req.url?.split("?")[1];
|
|
1334
1376
|
if (!search) {
|
package/dist/chunks/vscode.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { hostname } from 'node:os';
|
|
2
2
|
import { resolve } from 'node:path';
|
|
3
|
-
import
|
|
3
|
+
import fs from 'node:fs/promises';
|
|
4
4
|
import { existsSync } from 'node:fs';
|
|
5
5
|
import { logger } from '@nuxt/kit';
|
|
6
6
|
import { execa } from 'execa';
|
|
@@ -14,11 +14,12 @@ import 'sirv';
|
|
|
14
14
|
import 'consola/utils';
|
|
15
15
|
import 'birpc';
|
|
16
16
|
import 'flatted';
|
|
17
|
-
import '../shared/devtools.
|
|
17
|
+
import '../shared/devtools.371fa152.mjs';
|
|
18
18
|
import '../dirs.mjs';
|
|
19
19
|
import 'node:url';
|
|
20
20
|
import 'is-installed-globally';
|
|
21
21
|
import '@antfu/utils';
|
|
22
|
+
import 'ohash';
|
|
22
23
|
import 'image-meta';
|
|
23
24
|
import 'perfect-debounce';
|
|
24
25
|
import 'fast-glob';
|
|
@@ -33,7 +34,6 @@ import 'unimport';
|
|
|
33
34
|
import 'destr';
|
|
34
35
|
import 'scule';
|
|
35
36
|
import 'simple-git';
|
|
36
|
-
import 'ohash';
|
|
37
37
|
|
|
38
38
|
async function setup({ nuxt, options, openInEditorHooks, rpc }) {
|
|
39
39
|
const installed = !!await which("code-server").catch(() => null);
|
|
@@ -50,7 +50,7 @@ async function setup({ nuxt, options, openInEditorHooks, rpc }) {
|
|
|
50
50
|
if (!existsSync(vscodeServerControllerFile))
|
|
51
51
|
return false;
|
|
52
52
|
try {
|
|
53
|
-
const { port: port2 } = JSON.parse(await
|
|
53
|
+
const { port: port2 } = JSON.parse(await fs.readFile(vscodeServerControllerFile, "utf-8"));
|
|
54
54
|
const url2 = `http://localhost:${port2}/open?path=${encodeURIComponent(file)}`;
|
|
55
55
|
await fetch(url2);
|
|
56
56
|
rpc.broadcast.navigateTo("/modules/custom-builtin-vscode");
|
|
@@ -63,7 +63,7 @@ async function setup({ nuxt, options, openInEditorHooks, rpc }) {
|
|
|
63
63
|
});
|
|
64
64
|
async function startCodeServer() {
|
|
65
65
|
if (existsSync(vscodeServerControllerFile))
|
|
66
|
-
await
|
|
66
|
+
await fs.rm(vscodeServerControllerFile, { force: true });
|
|
67
67
|
if (vsOptions?.reuseExistingServer && !await checkPort(port)) {
|
|
68
68
|
loaded = true;
|
|
69
69
|
url = `http://localhost:${port}/?folder=${encodeURIComponent(root)}`;
|
package/dist/client/200.html
CHANGED
|
@@ -2,41 +2,41 @@
|
|
|
2
2
|
<html >
|
|
3
3
|
<head><meta charset="utf-8">
|
|
4
4
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
5
|
-
<link rel="stylesheet" href="/
|
|
6
|
-
<link rel="modulepreload" as="script" crossorigin href="/
|
|
7
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
8
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
9
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
10
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
11
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
12
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
13
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
14
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
15
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
16
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
17
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
18
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
19
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
20
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
21
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
22
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
23
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
24
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
25
|
-
<link rel="prefetch" as="style" href="/
|
|
26
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
27
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
28
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
29
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
30
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
31
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
32
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
33
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
34
|
-
<link rel="prefetch" as="style" href="/
|
|
35
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
36
|
-
<link rel="prefetch" as="style" href="/
|
|
37
|
-
<link rel="prefetch" as="script" crossorigin href="/
|
|
38
|
-
<script type="module" src="/
|
|
5
|
+
<link rel="stylesheet" href="/__NUXT_DEVTOOLS_BASE__/_nuxt/entry.2732f55b.css">
|
|
6
|
+
<link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/entry.35c58391.js">
|
|
7
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/index.11f08f78.js">
|
|
8
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/onig.0c57a370.js">
|
|
9
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/vitesse-dark.ff0e7dcb.js">
|
|
10
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/vitesse-light.c6996724.js">
|
|
11
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/json.709f1c4d.js">
|
|
12
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/yaml.b29e536f.js">
|
|
13
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/css.f61fd02b.js">
|
|
14
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/javascript.b7d6d348.js">
|
|
15
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/typescript.24e7badf.js">
|
|
16
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/vue.7ad3b25a.js">
|
|
17
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/html.14085b69.js">
|
|
18
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/vue-html.88dda4a8.js">
|
|
19
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/diff.22e0b108.js">
|
|
20
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/shellscript.e25d1410.js">
|
|
21
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/default.97700872.js">
|
|
22
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/full.72d92407.js">
|
|
23
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/none.9d86a5c5.js">
|
|
24
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/nuxt-docs.100caa70.js">
|
|
25
|
+
<link rel="prefetch" as="style" href="/__NUXT_DEVTOOLS_BASE__/_nuxt/NCodeBlock.6994516c.css">
|
|
26
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/DataSchemaDrawer.b2c7e5f0.js">
|
|
27
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/NSelect.vue.7cf27fe7.js">
|
|
28
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/NSwitch.vue.6fd7c26d.js">
|
|
29
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/NDropdown.vue.ddbb4404.js">
|
|
30
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/NCodeBlock.vue.4697f7e4.js">
|
|
31
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/client.bd4053bc.js">
|
|
32
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/NDrawer.vue.4b4bd813.js">
|
|
33
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/unocss-runtime.eab56c8d.js">
|
|
34
|
+
<link rel="prefetch" as="style" href="/__NUXT_DEVTOOLS_BASE__/_nuxt/error-404.82ac0ec5.css">
|
|
35
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/error-404.576aef72.js">
|
|
36
|
+
<link rel="prefetch" as="style" href="/__NUXT_DEVTOOLS_BASE__/_nuxt/error-500.ff959f66.css">
|
|
37
|
+
<link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_BASE__/_nuxt/error-500.61e43a5a.js">
|
|
38
|
+
<script type="module" src="/__NUXT_DEVTOOLS_BASE__/_nuxt/entry.35c58391.js" crossorigin></script><script>"use strict";(()=>{const a=window,e=document.documentElement,m=["dark","light"],c=window&&window.localStorage&&window.localStorage.getItem&&window.localStorage.getItem("nuxt-color-mode")||"system";let n=c==="system"?d():c;const l=e.getAttribute("data-color-mode-forced");l&&(n=l),i(n),a["__NUXT_COLOR_MODE__"]={preference:c,value:n,getColorScheme:d,addColorScheme:i,removeColorScheme:f};function i(o){const t=""+o+"",s="";e.classList?e.classList.add(t):e.className+=" "+t,s&&e.setAttribute("data-"+s,o)}function f(o){const t=""+o+"",s="";e.classList?e.classList.remove(t):e.className=e.className.replace(new RegExp(t,"g"),""),s&&e.removeAttribute("data-"+s)}function r(o){return a.matchMedia("(prefers-color-scheme"+o+")")}function d(){if(a.matchMedia&&r("").media!=="not all"){for(const o of m)if(r(":"+o).matches)return o}return"light"}})();
|
|
39
39
|
</script></head>
|
|
40
40
|
<body ><div id="__nuxt"></div><script type="application/json" id="__NUXT_DATA__" data-ssr="false">[{"_errors":1,"serverRendered":2,"data":3,"state":4},{},false,{},{}]</script>
|
|
41
|
-
<script>window.__NUXT__={};window.__NUXT__.config={public:{fixture4:"public runtime config from nuxt.config.ts"},app:{baseURL:"/
|
|
41
|
+
<script>window.__NUXT__={};window.__NUXT__.config={public:{fixture4:"public runtime config from nuxt.config.ts"},app:{baseURL:"/__NUXT_DEVTOOLS_BASE__/",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script></body>
|
|
42
42
|
</html>
|