swift-rust 1.0.0 → 1.1.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/bin/build.mjs +47 -1
- package/bin/dev-server.mjs +760 -24
- package/bin/runtime/hmr-client.js +102 -0
- package/dist/router.d.ts +103 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +58 -0
- package/dist/router.js.map +1 -1
- package/package.json +9 -8
|
@@ -66,7 +66,12 @@
|
|
|
66
66
|
}
|
|
67
67
|
});
|
|
68
68
|
|
|
69
|
+
es.addEventListener("open", function () {
|
|
70
|
+
if (window.__sr_setStatus) window.__sr_setStatus(true);
|
|
71
|
+
});
|
|
72
|
+
|
|
69
73
|
es.addEventListener("error", function () {
|
|
74
|
+
if (window.__sr_setStatus) window.__sr_setStatus(false);
|
|
70
75
|
setTimeout(function () {
|
|
71
76
|
if (es.readyState === EventSource.CLOSED) {
|
|
72
77
|
console.warn("[swift-rust] HMR connection lost, retrying…");
|
|
@@ -74,4 +79,101 @@
|
|
|
74
79
|
}
|
|
75
80
|
}, 1000);
|
|
76
81
|
});
|
|
82
|
+
|
|
83
|
+
// ── Dev indicator: a sleek, glassy button at the bottom-left (Next.js-style).
|
|
84
|
+
// Click to toggle a popover with route / status / version info. ─────────
|
|
85
|
+
function mountDevWidget() {
|
|
86
|
+
if (document.getElementById("__sr_devwidget")) return;
|
|
87
|
+
|
|
88
|
+
var root = document.createElement("div");
|
|
89
|
+
root.id = "__sr_devwidget";
|
|
90
|
+
root.setAttribute("data-sr-dev", "");
|
|
91
|
+
root.style.cssText =
|
|
92
|
+
"position:fixed;left:16px;bottom:16px;z-index:2147483646;" +
|
|
93
|
+
"font-family:ui-sans-serif,system-ui,-apple-system,'Segoe UI',sans-serif;" +
|
|
94
|
+
"color-scheme:dark;";
|
|
95
|
+
|
|
96
|
+
var glass =
|
|
97
|
+
"background:rgba(10,10,10,0.55);-webkit-backdrop-filter:blur(12px) saturate(160%);" +
|
|
98
|
+
"backdrop-filter:blur(12px) saturate(160%);border:1px solid rgba(255,255,255,0.12);";
|
|
99
|
+
|
|
100
|
+
// Popover (hidden by default, opens above the button)
|
|
101
|
+
var pop = document.createElement("div");
|
|
102
|
+
pop.style.cssText =
|
|
103
|
+
glass +
|
|
104
|
+
"position:absolute;left:0;bottom:46px;width:236px;border-radius:14px;padding:12px;" +
|
|
105
|
+
"box-shadow:0 12px 40px rgba(0,0,0,0.5);color:#ededed;font-size:12px;line-height:1.5;" +
|
|
106
|
+
"opacity:0;transform:translateY(6px) scale(.97);pointer-events:none;transform-origin:bottom left;" +
|
|
107
|
+
"transition:opacity .16s ease,transform .16s ease;";
|
|
108
|
+
function row(label, value, color) {
|
|
109
|
+
var r = document.createElement("div");
|
|
110
|
+
r.style.cssText = "display:flex;justify-content:space-between;gap:12px;padding:5px 4px;";
|
|
111
|
+
var l = document.createElement("span");
|
|
112
|
+
l.textContent = label; l.style.cssText = "color:#8f8f8f;";
|
|
113
|
+
var v = document.createElement("span");
|
|
114
|
+
v.textContent = value;
|
|
115
|
+
v.style.cssText = "color:" + (color || "#ededed") + ";font-weight:500;max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;";
|
|
116
|
+
r.appendChild(l); r.appendChild(v);
|
|
117
|
+
return { el: r, set: function (t, c) { v.textContent = t; if (c) v.style.color = c; } };
|
|
118
|
+
}
|
|
119
|
+
var head = document.createElement("div");
|
|
120
|
+
head.style.cssText = "display:flex;align-items:center;gap:7px;padding:2px 4px 8px;border-bottom:1px solid rgba(255,255,255,0.08);margin-bottom:4px;";
|
|
121
|
+
head.innerHTML =
|
|
122
|
+
'<span style="display:inline-flex;width:18px;height:18px;border-radius:5px;background:#fb923c;align-items:center;justify-content:center;">' +
|
|
123
|
+
'<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="#0a0a0a" stroke-width="2" stroke-linecap="round"><circle cx="12" cy="12" r="4.7"/><path d="M13.3 6.8 L8.9 12.6 H11.5 L10.7 16.6 L15.1 10.8 H12.5 Z" fill="#0a0a0a" stroke="none"/></svg></span>' +
|
|
124
|
+
'<span style="font-weight:600;color:#fafafa;">Swift Rust</span>' +
|
|
125
|
+
'<span style="margin-left:auto;font-size:10px;color:#8f8f8f;">dev</span>';
|
|
126
|
+
var statusRow = row("Status", "Connected", "#4ade80");
|
|
127
|
+
var routeRow = row("Route", location.pathname);
|
|
128
|
+
var saveRow = row("Hot reload", "On save", "#8f8f8f");
|
|
129
|
+
pop.appendChild(head);
|
|
130
|
+
pop.appendChild(statusRow.el);
|
|
131
|
+
pop.appendChild(routeRow.el);
|
|
132
|
+
pop.appendChild(saveRow.el);
|
|
133
|
+
|
|
134
|
+
// Button (the always-visible trigger)
|
|
135
|
+
var btn = document.createElement("button");
|
|
136
|
+
btn.type = "button";
|
|
137
|
+
btn.setAttribute("aria-label", "Swift Rust dev tools");
|
|
138
|
+
btn.style.cssText =
|
|
139
|
+
glass +
|
|
140
|
+
"display:flex;align-items:center;gap:8px;height:34px;padding:0 11px;border-radius:999px;" +
|
|
141
|
+
"cursor:pointer;box-shadow:0 4px 16px rgba(0,0,0,0.35);transition:transform .12s ease,background .2s ease;";
|
|
142
|
+
btn.onmouseenter = function () { btn.style.transform = "translateY(-1px)"; };
|
|
143
|
+
btn.onmouseleave = function () { btn.style.transform = "none"; };
|
|
144
|
+
var dot = document.createElement("span");
|
|
145
|
+
dot.style.cssText = "width:8px;height:8px;border-radius:999px;background:#4ade80;box-shadow:0 0 8px #4ade80;flex-shrink:0;";
|
|
146
|
+
var mark = document.createElement("span");
|
|
147
|
+
mark.style.cssText = "display:inline-flex;width:18px;height:18px;align-items:center;justify-content:center;";
|
|
148
|
+
mark.innerHTML =
|
|
149
|
+
'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#fb923c" stroke-width="1.8" stroke-linecap="round">' +
|
|
150
|
+
'<circle cx="12" cy="12" r="4.7"/>' +
|
|
151
|
+
'<path d="M12 3.3v1.9M12 18.8v1.9M3.3 12h1.9M18.8 12h1.9M6 6l1.4 1.4M16.6 16.6l1.4 1.4M6 18l1.4-1.4M16.6 7.4l1.4-1.4"/>' +
|
|
152
|
+
'<path d="M13.3 6.8 L8.9 12.6 H11.5 L10.7 16.6 L15.1 10.8 H12.5 Z" fill="#fb923c" stroke="none"/></svg>';
|
|
153
|
+
btn.appendChild(dot);
|
|
154
|
+
btn.appendChild(mark);
|
|
155
|
+
|
|
156
|
+
root.appendChild(pop);
|
|
157
|
+
root.appendChild(btn);
|
|
158
|
+
document.body.appendChild(root);
|
|
159
|
+
|
|
160
|
+
var openState = false;
|
|
161
|
+
function setOpen(v) {
|
|
162
|
+
openState = v;
|
|
163
|
+
pop.style.opacity = v ? "1" : "0";
|
|
164
|
+
pop.style.transform = v ? "translateY(0) scale(1)" : "translateY(6px) scale(.97)";
|
|
165
|
+
pop.style.pointerEvents = v ? "auto" : "none";
|
|
166
|
+
}
|
|
167
|
+
btn.addEventListener("click", function (e) { e.stopPropagation(); setOpen(!openState); });
|
|
168
|
+
document.addEventListener("click", function () { if (openState) setOpen(false); });
|
|
169
|
+
pop.addEventListener("click", function (e) { e.stopPropagation(); });
|
|
170
|
+
|
|
171
|
+
window.__sr_setStatus = function (ok) {
|
|
172
|
+
dot.style.background = ok ? "#4ade80" : "#f87171";
|
|
173
|
+
dot.style.boxShadow = "0 0 8px " + (ok ? "#4ade80" : "#f87171");
|
|
174
|
+
statusRow.set(ok ? "Connected" : "Disconnected", ok ? "#4ade80" : "#f87171");
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
if (document.body) mountDevWidget();
|
|
178
|
+
else document.addEventListener("DOMContentLoaded", mountDevWidget);
|
|
77
179
|
})();
|
package/dist/router.d.ts
CHANGED
|
@@ -27,4 +27,107 @@ export declare class RedirectError extends Error {
|
|
|
27
27
|
}
|
|
28
28
|
export declare function redirect(location: string, status?: 307 | 308 | 302 | 303): never;
|
|
29
29
|
export declare function permanentRedirect(location: string): never;
|
|
30
|
+
export declare class UnauthorizedError extends Error {
|
|
31
|
+
readonly digest = "UNAUTHORIZED";
|
|
32
|
+
readonly status = 401;
|
|
33
|
+
constructor(message?: string);
|
|
34
|
+
}
|
|
35
|
+
export declare class ForbiddenError extends Error {
|
|
36
|
+
readonly digest = "FORBIDDEN";
|
|
37
|
+
readonly status = 403;
|
|
38
|
+
constructor(message?: string);
|
|
39
|
+
}
|
|
40
|
+
export declare class RewriteError extends Error {
|
|
41
|
+
readonly digest: string;
|
|
42
|
+
readonly to: string;
|
|
43
|
+
constructor(to: string);
|
|
44
|
+
}
|
|
45
|
+
export declare function unauthorized(message?: string): never;
|
|
46
|
+
export declare function forbidden(message?: string): never;
|
|
47
|
+
export declare function rewrite(to: string): never;
|
|
48
|
+
export type Runtime = "node" | "edge" | "worker";
|
|
49
|
+
export interface CookieOptions {
|
|
50
|
+
path?: string;
|
|
51
|
+
domain?: string;
|
|
52
|
+
maxAge?: number;
|
|
53
|
+
expires?: Date;
|
|
54
|
+
httpOnly?: boolean;
|
|
55
|
+
secure?: boolean;
|
|
56
|
+
sameSite?: "strict" | "lax" | "none";
|
|
57
|
+
}
|
|
58
|
+
export interface CookieJar {
|
|
59
|
+
get(name: string): string | undefined;
|
|
60
|
+
set(name: string, value: string, opts?: CookieOptions): void;
|
|
61
|
+
delete(name: string, opts?: Pick<CookieOptions, "path" | "domain">): void;
|
|
62
|
+
all(): ReadonlyMap<string, string>;
|
|
63
|
+
}
|
|
64
|
+
/** App augments this via declaration merging for typed `locals`. */
|
|
65
|
+
export interface RouteLocalsMap {
|
|
66
|
+
}
|
|
67
|
+
export interface RouteLocals {
|
|
68
|
+
get<K extends keyof RouteLocalsMap>(key: K): RouteLocalsMap[K] | undefined;
|
|
69
|
+
set<K extends keyof RouteLocalsMap>(key: K, value: RouteLocalsMap[K]): void;
|
|
70
|
+
}
|
|
71
|
+
export interface RouteRequest<TParams extends Record<string, string> = Record<string, string>, TSearch extends Record<string, unknown> = Record<string, unknown>> {
|
|
72
|
+
readonly url: URL;
|
|
73
|
+
readonly method: string;
|
|
74
|
+
readonly headers: Headers;
|
|
75
|
+
readonly cookies: CookieJar;
|
|
76
|
+
readonly params: TParams;
|
|
77
|
+
readonly searchParams: TSearch;
|
|
78
|
+
readonly runtime: Runtime;
|
|
79
|
+
readonly locals: RouteLocals;
|
|
80
|
+
readonly request: Request;
|
|
81
|
+
}
|
|
82
|
+
export type RouteControl = {
|
|
83
|
+
kind: "next";
|
|
84
|
+
} | {
|
|
85
|
+
kind: "redirect";
|
|
86
|
+
to: string;
|
|
87
|
+
status?: 301 | 302 | 303 | 307 | 308;
|
|
88
|
+
} | {
|
|
89
|
+
kind: "rewrite";
|
|
90
|
+
to: string;
|
|
91
|
+
} | {
|
|
92
|
+
kind: "response";
|
|
93
|
+
response: Response;
|
|
94
|
+
} | {
|
|
95
|
+
kind: "notFound";
|
|
96
|
+
} | {
|
|
97
|
+
kind: "error";
|
|
98
|
+
error: unknown;
|
|
99
|
+
status?: number;
|
|
100
|
+
};
|
|
101
|
+
export type GuardContext<P extends Record<string, string> = Record<string, string>, Q extends Record<string, unknown> = Record<string, unknown>> = RouteRequest<P, Q>;
|
|
102
|
+
export type GuardResult = RouteControl | void;
|
|
103
|
+
export interface LoaderContext<P extends Record<string, string> = Record<string, string>, Q extends Record<string, unknown> = Record<string, unknown>> extends RouteRequest<P, Q> {
|
|
104
|
+
parent: <T = unknown>() => T | undefined;
|
|
105
|
+
}
|
|
106
|
+
export interface ActionContext<P extends Record<string, string> = Record<string, string>, Q extends Record<string, unknown> = Record<string, unknown>> extends RouteRequest<P, Q> {
|
|
107
|
+
formData: () => Promise<FormData>;
|
|
108
|
+
json: <T = unknown>() => Promise<T>;
|
|
109
|
+
}
|
|
110
|
+
export interface RouteConfig {
|
|
111
|
+
runtime?: Runtime;
|
|
112
|
+
rendering?: "static" | "dynamic" | "ssr-stream" | "isr";
|
|
113
|
+
revalidate?: number | false;
|
|
114
|
+
dynamicParams?: boolean;
|
|
115
|
+
cache?: "force-cache" | "no-store" | "default";
|
|
116
|
+
headers?: Record<string, string>;
|
|
117
|
+
maxDuration?: number;
|
|
118
|
+
}
|
|
119
|
+
export type LoaderData<L> = L extends (...a: never[]) => infer R ? Awaited<R> extends Response ? never : Awaited<R> : L;
|
|
120
|
+
export type ActionData<A> = A extends (...a: never[]) => infer R ? Awaited<R> : A;
|
|
121
|
+
export interface RouteRenderContext {
|
|
122
|
+
request: RouteRequest;
|
|
123
|
+
loaderData: unknown;
|
|
124
|
+
actionData: unknown;
|
|
125
|
+
loaders: Record<string, unknown>;
|
|
126
|
+
}
|
|
127
|
+
/** @internal — framework use only. */
|
|
128
|
+
export declare function __setRouteContext(ctx: RouteRenderContext | null): void;
|
|
129
|
+
export declare function useLoaderData<L = unknown>(): LoaderData<L>;
|
|
130
|
+
export declare function useActionData<A = unknown>(): ActionData<A> | undefined;
|
|
131
|
+
export declare function useRouteRequest(): RouteRequest | undefined;
|
|
132
|
+
export declare function useLoaderDataFor<T = unknown>(segment: string): T | undefined;
|
|
30
133
|
//# sourceMappingURL=router.d.ts.map
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IACnD,MAAM,EAAE,CAAC,CAAC;IACV,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAC7D,MAAM,EAAE,CAAC,CAAC;IACV,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CACrD,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAC5B,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAElC,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,MAAM,eAAe;gBAClB,OAAO,SAAc;CAIlC;AAED,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAEhD;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACd,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAM;CAO3C;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAS,GAAG,KAAK,CAErF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAEzD"}
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/dist/router.js
CHANGED
|
@@ -26,4 +26,62 @@ export function redirect(location, status = 307) {
|
|
|
26
26
|
export function permanentRedirect(location) {
|
|
27
27
|
throw new RedirectError(location, 308);
|
|
28
28
|
}
|
|
29
|
+
// ── Access-control control flow (used by guard.ts / loader.ts / action.ts) ──
|
|
30
|
+
export class UnauthorizedError extends Error {
|
|
31
|
+
digest = "UNAUTHORIZED";
|
|
32
|
+
status = 401;
|
|
33
|
+
constructor(message = "Unauthorized") {
|
|
34
|
+
super(message);
|
|
35
|
+
this.name = "UnauthorizedError";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class ForbiddenError extends Error {
|
|
39
|
+
digest = "FORBIDDEN";
|
|
40
|
+
status = 403;
|
|
41
|
+
constructor(message = "Forbidden") {
|
|
42
|
+
super(message);
|
|
43
|
+
this.name = "ForbiddenError";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export class RewriteError extends Error {
|
|
47
|
+
digest;
|
|
48
|
+
to;
|
|
49
|
+
constructor(to) {
|
|
50
|
+
super(`Rewrite to ${to}`);
|
|
51
|
+
this.name = "RewriteError";
|
|
52
|
+
this.to = to;
|
|
53
|
+
this.digest = `REWRITE;${to}`;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function unauthorized(message) {
|
|
57
|
+
throw new UnauthorizedError(message);
|
|
58
|
+
}
|
|
59
|
+
export function forbidden(message) {
|
|
60
|
+
throw new ForbiddenError(message);
|
|
61
|
+
}
|
|
62
|
+
export function rewrite(to) {
|
|
63
|
+
throw new RewriteError(to);
|
|
64
|
+
}
|
|
65
|
+
function ctxBox() {
|
|
66
|
+
const g = globalThis;
|
|
67
|
+
if (!g.__SR_ROUTE_CTX__)
|
|
68
|
+
g.__SR_ROUTE_CTX__ = { current: null };
|
|
69
|
+
return g.__SR_ROUTE_CTX__;
|
|
70
|
+
}
|
|
71
|
+
/** @internal — framework use only. */
|
|
72
|
+
export function __setRouteContext(ctx) {
|
|
73
|
+
ctxBox().current = ctx;
|
|
74
|
+
}
|
|
75
|
+
export function useLoaderData() {
|
|
76
|
+
return (ctxBox().current?.loaderData);
|
|
77
|
+
}
|
|
78
|
+
export function useActionData() {
|
|
79
|
+
return (ctxBox().current?.actionData);
|
|
80
|
+
}
|
|
81
|
+
export function useRouteRequest() {
|
|
82
|
+
return ctxBox().current?.request;
|
|
83
|
+
}
|
|
84
|
+
export function useLoaderDataFor(segment) {
|
|
85
|
+
return ctxBox().current?.loaders[segment];
|
|
86
|
+
}
|
|
29
87
|
//# sourceMappingURL=router.js.map
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAuBA,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,MAAM,GAAG,WAAW,CAAC;IAC9B,YAAY,OAAO,GAAG,WAAW;QAC/B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,MAAM,CAAS;IACf,MAAM,CAAS;IACf,QAAQ,CAAS;IAC1B,YAAY,QAAgB,EAAE,MAAM,GAAG,GAAG;QACxC,KAAK,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,YAAY,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,UAAU,QAAQ,CAAC,QAAgB,EAAE,SAAgC,GAAG;IAC5E,MAAM,IAAI,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,IAAI,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC"}
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "swift-rust",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
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",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "https://github.com/
|
|
9
|
+
"url": "https://github.com/colesites/swift-rust.git",
|
|
10
10
|
"directory": "packages/swift-rust"
|
|
11
11
|
},
|
|
12
12
|
"keywords": [
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"module": "./dist/index.js",
|
|
22
22
|
"types": "./dist/index.d.ts",
|
|
23
23
|
"exports": {
|
|
24
|
+
"./package.json": "./package.json",
|
|
24
25
|
".": {
|
|
25
26
|
"types": "./dist/index.d.ts",
|
|
26
27
|
"import": "./dist/index.js"
|
|
@@ -87,11 +88,11 @@
|
|
|
87
88
|
},
|
|
88
89
|
"dependencies": {
|
|
89
90
|
"@dotenvx/dotenvx": "^1.0.0",
|
|
90
|
-
"@swift-rust/env": "
|
|
91
|
-
"@swift-rust/font": "
|
|
92
|
-
"@swift-rust/image": "
|
|
93
|
-
"@swift-rust/pdf": "
|
|
94
|
-
"@swift-rust/video": "
|
|
91
|
+
"@swift-rust/env": "^0.2.0",
|
|
92
|
+
"@swift-rust/font": "^0.2.0",
|
|
93
|
+
"@swift-rust/image": "^1.0.0",
|
|
94
|
+
"@swift-rust/pdf": "^0.2.0",
|
|
95
|
+
"@swift-rust/video": "^0.2.1",
|
|
95
96
|
"react": "^19.0.0",
|
|
96
97
|
"react-dom": "^19.0.0"
|
|
97
98
|
},
|
|
@@ -122,6 +123,6 @@
|
|
|
122
123
|
"access": "public"
|
|
123
124
|
},
|
|
124
125
|
"bugs": {
|
|
125
|
-
"url": "https://github.com/
|
|
126
|
+
"url": "https://github.com/colesites/swift-rust/issues"
|
|
126
127
|
}
|
|
127
128
|
}
|