swift-rust 1.5.1 → 1.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,10 +54,22 @@
54
54
  nav.prefetch = (url) => fetchDoc(new URL(url, location.href).href).catch(() => {});
55
55
 
56
56
  // Scripts inserted via DOM cloning don't execute; clone them into fresh nodes.
57
+ // Classic scripts re-run on re-insertion, but ES module scripts are keyed by
58
+ // URL in the module map and won't re-evaluate if the same src is inserted
59
+ // again — which would leave the swapped-in island markup un-hydrated (stale
60
+ // active states, dead event handlers) until a full reload. So we cache-bust
61
+ // module src scripts with a per-navigation token to force re-execution.
62
+ let swapToken = 0;
57
63
  function runScripts(root) {
64
+ swapToken++;
58
65
  for (const old of root.querySelectorAll("script")) {
59
66
  const s = document.createElement("script");
60
67
  for (const att of old.attributes) s.setAttribute(att.name, att.value);
68
+ if (s.type === "module" && s.src) {
69
+ const u = new URL(s.src, location.href);
70
+ u.searchParams.set("__srnav", String(swapToken));
71
+ s.src = u.href;
72
+ }
61
73
  s.textContent = old.textContent;
62
74
  old.replaceWith(s);
63
75
  }
package/bin/swift-rust.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { existsSync, realpathSync } from "node:fs";
2
+ import { existsSync, readFileSync, realpathSync } from "node:fs";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { dirname, join, resolve } from "node:path";
5
5
  import { spawn } from "node:child_process";
@@ -55,6 +55,81 @@ if (cmd === "build") {
55
55
  process.exit(code);
56
56
  }
57
57
 
58
+ if (cmd === "upgrade" || cmd === "update") {
59
+ const projectDir = process.cwd();
60
+ const args = process.argv.slice(3);
61
+
62
+ if (args.includes("--help") || args.includes("-h")) {
63
+ process.stdout.write(
64
+ `swift-rust upgrade — update swift-rust to the latest release.\n\n` +
65
+ `Usage:\n` +
66
+ ` swift-rust upgrade update to the latest stable\n` +
67
+ ` swift-rust upgrade <tag> update to a dist-tag (e.g. canary) or version (e.g. 1.6.0)\n` +
68
+ ` swift-rust upgrade --tag <t> same, explicit flag\n\n` +
69
+ `Detects your package manager from the lockfile (bun/pnpm/npm/yarn).\n` +
70
+ `The @swift-rust/* packages (font, image, pdf, video, env) update transitively.\n`,
71
+ );
72
+ process.exit(0);
73
+ }
74
+
75
+ // Resolve the target tag/version: a bare arg, or --tag <t>, else "latest".
76
+ let target = "latest";
77
+ const tagIdx = args.indexOf("--tag");
78
+ if (tagIdx !== -1 && args[tagIdx + 1]) target = args[tagIdx + 1];
79
+ else {
80
+ const bare = args.find((a) => !a.startsWith("-"));
81
+ if (bare) target = bare;
82
+ }
83
+
84
+ // Detect the package manager from the lockfile in the project.
85
+ const pm =
86
+ existsSync(join(projectDir, "bun.lock")) || existsSync(join(projectDir, "bun.lockb"))
87
+ ? "bun"
88
+ : existsSync(join(projectDir, "pnpm-lock.yaml"))
89
+ ? "pnpm"
90
+ : existsSync(join(projectDir, "yarn.lock"))
91
+ ? "yarn"
92
+ : existsSync(join(projectDir, "package-lock.json"))
93
+ ? "npm"
94
+ : "bun";
95
+
96
+ const readInstalledVersion = () => {
97
+ try {
98
+ const pkgPath = join(projectDir, "node_modules", "swift-rust", "package.json");
99
+ if (existsSync(pkgPath)) {
100
+ return JSON.parse(readFileSync(pkgPath, "utf8")).version;
101
+ }
102
+ } catch {}
103
+ return null;
104
+ };
105
+
106
+ if (!existsSync(join(projectDir, "package.json"))) {
107
+ process.stderr.write("swift-rust upgrade: no package.json here — run this inside your project.\n");
108
+ process.exit(1);
109
+ }
110
+
111
+ const before = readInstalledVersion();
112
+ const spec = `swift-rust@${target}`;
113
+ const addArgs = pm === "npm" ? ["install", spec] : ["add", spec];
114
+ process.stdout.write(`↻ Upgrading ${spec} with ${pm}${before ? ` (current: ${before})` : ""}…\n`);
115
+
116
+ const child = spawn(pm, addArgs, { stdio: "inherit", cwd: projectDir, env: process.env });
117
+ const code = await new Promise((r) => {
118
+ child.on("exit", (c) => r(c ?? 1));
119
+ child.on("error", (e) => {
120
+ process.stderr.write(`swift-rust upgrade: failed to run ${pm} (${e.message}).\n`);
121
+ r(1);
122
+ });
123
+ });
124
+ if (code === 0) {
125
+ const after = readInstalledVersion();
126
+ if (after && before && after !== before) process.stdout.write(`✓ swift-rust ${before} → ${after}\n`);
127
+ else if (after) process.stdout.write(`✓ swift-rust on ${after}\n`);
128
+ else process.stdout.write(`✓ done — restart your dev server to pick up the new runtime.\n`);
129
+ }
130
+ process.exit(code);
131
+ }
132
+
58
133
  function getBinaryName() {
59
134
  if (process.platform === "win32") return "swift-rust.exe";
60
135
  return "swift-rust";
@@ -0,0 +1,37 @@
1
+ export interface CacheEntry<T = unknown> {
2
+ value: T;
3
+ /** epoch ms when the entry goes stale; 0 = never expires (until invalidated). */
4
+ expires: number;
5
+ tags: string[];
6
+ }
7
+ export interface CacheOptions {
8
+ /** Tags for targeted invalidation via revalidateTag(). */
9
+ tags?: string[];
10
+ /** Seconds before the entry is considered stale. Omit/0 = cache until invalidated. */
11
+ revalidate?: number;
12
+ /** Custom key derivation from the call arguments (defaults to fn name + JSON args). */
13
+ key?: (...args: any[]) => string;
14
+ }
15
+ /**
16
+ * Wrap an async function so its result is cached by argument key, with optional
17
+ * TTL and tags. Returns a function with the same signature.
18
+ *
19
+ * const getPosts = cache(fetchPosts, { tags: ["posts"], revalidate: 3600 });
20
+ * await getPosts(); // miss → runs fetchPosts, caches
21
+ * await getPosts(); // hit
22
+ * revalidateTag("posts"); // purge
23
+ */
24
+ export declare function cache<A extends unknown[], R>(fn: (...args: A) => Promise<R> | R, options?: CacheOptions): (...args: A) => Promise<R>;
25
+ /** Invalidate every cached entry tagged with `tag`. */
26
+ export declare function revalidateTag(tag: string): void;
27
+ /**
28
+ * Invalidate cached entries whose key references `path`. (Best-effort by
29
+ * substring — useful for "everything derived from /blog/*".) Also records the
30
+ * path so the CDN/platform can purge the rendered route.
31
+ */
32
+ export declare function revalidatePath(path: string): void;
33
+ /** Drain the set of purge signals recorded since the last call (for endpoints/webhooks). */
34
+ export declare function drainPurged(): string[];
35
+ /** Clear the entire data cache (mainly for tests / dev HMR). */
36
+ export declare function clearCache(): void;
37
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;IACrC,KAAK,EAAE,CAAC,CAAC;IACT,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAWD,MAAM,WAAW,YAAY;IAC3B,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uFAAuF;IAEvF,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC;CAClC;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAC1C,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAClC,OAAO,GAAE,YAAiB,GACzB,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAY5B;AAED,uDAAuD;AACvD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAK/C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAKjD;AAED,4FAA4F;AAC5F,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAItC;AAED,gEAAgE;AAChE,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
package/dist/cache.js ADDED
@@ -0,0 +1,76 @@
1
+ // Data cache + on-demand revalidation.
2
+ //
3
+ // A single process-wide store (kept on globalThis so the app's `swift-rust`
4
+ // import and the dev server share ONE instance regardless of how the module was
5
+ // resolved). Entries carry an expiry (TTL) and tags; `revalidateTag` /
6
+ // `revalidatePath` purge by tag or key substring.
7
+ //
8
+ // In dev and within a warm production function instance this is a real cache.
9
+ // Across instances/CDN, invalidation also relies on the `x-vercel-cache-tags`
10
+ // response header (emitted by the render pipeline) + the platform's tag purge;
11
+ // `revalidateTag` records the purge so an on-demand endpoint/webhook can act on
12
+ // it. The in-memory store is the fast path; the CDN tags are the durable path.
13
+ const g = globalThis;
14
+ const cacheState = (g.__SR_CACHE__ ??= { store: new Map(), purged: new Set() });
15
+ /**
16
+ * Wrap an async function so its result is cached by argument key, with optional
17
+ * TTL and tags. Returns a function with the same signature.
18
+ *
19
+ * const getPosts = cache(fetchPosts, { tags: ["posts"], revalidate: 3600 });
20
+ * await getPosts(); // miss → runs fetchPosts, caches
21
+ * await getPosts(); // hit
22
+ * revalidateTag("posts"); // purge
23
+ */
24
+ export function cache(fn, options = {}) {
25
+ const tags = options.tags ?? [];
26
+ const ttlMs = options.revalidate ? options.revalidate * 1000 : 0;
27
+ const name = fn.name || "anon";
28
+ return async (...args) => {
29
+ const key = options.key ? `${name}:${options.key(...args)}` : `${name}:${safeStringify(args)}`;
30
+ const hit = cacheState.store.get(key);
31
+ if (hit && (hit.expires === 0 || hit.expires > Date.now()))
32
+ return hit.value;
33
+ const value = await fn(...args);
34
+ cacheState.store.set(key, { value, expires: ttlMs ? Date.now() + ttlMs : 0, tags });
35
+ return value;
36
+ };
37
+ }
38
+ /** Invalidate every cached entry tagged with `tag`. */
39
+ export function revalidateTag(tag) {
40
+ for (const [k, v] of cacheState.store) {
41
+ if (v.tags.includes(tag))
42
+ cacheState.store.delete(k);
43
+ }
44
+ cacheState.purged.add(`tag:${tag}`);
45
+ }
46
+ /**
47
+ * Invalidate cached entries whose key references `path`. (Best-effort by
48
+ * substring — useful for "everything derived from /blog/*".) Also records the
49
+ * path so the CDN/platform can purge the rendered route.
50
+ */
51
+ export function revalidatePath(path) {
52
+ for (const [k] of cacheState.store) {
53
+ if (k.includes(path))
54
+ cacheState.store.delete(k);
55
+ }
56
+ cacheState.purged.add(`path:${path}`);
57
+ }
58
+ /** Drain the set of purge signals recorded since the last call (for endpoints/webhooks). */
59
+ export function drainPurged() {
60
+ const out = [...cacheState.purged];
61
+ cacheState.purged.clear();
62
+ return out;
63
+ }
64
+ /** Clear the entire data cache (mainly for tests / dev HMR). */
65
+ export function clearCache() {
66
+ cacheState.store.clear();
67
+ }
68
+ function safeStringify(value) {
69
+ try {
70
+ return JSON.stringify(value);
71
+ }
72
+ catch {
73
+ return String(value);
74
+ }
75
+ }
76
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -74,6 +74,8 @@ export { Link } from "./link";
74
74
  export { Head, Title, Meta, Style } from "./head";
75
75
  export { notFound, redirect, permanentRedirect } from "./router";
76
76
  export { NotFoundError, RedirectError } from "./router";
77
+ export { cache, revalidateTag, revalidatePath, clearCache } from "./cache";
78
+ export type { CacheOptions, CacheEntry } from "./cache";
77
79
  export { Video, BackgroundVideo, VideoLightbox, isYouTubeUrl, isVimeoUrl, getYouTubeId, getVimeoId, detectProvider, getYouTubeEmbedUrl, getVimeoEmbedUrl, } from "./video";
78
80
  export type { VideoProps, VideoSource, VideoCaption, VideoPreload, VideoProvider, BackgroundVideoProps, VideoLightboxProps, } from "./video";
79
81
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -8,5 +8,6 @@ export { Link } from "./link";
8
8
  export { Head, Title, Meta, Style } from "./head";
9
9
  export { notFound, redirect, permanentRedirect } from "./router";
10
10
  export { NotFoundError, RedirectError } from "./router";
11
+ export { cache, revalidateTag, revalidatePath, clearCache } from "./cache";
11
12
  export { Video, BackgroundVideo, VideoLightbox, isYouTubeUrl, isVimeoUrl, getYouTubeId, getVimeoId, detectProvider, getYouTubeEmbedUrl, getVimeoEmbedUrl, } from "./video";
12
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA+BA,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,OAAO,MAAM,CAAC;AAChB,CAAC;AAwBD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAW1C,OAAO,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,mBAAmB,EACnB,uBAAuB,EACvB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,MAAM,EACN,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,YAAY,EACZ,YAAY,GACb,MAAM,kBAAkB,CAAC;AAS1B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI7D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EACL,KAAK,EACL,eAAe,EACf,aAAa,EACb,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA+BA,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,OAAO,MAAM,CAAC;AAChB,CAAC;AAwBD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAW1C,OAAO,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,mBAAmB,EACnB,uBAAuB,EACvB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,MAAM,EACN,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,YAAY,EACZ,YAAY,GACb,MAAM,kBAAkB,CAAC;AAS1B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI7D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE3E,OAAO,EACL,KAAK,EACL,eAAe,EACf,aAAa,EACb,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,SAAS,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swift-rust",
3
- "version": "1.5.1",
3
+ "version": "1.10.2",
4
4
  "description": "The full-stack React framework powered with Rust + Bun. TSX-first, Rust rendering, 10x faster than Next.js, single binary deploy.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://swift-rust.dev",
@@ -55,6 +55,10 @@
55
55
  "types": "./dist/router.d.ts",
56
56
  "import": "./dist/router.js"
57
57
  },
58
+ "./cache": {
59
+ "types": "./dist/cache.d.ts",
60
+ "import": "./dist/cache.js"
61
+ },
58
62
  "./head": {
59
63
  "types": "./dist/head.d.ts",
60
64
  "import": "./dist/head.js"