@powerhousedao/connect-core 6.2.3-dev.70 → 6.2.3-dev.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/connect-router-11uRIT3z.d.ts.map +1 -1
- package/dist/{index-CL4fj0Pl.d.ts → index-Cm8rYUhs.d.ts} +17 -2
- package/dist/index-Cm8rYUhs.d.ts.map +1 -0
- package/dist/{index-DP1NfCUn.d.ts → index-DQ0nbYne.d.ts} +3 -2
- package/dist/{index-DP1NfCUn.d.ts.map → index-DQ0nbYne.d.ts.map} +1 -1
- package/dist/index-PjlUqG36.d.ts +2023 -0
- package/dist/index-PjlUqG36.d.ts.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +9 -9
- package/dist/{plugin-host-DVwFg7-D.js → plugin-host-BSFfhXpz.js} +2 -2
- package/dist/{plugin-host-DVwFg7-D.js.map → plugin-host-BSFfhXpz.js.map} +1 -1
- package/dist/{plugin-ui-Br91idOH.js → plugin-ui-sO7AJLHj.js} +4 -4
- package/dist/{plugin-ui-Br91idOH.js.map → plugin-ui-sO7AJLHj.js.map} +1 -1
- package/dist/plugins.js +2 -2
- package/dist/{route-tree-91OurkPS.js → route-tree-D0aszMrk.js} +3 -6
- package/dist/route-tree-D0aszMrk.js.map +1 -0
- package/dist/route-tree.d.ts +36 -2088
- package/dist/route-tree.d.ts.map +1 -1
- package/dist/route-tree.js +18 -106
- package/dist/route-tree.js.map +1 -1
- package/dist/{router-uK9fOfed.js → router-8pekwJsk.js} +6 -6
- package/dist/router-8pekwJsk.js.map +1 -0
- package/dist/router.d.ts +2 -2
- package/dist/router.js +5 -5
- package/dist/routes/__root.d.ts +25 -0
- package/dist/routes/__root.d.ts.map +1 -0
- package/dist/routes/__root.js +17 -0
- package/dist/routes/__root.js.map +1 -0
- package/dist/routes/_app/$.d.ts +20 -0
- package/dist/routes/_app/$.d.ts.map +1 -0
- package/dist/routes/_app/$.js +17 -0
- package/dist/routes/_app/$.js.map +1 -0
- package/dist/routes/_app/d/$driveSlug/{-$nodeSlug}.d.ts +40 -0
- package/dist/routes/_app/d/$driveSlug/{-$nodeSlug}.d.ts.map +1 -0
- package/dist/routes/_app/d/$driveSlug/{-$nodeSlug}.js +26 -0
- package/dist/routes/_app/d/$driveSlug/{-$nodeSlug}.js.map +1 -0
- package/dist/routes/_app/d/$driveSlug.d.ts +28 -0
- package/dist/routes/_app/d/$driveSlug.d.ts.map +1 -0
- package/dist/routes/_app/d/$driveSlug.js +24 -0
- package/dist/routes/_app/d/$driveSlug.js.map +1 -0
- package/dist/routes/_app/index.d.ts +8 -0
- package/dist/routes/_app/index.d.ts.map +1 -0
- package/dist/routes/_app/index.js +14 -0
- package/dist/routes/_app/index.js.map +1 -0
- package/dist/routes/_app/settings/appearance.d.ts +15 -0
- package/dist/routes/_app/settings/appearance.d.ts.map +1 -0
- package/dist/routes/_app/settings/appearance.js +17 -0
- package/dist/routes/_app/settings/appearance.js.map +1 -0
- package/dist/routes/_app/settings/packages.d.ts +15 -0
- package/dist/routes/_app/settings/packages.d.ts.map +1 -0
- package/dist/routes/_app/settings/packages.js +17 -0
- package/dist/routes/_app/settings/packages.js.map +1 -0
- package/dist/routes/_app/settings.d.ts +25 -0
- package/dist/routes/_app/settings.d.ts.map +1 -0
- package/dist/routes/_app/settings.js +18 -0
- package/dist/routes/_app/settings.js.map +1 -0
- package/dist/routes/_app.d.ts +8 -0
- package/dist/routes/_app.d.ts.map +1 -0
- package/dist/routes/_app.js +14 -0
- package/dist/routes/_app.js.map +1 -0
- package/dist/{runtime-CYADuBKe.js → runtime-Y9B9UJK1.js} +2 -2
- package/dist/{runtime-CYADuBKe.js.map → runtime-Y9B9UJK1.js.map} +1 -1
- package/dist/runtime-config-D3YPhYyj.d.ts.map +1 -1
- package/dist/runtime-config.js +5 -5
- package/dist/runtime-config.js.map +1 -1
- package/dist/{runtime-flag-JJ_8aMvi.js → runtime-flag-CJWngtxE.js} +2 -2
- package/dist/{runtime-flag-JJ_8aMvi.js.map → runtime-flag-CJWngtxE.js.map} +1 -1
- package/dist/runtime.js +2 -2
- package/dist/{sidebar-C0RvssAJ.js → sidebar-DVQCwBYR.js} +22 -4
- package/dist/sidebar-DVQCwBYR.js.map +1 -0
- package/dist/{views-BOajEGgQ.js → views-CAbBIFzO.js} +40 -13
- package/dist/views-CAbBIFzO.js.map +1 -0
- package/dist/views.d.ts +1 -1
- package/dist/views.js +1 -1
- package/package.json +13 -9
- package/src/router/app-router.ts +1 -1
- package/src/router/create-target.ts +33 -0
- package/src/router/index.ts +2 -0
- package/src/router/modal-frame.tsx +2 -1
- package/src/router/perf-marks.ts +1 -1
- package/src/router/route-tree.ts +2 -5
- package/src/runtime/runtime-config.ts +2 -1
- package/src/views/modals.tsx +41 -5
- package/dist/index-CL4fj0Pl.d.ts.map +0 -1
- package/dist/route-tree-91OurkPS.js.map +0 -1
- package/dist/router-uK9fOfed.js.map +0 -1
- package/dist/sidebar-C0RvssAJ.js.map +0 -1
- package/dist/views-BOajEGgQ.js.map +0 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
+
import { connectRoutesSettled, coreView, notFoundTitle } from "@powerhousedao/connect-core/router";
|
|
3
|
+
//#region src/routes/_app/$.tsx
|
|
4
|
+
/** Not found's options: its title, and a wait for routes still loading. */
|
|
5
|
+
const options = {
|
|
6
|
+
head: ({ match }) => ({ meta: [{ title: notFoundTitle(match.context.appName) }] }),
|
|
7
|
+
loader: () => connectRoutesSettled()
|
|
8
|
+
};
|
|
9
|
+
const Route = createFileRoute("/_app/$")({
|
|
10
|
+
...options,
|
|
11
|
+
codeSplitGroupings: [],
|
|
12
|
+
component: coreView("NotFoundPage")
|
|
13
|
+
});
|
|
14
|
+
//#endregion
|
|
15
|
+
export { Route, options };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=$.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"$.js","names":[],"sources":["../../../src/routes/_app/$.tsx"],"sourcesContent":["import { createFileRoute } from \"@tanstack/react-router\";\nimport type { ConnectRouterContext } from \"@powerhousedao/connect-core/router\";\nimport {\n connectRoutesSettled,\n coreView,\n notFoundTitle,\n} from \"@powerhousedao/connect-core/router\";\n\n/** Not found's options: its title, and a wait for routes still loading. */\nexport const options = {\n head: ({ match }: { match: { context: ConnectRouterContext } }) => ({\n meta: [{ title: notFoundTitle(match.context.appName) }],\n }),\n // A package's routes may still be loading: the path may be one of them.\n loader: () => connectRoutesSettled(),\n};\n\n// Unknown paths, inside the layout so it stays; matched last.\nexport const Route = createFileRoute(\"/_app/$\")({\n ...options,\n // Core routes stay in the main chunk when a project build splits its routes.\n codeSplitGroupings: [],\n component: coreView(\"NotFoundPage\"),\n});\n"],"mappings":";;;;AASA,MAAa,UAAU;CACrB,OAAO,EAAE,aAA2D,EAClE,MAAM,CAAC,EAAE,OAAO,cAAc,MAAM,QAAQ,OAAO,EAAE,CAAC,EACxD;CAEA,cAAc,qBAAqB;AACrC;AAGA,MAAa,QAAQ,gBAAgB,SAAS,CAAC,CAAC;CAC9C,GAAG;CAEH,oBAAoB,CAAC;CACrB,WAAW,SAAS,cAAc;AACpC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { r as Route$1 } from "../../../../index-PjlUqG36.js";
|
|
2
|
+
import { ConnectRouterContext, DriveLoaderOptions, DrivePending, DriveRouteData } from "@powerhousedao/connect-core/router";
|
|
3
|
+
//#region src/routes/_app/d/$driveSlug/{-$nodeSlug}.d.ts
|
|
4
|
+
/** The node route's options: its loader, `?history` search and title. */
|
|
5
|
+
export declare const options: {
|
|
6
|
+
validateSearch: (search: Record<string, unknown>) => Record<string, string | undefined>;
|
|
7
|
+
loader: {
|
|
8
|
+
handler: (options: DriveLoaderOptions) => Promise<DriveRouteData>;
|
|
9
|
+
staleReloadMode: "blocking";
|
|
10
|
+
};
|
|
11
|
+
shouldReload: ({ cause }: {
|
|
12
|
+
cause: "preload" | "enter" | "stay";
|
|
13
|
+
}) => boolean;
|
|
14
|
+
preloadStaleTime: number;
|
|
15
|
+
pendingMs: number;
|
|
16
|
+
pendingMinMs: number;
|
|
17
|
+
pendingComponent: typeof DrivePending;
|
|
18
|
+
head: ({ match, loaderData }: {
|
|
19
|
+
match: {
|
|
20
|
+
context: ConnectRouterContext;
|
|
21
|
+
};
|
|
22
|
+
loaderData?: DriveRouteData;
|
|
23
|
+
}) => {
|
|
24
|
+
meta: {
|
|
25
|
+
title: string;
|
|
26
|
+
}[];
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export declare const Route: Route$1<import("@tanstack/react-router").Register, Route$1<import("@tanstack/react-router").Register, Route$1<import("@tanstack/react-router").Register, import("@tanstack/react-router").RootRoute<import("@tanstack/react-router").Register, (search: Record<string, unknown>) => Record<string, string | undefined>, ConnectRouterContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "", "/", "/_app", "/_app", undefined, import("@tanstack/react-router").ResolveParams<"">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/d/$driveSlug", "/d/$driveSlug", "/_app/d/$driveSlug", "/_app/d/$driveSlug", undefined, import("@powerhousedao/connect-core/router").DriveRouteParams, import("@tanstack/react-router").AnyContext, ConnectRouterContext, ConnectRouterContext, {}, {
|
|
30
|
+
handler: (options: DriveLoaderOptions) => Promise<{
|
|
31
|
+
driveId: string;
|
|
32
|
+
}>;
|
|
33
|
+
staleReloadMode: "blocking";
|
|
34
|
+
}, unknown, unknown, unknown, unknown, undefined>, "/{-$nodeSlug}", "/d/$driveSlug/{-$nodeSlug}", "/_app/d/$driveSlug/{-$nodeSlug}", "/_app/d/$driveSlug/{-$nodeSlug}", (search: Record<string, unknown>) => Record<string, string | undefined>, import("@powerhousedao/connect-core/router").DriveRouteParams, import("@tanstack/react-router").AnyContext, ConnectRouterContext, ConnectRouterContext, {}, {
|
|
35
|
+
handler: (options: DriveLoaderOptions) => Promise<DriveRouteData>;
|
|
36
|
+
staleReloadMode: "blocking";
|
|
37
|
+
}, unknown, unknown, unknown, unknown, undefined>;
|
|
38
|
+
//#endregion
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL={-$nodeSlug}.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"{-$nodeSlug}.d.ts","names":[],"sources":["../../../../../src/routes/_app/d/$driveSlug/{-$nodeSlug}.tsx"],"mappings":";;;;qBAkBa;EAEc,iBAAA,QAAA,4BACQ;;IAE/B,UAAO,SAAY,uBAAqB,QAAQ;IAGhD;;EAGwB,iBAAA;IAAE;;;;;;EAUzB,SAAA,OAAA;IACD;MAAS,SAAS;;IAClB,aAAa;;;;;;;qBAeJ,OAjC+B,yCAiC1B,mDAAA,UAAA,yCAAA,2CAAA,2CAAA,WAAA,QAAA,4BAAA,oCAAA,uDAAA,6CAAA,kJAAA,oDAAA,6CAAA,6CAAA,iNAAA,mDAAA,YAAA,sBAAA;;;;;yKApCS,QAAA,4BACQ,iFAAkC,mDAAA,YAAA,sBAAA;EAE9C,UAAA,SAAA,uBAAqB,QAAQ;EAG/B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
+
import { DRIVE_PENDING_MS, DrivePending, coreView, driveTitle, loadNode, validateDriveSearch } from "@powerhousedao/connect-core/router";
|
|
3
|
+
//#region src/routes/_app/d/$driveSlug/{-$nodeSlug}.tsx
|
|
4
|
+
/** The node route's options: its loader, `?history` search and title. */
|
|
5
|
+
const options = {
|
|
6
|
+
validateSearch: (search) => validateDriveSearch(search),
|
|
7
|
+
loader: {
|
|
8
|
+
handler: (options) => loadNode(options),
|
|
9
|
+
staleReloadMode: "blocking"
|
|
10
|
+
},
|
|
11
|
+
shouldReload: ({ cause }) => cause !== "stay",
|
|
12
|
+
preloadStaleTime: 0,
|
|
13
|
+
pendingMs: DRIVE_PENDING_MS,
|
|
14
|
+
pendingMinMs: 0,
|
|
15
|
+
pendingComponent: DrivePending,
|
|
16
|
+
head: ({ match, loaderData }) => ({ meta: [{ title: driveTitle(match.context.store, loaderData, match.context.appName) }] })
|
|
17
|
+
};
|
|
18
|
+
const Route = createFileRoute("/_app/d/$driveSlug/{-$nodeSlug}")({
|
|
19
|
+
...options,
|
|
20
|
+
codeSplitGroupings: [],
|
|
21
|
+
component: coreView("NodeView")
|
|
22
|
+
});
|
|
23
|
+
//#endregion
|
|
24
|
+
export { Route, options };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL={-$nodeSlug}.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"{-$nodeSlug}.js","names":[],"sources":["../../../../../src/routes/_app/d/$driveSlug/{-$nodeSlug}.tsx"],"sourcesContent":["// By package name: a project's build shares the module Connect uses, and its\n// declarations can name the types.\nimport type {\n ConnectRouterContext,\n DriveLoaderOptions,\n DriveRouteData,\n} from \"@powerhousedao/connect-core/router\";\nimport {\n coreView,\n DRIVE_PENDING_MS,\n DrivePending,\n driveTitle,\n loadNode,\n validateDriveSearch,\n} from \"@powerhousedao/connect-core/router\";\nimport { createFileRoute } from \"@tanstack/react-router\";\n\n/** The node route's options: its loader, `?history` search and title. */\nexport const options = {\n // `?history` and its `historyPage`; inline type, as in __root.tsx.\n validateSearch: (search: Record<string, unknown>) =>\n validateDriveSearch(search) as Record<string, string | undefined>,\n loader: {\n handler: (options: DriveLoaderOptions): Promise<DriveRouteData> =>\n loadNode(options),\n // A reused match re-resolves before it shows; drives may have changed.\n staleReloadMode: \"blocking\" as const,\n },\n // Only a path change re-resolves; search-only and same-URL navigations stay.\n shouldReload: ({ cause }: { cause: \"preload\" | \"enter\" | \"stay\" }) =>\n cause !== \"stay\",\n preloadStaleTime: 0,\n pendingMs: DRIVE_PENDING_MS,\n pendingMinMs: 0,\n pendingComponent: DrivePending,\n // Names from the store; bindConnectRouter re-runs this when they change.\n head: ({\n match,\n loaderData,\n }: {\n match: { context: ConnectRouterContext };\n loaderData?: DriveRouteData;\n }) => ({\n meta: [\n {\n title: driveTitle(\n match.context.store,\n loaderData,\n match.context.appName,\n ),\n },\n ],\n }),\n};\n\n// The open document: its history, editor or JSON. Nothing on a folder or the drive's root.\nexport const Route = createFileRoute(\"/_app/d/$driveSlug/{-$nodeSlug}\")({\n ...options,\n // Core routes stay in the main chunk when a project build splits its routes.\n codeSplitGroupings: [],\n component: coreView(\"NodeView\"),\n});\n"],"mappings":";;;;AAkBA,MAAa,UAAU;CAErB,iBAAiB,WACf,oBAAoB,MAAM;CAC5B,QAAQ;EACN,UAAU,YACR,SAAS,OAAO;EAElB,iBAAiB;CACnB;CAEA,eAAe,EAAE,YACf,UAAU;CACZ,kBAAkB;CAClB,WAAW;CACX,cAAc;CACd,kBAAkB;CAElB,OAAO,EACL,OACA,kBAIK,EACL,MAAM,CACJ,EACE,OAAO,WACL,MAAM,QAAQ,OACd,YACA,MAAM,QAAQ,OAChB,EACF,CACF,EACF;AACF;AAGA,MAAa,QAAQ,gBAAgB,iCAAiC,CAAC,CAAC;CACtE,GAAG;CAEH,oBAAoB,CAAC;CACrB,WAAW,SAAS,UAAU;AAChC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { r as Route$1 } from "../../../index-PjlUqG36.js";
|
|
2
|
+
import { DriveLoaderOptions, DrivePending } from "@powerhousedao/connect-core/router";
|
|
3
|
+
//#region src/routes/_app/d/$driveSlug.d.ts
|
|
4
|
+
/** The drive layout's options: its loader and pending view. */
|
|
5
|
+
export declare const options: {
|
|
6
|
+
loader: {
|
|
7
|
+
handler: (options: DriveLoaderOptions) => Promise<{
|
|
8
|
+
driveId: string;
|
|
9
|
+
}>;
|
|
10
|
+
staleReloadMode: "blocking";
|
|
11
|
+
};
|
|
12
|
+
shouldReload: ({ cause }: {
|
|
13
|
+
cause: "preload" | "enter" | "stay";
|
|
14
|
+
}) => boolean;
|
|
15
|
+
preloadStaleTime: number;
|
|
16
|
+
pendingMs: number;
|
|
17
|
+
pendingMinMs: number;
|
|
18
|
+
pendingComponent: typeof DrivePending;
|
|
19
|
+
};
|
|
20
|
+
export declare const Route: Route$1<import("@tanstack/react-router").Register, Route$1<import("@tanstack/react-router").Register, import("@tanstack/react-router").RootRoute<import("@tanstack/react-router").Register, (search: Record<string, unknown>) => Record<string, string | undefined>, import("@powerhousedao/connect-core/router").ConnectRouterContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "", "/", "/_app", "/_app", undefined, import("@tanstack/react-router").ResolveParams<"">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/d/$driveSlug", "/d/$driveSlug", "/_app/d/$driveSlug", "/_app/d/$driveSlug", undefined, import("@powerhousedao/connect-core/router").DriveRouteParams, import("@tanstack/react-router").AnyContext, import("@powerhousedao/connect-core/router").ConnectRouterContext, import("@powerhousedao/connect-core/router").ConnectRouterContext, {}, {
|
|
21
|
+
handler: (options: DriveLoaderOptions) => Promise<{
|
|
22
|
+
driveId: string;
|
|
23
|
+
}>;
|
|
24
|
+
staleReloadMode: "blocking";
|
|
25
|
+
}, unknown, unknown, unknown, unknown, undefined>;
|
|
26
|
+
//#endregion
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=$driveSlug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"$driveSlug.d.ts","names":[],"sources":["../../../../src/routes/_app/d/$driveSlug.tsx"],"mappings":";;;;qBAYa;;IAET,UAAO,SAAY,uBAAkB;;;IAErC;;EAGwB,iBAAA;IAAE;;;;;;;qBAWjB,OAhB4B,yCAgBvB,UAAA,yCAAA,2CAAA,2CAAA,WAAA,QAAA,4BAAA,iFAAA,uDAAA,6CAAA,kJAAA,oDAAA,6CAAA,6CAAA,iNAAA,mDAAA,yDAAA,mEAAA;EAhBK,UAAA,SAAA,uBAAkB;;;EAEpB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
+
import { DRIVE_PENDING_MS, DrivePending, coreView, loadDrive } from "@powerhousedao/connect-core/router";
|
|
3
|
+
//#region src/routes/_app/d/$driveSlug.tsx
|
|
4
|
+
/** The drive layout's options: its loader and pending view. */
|
|
5
|
+
const options = {
|
|
6
|
+
loader: {
|
|
7
|
+
handler: (options) => loadDrive(options),
|
|
8
|
+
staleReloadMode: "blocking"
|
|
9
|
+
},
|
|
10
|
+
shouldReload: ({ cause }) => cause !== "stay",
|
|
11
|
+
preloadStaleTime: 0,
|
|
12
|
+
pendingMs: DRIVE_PENDING_MS,
|
|
13
|
+
pendingMinMs: 0,
|
|
14
|
+
pendingComponent: DrivePending
|
|
15
|
+
};
|
|
16
|
+
const Route = createFileRoute("/_app/d/$driveSlug")({
|
|
17
|
+
...options,
|
|
18
|
+
codeSplitGroupings: [],
|
|
19
|
+
component: coreView("DriveLayout")
|
|
20
|
+
});
|
|
21
|
+
//#endregion
|
|
22
|
+
export { Route, options };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=$driveSlug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"$driveSlug.js","names":[],"sources":["../../../../src/routes/_app/d/$driveSlug.tsx"],"sourcesContent":["// By package name: a project's build shares the module Connect uses, and its\n// declarations can name the types.\nimport type { DriveLoaderOptions } from \"@powerhousedao/connect-core/router\";\nimport {\n coreView,\n DRIVE_PENDING_MS,\n DrivePending,\n loadDrive,\n} from \"@powerhousedao/connect-core/router\";\nimport { createFileRoute } from \"@tanstack/react-router\";\n\n/** The drive layout's options: its loader and pending view. */\nexport const options = {\n loader: {\n handler: (options: DriveLoaderOptions) => loadDrive(options),\n // A reused match re-resolves before it shows; drives may have changed.\n staleReloadMode: \"blocking\" as const,\n },\n // Only a path change re-resolves; search-only and same-URL navigations stay.\n shouldReload: ({ cause }: { cause: \"preload\" | \"enter\" | \"stay\" }) =>\n cause !== \"stay\",\n preloadStaleTime: 0,\n pendingMs: DRIVE_PENDING_MS,\n // The pending view is empty on warm navigations; the router's 500 ms default\n // would hold their commit.\n pendingMinMs: 0,\n pendingComponent: DrivePending,\n};\n\n// The drive app the drive names, else a directory listing, around the node route.\nexport const Route = createFileRoute(\"/_app/d/$driveSlug\")({\n ...options,\n // Core routes stay in the main chunk when a project build splits its routes.\n codeSplitGroupings: [],\n component: coreView(\"DriveLayout\"),\n});\n"],"mappings":";;;;AAYA,MAAa,UAAU;CACrB,QAAQ;EACN,UAAU,YAAgC,UAAU,OAAO;EAE3D,iBAAiB;CACnB;CAEA,eAAe,EAAE,YACf,UAAU;CACZ,kBAAkB;CAClB,WAAW;CAGX,cAAc;CACd,kBAAkB;AACpB;AAGA,MAAa,QAAQ,gBAAgB,oBAAoB,CAAC,CAAC;CACzD,GAAG;CAEH,oBAAoB,CAAC;CACrB,WAAW,SAAS,aAAa;AACnC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { r as Route$1 } from "../../index-PjlUqG36.js";
|
|
2
|
+
//#region src/routes/_app/index.d.ts
|
|
3
|
+
/** Home's options; none yet. */
|
|
4
|
+
export declare const options: {};
|
|
5
|
+
export declare const Route: Route$1<import("@tanstack/react-router").Register, Route$1<import("@tanstack/react-router").Register, import("@tanstack/react-router").RootRoute<import("@tanstack/react-router").Register, (search: Record<string, unknown>) => Record<string, string | undefined>, import("@powerhousedao/connect-core/router").ConnectRouterContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "", "/", "/_app", "/_app", undefined, import("@tanstack/react-router").ResolveParams<"">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/", "/", "/_app/", "/_app/", undefined, import("@tanstack/react-router").ResolveParams<"/">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/routes/_app/index.tsx"],"mappings":";;;qBAIa;qBAGA,OAAK,yCAAA,UAAA,yCAAA,2CAAA,2CAAA,WAAA,QAAA,4BAAA,iFAAA,uDAAA,6CAAA,kJAAA,oDAAA,6CAAA,6CAAA,qJAAA,qDAAA,6CAAA,6CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
+
import { coreView } from "@powerhousedao/connect-core/router";
|
|
3
|
+
//#region src/routes/_app/index.tsx
|
|
4
|
+
/** Home's options; none yet. */
|
|
5
|
+
const options = {};
|
|
6
|
+
const Route = createFileRoute("/_app/")({
|
|
7
|
+
...options,
|
|
8
|
+
codeSplitGroupings: [],
|
|
9
|
+
component: coreView("DriveIndex")
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { Route, options };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/routes/_app/index.tsx"],"sourcesContent":["import { createFileRoute } from \"@tanstack/react-router\";\nimport { coreView } from \"@powerhousedao/connect-core/router\";\n\n/** Home's options; none yet. */\nexport const options = {};\n\n// The drives, as an index.\nexport const Route = createFileRoute(\"/_app/\")({\n ...options,\n // Core routes stay in the main chunk when a project build splits its routes.\n codeSplitGroupings: [],\n component: coreView(\"DriveIndex\"),\n});\n"],"mappings":";;;;AAIA,MAAa,UAAU,CAAC;AAGxB,MAAa,QAAQ,gBAAgB,QAAQ,CAAC,CAAC;CAC7C,GAAG;CAEH,oBAAoB,CAAC;CACrB,WAAW,SAAS,YAAY;AAClC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { r as Route$1 } from "../../../index-PjlUqG36.js";
|
|
2
|
+
//#region src/routes/_app/settings/appearance.d.ts
|
|
3
|
+
/** The tab's options: its entry in the settings page. */
|
|
4
|
+
export declare const options: {
|
|
5
|
+
staticData: {
|
|
6
|
+
settings: {
|
|
7
|
+
label: string;
|
|
8
|
+
order: number;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export declare const Route: Route$1<import("@tanstack/react-router").Register, Route$1<import("@tanstack/react-router").Register, Route$1<import("@tanstack/react-router").Register, import("@tanstack/react-router").RootRoute<import("@tanstack/react-router").Register, (search: Record<string, unknown>) => Record<string, string | undefined>, import("@powerhousedao/connect-core/router").ConnectRouterContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "", "/", "/_app", "/_app", undefined, import("@tanstack/react-router").ResolveParams<"">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/settings", "/settings", "/_app/settings", "/_app/settings", undefined, import("@tanstack/react-router").ResolveParams<"/settings">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, (context: any) => void, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/appearance", "/settings/appearance", "/_app/settings/appearance", "/_app/settings/appearance", undefined, import("@tanstack/react-router").ResolveParams<"/appearance">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=appearance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appearance.d.ts","names":[],"sources":["../../../../src/routes/_app/settings/appearance.tsx"],"mappings":";;;qBAIa;EACX;IAAc;MAAY;MAAqB;;;;qBAIpC,OAAK,yCAAA,UAAA,yCAAA,UAAA,yCAAA,2CAAA,2CAAA,WAAA,QAAA,4BAAA,iFAAA,uDAAA,6CAAA,kJAAA,oDAAA,6CAAA,6CAAA,qLAAA,6DAAA,6CAAA,aAAA,mOAAA,+DAAA,6CAAA,6CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
+
import { coreView } from "@powerhousedao/connect-core/router";
|
|
3
|
+
//#region src/routes/_app/settings/appearance.tsx
|
|
4
|
+
/** The tab's options: its entry in the settings page. */
|
|
5
|
+
const options = { staticData: { settings: {
|
|
6
|
+
label: "Appearance",
|
|
7
|
+
order: 30
|
|
8
|
+
} } };
|
|
9
|
+
const Route = createFileRoute("/_app/settings/appearance")({
|
|
10
|
+
...options,
|
|
11
|
+
codeSplitGroupings: [],
|
|
12
|
+
component: coreView("AppearanceTab")
|
|
13
|
+
});
|
|
14
|
+
//#endregion
|
|
15
|
+
export { Route, options };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=appearance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appearance.js","names":[],"sources":["../../../../src/routes/_app/settings/appearance.tsx"],"sourcesContent":["import { createFileRoute } from \"@tanstack/react-router\";\nimport { coreView } from \"@powerhousedao/connect-core/router\";\n\n/** The tab's options: its entry in the settings page. */\nexport const options = {\n staticData: { settings: { label: \"Appearance\", order: 30 } },\n};\n\n// The theme.\nexport const Route = createFileRoute(\"/_app/settings/appearance\")({\n ...options,\n // Core routes stay in the main chunk when a project build splits its routes.\n codeSplitGroupings: [],\n component: coreView(\"AppearanceTab\"),\n});\n"],"mappings":";;;;AAIA,MAAa,UAAU,EACrB,YAAY,EAAE,UAAU;CAAE,OAAO;CAAc,OAAO;AAAG,EAAE,EAC7D;AAGA,MAAa,QAAQ,gBAAgB,2BAA2B,CAAC,CAAC;CAChE,GAAG;CAEH,oBAAoB,CAAC;CACrB,WAAW,SAAS,eAAe;AACrC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { r as Route$1 } from "../../../index-PjlUqG36.js";
|
|
2
|
+
//#region src/routes/_app/settings/packages.d.ts
|
|
3
|
+
/** The tab's options: its entry in the settings page. */
|
|
4
|
+
export declare const options: {
|
|
5
|
+
staticData: {
|
|
6
|
+
settings: {
|
|
7
|
+
label: string;
|
|
8
|
+
order: number;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export declare const Route: Route$1<import("@tanstack/react-router").Register, Route$1<import("@tanstack/react-router").Register, Route$1<import("@tanstack/react-router").Register, import("@tanstack/react-router").RootRoute<import("@tanstack/react-router").Register, (search: Record<string, unknown>) => Record<string, string | undefined>, import("@powerhousedao/connect-core/router").ConnectRouterContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "", "/", "/_app", "/_app", undefined, import("@tanstack/react-router").ResolveParams<"">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/settings", "/settings", "/_app/settings", "/_app/settings", undefined, import("@tanstack/react-router").ResolveParams<"/settings">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, (context: any) => void, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/packages", "/settings/packages", "/_app/settings/packages", "/_app/settings/packages", undefined, import("@tanstack/react-router").ResolveParams<"/packages">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=packages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packages.d.ts","names":[],"sources":["../../../../src/routes/_app/settings/packages.tsx"],"mappings":";;;qBAIa;EACX;IAAc;MAAY;MAAmB;;;;qBAIlC,OAAK,yCAAA,UAAA,yCAAA,UAAA,yCAAA,2CAAA,2CAAA,WAAA,QAAA,4BAAA,iFAAA,uDAAA,6CAAA,kJAAA,oDAAA,6CAAA,6CAAA,qLAAA,6DAAA,6CAAA,aAAA,2NAAA,6DAAA,6CAAA,6CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
+
import { coreView } from "@powerhousedao/connect-core/router";
|
|
3
|
+
//#region src/routes/_app/settings/packages.tsx
|
|
4
|
+
/** The tab's options: its entry in the settings page. */
|
|
5
|
+
const options = { staticData: { settings: {
|
|
6
|
+
label: "Packages",
|
|
7
|
+
order: 50
|
|
8
|
+
} } };
|
|
9
|
+
const Route = createFileRoute("/_app/settings/packages")({
|
|
10
|
+
...options,
|
|
11
|
+
codeSplitGroupings: [],
|
|
12
|
+
component: coreView("PackagesTab")
|
|
13
|
+
});
|
|
14
|
+
//#endregion
|
|
15
|
+
export { Route, options };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=packages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packages.js","names":[],"sources":["../../../../src/routes/_app/settings/packages.tsx"],"sourcesContent":["import { createFileRoute } from \"@tanstack/react-router\";\nimport { coreView } from \"@powerhousedao/connect-core/router\";\n\n/** The tab's options: its entry in the settings page. */\nexport const options = {\n staticData: { settings: { label: \"Packages\", order: 50 } },\n};\n\n// The loaded packages, their document models and editors.\nexport const Route = createFileRoute(\"/_app/settings/packages\")({\n ...options,\n // Core routes stay in the main chunk when a project build splits its routes.\n codeSplitGroupings: [],\n component: coreView(\"PackagesTab\"),\n});\n"],"mappings":";;;;AAIA,MAAa,UAAU,EACrB,YAAY,EAAE,UAAU;CAAE,OAAO;CAAY,OAAO;AAAG,EAAE,EAC3D;AAGA,MAAa,QAAQ,gBAAgB,yBAAyB,CAAC,CAAC;CAC9D,GAAG;CAEH,oBAAoB,CAAC;CACrB,WAAW,SAAS,aAAa;AACnC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { r as Route$1 } from "../../index-PjlUqG36.js";
|
|
2
|
+
import { StaticDataRouteOption } from "@tanstack/react-router";
|
|
3
|
+
import { ConnectRouterContext } from "@powerhousedao/connect-core/router";
|
|
4
|
+
//#region src/routes/_app/settings.d.ts
|
|
5
|
+
/** The settings page's options: the tab redirect and title. Its tabs are its
|
|
6
|
+
* child routes with `staticData.settings`. */
|
|
7
|
+
export declare const options: {
|
|
8
|
+
beforeLoad: (context: any) => void;
|
|
9
|
+
head: ({ matches, match }: {
|
|
10
|
+
matches: readonly {
|
|
11
|
+
staticData: StaticDataRouteOption;
|
|
12
|
+
}[];
|
|
13
|
+
match: {
|
|
14
|
+
context: ConnectRouterContext;
|
|
15
|
+
};
|
|
16
|
+
}) => {
|
|
17
|
+
meta: {
|
|
18
|
+
title: string;
|
|
19
|
+
}[];
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export declare const Route: Route$1<import("@tanstack/react-router").Register, Route$1<import("@tanstack/react-router").Register, import("@tanstack/react-router").RootRoute<import("@tanstack/react-router").Register, (search: Record<string, unknown>) => Record<string, string | undefined>, ConnectRouterContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "", "/", "/_app", "/_app", undefined, import("@tanstack/react-router").ResolveParams<"">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/settings", "/settings", "/_app/settings", "/_app/settings", undefined, import("@tanstack/react-router").ResolveParams<"/settings">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, (context: any) => void, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
23
|
+
//#endregion
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","names":[],"sources":["../../../src/routes/_app/settings.tsx"],"mappings":";;;;;;qBAWa;EAG0B,aAAC;EAKnC,SAAA,SAAA;IACD;MAAoB,YAAY;;IAChC;MAAS,SAAS;;;;;;;;qBAcT,OAAK,yCAAA,UAAA,yCAAA,2CAAA,2CAAA,WAAA,QAAA,4BAAA,oCAAA,uDAAA,6CAAA,kJAAA,oDAAA,6CAAA,6CAAA,qLAAA,6DAAA,6CAAA,aAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
+
import { coreView, redirectToSettingsTab, settingsTitle } from "@powerhousedao/connect-core/router";
|
|
3
|
+
//#region src/routes/_app/settings.tsx
|
|
4
|
+
/** The settings page's options: the tab redirect and title. Its tabs are its
|
|
5
|
+
* child routes with `staticData.settings`. */
|
|
6
|
+
const options = {
|
|
7
|
+
beforeLoad: redirectToSettingsTab,
|
|
8
|
+
head: ({ matches, match }) => ({ meta: [{ title: settingsTitle(matches.at(-1)?.staticData.settings?.label, match.context.appName) }] })
|
|
9
|
+
};
|
|
10
|
+
const Route = createFileRoute("/_app/settings")({
|
|
11
|
+
...options,
|
|
12
|
+
codeSplitGroupings: [],
|
|
13
|
+
component: coreView("CoreSettingsPage")
|
|
14
|
+
});
|
|
15
|
+
//#endregion
|
|
16
|
+
export { Route, options };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","names":[],"sources":["../../../src/routes/_app/settings.tsx"],"sourcesContent":["import type { ConnectRouterContext } from \"@powerhousedao/connect-core/router\";\nimport {\n coreView,\n redirectToSettingsTab,\n settingsTitle,\n} from \"@powerhousedao/connect-core/router\";\nimport type { StaticDataRouteOption } from \"@tanstack/react-router\";\nimport { createFileRoute } from \"@tanstack/react-router\";\n\n/** The settings page's options: the tab redirect and title. Its tabs are its\n * child routes with `staticData.settings`. */\nexport const options = {\n // Bare /settings and a disabled tab go to the first tab. `any`: checking the\n // router's context against a typed parameter here is circular.\n beforeLoad: redirectToSettingsTab as (context: any) => void,\n // The shown tab's label; a tab needs no head of its own.\n head: ({\n matches,\n match,\n }: {\n matches: readonly { staticData: StaticDataRouteOption }[];\n match: { context: ConnectRouterContext };\n }) => ({\n meta: [\n {\n title: settingsTitle(\n matches.at(-1)?.staticData.settings?.label,\n match.context.appName,\n ),\n },\n ],\n }),\n};\n\n// The tab list beside the shown tab.\nexport const Route = createFileRoute(\"/_app/settings\")({\n ...options,\n // Core routes stay in the main chunk when a project build splits its routes.\n codeSplitGroupings: [],\n component: coreView(\"CoreSettingsPage\"),\n});\n"],"mappings":";;;;;AAWA,MAAa,UAAU;CAGrB,YAAY;CAEZ,OAAO,EACL,SACA,aAIK,EACL,MAAM,CACJ,EACE,OAAO,cACL,QAAQ,GAAG,EAAE,CAAC,EAAE,WAAW,UAAU,OACrC,MAAM,QAAQ,OAChB,EACF,CACF,EACF;AACF;AAGA,MAAa,QAAQ,gBAAgB,gBAAgB,CAAC,CAAC;CACrD,GAAG;CAEH,oBAAoB,CAAC;CACrB,WAAW,SAAS,kBAAkB;AACxC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { r as Route$1 } from "../index-PjlUqG36.js";
|
|
2
|
+
//#region src/routes/_app.d.ts
|
|
3
|
+
/** The layout's options; none yet. */
|
|
4
|
+
export declare const options: {};
|
|
5
|
+
export declare const Route: Route$1<import("@tanstack/react-router").Register, import("@tanstack/react-router").RootRoute<import("@tanstack/react-router").Register, (search: Record<string, unknown>) => Record<string, string | undefined>, import("@powerhousedao/connect-core/router").ConnectRouterContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "", "/", "/_app", "/_app", undefined, import("@tanstack/react-router").ResolveParams<"">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=_app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_app.d.ts","names":[],"sources":["../../src/routes/_app.tsx"],"mappings":";;;qBAIa;qBAIA,OAAK,yCAAA,2CAAA,2CAAA,WAAA,QAAA,4BAAA,iFAAA,uDAAA,6CAAA,kJAAA,oDAAA,6CAAA,6CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
+
import { coreView } from "@powerhousedao/connect-core/router";
|
|
3
|
+
//#region src/routes/_app.tsx
|
|
4
|
+
/** The layout's options; none yet. */
|
|
5
|
+
const options = {};
|
|
6
|
+
const Route = createFileRoute("/_app")({
|
|
7
|
+
...options,
|
|
8
|
+
codeSplitGroupings: [],
|
|
9
|
+
component: coreView("CoreLayout")
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { Route, options };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=_app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_app.js","names":[],"sources":["../../src/routes/_app.tsx"],"sourcesContent":["import { createFileRoute } from \"@tanstack/react-router\";\nimport { coreView } from \"@powerhousedao/connect-core/router\";\n\n/** The layout's options; none yet. */\nexport const options = {};\n\n// Pathless: the header and content area around home, drives, settings and a\n// project's _app/ routes. A layout renders `ContentOutlet` for its content.\nexport const Route = createFileRoute(\"/_app\")({\n ...options,\n // Core routes stay in the main chunk when a project build splits its routes.\n codeSplitGroupings: [],\n component: coreView(\"CoreLayout\"),\n});\n"],"mappings":";;;;AAIA,MAAa,UAAU,CAAC;AAIxB,MAAa,QAAQ,gBAAgB,OAAO,CAAC,CAAC;CAC5C,GAAG;CAEH,oBAAoB,CAAC;CACrB,WAAW,SAAS,YAAY;AAClC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getRuntimeConfig } from "./runtime-config.js";
|
|
2
|
-
import { n as resolveRuntimeFlag, t as isRuntimeFlagEnabled } from "./runtime-flag-
|
|
2
|
+
import { n as resolveRuntimeFlag, t as isRuntimeFlagEnabled } from "./runtime-flag-CJWngtxE.js";
|
|
3
3
|
import { bindPHStoreToWindow, createPHStore, getActivePHStore, getDrives, getPHStore, refreshReactorDataClient, setDrives, setFullReactorClient } from "@powerhousedao/reactor-browser";
|
|
4
4
|
import { logger } from "document-model";
|
|
5
5
|
//#region src/runtime/multi-reactor-flag.ts
|
|
@@ -186,4 +186,4 @@ function loadLocalPackage(source) {
|
|
|
186
186
|
//#endregion
|
|
187
187
|
export { planReactorClient as a, resolveReactorClientMode as c, isReactorWorkerEnabled as d, resolveReactorWorkerEnabled as f, getAppDrives as i, REACTOR_WORKER_QUERY_KEY as l, getConnectPHStore as n, refreshAppDrives as o, isMultiReactorEnabled as p, createAppReactorClient as r, selectAppReactorClient as s, loadLocalPackage as t, REACTOR_WORKER_STORAGE_KEY as u };
|
|
188
188
|
|
|
189
|
-
//# sourceMappingURL=runtime-
|
|
189
|
+
//# sourceMappingURL=runtime-Y9B9UJK1.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-CYADuBKe.js","names":[],"sources":["../src/runtime/multi-reactor-flag.ts","../src/runtime/reactor-worker-flag.ts","../src/runtime/reactor-client-mode.ts","../src/runtime/app-reactor-client.ts","../src/runtime/ph-store.ts","../src/runtime/local-package.ts"],"sourcesContent":["import { getRuntimeConfig } from \"./runtime-config.js\";\n\n// Config only: the flag is in the worker fingerprint, so a per-tab value would split tabs.\nexport function isMultiReactorEnabled(): boolean {\n return getRuntimeConfig().connect.instance?.multiReactor ?? false;\n}\n","import { getRuntimeConfig } from \"./runtime-config.js\";\nimport {\n isRuntimeFlagEnabled,\n resolveRuntimeFlag,\n type RuntimeFlagInput,\n} from \"./runtime-flag.js\";\n\nexport const REACTOR_WORKER_QUERY_KEY = \"reactorWorker\";\nexport const REACTOR_WORKER_STORAGE_KEY = \"ph:reactorWorker\";\n\nexport type ReactorWorkerFlagInput = RuntimeFlagInput;\n\nexport function resolveReactorWorkerEnabled(\n input: ReactorWorkerFlagInput,\n): boolean {\n return resolveRuntimeFlag(input);\n}\n\nexport function isReactorWorkerEnabled(): boolean {\n return isRuntimeFlagEnabled({\n queryKey: REACTOR_WORKER_QUERY_KEY,\n storageKey: REACTOR_WORKER_STORAGE_KEY,\n readConfigFlag: () =>\n getRuntimeConfig().connect.instance?.reactorWorker ?? false,\n });\n}\n","import type { PHReactorClientMode } from \"@powerhousedao/shared/clis\";\nimport { getRuntimeConfig } from \"./runtime-config.js\";\nimport { isMultiReactorEnabled } from \"./multi-reactor-flag.js\";\nimport { isReactorWorkerEnabled } from \"./reactor-worker-flag.js\";\n\n/**\n * Which of the four reactor clients Connect boots. Standardized by the\n * multi-reactor work; this resolves the single selector Connect acts on:\n *\n * in-process | worker | remote | router\n *\n * Precedence: an explicit `?reactorClient=` query override (handy for a quick\n * check), then the served `connect.instance.reactorClient` (projected from the\n * host's reactor backends), then the LEGACY booleans — so a config that only\n * sets reactorWorker/multiReactor behaves exactly as before.\n *\n * `remote` is the only mode that builds NO local reactor (no PGlite): it is a\n * pure client to a remote Switchboard. `router` keeps the local reactor and\n * adds remote backends; `worker`/`in-process` are the local reactor alone.\n */\nexport type ReactorClientMode = PHReactorClientMode;\n\nconst MODES: ReadonlySet<string> = new Set([\n \"in-process\",\n \"worker\",\n \"remote\",\n \"router\",\n]);\n\nfunction fromQuery(): ReactorClientMode | undefined {\n if (typeof window === \"undefined\") return undefined;\n try {\n const value = new URLSearchParams(window.location.search).get(\n \"reactorClient\",\n );\n return value && MODES.has(value) ? (value as ReactorClientMode) : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function resolveReactorClientMode(): ReactorClientMode {\n const override = fromQuery();\n if (override) return override;\n const configured = getRuntimeConfig().connect.instance?.reactorClient;\n if (configured && MODES.has(configured)) return configured;\n // Legacy fallback — unchanged behaviour for configs without reactorClient.\n if (isMultiReactorEnabled()) return \"router\";\n if (isReactorWorkerEnabled()) return \"worker\";\n return \"in-process\";\n}\n","import type { IReactorClient } from \"@powerhousedao/reactor\";\nimport {\n getDrives,\n refreshReactorDataClient,\n setDrives,\n setFullReactorClient,\n getPHStore,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\nimport type { ISigner } from \"@powerhousedao/shared/document-model\";\nimport { logger } from \"document-model\";\nimport type * as MultiReactor from \"./multi-reactor.js\";\nimport type {\n LoadedDocumentModels,\n LocalReactorModule,\n} from \"./multi-reactor.js\";\nimport type { ReactorClientMode } from \"./reactor-client-mode.js\";\nimport { resolveReactorClientMode } from \"./reactor-client-mode.js\";\nimport { isReactorWorkerEnabled } from \"./reactor-worker-flag.js\";\n\ntype MultiReactorModule = typeof MultiReactor;\n\nexport type AppReactorClientParams = {\n mode: ReactorClientMode;\n /** Built, and ready (the worker has started up). Undefined in `remote`\n * mode, where no local reactor is built. */\n module: LocalReactorModule | undefined;\n remoteDriveUrl: string | undefined;\n /** Signs routed writes; unsigned (anonymous) without one. */\n signer?: ISigner;\n documentModelModules: LoadedDocumentModels;\n loadRouter?: () => Promise<MultiReactorModule>;\n};\n\nconst loadMultiReactor = (): Promise<MultiReactorModule> =>\n import(\"./multi-reactor.js\");\n\n/** What a mode builds in the tab; `remote` builds no local reactor (no PGlite). */\nexport type ReactorClientPlan = {\n mode: ReactorClientMode;\n /** `router`: the local reactor plus remote backends. */\n multiReactor: boolean;\n needsLocalReactor: boolean;\n /** The local reactor runs in the shared worker. */\n localAsWorker: boolean;\n};\n\nexport function planReactorClient(\n mode: ReactorClientMode = resolveReactorClientMode(),\n): ReactorClientPlan {\n const needsLocalReactor = mode !== \"remote\";\n return {\n mode,\n multiReactor: mode === \"router\",\n needsLocalReactor,\n localAsWorker:\n needsLocalReactor &&\n (mode === \"worker\" || (mode === \"router\" && isReactorWorkerEnabled())),\n };\n}\n\n/** Builds the tab's reactor, e.g. Connect's PGlite or worker reactor. */\nexport type LocalReactorFactory = (\n plan: ReactorClientPlan,\n) => Promise<LocalReactorModule>;\n\nexport type CreateAppReactorClientOptions = Omit<\n AppReactorClientParams,\n \"mode\" | \"module\"\n> & {\n plan?: ReactorClientPlan;\n /** Called only when the plan needs a local reactor. */\n localReactor?: LocalReactorFactory;\n};\n\n/** Builds the local reactor the plan needs, then selects the app's client. */\nexport async function createAppReactorClient(\n options: CreateAppReactorClientOptions,\n) {\n const { localReactor, ...params } = options;\n const plan = options.plan ?? planReactorClient();\n let module: LocalReactorModule | undefined;\n if (plan.needsLocalReactor) {\n if (!localReactor) {\n throw new Error(\n `reactorClient mode \"${plan.mode}\" needs a local reactor; pass localReactor`,\n );\n }\n module = await localReactor(plan);\n }\n const client = await selectAppReactorClient({\n ...params,\n mode: plan.mode,\n module,\n });\n return { plan, module, client };\n}\n\n/**\n * Pick the client for the resolved mode:\n * - `in-process` / `worker`: the local client, router module never loaded.\n * - `router`: the local reactor plus remote backends.\n * - `remote`: a remote-only router — a full IReactorClient that proxies to\n * the Switchboard over GraphQL with NO local reactor (no PGlite).\n */\nexport async function selectAppReactorClient(\n params: AppReactorClientParams,\n): Promise<IReactorClient> {\n if (params.mode === \"remote\") {\n setFullReactorClient(undefined);\n const remote = await buildRemoteOnly(params);\n setFullReactorClient(remote);\n return remote;\n }\n if (params.mode !== \"router\") {\n if (getPHStore()?.fullReactorClient) {\n setFullReactorClient(undefined);\n }\n return requireModule(params).client;\n }\n setFullReactorClient(undefined);\n const routed = await buildRouter(params);\n setFullReactorClient(routed);\n return routed ?? requireModule(params).client;\n}\n\nfunction requireModule(params: AppReactorClientParams): LocalReactorModule {\n if (!params.module) {\n throw new Error(\n `reactorClient mode \"${params.mode}\" needs a local reactor, but none was built`,\n );\n }\n return params.module;\n}\n\n/** A Switchboard that cannot answer must not fail boot: list the tab's drives. */\nexport async function getAppDrives(\n client: IReactorClient,\n local: IReactorClient,\n): Promise<DocumentDriveDocument[]> {\n if (client === local) {\n return getDrives(local);\n }\n try {\n return await getDrives(client);\n } catch (error) {\n logger.warn(\n \"Could not list drives through the router; listing the local reactor's: @error\",\n error,\n );\n return getDrives(local);\n }\n}\n\nexport async function refreshAppDrives(\n client: IReactorClient,\n local: IReactorClient,\n): Promise<void> {\n if (client === local) {\n return refreshReactorDataClient(client);\n }\n setDrives(await getAppDrives(client, local));\n}\n\nasync function buildRouter(\n params: AppReactorClientParams,\n): Promise<IReactorClient | undefined> {\n if (!params.remoteDriveUrl) {\n logger.warn(\n \"multiReactor is on but no remote drive URL is configured; using the local reactor only\",\n );\n return undefined;\n }\n let multiReactor: MultiReactorModule;\n try {\n multiReactor = await (params.loadRouter ?? loadMultiReactor)();\n } catch (error) {\n logger.error(\"Could not load the multi-reactor router: @error\", error);\n return undefined;\n }\n const remoteGraphqlUrl = multiReactor.deriveSwitchboardGraphqlUrl(\n params.remoteDriveUrl,\n );\n if (!remoteGraphqlUrl) {\n logger.warn(\n \"multiReactor is on but the remote drive URL @url does not parse; using the local reactor only\",\n params.remoteDriveUrl,\n );\n return undefined;\n }\n logger.info(\"Multi-reactor routing to @url\", remoteGraphqlUrl);\n return multiReactor.buildMultiReactorClient({\n module: requireModule(params),\n remoteGraphqlUrl,\n signer: params.signer,\n documentModelModules: params.documentModelModules,\n });\n}\n\n/**\n * The `remote` mode: a remote-only router — a full IReactorClient that proxies\n * to the Switchboard over GraphQL with NO local backend, so no local reactor\n * and no PGlite are ever built. A missing/unparseable remote URL is a hard\n * config error here (unlike `router`, there is no local reactor to fall back\n * to).\n */\nasync function buildRemoteOnly(\n params: AppReactorClientParams,\n): Promise<IReactorClient> {\n if (!params.remoteDriveUrl) {\n throw new Error(\n 'reactorClient \"remote\" needs a remote drive URL — declare a remote backend / default drive the client can proxy to',\n );\n }\n const multiReactor = await (params.loadRouter ?? loadMultiReactor)();\n const remoteGraphqlUrl = multiReactor.deriveSwitchboardGraphqlUrl(\n params.remoteDriveUrl,\n );\n if (!remoteGraphqlUrl) {\n throw new Error(\n `reactorClient \"remote\": the remote drive URL \"${params.remoteDriveUrl}\" does not resolve to a Switchboard GraphQL endpoint`,\n );\n }\n logger.info(\"Remote reactor client → @url\", remoteGraphqlUrl);\n return multiReactor.buildMultiReactorClient({\n module: undefined,\n remoteGraphqlUrl,\n signer: params.signer,\n documentModelModules: params.documentModelModules,\n });\n}\n","import type { PHStore } from \"@powerhousedao/reactor-browser\";\nimport {\n bindPHStoreToWindow,\n createPHStore,\n getActivePHStore,\n} from \"@powerhousedao/reactor-browser\";\n\n/** The app's PH store: the active one, else a new one bound to `window.ph`.\n * Values set on `window.ph` before carry over. */\nexport function getConnectPHStore(): PHStore {\n const active = getActivePHStore();\n if (active) return active;\n const store = createPHStore();\n bindPHStoreToWindow(store);\n return store;\n}\n","import type { DocumentModelLib } from \"document-model\";\n\n/** A module namespace, as `import * as pkg` or Vite HMR hands it over. */\nexport type ModuleNamespace = Record<string, any> & {\n [Symbol.toStringTag]: \"Module\";\n};\n\nexport type LocalPackage = DocumentModelLib<any> | ModuleNamespace;\n\n/** The package itself, or a loader (`() => import(\"./index.js\")`) that keeps it off the boot path. */\nexport type LocalPackageSource = LocalPackage | (() => Promise<LocalPackage>);\n\n/** Starts loading the project's package; a loader runs once, here. */\nexport function loadLocalPackage(\n source: LocalPackageSource | undefined,\n): DocumentModelLib | Promise<DocumentModelLib> | undefined {\n const pkg = (typeof source === \"function\" ? source() : source) as\n | DocumentModelLib\n | Promise<DocumentModelLib>\n | undefined;\n // Consumers await it; this only stops an early rejection being reported as unhandled.\n if (pkg instanceof Promise) pkg.catch(() => undefined);\n return pkg;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime-Y9B9UJK1.js","names":[],"sources":["../src/runtime/multi-reactor-flag.ts","../src/runtime/reactor-worker-flag.ts","../src/runtime/reactor-client-mode.ts","../src/runtime/app-reactor-client.ts","../src/runtime/ph-store.ts","../src/runtime/local-package.ts"],"sourcesContent":["import { getRuntimeConfig } from \"./runtime-config.js\";\n\n// Config only: the flag is in the worker fingerprint, so a per-tab value would split tabs.\nexport function isMultiReactorEnabled(): boolean {\n return getRuntimeConfig().connect.instance?.multiReactor ?? false;\n}\n","import { getRuntimeConfig } from \"./runtime-config.js\";\nimport {\n isRuntimeFlagEnabled,\n resolveRuntimeFlag,\n type RuntimeFlagInput,\n} from \"./runtime-flag.js\";\n\nexport const REACTOR_WORKER_QUERY_KEY = \"reactorWorker\";\nexport const REACTOR_WORKER_STORAGE_KEY = \"ph:reactorWorker\";\n\nexport type ReactorWorkerFlagInput = RuntimeFlagInput;\n\nexport function resolveReactorWorkerEnabled(\n input: ReactorWorkerFlagInput,\n): boolean {\n return resolveRuntimeFlag(input);\n}\n\nexport function isReactorWorkerEnabled(): boolean {\n return isRuntimeFlagEnabled({\n queryKey: REACTOR_WORKER_QUERY_KEY,\n storageKey: REACTOR_WORKER_STORAGE_KEY,\n readConfigFlag: () =>\n getRuntimeConfig().connect.instance?.reactorWorker ?? false,\n });\n}\n","import type { PHReactorClientMode } from \"@powerhousedao/shared/clis\";\nimport { getRuntimeConfig } from \"./runtime-config.js\";\nimport { isMultiReactorEnabled } from \"./multi-reactor-flag.js\";\nimport { isReactorWorkerEnabled } from \"./reactor-worker-flag.js\";\n\n/**\n * Which of the four reactor clients Connect boots. Standardized by the\n * multi-reactor work; this resolves the single selector Connect acts on:\n *\n * in-process | worker | remote | router\n *\n * Precedence: an explicit `?reactorClient=` query override (handy for a quick\n * check), then the served `connect.instance.reactorClient` (projected from the\n * host's reactor backends), then the LEGACY booleans — so a config that only\n * sets reactorWorker/multiReactor behaves exactly as before.\n *\n * `remote` is the only mode that builds NO local reactor (no PGlite): it is a\n * pure client to a remote Switchboard. `router` keeps the local reactor and\n * adds remote backends; `worker`/`in-process` are the local reactor alone.\n */\nexport type ReactorClientMode = PHReactorClientMode;\n\nconst MODES: ReadonlySet<string> = new Set([\n \"in-process\",\n \"worker\",\n \"remote\",\n \"router\",\n]);\n\nfunction fromQuery(): ReactorClientMode | undefined {\n if (typeof window === \"undefined\") return undefined;\n try {\n const value = new URLSearchParams(window.location.search).get(\n \"reactorClient\",\n );\n return value && MODES.has(value) ? (value as ReactorClientMode) : undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function resolveReactorClientMode(): ReactorClientMode {\n const override = fromQuery();\n if (override) return override;\n const configured = getRuntimeConfig().connect.instance?.reactorClient;\n if (configured && MODES.has(configured)) return configured;\n // Legacy fallback — unchanged behaviour for configs without reactorClient.\n if (isMultiReactorEnabled()) return \"router\";\n if (isReactorWorkerEnabled()) return \"worker\";\n return \"in-process\";\n}\n","import type { IReactorClient } from \"@powerhousedao/reactor\";\nimport {\n getDrives,\n refreshReactorDataClient,\n setDrives,\n setFullReactorClient,\n getPHStore,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\nimport type { ISigner } from \"@powerhousedao/shared/document-model\";\nimport { logger } from \"document-model\";\nimport type * as MultiReactor from \"./multi-reactor.js\";\nimport type {\n LoadedDocumentModels,\n LocalReactorModule,\n} from \"./multi-reactor.js\";\nimport type { ReactorClientMode } from \"./reactor-client-mode.js\";\nimport { resolveReactorClientMode } from \"./reactor-client-mode.js\";\nimport { isReactorWorkerEnabled } from \"./reactor-worker-flag.js\";\n\ntype MultiReactorModule = typeof MultiReactor;\n\nexport type AppReactorClientParams = {\n mode: ReactorClientMode;\n /** Built, and ready (the worker has started up). Undefined in `remote`\n * mode, where no local reactor is built. */\n module: LocalReactorModule | undefined;\n remoteDriveUrl: string | undefined;\n /** Signs routed writes; unsigned (anonymous) without one. */\n signer?: ISigner;\n documentModelModules: LoadedDocumentModels;\n loadRouter?: () => Promise<MultiReactorModule>;\n};\n\nconst loadMultiReactor = (): Promise<MultiReactorModule> =>\n import(\"./multi-reactor.js\");\n\n/** What a mode builds in the tab; `remote` builds no local reactor (no PGlite). */\nexport type ReactorClientPlan = {\n mode: ReactorClientMode;\n /** `router`: the local reactor plus remote backends. */\n multiReactor: boolean;\n needsLocalReactor: boolean;\n /** The local reactor runs in the shared worker. */\n localAsWorker: boolean;\n};\n\nexport function planReactorClient(\n mode: ReactorClientMode = resolveReactorClientMode(),\n): ReactorClientPlan {\n const needsLocalReactor = mode !== \"remote\";\n return {\n mode,\n multiReactor: mode === \"router\",\n needsLocalReactor,\n localAsWorker:\n needsLocalReactor &&\n (mode === \"worker\" || (mode === \"router\" && isReactorWorkerEnabled())),\n };\n}\n\n/** Builds the tab's reactor, e.g. Connect's PGlite or worker reactor. */\nexport type LocalReactorFactory = (\n plan: ReactorClientPlan,\n) => Promise<LocalReactorModule>;\n\nexport type CreateAppReactorClientOptions = Omit<\n AppReactorClientParams,\n \"mode\" | \"module\"\n> & {\n plan?: ReactorClientPlan;\n /** Called only when the plan needs a local reactor. */\n localReactor?: LocalReactorFactory;\n};\n\n/** Builds the local reactor the plan needs, then selects the app's client. */\nexport async function createAppReactorClient(\n options: CreateAppReactorClientOptions,\n) {\n const { localReactor, ...params } = options;\n const plan = options.plan ?? planReactorClient();\n let module: LocalReactorModule | undefined;\n if (plan.needsLocalReactor) {\n if (!localReactor) {\n throw new Error(\n `reactorClient mode \"${plan.mode}\" needs a local reactor; pass localReactor`,\n );\n }\n module = await localReactor(plan);\n }\n const client = await selectAppReactorClient({\n ...params,\n mode: plan.mode,\n module,\n });\n return { plan, module, client };\n}\n\n/**\n * Pick the client for the resolved mode:\n * - `in-process` / `worker`: the local client, router module never loaded.\n * - `router`: the local reactor plus remote backends.\n * - `remote`: a remote-only router — a full IReactorClient that proxies to\n * the Switchboard over GraphQL with NO local reactor (no PGlite).\n */\nexport async function selectAppReactorClient(\n params: AppReactorClientParams,\n): Promise<IReactorClient> {\n if (params.mode === \"remote\") {\n setFullReactorClient(undefined);\n const remote = await buildRemoteOnly(params);\n setFullReactorClient(remote);\n return remote;\n }\n if (params.mode !== \"router\") {\n if (getPHStore()?.fullReactorClient) {\n setFullReactorClient(undefined);\n }\n return requireModule(params).client;\n }\n setFullReactorClient(undefined);\n const routed = await buildRouter(params);\n setFullReactorClient(routed);\n return routed ?? requireModule(params).client;\n}\n\nfunction requireModule(params: AppReactorClientParams): LocalReactorModule {\n if (!params.module) {\n throw new Error(\n `reactorClient mode \"${params.mode}\" needs a local reactor, but none was built`,\n );\n }\n return params.module;\n}\n\n/** A Switchboard that cannot answer must not fail boot: list the tab's drives. */\nexport async function getAppDrives(\n client: IReactorClient,\n local: IReactorClient,\n): Promise<DocumentDriveDocument[]> {\n if (client === local) {\n return getDrives(local);\n }\n try {\n return await getDrives(client);\n } catch (error) {\n logger.warn(\n \"Could not list drives through the router; listing the local reactor's: @error\",\n error,\n );\n return getDrives(local);\n }\n}\n\nexport async function refreshAppDrives(\n client: IReactorClient,\n local: IReactorClient,\n): Promise<void> {\n if (client === local) {\n return refreshReactorDataClient(client);\n }\n setDrives(await getAppDrives(client, local));\n}\n\nasync function buildRouter(\n params: AppReactorClientParams,\n): Promise<IReactorClient | undefined> {\n if (!params.remoteDriveUrl) {\n logger.warn(\n \"multiReactor is on but no remote drive URL is configured; using the local reactor only\",\n );\n return undefined;\n }\n let multiReactor: MultiReactorModule;\n try {\n multiReactor = await (params.loadRouter ?? loadMultiReactor)();\n } catch (error) {\n logger.error(\"Could not load the multi-reactor router: @error\", error);\n return undefined;\n }\n const remoteGraphqlUrl = multiReactor.deriveSwitchboardGraphqlUrl(\n params.remoteDriveUrl,\n );\n if (!remoteGraphqlUrl) {\n logger.warn(\n \"multiReactor is on but the remote drive URL @url does not parse; using the local reactor only\",\n params.remoteDriveUrl,\n );\n return undefined;\n }\n logger.info(\"Multi-reactor routing to @url\", remoteGraphqlUrl);\n return multiReactor.buildMultiReactorClient({\n module: requireModule(params),\n remoteGraphqlUrl,\n signer: params.signer,\n documentModelModules: params.documentModelModules,\n });\n}\n\n/**\n * The `remote` mode: a remote-only router — a full IReactorClient that proxies\n * to the Switchboard over GraphQL with NO local backend, so no local reactor\n * and no PGlite are ever built. A missing/unparseable remote URL is a hard\n * config error here (unlike `router`, there is no local reactor to fall back\n * to).\n */\nasync function buildRemoteOnly(\n params: AppReactorClientParams,\n): Promise<IReactorClient> {\n if (!params.remoteDriveUrl) {\n throw new Error(\n 'reactorClient \"remote\" needs a remote drive URL — declare a remote backend / default drive the client can proxy to',\n );\n }\n const multiReactor = await (params.loadRouter ?? loadMultiReactor)();\n const remoteGraphqlUrl = multiReactor.deriveSwitchboardGraphqlUrl(\n params.remoteDriveUrl,\n );\n if (!remoteGraphqlUrl) {\n throw new Error(\n `reactorClient \"remote\": the remote drive URL \"${params.remoteDriveUrl}\" does not resolve to a Switchboard GraphQL endpoint`,\n );\n }\n logger.info(\"Remote reactor client → @url\", remoteGraphqlUrl);\n return multiReactor.buildMultiReactorClient({\n module: undefined,\n remoteGraphqlUrl,\n signer: params.signer,\n documentModelModules: params.documentModelModules,\n });\n}\n","import type { PHStore } from \"@powerhousedao/reactor-browser\";\nimport {\n bindPHStoreToWindow,\n createPHStore,\n getActivePHStore,\n} from \"@powerhousedao/reactor-browser\";\n\n/** The app's PH store: the active one, else a new one bound to `window.ph`.\n * Values set on `window.ph` before carry over. */\nexport function getConnectPHStore(): PHStore {\n const active = getActivePHStore();\n if (active) return active;\n const store = createPHStore();\n bindPHStoreToWindow(store);\n return store;\n}\n","import type { DocumentModelLib } from \"document-model\";\n\n/** A module namespace, as `import * as pkg` or Vite HMR hands it over. */\nexport type ModuleNamespace = Record<string, any> & {\n [Symbol.toStringTag]: \"Module\";\n};\n\nexport type LocalPackage = DocumentModelLib<any> | ModuleNamespace;\n\n/** The package itself, or a loader (`() => import(\"./index.js\")`) that keeps it off the boot path. */\nexport type LocalPackageSource = LocalPackage | (() => Promise<LocalPackage>);\n\n/** Starts loading the project's package; a loader runs once, here. */\nexport function loadLocalPackage(\n source: LocalPackageSource | undefined,\n): DocumentModelLib | Promise<DocumentModelLib> | undefined {\n const pkg = (typeof source === \"function\" ? source() : source) as\n | DocumentModelLib\n | Promise<DocumentModelLib>\n | undefined;\n // Consumers await it; this only stops an early rejection being reported as unhandled.\n if (pkg instanceof Promise) pkg.catch(() => undefined);\n return pkg;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-config-D3YPhYyj.d.ts","names":[],"sources":["../src/runtime/runtime-config.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"runtime-config-D3YPhYyj.d.ts","names":[],"sources":["../src/runtime/runtime-config.ts"],"mappings":";;;KAgBY;;;EAGV,gBAAgB,QAAQ,eAAe;;iBAGnB,kBACpB,UAAS,2BACR,QAAQ;;;;;iBAiDK,oBAAoB;;iBAKpB,mBAAmB,QAAQ"}
|
package/dist/runtime-config.js
CHANGED
|
@@ -2,25 +2,25 @@ import { t as getConnectRegistry } from "./registry-DCZHBP7M.js";
|
|
|
2
2
|
import { ConfigLoader } from "@powerhousedao/shared/connect/config-loader";
|
|
3
3
|
import { JsonConfigAdapter } from "@powerhousedao/shared/connect/json-adapter";
|
|
4
4
|
//#region src/runtime/runtime-config.ts
|
|
5
|
-
const loader = () => getConnectRegistry().runtimeConfig ??= new ConfigLoader(new JsonConfigAdapter({ path: `${import.meta.env
|
|
5
|
+
const loader = () => getConnectRegistry().runtimeConfig ??= new ConfigLoader(new JsonConfigAdapter({ path: `${import.meta.env?.BASE_URL ?? "/"}powerhouse.config.json` }));
|
|
6
6
|
async function loadRuntimeConfig(options = {}) {
|
|
7
|
-
const pluginHost = options.plugins ? import("./plugin-host-
|
|
7
|
+
const pluginHost = options.plugins ? import("./plugin-host-BSFfhXpz.js").then((n) => n.r).then(async (host) => {
|
|
8
8
|
host.registerConnectPlugins(options.plugins);
|
|
9
9
|
await host.knownPlugins();
|
|
10
10
|
return host;
|
|
11
11
|
}) : void 0;
|
|
12
|
-
const pluginUi = options.plugins ? import("./plugin-ui-
|
|
12
|
+
const pluginUi = options.plugins ? import("./plugin-ui-sO7AJLHj.js").then((n) => n.a) : void 0;
|
|
13
13
|
pluginHost?.catch(() => void 0);
|
|
14
14
|
pluginUi?.catch(() => void 0);
|
|
15
15
|
const config = await loader().read();
|
|
16
16
|
if (config.connect?.composition) {
|
|
17
|
-
const { isRuntimeFlagEnabled } = await import("./runtime-flag-
|
|
17
|
+
const { isRuntimeFlagEnabled } = await import("./runtime-flag-CJWngtxE.js").then((n) => n.r);
|
|
18
18
|
if (isRuntimeFlagEnabled({
|
|
19
19
|
queryKey: "pluginRunner",
|
|
20
20
|
storageKey: "ph:flag:pluginRunner",
|
|
21
21
|
readConfigFlag: () => true
|
|
22
22
|
})) {
|
|
23
|
-
const { applyComposition } = await pluginHost ?? await import("./plugin-host-
|
|
23
|
+
const { applyComposition } = await pluginHost ?? await import("./plugin-host-BSFfhXpz.js").then((n) => n.r);
|
|
24
24
|
config.connect = await applyComposition(config.connect);
|
|
25
25
|
loader().prime(config);
|
|
26
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-config.js","names":[],"sources":["../src/runtime/runtime-config.ts"],"sourcesContent":["// Narrow subpaths: the shared/connect barrel puts zod and semver on the boot path.\nimport type { RuntimePowerhouseConfig } from \"@powerhousedao/shared/connect\";\nimport { ConfigLoader } from \"@powerhousedao/shared/connect/config-loader\";\nimport { JsonConfigAdapter } from \"@powerhousedao/shared/connect/json-adapter\";\nimport type { ConnectPluginDefinition } from \"../plugins/types.js\";\nimport { getConnectRegistry } from \"../registry.js\";\n\n// Shared and made on first use: the app's boot copy makes it, with the app's base.\nconst loader = () =>\n (getConnectRegistry().runtimeConfig ??= new ConfigLoader(\n new JsonConfigAdapter({\n path: `${import.meta.env
|
|
1
|
+
{"version":3,"file":"runtime-config.js","names":[],"sources":["../src/runtime/runtime-config.ts"],"sourcesContent":["// Narrow subpaths: the shared/connect barrel puts zod and semver on the boot path.\nimport type { RuntimePowerhouseConfig } from \"@powerhousedao/shared/connect\";\nimport { ConfigLoader } from \"@powerhousedao/shared/connect/config-loader\";\nimport { JsonConfigAdapter } from \"@powerhousedao/shared/connect/json-adapter\";\nimport type { ConnectPluginDefinition } from \"../plugins/types.js\";\nimport { getConnectRegistry } from \"../registry.js\";\n\n// Shared and made on first use: the app's boot copy makes it, with the app's base.\nconst loader = () =>\n (getConnectRegistry().runtimeConfig ??= new ConfigLoader(\n new JsonConfigAdapter({\n // Optional: Node runs this file untransformed when it prerenders the shell.\n path: `${import.meta.env?.BASE_URL ?? \"/\"}powerhouse.config.json`,\n }),\n ));\n\nexport type LoadRuntimeConfigOptions = {\n /** The host's plugin modules: the composition's transform the config, and\n * the active ones' UI loads (every one's without a composition). */\n plugins?: () => Promise<Record<string, ConnectPluginDefinition>>;\n};\n\nexport async function loadRuntimeConfig(\n options: LoadRuntimeConfigOptions = {},\n): Promise<RuntimePowerhouseConfig> {\n // Beside the config's fetch: the plugin modules and the UI loader don't\n // depend on it; only which plugins' UI loads does.\n const pluginHost = options.plugins\n ? import(\"../plugins/plugin-host.js\").then(async (host) => {\n host.registerConnectPlugins(options.plugins!);\n await host.knownPlugins();\n return host;\n })\n : undefined;\n const pluginUi = options.plugins\n ? import(\"../plugins/plugin-ui.js\")\n : undefined;\n // Handled here so a failed config read doesn't leave them unhandled.\n void pluginHost?.catch(() => undefined);\n void pluginUi?.catch(() => undefined);\n const config = (await loader().read()) as RuntimePowerhouseConfig;\n // R3: a served composition (projected from host.js runner.plugins by the\n // uniform-runners connect runner) runs the plugin pipeline over the config\n // BEFORE the cache warms — every downstream consumer sees the transformed\n // config through the classic paths. Runtime-flagged (query/stored override\n // beats the composition's own presence acting as the config flag); no\n // composition = classic boot, byte-identical.\n if (config.connect?.composition) {\n const { isRuntimeFlagEnabled } = await import(\"./runtime-flag.js\");\n const enabled = isRuntimeFlagEnabled({\n queryKey: \"pluginRunner\",\n storageKey: \"ph:flag:pluginRunner\",\n readConfigFlag: () => true,\n });\n if (enabled) {\n const { applyComposition } =\n (await pluginHost) ?? (await import(\"../plugins/plugin-host.js\"));\n config.connect = await applyComposition(config.connect);\n loader().prime(config);\n }\n }\n if (pluginHost && pluginUi) {\n await pluginHost;\n const { loadConnectPluginUi } = await pluginUi;\n await loadConnectPluginUi(config.connect.composition);\n }\n return config;\n}\n\n/**\n * Returns the cached config synchronously.\n * Must be called after `loadRuntimeConfig()` has resolved.\n */\nexport function getRuntimeConfig(): RuntimePowerhouseConfig {\n return loader().getCached() as RuntimePowerhouseConfig;\n}\n\n/** Warms the cache with `config` without a fetch, e.g. in a test or an embedding app. */\nexport function primeRuntimeConfig(config: RuntimePowerhouseConfig) {\n loader().prime(config);\n}\n"],"mappings":";;;;AAQA,MAAM,eACH,mBAAmB,CAAC,CAAC,kBAAkB,IAAI,aAC1C,IAAI,kBAAkB,EAEpB,MAAM,GAAG,YAAY,KAAK,YAAY,IAAI,wBAC5C,CAAC,CACH;AAQF,eAAsB,kBACpB,UAAoC,CAAC,GACH;CAGlC,MAAM,aAAa,QAAQ,UACvB,OAAO,4BAA4B,CAAA,MAAA,MAAA,EAAA,CAAA,CAAA,CAAC,KAAK,OAAO,SAAS;EACvD,KAAK,uBAAuB,QAAQ,OAAQ;EAC5C,MAAM,KAAK,aAAa;EACxB,OAAO;CACT,CAAC,IACD,KAAA;CACJ,MAAM,WAAW,QAAQ,UACrB,OAAO,0BAA0B,CAAA,MAAA,MAAA,EAAA,CAAA,IACjC,KAAA;CAEJ,YAAiB,YAAY,KAAA,CAAS;CACtC,UAAe,YAAY,KAAA,CAAS;CACpC,MAAM,SAAU,MAAM,OAAO,CAAC,CAAC,KAAK;CAOpC,IAAI,OAAO,SAAS,aAAa;EAC/B,MAAM,EAAE,yBAAyB,MAAM,OAAO,6BAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EAMlE,IALgB,qBAAqB;GACnC,UAAU;GACV,YAAY;GACZ,sBAAsB;EACxB,CACU,GAAG;GACX,MAAM,EAAE,qBACL,MAAM,cAAgB,MAAM,OAAO,4BAA4B,CAAA,MAAA,MAAA,EAAA,CAAA;GAClE,OAAO,UAAU,MAAM,iBAAiB,OAAO,OAAO;GACtD,OAAO,CAAC,CAAC,MAAM,MAAM;EACvB;CACF;CACA,IAAI,cAAc,UAAU;EAC1B,MAAM;EACN,MAAM,EAAE,wBAAwB,MAAM;EACtC,MAAM,oBAAoB,OAAO,QAAQ,WAAW;CACtD;CACA,OAAO;AACT;;;;;AAMA,SAAgB,mBAA4C;CAC1D,OAAO,OAAO,CAAC,CAAC,UAAU;AAC5B;;AAGA,SAAgB,mBAAmB,QAAiC;CAClE,OAAO,CAAC,CAAC,MAAM,MAAM;AACvB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { O as __exportAll } from "./views-
|
|
1
|
+
import { O as __exportAll } from "./views-CAbBIFzO.js";
|
|
2
2
|
//#region src/runtime/runtime-flag.ts
|
|
3
3
|
var runtime_flag_exports = /* @__PURE__ */ __exportAll({
|
|
4
4
|
isRuntimeFlagEnabled: () => isRuntimeFlagEnabled,
|
|
@@ -44,4 +44,4 @@ function parseFlag(value) {
|
|
|
44
44
|
//#endregion
|
|
45
45
|
export { resolveRuntimeFlag as n, runtime_flag_exports as r, isRuntimeFlagEnabled as t };
|
|
46
46
|
|
|
47
|
-
//# sourceMappingURL=runtime-flag-
|
|
47
|
+
//# sourceMappingURL=runtime-flag-CJWngtxE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-flag-
|
|
1
|
+
{"version":3,"file":"runtime-flag-CJWngtxE.js","names":[],"sources":["../src/runtime/runtime-flag.ts"],"sourcesContent":["export type RuntimeFlagInput = {\n configFlag: boolean;\n queryParam?: string | null;\n storedValue?: string | null;\n};\n\n// A query-param override wins, then a stored dev override, then the config flag.\nexport function resolveRuntimeFlag(input: RuntimeFlagInput): boolean {\n const fromQuery = parseFlag(input.queryParam);\n if (fromQuery !== undefined) {\n return fromQuery;\n }\n const fromStore = parseFlag(input.storedValue);\n if (fromStore !== undefined) {\n return fromStore;\n }\n return input.configFlag;\n}\n\nexport type RuntimeFlagKeys = {\n queryKey: string;\n storageKey: string;\n readConfigFlag: () => boolean;\n};\n\n// Effective flag from config + dev override; a query-param override is persisted\n// to localStorage so it survives a refresh. Blocked storage reads as no override.\nexport function isRuntimeFlagEnabled(keys: RuntimeFlagKeys): boolean {\n const configFlag = keys.readConfigFlag();\n if (typeof window === \"undefined\") {\n return configFlag;\n }\n const queryParam = new URLSearchParams(window.location.search).get(\n keys.queryKey,\n );\n const storedValue = readStoredValue(keys.storageKey);\n const enabled = resolveRuntimeFlag({ configFlag, queryParam, storedValue });\n // Persist only an explicit override, not an unrecognized value.\n if (parseFlag(queryParam) !== undefined) {\n persistStoredValue(keys.storageKey, enabled);\n }\n return enabled;\n}\n\nfunction readStoredValue(storageKey: string): string | null {\n try {\n return window.localStorage.getItem(storageKey);\n } catch {\n return null;\n }\n}\n\nfunction persistStoredValue(storageKey: string, enabled: boolean): void {\n try {\n window.localStorage.setItem(storageKey, enabled ? \"true\" : \"false\");\n } catch {\n // The override still applies for this page load.\n }\n}\n\nfunction parseFlag(value: string | null | undefined): boolean | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\") {\n return false;\n }\n // Unrecognized value (e.g. a typo): no override, fall through to store/config.\n return undefined;\n}\n"],"mappings":";;;;;;AAOA,SAAgB,mBAAmB,OAAkC;CACnE,MAAM,YAAY,UAAU,MAAM,UAAU;CAC5C,IAAI,cAAc,KAAA,GAChB,OAAO;CAET,MAAM,YAAY,UAAU,MAAM,WAAW;CAC7C,IAAI,cAAc,KAAA,GAChB,OAAO;CAET,OAAO,MAAM;AACf;AAUA,SAAgB,qBAAqB,MAAgC;CACnE,MAAM,aAAa,KAAK,eAAe;CACvC,IAAI,OAAO,WAAW,aACpB,OAAO;CAET,MAAM,aAAa,IAAI,gBAAgB,OAAO,SAAS,MAAM,CAAC,CAAC,IAC7D,KAAK,QACP;CAEA,MAAM,UAAU,mBAAmB;EAAE;EAAY;EAAY,aADzC,gBAAgB,KAAK,UAC8B;CAAE,CAAC;CAE1E,IAAI,UAAU,UAAU,MAAM,KAAA,GAC5B,mBAAmB,KAAK,YAAY,OAAO;CAE7C,OAAO;AACT;AAEA,SAAS,gBAAgB,YAAmC;CAC1D,IAAI;EACF,OAAO,OAAO,aAAa,QAAQ,UAAU;CAC/C,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,mBAAmB,YAAoB,SAAwB;CACtE,IAAI;EACF,OAAO,aAAa,QAAQ,YAAY,UAAU,SAAS,OAAO;CACpE,QAAQ,CAER;AACF;AAEA,SAAS,UAAU,OAAuD;CACxE,IAAI,UAAU,QAAQ,UAAU,KAAA,GAC9B;CAEF,MAAM,aAAa,MAAM,KAAK,CAAC,CAAC,YAAY;CAC5C,IAAI,eAAe,UAAU,eAAe,KAC1C,OAAO;CAET,IAAI,eAAe,WAAW,eAAe,KAC3C,OAAO;AAIX"}
|
package/dist/runtime.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getRuntimeConfig, loadRuntimeConfig, primeRuntimeConfig } from "./runtime-config.js";
|
|
2
|
-
import { n as resolveRuntimeFlag, t as isRuntimeFlagEnabled } from "./runtime-flag-
|
|
3
|
-
import { a as planReactorClient, c as resolveReactorClientMode, d as isReactorWorkerEnabled, f as resolveReactorWorkerEnabled, i as getAppDrives, l as REACTOR_WORKER_QUERY_KEY, n as getConnectPHStore, o as refreshAppDrives, p as isMultiReactorEnabled, r as createAppReactorClient, s as selectAppReactorClient, t as loadLocalPackage, u as REACTOR_WORKER_STORAGE_KEY } from "./runtime-
|
|
2
|
+
import { n as resolveRuntimeFlag, t as isRuntimeFlagEnabled } from "./runtime-flag-CJWngtxE.js";
|
|
3
|
+
import { a as planReactorClient, c as resolveReactorClientMode, d as isReactorWorkerEnabled, f as resolveReactorWorkerEnabled, i as getAppDrives, l as REACTOR_WORKER_QUERY_KEY, n as getConnectPHStore, o as refreshAppDrives, p as isMultiReactorEnabled, r as createAppReactorClient, s as selectAppReactorClient, t as loadLocalPackage, u as REACTOR_WORKER_STORAGE_KEY } from "./runtime-Y9B9UJK1.js";
|
|
4
4
|
import { getIsEmbedded, useIsEmbedded } from "./embedded.js";
|
|
5
5
|
export { REACTOR_WORKER_QUERY_KEY, REACTOR_WORKER_STORAGE_KEY, createAppReactorClient, getAppDrives, getConnectPHStore, getIsEmbedded, getRuntimeConfig, isMultiReactorEnabled, isReactorWorkerEnabled, isRuntimeFlagEnabled, loadLocalPackage, loadRuntimeConfig, planReactorClient, primeRuntimeConfig, refreshAppDrives, resolveReactorClientMode, resolveReactorWorkerEnabled, resolveRuntimeFlag, selectAppReactorClient, useIsEmbedded };
|