@revojs/cloudflare 0.2.4 → 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 +6 -5
- package/dist/index.js +5 -68
- package/dist/module/index.js +34 -8
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.js +71 -0
- package/dist/types/index.d.ts +6 -0
- package/package.json +11 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
|
7
|
+
export declare function useDurableObjects(scope: Scope): DurableObjects;
|
package/dist/index.js
CHANGED
|
@@ -1,70 +1,7 @@
|
|
|
1
|
-
import "
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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 {
|
|
7
|
+
export { useDurableObjects };
|
package/dist/module/index.js
CHANGED
|
@@ -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
|
-
|
|
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 {
|
|
28
|
-
|
|
29
|
-
|
|
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 };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revojs/cloudflare",
|
|
3
|
-
"version": "0.2.
|
|
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.
|
|
25
|
-
"@cloudflare/workers-types": "^5.
|
|
31
|
+
"@cloudflare/vite-plugin": "^1.62.5",
|
|
32
|
+
"@cloudflare/workers-types": "^5.20261004.1",
|
|
26
33
|
"@revojs/server": "*",
|
|
27
34
|
"revojs": "*",
|
|
28
|
-
"wrangler": "^4.
|
|
35
|
+
"wrangler": "^4.147.0"
|
|
29
36
|
},
|
|
30
37
|
"devDependencies": {
|
|
31
38
|
"@revojs/tsconfig": "*"
|