@lunora/nuxt 1.0.0-alpha.3 → 1.0.0-alpha.31

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/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "configKey": "lunora",
3
3
  "name": "@lunora/nuxt",
4
- "version": "1.0.0-alpha.2",
4
+ "version": "1.0.0-alpha.30",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "unknown"
package/dist/module.mjs CHANGED
@@ -1,7 +1,46 @@
1
1
  import { existsSync } from 'node:fs';
2
- import { join } from 'node:path';
2
+ import { join, resolve, dirname } from 'node:path';
3
3
  import { defineNuxtModule, createResolver, addServerHandler, useLogger } from '@nuxt/kit';
4
4
 
5
+ const resolveTildePath = (specifier, rootDirectory, sourceDirectory) => {
6
+ if (specifier.startsWith("~~/")) {
7
+ return join(rootDirectory, specifier.slice(3));
8
+ }
9
+ if (specifier.startsWith("~/")) {
10
+ return join(sourceDirectory, specifier.slice(2));
11
+ }
12
+ if (specifier.startsWith("./") || specifier.startsWith("../")) {
13
+ return join(rootDirectory, specifier);
14
+ }
15
+ return specifier;
16
+ };
17
+
18
+ const JS_EXTENSION_SUFFIX = /\.js$/;
19
+ const lunoraTsSourceResolver = (rootDirectory) => {
20
+ const lunoraDirectory = join(rootDirectory, "lunora");
21
+ return {
22
+ name: "lunora:nitro-ts-source-resolve",
23
+ resolveId: {
24
+ handler(source, importer) {
25
+ if (!source.endsWith(".js")) {
26
+ return void 0;
27
+ }
28
+ let absolute;
29
+ if (source.startsWith("#lunora/")) {
30
+ absolute = join(lunoraDirectory, source.slice("#lunora/".length));
31
+ } else if (source.startsWith(".") && importer !== void 0) {
32
+ absolute = resolve(dirname(importer), source);
33
+ }
34
+ if (absolute === void 0) {
35
+ return void 0;
36
+ }
37
+ const tsSource = absolute.replace(JS_EXTENSION_SUFFIX, ".ts");
38
+ return existsSync(tsSource) ? tsSource : void 0;
39
+ },
40
+ order: "pre"
41
+ }
42
+ };
43
+ };
5
44
  const module$1 = defineNuxtModule({
6
45
  defaults: {
7
46
  appEntry: "~/lunora/server",
@@ -13,14 +52,18 @@ const module$1 = defineNuxtModule({
13
52
  },
14
53
  setup(options, nuxt) {
15
54
  const resolver = createResolver(import.meta.url);
16
- nuxt.options.alias["#lunora/app"] = options.appEntry;
55
+ nuxt.options.alias["#lunora/app"] = resolveTildePath(options.appEntry, nuxt.options.rootDir, nuxt.options.srcDir);
56
+ nuxt.hook("nitro:config", (nitroConfig) => {
57
+ const plugins = [...nitroConfig.rollupConfig?.plugins ?? [], lunoraTsSourceResolver(nuxt.options.rootDir)];
58
+ nitroConfig.rollupConfig = { ...nitroConfig.rollupConfig, plugins };
59
+ });
17
60
  addServerHandler({
18
61
  handler: resolver.resolve("./runtime/server/lunora"),
19
62
  route: `${options.prefix}/**`
20
63
  });
21
- if (!existsSync(join(nuxt.options.rootDir, "exports.cloudflare.ts"))) {
64
+ if (!existsSync(join(nuxt.options.rootDir, "worker.ts"))) {
22
65
  useLogger("@lunora/nuxt").warn(
23
- 'missing exports.cloudflare.ts at the project root \u2014 add `export { ShardDO } from "./lunora/server";` so the SHARD Durable Object is exported from the worker.'
66
+ 'missing worker.ts at the project root \u2014 add a wrapper that re-exports Nitro\'s handler and `ShardDO` (`export { default } from "./.output/server/index.mjs"; export { ShardDO } from "./lunora/server";`) and point wrangler\'s `main` at it, so the SHARD Durable Object is exported from the deployed worker.'
24
67
  );
25
68
  }
26
69
  }
@@ -0,0 +1,24 @@
1
+ import type { ExecutionContextLike } from "@lunora/runtime";
2
+ interface CloudflareEventBag {
3
+ context?: ExecutionContextLike;
4
+ ctx?: ExecutionContextLike;
5
+ env?: Record<string, unknown>;
6
+ }
7
+ interface H3EventLike {
8
+ context?: {
9
+ cloudflare?: CloudflareEventBag;
10
+ };
11
+ req?: {
12
+ runtime?: {
13
+ cloudflare?: CloudflareEventBag;
14
+ };
15
+ };
16
+ }
17
+ interface ResolvedCloudflare {
18
+ ctx?: ExecutionContextLike;
19
+ env?: Record<string, unknown>;
20
+ }
21
+ declare const resolveCloudflare: (event: H3EventLike) => ResolvedCloudflare;
22
+ export type { H3EventLike, ResolvedCloudflare };
23
+ export { resolveCloudflare };
24
+ export { type ExecutionContextLike } from "@lunora/runtime";
@@ -0,0 +1,6 @@
1
+ interface H3RequestNamespace {
2
+ toWebRequest?: unknown;
3
+ }
4
+ declare const resolveWebRequest: (h3: H3RequestNamespace, event: unknown) => Request;
5
+ export type { H3RequestNamespace };
6
+ export { resolveWebRequest };
@@ -0,0 +1,2 @@
1
+ const resolveWebRequest = (h3, event) => typeof h3.toWebRequest === "function" ? h3.toWebRequest(event) : event.req;
2
+ export { resolveWebRequest };
@@ -0,0 +1,8 @@
1
+ import type { ExecutionContextLike } from "@lunora/runtime";
2
+ interface LunoraWorkerLike {
3
+ fetch: (request: Request, env: unknown, context: ExecutionContextLike) => Promise<Response> | Response;
4
+ }
5
+ declare const delegateToLunora: (worker: LunoraWorkerLike, request: Request, env: Record<string, unknown> | undefined, context?: ExecutionContextLike) => Promise<Response>;
6
+ export type { LunoraWorkerLike };
7
+ export { delegateToLunora };
8
+ export { NOOP_EXECUTION_CONTEXT } from "@lunora/runtime";
@@ -1,9 +1,4 @@
1
- const NOOP_EXECUTION_CONTEXT = {
2
- passThroughOnException: () => {
3
- },
4
- waitUntil: () => {
5
- }
6
- };
1
+ import { NOOP_EXECUTION_CONTEXT } from "@lunora/runtime";
7
2
  const delegateToLunora = async (worker, request, env, context) => {
8
3
  if (!env) {
9
4
  return Response.json(
@@ -18,4 +13,5 @@ const delegateToLunora = async (worker, request, env, context) => {
18
13
  }
19
14
  return worker.fetch(request, env, context ?? NOOP_EXECUTION_CONTEXT);
20
15
  };
21
- export { delegateToLunora, NOOP_EXECUTION_CONTEXT };
16
+ export { delegateToLunora };
17
+ export { NOOP_EXECUTION_CONTEXT } from "@lunora/runtime";
@@ -0,0 +1,3 @@
1
+ import * as h3 from "h3";
2
+ declare const _default: h3.EventHandler<h3.EventHandlerRequest, Promise<Response>>;
3
+ export default _default;
@@ -1,9 +1,10 @@
1
- import { defineEventHandler, toWebRequest } from "h3";
1
+ import * as h3 from "h3";
2
2
  import lunoraApp from "#lunora/app";
3
3
  import { resolveCloudflare } from "../cloudflare.js";
4
+ import { resolveWebRequest } from "../h3-request.js";
4
5
  import { delegateToLunora } from "../handler.js";
5
- export default defineEventHandler(async (event) => {
6
+ export default h3.defineEventHandler(async (event) => {
6
7
  const { ctx, env } = resolveCloudflare(event);
7
- const request = toWebRequest(event);
8
+ const request = resolveWebRequest(h3, event);
8
9
  return delegateToLunora(lunoraApp, request, env, ctx);
9
10
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunora/nuxt",
3
- "version": "1.0.0-alpha.3",
3
+ "version": "1.0.0-alpha.31",
4
4
  "description": "Nuxt module for Lunora — single-worker composition (mounts /_lunora/* into Nitro) plus reactive-loader server helpers",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -26,7 +26,7 @@
26
26
  "directory": "packages/nuxt"
27
27
  },
28
28
  "files": [
29
- "dist",
29
+ "./dist",
30
30
  "README.md",
31
31
  "LICENSE.md",
32
32
  "__assets__"
@@ -51,11 +51,12 @@
51
51
  "access": "public"
52
52
  },
53
53
  "dependencies": {
54
- "@lunora/client": "1.0.0-alpha.2",
55
- "@nuxt/kit": "^4.0.0"
54
+ "@lunora/client": "1.0.0-alpha.22",
55
+ "@lunora/runtime": "1.0.0-alpha.27",
56
+ "@nuxt/kit": "^4.4.8"
56
57
  },
57
58
  "peerDependencies": {
58
- "h3": "^1.0.0",
59
+ "h3": "^1.15.0",
59
60
  "nuxt": "^4.0.0"
60
61
  },
61
62
  "peerDependenciesMeta": {