Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Commit cab964a

Browse files
committed
Add Miniflare 3 foundations
1 parent 9bbd1a1 commit cab964a

File tree

9 files changed

+632
-0
lines changed

9 files changed

+632
-0
lines changed

.eslintignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
dist
2+
packages/tre/src/runtime/config/sserve-conf.*

packages/tre/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# `@miniflare/tre`
2+
3+
Experimental version of Miniflare powered by the soon-to-be open-sourced Workers
4+
runtime... 👀
5+
6+
> ⚠️ This is currently intended for internal Cloudflare use only.
7+
8+
# Additional Development Setup
9+
10+
1. Copy the open-source runtime binary to `./lib/cfwrkr`
11+
2. Copy the config files `sserve-conf.{capnp,capnp.d.ts,capnp.js,ts}` to
12+
`./src/runtime/config/`

packages/tre/lib/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
*
2+
!.gitignore

packages/tre/package.json

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
{
2+
"name": "@miniflare/tre",
3+
"version": "3.0.0-next.1",
4+
"description": "Fun, full-featured, fully-local simulator for Cloudflare Workers",
5+
"keywords": [
6+
"cloudflare",
7+
"workers",
8+
"worker",
9+
"local",
10+
"cloudworker"
11+
],
12+
"author": "MrBBot <[email protected]>",
13+
"license": "MIT",
14+
"main": "./dist/src/index.js",
15+
"types": "./dist/src/index.d.ts",
16+
"files": [
17+
"dist/src"
18+
],
19+
"engines": {
20+
"node": ">=16.13"
21+
},
22+
"publishConfig": {
23+
"access": "public"
24+
},
25+
"repository": {
26+
"type": "git",
27+
"url": "git+https://github.com/cloudflare/miniflare.git",
28+
"directory": "packages/tre"
29+
},
30+
"bugs": {
31+
"url": "https://github.com/cloudflare/miniflare/issues"
32+
},
33+
"homepage": "https://github.com/cloudflare/miniflare/tree/master/packages/tre#readme",
34+
"volta": {
35+
"extends": "../../package.json"
36+
},
37+
"dependencies": {
38+
"@miniflare/shared": "3.0.0-next.1",
39+
"acorn": "^8.8.0",
40+
"acorn-walk": "^8.2.0",
41+
"capnp-ts": "^0.7.0",
42+
"get-port": "^5.1.1",
43+
"kleur": "^4.1.5",
44+
"stoppable": "^1.1.0",
45+
"zod": "^3.18.0"
46+
},
47+
"devDependencies": {
48+
"@types/debug": "^4.1.7",
49+
"@types/estree": "^1.0.0",
50+
"@types/stoppable": "^1.1.1"
51+
}
52+
}

packages/tre/src/helpers.ts

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import { z } from "zod";
2+
3+
export type Awaitable<T> = T | Promise<T>;
4+
5+
// { a: A, b: B, ... } => A | B | ...
6+
export type ValueOf<T> = T[keyof T];
7+
8+
// A | B | ... => A & B & ... (https://stackoverflow.com/a/50375286)
9+
export type UnionToIntersection<U> = (
10+
U extends any ? (k: U) => void : never
11+
) extends (k: infer I) => void
12+
? I
13+
: never;
14+
15+
export type OptionalZodTypeOf<T extends z.ZodTypeAny | undefined> =
16+
T extends z.ZodTypeAny ? z.TypeOf<T> : undefined;
17+
18+
// https://github.com/colinhacks/zod/blob/59768246aa57133184b2cf3f7c2a1ba5c3ab08c3/README.md?plain=1#L1302-L1317
19+
export const LiteralSchema = z.union([
20+
z.string(),
21+
z.number(),
22+
z.boolean(),
23+
z.null(),
24+
]);
25+
export type Literal = z.infer<typeof LiteralSchema>;
26+
export type Json = Literal | { [key: string]: Json } | Json[];
27+
export const JsonSchema: z.ZodType<Json> = z.lazy(() =>
28+
z.union([LiteralSchema, z.array(JsonSchema), z.record(JsonSchema)])
29+
);
30+
31+
export class MiniflareError<
32+
Code extends string | number = string | number
33+
> extends Error {
34+
constructor(readonly code: Code, message?: string, readonly cause?: Error) {
35+
super(message);
36+
// Restore prototype chain:
37+
// https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget
38+
Object.setPrototypeOf(this, new.target.prototype);
39+
this.name = `${new.target.name} [${code}]`;
40+
}
41+
}
42+
43+
export class HttpError extends MiniflareError<number> {
44+
constructor(code: number, message?: string, cause?: Error) {
45+
super(code, message, cause);
46+
}
47+
}
48+
49+
export type DeferredPromiseResolve<T> = (value: T | PromiseLike<T>) => void;
50+
export type DeferredPromiseReject = (reason?: any) => void;
51+
52+
export class DeferredPromise<T> extends Promise<T> {
53+
readonly resolve: DeferredPromiseResolve<T>;
54+
readonly reject: DeferredPromiseReject;
55+
56+
constructor() {
57+
let promiseResolve: DeferredPromiseResolve<T>;
58+
let promiseReject: DeferredPromiseReject;
59+
super((resolve, reject) => {
60+
promiseResolve = resolve;
61+
promiseReject = reject;
62+
});
63+
// Cannot access `this` until after `super`
64+
this.resolve = promiseResolve!;
65+
this.reject = promiseReject!;
66+
}
67+
}

0 commit comments

Comments
 (0)