Radish alpha
r
rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5
Radicle web interface
Radicle
Git
Support loading config dynamically from `/config.json`
Archived did:key:z6MkmbZi...xmh7 opened 1 year ago

Overlay the build-time configuration provided by node-config with the contents of the /config.json file fetched from the server upon app startup.

14 files changed +36 -13 c132855d 7d313e2e
modified http-client/lib/fetcher.ts
@@ -3,7 +3,7 @@

import type { ZodIssue, ZodType, TypeOf } from "zod";

-
import config from "virtual:config";
+
import config from "@app/lib/config";
import { satisfies } from "compare-versions";

export interface BaseUrl {
modified src/App.svelte
@@ -1,4 +1,5 @@
<script lang="ts">
+
  import * as config from "@app/lib/config";
  import * as router from "@app/lib/router";
  import { unreachable } from "@app/lib/utils";

@@ -27,6 +28,7 @@
  import Error from "@app/views/error/View.svelte";
  import Loading from "@app/components/Loading.svelte";

+
  const configLoaded = config.configLoaded;
  const activeRouteStore = router.activeRouteStore;

  window
@@ -42,6 +44,7 @@
    theme.set(loadTheme());
  }

+
  void config.updateConfig();
  void router.loadFromLocation();

  $: document.documentElement.setAttribute("data-codefont", $codeFont);
@@ -65,7 +68,7 @@
<FullscreenModalPortal />
<Hotkeys />

-
{#if $activeRouteStore.resource === "booting"}
+
{#if $activeRouteStore.resource === "booting" || !$configLoaded}
  <div class="loading">
    <Loading />
  </div>
modified src/components/ErrorMessage.svelte
@@ -2,7 +2,7 @@
  import type { ComponentProps } from "svelte";
  import type { ErrorParam } from "@app/lib/router/definitions";

-
  import config from "virtual:config";
+
  import config from "@app/lib/config";
  import Command from "./Command.svelte";
  import ExternalLink from "./ExternalLink.svelte";
  import IconLarge from "./IconLarge.svelte";
added src/lib/config.ts
@@ -0,0 +1,20 @@
+
import _config from "virtual:config";
+
import { writable } from "svelte/store";
+

+
export const config = Object.assign({}, _config);
+
export const configLoaded = writable<boolean>(false);
+

+
export async function updateConfig(): Promise<void> {
+
  console.log("config(old)", config);
+

+
  const response = await fetch("/config.json");
+
  const data = response.ok ? await response.json() : {};
+
  console.log("config(fetch)", data);
+

+
  Object.assign(config, config, data);
+
  console.log("config(new)", config);
+

+
  configLoaded.set(true);
+
}
+

+
export default config;
modified src/lib/router.ts
@@ -5,7 +5,7 @@ import { get, writable } from "svelte/store";

import * as mutexExecutor from "@app/lib/mutexExecutor";
import * as utils from "@app/lib/utils";
-
import config from "virtual:config";
+
import config from "@app/lib/config";
import {
  repoRouteToPath,
  repoTitle,
modified src/modals/ErrorModal.svelte
@@ -1,5 +1,5 @@
<script lang="ts">
-
  import config from "virtual:config";
+
  import config from "@app/lib/config";

  import Command from "@app/components/Command.svelte";
  import ExternalLink from "@app/components/ExternalLink.svelte";
modified src/views/nodes/SeedSelector.svelte
@@ -4,7 +4,7 @@
  import isEqual from "lodash/isEqual";
  import some from "lodash/some";

-
  import config from "virtual:config";
+
  import config from "@app/lib/config";
  import { HttpdClient } from "@http-client";
  import {
    addBookmark,
modified src/views/nodes/SeedSelector.ts
@@ -5,7 +5,7 @@ import storedWritable from "@app/lib/localStore";
import { array, number, string, object } from "zod";
import { get } from "svelte/store";

-
import config from "virtual:config";
+
import config from "@app/lib/config";

const seedSchema = object({
  hostname: string(),
modified src/views/nodes/router.ts
@@ -1,7 +1,7 @@
import type { BaseUrl, Node, NodeStats } from "@http-client";
import type { ErrorRoute, NotFoundRoute } from "@app/lib/router/definitions";

-
import config from "virtual:config";
+
import config from "@app/lib/config";
import { HttpdClient } from "@http-client";
import { ResponseError, ResponseParseError } from "@http-client/lib/fetcher";
import { baseUrlToString, isLocal } from "@app/lib/utils";
modified src/views/repos/Header/CloneButton.svelte
@@ -1,7 +1,7 @@
<script lang="ts">
  import type { BaseUrl } from "@http-client";

-
  import config from "virtual:config";
+
  import config from "@app/lib/config";
  import { parseRepositoryId } from "@app/lib/utils";

  import Button from "@app/components/Button.svelte";
modified src/views/repos/History.svelte
@@ -9,7 +9,7 @@
  } from "@http-client";
  import type { RepoRoute } from "./router";

-
  import config from "virtual:config";
+
  import config from "@app/lib/config";
  import { HttpdClient } from "@http-client";
  import { baseUrlToString } from "@app/lib/utils";
  import { groupCommits } from "@app/lib/commit";
modified src/views/repos/Share.svelte
@@ -1,5 +1,5 @@
<script lang="ts">
-
  import config from "virtual:config";
+
  import config from "@app/lib/config";
  import debounce from "lodash/debounce";
  import { toClipboard } from "@app/lib/utils";

modified src/views/repos/router.ts
@@ -24,7 +24,7 @@ import type {
} from "@http-client";

import * as Syntax from "@app/lib/syntax";
-
import config from "virtual:config";
+
import config from "@app/lib/config";
import { HttpdClient } from "@http-client";
import { ResponseError, ResponseParseError } from "@http-client/lib/fetcher";
import { cached } from "@app/lib/cache";
modified src/views/users/router.ts
@@ -2,7 +2,7 @@ import type { BaseUrl, NodeIdentity, NodeStats } from "@http-client";
import type { ErrorRoute, NotFoundRoute } from "@app/lib/router/definitions";

import * as utils from "@app/lib/utils";
-
import config from "virtual:config";
+
import config from "@app/lib/config";
import { HttpdClient } from "@http-client";
import { ResponseError, ResponseParseError } from "@http-client/lib/fetcher";
import { handleError } from "@app/views/nodes/error";