New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@react-router/cloudflare

Package Overview
Dependencies
Maintainers
1
Versions
214
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@react-router/cloudflare - npm Package Compare versions

Comparing version

to
0.0.0-nightly-ac399b7b3-20250201

CHANGELOG.md

55

dist/index.d.ts

@@ -1,3 +0,52 @@

export { createWorkersKVSessionStorage } from "./sessions/workersKVStorage";
export type { createPagesFunctionHandlerParams, GetLoadContextFunction, RequestHandler, } from "./worker";
export { createPagesFunctionHandler, createRequestHandler } from "./worker";
import { SessionData, SessionStorage, SessionIdStorageStrategy, AppLoadContext, ServerBuild } from 'react-router';
import { CacheStorage } from '@cloudflare/workers-types';
interface WorkersKVSessionStorageOptions {
/**
* The Cookie used to store the session id on the client, or options used
* to automatically create one.
*/
cookie?: SessionIdStorageStrategy["cookie"];
/**
* The KVNamespace used to store the sessions.
*/
kv: KVNamespace;
}
/**
* Creates a SessionStorage that stores session data in the Clouldflare KV Store.
*
* The advantage of using this instead of cookie session storage is that
* KV Store may contain much more data than cookies.
*/
declare function createWorkersKVSessionStorage<Data = SessionData, FlashData = Data>({ cookie, kv, }: WorkersKVSessionStorageOptions): SessionStorage<Data, FlashData>;
/**
* A function that returns the value to use as `context` in route `loader` and
* `action` functions.
*
* You can think of this as an escape hatch that allows you to pass
* environment/platform-specific values through to your loader/action.
*/
type GetLoadContextFunction<Env = unknown, Params extends string = any, Data extends Record<string, unknown> = Record<string, unknown>> = (args: {
request: Request;
context: {
cloudflare: EventContext<Env, Params, Data> & {
cf: EventContext<Env, Params, Data>["request"]["cf"];
ctx: {
waitUntil: EventContext<Env, Params, Data>["waitUntil"];
passThroughOnException: EventContext<Env, Params, Data>["passThroughOnException"];
};
caches: CacheStorage;
};
};
}) => AppLoadContext | Promise<AppLoadContext>;
type RequestHandler<Env = any> = PagesFunction<Env>;
interface createPagesFunctionHandlerParams<Env = any> {
build: ServerBuild | (() => ServerBuild | Promise<ServerBuild>);
getLoadContext?: GetLoadContextFunction<Env>;
mode?: string;
}
declare function createRequestHandler<Env = any>({ build, mode, getLoadContext, }: createPagesFunctionHandlerParams<Env>): RequestHandler<Env>;
declare function createPagesFunctionHandler<Env = any>({ build, getLoadContext, mode, }: createPagesFunctionHandlerParams<Env>): (context: EventContext<Env, any, any>) => Promise<Response>;
export { type GetLoadContextFunction, type RequestHandler, createPagesFunctionHandler, type createPagesFunctionHandlerParams, createRequestHandler, createWorkersKVSessionStorage };
/**
* @react-router/cloudflare v0.0.0-nightly-ac199f437-20241014
* @react-router/cloudflare v0.0.0-nightly-ac399b7b3-20250201
*

@@ -11,13 +11,148 @@ * Copyright (c) Remix Software Inc.

*/
'use strict';
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
Object.defineProperty(exports, '__esModule', { value: true });
// index.ts
var react_router_cloudflare_exports = {};
__export(react_router_cloudflare_exports, {
createPagesFunctionHandler: () => createPagesFunctionHandler,
createRequestHandler: () => createRequestHandler,
createWorkersKVSessionStorage: () => createWorkersKVSessionStorage
});
module.exports = __toCommonJS(react_router_cloudflare_exports);
var workersKVStorage = require('./sessions/workersKVStorage.js');
var worker = require('./worker.js');
// sessions/workersKVStorage.ts
var import_react_router = require("react-router");
function createWorkersKVSessionStorage({
cookie,
kv
}) {
return (0, import_react_router.createSessionStorage)({
cookie,
async createData(data, expires) {
while (true) {
let randomBytes = crypto.getRandomValues(new Uint8Array(8));
let id = [...randomBytes].map((x) => x.toString(16).padStart(2, "0")).join("");
if (await kv.get(id, "json")) {
continue;
}
await kv.put(id, JSON.stringify(data), {
expiration: expires ? Math.round(expires.getTime() / 1e3) : void 0
});
return id;
}
},
async readData(id) {
let session = await kv.get(id);
if (!session) {
return null;
}
return JSON.parse(session);
},
async updateData(id, data, expires) {
await kv.put(id, JSON.stringify(data), {
expiration: expires ? Math.round(expires.getTime() / 1e3) : void 0
});
},
async deleteData(id) {
await kv.delete(id);
}
});
}
exports.createWorkersKVSessionStorage = workersKVStorage.createWorkersKVSessionStorage;
exports.createPagesFunctionHandler = worker.createPagesFunctionHandler;
exports.createRequestHandler = worker.createRequestHandler;
// worker.ts
var import_react_router2 = require("react-router");
function createRequestHandler({
build,
mode,
getLoadContext = ({ context }) => ({
...context,
cloudflare: {
...context.cloudflare,
cf: context.cloudflare.request.cf
}
})
}) {
let handleRequest = (0, import_react_router2.createRequestHandler)(build, mode);
return async (cloudflare) => {
let loadContext = await getLoadContext({
request: cloudflare.request,
context: {
cloudflare: {
...cloudflare,
cf: cloudflare.request.cf,
ctx: {
waitUntil: cloudflare.waitUntil.bind(cloudflare),
passThroughOnException: cloudflare.passThroughOnException.bind(cloudflare)
},
caches
}
}
});
return handleRequest(cloudflare.request, loadContext);
};
}
function createPagesFunctionHandler({
build,
getLoadContext,
mode
}) {
let handleRequest = createRequestHandler({
build,
getLoadContext,
mode
});
let handleFetch = async (context) => {
let response;
context.request.headers.delete("if-none-match");
try {
response = await context.env.ASSETS.fetch(
context.request.url,
context.request.clone()
);
response = response && response.status >= 200 && response.status < 400 ? new Response(response.body, response) : void 0;
} catch {
}
if (!response) {
response = await handleRequest(context);
}
return response;
};
return async (context) => {
try {
return await handleFetch(context);
} catch (error) {
if (process.env.NODE_ENV === "development" && error instanceof Error) {
console.error(error);
return new Response(error.message || error.toString(), {
status: 500
});
}
return new Response("Internal Error", {
status: 500
});
}
};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
createPagesFunctionHandler,
createRequestHandler,
createWorkersKVSessionStorage
});

40

package.json
{
"name": "@react-router/cloudflare",
"version": "0.0.0-nightly-ac199f437-20241014",
"version": "0.0.0-nightly-ac399b7b3-20250201",
"description": "Cloudflare platform abstractions for React Router",

@@ -18,16 +18,39 @@ "bugs": {

".": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
"import": {
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
},
"default": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
}
},
"./package.json": "./package.json"
},
"wireit": {
"build": {
"command": "tsup",
"files": [
"sessions/**",
"*.ts",
"tsconfig.json",
"package.json"
],
"output": [
"dist/**"
]
}
},
"devDependencies": {
"@cloudflare/workers-types": "^4.20230518.0",
"typescript": "^5.1.0",
"react-router": "0.0.0-nightly-ac199f437-20241014"
"tsup": "^8.3.0",
"typescript": "^5.1.6",
"wireit": "0.14.9",
"react-router": "0.0.0-nightly-ac399b7b3-20250201"
},
"peerDependencies": {
"@cloudflare/workers-types": "^4.0.0",
"tsup": "^8.3.0",
"typescript": "^5.1.0",
"react-router": "^0.0.0-nightly-ac199f437-20241014"
"react-router": "^0.0.0-nightly-ac399b7b3-20250201"
},

@@ -40,3 +63,3 @@ "peerDependenciesMeta": {

"engines": {
"node": ">=18.0.0"
"node": ">=20.0.0"
},

@@ -50,5 +73,4 @@ "files": [

"scripts": {
"build": "rollup -c",
"tsc": "tsc"
"build": "wireit"
}
}

@@ -1,7 +0,5 @@

# @react-router/cloudflare
Cloudflare platform abstractions for React Router
Cloudflare platform abstractions for [React Router.](https://reactrouter.com)
```bash
npm install @react-router/cloudflare @cloudflare/workers-types
```