effect-cf 0.40.0 → 0.40.2
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/CHANGELOG.md +14 -0
- package/README.md +2 -0
- package/dist/AiGateway.d.mts +86 -0
- package/dist/AiGateway.mjs +178 -0
- package/dist/AnalyticsEngine.d.mts +170 -0
- package/dist/AnalyticsEngine.mjs +275 -0
- package/dist/{Artifacts-B3r3RuTB.d.mts → Artifacts.d.mts} +8 -5
- package/dist/{Artifacts-CBxWGeZB.mjs → Artifacts.mjs} +9 -5
- package/dist/Binding.d.mts +45 -0
- package/dist/{Binding-C82jRhdr.mjs → Binding.mjs} +8 -4
- package/dist/BrowserRendering.d.mts +85 -0
- package/dist/BrowserRendering.mjs +81 -0
- package/dist/Cache.d.mts +40 -0
- package/dist/Cache.mjs +51 -0
- package/dist/CloudflareOtlp.d.mts +95 -0
- package/dist/CloudflareOtlp.mjs +125 -0
- package/dist/CloudflareTracer.d.mts +20 -0
- package/dist/CloudflareTracer.mjs +69 -0
- package/dist/ComputerArtifacts.d.mts +2 -2
- package/dist/ComputerArtifacts.mjs +3 -2
- package/dist/ComputerWorkspace.d.mts +36 -31
- package/dist/ComputerWorkspace.mjs +8 -3
- package/dist/ComputerWorkspaceHost.d.mts +1 -1
- package/dist/ComputerWorkspaceHost.mjs +1 -1
- package/dist/{ContainerNamespace-DbLaeFhN.d.mts → ContainerNamespace.d.mts} +16 -12
- package/dist/ContainerNamespace.mjs +165 -0
- package/dist/D1.d.mts +33 -0
- package/dist/D1.mjs +32 -0
- package/dist/DurableObject.d.mts +103 -0
- package/dist/DurableObject.mjs +77 -0
- package/dist/DurableObjectAlarm.d.mts +187 -0
- package/dist/DurableObjectAlarm.mjs +344 -0
- package/dist/DurableObjectDefinition.d.mts +87 -0
- package/dist/DurableObjectDefinition.mjs +125 -0
- package/dist/DurableObjectNamespace.d.mts +154 -0
- package/dist/DurableObjectNamespace.mjs +144 -0
- package/dist/DurableObjectRpcWebSocket.d.mts +112 -0
- package/dist/DurableObjectRpcWebSocket.mjs +547 -0
- package/dist/DurableObjectSqlite.d.mts +11 -0
- package/dist/DurableObjectSqlite.mjs +16 -0
- package/dist/DurableObjectState.d.mts +65 -0
- package/dist/DurableObjectState.mjs +47 -0
- package/dist/DurableObjectStorage.d.mts +112 -0
- package/dist/{DurableObjectState-DLL0YgBd.mjs → DurableObjectStorage.mjs} +19 -157
- package/dist/DurableObjectWebSocket.d.mts +83 -0
- package/dist/DurableObjectWebSocket.mjs +120 -0
- package/dist/Email.d.mts +106 -0
- package/dist/Email.mjs +247 -0
- package/dist/Environment.d.mts +59 -0
- package/dist/{ErrorMessage-Byx2OgNd.mjs → Environment.mjs} +7 -18
- package/dist/{Hyperdrive-HrwFlZ6x.d.mts → Hyperdrive.d.mts} +8 -5
- package/dist/Hyperdrive.mjs +32 -0
- package/dist/HyperdrivePg.d.mts +4 -3
- package/dist/HyperdrivePg.mjs +3 -1
- package/dist/Images.d.mts +191 -0
- package/dist/Images.mjs +112 -0
- package/dist/Kv.d.mts +84 -0
- package/dist/Kv.mjs +132 -0
- package/dist/Mcp.d.mts +5 -3
- package/dist/Mcp.mjs +13 -4
- package/dist/Queue.d.mts +64 -0
- package/dist/Queue.mjs +52 -0
- package/dist/QueueBinding.d.mts +42 -0
- package/dist/QueueBinding.mjs +69 -0
- package/dist/QueueDefinition.d.mts +48 -0
- package/dist/QueueDefinition.mjs +63 -0
- package/dist/R2.d.mts +89 -0
- package/dist/R2.mjs +117 -0
- package/dist/Rpc.d.mts +29 -0
- package/dist/Rpc.mjs +28 -0
- package/dist/RpcDefinition.d.mts +116 -0
- package/dist/RpcDefinition.mjs +184 -0
- package/dist/RpcTracing.d.mts +52 -0
- package/dist/RpcTracing.mjs +77 -0
- package/dist/Sandbox.d.mts +10 -5
- package/dist/Sandbox.mjs +9 -3
- package/dist/ServiceBinding.d.mts +112 -0
- package/dist/ServiceBinding.mjs +145 -0
- package/dist/Vectorize.d.mts +68 -0
- package/dist/Vectorize.mjs +76 -0
- package/dist/Vitest.d.mts +6 -4
- package/dist/Vitest.mjs +8 -4
- package/dist/WebTransport.d.mts +66 -0
- package/dist/WebTransport.mjs +63 -0
- package/dist/Worker.d.mts +139 -0
- package/dist/Worker.mjs +141 -0
- package/dist/WorkerDefinition.d.mts +100 -0
- package/dist/WorkerDefinition.mjs +103 -0
- package/dist/WorkersAi.d.mts +84 -0
- package/dist/WorkersAi.mjs +84 -0
- package/dist/Workflow.d.mts +86 -0
- package/dist/Workflow.mjs +137 -0
- package/dist/{WorkflowBinding-DtVykUCz.d.mts → WorkflowBinding.d.mts} +14 -10
- package/dist/WorkflowBinding.mjs +100 -0
- package/dist/WorkflowDefinition.d.mts +51 -0
- package/dist/WorkflowDefinition.mjs +69 -0
- package/dist/{rolldown-runtime-D7D4PA-g.mjs → _virtual/_rolldown/runtime.mjs} +1 -1
- package/dist/index.d.mts +40 -1839
- package/dist/index.mjs +40 -3161
- package/dist/{ComputerWorkspaceHostRegistry-CY5Fv4Ng.mjs → internal/ComputerWorkspaceHostRegistry.mjs} +1 -1
- package/dist/internal/Entrypoint.mjs +37 -0
- package/dist/internal/ErrorMessage.mjs +17 -0
- package/dist/internal/NativeCallback.mjs +33 -0
- package/dist/internal/RpcInvocation.d.mts +13 -0
- package/dist/internal/RpcInvocation.mjs +34 -0
- package/dist/internal/Runtime.mjs +31 -0
- package/dist/internal/Telemetry.mjs +20 -0
- package/dist/{WorkerContext-Yobnfw-K.mjs → internal/WorkerContext.mjs} +4 -31
- package/package.json +1 -1
- package/src/AiGateway.ts +5 -1
- package/src/AnalyticsEngine.ts +14 -19
- package/src/Artifacts.ts +6 -1
- package/src/Binding.ts +5 -1
- package/src/BrowserRendering.ts +5 -1
- package/src/Cache.ts +5 -1
- package/src/CloudflareOtlp.ts +12 -10
- package/src/CloudflareTracer.ts +7 -1
- package/src/ComputerArtifacts.ts +2 -1
- package/src/ComputerWorkspace.ts +7 -1
- package/src/ContainerNamespace.ts +6 -1
- package/src/D1.ts +4 -1
- package/src/DurableObject.ts +4 -1
- package/src/DurableObjectAlarm.ts +10 -12
- package/src/DurableObjectDefinition.ts +3 -1
- package/src/DurableObjectNamespace.ts +4 -1
- package/src/DurableObjectRpcWebSocket.ts +7 -1
- package/src/DurableObjectSqlite.ts +2 -1
- package/src/DurableObjectState.ts +4 -1
- package/src/DurableObjectStorage.ts +11 -13
- package/src/DurableObjectWebSocket.ts +5 -1
- package/src/Email.ts +5 -1
- package/src/Environment.ts +6 -1
- package/src/Hyperdrive.ts +4 -1
- package/src/HyperdrivePg.ts +3 -1
- package/src/Images.ts +7 -1
- package/src/Kv.ts +7 -1
- package/src/Mcp.ts +13 -13
- package/src/Queue.ts +5 -11
- package/src/QueueBinding.ts +5 -1
- package/src/QueueDefinition.ts +4 -1
- package/src/R2.ts +7 -1
- package/src/Rpc.ts +4 -1
- package/src/RpcDefinition.ts +4 -1
- package/src/RpcTracing.ts +9 -1
- package/src/Sandbox.ts +7 -1
- package/src/ServiceBinding.ts +6 -1
- package/src/Vectorize.ts +7 -1
- package/src/Vitest.ts +5 -1
- package/src/WebTransport.ts +6 -1
- package/src/Worker.ts +10 -16
- package/src/WorkerDefinition.ts +3 -1
- package/src/WorkersAi.ts +7 -1
- package/src/Workflow.ts +10 -25
- package/src/WorkflowBinding.ts +6 -1
- package/src/WorkflowDefinition.ts +4 -1
- package/src/internal/Entrypoint.ts +3 -1
- package/src/internal/ErrorMessage.ts +1 -1
- package/src/internal/NativeCallback.ts +3 -1
- package/src/internal/RpcInvocation.ts +5 -1
- package/src/internal/Runtime.ts +5 -1
- package/src/internal/Telemetry.ts +4 -3
- package/src/internal/WorkerContext.ts +3 -1
- package/dist/Binding-DKcLrQCM.d.mts +0 -94
- package/dist/DurableObjectState-DJ0K-zyd.d.mts +0 -244
- package/dist/Worker-XsGJsCJX.mjs +0 -885
- package/dist/Worker-gV4mDqIs.d.mts +0 -641
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { __exportAll } from "./_virtual/_rolldown/runtime.mjs";
|
|
2
|
+
import { layer as layer$1 } from "./Binding.mjs";
|
|
3
|
+
import { causeMessage, violationsMessage } from "./internal/ErrorMessage.mjs";
|
|
4
|
+
import * as Context from "effect/Context";
|
|
5
|
+
import * as Data from "effect/Data";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as S from "effect/Schema";
|
|
8
|
+
import * as Layer from "effect/Layer";
|
|
9
|
+
import * as Predicate from "effect/Predicate";
|
|
10
|
+
import * as Config from "effect/Config";
|
|
11
|
+
import * as Option from "effect/Option";
|
|
12
|
+
import * as Result from "effect/Result";
|
|
13
|
+
import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient";
|
|
14
|
+
import * as HttpClient from "effect/unstable/http/HttpClient";
|
|
15
|
+
import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest";
|
|
16
|
+
//#region src/AnalyticsEngine.ts
|
|
17
|
+
var AnalyticsEngine_exports = /* @__PURE__ */ __exportAll({
|
|
18
|
+
AnalyticsEngineDataPointSchema: () => AnalyticsEngineDataPointSchema,
|
|
19
|
+
AnalyticsEngineFieldValueSchema: () => AnalyticsEngineFieldValueSchema,
|
|
20
|
+
AnalyticsEngineOperationError: () => AnalyticsEngineOperationError,
|
|
21
|
+
AnalyticsEngineQueryError: () => AnalyticsEngineQueryError,
|
|
22
|
+
AnalyticsEngineWriteValidationError: () => AnalyticsEngineWriteValidationError,
|
|
23
|
+
QueryTag: () => QueryTag,
|
|
24
|
+
Tag: () => Tag,
|
|
25
|
+
isAnalyticsEngineDataset: () => isAnalyticsEngineDataset,
|
|
26
|
+
layer: () => layer,
|
|
27
|
+
layerFetch: () => layerFetch,
|
|
28
|
+
layerFetchConfig: () => layerFetchConfig,
|
|
29
|
+
make: () => make,
|
|
30
|
+
makeClient: () => makeClient,
|
|
31
|
+
makeQuery: () => makeQuery,
|
|
32
|
+
makeQueryClient: () => makeQueryClient,
|
|
33
|
+
queryConfig: () => queryConfig,
|
|
34
|
+
queryLayer: () => queryLayer,
|
|
35
|
+
queryLayerConfig: () => queryLayerConfig,
|
|
36
|
+
writeLimits: () => writeLimits
|
|
37
|
+
});
|
|
38
|
+
const expectedAnalyticsEngineDataset = "Analytics Engine dataset binding with writeDataPoint()";
|
|
39
|
+
const defaultQueryApiBaseUrl = "https://api.cloudflare.com/client/v4";
|
|
40
|
+
const textEncoder = new TextEncoder();
|
|
41
|
+
const writeLimits = {
|
|
42
|
+
maxBlobs: 20,
|
|
43
|
+
maxDoubles: 20,
|
|
44
|
+
maxIndexes: 1,
|
|
45
|
+
maxBlobBytes: 16384,
|
|
46
|
+
maxIndexBytes: 96,
|
|
47
|
+
maxDataPointsPerInvocation: 250
|
|
48
|
+
};
|
|
49
|
+
const queryColumnSchema = S.Struct({
|
|
50
|
+
name: S.String,
|
|
51
|
+
type: S.String
|
|
52
|
+
});
|
|
53
|
+
const queryRowSchema = S.Record(S.String, S.Unknown);
|
|
54
|
+
const queryResponseSchema = S.Struct({
|
|
55
|
+
meta: S.Array(queryColumnSchema),
|
|
56
|
+
data: S.Array(queryRowSchema),
|
|
57
|
+
rows: S.Number
|
|
58
|
+
});
|
|
59
|
+
const AnalyticsEngineFieldValueSchema = S.NullOr(S.Union([S.String, S.instanceOf(ArrayBuffer)]));
|
|
60
|
+
const AnalyticsEngineDataPointSchema = S.Struct({
|
|
61
|
+
indexes: S.optional(S.Array(AnalyticsEngineFieldValueSchema)),
|
|
62
|
+
doubles: S.optional(S.Array(S.Finite)),
|
|
63
|
+
blobs: S.optional(S.Array(AnalyticsEngineFieldValueSchema))
|
|
64
|
+
});
|
|
65
|
+
const decodeQueryResponse = S.decodeUnknownEffect(queryResponseSchema);
|
|
66
|
+
const decodeDataPoint = S.decodeUnknownEffect(AnalyticsEngineDataPointSchema);
|
|
67
|
+
var AnalyticsEngineOperationError = class extends Data.TaggedError("AnalyticsEngineOperationError") {
|
|
68
|
+
get message() {
|
|
69
|
+
return `Analytics Engine ${this.operation} failed for binding "${this.binding}": ${causeMessage(this.cause)}`;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
var AnalyticsEngineWriteValidationError = class extends Data.TaggedError("AnalyticsEngineWriteValidationError") {
|
|
73
|
+
get message() {
|
|
74
|
+
return `Analytics Engine ${this.operation} for binding "${this.binding}" failed validation: ${violationsMessage(this.violations)}`;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
var AnalyticsEngineQueryError = class extends Data.TaggedError("AnalyticsEngineQueryError") {};
|
|
78
|
+
const analyticsEngineError = (binding, operation, cause) => new AnalyticsEngineOperationError({
|
|
79
|
+
binding,
|
|
80
|
+
operation,
|
|
81
|
+
cause
|
|
82
|
+
});
|
|
83
|
+
const analyticsEngineWriteValidationError = (binding, operation, violations, cause) => new AnalyticsEngineWriteValidationError({
|
|
84
|
+
binding,
|
|
85
|
+
operation,
|
|
86
|
+
violations,
|
|
87
|
+
cause
|
|
88
|
+
});
|
|
89
|
+
const analyticsEngineQueryError = (definition, operation, message, options) => new AnalyticsEngineQueryError({
|
|
90
|
+
operation,
|
|
91
|
+
accountId: definition.accountId,
|
|
92
|
+
message,
|
|
93
|
+
status: options?.status,
|
|
94
|
+
body: options?.body,
|
|
95
|
+
cause: options?.cause
|
|
96
|
+
});
|
|
97
|
+
const tryAnalyticsEngineSync = (binding, operation, evaluate) => Effect.try({
|
|
98
|
+
try: evaluate,
|
|
99
|
+
catch: (cause) => analyticsEngineError(binding, operation, cause)
|
|
100
|
+
});
|
|
101
|
+
const resolveWritePolicy = (defaults, options) => ({ onInvalid: options?.onInvalid ?? defaults?.onInvalid ?? "error" });
|
|
102
|
+
const fieldPath = (prefix, field) => prefix === "" ? field : `${prefix}.${field}`;
|
|
103
|
+
const indexedPath = (prefix, field, index) => `${fieldPath(prefix, field)}[${index}]`;
|
|
104
|
+
const byteLength = (value) => {
|
|
105
|
+
if (value === null) return 0;
|
|
106
|
+
return Predicate.isString(value) ? textEncoder.encode(value).byteLength : value.byteLength;
|
|
107
|
+
};
|
|
108
|
+
const lengthViolation = (path, label, actual, limit) => ({
|
|
109
|
+
path,
|
|
110
|
+
message: `${label} exceeds Cloudflare Analytics Engine limit`,
|
|
111
|
+
actual,
|
|
112
|
+
limit
|
|
113
|
+
});
|
|
114
|
+
const validateDataPointLimits = (dataPoint, pathPrefix = "") => {
|
|
115
|
+
const violations = [];
|
|
116
|
+
if (dataPoint.blobs !== void 0 && dataPoint.blobs.length > writeLimits.maxBlobs) violations.push(lengthViolation(fieldPath(pathPrefix, "blobs"), "blobs", dataPoint.blobs.length, writeLimits.maxBlobs));
|
|
117
|
+
if (dataPoint.doubles !== void 0 && dataPoint.doubles.length > writeLimits.maxDoubles) violations.push(lengthViolation(fieldPath(pathPrefix, "doubles"), "doubles", dataPoint.doubles.length, writeLimits.maxDoubles));
|
|
118
|
+
if (dataPoint.indexes !== void 0 && dataPoint.indexes.length > writeLimits.maxIndexes) violations.push(lengthViolation(fieldPath(pathPrefix, "indexes"), "indexes", dataPoint.indexes.length, writeLimits.maxIndexes));
|
|
119
|
+
if (dataPoint.blobs !== void 0) {
|
|
120
|
+
const blobBytes = dataPoint.blobs.reduce((total, value) => total + byteLength(value), 0);
|
|
121
|
+
if (blobBytes > writeLimits.maxBlobBytes) violations.push(lengthViolation(fieldPath(pathPrefix, "blobs"), "blob bytes", blobBytes, writeLimits.maxBlobBytes));
|
|
122
|
+
}
|
|
123
|
+
if (dataPoint.indexes !== void 0) for (let index = 0; index < dataPoint.indexes.length; index++) {
|
|
124
|
+
const indexBytes = byteLength(dataPoint.indexes[index] ?? null);
|
|
125
|
+
if (indexBytes > writeLimits.maxIndexBytes) violations.push(lengthViolation(indexedPath(pathPrefix, "indexes", index), "index bytes", indexBytes, writeLimits.maxIndexBytes));
|
|
126
|
+
}
|
|
127
|
+
return violations;
|
|
128
|
+
};
|
|
129
|
+
const schemaViolation = (pathPrefix, cause) => ({
|
|
130
|
+
path: pathPrefix === "" ? "$" : pathPrefix,
|
|
131
|
+
message: cause.message
|
|
132
|
+
});
|
|
133
|
+
const toAnalyticsEngineDataPoint = (dataPoint) => {
|
|
134
|
+
const result = {};
|
|
135
|
+
if (dataPoint.indexes !== void 0) result.indexes = [...dataPoint.indexes];
|
|
136
|
+
if (dataPoint.doubles !== void 0) result.doubles = [...dataPoint.doubles];
|
|
137
|
+
if (dataPoint.blobs !== void 0) result.blobs = [...dataPoint.blobs];
|
|
138
|
+
return result;
|
|
139
|
+
};
|
|
140
|
+
const validateDataPoint = (binding, operation, dataPoint, pathPrefix = "") => Effect.gen(function* () {
|
|
141
|
+
const decoded = yield* decodeDataPoint(dataPoint).pipe(Effect.mapError((cause) => analyticsEngineWriteValidationError(binding, operation, [schemaViolation(pathPrefix, cause)], cause)));
|
|
142
|
+
const validated = toAnalyticsEngineDataPoint(decoded);
|
|
143
|
+
const violations = validateDataPointLimits(validated, pathPrefix);
|
|
144
|
+
if (violations.length > 0) return yield* Effect.fail(analyticsEngineWriteValidationError(binding, operation, violations));
|
|
145
|
+
return validated;
|
|
146
|
+
});
|
|
147
|
+
const validateOptionalDataPoint = (binding, operation, dataPoint) => dataPoint === void 0 ? Effect.succeed(void 0) : validateDataPoint(binding, operation, dataPoint);
|
|
148
|
+
const validateDataPoints = (binding, operation, dataPoints, policy) => Effect.gen(function* () {
|
|
149
|
+
const points = dataPoints.length > writeLimits.maxDataPointsPerInvocation && policy.onInvalid === "drop" ? dataPoints.slice(0, writeLimits.maxDataPointsPerInvocation) : dataPoints;
|
|
150
|
+
const violations = [];
|
|
151
|
+
if (dataPoints.length > writeLimits.maxDataPointsPerInvocation && policy.onInvalid === "error") violations.push(lengthViolation("dataPoints", "data points per Worker invocation", dataPoints.length, writeLimits.maxDataPointsPerInvocation));
|
|
152
|
+
const validPoints = [];
|
|
153
|
+
for (let index = 0; index < points.length; index++) {
|
|
154
|
+
const result = yield* Effect.result(validateDataPoint(binding, operation, points[index], `dataPoints[${index}]`));
|
|
155
|
+
if (Result.isSuccess(result)) validPoints.push(result.success);
|
|
156
|
+
else if (policy.onInvalid === "error") violations.push(...result.failure.violations);
|
|
157
|
+
}
|
|
158
|
+
if (violations.length > 0) return yield* Effect.fail(analyticsEngineWriteValidationError(binding, operation, violations));
|
|
159
|
+
return validPoints;
|
|
160
|
+
});
|
|
161
|
+
const writeChunks = (binding, operation, dataset, dataPoints) => Effect.gen(function* () {
|
|
162
|
+
for (const point of dataPoints) yield* tryAnalyticsEngineSync(binding, operation, () => dataset.writeDataPoint(point));
|
|
163
|
+
});
|
|
164
|
+
const queryApiUrl = (definition) => {
|
|
165
|
+
const baseUrl = new URL(definition.apiBaseUrl ?? defaultQueryApiBaseUrl);
|
|
166
|
+
baseUrl.pathname = `${baseUrl.pathname.replace(/\/+$/, "")}/accounts/${definition.accountId}/analytics_engine/sql`;
|
|
167
|
+
return baseUrl.href;
|
|
168
|
+
};
|
|
169
|
+
const queryRequest = (definition, sql, options) => {
|
|
170
|
+
let request = HttpClientRequest.post(queryApiUrl(definition)).pipe(HttpClientRequest.bodyText(sql, "text/plain;charset=UTF-8"));
|
|
171
|
+
if (options?.headers !== void 0) request = HttpClientRequest.setHeaders(request, options.headers);
|
|
172
|
+
return HttpClientRequest.bearerToken(request, definition.apiToken);
|
|
173
|
+
};
|
|
174
|
+
const responseText = (definition, response, operation) => response.text.pipe(Effect.catch((cause) => Effect.fail(analyticsEngineQueryError(definition, operation, "Failed to read Analytics Engine SQL API response body", { cause }))));
|
|
175
|
+
const executeQueryRequest = (definition, httpClient, sql, options) => Effect.gen(function* () {
|
|
176
|
+
const request = yield* Effect.try({
|
|
177
|
+
try: () => queryRequest(definition, sql, options),
|
|
178
|
+
catch: (cause) => analyticsEngineQueryError(definition, "query", "Invalid Analytics Engine SQL API URL", { cause })
|
|
179
|
+
});
|
|
180
|
+
const response = yield* httpClient.execute(request).pipe(Effect.mapError((cause) => analyticsEngineQueryError(definition, "query", "Analytics Engine SQL API request failed", { cause })));
|
|
181
|
+
if (response.status < 200 || response.status >= 300) {
|
|
182
|
+
const body = yield* responseText(definition, response, "queryErrorBody");
|
|
183
|
+
return yield* Effect.fail(analyticsEngineQueryError(definition, "query", `Analytics Engine SQL API returned HTTP ${response.status}`, {
|
|
184
|
+
status: response.status,
|
|
185
|
+
body
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
188
|
+
return response;
|
|
189
|
+
});
|
|
190
|
+
const makeQueryClientWith = (definition, httpClient) => {
|
|
191
|
+
const raw = Effect.fn("AnalyticsEngine.raw")((sql, options) => executeQueryRequest(definition, httpClient, sql, options));
|
|
192
|
+
const query = Effect.fn("AnalyticsEngine.query")(function* (sql, options) {
|
|
193
|
+
const json = yield* (yield* raw(sql, options)).json.pipe(Effect.catch((cause) => Effect.fail(analyticsEngineQueryError(definition, "json", "Failed to read Analytics Engine SQL API JSON response body", { cause }))));
|
|
194
|
+
return yield* decodeQueryResponse(json);
|
|
195
|
+
});
|
|
196
|
+
const queryResult = (row, sql, options) => Effect.gen(function* () {
|
|
197
|
+
const result = yield* query(sql, options);
|
|
198
|
+
const decodeRow = S.decodeUnknownEffect(row);
|
|
199
|
+
const data = [];
|
|
200
|
+
for (const value of result.data) data.push(yield* decodeRow(value));
|
|
201
|
+
return {
|
|
202
|
+
...result,
|
|
203
|
+
data,
|
|
204
|
+
rows: result.rows
|
|
205
|
+
};
|
|
206
|
+
}).pipe(Effect.withSpan("AnalyticsEngine.queryResult"));
|
|
207
|
+
return {
|
|
208
|
+
definition,
|
|
209
|
+
raw,
|
|
210
|
+
query,
|
|
211
|
+
queryResult,
|
|
212
|
+
queryRows: (row, sql, options) => queryResult(row, sql, options).pipe(Effect.map((result) => result.data), Effect.withSpan("AnalyticsEngine.queryRows")),
|
|
213
|
+
queryOne: (row, sql, options) => queryResult(row, sql, options).pipe(Effect.map((result) => result.data[0] === void 0 ? Option.none() : Option.some(result.data[0])), Effect.withSpan("AnalyticsEngine.queryOne")),
|
|
214
|
+
queryText: Effect.fn("AnalyticsEngine.queryText")((sql, options) => raw(sql, options).pipe(Effect.flatMap((response) => responseText(definition, response, "text"))))
|
|
215
|
+
};
|
|
216
|
+
};
|
|
217
|
+
const makeQueryClient = (definition) => Effect.map(HttpClient.HttpClient, (httpClient) => makeQueryClientWith(definition, httpClient));
|
|
218
|
+
const isAnalyticsEngineDataset = (value) => Predicate.hasProperty(value, "writeDataPoint") && Predicate.isFunction(value.writeDataPoint);
|
|
219
|
+
const makeClient = (definition, defaults) => (dataset) => {
|
|
220
|
+
return {
|
|
221
|
+
definition,
|
|
222
|
+
writeDataPoint: Effect.fn("AnalyticsEngine.writeDataPoint")((dataPoint, options) => {
|
|
223
|
+
const policy = resolveWritePolicy(defaults, options);
|
|
224
|
+
return validateOptionalDataPoint(definition.binding, "writeDataPoint", dataPoint).pipe(Effect.matchEffect({
|
|
225
|
+
onFailure: (error) => policy.onInvalid === "drop" ? Effect.succeed(void 0) : Effect.fail(error),
|
|
226
|
+
onSuccess: (point) => tryAnalyticsEngineSync(definition.binding, "writeDataPoint", () => dataset.writeDataPoint(point))
|
|
227
|
+
}));
|
|
228
|
+
}),
|
|
229
|
+
writeDataPoints: Effect.fn("AnalyticsEngine.writeDataPoints")(function* (dataPoints, options) {
|
|
230
|
+
const policy = resolveWritePolicy(defaults, options);
|
|
231
|
+
const validPoints = yield* validateDataPoints(definition.binding, "writeDataPoints", dataPoints, policy);
|
|
232
|
+
yield* writeChunks(definition.binding, "writeDataPoints", dataset, validPoints);
|
|
233
|
+
}),
|
|
234
|
+
rawUnsafe: Effect.succeed(dataset)
|
|
235
|
+
};
|
|
236
|
+
};
|
|
237
|
+
const queryConfig = (options) => Config.all({
|
|
238
|
+
accountId: options?.accountId ?? Config.string("CLOUDFLARE_ACCOUNT_ID"),
|
|
239
|
+
apiToken: options?.apiToken ?? Config.redacted("CLOUDFLARE_API_TOKEN"),
|
|
240
|
+
apiBaseUrl: options?.apiBaseUrl ?? Config.string("CLOUDFLARE_API_BASE_URL").pipe(Config.withDefault(defaultQueryApiBaseUrl))
|
|
241
|
+
});
|
|
242
|
+
const queryLayer = (tag, definition) => Layer.effect(tag, makeQueryClient(definition));
|
|
243
|
+
const layerFetch = (tag, definition) => queryLayer(tag, definition).pipe(Layer.provide(FetchHttpClient.layer));
|
|
244
|
+
const queryLayerConfig = (tag, config = queryConfig()) => Layer.effect(tag, Effect.gen(function* () {
|
|
245
|
+
const definition = yield* config;
|
|
246
|
+
return yield* makeQueryClient(definition);
|
|
247
|
+
}));
|
|
248
|
+
const layerFetchConfig = (tag, config = queryConfig()) => queryLayerConfig(tag, config).pipe(Layer.provide(FetchHttpClient.layer));
|
|
249
|
+
const layer = (tag, definition) => layer$1(tag, definition.binding, isAnalyticsEngineDataset, makeClient(definition, definition.write), { expected: expectedAnalyticsEngineDataset });
|
|
250
|
+
const make = (id) => Tag()(id);
|
|
251
|
+
const makeQuery = (id) => QueryTag()(id);
|
|
252
|
+
const Tag = () => (id) => {
|
|
253
|
+
const tag = Context.Service()(id);
|
|
254
|
+
const makeLayer = (definition) => layer(tag, definition);
|
|
255
|
+
return Object.assign(tag, {
|
|
256
|
+
id,
|
|
257
|
+
layer: makeLayer
|
|
258
|
+
});
|
|
259
|
+
};
|
|
260
|
+
const QueryTag = () => (id) => {
|
|
261
|
+
const tag = Context.Service()(id);
|
|
262
|
+
const makeLayer = (definition) => queryLayer(tag, definition);
|
|
263
|
+
const makeLayerFetch = (definition) => layerFetch(tag, definition);
|
|
264
|
+
const makeLayerConfig = (config) => queryLayerConfig(tag, config);
|
|
265
|
+
const makeLayerFetchConfig = (config) => layerFetchConfig(tag, config);
|
|
266
|
+
return Object.assign(tag, {
|
|
267
|
+
id,
|
|
268
|
+
layer: makeLayer,
|
|
269
|
+
layerFetch: makeLayerFetch,
|
|
270
|
+
layerConfig: makeLayerConfig,
|
|
271
|
+
layerFetchConfig: makeLayerFetchConfig
|
|
272
|
+
});
|
|
273
|
+
};
|
|
274
|
+
//#endregion
|
|
275
|
+
export { AnalyticsEngineDataPointSchema, AnalyticsEngineFieldValueSchema, AnalyticsEngineOperationError, AnalyticsEngineQueryError, AnalyticsEngineWriteValidationError, AnalyticsEngine_exports, QueryTag, Tag, isAnalyticsEngineDataset, layer, layerFetch, layerFetchConfig, make, makeClient, makeQuery, makeQueryClient, queryConfig, queryLayer, queryLayerConfig, writeLimits };
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { WorkerEnvironment } from "./Environment.mjs";
|
|
2
|
+
import { BindingNotFoundError, BindingValidationError } from "./Binding.mjs";
|
|
3
|
+
import * as Context$1 from "effect/Context";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import { Layer } from "effect";
|
|
3
6
|
declare namespace Artifacts_d_exports {
|
|
4
7
|
export { ArtifactsBinding, ArtifactsClient, ArtifactsCommit, ArtifactsCommitIdentity, ArtifactsCreateOptions, ArtifactsCreateRepoResult, ArtifactsCreateTokenResult, ArtifactsDefinition, ArtifactsErrorCode, ArtifactsForkOptions, ArtifactsImportParams, ArtifactsImportSource, ArtifactsImportTarget, ArtifactsImportTargetOptions, ArtifactsListOptions, ArtifactsLogOptions, ArtifactsLogResult, ArtifactsOperation, ArtifactsOperationError, ArtifactsRepoBinding, ArtifactsRepoClient, ArtifactsRepoInfo, ArtifactsRepoListEntry, ArtifactsRepoListResult, ArtifactsRepoStatus, ArtifactsService, ArtifactsTokenInfo, ArtifactsTokenListResult, ArtifactsTokenScope, ArtifactsTokenState, ArtifactsTree, Cursor, LayerOptions, RepoName, Tag, TagClass, artifactsErrorCodes, artifactsErrorNumericCodes, isArtifactsBinding, isArtifactsRepoBinding, layer, make, makeClient };
|
|
5
8
|
}
|
|
@@ -187,15 +190,15 @@ interface ArtifactsService<Id extends string> {
|
|
|
187
190
|
type LayerOptions = {
|
|
188
191
|
readonly binding: string;
|
|
189
192
|
};
|
|
190
|
-
interface TagClass<Self, Id extends string> extends Context.ServiceClass<Self, Id, ArtifactsClient> {
|
|
193
|
+
interface TagClass<Self, Id extends string> extends Context$1.ServiceClass<Self, Id, ArtifactsClient> {
|
|
191
194
|
readonly id: Id;
|
|
192
195
|
readonly layer: (options: LayerOptions) => Layer.Layer<Self, BindingNotFoundError | BindingValidationError, WorkerEnvironment>;
|
|
193
196
|
}
|
|
194
197
|
declare const isArtifactsRepoBinding: <Candidate>(value: Candidate) => value is Candidate & ArtifactsRepoBinding;
|
|
195
198
|
declare const isArtifactsBinding: <Candidate>(value: Candidate) => value is Candidate & ArtifactsBinding;
|
|
196
199
|
declare const makeClient: (definition: ArtifactsDefinition) => (artifacts: ArtifactsBinding) => ArtifactsClient;
|
|
197
|
-
declare const layer: <Self>(tag: Context.Service<Self, ArtifactsClient>, definition: ArtifactsDefinition) => Layer.Layer<Self, BindingNotFoundError | BindingValidationError, WorkerEnvironment>;
|
|
200
|
+
declare const layer: <Self>(tag: Context$1.Service<Self, ArtifactsClient>, definition: ArtifactsDefinition) => Layer.Layer<Self, BindingNotFoundError | BindingValidationError, WorkerEnvironment>;
|
|
198
201
|
declare const make: <Id extends string>(id: Id) => TagClass<ArtifactsService<Id>, Id>;
|
|
199
202
|
declare const Tag: <Self>() => <Id extends string>(id: Id) => TagClass<Self, Id>;
|
|
200
203
|
//#endregion
|
|
201
|
-
export {
|
|
204
|
+
export { ArtifactsBinding, ArtifactsClient, ArtifactsCommit, ArtifactsCommitIdentity, ArtifactsCreateOptions, ArtifactsCreateRepoResult, ArtifactsCreateTokenResult, ArtifactsDefinition, ArtifactsErrorCode, ArtifactsForkOptions, ArtifactsImportParams, ArtifactsImportSource, ArtifactsImportTarget, ArtifactsImportTargetOptions, ArtifactsListOptions, ArtifactsLogOptions, ArtifactsLogResult, ArtifactsOperation, ArtifactsOperationError, ArtifactsRepoBinding, ArtifactsRepoClient, ArtifactsRepoInfo, ArtifactsRepoListEntry, ArtifactsRepoListResult, ArtifactsRepoStatus, ArtifactsService, ArtifactsTokenInfo, ArtifactsTokenListResult, ArtifactsTokenScope, ArtifactsTokenState, ArtifactsTree, Artifacts_d_exports, Cursor, LayerOptions, RepoName, Tag, TagClass, artifactsErrorCodes, artifactsErrorNumericCodes, isArtifactsBinding, isArtifactsRepoBinding, layer, make, makeClient };
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
1
|
+
import { __exportAll } from "./_virtual/_rolldown/runtime.mjs";
|
|
2
|
+
import { layer as layer$1 } from "./Binding.mjs";
|
|
3
|
+
import { causeMessage } from "./internal/ErrorMessage.mjs";
|
|
4
|
+
import * as Context from "effect/Context";
|
|
5
|
+
import * as Data from "effect/Data";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as Schema from "effect/Schema";
|
|
8
|
+
import * as Predicate from "effect/Predicate";
|
|
5
9
|
//#region src/Artifacts.ts
|
|
6
10
|
var Artifacts_exports = /* @__PURE__ */ __exportAll({
|
|
7
11
|
ArtifactsOperationError: () => ArtifactsOperationError,
|
|
@@ -125,4 +129,4 @@ const Tag = () => (id) => {
|
|
|
125
129
|
});
|
|
126
130
|
};
|
|
127
131
|
//#endregion
|
|
128
|
-
export { Artifacts_exports
|
|
132
|
+
export { ArtifactsOperationError, Artifacts_exports, Tag, artifactsErrorCodes, artifactsErrorNumericCodes, isArtifactsBinding, isArtifactsRepoBinding, layer, make, makeClient };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { WorkerEnvironment } from "./Environment.mjs";
|
|
2
|
+
import * as Context from "effect/Context";
|
|
3
|
+
import * as Layer from "effect/Layer";
|
|
4
|
+
import * as Predicate from "effect/Predicate";
|
|
5
|
+
declare namespace Binding_d_exports {
|
|
6
|
+
export { BindingNotFoundError, BindingService, BindingValidationError, Service, TypeId, ValidationOptions, layer };
|
|
7
|
+
}
|
|
8
|
+
declare const TypeId: "~effect-cf/Binding";
|
|
9
|
+
type TypeId = typeof TypeId;
|
|
10
|
+
declare const BindingNotFoundError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
11
|
+
readonly _tag: "BindingNotFoundError";
|
|
12
|
+
} & Readonly<A>;
|
|
13
|
+
/** Error raised when a configured binding does not exist on `env`. */
|
|
14
|
+
declare class BindingNotFoundError extends BindingNotFoundError_base<{
|
|
15
|
+
readonly binding: string;
|
|
16
|
+
readonly message: string;
|
|
17
|
+
}> {}
|
|
18
|
+
declare const BindingValidationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
19
|
+
readonly _tag: "BindingValidationError";
|
|
20
|
+
} & Readonly<A>;
|
|
21
|
+
/** Error raised when a binding exists but does not match the expected shape. */
|
|
22
|
+
declare class BindingValidationError extends BindingValidationError_base<{
|
|
23
|
+
readonly binding: string;
|
|
24
|
+
readonly expected: string;
|
|
25
|
+
readonly actual: string;
|
|
26
|
+
readonly message: string;
|
|
27
|
+
}> {}
|
|
28
|
+
interface ValidationOptions {
|
|
29
|
+
readonly expected?: string;
|
|
30
|
+
}
|
|
31
|
+
type BindingCandidate = Parameters<typeof Predicate.isUnknown>[0];
|
|
32
|
+
interface BindingService<Self, Id extends string, Service> extends Context.ServiceClass<Self, `effect-cf/Binding/${Id}`, Service> {
|
|
33
|
+
readonly [TypeId]: TypeId;
|
|
34
|
+
readonly id: Id;
|
|
35
|
+
readonly binding: string;
|
|
36
|
+
readonly layer: Layer.Layer<Self, BindingNotFoundError | BindingValidationError, WorkerEnvironment>;
|
|
37
|
+
}
|
|
38
|
+
declare function layer<Self, Resource>(tag: Context.Service<Self, Resource>, binding: string, isResource: (value: BindingCandidate) => value is Resource, wrap?: undefined, options?: ValidationOptions): Layer.Layer<Self, BindingNotFoundError | BindingValidationError, WorkerEnvironment>;
|
|
39
|
+
declare function layer<Self, Resource, Service>(tag: Context.Service<Self, Service>, binding: string, isResource: (value: BindingCandidate) => value is Resource, wrap: (resource: Resource) => Service, options?: ValidationOptions): Layer.Layer<Self, BindingNotFoundError | BindingValidationError, WorkerEnvironment>;
|
|
40
|
+
declare const Service: <Self>() => {
|
|
41
|
+
<Id extends string, Resource>(id: Id, binding: string, isResource: (value: BindingCandidate) => value is Resource, wrap?: undefined, options?: ValidationOptions): BindingService<Self, Id, Resource>;
|
|
42
|
+
<Id extends string, Resource, Service>(id: Id, binding: string, isResource: (value: BindingCandidate) => value is Resource, wrap: (resource: Resource) => Service, options?: ValidationOptions): BindingService<Self, Id, Service>;
|
|
43
|
+
};
|
|
44
|
+
//#endregion
|
|
45
|
+
export { BindingNotFoundError, BindingService, BindingValidationError, Binding_d_exports, Service, TypeId, ValidationOptions, layer };
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
import { __exportAll } from "./_virtual/_rolldown/runtime.mjs";
|
|
2
|
+
import { WorkerEnvironment } from "./Environment.mjs";
|
|
3
|
+
import * as Context from "effect/Context";
|
|
4
|
+
import * as Data from "effect/Data";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as Layer from "effect/Layer";
|
|
7
|
+
import * as Predicate from "effect/Predicate";
|
|
4
8
|
//#region src/Binding.ts
|
|
5
9
|
var Binding_exports = /* @__PURE__ */ __exportAll({
|
|
6
10
|
BindingNotFoundError: () => BindingNotFoundError,
|
|
@@ -125,4 +129,4 @@ const Service = () => {
|
|
|
125
129
|
return makeService;
|
|
126
130
|
};
|
|
127
131
|
//#endregion
|
|
128
|
-
export {
|
|
132
|
+
export { BindingNotFoundError, BindingValidationError, Binding_exports, Service, TypeId, layer };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { WorkerEnvironment } from "./Environment.mjs";
|
|
2
|
+
import { BindingNotFoundError, BindingValidationError } from "./Binding.mjs";
|
|
3
|
+
import * as Context$1 from "effect/Context";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import { Layer } from "effect";
|
|
6
|
+
declare namespace BrowserRendering_d_exports {
|
|
7
|
+
export { BrowserRenderingBinding, BrowserRenderingBrowserClient, BrowserRenderingBrowserLike, BrowserRenderingClient, BrowserRenderingConnect, BrowserRenderingDefinition, BrowserRenderingExternalResult, BrowserRenderingLaunch, BrowserRenderingMethodOptions, BrowserRenderingOperationError, BrowserRenderingPageClient, BrowserRenderingPageFunction, BrowserRenderingPageLike, BrowserRenderingService, LayerOptions, Tag, TagClass, isBrowserRenderingBinding, layer, make, makeClient };
|
|
8
|
+
}
|
|
9
|
+
declare const BrowserRenderingOperationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
10
|
+
readonly _tag: "BrowserRenderingOperationError";
|
|
11
|
+
} & Readonly<A>;
|
|
12
|
+
declare class BrowserRenderingOperationError extends BrowserRenderingOperationError_base<{
|
|
13
|
+
readonly binding: string;
|
|
14
|
+
readonly operation: string;
|
|
15
|
+
readonly cause: unknown;
|
|
16
|
+
}> {
|
|
17
|
+
get message(): string;
|
|
18
|
+
}
|
|
19
|
+
interface BrowserRenderingDefinition {
|
|
20
|
+
readonly binding: string;
|
|
21
|
+
}
|
|
22
|
+
type BrowserRenderingBinding = object;
|
|
23
|
+
interface BrowserRenderingMethodOptions {}
|
|
24
|
+
type BrowserRenderingExternalResult = Awaited<ReturnType<Response["json"]>>;
|
|
25
|
+
type BrowserRenderingPageFunction = string | Function;
|
|
26
|
+
type BrowserRenderingLaunch<RawBinding, Browser, LaunchOptions = unknown> = (binding: RawBinding, options?: LaunchOptions) => Promise<Browser>;
|
|
27
|
+
type BrowserRenderingConnect<RawBinding, Browser, ConnectOptions = unknown> = (binding: RawBinding, options?: ConnectOptions) => Promise<Browser>;
|
|
28
|
+
interface BrowserRenderingBrowserLike<Page = BrowserRenderingPageLike> {
|
|
29
|
+
readonly newPage: () => Promise<Page>;
|
|
30
|
+
readonly close?: () => Promise<void>;
|
|
31
|
+
readonly disconnect?: () => void;
|
|
32
|
+
readonly version?: () => Promise<string>;
|
|
33
|
+
}
|
|
34
|
+
interface BrowserRenderingPageLike {
|
|
35
|
+
readonly goto?: (url: string, options?: BrowserRenderingMethodOptions) => Promise<BrowserRenderingExternalResult>;
|
|
36
|
+
readonly setContent?: (html: string, options?: BrowserRenderingMethodOptions) => Promise<void>;
|
|
37
|
+
readonly content?: () => Promise<string>;
|
|
38
|
+
readonly screenshot?: (options?: BrowserRenderingMethodOptions) => Promise<Uint8Array | string>;
|
|
39
|
+
readonly pdf?: (options?: BrowserRenderingMethodOptions) => Promise<Uint8Array>;
|
|
40
|
+
readonly evaluate?: (pageFunction: BrowserRenderingPageFunction, ...args: ReadonlyArray<unknown>) => Promise<BrowserRenderingExternalResult>;
|
|
41
|
+
readonly close?: (options?: BrowserRenderingMethodOptions) => Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
interface BrowserRenderingPageClient<Page extends BrowserRenderingPageLike> {
|
|
44
|
+
readonly raw: Page;
|
|
45
|
+
readonly goto: (url: string, options?: Parameters<NonNullable<Page["goto"]>>[1]) => Effect.Effect<Awaited<ReturnType<NonNullable<Page["goto"]>>>, BrowserRenderingOperationError>;
|
|
46
|
+
readonly setContent: (html: string, options?: Parameters<NonNullable<Page["setContent"]>>[1]) => Effect.Effect<void, BrowserRenderingOperationError>;
|
|
47
|
+
readonly content: Effect.Effect<string, BrowserRenderingOperationError>;
|
|
48
|
+
readonly screenshot: (options?: Parameters<NonNullable<Page["screenshot"]>>[0]) => Effect.Effect<Awaited<ReturnType<NonNullable<Page["screenshot"]>>>, BrowserRenderingOperationError>;
|
|
49
|
+
readonly pdf: (options?: Parameters<NonNullable<Page["pdf"]>>[0]) => Effect.Effect<Awaited<ReturnType<NonNullable<Page["pdf"]>>>, BrowserRenderingOperationError>;
|
|
50
|
+
readonly evaluate: (pageFunction: Parameters<NonNullable<Page["evaluate"]>>[0], ...args: ReadonlyArray<unknown>) => Effect.Effect<Awaited<ReturnType<NonNullable<Page["evaluate"]>>>, BrowserRenderingOperationError>;
|
|
51
|
+
readonly close: (options?: Parameters<NonNullable<Page["close"]>>[0]) => Effect.Effect<void, BrowserRenderingOperationError>;
|
|
52
|
+
}
|
|
53
|
+
interface BrowserRenderingBrowserClient<Browser extends BrowserRenderingBrowserLike<Page>, Page extends BrowserRenderingPageLike> {
|
|
54
|
+
readonly raw: Browser;
|
|
55
|
+
readonly newPage: Effect.Effect<BrowserRenderingPageClient<Page>, BrowserRenderingOperationError>;
|
|
56
|
+
readonly version: Effect.Effect<string, BrowserRenderingOperationError>;
|
|
57
|
+
readonly close: Effect.Effect<void, BrowserRenderingOperationError>;
|
|
58
|
+
readonly disconnect: Effect.Effect<void, BrowserRenderingOperationError>;
|
|
59
|
+
}
|
|
60
|
+
interface BrowserRenderingClient<RawBinding extends BrowserRenderingBinding = BrowserRenderingBinding> {
|
|
61
|
+
readonly launchWith: <Browser extends BrowserRenderingBrowserLike<Page>, Page extends BrowserRenderingPageLike = BrowserRenderingPageLike, LaunchOptions = unknown>(launch: BrowserRenderingLaunch<RawBinding, Browser, LaunchOptions>, options?: LaunchOptions) => Effect.Effect<BrowserRenderingBrowserClient<Browser, Page>, BrowserRenderingOperationError>;
|
|
62
|
+
readonly connectWith: <Browser extends BrowserRenderingBrowserLike<Page>, Page extends BrowserRenderingPageLike = BrowserRenderingPageLike, ConnectOptions = unknown>(connect: BrowserRenderingConnect<RawBinding, Browser, ConnectOptions>, options?: ConnectOptions) => Effect.Effect<BrowserRenderingBrowserClient<Browser, Page>, BrowserRenderingOperationError>;
|
|
63
|
+
readonly rawUnsafe: Effect.Effect<RawBinding>;
|
|
64
|
+
readonly definition: BrowserRenderingDefinition;
|
|
65
|
+
}
|
|
66
|
+
declare const BrowserRenderingServiceTypeId: unique symbol;
|
|
67
|
+
interface BrowserRenderingService<Id extends string> {
|
|
68
|
+
readonly [BrowserRenderingServiceTypeId]: {
|
|
69
|
+
readonly id: Id;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
type LayerOptions = {
|
|
73
|
+
readonly binding: string;
|
|
74
|
+
};
|
|
75
|
+
interface TagClass<Self, Id extends string> extends Context$1.ServiceClass<Self, Id, BrowserRenderingClient> {
|
|
76
|
+
readonly id: Id;
|
|
77
|
+
readonly layer: (options: LayerOptions) => Layer.Layer<Self, BindingNotFoundError | BindingValidationError, WorkerEnvironment>;
|
|
78
|
+
}
|
|
79
|
+
declare const isBrowserRenderingBinding: <Candidate>(value: Candidate) => value is Candidate & BrowserRenderingBinding;
|
|
80
|
+
declare const makeClient: <RawBinding extends BrowserRenderingBinding = BrowserRenderingBinding>(definition: BrowserRenderingDefinition) => (binding: RawBinding) => BrowserRenderingClient<RawBinding>;
|
|
81
|
+
declare const layer: <Self>(tag: Context$1.Service<Self, BrowserRenderingClient>, definition: BrowserRenderingDefinition) => Layer.Layer<Self, BindingNotFoundError | BindingValidationError, WorkerEnvironment>;
|
|
82
|
+
declare const make: <Id extends string>(id: Id) => TagClass<BrowserRenderingService<Id>, Id>;
|
|
83
|
+
declare const Tag: <Self>() => <Id extends string>(id: Id) => TagClass<Self, Id>;
|
|
84
|
+
//#endregion
|
|
85
|
+
export { BrowserRenderingBinding, BrowserRenderingBrowserClient, BrowserRenderingBrowserLike, BrowserRenderingClient, BrowserRenderingConnect, BrowserRenderingDefinition, BrowserRenderingExternalResult, BrowserRenderingLaunch, BrowserRenderingMethodOptions, BrowserRenderingOperationError, BrowserRenderingPageClient, BrowserRenderingPageFunction, BrowserRenderingPageLike, BrowserRenderingService, BrowserRendering_d_exports, LayerOptions, Tag, TagClass, isBrowserRenderingBinding, layer, make, makeClient };
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { __exportAll } from "./_virtual/_rolldown/runtime.mjs";
|
|
2
|
+
import { layer as layer$1 } from "./Binding.mjs";
|
|
3
|
+
import { causeMessage } from "./internal/ErrorMessage.mjs";
|
|
4
|
+
import * as Context from "effect/Context";
|
|
5
|
+
import * as Data from "effect/Data";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as Predicate from "effect/Predicate";
|
|
8
|
+
//#region src/BrowserRendering.ts
|
|
9
|
+
var BrowserRendering_exports = /* @__PURE__ */ __exportAll({
|
|
10
|
+
BrowserRenderingOperationError: () => BrowserRenderingOperationError,
|
|
11
|
+
Tag: () => Tag,
|
|
12
|
+
isBrowserRenderingBinding: () => isBrowserRenderingBinding,
|
|
13
|
+
layer: () => layer,
|
|
14
|
+
make: () => make,
|
|
15
|
+
makeClient: () => makeClient
|
|
16
|
+
});
|
|
17
|
+
const expectedBrowserRenderingBinding = "Browser Rendering binding resource";
|
|
18
|
+
var BrowserRenderingOperationError = class extends Data.TaggedError("BrowserRenderingOperationError") {
|
|
19
|
+
get message() {
|
|
20
|
+
return `Browser Rendering ${this.operation} failed for binding "${this.binding}": ${causeMessage(this.cause)}`;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const browserRenderingError = (binding, operation, cause) => new BrowserRenderingOperationError({
|
|
24
|
+
binding,
|
|
25
|
+
operation,
|
|
26
|
+
cause
|
|
27
|
+
});
|
|
28
|
+
const tryBrowserRenderingPromise = (binding, operation, evaluate) => Effect.tryPromise({
|
|
29
|
+
try: evaluate,
|
|
30
|
+
catch: (cause) => browserRenderingError(binding, operation, cause)
|
|
31
|
+
});
|
|
32
|
+
const tryBrowserRenderingSync = (binding, operation, evaluate) => Effect.try({
|
|
33
|
+
try: evaluate,
|
|
34
|
+
catch: (cause) => browserRenderingError(binding, operation, cause)
|
|
35
|
+
});
|
|
36
|
+
const missingMethod = (binding, operation) => Effect.fail(browserRenderingError(binding, operation, /* @__PURE__ */ new TypeError(`Browser Rendering object does not expose ${operation}()`)));
|
|
37
|
+
const wrapPage = (binding, page) => ({
|
|
38
|
+
raw: page,
|
|
39
|
+
goto: (url, options) => page.goto === void 0 ? missingMethod(binding, "goto") : tryBrowserRenderingPromise(binding, "goto", () => page.goto(url, options)),
|
|
40
|
+
setContent: (html, options) => page.setContent === void 0 ? missingMethod(binding, "setContent") : tryBrowserRenderingPromise(binding, "setContent", () => page.setContent(html, options)),
|
|
41
|
+
content: page.content === void 0 ? missingMethod(binding, "content") : tryBrowserRenderingPromise(binding, "content", () => page.content()),
|
|
42
|
+
screenshot: (options) => {
|
|
43
|
+
const screenshot = page.screenshot?.bind(page);
|
|
44
|
+
return screenshot === void 0 ? missingMethod(binding, "screenshot") : tryBrowserRenderingPromise(binding, "screenshot", () => screenshot(options));
|
|
45
|
+
},
|
|
46
|
+
pdf: (options) => {
|
|
47
|
+
const pdf = page.pdf?.bind(page);
|
|
48
|
+
return pdf === void 0 ? missingMethod(binding, "pdf") : tryBrowserRenderingPromise(binding, "pdf", () => pdf(options));
|
|
49
|
+
},
|
|
50
|
+
evaluate: (pageFunction, ...args) => {
|
|
51
|
+
const evaluate = page.evaluate?.bind(page);
|
|
52
|
+
return evaluate === void 0 ? missingMethod(binding, "evaluate") : tryBrowserRenderingPromise(binding, "evaluate", () => evaluate(pageFunction, ...args));
|
|
53
|
+
},
|
|
54
|
+
close: (options) => page.close === void 0 ? Effect.void : tryBrowserRenderingPromise(binding, "closePage", () => page.close(options))
|
|
55
|
+
});
|
|
56
|
+
const wrapBrowser = (binding, browser) => ({
|
|
57
|
+
raw: browser,
|
|
58
|
+
newPage: tryBrowserRenderingPromise(binding, "newPage", () => browser.newPage()).pipe(Effect.map((page) => wrapPage(binding, page))),
|
|
59
|
+
version: browser.version === void 0 ? missingMethod(binding, "version") : tryBrowserRenderingPromise(binding, "version", () => browser.version()),
|
|
60
|
+
close: browser.close === void 0 ? Effect.void : tryBrowserRenderingPromise(binding, "closeBrowser", () => browser.close()),
|
|
61
|
+
disconnect: browser.disconnect === void 0 ? Effect.void : tryBrowserRenderingSync(binding, "disconnect", () => browser.disconnect())
|
|
62
|
+
});
|
|
63
|
+
const isBrowserRenderingBinding = (value) => Predicate.isObjectOrArray(value) || Predicate.isFunction(value);
|
|
64
|
+
const makeClient = (definition) => (binding) => ({
|
|
65
|
+
definition,
|
|
66
|
+
launchWith: (launch, options) => tryBrowserRenderingPromise(definition.binding, "launch", () => launch(binding, options)).pipe(Effect.map((browser) => wrapBrowser(definition.binding, browser)), Effect.withSpan("BrowserRendering.launchWith")),
|
|
67
|
+
connectWith: (connect, options) => tryBrowserRenderingPromise(definition.binding, "connect", () => connect(binding, options)).pipe(Effect.map((browser) => wrapBrowser(definition.binding, browser)), Effect.withSpan("BrowserRendering.connectWith")),
|
|
68
|
+
rawUnsafe: Effect.succeed(binding)
|
|
69
|
+
});
|
|
70
|
+
const layer = (tag, definition) => layer$1(tag, definition.binding, isBrowserRenderingBinding, makeClient(definition), { expected: expectedBrowserRenderingBinding });
|
|
71
|
+
const make = (id) => Tag()(id);
|
|
72
|
+
const Tag = () => (id) => {
|
|
73
|
+
const tag = Context.Service()(id);
|
|
74
|
+
const makeLayer = (definition) => layer(tag, definition);
|
|
75
|
+
return Object.assign(tag, {
|
|
76
|
+
id,
|
|
77
|
+
layer: makeLayer
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
//#endregion
|
|
81
|
+
export { BrowserRenderingOperationError, BrowserRendering_exports, Tag, isBrowserRenderingBinding, layer, make, makeClient };
|
package/dist/Cache.d.mts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as Context from "effect/Context";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Layer from "effect/Layer";
|
|
4
|
+
import * as Option from "effect/Option";
|
|
5
|
+
declare namespace Cache_d_exports {
|
|
6
|
+
export { CacheClient, CacheOperation, CacheOperationError, CacheQueryOptions, CacheRequest, CacheStorage, CacheStorageClient, layer, layerFrom, makeCacheClient, makeClient };
|
|
7
|
+
}
|
|
8
|
+
type CacheRequest = CloudflareRequestInfo | URL;
|
|
9
|
+
type CacheQueryOptions = CloudflareCacheQueryOptions;
|
|
10
|
+
type CacheOperation = "open" | "match" | "put" | "delete";
|
|
11
|
+
declare const CacheOperationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
12
|
+
readonly _tag: "CacheOperationError";
|
|
13
|
+
} & Readonly<A>;
|
|
14
|
+
declare class CacheOperationError extends CacheOperationError_base<{
|
|
15
|
+
readonly cache: string;
|
|
16
|
+
readonly operation: CacheOperation;
|
|
17
|
+
readonly cause: unknown;
|
|
18
|
+
}> {
|
|
19
|
+
get message(): string;
|
|
20
|
+
}
|
|
21
|
+
interface CacheClient {
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly match: (request: CacheRequest, options?: CacheQueryOptions) => Effect.Effect<Option.Option<Response>, CacheOperationError>;
|
|
24
|
+
readonly put: (request: CacheRequest, response: Response) => Effect.Effect<void, CacheOperationError>;
|
|
25
|
+
readonly delete: (request: CacheRequest, options?: CacheQueryOptions) => Effect.Effect<boolean, CacheOperationError>;
|
|
26
|
+
readonly rawUnsafe: Effect.Effect<CloudflareCache>;
|
|
27
|
+
}
|
|
28
|
+
interface CacheStorageClient {
|
|
29
|
+
readonly default: CacheClient;
|
|
30
|
+
readonly open: (name: string) => Effect.Effect<CacheClient, CacheOperationError>;
|
|
31
|
+
readonly rawUnsafe: Effect.Effect<CloudflareCacheStorage>;
|
|
32
|
+
}
|
|
33
|
+
declare const CacheStorage_base: Context.ServiceClass<CacheStorage, "effect-cf/CacheStorage", CacheStorageClient>;
|
|
34
|
+
declare class CacheStorage extends CacheStorage_base {}
|
|
35
|
+
declare const makeCacheClient: (cache: CloudflareCache, name?: string) => CacheClient;
|
|
36
|
+
declare const makeClient: (storage: CloudflareCacheStorage) => CacheStorageClient;
|
|
37
|
+
declare const layerFrom: (storage: CloudflareCacheStorage) => Layer.Layer<CacheStorage>;
|
|
38
|
+
declare const layer: Layer.Layer<CacheStorage>;
|
|
39
|
+
//#endregion
|
|
40
|
+
export { CacheClient, CacheOperation, CacheOperationError, CacheQueryOptions, CacheRequest, CacheStorage, CacheStorageClient, Cache_d_exports, layer, layerFrom, makeCacheClient, makeClient };
|