diff --git a/packages/platforms/deno/package.json b/packages/platforms/deno/package.json new file mode 100644 index 000000000..58de31b45 --- /dev/null +++ b/packages/platforms/deno/package.json @@ -0,0 +1,41 @@ +{ + "name": "@actor-core/deno", + "version": "0.3.0", + "files": [ + "src", + "dist", + "package.json" + ], + "type": "module", + "exports": { + ".": { + "import": { + "types": "./dist/mod.d.ts", + "default": "./dist/mod.js" + }, + "require": { + "types": "./dist/mod.d.cts", + "default": "./dist/mod.cjs" + } + } + }, + "sideEffects": false, + "scripts": { + "build": "tsup src/mod.ts", + "dev": "yarn build --watch", + "check-types": "tsc --noEmit" + }, + "peerDependencies": { + "actor-core": "workspace:*" + }, + "devDependencies": { + "@actor-core/redis": "workspace:*", + "hono": "^4.7.0", + "tsup": "^8.3.6", + "typescript": "^5.5.2" + }, + "dependencies": { + "@types/deno": "^2.0.0", + "dedent": "^1.5.3" + } +} diff --git a/packages/platforms/deno/src/config.ts b/packages/platforms/deno/src/config.ts new file mode 100644 index 000000000..056dca5db --- /dev/null +++ b/packages/platforms/deno/src/config.ts @@ -0,0 +1,8 @@ +import { RedisConfig } from "@actor-core/redis"; + +export interface Config extends RedisConfig { + server?: { + hostname?: string; + port?: number; + }; +} diff --git a/packages/platforms/deno/src/mod.ts b/packages/platforms/deno/src/mod.ts new file mode 100644 index 000000000..1e4250e8b --- /dev/null +++ b/packages/platforms/deno/src/mod.ts @@ -0,0 +1,16 @@ +import { createRouter } from "@actor-core/redis"; +import { upgradeWebSocket } from "hono/deno"; +import type { Config } from "./config"; + +export function serve(config: Config) { + const app = createRouter(config, { + getUpgradeWebSocket: app => { + return upgradeWebSocket; + }, + }); + + Deno.serve({ + hostname: config.server?.hostname ?? "localhost", + port: config.server?.port ?? 8787, + }, app.fetch); +} diff --git a/packages/platforms/deno/tsconfig.json b/packages/platforms/deno/tsconfig.json new file mode 100644 index 000000000..8f47fdccf --- /dev/null +++ b/packages/platforms/deno/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "types": ["deno"], + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src/**/*"] +} diff --git a/packages/platforms/deno/tsup.config.ts b/packages/platforms/deno/tsup.config.ts new file mode 100644 index 000000000..98d9f01e5 --- /dev/null +++ b/packages/platforms/deno/tsup.config.ts @@ -0,0 +1,7 @@ +import defaultConfig from "../../../tsup.base.ts"; +import { defineConfig } from "tsup"; + +export default defineConfig({ + noExternal: ["@actor-core/redis"], + ...defaultConfig +}); diff --git a/packages/platforms/redis/src/mod.ts b/packages/platforms/redis/src/mod.ts index 3ff8676b7..03c27b202 100644 --- a/packages/platforms/redis/src/mod.ts +++ b/packages/platforms/redis/src/mod.ts @@ -1,4 +1,3 @@ export { createRouter } from "./router/mod"; export { RedisConfig } from "./config"; export type { PlatformConfig } from "./platform_config"; -export { createRouter } from "./router/mod"; diff --git a/packages/platforms/supabase/package.json b/packages/platforms/supabase/package.json new file mode 100644 index 000000000..dac1917b2 --- /dev/null +++ b/packages/platforms/supabase/package.json @@ -0,0 +1,37 @@ +{ + "name": "@actor-core/supabase", + "version": "0.3.0", + "files": [ + "src", + "dist", + "package.json" + ], + "type": "module", + "exports": { + ".": { + "import": { + "types": "./dist/mod.d.ts", + "default": "./dist/mod.js" + }, + "require": { + "types": "./dist/mod.d.cts", + "default": "./dist/mod.cjs" + } + } + }, + "sideEffects": false, + "scripts": { + "build": "tsup src/mod.ts", + "dev": "yarn build --watch", + "check-types": "tsc --noEmit" + }, + "peerDependencies": { + "@actor-core/deno": "workspace:*", + "actor-core": "workspace:*" + }, + "devDependencies": { + "hono": "^4.7.0", + "tsup": "^8.3.6", + "typescript": "^5.5.2" + } +} diff --git a/packages/platforms/supabase/src/mod.ts b/packages/platforms/supabase/src/mod.ts new file mode 100644 index 000000000..5292c2e05 --- /dev/null +++ b/packages/platforms/supabase/src/mod.ts @@ -0,0 +1 @@ +export * from "@actor-core/deno"; diff --git a/packages/platforms/supabase/tsconfig.json b/packages/platforms/supabase/tsconfig.json new file mode 100644 index 000000000..accb9677a --- /dev/null +++ b/packages/platforms/supabase/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src/**/*"] +} diff --git a/packages/platforms/supabase/tsup.config.ts b/packages/platforms/supabase/tsup.config.ts new file mode 100644 index 000000000..98d9f01e5 --- /dev/null +++ b/packages/platforms/supabase/tsup.config.ts @@ -0,0 +1,7 @@ +import defaultConfig from "../../../tsup.base.ts"; +import { defineConfig } from "tsup"; + +export default defineConfig({ + noExternal: ["@actor-core/redis"], + ...defaultConfig +}); diff --git a/packages/platforms/supabase/turbo.json b/packages/platforms/supabase/turbo.json new file mode 100644 index 000000000..5eb4ad8b1 --- /dev/null +++ b/packages/platforms/supabase/turbo.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"], + "tasks": { + "build": { + "inputs": ["src/**", "./tsup.config.ts"], + "dependsOn": ["@actor-core/redis#build"] + } + } +} diff --git a/scripts/template_platforms.ts b/scripts/template_platforms.ts index 3a4ed579d..f4438c95b 100644 --- a/scripts/template_platforms.ts +++ b/scripts/template_platforms.ts @@ -28,6 +28,29 @@ interface PlatformOutput { type PlatformConfigFn = (build: PlatformInput) => PlatformOutput; const PLATFORMS: Record = { + supabase: (input) => { + input.packageJson.name += "-supabase"; + input.packageJson.devDependencies = { + "@actor-core/supabase": "workspace:*", + ...input.packageJson.devDependencies, + }; + + const { actorImports, actorList } = buildActorImports(input); + + return { + files: { + "package.json": stringifyJson(input.packageJson), + "src/index.ts": dedent` + import { createHandler } from "@actor-core/supabase" + ${actorImports} + + export default createHandler({ + actors: { ${actorList} } + }); + `, + }, + }; + }, vercel: (input) => { input.packageJson.name += "-vercel"; input.packageJson.devDependencies = { @@ -173,6 +196,36 @@ const PLATFORMS: Record = { }, }; }, + deno: (input) => { + input.packageJson.name += "-deno"; + input.packageJson.devDependencies = { + "@actor-core/deno": "workspace:*", + ...input.packageJson.devDependencies, + }; + input.packageJson.scripts = { + start: "deno run --allow-net src/index.ts", + dev: "deno run --allow-net --watch src/index.ts", + ...input.packageJson.scripts, + }; + + const { actorImports, actorList } = buildActorImports(input); + + const files = { + "package.json": stringifyJson(input.packageJson), + "src/index.ts": dedent` + import { serve } from "@actor-core/deno" + ${actorImports} + + serve({ + actors: { ${actorList} } + }); + `, + }; + + return { + files, + }; + }, bun: (input) => { input.packageJson.name += "-bun"; input.packageJson.devDependencies = { diff --git a/yarn.lock b/yarn.lock index 49d37b1db..dc5db3078 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37,6 +37,21 @@ __metadata: languageName: unknown linkType: soft +"@actor-core/deno@workspace:packages/platforms/deno": + version: 0.0.0-use.local + resolution: "@actor-core/deno@workspace:packages/platforms/deno" + dependencies: + "@actor-core/redis": "workspace:*" + "@types/deno": "npm:^2.0.0" + dedent: "npm:^1.5.3" + hono: "npm:^4.7.0" + tsup: "npm:^8.3.6" + typescript: "npm:^5.5.2" + peerDependencies: + actor-core: "workspace:*" + languageName: unknown + linkType: soft + "@actor-core/nodejs@workspace:*, @actor-core/nodejs@workspace:packages/platforms/nodejs": version: 0.0.0-use.local resolution: "@actor-core/nodejs@workspace:packages/platforms/nodejs" @@ -87,6 +102,19 @@ __metadata: languageName: unknown linkType: soft +"@actor-core/supabase@workspace:packages/platforms/supabase": + version: 0.0.0-use.local + resolution: "@actor-core/supabase@workspace:packages/platforms/supabase" + dependencies: + hono: "npm:^4.7.0" + tsup: "npm:^8.3.6" + typescript: "npm:^5.5.2" + peerDependencies: + "@actor-core/deno": "workspace:*" + actor-core: "workspace:*" + languageName: unknown + linkType: soft + "@actor-core/vercel@workspace:packages/platforms/vercel": version: 0.0.0-use.local resolution: "@actor-core/vercel@workspace:packages/platforms/vercel"