vorma 0.83.0 → 0.85.0-pre.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/internal/framework/_typescript/client/src/client.ts +646 -422
- package/internal/framework/_typescript/client/src/links.ts +55 -21
- package/internal/framework/_typescript/create/package.json +3 -3
- package/internal/framework/_typescript/create/pnpm-lock.yaml +14 -14
- package/internal/framework/_typescript/vite/vite.ts +99 -3
- package/npm_dist/internal/framework/_typescript/client/index.js +496 -314
- package/npm_dist/internal/framework/_typescript/client/index.js.map +3 -3
- package/npm_dist/internal/framework/_typescript/client/src/client.d.ts +22 -13
- package/npm_dist/internal/framework/_typescript/client/src/client.d.ts.map +1 -1
- package/npm_dist/internal/framework/_typescript/client/src/links.d.ts.map +1 -1
- package/npm_dist/internal/framework/_typescript/vite/vite.d.ts +1 -0
- package/npm_dist/internal/framework/_typescript/vite/vite.d.ts.map +1 -1
- package/npm_dist/internal/framework/_typescript/vite/vite.js +60 -2
- package/npm_dist/internal/framework/_typescript/vite/vite.js.map +2 -2
- package/package.json +13 -13
|
@@ -14,19 +14,23 @@ export type NavigateProps = {
|
|
|
14
14
|
redirectCount?: number;
|
|
15
15
|
scrollToTop?: boolean;
|
|
16
16
|
};
|
|
17
|
-
type
|
|
18
|
-
|
|
17
|
+
export type NavigationOutcome = {
|
|
18
|
+
type: "aborted";
|
|
19
|
+
} | {
|
|
20
|
+
type: "redirect";
|
|
21
|
+
redirectData: RedirectData;
|
|
19
22
|
props: NavigateProps;
|
|
20
|
-
}
|
|
23
|
+
} | {
|
|
24
|
+
type: "success";
|
|
25
|
+
response: Response;
|
|
21
26
|
json: GetRouteDataOutput;
|
|
22
27
|
cssBundlePromises: Array<Promise<any>>;
|
|
23
28
|
waitFnPromise: Promise<ClientLoadersResult> | undefined;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
})) | undefined;
|
|
29
|
+
props: NavigateProps;
|
|
30
|
+
};
|
|
27
31
|
export type NavigationControl = {
|
|
28
32
|
abortController: AbortController | undefined;
|
|
29
|
-
promise: Promise<
|
|
33
|
+
promise: Promise<NavigationOutcome>;
|
|
30
34
|
};
|
|
31
35
|
type NavigationPhase = "fetching" | "waiting" | "rendering" | "complete";
|
|
32
36
|
type NavigationIntent = "none" | "navigate" | "revalidate";
|
|
@@ -43,7 +47,9 @@ interface NavigationEntry {
|
|
|
43
47
|
state?: unknown;
|
|
44
48
|
}
|
|
45
49
|
declare class NavigationStateManager {
|
|
46
|
-
private
|
|
50
|
+
private _activeNavigation;
|
|
51
|
+
private _prefetchCache;
|
|
52
|
+
private _pendingRevalidation;
|
|
47
53
|
private _submissions;
|
|
48
54
|
private lastDispatchedStatus;
|
|
49
55
|
private dispatchStatusEventDebounced;
|
|
@@ -56,12 +62,16 @@ declare class NavigationStateManager {
|
|
|
56
62
|
private beginUserNavigation;
|
|
57
63
|
private beginPrefetch;
|
|
58
64
|
private beginRevalidation;
|
|
59
|
-
private
|
|
60
|
-
private
|
|
65
|
+
private createActiveNavigation;
|
|
66
|
+
private createPrefetch;
|
|
67
|
+
private createRevalidation;
|
|
61
68
|
private transitionPhase;
|
|
62
69
|
private canSkipServerFetch;
|
|
63
70
|
private fetchRouteData;
|
|
64
|
-
private
|
|
71
|
+
private buildClientOnlyOutcome;
|
|
72
|
+
processSuccessfulNavigation(outcome: Extract<NavigationOutcome, {
|
|
73
|
+
type: "success";
|
|
74
|
+
}>, entry: NavigationEntry): Promise<void>;
|
|
65
75
|
submit<T = any>(url: string | URL, requestInit?: RequestInit, options?: SubmitOptions): Promise<{
|
|
66
76
|
success: true;
|
|
67
77
|
data: T;
|
|
@@ -69,14 +79,13 @@ declare class NavigationStateManager {
|
|
|
69
79
|
success: false;
|
|
70
80
|
error: string;
|
|
71
81
|
}>;
|
|
72
|
-
private
|
|
82
|
+
private findNavigationEntry;
|
|
73
83
|
private deleteNavigation;
|
|
74
84
|
removeNavigation(key: string): void;
|
|
75
85
|
getNavigation(key: string): NavigationEntry | undefined;
|
|
76
86
|
hasNavigation(key: string): boolean;
|
|
77
87
|
getNavigationsSize(): number;
|
|
78
88
|
getNavigations(): Map<string, NavigationEntry>;
|
|
79
|
-
private abortAllNavigationsExcept;
|
|
80
89
|
getStatus(): StatusEventDetail;
|
|
81
90
|
clearAll(): void;
|
|
82
91
|
private scheduleStatusUpdate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../../../internal/framework/_typescript/client/src/client.ts"],"names":[],"mappings":"AAOA,OAAO,EAIN,KAAK,mBAAmB,EACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAGN,KAAK,iBAAiB,EACtB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAIN,KAAK,YAAY,EACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAEN,KAAK,WAAW,EAChB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAGN,KAAK,kBAAkB,EACvB,MAAM,0BAA0B,CAAC;AAMlC,MAAM,MAAM,mBAAmB,GAC5B,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,UAAU,GACV,UAAU,GACV,QAAQ,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,mBAAmB,CAAC;IACpC,oBAAoB,CAAC,EAAE,WAAW,CAAC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../../../internal/framework/_typescript/client/src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../../../../../internal/framework/_typescript/client/src/links.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../../../../../internal/framework/_typescript/client/src/links.ts"],"names":[],"mappings":"AAKA,KAAK,mBAAmB,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE/E,KAAK,oBAAoB,CAAC,CAAC,SAAS,KAAK,IAAI;IAC5C,WAAW,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;CACrC,CAAC;AAEF,KAAK,wBAAwB,CAAC,CAAC,SAAS,KAAK,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAAG;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,KAAK,EACpD,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC;eAqChB,CAAC,KAAG,IAAI;gBAKT,IAAI;iBAiBK,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC;;;;;;;cAoD3C;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,KAAK,EAClD,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB,IAEa,GAAG,CAAC,mBA0FlB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../../../../../internal/framework/_typescript/vite/vite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../../../../../internal/framework/_typescript/vite/vite.ts"],"names":[],"mappings":"AAGA,KAAK,qBAAqB,GAAG;IAC5B,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,0BAA0B,EAAE,MAAM,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,GAAG,CA+K1E"}
|
|
@@ -1,13 +1,43 @@
|
|
|
1
1
|
// internal/framework/_typescript/vite/vite.ts
|
|
2
|
+
import { readFileSync, statSync } from "node:fs";
|
|
3
|
+
import { resolve } from "node:path";
|
|
2
4
|
function vormaVitePlugin(config) {
|
|
5
|
+
let cachedMap = null;
|
|
6
|
+
let cachedMtime = 0;
|
|
7
|
+
let isDev = false;
|
|
8
|
+
let resolvedFilemapPath = null;
|
|
9
|
+
function getFilemap() {
|
|
10
|
+
if (!isDev) {
|
|
11
|
+
return config.staticPublicAssetMap;
|
|
12
|
+
}
|
|
13
|
+
if (!resolvedFilemapPath) {
|
|
14
|
+
resolvedFilemapPath = resolve(
|
|
15
|
+
process.cwd(),
|
|
16
|
+
config.filemapJSONPath
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const stat = statSync(resolvedFilemapPath);
|
|
21
|
+
const mtime = stat.mtimeMs;
|
|
22
|
+
if (cachedMap && mtime === cachedMtime) {
|
|
23
|
+
return cachedMap;
|
|
24
|
+
}
|
|
25
|
+
const content = readFileSync(resolvedFilemapPath, "utf-8");
|
|
26
|
+
cachedMap = JSON.parse(content);
|
|
27
|
+
cachedMtime = mtime;
|
|
28
|
+
return cachedMap;
|
|
29
|
+
} catch {
|
|
30
|
+
return config.staticPublicAssetMap;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
3
33
|
return {
|
|
4
34
|
name: "vorma-vite-plugin",
|
|
5
35
|
config(c, { command }) {
|
|
36
|
+
isDev = command === "serve";
|
|
6
37
|
const mp = c.build?.modulePreload;
|
|
7
38
|
const roi = c.build?.rollupOptions?.input;
|
|
8
39
|
const ign = c.server?.watch?.ignored;
|
|
9
40
|
const dedupe = c.resolve?.dedupe;
|
|
10
|
-
const isDev = command === "serve";
|
|
11
41
|
return {
|
|
12
42
|
base: isDev ? "/" : config.publicPathPrefix,
|
|
13
43
|
build: {
|
|
@@ -54,6 +84,33 @@ function vormaVitePlugin(config) {
|
|
|
54
84
|
}
|
|
55
85
|
};
|
|
56
86
|
},
|
|
87
|
+
/**
|
|
88
|
+
* Configures the dev server with an endpoint for filemap cache invalidation.
|
|
89
|
+
* Wave calls this endpoint after updating public static files, which:
|
|
90
|
+
* 1. Clears the cached filemap so the next transform reads fresh data
|
|
91
|
+
* 2. Invalidates all modules in Vite's module graph
|
|
92
|
+
* 3. Triggers a browser reload via Vite's HMR websocket
|
|
93
|
+
*
|
|
94
|
+
* This is much faster than cycling Vite (stopping and restarting the process).
|
|
95
|
+
*/
|
|
96
|
+
configureServer(server) {
|
|
97
|
+
server.middlewares.use((req, res, next) => {
|
|
98
|
+
if (req.url !== "/__vorma_invalidate_filemap") {
|
|
99
|
+
return next();
|
|
100
|
+
}
|
|
101
|
+
console.log(
|
|
102
|
+
"[vorma-vite-plugin] Filemap invalidation triggered"
|
|
103
|
+
);
|
|
104
|
+
cachedMap = null;
|
|
105
|
+
cachedMtime = 0;
|
|
106
|
+
for (const mod of server.moduleGraph.idToModuleMap.values()) {
|
|
107
|
+
server.moduleGraph.invalidateModule(mod);
|
|
108
|
+
}
|
|
109
|
+
server.ws.send({ type: "full-reload" });
|
|
110
|
+
res.statusCode = 200;
|
|
111
|
+
res.end("ok");
|
|
112
|
+
});
|
|
113
|
+
},
|
|
57
114
|
transform(code, id) {
|
|
58
115
|
const isNodeModules = /node_modules/.test(id);
|
|
59
116
|
if (isNodeModules) return null;
|
|
@@ -63,10 +120,11 @@ function vormaVitePlugin(config) {
|
|
|
63
120
|
);
|
|
64
121
|
const needsReplacement = regex.test(code);
|
|
65
122
|
if (!needsReplacement) return null;
|
|
123
|
+
const filemap = getFilemap();
|
|
66
124
|
const replacedCode = code.replace(
|
|
67
125
|
regex,
|
|
68
126
|
(_, __, assetPath) => {
|
|
69
|
-
const hashed =
|
|
127
|
+
const hashed = filemap[assetPath];
|
|
70
128
|
if (!hashed) return `"${assetPath}"`;
|
|
71
129
|
return `"${config.publicPathPrefix}${hashed}"`;
|
|
72
130
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../internal/framework/_typescript/vite/vite.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": ";
|
|
4
|
+
"sourcesContent": ["import { readFileSync, statSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\ntype VormaVitePluginConfig = {\n\trollupInput: ReadonlyArray<string>;\n\tpublicPathPrefix: string;\n\tstaticPublicAssetMap: Record<string, string>;\n\tbuildtimePublicURLFuncName: string;\n\tfilemapJSONPath: string;\n\tignoredPatterns: ReadonlyArray<string>;\n\tdedupeList: ReadonlyArray<string>;\n};\n\nexport default function vormaVitePlugin(config: VormaVitePluginConfig): any {\n\t// Cache for dev mode filemap reading.\n\t// In dev mode, we read from the JSON file so we can pick up changes\n\t// without restarting Vite. The mtime check allows us to avoid re-reading\n\t// the file on every transform if it hasn't changed.\n\tlet cachedMap: Record<string, string> | null = null;\n\tlet cachedMtime: number = 0;\n\tlet isDev = false;\n\tlet resolvedFilemapPath: string | null = null;\n\n\t/**\n\t * Gets the current filemap, reading from disk in dev mode.\n\t * In production builds, uses the static map passed at plugin creation.\n\t */\n\tfunction getFilemap(): Record<string, string> {\n\t\tif (!isDev) {\n\t\t\treturn config.staticPublicAssetMap;\n\t\t}\n\n\t\tif (!resolvedFilemapPath) {\n\t\t\tresolvedFilemapPath = resolve(\n\t\t\t\tprocess.cwd(),\n\t\t\t\tconfig.filemapJSONPath,\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst stat = statSync(resolvedFilemapPath);\n\t\t\tconst mtime = stat.mtimeMs;\n\n\t\t\t// Return cached version if file hasn't changed\n\t\t\tif (cachedMap && mtime === cachedMtime) {\n\t\t\t\treturn cachedMap;\n\t\t\t}\n\n\t\t\tconst content = readFileSync(resolvedFilemapPath, \"utf-8\");\n\t\t\tcachedMap = JSON.parse(content);\n\t\t\tcachedMtime = mtime;\n\t\t\treturn cachedMap!;\n\t\t} catch {\n\t\t\t// Fallback to initial config if file can't be read.\n\t\t\t// This handles the case where the JSON file doesn't exist yet\n\t\t\t// (e.g., on first build before Wave has written it).\n\t\t\treturn config.staticPublicAssetMap;\n\t\t}\n\t}\n\n\treturn {\n\t\tname: \"vorma-vite-plugin\",\n\n\t\tconfig(c: any, { command }: any) {\n\t\t\tisDev = command === \"serve\";\n\n\t\t\tconst mp = c.build?.modulePreload;\n\t\t\tconst roi = c.build?.rollupOptions?.input;\n\t\t\tconst ign = c.server?.watch?.ignored;\n\t\t\tconst dedupe = c.resolve?.dedupe;\n\n\t\t\treturn {\n\t\t\t\tbase: isDev ? \"/\" : config.publicPathPrefix,\n\t\t\t\tbuild: {\n\t\t\t\t\ttarget: \"es2022\",\n\t\t\t\t\temptyOutDir: false,\n\t\t\t\t\tmodulePreload: {\n\t\t\t\t\t\tpolyfill: false,\n\t\t\t\t\t\t...(typeof mp === \"object\" ? mp : {}),\n\t\t\t\t\t},\n\t\t\t\t\trollupOptions: {\n\t\t\t\t\t\t...c.build?.rollupOptions,\n\t\t\t\t\t\tinput: [\n\t\t\t\t\t\t\t...config.rollupInput,\n\t\t\t\t\t\t\t...(Array.isArray(roi) ? roi : []),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tpreserveEntrySignatures: \"exports-only\",\n\t\t\t\t\t\toutput: {\n\t\t\t\t\t\t\tassetFileNames:\n\t\t\t\t\t\t\t\t\"vorma_out_vite_[name]-[hash][extname]\",\n\t\t\t\t\t\t\tchunkFileNames: \"vorma_out_vite_[name]-[hash].js\",\n\t\t\t\t\t\t\tentryFileNames: \"vorma_out_vite_[name]-[hash].js\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tserver: {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t...c.server?.headers,\n\t\t\t\t\t\t// ensure versions of dynamic imports without the latest\n\t\t\t\t\t\t// hmr updates are not cached by the browser during dev\n\t\t\t\t\t\t\"cache-control\": \"no-store\",\n\t\t\t\t\t},\n\t\t\t\t\twatch: {\n\t\t\t\t\t\t...c.server?.watch,\n\t\t\t\t\t\tignored: [\n\t\t\t\t\t\t\t...(Array.isArray(ign) ? ign : []),\n\t\t\t\t\t\t\t...config.ignoredPatterns,\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tresolve: {\n\t\t\t\t\tdedupe: [\n\t\t\t\t\t\t...(Array.isArray(dedupe) ? dedupe : []),\n\t\t\t\t\t\t...config.dedupeList,\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Configures the dev server with an endpoint for filemap cache invalidation.\n\t\t * Wave calls this endpoint after updating public static files, which:\n\t\t * 1. Clears the cached filemap so the next transform reads fresh data\n\t\t * 2. Invalidates all modules in Vite's module graph\n\t\t * 3. Triggers a browser reload via Vite's HMR websocket\n\t\t *\n\t\t * This is much faster than cycling Vite (stopping and restarting the process).\n\t\t */\n\t\tconfigureServer(server: any) {\n\t\t\tserver.middlewares.use((req: any, res: any, next: any) => {\n\t\t\t\tif (req.url !== \"/__vorma_invalidate_filemap\") {\n\t\t\t\t\treturn next();\n\t\t\t\t}\n\n\t\t\t\tconsole.log(\n\t\t\t\t\t\"[vorma-vite-plugin] Filemap invalidation triggered\",\n\t\t\t\t);\n\n\t\t\t\t// Clear the filemap cache so the next transform reads fresh data\n\t\t\t\tcachedMap = null;\n\t\t\t\tcachedMtime = 0;\n\n\t\t\t\t// Invalidate all modules in Vite's module graph.\n\t\t\t\t// This is simpler than tracking which specific modules use\n\t\t\t\t// waveBuildtimeURL() and fast enough for typical project sizes\n\t\t\t\t// (a few ms for hundreds of modules).\n\t\t\t\tfor (const mod of server.moduleGraph.idToModuleMap.values()) {\n\t\t\t\t\tserver.moduleGraph.invalidateModule(mod);\n\t\t\t\t}\n\n\t\t\t\t// Trigger a full browser reload via Vite's HMR websocket.\n\t\t\t\t// The browser will re-request modules, Vite will re-transform them\n\t\t\t\t// (cache miss due to invalidation), and they'll get the new URLs.\n\t\t\t\tserver.ws.send({ type: \"full-reload\" });\n\n\t\t\t\tres.statusCode = 200;\n\t\t\t\tres.end(\"ok\");\n\t\t\t});\n\t\t},\n\n\t\ttransform(code: any, id: any) {\n\t\t\tconst isNodeModules = /node_modules/.test(id);\n\t\t\tif (isNodeModules) return null;\n\n\t\t\tconst regex = new RegExp(\n\t\t\t\t`${config.buildtimePublicURLFuncName}\\\\s*\\\\(\\\\s*([\"'\\`])(.*?)\\\\1\\\\s*\\\\)`,\n\t\t\t\t\"g\",\n\t\t\t);\n\n\t\t\tconst needsReplacement = regex.test(code);\n\t\t\tif (!needsReplacement) return null;\n\n\t\t\t// Get the current filemap (reads from disk in dev mode)\n\t\t\tconst filemap = getFilemap();\n\n\t\t\tconst replacedCode = code.replace(\n\t\t\t\tregex,\n\t\t\t\t(_: any, __: any, assetPath: any) => {\n\t\t\t\t\tconst hashed = filemap[assetPath];\n\t\t\t\t\tif (!hashed) return `\"${assetPath}\"`;\n\t\t\t\t\treturn `\"${config.publicPathPrefix}${hashed}\"`;\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tif (replacedCode === code) return null;\n\t\t\treturn replacedCode;\n\t\t},\n\t};\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vorma",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.85.0-pre.0",
|
|
4
4
|
"description": "The Next.js of Golang, powered by Vite.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -110,23 +110,23 @@
|
|
|
110
110
|
"!**/bench.txt"
|
|
111
111
|
],
|
|
112
112
|
"devDependencies": {
|
|
113
|
-
"@preact/signals": "^2.
|
|
113
|
+
"@preact/signals": "^2.5.1",
|
|
114
114
|
"@types/jsdom": "^21.1.7",
|
|
115
|
-
"@types/node": "^22.
|
|
116
|
-
"@types/react": "^19.
|
|
117
|
-
"@types/react-dom": "^19.
|
|
115
|
+
"@types/node": "^22.19.5",
|
|
116
|
+
"@types/react": "^19.2.8",
|
|
117
|
+
"@types/react-dom": "^19.2.3",
|
|
118
118
|
"@typescript/native-preview": "7.0.0-dev.20250716.1",
|
|
119
|
-
"esbuild": "^0.25.
|
|
119
|
+
"esbuild": "^0.25.12",
|
|
120
120
|
"esbuild-plugin-solid": "^0.6.0",
|
|
121
121
|
"history": "5.3.0",
|
|
122
122
|
"jsdom": "^26.1.0",
|
|
123
|
-
"oxlint": "^1.
|
|
124
|
-
"preact": "^10.
|
|
125
|
-
"prettier": "^3.
|
|
126
|
-
"react": "^19.
|
|
127
|
-
"react-dom": "^19.
|
|
128
|
-
"solid-js": "^1.9.
|
|
129
|
-
"typescript": "^5.9.
|
|
123
|
+
"oxlint": "^1.38.0",
|
|
124
|
+
"preact": "^10.28.2",
|
|
125
|
+
"prettier": "^3.7.4",
|
|
126
|
+
"react": "^19.2.3",
|
|
127
|
+
"react-dom": "^19.2.3",
|
|
128
|
+
"solid-js": "^1.9.10",
|
|
129
|
+
"typescript": "^5.9.3",
|
|
130
130
|
"vite": "npm:rolldown-vite@latest",
|
|
131
131
|
"vitest": "^3.2.4"
|
|
132
132
|
},
|