rwsdk 1.0.0-alpha.20 → 1.0.0-alpha.20-test.20250929150023

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.
Files changed (131) hide show
  1. package/dist/lib/constants.mjs +1 -2
  2. package/dist/lib/e2e/browser.d.mts +1 -1
  3. package/dist/lib/e2e/browser.mjs +3 -4
  4. package/dist/lib/e2e/dev.mjs +1 -1
  5. package/dist/lib/e2e/environment.d.mts +1 -5
  6. package/dist/lib/e2e/environment.mjs +5 -61
  7. package/dist/lib/e2e/index.d.mts +5 -5
  8. package/dist/lib/e2e/index.mjs +5 -5
  9. package/dist/lib/e2e/release.mjs +4 -4
  10. package/dist/lib/e2e/setup.d.mts +1 -1
  11. package/dist/lib/e2e/tarball.d.mts +1 -1
  12. package/dist/lib/e2e/tarball.mjs +3 -3
  13. package/dist/lib/e2e/testHarness.d.mts +1 -1
  14. package/dist/lib/e2e/testHarness.mjs +7 -8
  15. package/dist/lib/getShortName.mjs +1 -2
  16. package/dist/lib/getShortName.test.mjs +2 -2
  17. package/dist/lib/getSrcPaths.js +2 -2
  18. package/dist/lib/hasPkgScript.test.mjs +2 -2
  19. package/dist/lib/jsonUtils.test.mjs +2 -2
  20. package/dist/lib/normalizeModulePath.test.mjs +2 -2
  21. package/dist/lib/setupEnvFiles.mjs +2 -2
  22. package/dist/lib/smokeTests/artifacts.mjs +2 -2
  23. package/dist/lib/smokeTests/browser.d.mts +1 -1
  24. package/dist/lib/smokeTests/browser.mjs +6 -7
  25. package/dist/lib/smokeTests/cleanup.mjs +6 -9
  26. package/dist/lib/smokeTests/codeUpdates.mjs +5 -5
  27. package/dist/lib/smokeTests/development.mjs +2 -2
  28. package/dist/lib/smokeTests/environment.d.mts +2 -3
  29. package/dist/lib/smokeTests/environment.mjs +17 -3
  30. package/dist/lib/smokeTests/release.d.mts +2 -2
  31. package/dist/lib/smokeTests/release.mjs +3 -3
  32. package/dist/lib/smokeTests/reporting.mjs +2 -2
  33. package/dist/lib/smokeTests/runSmokeTests.mjs +4 -4
  34. package/dist/lib/smokeTests/utils.mjs +3 -3
  35. package/dist/lib/testUtils/stubEnvVars.mjs +1 -1
  36. package/dist/runtime/client/client.d.ts +2 -2
  37. package/dist/runtime/client/client.js +2 -2
  38. package/dist/runtime/client/navigation.test.js +1 -1
  39. package/dist/runtime/client/types.d.ts +1 -1
  40. package/dist/runtime/entries/client.d.ts +2 -2
  41. package/dist/runtime/entries/client.js +2 -2
  42. package/dist/runtime/entries/router.d.ts +1 -1
  43. package/dist/runtime/entries/router.js +1 -1
  44. package/dist/runtime/entries/worker.d.ts +5 -5
  45. package/dist/runtime/entries/worker.js +5 -5
  46. package/dist/runtime/imports/worker.js +1 -1
  47. package/dist/runtime/lib/auth/session.js +1 -1
  48. package/dist/runtime/lib/db/DOWorkerDialect.d.ts +1 -1
  49. package/dist/runtime/lib/db/DOWorkerDialect.js +1 -1
  50. package/dist/runtime/lib/db/SqliteDurableObject.js +2 -2
  51. package/dist/runtime/lib/db/index.d.ts +2 -2
  52. package/dist/runtime/lib/db/index.js +2 -2
  53. package/dist/runtime/lib/db/migrations.d.ts +1 -1
  54. package/dist/runtime/lib/db/typeInference/builders/alterTable.d.ts +3 -3
  55. package/dist/runtime/lib/db/typeInference/builders/columnDefinition.d.ts +1 -1
  56. package/dist/runtime/lib/db/typeInference/builders/createTable.d.ts +2 -2
  57. package/dist/runtime/lib/db/typeInference/builders/createView.d.ts +1 -1
  58. package/dist/runtime/lib/db/typeInference/builders/dropTable.d.ts +1 -1
  59. package/dist/runtime/lib/db/typeInference/builders/dropView.d.ts +1 -1
  60. package/dist/runtime/lib/db/typeInference/builders/schema.d.ts +3 -3
  61. package/dist/runtime/lib/db/typeInference/database.d.ts +2 -2
  62. package/dist/runtime/lib/memoizeOnId.test.js +1 -1
  63. package/dist/runtime/lib/realtime/client.js +2 -2
  64. package/dist/runtime/lib/realtime/durableObject.js +1 -1
  65. package/dist/runtime/lib/realtime/protocol.test.js +1 -1
  66. package/dist/runtime/lib/realtime/shared.test.js +1 -1
  67. package/dist/runtime/lib/realtime/validateUpgradeRequest.test.js +1 -1
  68. package/dist/runtime/lib/realtime/worker.js +2 -2
  69. package/dist/runtime/lib/router.d.ts +1 -1
  70. package/dist/runtime/lib/router.test.js +2 -2
  71. package/dist/runtime/lib/rwContext.d.ts +1 -1
  72. package/dist/runtime/lib/turnstile/useTurnstile.js +1 -1
  73. package/dist/runtime/lib/turnstile/verifyTurnstileToken.test.js +1 -1
  74. package/dist/runtime/register/worker.js +1 -1
  75. package/dist/runtime/render/createThenableFromReadableStream.js +1 -1
  76. package/dist/runtime/render/preloads.d.ts +1 -1
  77. package/dist/runtime/render/renderDocumentHtmlStream.js +1 -1
  78. package/dist/runtime/render/renderToStream.d.ts +1 -1
  79. package/dist/runtime/render/renderToStream.js +2 -2
  80. package/dist/runtime/requestInfo/worker.d.ts +1 -1
  81. package/dist/runtime/script.js +1 -1
  82. package/dist/runtime/ssrBridge.d.ts +2 -2
  83. package/dist/runtime/ssrBridge.js +2 -2
  84. package/dist/runtime/worker.d.ts +1 -1
  85. package/dist/runtime/worker.js +3 -3
  86. package/dist/scripts/addon.d.mts +1 -0
  87. package/dist/scripts/addon.mjs +75 -0
  88. package/dist/scripts/debug-sync.mjs +4 -4
  89. package/dist/scripts/ensure-deploy-env.mjs +6 -6
  90. package/dist/scripts/migrate-new.mjs +3 -4
  91. package/dist/scripts/smoke-test.mjs +2 -2
  92. package/dist/scripts/worker-run.mjs +7 -9
  93. package/dist/vite/buildApp.mjs +1 -1
  94. package/dist/vite/checkIsUsingPrisma.test.mjs +1 -1
  95. package/dist/vite/configPlugin.mjs +1 -1
  96. package/dist/vite/createDirectiveLookupPlugin.mjs +1 -1
  97. package/dist/vite/createDirectiveLookupPlugin.test.mjs +2 -2
  98. package/dist/vite/createViteAwareResolver.d.mts +1 -2
  99. package/dist/vite/createViteAwareResolver.mjs +1 -1
  100. package/dist/vite/directiveModulesDevPlugin.mjs +3 -3
  101. package/dist/vite/directiveModulesDevPlugin.test.mjs +2 -2
  102. package/dist/vite/directivesPlugin.mjs +3 -3
  103. package/dist/vite/directivesPlugin.test.mjs +1 -1
  104. package/dist/vite/ensureAliasArray.test.mjs +1 -1
  105. package/dist/vite/findSpecifiers.mjs +1 -1
  106. package/dist/vite/findSpecifiers.test.mjs +2 -2
  107. package/dist/vite/findSsrSpecifiers.mjs +1 -1
  108. package/dist/vite/findSsrSpecifiers.test.mjs +1 -1
  109. package/dist/vite/getViteEsbuild.mjs +1 -1
  110. package/dist/vite/hasDirective.test.mjs +1 -1
  111. package/dist/vite/index.d.mts +1 -1
  112. package/dist/vite/invalidateCacheIfPrismaClientChanged.mjs +2 -2
  113. package/dist/vite/isJsFile.test.mjs +1 -1
  114. package/dist/vite/knownDepsResolverPlugin.d.mts +1 -1
  115. package/dist/vite/knownDepsResolverPlugin.mjs +1 -1
  116. package/dist/vite/linkerPlugin.mjs +2 -2
  117. package/dist/vite/linkerPlugin.test.mjs +1 -1
  118. package/dist/vite/miniflareHMRPlugin.mjs +5 -5
  119. package/dist/vite/miniflareHMRPlugin.test.mjs +1 -1
  120. package/dist/vite/prismaPlugin.mjs +1 -1
  121. package/dist/vite/redwoodPlugin.mjs +16 -16
  122. package/dist/vite/redwoodPlugin.test.mjs +2 -2
  123. package/dist/vite/runDirectivesScan.mjs +6 -5
  124. package/dist/vite/runDirectivesScan.test.mjs +2 -2
  125. package/dist/vite/ssrBridgePlugin.mjs +2 -2
  126. package/dist/vite/transformClientComponents.mjs +2 -2
  127. package/dist/vite/transformClientComponents.test.mjs +1 -1
  128. package/dist/vite/transformJsxScriptTagsPlugin.mjs +1 -1
  129. package/dist/vite/transformJsxScriptTagsPlugin.test.mjs +2 -2
  130. package/dist/vite/transformServerFunctions.mjs +4 -4
  131. package/package.json +7 -2
@@ -1,10 +1,10 @@
1
1
  import "./types/worker";
2
- export * from "../register/worker";
3
- export * from "../worker";
4
2
  export * from "../error";
5
- export * from "../script";
6
3
  export * from "../lib/utils";
4
+ export * from "../register/worker";
5
+ export * from "../render/renderToStream";
6
+ export * from "../render/renderToString";
7
7
  export * from "../requestInfo/types";
8
8
  export * from "../requestInfo/worker";
9
- export * from "../render/renderToString";
10
- export * from "../render/renderToStream";
9
+ export * from "../script";
10
+ export * from "../worker";
@@ -1,6 +1,6 @@
1
- import { requestInfo } from "../requestInfo/worker";
2
1
  import { ssrWebpackRequire as baseSsrWebpackRequire } from "rwsdk/__ssr_bridge";
3
2
  import { memoizeOnId } from "../lib/memoizeOnId";
3
+ import { requestInfo } from "../requestInfo/worker";
4
4
  // @ts-ignore
5
5
  import { useServerLookup } from "virtual:use-server-lookup.js";
6
6
  export const loadServerModule = memoizeOnId(async (id) => {
@@ -1,5 +1,5 @@
1
- import { ErrorResponse } from "../../error";
2
1
  import { env } from "cloudflare:workers";
2
+ import { ErrorResponse } from "../../error";
3
3
  const AUTH_SECRET_KEY = env.AUTH_SECRET_KEY ??
4
4
  (import.meta.env.VITE_IS_DEV_SERVER
5
5
  ? "development-secret-key-do-not-use-in-production"
@@ -1,4 +1,4 @@
1
- import { SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler, Driver, DatabaseConnection, QueryResult } from "kysely";
1
+ import { DatabaseConnection, Driver, QueryResult, SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler } from "kysely";
2
2
  type DOWorkerDialectConfig = {
3
3
  kyselyExecuteQuery: (compiledQuery: {
4
4
  sql: string;
@@ -1,5 +1,5 @@
1
- import debug from "../debug";
2
1
  import { SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler, } from "kysely";
2
+ import debug from "../debug";
3
3
  const log = debug("sdk:db:do-worker-dialect");
4
4
  export class DOWorkerDialect {
5
5
  constructor(config) {
@@ -1,8 +1,8 @@
1
- import { DODialect } from "kysely-do";
2
1
  import { DurableObject } from "cloudflare:workers";
2
+ import { DODialect } from "kysely-do";
3
3
  import { Kysely, ParseJSONResultsPlugin, } from "kysely";
4
- import { createMigrator } from "./index.js";
5
4
  import debug from "../debug.js";
5
+ import { createMigrator } from "./index.js";
6
6
  const log = debug("sdk:do-db");
7
7
  // Base class for Durable Objects that need Kysely database access
8
8
  export class SqliteDurableObject extends DurableObject {
@@ -1,5 +1,5 @@
1
+ export { sql } from "kysely";
2
+ export * from "./createDb.js";
1
3
  export * from "./migrations.js";
2
4
  export * from "./SqliteDurableObject.js";
3
- export * from "./createDb.js";
4
5
  export type * from "./typeInference/database.js";
5
- export { sql } from "kysely";
@@ -1,4 +1,4 @@
1
+ export { sql } from "kysely";
2
+ export * from "./createDb.js";
1
3
  export * from "./migrations.js";
2
4
  export * from "./SqliteDurableObject.js";
3
- export * from "./createDb.js";
4
- export { sql } from "kysely";
@@ -1,4 +1,4 @@
1
- import { Kysely, Migration, Migrator, MigrationProvider } from "kysely";
1
+ import { Kysely, Migration, MigrationProvider, Migrator } from "kysely";
2
2
  /**
3
3
  * A custom MigrationProvider that works with in-memory migrations
4
4
  * rather than reading from files.
@@ -1,7 +1,7 @@
1
- import { SqlToTsType, ExecutedBuilder, AlterOperation, AddColumnOp, DropColumnOp, RenameColumnOp, AlterColumnOp, ModifyColumnOp } from "../utils";
2
- import { ColumnDefinitionBuilder } from "./columnDefinition";
1
+ import { CheckConstraintNode, Expression, ForeignKeyConstraintBuilder, PrimaryKeyConstraintNode, sql, UniqueConstraintNode } from "kysely";
2
+ import { AddColumnOp, AlterColumnOp, AlterOperation, DropColumnOp, ExecutedBuilder, ModifyColumnOp, RenameColumnOp, SqlToTsType } from "../utils";
3
3
  import { AlterColumnBuilderCallback } from "./alterColumn";
4
- import { ForeignKeyConstraintBuilder, Expression, CheckConstraintNode, UniqueConstraintNode, PrimaryKeyConstraintNode, sql } from "kysely";
4
+ import { ColumnDefinitionBuilder } from "./columnDefinition";
5
5
  type DataTypeExpression = string | typeof sql;
6
6
  interface CheckConstraintBuilder {
7
7
  $call<T>(func: (qb: this) => T): T;
@@ -1,4 +1,4 @@
1
- import { Expression, sql, ColumnDefinitionNode } from "kysely";
1
+ import { ColumnDefinitionNode, Expression, sql } from "kysely";
2
2
  type DefaultValueExpression = string | number | boolean | null | typeof sql;
3
3
  export interface ColumnDefinitionBuilder<TType> {
4
4
  autoIncrement(): ColumnDefinitionBuilder<TType>;
@@ -1,6 +1,6 @@
1
- import { SqlToTsType, ExecutedBuilder, Prettify } from "../utils";
1
+ import { CheckConstraintNode, CompiledQuery, CreateTableNode, Expression, ForeignKeyConstraintBuilder, PrimaryKeyConstraintNode, UniqueConstraintNode } from "kysely";
2
+ import { ExecutedBuilder, Prettify, SqlToTsType } from "../utils";
2
3
  import { ColumnDefinitionBuilder } from "./columnDefinition";
3
- import { CompiledQuery, CreateTableNode, Expression, ForeignKeyConstraintBuilder, CheckConstraintNode, UniqueConstraintNode, PrimaryKeyConstraintNode } from "kysely";
4
4
  interface CheckConstraintBuilder {
5
5
  $call<T>(func: (qb: this) => T): T;
6
6
  toOperationNode(): CheckConstraintNode;
@@ -1,5 +1,5 @@
1
+ import { CompiledQuery, CreateViewNode, RawBuilder, SelectQueryBuilder } from "kysely";
1
2
  import { ExecutedBuilder } from "../utils";
2
- import { CreateViewNode, CompiledQuery, SelectQueryBuilder, RawBuilder } from "kysely";
3
3
  export interface CreateViewBuilder<TName extends string, TSchema extends Record<string, any> = {}, TColumns extends string[] = []> {
4
4
  readonly __viewName: TName;
5
5
  readonly __schema: TSchema;
@@ -1,5 +1,5 @@
1
+ import { CompiledQuery, DropTableNode } from "kysely";
1
2
  import { ExecutedBuilder } from "../utils";
2
- import { DropTableNode, CompiledQuery } from "kysely";
3
3
  export interface DropTableBuilder<TName extends string> {
4
4
  readonly __tableName: TName;
5
5
  ifExists(): DropTableBuilder<TName>;
@@ -1,5 +1,5 @@
1
+ import { CompiledQuery, DropViewNode } from "kysely";
1
2
  import { ExecutedBuilder } from "../utils";
2
- import { DropViewNode, CompiledQuery } from "kysely";
3
3
  export interface DropViewBuilder<TName extends string> {
4
4
  readonly __viewName: TName;
5
5
  ifExists(): DropViewBuilder<TName>;
@@ -1,9 +1,9 @@
1
- import { CreateTableBuilder } from "./createTable";
1
+ import { CreateIndexBuilder, CreateSchemaBuilder, CreateTypeBuilder, DropIndexBuilder, DropSchemaBuilder, DropTypeBuilder, KyselyPlugin, RefreshMaterializedViewBuilder } from "kysely";
2
2
  import { AlterTableBuilder } from "./alterTable";
3
- import { DropTableBuilder } from "./dropTable";
3
+ import { CreateTableBuilder } from "./createTable";
4
4
  import { CreateViewBuilder } from "./createView";
5
+ import { DropTableBuilder } from "./dropTable";
5
6
  import { DropViewBuilder } from "./dropView";
6
- import { CreateIndexBuilder, DropIndexBuilder, CreateSchemaBuilder, DropSchemaBuilder, CreateTypeBuilder, DropTypeBuilder, KyselyPlugin, RefreshMaterializedViewBuilder } from "kysely";
7
7
  export interface SchemaBuilder {
8
8
  createTable<TName extends string>(name: TName): CreateTableBuilder<TName, {}>;
9
9
  alterTable<TName extends string>(name: TName): AlterTableBuilder<TName, []>;
@@ -1,9 +1,9 @@
1
1
  import { Kysely } from "kysely";
2
- import { ExecutedBuilder, Prettify, ProcessAlteredTable, UnionToTuple } from "./utils";
3
- import { CreateTableBuilder } from "./builders/createTable";
4
2
  import { AlterTableBuilder } from "./builders/alterTable";
3
+ import { CreateTableBuilder } from "./builders/createTable";
5
4
  import { DropTableBuilder } from "./builders/dropTable";
6
5
  import { SchemaBuilder } from "./builders/schema";
6
+ import { ExecutedBuilder, Prettify, ProcessAlteredTable, UnionToTuple } from "./utils";
7
7
  export interface InferenceBuilder {
8
8
  schema: SchemaBuilder;
9
9
  }
@@ -1,4 +1,4 @@
1
- import { describe, it, expect, vi } from "vitest";
1
+ import { describe, expect, it, vi } from "vitest";
2
2
  import { memoizeOnId } from "./memoizeOnId";
3
3
  describe("memoizeOnId", () => {
4
4
  it("should call the function only once for the same id", () => {
@@ -1,7 +1,7 @@
1
- import { initClient } from "../../client/client";
2
1
  import { createFromReadableStream } from "react-server-dom-webpack/client.browser";
3
- import { MESSAGE_TYPE } from "./shared";
2
+ import { initClient } from "../../client/client";
4
3
  import { packMessage, unpackMessage, } from "./protocol";
4
+ import { MESSAGE_TYPE } from "./shared";
5
5
  const DEFAULT_KEY = "default";
6
6
  export const initRealtimeClient = ({ key = DEFAULT_KEY, handleResponse, } = {}) => {
7
7
  const transport = realtimeTransport({ key, handleResponse });
@@ -1,7 +1,7 @@
1
1
  import { DurableObject } from "cloudflare:workers";
2
+ import { packMessage, unpackMessage, } from "./protocol";
2
3
  import { MESSAGE_TYPE } from "./shared";
3
4
  import { validateUpgradeRequest } from "./validateUpgradeRequest";
4
- import { packMessage, unpackMessage, } from "./protocol";
5
5
  export class RealtimeDurableObject extends DurableObject {
6
6
  constructor(state, env) {
7
7
  super(state, env);
@@ -1,4 +1,4 @@
1
- import { describe, it, expect } from "vitest";
1
+ import { describe, expect, it } from "vitest";
2
2
  import { packMessage, unpackMessage } from "./protocol";
3
3
  import { MESSAGE_TYPE } from "./shared";
4
4
  describe("Realtime Protocol pack/unpack", () => {
@@ -1,4 +1,4 @@
1
- import { describe, it, expect } from "vitest";
1
+ import { describe, expect, it } from "vitest";
2
2
  import { MESSAGE_TYPE } from "./shared";
3
3
  describe("Realtime Shared Constants", () => {
4
4
  it("MESSAGE_TYPE should match snapshot", () => {
@@ -1,4 +1,4 @@
1
- import { describe, it, expect } from "vitest";
1
+ import { describe, expect, it } from "vitest";
2
2
  import { validateUpgradeRequest } from "./validateUpgradeRequest";
3
3
  describe("validateUpgradeRequest", () => {
4
4
  it("should return valid for a correct WebSocket upgrade request", () => {
@@ -1,7 +1,7 @@
1
+ import { env } from "cloudflare:workers";
1
2
  import { route } from "../../entries/router";
2
- import { validateUpgradeRequest } from "./validateUpgradeRequest";
3
3
  import { DEFAULT_REALTIME_KEY } from "./constants";
4
- import { env } from "cloudflare:workers";
4
+ import { validateUpgradeRequest } from "./validateUpgradeRequest";
5
5
  export { renderRealtimeClients } from "./renderRealtimeClients";
6
6
  export const realtimeRoute = (getDurableObjectNamespace) => route("/__realtime", async function ({ request }) {
7
7
  const validation = validateUpgradeRequest(request);
@@ -1,6 +1,6 @@
1
+ import type { Kysely } from "kysely";
1
2
  import React from "react";
2
3
  import { RequestInfo } from "../requestInfo/types";
3
- import type { Kysely } from "kysely";
4
4
  export type DocumentProps<T extends RequestInfo = RequestInfo> = T & {
5
5
  children: React.ReactNode;
6
6
  };
@@ -1,6 +1,6 @@
1
- import { describe, it, expect } from "vitest";
2
1
  import React from "react";
3
- import { matchPath, defineRoutes, route, render, layout, prefix, } from "./router";
2
+ import { describe, expect, it } from "vitest";
3
+ import { defineRoutes, layout, matchPath, prefix, render, route, } from "./router";
4
4
  describe("matchPath", () => {
5
5
  // Test case 1: Static paths
6
6
  it("should match static paths", () => {
@@ -1,5 +1,5 @@
1
- import { type RequestInfo } from "../requestInfo/types.js";
2
1
  import { type Kysely } from "kysely";
2
+ import { type RequestInfo } from "../requestInfo/types.js";
3
3
  export type RwContext = {
4
4
  nonce: string;
5
5
  Document: React.FC<DocumentProps<any>>;
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { useRef, useCallback } from "react";
2
+ import { useCallback, useRef } from "react";
3
3
  export function useTurnstile(siteKey) {
4
4
  const containerRef = useRef(null);
5
5
  const resolverRef = useRef(Promise.withResolvers());
@@ -1,4 +1,4 @@
1
- import { describe, it, expect, vi } from "vitest";
1
+ import { describe, expect, it, vi } from "vitest";
2
2
  import { verifyTurnstileToken } from "./verifyTurnstileToken";
3
3
  describe("verifyTurnstileToken", () => {
4
4
  it("should return true for a successful verification", async () => {
@@ -1,5 +1,5 @@
1
- import { registerServerReference as baseRegisterServerReference, registerClientReference as baseRegisterClientReference, decodeReply, } from "react-server-dom-webpack/server.edge";
2
1
  import { isValidElementType } from "react-is";
2
+ import { registerClientReference as baseRegisterClientReference, registerServerReference as baseRegisterServerReference, decodeReply, } from "react-server-dom-webpack/server.edge";
3
3
  import { getServerModuleExport } from "../imports/worker.js";
4
4
  import { requestInfo } from "../requestInfo/worker.js";
5
5
  export function registerServerReference(action, id, name) {
@@ -1,5 +1,5 @@
1
- import { createModuleMap } from "./createModuleMap.js";
2
1
  import ReactServerDom from "react-server-dom-webpack/client.edge";
2
+ import { createModuleMap } from "./createModuleMap.js";
3
3
  const { createFromReadableStream } = ReactServerDom;
4
4
  export const createThenableFromReadableStream = (stream) => createFromReadableStream(stream, {
5
5
  serverConsumerManifest: {
@@ -1,5 +1,5 @@
1
- import type { RequestInfo } from "../requestInfo/types.js";
2
1
  import type { Manifest, ManifestChunk } from "../lib/manifest.js";
2
+ import type { RequestInfo } from "../requestInfo/types.js";
3
3
  export declare function findScriptForModule(id: string, manifest: Manifest): ManifestChunk | undefined;
4
4
  export declare const Preloads: ({ requestInfo, }: {
5
5
  requestInfo: RequestInfo;
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Preloads } from "./preloads.js";
3
3
  import { Stylesheets } from "./stylesheets.js";
4
- import { renderHtmlStream, createThenableFromReadableStream, } from "rwsdk/__ssr_bridge";
4
+ import { createThenableFromReadableStream, renderHtmlStream, } from "rwsdk/__ssr_bridge";
5
5
  import { stitchDocumentAndAppStreams } from "../lib/stitchDocumentAndAppStreams.js";
6
6
  export const renderDocumentHtmlStream = async ({ rscPayloadStream, Document, requestInfo, shouldSSR, onError, }) => {
7
7
  // Extract the app node from the RSC payload
@@ -1,4 +1,4 @@
1
- import { ReactElement, FC } from "react";
1
+ import { FC, ReactElement } from "react";
2
2
  import { DocumentProps } from "../lib/router";
3
3
  export interface RenderToStreamOptions {
4
4
  Document?: FC<DocumentProps>;
@@ -1,8 +1,8 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
- import { renderToRscStream } from "./renderToRscStream";
3
- import { requestInfo } from "../requestInfo/worker";
4
2
  import { injectRSCPayload } from "rsc-html-stream/server";
3
+ import { requestInfo } from "../requestInfo/worker";
5
4
  import { renderDocumentHtmlStream } from "./renderDocumentHtmlStream";
5
+ import { renderToRscStream } from "./renderToRscStream";
6
6
  export const IdentityDocument = ({ children }) => (_jsx(_Fragment, { children: children }));
7
7
  export const renderToStream = async (element, { ssr: shouldSSR = true, Document = IdentityDocument, injectRSCPayload: shouldInjectRSCPayload = true, onError = () => { }, } = {}) => {
8
8
  let rscStream = renderToRscStream({
@@ -1,4 +1,4 @@
1
- import { RequestInfo, DefaultAppContext } from "./types";
1
+ import { DefaultAppContext, RequestInfo } from "./types";
2
2
  type DefaultRequestInfo = RequestInfo<DefaultAppContext>;
3
3
  export declare const requestInfo: DefaultRequestInfo;
4
4
  export declare function getRequestInfo(): RequestInfo;
@@ -1,5 +1,5 @@
1
- import { defineApp } from "./worker";
2
1
  import { env } from "cloudflare:workers";
2
+ import { defineApp } from "./worker";
3
3
  export const defineScript = (fn) => {
4
4
  const app = defineApp([
5
5
  async () => {
@@ -1,3 +1,3 @@
1
- export { renderHtmlStream } from "./render/renderHtmlStream";
2
1
  export { createThenableFromReadableStream } from "./render/createThenableFromReadableStream";
3
- export { ssrLoadModule, ssrGetModuleExport, ssrWebpackRequire, } from "./imports/ssr";
2
+ export { renderHtmlStream } from "./render/renderHtmlStream";
3
+ export { ssrGetModuleExport, ssrLoadModule, ssrWebpackRequire, } from "./imports/ssr";
@@ -7,6 +7,6 @@
7
7
  // import it through this bridge module, using the bare import path
8
8
  // `rwsdk/__ssr_bridge`. We have bundler logic (ssrBridgePlugin) that looks out
9
9
  // for imports to it.
10
- export { renderHtmlStream } from "./render/renderHtmlStream";
11
10
  export { createThenableFromReadableStream } from "./render/createThenableFromReadableStream";
12
- export { ssrLoadModule, ssrGetModuleExport, ssrWebpackRequire, } from "./imports/ssr";
11
+ export { renderHtmlStream } from "./render/renderHtmlStream";
12
+ export { ssrGetModuleExport, ssrLoadModule, ssrWebpackRequire, } from "./imports/ssr";
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { RequestInfo, DefaultAppContext } from "./requestInfo/types";
2
+ import { DefaultAppContext, RequestInfo } from "./requestInfo/types";
3
3
  import { Route } from "./lib/router";
4
4
  export * from "./requestInfo/types";
5
5
  declare global {
@@ -1,14 +1,14 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { renderDocumentHtmlStream } from "./render/renderDocumentHtmlStream";
3
2
  import { normalizeActionResult } from "./render/normalizeActionResult";
3
+ import { renderDocumentHtmlStream } from "./render/renderDocumentHtmlStream";
4
4
  import { renderToRscStream } from "./render/renderToRscStream";
5
- import { rscActionHandler } from "./register/worker";
6
5
  import { injectRSCPayload } from "rsc-html-stream/server";
7
6
  import { ErrorResponse } from "./error";
7
+ import { rscActionHandler } from "./register/worker";
8
8
  import { getRequestInfo, runWithRequestInfo, runWithRequestInfoOverrides, } from "./requestInfo/worker";
9
+ import { ssrWebpackRequire } from "./imports/worker";
9
10
  import { defineRoutes } from "./lib/router";
10
11
  import { generateNonce } from "./lib/utils";
11
- import { ssrWebpackRequire } from "./imports/worker";
12
12
  export * from "./requestInfo/types";
13
13
  export const defineApp = (routes) => {
14
14
  return {
@@ -0,0 +1 @@
1
+ export declare const addon: () => Promise<void>;
@@ -0,0 +1,75 @@
1
+ import decompress from "decompress";
2
+ import { findUp } from "find-up";
3
+ import { createWriteStream } from "node:fs";
4
+ import fs from "node:fs/promises";
5
+ import os from "node:os";
6
+ import path from "node:path";
7
+ import { Readable } from "node:stream";
8
+ import { pipeline } from "node:stream/promises";
9
+ async function getRwSdkProjectRootDir(cwd) {
10
+ const pnpmWorkspaceYamlPath = await findUp("pnpm-workspace.yaml", { cwd });
11
+ if (pnpmWorkspaceYamlPath) {
12
+ return path.dirname(pnpmWorkspaceYamlPath);
13
+ }
14
+ const packageJsonPath = await findUp("package.json", { cwd });
15
+ if (packageJsonPath) {
16
+ const packageJsonContent = await fs.readFile(packageJsonPath, "utf-8");
17
+ const packageJson = JSON.parse(packageJsonContent);
18
+ if (packageJson.workspaces) {
19
+ return path.dirname(packageJsonPath);
20
+ }
21
+ }
22
+ // If not in a monorepo, assume the current directory is the project root
23
+ return cwd;
24
+ }
25
+ export const addon = async () => {
26
+ const addonName = process.argv[3];
27
+ if (!addonName) {
28
+ console.error("Please specify the addon name.");
29
+ console.error("Usage: rw-scripts addon <addon-name>");
30
+ process.exit(1);
31
+ }
32
+ try {
33
+ const projectRootDir = await getRwSdkProjectRootDir(process.cwd());
34
+ const packageJsonPath = path.resolve(projectRootDir, "package.json");
35
+ const packageJsonContent = await fs.readFile(packageJsonPath, "utf-8");
36
+ const { dependencies, devDependencies } = JSON.parse(packageJsonContent);
37
+ const rwsdkVersion = dependencies?.rwsdk || devDependencies?.rwsdk;
38
+ if (!rwsdkVersion) {
39
+ console.error('Could not find "rwsdk" in your dependencies or devDependencies.');
40
+ process.exit(1);
41
+ }
42
+ const tmpDir = path.resolve(projectRootDir, ".tmp", "addons", addonName);
43
+ await fs.rm(tmpDir, { recursive: true, force: true });
44
+ await fs.mkdir(tmpDir, { recursive: true });
45
+ const downloadUrl = `https://github.com/redwoodjs/sdk/releases/download/${rwsdkVersion}/${addonName}-${rwsdkVersion}.tar.gz`;
46
+ console.log(`Downloading addon "${addonName}" version ${rwsdkVersion}...`);
47
+ const filePath = path.join(os.tmpdir(), `rwsdk-addon-${addonName}-${rwsdkVersion}.tar.gz`);
48
+ const response = await fetch(downloadUrl);
49
+ if (!response.ok) {
50
+ console.error(`Error downloading addon: ${response.statusText}`);
51
+ process.exit(1);
52
+ }
53
+ if (!response.body) {
54
+ console.error(`\nError: Failed to download addon "${addonName}". The response contained no data.`);
55
+ process.exit(1);
56
+ }
57
+ await pipeline(Readable.fromWeb(response.body), createWriteStream(filePath));
58
+ await decompress(filePath, tmpDir);
59
+ console.log();
60
+ console.log("Download complete!");
61
+ console.log(`The addon files are located in: ${path.relative(projectRootDir, tmpDir)}`);
62
+ console.log();
63
+ console.log("To continue, open the step-by-step instructions:");
64
+ const instructionsPath = path.join(tmpDir, "INSTRUCTIONS.md");
65
+ console.log(`code ${instructionsPath}`);
66
+ }
67
+ catch (e) {
68
+ console.error(`Could not download addon "${addonName}". Please check the name and try again.`);
69
+ console.error(e.message);
70
+ process.exit(1);
71
+ }
72
+ };
73
+ if (import.meta.url === new URL(process.argv[1], import.meta.url).href) {
74
+ addon();
75
+ }
@@ -1,9 +1,9 @@
1
- import path from "node:path";
2
- import { fileURLToPath } from "node:url";
1
+ import chokidar from "chokidar";
3
2
  import { $ } from "execa";
4
- import fs from "node:fs/promises";
5
3
  import { existsSync } from "node:fs";
6
- import chokidar from "chokidar";
4
+ import fs from "node:fs/promises";
5
+ import path from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
7
  import { lock } from "proper-lockfile";
8
8
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
9
  const cleanupViteEntries = async (targetDir) => {
@@ -1,13 +1,13 @@
1
- import { $ } from "../lib/$.mjs";
2
- import { readFile, writeFile } from "fs/promises";
3
- import { resolve, basename, join } from "path";
4
1
  import { randomBytes } from "crypto";
2
+ import { pathExists } from "fs-extra";
3
+ import { readFile, writeFile } from "fs/promises";
5
4
  import { glob } from "glob";
6
5
  import { parse as parseJsonc } from "jsonc-parser";
7
- import { uniqueNamesGenerator, adjectives, animals, } from "unique-names-generator";
6
+ import { basename, join, resolve } from "path";
8
7
  import * as readline from "readline";
9
- import { pathExists } from "fs-extra";
10
- import { parseJson, extractAllJson } from "../lib/jsonUtils.mjs";
8
+ import { adjectives, animals, uniqueNamesGenerator, } from "unique-names-generator";
9
+ import { $ } from "../lib/$.mjs";
10
+ import { extractAllJson, parseJson } from "../lib/jsonUtils.mjs";
11
11
  const promptForDeployment = async () => {
12
12
  const rl = readline.createInterface({
13
13
  input: process.stdin,
@@ -1,9 +1,8 @@
1
+ import { mkdirp } from "fs-extra";
2
+ import { readdir, writeFile } from "fs/promises";
1
3
  import snakeCase from "lodash/snakeCase.js";
2
- import { $ } from "../lib/$.mjs";
3
- import { readdir } from "fs/promises";
4
4
  import { resolve } from "path";
5
- import { mkdirp } from "fs-extra";
6
- import { writeFile } from "fs/promises";
5
+ import { $ } from "../lib/$.mjs";
7
6
  const getNextMigrationNumber = async () => {
8
7
  await mkdirp(resolve(process.cwd(), "./migrations"));
9
8
  const files = await readdir(resolve(process.cwd(), "./migrations"));
@@ -1,6 +1,6 @@
1
- import { fileURLToPath } from "url";
2
- import { join } from "path";
3
1
  import debug from "debug";
2
+ import { join } from "path";
3
+ import { fileURLToPath } from "url";
4
4
  import { runSmokeTests } from "../lib/smokeTests/runSmokeTests.mjs";
5
5
  import { isRunningInCI } from "../lib/smokeTests/utils.mjs";
6
6
  // Set up debug logging
@@ -1,15 +1,13 @@
1
- import path from "path";
2
- import { resolve } from "path";
3
- import { writeFile } from "fs/promises";
4
- import { unstable_readConfig } from "wrangler";
5
- import { createServer as createViteServer } from "vite";
6
- import tmp from "tmp-promise";
1
+ import { Lang, parse } from "@ast-grep/napi";
7
2
  import baseDebug from "debug";
8
3
  import enhancedResolve from "enhanced-resolve";
9
- import { readFile } from "fs/promises";
10
- import { Lang, parse } from "@ast-grep/napi";
11
- import { redwood } from "../vite/index.mjs";
4
+ import { readFile, writeFile } from "fs/promises";
5
+ import path, { resolve } from "path";
6
+ import tmp from "tmp-promise";
7
+ import { createServer as createViteServer } from "vite";
8
+ import { unstable_readConfig } from "wrangler";
12
9
  import { findWranglerConfig } from "../lib/findWranglerConfig.mjs";
10
+ import { redwood } from "../vite/index.mjs";
13
11
  const debug = baseDebug("rwsdk:worker-run");
14
12
  export const runWorkerScript = async (relativeScriptPath) => {
15
13
  if (!relativeScriptPath) {
@@ -1,5 +1,5 @@
1
- import { resolve } from "node:path";
2
1
  import debug from "debug";
2
+ import { resolve } from "node:path";
3
3
  import { runDirectivesScan } from "./runDirectivesScan.mjs";
4
4
  const log = debug("rwsdk:vite:build-app");
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { describe, it, expect } from "vitest";
1
+ import { describe, expect, it } from "vitest";
2
2
  import { isUsingPrisma } from "./checkIsUsingPrisma.mjs";
3
3
  describe("isUsingPrisma", () => {
4
4
  it("should return true if prisma client is resolved", () => {
@@ -1,5 +1,5 @@
1
- import path, { resolve } from "node:path";
2
1
  import enhancedResolve from "enhanced-resolve";
2
+ import path, { resolve } from "node:path";
3
3
  import { INTERMEDIATE_SSR_BRIDGE_PATH } from "../lib/constants.mjs";
4
4
  import { buildApp } from "./buildApp.mjs";
5
5
  import { externalModules } from "./constants.mjs";
@@ -1,6 +1,6 @@
1
+ import debug from "debug";
1
2
  import MagicString from "magic-string";
2
3
  import path from "path";
3
- import debug from "debug";
4
4
  import { VENDOR_CLIENT_BARREL_EXPORT_PATH, VENDOR_SERVER_BARREL_EXPORT_PATH, } from "../lib/constants.mjs";
5
5
  export function generateLookupMap({ files, isDev, kind, exportName, }) {
6
6
  const s = new MagicString(`
@@ -1,6 +1,6 @@
1
- import { describe, it, expect } from "vitest";
2
- import { generateLookupMap } from "./createDirectiveLookupPlugin.mjs";
1
+ import { describe, expect, it } from "vitest";
3
2
  import { VENDOR_CLIENT_BARREL_EXPORT_PATH, VENDOR_SERVER_BARREL_EXPORT_PATH, } from "../lib/constants.mjs";
3
+ import { generateLookupMap } from "./createDirectiveLookupPlugin.mjs";
4
4
  describe("generateLookupMap", () => {
5
5
  const files = new Set([
6
6
  "src/app.js",
@@ -1,5 +1,4 @@
1
1
  import resolve, { ResolveOptions } from "enhanced-resolve";
2
- import { ResolvedConfig } from "vite";
3
- import { Environment } from "vite";
2
+ import { Environment, ResolvedConfig } from "vite";
4
3
  export declare const mapViteResolveToEnhancedResolveOptions: (viteConfig: ResolvedConfig, envName: string) => ResolveOptions;
5
4
  export declare const createViteAwareResolver: (viteConfig: ResolvedConfig, environment: Environment) => resolve.ResolveFunctionAsync;
@@ -1,7 +1,7 @@
1
+ import createDebug from "debug";
1
2
  import resolve from "enhanced-resolve";
2
3
  import fs from "fs";
3
4
  import path from "path";
4
- import createDebug from "debug";
5
5
  import { normalizeModulePath } from "../lib/normalizeModulePath.mjs";
6
6
  const debug = createDebug("rwsdk:vite:enhanced-resolve-plugin");
7
7
  // Enhanced-resolve plugin that wraps Vite plugin resolution