@revojs/cloudflare 0.2.5 → 0.2.6

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,7 @@
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>;
1
+ import type { DurableObjectNamespace } from "@cloudflare/workers-types";
2
+ import { type Scope } from "revojs";
3
+ export type ScreamingSnake<Value extends string> = Value extends `${infer Head}${infer Next}${infer Tail}` ? `${Uppercase<Head>}${Head extends Lowercase<Head> ? (Next extends Lowercase<Next> ? "" : "_") : ""}${ScreamingSnake<`${Next}${Tail}`>}` : Uppercase<Value>;
4
+ export type DurableObjects = {
5
+ [ClassName in keyof typeof import("#durable-objects") as ScreamingSnake<ClassName>]: DurableObjectNamespace<InstanceType<(typeof import("#durable-objects"))[ClassName]>>;
5
6
  };
6
- export default _default;
7
+ export declare function useDurableObjects(scope: Scope): DurableObjects;
package/dist/index.js CHANGED
@@ -1,70 +1,7 @@
1
- import "@cloudflare/workers-types";
2
- import { SCHEDULE_CONTEXT, SERVER_CONTEXT, isResponse, isWebSocket, sendResponse } from "@revojs/server";
3
- import { VARIABLE_CONTEXT, createScope } from "revojs";
1
+ import { useVariables } from "revojs";
4
2
  //#region src/index.ts
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]: {
11
- states: {},
12
- request,
13
- response: { headers: new Headers() }
14
- }
15
- } });
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
- };
3
+ function useDurableObjects(scope) {
4
+ return useVariables(scope);
5
+ }
69
6
  //#endregion
70
- export { src_default as default };
7
+ export { useDurableObjects };
@@ -1,8 +1,8 @@
1
1
  import { cloudflare } from "@cloudflare/vite-plugin";
2
2
  import server, { SERVER } from "@revojs/server/module";
3
3
  import { readFileSync } from "fs";
4
- import { addTypes, defineModule, resolvePaths, useModule } from "revojs/module";
5
- import { mergeObjects, scheduleAliases } from "revojs/shared";
4
+ import { addTypes, defineModule, resolvePaths, resolveSource, useModule } from "revojs/module";
5
+ import { mergeObjects, scheduleAliases, toExportNames } from "revojs/shared";
6
6
  //#region src/module/index.ts
7
7
  var module_default = defineModule({
8
8
  name: "cloudflare",
@@ -15,19 +15,45 @@ var module_default = defineModule({
15
15
  const content = readFileSync(path, "utf8");
16
16
  for (const match of content.matchAll(SCHEDULE_WHEN_MATCH)) crons.add(scheduleAliases[match[1].trim().toLowerCase()] ?? match[1].trim());
17
17
  }
18
- addTypes(config, "cloudflare", () => `import "@cloudflare/workers-types"`);
18
+ const durableObjects = {
19
+ match: [
20
+ "**/*.js",
21
+ "**/*.ts",
22
+ "!*.d.ts"
23
+ ],
24
+ from: ["./durable-objects"],
25
+ format: "named"
26
+ };
27
+ const keys = new Array();
28
+ for (const files of resolveSource(durableObjects).values()) for (const key of files.keys()) keys.push(key);
29
+ const classNames = toExportNames(keys);
30
+ const bindings = classNames.map((className) => ({
31
+ name: className.replace(/([a-z0-9])([A-Z])/g, "$1_$2").toUpperCase(),
32
+ class_name: className
33
+ }));
34
+ const exportsMap = {};
35
+ for (const className of classNames) exportsMap[className] = {
36
+ type: "durable-object",
37
+ storage: "sqlite"
38
+ };
39
+ addTypes(config, "cloudflare", () => `/// <reference types="@cloudflare/workers-types" />`);
19
40
  const options = mergeObjects(config.cloudflare, {
20
41
  viteEnvironment: { name: SERVER },
21
42
  config: {
22
- main: fromModule("../index.js"),
43
+ main: fromModule("../server/index.js"),
23
44
  assets: { run_worker_first: ["/"] },
45
+ durable_objects: { bindings },
46
+ exports: exportsMap,
24
47
  triggers: { crons: [...crons] }
25
48
  }
26
49
  });
27
- return { vite: {
28
- server: { watch: { ignored: ["**/.wrangler/**"] } },
29
- plugins: [cloudflare(options)]
30
- } };
50
+ return {
51
+ sources: { "durable-objects": durableObjects },
52
+ vite: {
53
+ server: { watch: { ignored: ["**/.wrangler/**"] } },
54
+ plugins: [cloudflare(options)]
55
+ }
56
+ };
31
57
  }
32
58
  });
33
59
  var SCHEDULE_WHEN_MATCH = /when\s*:\s*["'`]([^"'`\n]+)["'`]/g;
@@ -0,0 +1,7 @@
1
+ import { type ScheduledEvent } from "@cloudflare/workers-types";
2
+ export * from "#durable-objects";
3
+ declare const _default: {
4
+ fetch(request: Request, variables: Cloudflare.Env): Promise<Response | undefined>;
5
+ scheduled(event: ScheduledEvent, variables: Cloudflare.Env): Promise<void>;
6
+ };
7
+ export default _default;
@@ -0,0 +1,71 @@
1
+ import { VARIABLE_CONTEXT, createScope } from "revojs";
2
+ import "@cloudflare/workers-types";
3
+ import { SCHEDULE_CONTEXT, SERVER_CONTEXT, isResponse, isWebSocket, sendResponse } from "@revojs/server";
4
+ export * from "#durable-objects";
5
+ //#region src/server/index.ts
6
+ var server_default = {
7
+ async fetch(request, variables) {
8
+ const server = await import("#server").then((module) => module.default);
9
+ const scope = await createScope({ context: {
10
+ [VARIABLE_CONTEXT]: variables,
11
+ [SERVER_CONTEXT]: {
12
+ states: {},
13
+ request,
14
+ response: { headers: new Headers() }
15
+ }
16
+ } });
17
+ const result = await server.fetch(scope);
18
+ if (isResponse(result)) return result;
19
+ if (isWebSocket(result)) {
20
+ const [clientSocket, serverSocket] = new WebSocketPair();
21
+ const connection = {
22
+ async send(message) {
23
+ serverSocket.send(message);
24
+ },
25
+ async close(code, reason) {
26
+ serverSocket.close(code, reason);
27
+ }
28
+ };
29
+ serverSocket.addEventListener("open", async () => {
30
+ try {
31
+ await result.open(connection);
32
+ } catch (error) {
33
+ if (error instanceof Error) await result.error(connection, error);
34
+ else throw error;
35
+ }
36
+ });
37
+ serverSocket.addEventListener("message", async (event) => {
38
+ try {
39
+ await result.message(connection, event.data);
40
+ } catch (error) {
41
+ if (error instanceof Error) await result.error(connection, error);
42
+ else throw error;
43
+ }
44
+ });
45
+ serverSocket.addEventListener("error", async (event) => {
46
+ await result.error(connection, event.error);
47
+ });
48
+ serverSocket.addEventListener("close", async (event) => {
49
+ try {
50
+ await result.close(connection, event.code, event.reason);
51
+ } catch (error) {
52
+ if (error instanceof Error) await result.error(connection, error);
53
+ else throw error;
54
+ }
55
+ });
56
+ serverSocket.accept();
57
+ return sendResponse(scope, null, {
58
+ status: 101,
59
+ webSocket: clientSocket
60
+ });
61
+ }
62
+ },
63
+ async scheduled(event, variables) {
64
+ await (await import("#server").then((module) => module.default)).schedule(await createScope({ context: {
65
+ [VARIABLE_CONTEXT]: variables,
66
+ [SCHEDULE_CONTEXT]: { when: event.cron }
67
+ } }));
68
+ }
69
+ };
70
+ //#endregion
71
+ export { server_default as default };
@@ -0,0 +1,6 @@
1
+ declare module "#durable-objects" {
2
+ import type { DurableObject } from "cloudflare:workers";
3
+
4
+ const durableObject: typeof DurableObject;
5
+ export { durableObject };
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@revojs/cloudflare",
3
- "version": "0.2.5",
3
+ "version": "0.2.6",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -10,7 +10,14 @@
10
10
  "dist"
11
11
  ],
12
12
  "type": "module",
13
+ "main": "./dist/index.js",
14
+ "module": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
13
16
  "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "import": "./dist/index.js"
20
+ },
14
21
  "./module": {
15
22
  "types": "./dist/module/index.d.ts",
16
23
  "import": "./dist/module/index.js"
@@ -21,11 +28,11 @@
21
28
  "watch": "vite build --watch"
22
29
  },
23
30
  "dependencies": {
24
- "@cloudflare/vite-plugin": "^1.54.8",
25
- "@cloudflare/workers-types": "^5.20260911.1",
31
+ "@cloudflare/vite-plugin": "^1.62.5",
32
+ "@cloudflare/workers-types": "^5.20261004.1",
26
33
  "@revojs/server": "*",
27
34
  "revojs": "*",
28
- "wrangler": "^4.131.1"
35
+ "wrangler": "^4.147.0"
29
36
  },
30
37
  "devDependencies": {
31
38
  "@revojs/tsconfig": "*"