wrangler 0.0.0-e3278fa → 0.0.0-e33294b0
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/README.md +24 -4
- package/bin/wrangler.js +170 -62
- package/kv-asset-handler.js +1 -0
- package/miniflare-dist/index.mjs +1499 -34
- package/package.json +193 -153
- package/src/__tests__/access.test.ts +25 -0
- package/src/__tests__/api-dev.test.ts +238 -0
- package/src/__tests__/api-devregistry.test.js +64 -0
- package/src/__tests__/api.test.ts +80 -0
- package/src/__tests__/config-cache-without-cache-dir.test.ts +38 -0
- package/src/__tests__/config-cache.test.ts +30 -24
- package/src/__tests__/configuration.test.ts +4222 -3397
- package/src/__tests__/d1/d1.test.ts +82 -0
- package/src/__tests__/d1/execute.test.ts +64 -0
- package/src/__tests__/d1/migrate.test.ts +155 -0
- package/src/__tests__/d1/splitter.test.ts +255 -0
- package/src/__tests__/delete.test.ts +266 -0
- package/src/__tests__/deployments.test.ts +129 -0
- package/src/__tests__/dev.test.tsx +1560 -956
- package/src/__tests__/generate.test.ts +238 -0
- package/src/__tests__/get-host-from-url.test.ts +16 -0
- package/src/__tests__/guess-worker-format.test.ts +68 -68
- package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
- package/src/__tests__/helpers/end-event-loop.ts +6 -0
- package/src/__tests__/helpers/mock-account-id.ts +24 -24
- package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
- package/src/__tests__/helpers/mock-bin.ts +20 -20
- package/src/__tests__/helpers/mock-console.ts +58 -39
- package/src/__tests__/helpers/mock-dialogs.ts +88 -79
- package/src/__tests__/helpers/mock-get-pages-upload-token.ts +25 -0
- package/src/__tests__/helpers/mock-get-zone-from-host.ts +11 -0
- package/src/__tests__/helpers/mock-http-server.ts +30 -30
- package/src/__tests__/helpers/mock-istty.ts +65 -18
- package/src/__tests__/helpers/mock-known-routes.ts +12 -0
- package/src/__tests__/helpers/mock-kv.ts +41 -28
- package/src/__tests__/helpers/mock-oauth-flow.ts +241 -233
- package/src/__tests__/helpers/mock-process.ts +34 -0
- package/src/__tests__/helpers/mock-set-timeout.ts +16 -0
- package/src/__tests__/helpers/mock-stdin.ts +82 -77
- package/src/__tests__/helpers/mock-web-socket.ts +21 -21
- package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
- package/src/__tests__/helpers/msw/handlers/access.ts +13 -0
- package/src/__tests__/helpers/msw/handlers/deployments.ts +93 -0
- package/src/__tests__/helpers/msw/handlers/namespaces.ts +81 -0
- package/src/__tests__/helpers/msw/handlers/oauth.ts +31 -0
- package/src/__tests__/helpers/msw/handlers/r2.ts +60 -0
- package/src/__tests__/helpers/msw/handlers/script.ts +56 -0
- package/src/__tests__/helpers/msw/handlers/user.ts +52 -0
- package/src/__tests__/helpers/msw/handlers/zones.ts +20 -0
- package/src/__tests__/helpers/msw/index.ts +50 -0
- package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
- package/src/__tests__/helpers/run-in-tmp.ts +27 -28
- package/src/__tests__/helpers/run-wrangler.ts +8 -8
- package/src/__tests__/helpers/string-dynamic-values-matcher.ts +28 -0
- package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
- package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
- package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
- package/src/__tests__/helpers/worker-scripts/parent-worker.js +8 -0
- package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
- package/src/__tests__/helpers/write-worker-source.ts +16 -16
- package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
- package/src/__tests__/https-options.test.ts +142 -109
- package/src/__tests__/index.test.ts +254 -236
- package/src/__tests__/init.test.ts +3135 -1608
- package/src/__tests__/jest.setup.ts +148 -50
- package/src/__tests__/kv.test.ts +1789 -1471
- package/src/__tests__/logger.test.ts +100 -74
- package/src/__tests__/logout.test.ts +47 -0
- package/src/__tests__/metrics.test.ts +493 -0
- package/src/__tests__/middleware.scheduled.test.ts +145 -0
- package/src/__tests__/middleware.test.ts +815 -0
- package/src/__tests__/mtls-certificates.test.ts +585 -0
- package/src/__tests__/package-manager.test.ts +303 -303
- package/src/__tests__/pages/deployment-list.test.ts +78 -0
- package/src/__tests__/pages/functions-build.test.ts +402 -0
- package/src/__tests__/pages/pages.test.ts +81 -0
- package/src/__tests__/pages/project-create.test.ts +63 -0
- package/src/__tests__/pages/project-list.test.ts +108 -0
- package/src/__tests__/pages/project-upload.test.ts +481 -0
- package/src/__tests__/pages/publish.test.ts +2745 -0
- package/src/__tests__/pages-deployment-tail.test.ts +955 -0
- package/src/__tests__/parse.test.ts +358 -252
- package/src/__tests__/paths.test.ts +39 -0
- package/src/__tests__/publish.test.ts +8023 -5629
- package/src/__tests__/pubsub.test.ts +493 -0
- package/src/__tests__/queues.test.ts +529 -0
- package/src/__tests__/r2.test.ts +369 -228
- package/src/__tests__/route.test.ts +18 -18
- package/src/__tests__/secret.test.ts +681 -469
- package/src/__tests__/tail.test.ts +835 -567
- package/src/__tests__/test-old-node-version.js +31 -0
- package/src/__tests__/tsconfig-sanity.ts +12 -0
- package/src/__tests__/tsconfig.json +8 -0
- package/src/__tests__/tsconfig.tsbuildinfo +1 -0
- package/src/__tests__/type-generation.test.ts +233 -0
- package/src/__tests__/user.test.ts +107 -120
- package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
- package/src/__tests__/validate-dev-props.test.ts +56 -0
- package/src/__tests__/version.test.ts +35 -0
- package/src/__tests__/whoami.test.tsx +165 -132
- package/src/__tests__/worker-namespace.test.ts +339 -0
- package/src/abort.d.ts +1 -1
- package/src/api/dev.ts +328 -0
- package/src/api/index.ts +11 -0
- package/src/api/mtls-certificate.ts +148 -0
- package/src/api/pages/create-worker-bundle-contents.ts +75 -0
- package/src/api/pages/index.ts +5 -0
- package/src/api/pages/publish.tsx +368 -0
- package/src/bundle-reporter.ts +68 -0
- package/src/bundle.ts +839 -160
- package/src/cfetch/index.ts +120 -83
- package/src/cfetch/internal.ts +208 -92
- package/src/cli.ts +23 -8
- package/src/config/config.ts +244 -196
- package/src/config/diagnostics.ts +61 -61
- package/src/config/environment.ts +523 -357
- package/src/config/index.ts +346 -196
- package/src/config/validation-helpers.ts +379 -366
- package/src/config/validation.ts +2026 -1367
- package/src/config-cache.ts +81 -41
- package/src/create-worker-preview.ts +239 -142
- package/src/create-worker-upload-form.ts +318 -238
- package/src/d1/backups.tsx +215 -0
- package/src/d1/constants.ts +2 -0
- package/src/d1/create.tsx +64 -0
- package/src/d1/delete.ts +53 -0
- package/src/d1/execute.tsx +354 -0
- package/src/d1/formatTimeAgo.ts +14 -0
- package/src/d1/index.ts +100 -0
- package/src/d1/list.tsx +60 -0
- package/src/d1/migrations/apply.tsx +206 -0
- package/src/d1/migrations/create.tsx +76 -0
- package/src/d1/migrations/helpers.ts +172 -0
- package/src/d1/migrations/index.ts +3 -0
- package/src/d1/migrations/list.tsx +92 -0
- package/src/d1/migrations/options.ts +23 -0
- package/src/d1/options.ts +22 -0
- package/src/d1/splitter.ts +161 -0
- package/src/d1/types.ts +25 -0
- package/src/d1/utils.ts +49 -0
- package/src/delete.ts +100 -0
- package/src/deployments.ts +116 -0
- package/src/deprecated/index.ts +144 -0
- package/src/dev/dev-vars.ts +20 -17
- package/src/dev/dev.tsx +533 -345
- package/src/dev/get-local-persistence-path.ts +31 -0
- package/src/dev/local.tsx +903 -302
- package/src/dev/remote.tsx +620 -225
- package/src/dev/start-server.ts +538 -0
- package/src/dev/use-esbuild.ts +184 -97
- package/src/dev/validate-dev-props.ts +31 -0
- package/src/dev-registry.ts +201 -0
- package/src/dev.tsx +914 -0
- package/src/dialogs.ts +136 -0
- package/src/dispatch-namespace.ts +211 -0
- package/src/docs/index.ts +97 -0
- package/src/durable.ts +87 -87
- package/src/entry.ts +236 -230
- package/src/environment-variables/factory.ts +88 -0
- package/src/environment-variables/misc-variables.ts +30 -0
- package/src/errors.ts +6 -6
- package/src/generate/index.ts +298 -0
- package/src/git-client.ts +135 -0
- package/src/global-wrangler-config-path.ts +26 -0
- package/src/https-options.ts +84 -80
- package/src/index.ts +705 -0
- package/src/init.ts +1022 -0
- package/src/inspect.ts +698 -593
- package/src/intl-polyfill.d.ts +123 -123
- package/src/is-ci.ts +14 -0
- package/src/is-interactive.ts +16 -0
- package/src/jest.d.ts +4 -0
- package/src/kv/helpers.ts +430 -0
- package/src/kv/index.ts +594 -0
- package/src/logger.ts +80 -42
- package/src/metrics/index.ts +5 -0
- package/src/metrics/metrics-config.ts +239 -0
- package/src/metrics/metrics-dispatcher.ts +96 -0
- package/src/metrics/metrics-usage-headers.ts +24 -0
- package/src/metrics/send-event.ts +98 -0
- package/src/miniflare-cli/assets.ts +250 -0
- package/src/miniflare-cli/index.ts +202 -33
- package/src/miniflare-cli/request-context.ts +18 -18
- package/src/miniflare-cli/tsconfig.json +9 -0
- package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
- package/src/miniflare-cli/types.ts +11 -0
- package/src/module-collection.ts +221 -212
- package/src/mtls-certificate/cli.ts +155 -0
- package/src/open-in-browser.ts +4 -6
- package/src/package-manager.ts +173 -128
- package/src/pages/build.ts +232 -0
- package/src/pages/buildFunctions.ts +130 -0
- package/src/pages/constants.ts +18 -0
- package/src/pages/deployment-tails.ts +281 -0
- package/src/pages/deployments.tsx +86 -0
- package/src/pages/dev.ts +716 -0
- package/src/pages/errors.ts +66 -0
- package/src/pages/functions/buildPlugin.ts +90 -0
- package/src/pages/functions/buildWorker.ts +288 -0
- package/{pages → src/pages}/functions/filepath-routing.test.ts +113 -113
- package/src/pages/functions/filepath-routing.ts +189 -0
- package/src/pages/functions/identifiers.ts +78 -0
- package/src/pages/functions/routes-consolidation.test.ts +250 -0
- package/src/pages/functions/routes-consolidation.ts +73 -0
- package/src/pages/functions/routes-transformation.test.ts +282 -0
- package/src/pages/functions/routes-transformation.ts +115 -0
- package/src/pages/functions/routes-validation.test.ts +403 -0
- package/src/pages/functions/routes-validation.ts +202 -0
- package/src/pages/functions/routes.ts +151 -0
- package/src/pages/functions/tsconfig.json +8 -0
- package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
- package/src/pages/functions.ts +86 -0
- package/src/pages/hash.ts +13 -0
- package/src/pages/index.ts +102 -0
- package/src/pages/projects.tsx +162 -0
- package/src/pages/prompt-select-project.tsx +31 -0
- package/src/pages/publish.tsx +276 -0
- package/src/pages/types.ts +46 -0
- package/src/pages/upload.tsx +449 -0
- package/src/pages/utils.ts +23 -0
- package/src/parse.ts +232 -126
- package/src/paths.ts +53 -8
- package/src/proxy.ts +623 -407
- package/src/publish/index.ts +274 -0
- package/src/publish/publish.ts +1065 -0
- package/src/pubsub/index.ts +286 -0
- package/src/pubsub/pubsub-commands.ts +623 -0
- package/src/queues/cli/commands/consumer/add.ts +65 -0
- package/src/queues/cli/commands/consumer/index.ts +19 -0
- package/src/queues/cli/commands/consumer/remove.ts +31 -0
- package/src/queues/cli/commands/create.ts +25 -0
- package/src/queues/cli/commands/delete.ts +26 -0
- package/src/queues/cli/commands/index.ts +35 -0
- package/src/queues/cli/commands/list.ts +25 -0
- package/src/queues/client.ts +135 -0
- package/src/queues/utils.ts +18 -0
- package/src/r2/constants.ts +4 -0
- package/src/r2/helpers.ts +131 -0
- package/src/r2/index.ts +289 -0
- package/src/routes.ts +140 -0
- package/src/secret/index.ts +375 -0
- package/src/selfsigned.d.ts +23 -23
- package/src/sites.ts +372 -0
- package/src/tail/createTail.ts +406 -0
- package/src/tail/filters.ts +109 -111
- package/src/tail/index.ts +208 -296
- package/src/tail/printing.ts +101 -46
- package/src/tsconfig-sanity.ts +16 -0
- package/src/type-generation.ts +181 -0
- package/src/update-check.ts +11 -11
- package/src/user/access.ts +68 -0
- package/src/user/auth-variables.ts +113 -0
- package/src/user/choose-account.tsx +39 -0
- package/src/user/generate-auth-url.ts +33 -0
- package/src/user/generate-random-state.ts +16 -0
- package/src/user/index.ts +2 -0
- package/src/user/user.ts +1233 -0
- package/src/utils/collectKeyValues.ts +14 -0
- package/src/whoami.ts +135 -0
- package/src/worker.ts +183 -107
- package/src/yargs-types.ts +37 -0
- package/src/zones.ts +158 -40
- package/templates/__tests__/pages-dev-util.test.ts +128 -0
- package/templates/__tests__/tsconfig-sanity.ts +12 -0
- package/templates/__tests__/tsconfig.json +8 -0
- package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
- package/templates/checked-fetch.js +23 -0
- package/templates/d1-beta-facade.js +241 -0
- package/templates/facade.d.ts +14 -0
- package/templates/first-party-worker-module-facade.ts +19 -0
- package/templates/format-dev-errors.ts +34 -0
- package/templates/init-tests/test-jest-new-worker.js +23 -0
- package/templates/init-tests/test-vitest-new-worker.js +24 -0
- package/templates/init-tests/test-vitest-new-worker.ts +25 -0
- package/templates/middleware/common.ts +62 -0
- package/templates/middleware/loader-modules.ts +84 -0
- package/templates/middleware/loader-sw.ts +233 -0
- package/templates/middleware/middleware-miniflare3-json-error.ts +20 -0
- package/templates/middleware/middleware-pretty-error.ts +40 -0
- package/templates/middleware/middleware-scheduled.ts +15 -0
- package/templates/new-worker-scheduled.js +3 -3
- package/templates/new-worker-scheduled.ts +15 -15
- package/templates/new-worker.js +3 -3
- package/templates/new-worker.ts +18 -15
- package/templates/no-op-worker.js +10 -0
- package/templates/pages-dev-pipeline.ts +31 -0
- package/templates/pages-dev-util.ts +52 -0
- package/templates/pages-shim.ts +12 -0
- package/templates/pages-template-plugin.ts +176 -0
- package/templates/pages-template-worker.ts +189 -0
- package/templates/serve-static-assets.ts +66 -0
- package/templates/service-bindings-module-facade.js +55 -0
- package/templates/service-bindings-sw-facade.js +42 -0
- package/templates/tsconfig-sanity.ts +11 -0
- package/templates/tsconfig.init.json +106 -0
- package/templates/tsconfig.json +6 -103
- package/templates/tsconfig.tsbuildinfo +1 -0
- package/wrangler-dist/cli.d.ts +1108 -0
- package/wrangler-dist/cli.js +109524 -90537
- package/wrangler-dist/wasm-sync.wasm +0 -0
- package/pages/functions/buildPlugin.ts +0 -105
- package/pages/functions/buildWorker.ts +0 -151
- package/pages/functions/filepath-routing.ts +0 -189
- package/pages/functions/identifiers.ts +0 -78
- package/pages/functions/routes.ts +0 -156
- package/pages/functions/template-plugin.ts +0 -147
- package/pages/functions/template-worker.ts +0 -143
- package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
- package/src/__tests__/helpers/mock-cfetch.ts +0 -211
- package/src/__tests__/pages.test.ts +0 -754
- package/src/dialogs.tsx +0 -135
- package/src/environment-variables.ts +0 -35
- package/src/index.tsx +0 -2846
- package/src/kv.ts +0 -408
- package/src/miniflare-cli/enum-keys.ts +0 -17
- package/src/pages.tsx +0 -2093
- package/src/publish.ts +0 -716
- package/src/r2.ts +0 -50
- package/src/sites.tsx +0 -326
- package/src/user.tsx +0 -1214
- package/src/whoami.tsx +0 -71
- package/templates/static-asset-facade.js +0 -43
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
// src/shim.ts
|
|
2
|
+
import worker, * as OTHER_EXPORTS from "__ENTRY_POINT__";
|
|
3
|
+
export * from "__ENTRY_POINT__";
|
|
4
|
+
|
|
5
|
+
// src/index.ts
|
|
6
|
+
var D1Database = class {
|
|
7
|
+
constructor(binding) {
|
|
8
|
+
this.binding = binding;
|
|
9
|
+
}
|
|
10
|
+
prepare(query) {
|
|
11
|
+
return new D1PreparedStatement(this, query);
|
|
12
|
+
}
|
|
13
|
+
async dump() {
|
|
14
|
+
const response = await this.binding.fetch("/dump", {
|
|
15
|
+
method: "POST",
|
|
16
|
+
headers: {
|
|
17
|
+
"content-type": "application/json",
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
if (response.status !== 200) {
|
|
21
|
+
try {
|
|
22
|
+
const err = await response.json();
|
|
23
|
+
throw new Error("D1_DUMP_ERROR", {
|
|
24
|
+
cause: new Error(err.error),
|
|
25
|
+
});
|
|
26
|
+
} catch (e) {
|
|
27
|
+
throw new Error("D1_DUMP_ERROR", {
|
|
28
|
+
cause: new Error("Status " + response.status),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return await response.arrayBuffer();
|
|
33
|
+
}
|
|
34
|
+
async batch(statements) {
|
|
35
|
+
const exec = await this._send(
|
|
36
|
+
"/query",
|
|
37
|
+
statements.map((s) => s.statement),
|
|
38
|
+
statements.map((s) => s.params)
|
|
39
|
+
);
|
|
40
|
+
return exec;
|
|
41
|
+
}
|
|
42
|
+
async exec(query) {
|
|
43
|
+
const lines = query.trim().split("\n");
|
|
44
|
+
const _exec = await this._send("/query", lines, [], false);
|
|
45
|
+
const exec = Array.isArray(_exec) ? _exec : [_exec];
|
|
46
|
+
const error = exec
|
|
47
|
+
.map((r) => {
|
|
48
|
+
return r.error ? 1 : 0;
|
|
49
|
+
})
|
|
50
|
+
.indexOf(1);
|
|
51
|
+
if (error !== -1) {
|
|
52
|
+
throw new Error("D1_EXEC_ERROR", {
|
|
53
|
+
cause: new Error(
|
|
54
|
+
"Error in line " +
|
|
55
|
+
(error + 1) +
|
|
56
|
+
": " +
|
|
57
|
+
lines[error] +
|
|
58
|
+
": " +
|
|
59
|
+
exec[error].error
|
|
60
|
+
),
|
|
61
|
+
});
|
|
62
|
+
} else {
|
|
63
|
+
return {
|
|
64
|
+
count: exec.length,
|
|
65
|
+
duration: exec.reduce((p, c) => {
|
|
66
|
+
return p + c.meta.duration;
|
|
67
|
+
}, 0),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async _send(endpoint, query, params, dothrow = true) {
|
|
72
|
+
const body = JSON.stringify(
|
|
73
|
+
typeof query == "object"
|
|
74
|
+
? query.map((s, index) => {
|
|
75
|
+
return { sql: s, params: params[index] };
|
|
76
|
+
})
|
|
77
|
+
: {
|
|
78
|
+
sql: query,
|
|
79
|
+
params,
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
const response = await this.binding.fetch(endpoint, {
|
|
83
|
+
method: "POST",
|
|
84
|
+
headers: {
|
|
85
|
+
"content-type": "application/json",
|
|
86
|
+
},
|
|
87
|
+
body,
|
|
88
|
+
});
|
|
89
|
+
try {
|
|
90
|
+
const answer = await response.json();
|
|
91
|
+
if (answer.error && dothrow) {
|
|
92
|
+
const err = answer;
|
|
93
|
+
throw new Error("D1_ERROR", { cause: new Error(err.error) });
|
|
94
|
+
} else {
|
|
95
|
+
return Array.isArray(answer)
|
|
96
|
+
? answer.map((r) => mapD1Result(r))
|
|
97
|
+
: mapD1Result(answer);
|
|
98
|
+
}
|
|
99
|
+
} catch (e) {
|
|
100
|
+
throw new Error("D1_ERROR", {
|
|
101
|
+
cause: new Error(e.cause || "Something went wrong"),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
var D1PreparedStatement = class {
|
|
107
|
+
constructor(database, statement, values) {
|
|
108
|
+
this.database = database;
|
|
109
|
+
this.statement = statement;
|
|
110
|
+
this.params = values || [];
|
|
111
|
+
}
|
|
112
|
+
bind(...values) {
|
|
113
|
+
for (var r in values) {
|
|
114
|
+
switch (typeof values[r]) {
|
|
115
|
+
case "number":
|
|
116
|
+
case "string":
|
|
117
|
+
break;
|
|
118
|
+
case "object":
|
|
119
|
+
if (values[r] == null) break;
|
|
120
|
+
if (
|
|
121
|
+
Array.isArray(values[r]) &&
|
|
122
|
+
values[r]
|
|
123
|
+
.map((b) => {
|
|
124
|
+
return typeof b == "number" && b >= 0 && b < 256 ? 1 : 0;
|
|
125
|
+
})
|
|
126
|
+
.indexOf(0) == -1
|
|
127
|
+
)
|
|
128
|
+
break;
|
|
129
|
+
if (values[r] instanceof ArrayBuffer) {
|
|
130
|
+
values[r] = Array.from(new Uint8Array(values[r]));
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
if (ArrayBuffer.isView(values[r])) {
|
|
134
|
+
values[r] = Array.from(values[r]);
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
default:
|
|
138
|
+
throw new Error("D1_TYPE_ERROR", {
|
|
139
|
+
cause: new Error(
|
|
140
|
+
"Type '" +
|
|
141
|
+
typeof values[r] +
|
|
142
|
+
"' not supported for value '" +
|
|
143
|
+
values[r] +
|
|
144
|
+
"'"
|
|
145
|
+
),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return new D1PreparedStatement(this.database, this.statement, values);
|
|
150
|
+
}
|
|
151
|
+
async first(colName) {
|
|
152
|
+
const info = firstIfArray(
|
|
153
|
+
await this.database._send("/query", this.statement, this.params)
|
|
154
|
+
);
|
|
155
|
+
const results = info.results;
|
|
156
|
+
if (colName !== void 0) {
|
|
157
|
+
if (results.length > 0 && results[0][colName] === void 0) {
|
|
158
|
+
throw new Error("D1_COLUMN_NOTFOUND", {
|
|
159
|
+
cause: new Error("Column not found"),
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
return results.length < 1 ? null : results[0][colName];
|
|
163
|
+
} else {
|
|
164
|
+
return results.length < 1 ? null : results[0];
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
async run() {
|
|
168
|
+
return firstIfArray(
|
|
169
|
+
await this.database._send("/execute", this.statement, this.params)
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
async all() {
|
|
173
|
+
return firstIfArray(
|
|
174
|
+
await this.database._send("/query", this.statement, this.params)
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
async raw() {
|
|
178
|
+
const s = firstIfArray(
|
|
179
|
+
await this.database._send("/query", this.statement, this.params)
|
|
180
|
+
);
|
|
181
|
+
const raw = [];
|
|
182
|
+
for (var r in s.results) {
|
|
183
|
+
const entry = Object.keys(s.results[r]).map((k) => {
|
|
184
|
+
return s.results[r][k];
|
|
185
|
+
});
|
|
186
|
+
raw.push(entry);
|
|
187
|
+
}
|
|
188
|
+
return raw;
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
function firstIfArray(results) {
|
|
192
|
+
return Array.isArray(results) ? results[0] : results;
|
|
193
|
+
}
|
|
194
|
+
function mapD1Result(result) {
|
|
195
|
+
let map = {
|
|
196
|
+
results: result.results || [],
|
|
197
|
+
success: result.success === void 0 ? true : result.success,
|
|
198
|
+
meta: result.meta || {},
|
|
199
|
+
};
|
|
200
|
+
result.error && (map.error = result.error);
|
|
201
|
+
return map;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// src/shim.ts
|
|
205
|
+
var D1_IMPORTS = __D1_IMPORTS__;
|
|
206
|
+
var LOCAL_MODE = __LOCAL_MODE__;
|
|
207
|
+
var D1_BETA_PREFIX = `__D1_BETA__`;
|
|
208
|
+
var envMap = /* @__PURE__ */ new Map();
|
|
209
|
+
function getMaskedEnv(env) {
|
|
210
|
+
if (envMap.has(env)) return envMap.get(env);
|
|
211
|
+
const newEnv = new Map(Object.entries(env));
|
|
212
|
+
D1_IMPORTS.filter((bindingName) =>
|
|
213
|
+
bindingName.startsWith(D1_BETA_PREFIX)
|
|
214
|
+
).forEach((bindingName) => {
|
|
215
|
+
newEnv.delete(bindingName);
|
|
216
|
+
const newName = bindingName.slice(D1_BETA_PREFIX.length);
|
|
217
|
+
const newBinding = !LOCAL_MODE
|
|
218
|
+
? new D1Database(env[bindingName])
|
|
219
|
+
: env[bindingName];
|
|
220
|
+
newEnv.set(newName, newBinding);
|
|
221
|
+
});
|
|
222
|
+
const newEnvObj = Object.fromEntries(newEnv.entries());
|
|
223
|
+
envMap.set(env, newEnvObj);
|
|
224
|
+
return newEnvObj;
|
|
225
|
+
}
|
|
226
|
+
var shim_default = {
|
|
227
|
+
...worker,
|
|
228
|
+
async fetch(request, env, ctx) {
|
|
229
|
+
return worker.fetch(request, getMaskedEnv(env), ctx);
|
|
230
|
+
},
|
|
231
|
+
async queue(batch, env, ctx) {
|
|
232
|
+
return worker.queue(batch, getMaskedEnv(env), ctx);
|
|
233
|
+
},
|
|
234
|
+
async scheduled(controller, env, ctx) {
|
|
235
|
+
return worker.scheduled(controller, getMaskedEnv(env), ctx);
|
|
236
|
+
},
|
|
237
|
+
async trace(traces, env, ctx) {
|
|
238
|
+
return worker.trace(traces, getMaskedEnv(env), ctx);
|
|
239
|
+
},
|
|
240
|
+
};
|
|
241
|
+
export { shim_default as default };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare module "__ENTRY_POINT__" {
|
|
2
|
+
import type { Middleware } from "./middleware/common";
|
|
3
|
+
const worker: ExportedHandler & { middleware?: Middleware[] };
|
|
4
|
+
export default worker;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
declare module "__KV_ASSET_HANDLER__" {
|
|
8
|
+
export * from "@cloudflare/kv-asset-handler";
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
declare module "__STATIC_CONTENT_MANIFEST" {
|
|
12
|
+
const manifest: string;
|
|
13
|
+
export default manifest;
|
|
14
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import worker from "__ENTRY_POINT__";
|
|
2
|
+
export * from "__ENTRY_POINT__";
|
|
3
|
+
|
|
4
|
+
type Env = {
|
|
5
|
+
// TODO: type this
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Setup globals/vars as required
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export default <ExportedHandler>{
|
|
13
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext) {
|
|
14
|
+
if (worker.fetch === undefined) {
|
|
15
|
+
throw new TypeError("Entry point missing `fetch` handler");
|
|
16
|
+
}
|
|
17
|
+
return worker.fetch(request, env, ctx);
|
|
18
|
+
},
|
|
19
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import worker from "__ENTRY_POINT__";
|
|
2
|
+
|
|
3
|
+
export * from "__ENTRY_POINT__";
|
|
4
|
+
|
|
5
|
+
export default <ExportedHandler>{
|
|
6
|
+
...worker,
|
|
7
|
+
async fetch(req, env, ctx) {
|
|
8
|
+
if (worker.fetch === undefined) {
|
|
9
|
+
throw new TypeError("Entry point missing `fetch` handler");
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
return await worker.fetch(req, env, ctx);
|
|
13
|
+
} catch (err) {
|
|
14
|
+
return new Response(
|
|
15
|
+
`<!DOCTYPE html>
|
|
16
|
+
<html>
|
|
17
|
+
<head>
|
|
18
|
+
<meta charset="utf-8" />
|
|
19
|
+
<title>Error</title>
|
|
20
|
+
</head>
|
|
21
|
+
<body>
|
|
22
|
+
<pre>${(err as Error).stack}</pre>
|
|
23
|
+
</body>
|
|
24
|
+
</html>`,
|
|
25
|
+
{
|
|
26
|
+
status: 500,
|
|
27
|
+
headers: {
|
|
28
|
+
"Content-Type": "text/html",
|
|
29
|
+
},
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const { unstable_dev } = require("wrangler");
|
|
2
|
+
|
|
3
|
+
describe("Worker", () => {
|
|
4
|
+
let worker;
|
|
5
|
+
|
|
6
|
+
beforeAll(async () => {
|
|
7
|
+
worker = await unstable_dev("src/index.js", {
|
|
8
|
+
experimental: { disableExperimentalWarning: true },
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
afterAll(async () => {
|
|
13
|
+
await worker.stop();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it("should return Hello World", async () => {
|
|
17
|
+
const resp = await worker.fetch();
|
|
18
|
+
if (resp) {
|
|
19
|
+
const text = await resp.text();
|
|
20
|
+
expect(text).toMatchInlineSnapshot(`"Hello World!"`);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { unstable_dev } from "wrangler";
|
|
2
|
+
import { describe, expect, it, beforeAll, afterAll } from "vitest";
|
|
3
|
+
|
|
4
|
+
describe("Worker", () => {
|
|
5
|
+
let worker;
|
|
6
|
+
|
|
7
|
+
beforeAll(async () => {
|
|
8
|
+
worker = await unstable_dev("src/index.js", {
|
|
9
|
+
experimental: { disableExperimentalWarning: true },
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
afterAll(async () => {
|
|
14
|
+
await worker.stop();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it("should return Hello World", async () => {
|
|
18
|
+
const resp = await worker.fetch();
|
|
19
|
+
if (resp) {
|
|
20
|
+
const text = await resp.text();
|
|
21
|
+
expect(text).toMatchInlineSnapshot(`"Hello World!"`);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { unstable_dev } from "wrangler";
|
|
2
|
+
import type { UnstableDevWorker } from "wrangler";
|
|
3
|
+
import { describe, expect, it, beforeAll, afterAll } from "vitest";
|
|
4
|
+
|
|
5
|
+
describe("Worker", () => {
|
|
6
|
+
let worker: UnstableDevWorker;
|
|
7
|
+
|
|
8
|
+
beforeAll(async () => {
|
|
9
|
+
worker = await unstable_dev("src/index.ts", {
|
|
10
|
+
experimental: { disableExperimentalWarning: true },
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
afterAll(async () => {
|
|
15
|
+
await worker.stop();
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it("should return Hello World", async () => {
|
|
19
|
+
const resp = await worker.fetch();
|
|
20
|
+
if (resp) {
|
|
21
|
+
const text = await resp.text();
|
|
22
|
+
expect(text).toMatchInlineSnapshot(`"Hello World!"`);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
});
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export type Awaitable<T> = T | Promise<T>;
|
|
2
|
+
// TODO: allow dispatching more events?
|
|
3
|
+
export type Dispatcher = (
|
|
4
|
+
type: "scheduled",
|
|
5
|
+
init: { cron?: string }
|
|
6
|
+
) => Awaitable<void>;
|
|
7
|
+
|
|
8
|
+
export interface MiddlewareContext {
|
|
9
|
+
dispatch: Dispatcher;
|
|
10
|
+
next(request: Request, env: any): Awaitable<Response>;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type Middleware = (
|
|
14
|
+
request: Request,
|
|
15
|
+
env: any,
|
|
16
|
+
ctx: ExecutionContext,
|
|
17
|
+
middlewareCtx: MiddlewareContext
|
|
18
|
+
) => Awaitable<Response>;
|
|
19
|
+
|
|
20
|
+
const __facade_middleware__: Middleware[] = [];
|
|
21
|
+
|
|
22
|
+
// The register functions allow for the insertion of one or many middleware,
|
|
23
|
+
// We register internal middleware first in the stack, but have no way of controlling
|
|
24
|
+
// the order that addMiddleware is run in service workers so need an internal function.
|
|
25
|
+
export function __facade_register__(...args: (Middleware | Middleware[])[]) {
|
|
26
|
+
__facade_middleware__.push(...args.flat());
|
|
27
|
+
}
|
|
28
|
+
export function __facade_registerInternal__(
|
|
29
|
+
...args: (Middleware | Middleware[])[]
|
|
30
|
+
) {
|
|
31
|
+
__facade_middleware__.unshift(...args.flat());
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function __facade_invokeChain__(
|
|
35
|
+
request: Request,
|
|
36
|
+
env: any,
|
|
37
|
+
ctx: ExecutionContext,
|
|
38
|
+
dispatch: Dispatcher,
|
|
39
|
+
middlewareChain: Middleware[]
|
|
40
|
+
): Awaitable<Response> {
|
|
41
|
+
const [head, ...tail] = middlewareChain;
|
|
42
|
+
const middlewareCtx: MiddlewareContext = {
|
|
43
|
+
dispatch,
|
|
44
|
+
next(newRequest, newEnv) {
|
|
45
|
+
return __facade_invokeChain__(newRequest, newEnv, ctx, dispatch, tail);
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
return head(request, env, ctx, middlewareCtx);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function __facade_invoke__(
|
|
52
|
+
request: Request,
|
|
53
|
+
env: any,
|
|
54
|
+
ctx: ExecutionContext,
|
|
55
|
+
dispatch: Dispatcher,
|
|
56
|
+
finalMiddleware: Middleware
|
|
57
|
+
): Awaitable<Response> {
|
|
58
|
+
return __facade_invokeChain__(request, env, ctx, dispatch, [
|
|
59
|
+
...__facade_middleware__,
|
|
60
|
+
finalMiddleware,
|
|
61
|
+
]);
|
|
62
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// // This loads all middlewares exposed on the middleware object
|
|
2
|
+
// // and then starts the invocation chain.
|
|
3
|
+
// // The big idea is that we can add these to the middleware export dynamically
|
|
4
|
+
// // through wrangler, or we can potentially let users directly add them as a sort
|
|
5
|
+
// // of "plugin" system.
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
Dispatcher,
|
|
9
|
+
Middleware,
|
|
10
|
+
__facade_invoke__,
|
|
11
|
+
__facade_register__,
|
|
12
|
+
} from "./common";
|
|
13
|
+
|
|
14
|
+
import worker from "__ENTRY_POINT__";
|
|
15
|
+
|
|
16
|
+
// We need to preserve all of the exports from the worker
|
|
17
|
+
export * from "__ENTRY_POINT__";
|
|
18
|
+
|
|
19
|
+
class __Facade_ScheduledController__ implements ScheduledController {
|
|
20
|
+
#noRetry: ScheduledController["noRetry"];
|
|
21
|
+
|
|
22
|
+
constructor(
|
|
23
|
+
readonly scheduledTime: number,
|
|
24
|
+
readonly cron: string,
|
|
25
|
+
noRetry: ScheduledController["noRetry"]
|
|
26
|
+
) {
|
|
27
|
+
this.#noRetry = noRetry;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
noRetry() {
|
|
31
|
+
if (!(this instanceof __Facade_ScheduledController__)) {
|
|
32
|
+
throw new TypeError("Illegal invocation");
|
|
33
|
+
}
|
|
34
|
+
// Need to call native method immediately in case uncaught error thrown
|
|
35
|
+
this.#noRetry();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const __facade_modules_fetch__: Middleware = function (request, env, ctx) {
|
|
40
|
+
if (worker.fetch === undefined) throw new Error("No fetch handler!"); // TODO: proper error message
|
|
41
|
+
return worker.fetch(request, env, ctx);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const facade: ExportedHandler<unknown> = {
|
|
45
|
+
fetch(request, env, ctx) {
|
|
46
|
+
// Get the chain of middleware from the worker object
|
|
47
|
+
if (worker.middleware && worker.middleware.length > 0) {
|
|
48
|
+
for (const middleware of worker.middleware) {
|
|
49
|
+
__facade_register__(middleware);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const __facade_modules_dispatch__: Dispatcher = function (type, init) {
|
|
53
|
+
if (type === "scheduled" && worker.scheduled !== undefined) {
|
|
54
|
+
const controller = new __Facade_ScheduledController__(
|
|
55
|
+
Date.now(),
|
|
56
|
+
init.cron ?? "",
|
|
57
|
+
() => {}
|
|
58
|
+
);
|
|
59
|
+
return worker.scheduled(controller, env, ctx);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
return __facade_invoke__(
|
|
64
|
+
request,
|
|
65
|
+
env,
|
|
66
|
+
ctx,
|
|
67
|
+
__facade_modules_dispatch__,
|
|
68
|
+
__facade_modules_fetch__
|
|
69
|
+
);
|
|
70
|
+
} else {
|
|
71
|
+
// We didn't have any middleware so we can skip the invocation chain,
|
|
72
|
+
// and just call the fetch handler directly
|
|
73
|
+
|
|
74
|
+
// We "don't care" if this is undefined as we want to have the same behaviour
|
|
75
|
+
// as if the worker completely bypassed middleware.
|
|
76
|
+
return worker.fetch!(request, env, ctx);
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
scheduled: worker.scheduled,
|
|
80
|
+
queue: worker.queue,
|
|
81
|
+
trace: worker.trace,
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export default facade;
|