revojs 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,13 +2,15 @@ import type { Template } from "../html";
2
2
  export type NestedPartial<T> = Partial<{
3
3
  [K in keyof T]: T[K] extends object ? NestedPartial<T[K]> : T[K];
4
4
  }>;
5
- export type AssetConfig = {
6
- path: string;
7
- suffix?: string;
8
- import?: string;
5
+ export type StaticContent = {
6
+ type: "static";
7
+ source: string;
8
+ include: Array<string>;
9
9
  };
10
- export type RouteConfig = {
11
- path: string;
10
+ export type AssetContent = {
11
+ type: "asset";
12
+ source: string;
13
+ include: Array<string>;
12
14
  };
13
15
  export type ServerEntry = "revojs/presets/node" | "revojs/presets/deno" | "revojs/presets/bun" | "revojs/presets/cloudflare" | (string & {});
14
16
  export type ClientConfig = {
@@ -18,15 +20,14 @@ export type ServerConfig = {
18
20
  entry: ServerEntry;
19
21
  };
20
22
  export type Config = {
21
- assets: Array<AssetConfig>;
22
- routes: Array<RouteConfig>;
23
23
  client: ClientConfig;
24
24
  server: ServerConfig;
25
+ content: Record<string, StaticContent | AssetContent>;
25
26
  markdown: Record<string, Template>;
26
27
  };
27
28
  export type App = {
28
29
  config: Config;
29
30
  virtuals: Record<string, () => string>;
30
31
  };
31
- export declare const getAssets: <T>(regex: RegExp) => Promise<Record<string, () => Promise<T>>>;
32
+ export declare const getContent: <T>(key: string) => Promise<Record<string, () => Promise<T>>>;
32
33
  export declare const createApp: (config?: NestedPartial<Config>) => App;
package/dist/index.js CHANGED
@@ -2,20 +2,31 @@ import defu, { defu as defu$1 } from "defu";
2
2
  import { h } from "revojs/jsx-runtime";
3
3
 
4
4
  //#region src/app/index.ts
5
- const getAssets = async (regex) => {
6
- const assets = await import("#virtual/assets").then((module) => module.assets);
7
- return Object.entries(assets).reduce((assets$1, [name, value]) => {
8
- if (regex.test(name)) assets$1[name] = value;
9
- return assets$1;
10
- }, {});
5
+ const getContent = async (key) => {
6
+ return await import("#virtual/content").then((module) => module.index[key]);
11
7
  };
12
8
  const createApp = (config) => {
13
9
  return {
14
10
  config: defu$1(config, {
15
- assets: [{ path: "./assets" }],
16
- routes: [{ path: "./routes" }],
17
11
  client: { entry: "./index.html" },
18
12
  server: { entry: "revojs/presets/node" },
13
+ content: {
14
+ static: {
15
+ type: "static",
16
+ source: "./dist/client",
17
+ include: ["**/*.*"]
18
+ },
19
+ routes: {
20
+ type: "asset",
21
+ source: "./routes",
22
+ include: [
23
+ "**/*.js",
24
+ "**/*.ts",
25
+ "**/*.jsx",
26
+ "**/*.tsx"
27
+ ]
28
+ }
29
+ },
19
30
  markdown: {}
20
31
  }),
21
32
  virtuals: {}
@@ -427,18 +438,21 @@ const defineRoute = (route) => {
427
438
  const defineSocket = (socket) => {
428
439
  return socket;
429
440
  };
441
+ const fileName = (path) => {
442
+ return path.split("/").pop()?.split(".").slice(0, -1).join(".");
443
+ };
430
444
  const toPath = (value) => {
431
- return value.replace(/\/index/, "").replace(/\.(js|ts|jsx|tsx)$/, "").replaceAll(/\[(.*)\]/g, (_, name) => ":" + name).padStart(1, "/");
445
+ return value.replace(/\/index/, "").replace(/index/, "").replace(/\.(js|ts|jsx|tsx)$/, "").replaceAll(/\[(.*)\]/g, (_, name) => ":" + name);
432
446
  };
433
447
  const createRuntime = async () => {
434
448
  const radix = new Radix();
435
- const assets = await import("#virtual/assets").then((module) => module.assets);
436
- for (const path in assets) radix.insert("GET" + path, defineRoute({ fetch: async (event) => {
449
+ const assets = await getContent("static");
450
+ for (const path in assets) radix.insert("GET/" + path, defineRoute({ fetch: async (event) => {
437
451
  setHeader(event, "Content-Type", getMimeType(path));
438
452
  return sendText(event, await assets[path]());
439
453
  } }));
440
- const routes = await import("#virtual/routes").then((module) => module.routes);
441
- for (const path in routes) radix.insert("GET" + toPath(path), defineRoute({ fetch: async (event) => {
454
+ const routes = await getContent("routes");
455
+ for (const path in routes) radix.insert("GET/" + toPath(path), defineRoute({ fetch: async (event) => {
442
456
  const route = await routes[path]();
443
457
  if (route) {
444
458
  if ("message" in route) return sendText(event, "WebSocket");
@@ -471,8 +485,8 @@ const Outlet = defineComponent({
471
485
  name: "x-outlet",
472
486
  setup: async () => {
473
487
  const radix = new Radix();
474
- const routes = await import("#virtual/routes").then((module) => module.routes);
475
- for (const path in routes) radix.insert("GET" + toPath(path), routes[path]);
488
+ const routes = await getContent("routes");
489
+ for (const path in routes) radix.insert("/" + toPath(path), routes[path]);
476
490
  const url = createState(new URL(activeEvent ? activeEvent.request.url : window.location.href));
477
491
  if (isClient()) {
478
492
  const controller = new AbortController();
@@ -480,7 +494,7 @@ const Outlet = defineComponent({
480
494
  onCleanUp(() => controller.abort());
481
495
  }
482
496
  return async () => {
483
- const { value, inputs } = radix.match("GET" + url.value.pathname);
497
+ const { value, inputs } = radix.match(url.value.pathname);
484
498
  const Page = await value?.();
485
499
  if (Page) return h(Page, inputs);
486
500
  };
@@ -499,4 +513,4 @@ const anchorNavigate = (event) => {
499
513
  };
500
514
 
501
515
  //#endregion
502
- export { Handler, Outlet, Radix, activeElement, activeEvent, addStyles, anchorNavigate, components, createApp, createCompute, createElement, createEvent, createRuntime, createState, defineComponent, defineRoute, defineSocket, fromValue, getAssets, getGlobalStyles, getMimeType, globalStyles, isClient, isServer, markdownToSlot, navigate, onCleanUp, registerComponent, runCompute, runningCompute, sendHtml, sendJson, sendText, setHeader, slotToNode, slotToString, targets, toCustomElement, toPath, toString };
516
+ export { Handler, Outlet, Radix, activeElement, activeEvent, addStyles, anchorNavigate, components, createApp, createCompute, createElement, createEvent, createRuntime, createState, defineComponent, defineRoute, defineSocket, fileName, fromValue, getContent, getGlobalStyles, getMimeType, globalStyles, isClient, isServer, markdownToSlot, navigate, onCleanUp, registerComponent, runCompute, runningCompute, sendHtml, sendJson, sendText, setHeader, slotToNode, slotToString, targets, toCustomElement, toPath, toString };
@@ -12,6 +12,7 @@ export type Runtime<T = Context> = {
12
12
  };
13
13
  export declare const defineRoute: <T = Context>(route: Route<T>) => Route<T>;
14
14
  export declare const defineSocket: <T = Context>(socket: Socket<T>) => Socket<T>;
15
+ export declare const fileName: (path: string) => string | undefined;
15
16
  export declare const toPath: (value: string) => string;
16
17
  export declare const createRuntime: <T = Context>() => Promise<Runtime<T>>;
17
18
  export declare let activeEvent: Event | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "revojs",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "type": "module",
5
5
  "repository": "coverbase/revojs",
6
6
  "license": "MIT",
@@ -30,8 +30,8 @@
30
30
  "defu": "^6.1.4"
31
31
  },
32
32
  "devDependencies": {
33
- "@revojs/tsconfig": "0.0.0",
34
- "@revojs/rolldown": "0.0.0",
33
+ "@revojs/tsconfig": "0.0.1",
34
+ "@revojs/rolldown": "0.0.1",
35
35
  "rolldown": "^1.0.0-beta.1"
36
36
  }
37
37
  }