@revojs/cloudflare 0.1.57 → 0.2.1

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/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { Module } from "revojs";
2
-
3
- //#region src/index.d.ts
4
- declare function cloudflare(): Module;
5
- //#endregion
6
- export { cloudflare };
1
+ import { type ScheduledEvent } from "@cloudflare/workers-types";
2
+ declare const _default: {
3
+ fetch(request: Request, variables: Cloudflare.Env): Promise<Response | undefined>;
4
+ scheduled(event: ScheduledEvent, variables: Cloudflare.Env): Promise<void>;
5
+ };
6
+ export default _default;
package/dist/index.js CHANGED
@@ -1,26 +1,70 @@
1
- import { CLOSE_HOOK, SERVER_CONTEXT, useServer } from "revojs";
2
- import { addTypes, useKit } from "revojs/kit";
3
- import { getPlatformProxy } from "wrangler";
1
+ import "@cloudflare/workers-types";
2
+ import { SCHEDULE_CONTEXT, SERVER_CONTEXT, isResponse, isWebSocket, sendResponse } from "@revojs/server";
3
+ import { VARIABLE_CONTEXT, createScope } from "revojs";
4
4
  //#region src/index.ts
5
- let proxy;
6
- function cloudflare() {
7
- return { setup(app) {
8
- const { fromModule } = useKit(import.meta.url);
9
- app.config.server = fromModule("./runtime/server.js");
10
- app.config.development.middleware.push({ async fetch(scope, next) {
11
- const { request, response } = useServer(scope);
12
- proxy ??= await getPlatformProxy();
13
- scope.setContext(SERVER_CONTEXT, {
5
+ var src_default = {
6
+ async fetch(request, variables) {
7
+ const server = await import("#server").then((module) => module.default);
8
+ const scope = await createScope({ context: {
9
+ [VARIABLE_CONTEXT]: variables,
10
+ [SERVER_CONTEXT]: {
14
11
  states: {},
15
12
  request,
16
- response,
17
- variables: proxy.env
18
- });
19
- return next?.();
13
+ response: { headers: new Headers() }
14
+ }
20
15
  } });
21
- app.registerHook(CLOSE_HOOK, () => proxy?.dispose());
22
- addTypes(app, "cloudflare", () => `import "@cloudflare/workers-types"`);
23
- } };
24
- }
16
+ const result = await server.fetch(scope);
17
+ if (isResponse(result)) return result;
18
+ if (isWebSocket(result)) {
19
+ const [clientSocket, serverSocket] = new WebSocketPair();
20
+ const connection = {
21
+ async send(message) {
22
+ serverSocket.send(message);
23
+ },
24
+ async close(code, reason) {
25
+ serverSocket.close(code, reason);
26
+ }
27
+ };
28
+ serverSocket.addEventListener("open", async () => {
29
+ try {
30
+ await result.open(connection);
31
+ } catch (error) {
32
+ if (error instanceof Error) await result.error(connection, error);
33
+ else throw error;
34
+ }
35
+ });
36
+ serverSocket.addEventListener("message", async (event) => {
37
+ try {
38
+ await result.message(connection, event.data);
39
+ } catch (error) {
40
+ if (error instanceof Error) await result.error(connection, error);
41
+ else throw error;
42
+ }
43
+ });
44
+ serverSocket.addEventListener("error", async (event) => {
45
+ await result.error(connection, event.error);
46
+ });
47
+ serverSocket.addEventListener("close", async (event) => {
48
+ try {
49
+ await result.close(connection, event.code, event.reason);
50
+ } catch (error) {
51
+ if (error instanceof Error) await result.error(connection, error);
52
+ else throw error;
53
+ }
54
+ });
55
+ serverSocket.accept();
56
+ return sendResponse(scope, null, {
57
+ status: 101,
58
+ webSocket: clientSocket
59
+ });
60
+ }
61
+ },
62
+ async scheduled(event, variables) {
63
+ await (await import("#server").then((module) => module.default)).schedule(await createScope({ context: {
64
+ [VARIABLE_CONTEXT]: variables,
65
+ [SCHEDULE_CONTEXT]: { when: event.cron }
66
+ } }));
67
+ }
68
+ };
25
69
  //#endregion
26
- export { cloudflare };
70
+ export { src_default as default };
@@ -0,0 +1,4 @@
1
+ import { type PluginConfig } from "@cloudflare/vite-plugin";
2
+ export type CloudflareConfig = PluginConfig;
3
+ declare const _default: import("revojs/module").Module<"cloudflare", PluginConfig, readonly [import("revojs/module").Module<"server", Record<string, never>, []>]>;
4
+ export default _default;
@@ -0,0 +1,35 @@
1
+ import { cloudflare } from "@cloudflare/vite-plugin";
2
+ import server, { SERVER } from "@revojs/server/module";
3
+ import { readFileSync } from "fs";
4
+ import { addTypes, defineModule, resolvePaths, useModule } from "revojs/module";
5
+ import { mergeObjects, scheduleAliases } from "revojs/shared";
6
+ //#region src/module/index.ts
7
+ var module_default = defineModule({
8
+ name: "cloudflare",
9
+ modules: [server],
10
+ config: () => ({ viteEnvironment: { name: SERVER } }),
11
+ async setup(config) {
12
+ const { fromModule } = useModule(import.meta.url);
13
+ const crons = /* @__PURE__ */ new Set();
14
+ for (const path of resolvePaths(["./schedules/**/*.{js,ts}", "!./schedules/**/*.d.ts"])) {
15
+ const content = readFileSync(path, "utf8");
16
+ for (const match of content.matchAll(SCHEDULE_WHEN_MATCH)) crons.add(scheduleAliases[match[1].trim().toLowerCase()] ?? match[1].trim());
17
+ }
18
+ addTypes(config, "cloudflare", () => `import "@cloudflare/workers-types"`);
19
+ const options = mergeObjects(config.cloudflare, {
20
+ viteEnvironment: { name: SERVER },
21
+ config: {
22
+ main: fromModule("../index.js"),
23
+ assets: { run_worker_first: ["/"] },
24
+ triggers: { crons: [...crons] }
25
+ }
26
+ });
27
+ return { vite: {
28
+ server: { watch: { ignored: ["**/.wrangler/**"] } },
29
+ plugins: [cloudflare(options)]
30
+ } };
31
+ }
32
+ });
33
+ var SCHEDULE_WHEN_MATCH = /when\s*:\s*["'`]([^"'`\n]+)["'`]/g;
34
+ //#endregion
35
+ export { module_default as default };
package/package.json CHANGED
@@ -1,28 +1,31 @@
1
1
  {
2
2
  "name": "@revojs/cloudflare",
3
- "version": "0.1.57",
3
+ "version": "0.2.1",
4
4
  "license": "MIT",
5
- "repository": "tellua/revojs",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/tellua/revojs.git"
8
+ },
6
9
  "files": [
7
10
  "dist"
8
11
  ],
9
12
  "type": "module",
10
- "main": "./dist/index.js",
11
- "module": "./dist/index.js",
12
- "types": "./dist/index.d.ts",
13
13
  "exports": {
14
- ".": {
15
- "types": "./dist/index.d.ts",
16
- "import": "./dist/index.js"
14
+ "./module": {
15
+ "types": "./dist/module/index.d.ts",
16
+ "import": "./dist/module/index.js"
17
17
  }
18
18
  },
19
19
  "scripts": {
20
- "build": "revojs module build"
20
+ "build": "vite build",
21
+ "watch": "vite build --watch"
21
22
  },
22
23
  "dependencies": {
23
- "@cloudflare/workers-types": "^4.20260414.1",
24
+ "@cloudflare/vite-plugin": "^1.54.8",
25
+ "@cloudflare/workers-types": "^5.20260911.1",
26
+ "@revojs/server": "*",
24
27
  "revojs": "*",
25
- "wrangler": "^4.82.2"
28
+ "wrangler": "^4.131.1"
26
29
  },
27
30
  "devDependencies": {
28
31
  "@revojs/tsconfig": "*"
@@ -1,8 +0,0 @@
1
- import { Context } from "revojs";
2
-
3
- //#region src/runtime/server.d.ts
4
- declare const _default: {
5
- fetch(request: Request, variables: Context): Promise<void | Response>;
6
- };
7
- //#endregion
8
- export { _default as default };
@@ -1,15 +0,0 @@
1
- import { SERVER_CONTEXT, Scope } from "revojs";
2
- //#region src/runtime/server.ts
3
- var server_default = { async fetch(request, variables) {
4
- const server = await import("#server").then((module) => module.default);
5
- const scope = new Scope();
6
- scope.setContext(SERVER_CONTEXT, {
7
- states: {},
8
- request,
9
- response: { headers: new Headers() },
10
- variables
11
- });
12
- return await server.fetch(scope);
13
- } };
14
- //#endregion
15
- export { server_default as default };