ff-effect 0.0.8 → 0.0.11
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/dist/for/ai/index.cjs +167 -0
- package/dist/for/ai/index.cjs.map +1 -0
- package/dist/for/ai/index.d.cts +47 -0
- package/dist/for/ai/index.d.ts +47 -0
- package/dist/for/ai/index.js +127 -0
- package/dist/for/ai/index.js.map +1 -0
- package/dist/for/drizzle/index.cjs +48 -8
- package/dist/for/drizzle/index.cjs.map +1 -1
- package/dist/for/drizzle/index.d.cts +21 -27
- package/dist/for/drizzle/index.d.ts +21 -27
- package/dist/for/drizzle/index.js +32 -9
- package/dist/for/drizzle/index.js.map +1 -1
- package/dist/for/inngest/index.cjs +3021 -0
- package/dist/for/inngest/index.cjs.map +1 -0
- package/dist/for/inngest/index.d.cts +78 -0
- package/dist/for/inngest/index.d.ts +78 -0
- package/dist/for/inngest/index.js +2987 -0
- package/dist/for/inngest/index.js.map +1 -0
- package/dist/for/orpc/index.cjs.map +1 -1
- package/dist/for/orpc/index.js.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +17 -3
- package/src/extract.ts +7 -6
- package/src/for/ai/index.test.ts +244 -0
- package/src/for/ai/index.ts +200 -0
- package/src/for/ai/schema.ts +20 -0
- package/src/for/drizzle/index.test.ts +106 -47
- package/src/for/drizzle/index.ts +30 -6
- package/src/for/inngest/cron.ts +21 -0
- package/src/for/inngest/index.test.ts +177 -0
- package/src/for/inngest/index.ts +187 -0
- package/src/for/inngest/step.ts +77 -0
- package/src/run-promise-unwrapped.ts +2 -2
- package/src/wrap-client.ts +1 -1
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/for/ai/index.ts
|
|
31
|
+
var ai_exports = {};
|
|
32
|
+
__export(ai_exports, {
|
|
33
|
+
AiError: () => AiError,
|
|
34
|
+
describe: () => describe,
|
|
35
|
+
effectSchema: () => effectSchema,
|
|
36
|
+
generateText: () => generateText2,
|
|
37
|
+
streamText: () => streamText2,
|
|
38
|
+
tool: () => tool2
|
|
39
|
+
});
|
|
40
|
+
module.exports = __toCommonJS(ai_exports);
|
|
41
|
+
var Ai = __toESM(require("ai"), 1);
|
|
42
|
+
var import_effect2 = require("effect");
|
|
43
|
+
|
|
44
|
+
// src/for/ai/schema.ts
|
|
45
|
+
var import_ai = require("ai");
|
|
46
|
+
var import_effect = require("effect");
|
|
47
|
+
function effectSchema(schema) {
|
|
48
|
+
const decode = import_effect.Schema.decodeUnknownEither(schema);
|
|
49
|
+
return (0, import_ai.jsonSchema)(import_effect.JSONSchema.make(schema), {
|
|
50
|
+
validate: (value) => {
|
|
51
|
+
const result = decode(value);
|
|
52
|
+
if (import_effect.Either.isRight(result)) {
|
|
53
|
+
return { success: true, value: result.right };
|
|
54
|
+
}
|
|
55
|
+
return { success: false, error: new Error(String(result.left)) };
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
var describe = (d) => (self) => self.annotations({ description: d });
|
|
60
|
+
|
|
61
|
+
// src/for/ai/index.ts
|
|
62
|
+
var AiError = class extends import_effect2.Data.TaggedError("ff-effect/AiError") {
|
|
63
|
+
};
|
|
64
|
+
function wrapCallback(runPromise, callback) {
|
|
65
|
+
if (callback == null) return void 0;
|
|
66
|
+
return (...args) => runPromise(callback(...args));
|
|
67
|
+
}
|
|
68
|
+
function generateText2(params) {
|
|
69
|
+
return import_effect2.Effect.gen(function* () {
|
|
70
|
+
const runPromise = yield* import_effect2.FiberSet.makeRuntimePromise();
|
|
71
|
+
const originalParams = {
|
|
72
|
+
...params,
|
|
73
|
+
onStepFinish: wrapCallback(runPromise, params.onStepFinish),
|
|
74
|
+
onFinish: wrapCallback(runPromise, params.onFinish),
|
|
75
|
+
experimental_onStart: wrapCallback(
|
|
76
|
+
runPromise,
|
|
77
|
+
params.experimental_onStart
|
|
78
|
+
),
|
|
79
|
+
experimental_onStepStart: wrapCallback(
|
|
80
|
+
runPromise,
|
|
81
|
+
params.experimental_onStepStart
|
|
82
|
+
),
|
|
83
|
+
experimental_onToolCallStart: wrapCallback(
|
|
84
|
+
runPromise,
|
|
85
|
+
params.experimental_onToolCallStart
|
|
86
|
+
),
|
|
87
|
+
experimental_onToolCallFinish: wrapCallback(
|
|
88
|
+
runPromise,
|
|
89
|
+
params.experimental_onToolCallFinish
|
|
90
|
+
)
|
|
91
|
+
};
|
|
92
|
+
return yield* import_effect2.Effect.tryPromise({
|
|
93
|
+
try: () => Ai.generateText(originalParams),
|
|
94
|
+
catch: (cause) => new AiError({ message: "generateText failed", cause })
|
|
95
|
+
});
|
|
96
|
+
}).pipe(import_effect2.Effect.scoped);
|
|
97
|
+
}
|
|
98
|
+
function streamText2(params) {
|
|
99
|
+
return import_effect2.Effect.gen(function* () {
|
|
100
|
+
const runPromise = yield* import_effect2.FiberSet.makeRuntimePromise();
|
|
101
|
+
const originalParams = {
|
|
102
|
+
...params,
|
|
103
|
+
onChunk: wrapCallback(runPromise, params.onChunk),
|
|
104
|
+
onError: wrapCallback(runPromise, params.onError),
|
|
105
|
+
onFinish: wrapCallback(runPromise, params.onFinish),
|
|
106
|
+
onAbort: wrapCallback(runPromise, params.onAbort),
|
|
107
|
+
onStepFinish: wrapCallback(runPromise, params.onStepFinish),
|
|
108
|
+
experimental_onStart: wrapCallback(
|
|
109
|
+
runPromise,
|
|
110
|
+
params.experimental_onStart
|
|
111
|
+
),
|
|
112
|
+
experimental_onStepStart: wrapCallback(
|
|
113
|
+
runPromise,
|
|
114
|
+
params.experimental_onStepStart
|
|
115
|
+
),
|
|
116
|
+
experimental_onToolCallStart: wrapCallback(
|
|
117
|
+
runPromise,
|
|
118
|
+
params.experimental_onToolCallStart
|
|
119
|
+
),
|
|
120
|
+
experimental_onToolCallFinish: wrapCallback(
|
|
121
|
+
runPromise,
|
|
122
|
+
params.experimental_onToolCallFinish
|
|
123
|
+
)
|
|
124
|
+
};
|
|
125
|
+
try {
|
|
126
|
+
return Ai.streamText(originalParams);
|
|
127
|
+
} catch (cause) {
|
|
128
|
+
return yield* import_effect2.Effect.fail(
|
|
129
|
+
new AiError({ message: "streamText failed", cause })
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
function tool2(params) {
|
|
135
|
+
return import_effect2.Effect.gen(function* () {
|
|
136
|
+
const runPromise = yield* import_effect2.FiberSet.makeRuntimePromise();
|
|
137
|
+
const originalParams = {
|
|
138
|
+
...params,
|
|
139
|
+
...params.execute && {
|
|
140
|
+
execute: (input, options) => (
|
|
141
|
+
// biome-ignore lint/style/noNonNullAssertion: guarded by truthiness check
|
|
142
|
+
runPromise(params.execute(input, options))
|
|
143
|
+
)
|
|
144
|
+
},
|
|
145
|
+
onInputStart: wrapCallback(runPromise, params.onInputStart),
|
|
146
|
+
onInputDelta: wrapCallback(runPromise, params.onInputDelta),
|
|
147
|
+
onInputAvailable: wrapCallback(runPromise, params.onInputAvailable),
|
|
148
|
+
...params.toModelOutput && {
|
|
149
|
+
toModelOutput: (options) => (
|
|
150
|
+
// biome-ignore lint/style/noNonNullAssertion: guarded by truthiness check
|
|
151
|
+
runPromise(params.toModelOutput(options))
|
|
152
|
+
)
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
return Ai.tool(originalParams);
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
159
|
+
0 && (module.exports = {
|
|
160
|
+
AiError,
|
|
161
|
+
describe,
|
|
162
|
+
effectSchema,
|
|
163
|
+
generateText,
|
|
164
|
+
streamText,
|
|
165
|
+
tool
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/for/ai/index.ts","../../../src/for/ai/schema.ts"],"sourcesContent":["import * as Ai from 'ai';\nimport { Data, Effect, FiberSet, type Scope } from 'effect';\n\nexport { describe, effectSchema } from './schema';\n\nexport class AiError extends Data.TaggedError('ff-effect/AiError')<{\n\tmessage: string;\n\tcause?: unknown;\n}> {}\n\n// biome-ignore lint/suspicious/noExplicitAny: internal bridging helper, type safety enforced at public API boundary\nfunction wrapCallback(runPromise: any, callback: any) {\n\tif (callback == null) return undefined;\n\t// biome-ignore lint/suspicious/noExplicitAny: internal bridging helper\n\treturn (...args: any[]) => runPromise(callback(...args));\n}\n\ntype GenerateTextCallbackKeys =\n\t| 'onStepFinish'\n\t| 'onFinish'\n\t| 'experimental_onStart'\n\t| 'experimental_onStepStart'\n\t| 'experimental_onToolCallStart'\n\t| 'experimental_onToolCallFinish';\n\ntype StreamTextCallbackKeys =\n\t| 'onChunk'\n\t| 'onError'\n\t| 'onFinish'\n\t| 'onAbort'\n\t| 'onStepFinish'\n\t| 'experimental_onStart'\n\t| 'experimental_onStepStart'\n\t| 'experimental_onToolCallStart'\n\t| 'experimental_onToolCallFinish';\n\ntype EffectifyCallbacks<T, Keys extends string, R> = Omit<T, Keys & keyof T> & {\n\t[K in Keys & keyof T]?: NonNullable<T[K]> extends (\n\t\t...args: infer A\n\t) => unknown\n\t\t? (...args: A) => Effect.Effect<void, never, R>\n\t\t: T[K];\n};\n\ntype GenerateTextOriginalParams = Parameters<typeof Ai.generateText>[0];\ntype GenerateTextReturn = Awaited<ReturnType<typeof Ai.generateText>>;\n\nexport function generateText<R = never>(\n\tparams: EffectifyCallbacks<\n\t\tGenerateTextOriginalParams,\n\t\tGenerateTextCallbackKeys,\n\t\tR\n\t>,\n): Effect.Effect<GenerateTextReturn, AiError, R> {\n\treturn Effect.gen(function* () {\n\t\tconst runPromise = yield* FiberSet.makeRuntimePromise<R>();\n\n\t\tconst originalParams = {\n\t\t\t...params,\n\t\t\tonStepFinish: wrapCallback(runPromise, params.onStepFinish),\n\t\t\tonFinish: wrapCallback(runPromise, params.onFinish),\n\t\t\texperimental_onStart: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onStart,\n\t\t\t),\n\t\t\texperimental_onStepStart: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onStepStart,\n\t\t\t),\n\t\t\texperimental_onToolCallStart: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onToolCallStart,\n\t\t\t),\n\t\t\texperimental_onToolCallFinish: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onToolCallFinish,\n\t\t\t),\n\t\t} as GenerateTextOriginalParams;\n\n\t\treturn yield* Effect.tryPromise({\n\t\t\ttry: () => Ai.generateText(originalParams),\n\t\t\tcatch: (cause) => new AiError({ message: 'generateText failed', cause }),\n\t\t});\n\t}).pipe(Effect.scoped);\n}\n\ntype StreamTextOriginalParams = Parameters<typeof Ai.streamText>[0];\ntype StreamTextReturn = ReturnType<typeof Ai.streamText>;\n\nexport function streamText<R = never>(\n\tparams: EffectifyCallbacks<\n\t\tStreamTextOriginalParams,\n\t\tStreamTextCallbackKeys,\n\t\tR\n\t>,\n): Effect.Effect<StreamTextReturn, AiError, R | Scope.Scope> {\n\treturn Effect.gen(function* () {\n\t\tconst runPromise = yield* FiberSet.makeRuntimePromise<R>();\n\n\t\tconst originalParams = {\n\t\t\t...params,\n\t\t\tonChunk: wrapCallback(runPromise, params.onChunk),\n\t\t\tonError: wrapCallback(runPromise, params.onError),\n\t\t\tonFinish: wrapCallback(runPromise, params.onFinish),\n\t\t\tonAbort: wrapCallback(runPromise, params.onAbort),\n\t\t\tonStepFinish: wrapCallback(runPromise, params.onStepFinish),\n\t\t\texperimental_onStart: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onStart,\n\t\t\t),\n\t\t\texperimental_onStepStart: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onStepStart,\n\t\t\t),\n\t\t\texperimental_onToolCallStart: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onToolCallStart,\n\t\t\t),\n\t\t\texperimental_onToolCallFinish: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onToolCallFinish,\n\t\t\t),\n\t\t} as StreamTextOriginalParams;\n\n\t\ttry {\n\t\t\treturn Ai.streamText(originalParams);\n\t\t} catch (cause) {\n\t\t\treturn yield* Effect.fail(\n\t\t\t\tnew AiError({ message: 'streamText failed', cause }),\n\t\t\t);\n\t\t}\n\t});\n}\n\ntype OriginalToolDef<INPUT, OUTPUT> = Parameters<\n\ttypeof Ai.tool<INPUT, OUTPUT>\n>[0];\n\ntype ToolModelOutput = Awaited<\n\tReturnType<NonNullable<Ai.Tool<unknown, unknown>['toModelOutput']>>\n>;\n\ntype EffectToolDef<INPUT, OUTPUT, R> = Omit<\n\tOriginalToolDef<INPUT, OUTPUT>,\n\t| 'execute'\n\t| 'onInputStart'\n\t| 'onInputDelta'\n\t| 'onInputAvailable'\n\t| 'toModelOutput'\n> & {\n\texecute?: (\n\t\tinput: INPUT,\n\t\toptions: Ai.ToolExecutionOptions,\n\t) => Effect.Effect<OUTPUT, unknown, R>;\n\tonInputStart?: (\n\t\toptions: Ai.ToolExecutionOptions,\n\t) => Effect.Effect<void, never, R>;\n\tonInputDelta?: (\n\t\toptions: { inputTextDelta: string } & Ai.ToolExecutionOptions,\n\t) => Effect.Effect<void, never, R>;\n\tonInputAvailable?: (\n\t\toptions: { input: INPUT } & Ai.ToolExecutionOptions,\n\t) => Effect.Effect<void, never, R>;\n\ttoModelOutput?: (options: {\n\t\ttoolCallId: string;\n\t\tinput: INPUT;\n\t\toutput: OUTPUT;\n\t}) => Effect.Effect<ToolModelOutput, never, R>;\n};\n\nexport function tool<INPUT, OUTPUT, R = never>(\n\tparams: EffectToolDef<INPUT, OUTPUT, R>,\n): Effect.Effect<Ai.Tool<INPUT, OUTPUT>, never, R | Scope.Scope> {\n\treturn Effect.gen(function* () {\n\t\tconst runPromise = yield* FiberSet.makeRuntimePromise<R>();\n\n\t\tconst originalParams = {\n\t\t\t...params,\n\t\t\t...(params.execute && {\n\t\t\t\texecute: (input: INPUT, options: Ai.ToolExecutionOptions) =>\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: guarded by truthiness check\n\t\t\t\t\trunPromise(params.execute!(input, options)),\n\t\t\t}),\n\t\t\tonInputStart: wrapCallback(runPromise, params.onInputStart),\n\t\t\tonInputDelta: wrapCallback(runPromise, params.onInputDelta),\n\t\t\tonInputAvailable: wrapCallback(runPromise, params.onInputAvailable),\n\t\t\t...(params.toModelOutput && {\n\t\t\t\ttoModelOutput: (options: {\n\t\t\t\t\ttoolCallId: string;\n\t\t\t\t\tinput: INPUT;\n\t\t\t\t\toutput: OUTPUT;\n\t\t\t\t}) =>\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: guarded by truthiness check\n\t\t\t\t\trunPromise(params.toModelOutput!(options)),\n\t\t\t}),\n\t\t} as OriginalToolDef<INPUT, OUTPUT>;\n\n\t\treturn Ai.tool(originalParams);\n\t});\n}\n","import { jsonSchema as aiJsonSchema } from 'ai';\nimport { Either, JSONSchema, Schema } from 'effect';\n\nexport function effectSchema<A, I>(schema: Schema.Schema<A, I>) {\n\tconst decode = Schema.decodeUnknownEither(schema);\n\treturn aiJsonSchema<A>(JSONSchema.make(schema), {\n\t\tvalidate: (value) => {\n\t\t\tconst result = decode(value);\n\t\t\tif (Either.isRight(result)) {\n\t\t\t\treturn { success: true as const, value: result.right };\n\t\t\t}\n\t\t\treturn { success: false as const, error: new Error(String(result.left)) };\n\t\t},\n\t});\n}\n\nexport const describe =\n\t(d: string) =>\n\t<A, I, R>(self: Schema.Schema<A, I, R>) =>\n\t\tself.annotations({ description: d });\n"],"mappings":"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","names":["generateText","streamText","tool","import_effect","aiJsonSchema","generateText","streamText","tool"]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as effect_Cause from 'effect/Cause';
|
|
2
|
+
import * as effect_Types from 'effect/Types';
|
|
3
|
+
import * as Ai from 'ai';
|
|
4
|
+
import { Schema, Effect, Scope } from 'effect';
|
|
5
|
+
|
|
6
|
+
declare function effectSchema<A, I>(schema: Schema.Schema<A, I>): Ai.Schema<A>;
|
|
7
|
+
declare const describe: (d: string) => <A, I, R>(self: Schema.Schema<A, I, R>) => Schema.Schema<A, I, R>;
|
|
8
|
+
|
|
9
|
+
declare const AiError_base: new <A extends Record<string, any> = {}>(args: effect_Types.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => effect_Cause.YieldableError & {
|
|
10
|
+
readonly _tag: "ff-effect/AiError";
|
|
11
|
+
} & Readonly<A>;
|
|
12
|
+
declare class AiError extends AiError_base<{
|
|
13
|
+
message: string;
|
|
14
|
+
cause?: unknown;
|
|
15
|
+
}> {
|
|
16
|
+
}
|
|
17
|
+
type GenerateTextCallbackKeys = 'onStepFinish' | 'onFinish' | 'experimental_onStart' | 'experimental_onStepStart' | 'experimental_onToolCallStart' | 'experimental_onToolCallFinish';
|
|
18
|
+
type StreamTextCallbackKeys = 'onChunk' | 'onError' | 'onFinish' | 'onAbort' | 'onStepFinish' | 'experimental_onStart' | 'experimental_onStepStart' | 'experimental_onToolCallStart' | 'experimental_onToolCallFinish';
|
|
19
|
+
type EffectifyCallbacks<T, Keys extends string, R> = Omit<T, Keys & keyof T> & {
|
|
20
|
+
[K in Keys & keyof T]?: NonNullable<T[K]> extends (...args: infer A) => unknown ? (...args: A) => Effect.Effect<void, never, R> : T[K];
|
|
21
|
+
};
|
|
22
|
+
type GenerateTextOriginalParams = Parameters<typeof Ai.generateText>[0];
|
|
23
|
+
type GenerateTextReturn = Awaited<ReturnType<typeof Ai.generateText>>;
|
|
24
|
+
declare function generateText<R = never>(params: EffectifyCallbacks<GenerateTextOriginalParams, GenerateTextCallbackKeys, R>): Effect.Effect<GenerateTextReturn, AiError, R>;
|
|
25
|
+
type StreamTextOriginalParams = Parameters<typeof Ai.streamText>[0];
|
|
26
|
+
type StreamTextReturn = ReturnType<typeof Ai.streamText>;
|
|
27
|
+
declare function streamText<R = never>(params: EffectifyCallbacks<StreamTextOriginalParams, StreamTextCallbackKeys, R>): Effect.Effect<StreamTextReturn, AiError, R | Scope.Scope>;
|
|
28
|
+
type OriginalToolDef<INPUT, OUTPUT> = Parameters<typeof Ai.tool<INPUT, OUTPUT>>[0];
|
|
29
|
+
type ToolModelOutput = Awaited<ReturnType<NonNullable<Ai.Tool<unknown, unknown>['toModelOutput']>>>;
|
|
30
|
+
type EffectToolDef<INPUT, OUTPUT, R> = Omit<OriginalToolDef<INPUT, OUTPUT>, 'execute' | 'onInputStart' | 'onInputDelta' | 'onInputAvailable' | 'toModelOutput'> & {
|
|
31
|
+
execute?: (input: INPUT, options: Ai.ToolExecutionOptions) => Effect.Effect<OUTPUT, unknown, R>;
|
|
32
|
+
onInputStart?: (options: Ai.ToolExecutionOptions) => Effect.Effect<void, never, R>;
|
|
33
|
+
onInputDelta?: (options: {
|
|
34
|
+
inputTextDelta: string;
|
|
35
|
+
} & Ai.ToolExecutionOptions) => Effect.Effect<void, never, R>;
|
|
36
|
+
onInputAvailable?: (options: {
|
|
37
|
+
input: INPUT;
|
|
38
|
+
} & Ai.ToolExecutionOptions) => Effect.Effect<void, never, R>;
|
|
39
|
+
toModelOutput?: (options: {
|
|
40
|
+
toolCallId: string;
|
|
41
|
+
input: INPUT;
|
|
42
|
+
output: OUTPUT;
|
|
43
|
+
}) => Effect.Effect<ToolModelOutput, never, R>;
|
|
44
|
+
};
|
|
45
|
+
declare function tool<INPUT, OUTPUT, R = never>(params: EffectToolDef<INPUT, OUTPUT, R>): Effect.Effect<Ai.Tool<INPUT, OUTPUT>, never, R | Scope.Scope>;
|
|
46
|
+
|
|
47
|
+
export { AiError, describe, effectSchema, generateText, streamText, tool };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as effect_Cause from 'effect/Cause';
|
|
2
|
+
import * as effect_Types from 'effect/Types';
|
|
3
|
+
import * as Ai from 'ai';
|
|
4
|
+
import { Schema, Effect, Scope } from 'effect';
|
|
5
|
+
|
|
6
|
+
declare function effectSchema<A, I>(schema: Schema.Schema<A, I>): Ai.Schema<A>;
|
|
7
|
+
declare const describe: (d: string) => <A, I, R>(self: Schema.Schema<A, I, R>) => Schema.Schema<A, I, R>;
|
|
8
|
+
|
|
9
|
+
declare const AiError_base: new <A extends Record<string, any> = {}>(args: effect_Types.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => effect_Cause.YieldableError & {
|
|
10
|
+
readonly _tag: "ff-effect/AiError";
|
|
11
|
+
} & Readonly<A>;
|
|
12
|
+
declare class AiError extends AiError_base<{
|
|
13
|
+
message: string;
|
|
14
|
+
cause?: unknown;
|
|
15
|
+
}> {
|
|
16
|
+
}
|
|
17
|
+
type GenerateTextCallbackKeys = 'onStepFinish' | 'onFinish' | 'experimental_onStart' | 'experimental_onStepStart' | 'experimental_onToolCallStart' | 'experimental_onToolCallFinish';
|
|
18
|
+
type StreamTextCallbackKeys = 'onChunk' | 'onError' | 'onFinish' | 'onAbort' | 'onStepFinish' | 'experimental_onStart' | 'experimental_onStepStart' | 'experimental_onToolCallStart' | 'experimental_onToolCallFinish';
|
|
19
|
+
type EffectifyCallbacks<T, Keys extends string, R> = Omit<T, Keys & keyof T> & {
|
|
20
|
+
[K in Keys & keyof T]?: NonNullable<T[K]> extends (...args: infer A) => unknown ? (...args: A) => Effect.Effect<void, never, R> : T[K];
|
|
21
|
+
};
|
|
22
|
+
type GenerateTextOriginalParams = Parameters<typeof Ai.generateText>[0];
|
|
23
|
+
type GenerateTextReturn = Awaited<ReturnType<typeof Ai.generateText>>;
|
|
24
|
+
declare function generateText<R = never>(params: EffectifyCallbacks<GenerateTextOriginalParams, GenerateTextCallbackKeys, R>): Effect.Effect<GenerateTextReturn, AiError, R>;
|
|
25
|
+
type StreamTextOriginalParams = Parameters<typeof Ai.streamText>[0];
|
|
26
|
+
type StreamTextReturn = ReturnType<typeof Ai.streamText>;
|
|
27
|
+
declare function streamText<R = never>(params: EffectifyCallbacks<StreamTextOriginalParams, StreamTextCallbackKeys, R>): Effect.Effect<StreamTextReturn, AiError, R | Scope.Scope>;
|
|
28
|
+
type OriginalToolDef<INPUT, OUTPUT> = Parameters<typeof Ai.tool<INPUT, OUTPUT>>[0];
|
|
29
|
+
type ToolModelOutput = Awaited<ReturnType<NonNullable<Ai.Tool<unknown, unknown>['toModelOutput']>>>;
|
|
30
|
+
type EffectToolDef<INPUT, OUTPUT, R> = Omit<OriginalToolDef<INPUT, OUTPUT>, 'execute' | 'onInputStart' | 'onInputDelta' | 'onInputAvailable' | 'toModelOutput'> & {
|
|
31
|
+
execute?: (input: INPUT, options: Ai.ToolExecutionOptions) => Effect.Effect<OUTPUT, unknown, R>;
|
|
32
|
+
onInputStart?: (options: Ai.ToolExecutionOptions) => Effect.Effect<void, never, R>;
|
|
33
|
+
onInputDelta?: (options: {
|
|
34
|
+
inputTextDelta: string;
|
|
35
|
+
} & Ai.ToolExecutionOptions) => Effect.Effect<void, never, R>;
|
|
36
|
+
onInputAvailable?: (options: {
|
|
37
|
+
input: INPUT;
|
|
38
|
+
} & Ai.ToolExecutionOptions) => Effect.Effect<void, never, R>;
|
|
39
|
+
toModelOutput?: (options: {
|
|
40
|
+
toolCallId: string;
|
|
41
|
+
input: INPUT;
|
|
42
|
+
output: OUTPUT;
|
|
43
|
+
}) => Effect.Effect<ToolModelOutput, never, R>;
|
|
44
|
+
};
|
|
45
|
+
declare function tool<INPUT, OUTPUT, R = never>(params: EffectToolDef<INPUT, OUTPUT, R>): Effect.Effect<Ai.Tool<INPUT, OUTPUT>, never, R | Scope.Scope>;
|
|
46
|
+
|
|
47
|
+
export { AiError, describe, effectSchema, generateText, streamText, tool };
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// src/for/ai/index.ts
|
|
2
|
+
import * as Ai from "ai";
|
|
3
|
+
import { Data, Effect, FiberSet } from "effect";
|
|
4
|
+
|
|
5
|
+
// src/for/ai/schema.ts
|
|
6
|
+
import { jsonSchema as aiJsonSchema } from "ai";
|
|
7
|
+
import { Either, JSONSchema, Schema } from "effect";
|
|
8
|
+
function effectSchema(schema) {
|
|
9
|
+
const decode = Schema.decodeUnknownEither(schema);
|
|
10
|
+
return aiJsonSchema(JSONSchema.make(schema), {
|
|
11
|
+
validate: (value) => {
|
|
12
|
+
const result = decode(value);
|
|
13
|
+
if (Either.isRight(result)) {
|
|
14
|
+
return { success: true, value: result.right };
|
|
15
|
+
}
|
|
16
|
+
return { success: false, error: new Error(String(result.left)) };
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
var describe = (d) => (self) => self.annotations({ description: d });
|
|
21
|
+
|
|
22
|
+
// src/for/ai/index.ts
|
|
23
|
+
var AiError = class extends Data.TaggedError("ff-effect/AiError") {
|
|
24
|
+
};
|
|
25
|
+
function wrapCallback(runPromise, callback) {
|
|
26
|
+
if (callback == null) return void 0;
|
|
27
|
+
return (...args) => runPromise(callback(...args));
|
|
28
|
+
}
|
|
29
|
+
function generateText2(params) {
|
|
30
|
+
return Effect.gen(function* () {
|
|
31
|
+
const runPromise = yield* FiberSet.makeRuntimePromise();
|
|
32
|
+
const originalParams = {
|
|
33
|
+
...params,
|
|
34
|
+
onStepFinish: wrapCallback(runPromise, params.onStepFinish),
|
|
35
|
+
onFinish: wrapCallback(runPromise, params.onFinish),
|
|
36
|
+
experimental_onStart: wrapCallback(
|
|
37
|
+
runPromise,
|
|
38
|
+
params.experimental_onStart
|
|
39
|
+
),
|
|
40
|
+
experimental_onStepStart: wrapCallback(
|
|
41
|
+
runPromise,
|
|
42
|
+
params.experimental_onStepStart
|
|
43
|
+
),
|
|
44
|
+
experimental_onToolCallStart: wrapCallback(
|
|
45
|
+
runPromise,
|
|
46
|
+
params.experimental_onToolCallStart
|
|
47
|
+
),
|
|
48
|
+
experimental_onToolCallFinish: wrapCallback(
|
|
49
|
+
runPromise,
|
|
50
|
+
params.experimental_onToolCallFinish
|
|
51
|
+
)
|
|
52
|
+
};
|
|
53
|
+
return yield* Effect.tryPromise({
|
|
54
|
+
try: () => Ai.generateText(originalParams),
|
|
55
|
+
catch: (cause) => new AiError({ message: "generateText failed", cause })
|
|
56
|
+
});
|
|
57
|
+
}).pipe(Effect.scoped);
|
|
58
|
+
}
|
|
59
|
+
function streamText2(params) {
|
|
60
|
+
return Effect.gen(function* () {
|
|
61
|
+
const runPromise = yield* FiberSet.makeRuntimePromise();
|
|
62
|
+
const originalParams = {
|
|
63
|
+
...params,
|
|
64
|
+
onChunk: wrapCallback(runPromise, params.onChunk),
|
|
65
|
+
onError: wrapCallback(runPromise, params.onError),
|
|
66
|
+
onFinish: wrapCallback(runPromise, params.onFinish),
|
|
67
|
+
onAbort: wrapCallback(runPromise, params.onAbort),
|
|
68
|
+
onStepFinish: wrapCallback(runPromise, params.onStepFinish),
|
|
69
|
+
experimental_onStart: wrapCallback(
|
|
70
|
+
runPromise,
|
|
71
|
+
params.experimental_onStart
|
|
72
|
+
),
|
|
73
|
+
experimental_onStepStart: wrapCallback(
|
|
74
|
+
runPromise,
|
|
75
|
+
params.experimental_onStepStart
|
|
76
|
+
),
|
|
77
|
+
experimental_onToolCallStart: wrapCallback(
|
|
78
|
+
runPromise,
|
|
79
|
+
params.experimental_onToolCallStart
|
|
80
|
+
),
|
|
81
|
+
experimental_onToolCallFinish: wrapCallback(
|
|
82
|
+
runPromise,
|
|
83
|
+
params.experimental_onToolCallFinish
|
|
84
|
+
)
|
|
85
|
+
};
|
|
86
|
+
try {
|
|
87
|
+
return Ai.streamText(originalParams);
|
|
88
|
+
} catch (cause) {
|
|
89
|
+
return yield* Effect.fail(
|
|
90
|
+
new AiError({ message: "streamText failed", cause })
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function tool2(params) {
|
|
96
|
+
return Effect.gen(function* () {
|
|
97
|
+
const runPromise = yield* FiberSet.makeRuntimePromise();
|
|
98
|
+
const originalParams = {
|
|
99
|
+
...params,
|
|
100
|
+
...params.execute && {
|
|
101
|
+
execute: (input, options) => (
|
|
102
|
+
// biome-ignore lint/style/noNonNullAssertion: guarded by truthiness check
|
|
103
|
+
runPromise(params.execute(input, options))
|
|
104
|
+
)
|
|
105
|
+
},
|
|
106
|
+
onInputStart: wrapCallback(runPromise, params.onInputStart),
|
|
107
|
+
onInputDelta: wrapCallback(runPromise, params.onInputDelta),
|
|
108
|
+
onInputAvailable: wrapCallback(runPromise, params.onInputAvailable),
|
|
109
|
+
...params.toModelOutput && {
|
|
110
|
+
toModelOutput: (options) => (
|
|
111
|
+
// biome-ignore lint/style/noNonNullAssertion: guarded by truthiness check
|
|
112
|
+
runPromise(params.toModelOutput(options))
|
|
113
|
+
)
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
return Ai.tool(originalParams);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
export {
|
|
120
|
+
AiError,
|
|
121
|
+
describe,
|
|
122
|
+
effectSchema,
|
|
123
|
+
generateText2 as generateText,
|
|
124
|
+
streamText2 as streamText,
|
|
125
|
+
tool2 as tool
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/for/ai/index.ts","../../../src/for/ai/schema.ts"],"sourcesContent":["import * as Ai from 'ai';\nimport { Data, Effect, FiberSet, type Scope } from 'effect';\n\nexport { describe, effectSchema } from './schema';\n\nexport class AiError extends Data.TaggedError('ff-effect/AiError')<{\n\tmessage: string;\n\tcause?: unknown;\n}> {}\n\n// biome-ignore lint/suspicious/noExplicitAny: internal bridging helper, type safety enforced at public API boundary\nfunction wrapCallback(runPromise: any, callback: any) {\n\tif (callback == null) return undefined;\n\t// biome-ignore lint/suspicious/noExplicitAny: internal bridging helper\n\treturn (...args: any[]) => runPromise(callback(...args));\n}\n\ntype GenerateTextCallbackKeys =\n\t| 'onStepFinish'\n\t| 'onFinish'\n\t| 'experimental_onStart'\n\t| 'experimental_onStepStart'\n\t| 'experimental_onToolCallStart'\n\t| 'experimental_onToolCallFinish';\n\ntype StreamTextCallbackKeys =\n\t| 'onChunk'\n\t| 'onError'\n\t| 'onFinish'\n\t| 'onAbort'\n\t| 'onStepFinish'\n\t| 'experimental_onStart'\n\t| 'experimental_onStepStart'\n\t| 'experimental_onToolCallStart'\n\t| 'experimental_onToolCallFinish';\n\ntype EffectifyCallbacks<T, Keys extends string, R> = Omit<T, Keys & keyof T> & {\n\t[K in Keys & keyof T]?: NonNullable<T[K]> extends (\n\t\t...args: infer A\n\t) => unknown\n\t\t? (...args: A) => Effect.Effect<void, never, R>\n\t\t: T[K];\n};\n\ntype GenerateTextOriginalParams = Parameters<typeof Ai.generateText>[0];\ntype GenerateTextReturn = Awaited<ReturnType<typeof Ai.generateText>>;\n\nexport function generateText<R = never>(\n\tparams: EffectifyCallbacks<\n\t\tGenerateTextOriginalParams,\n\t\tGenerateTextCallbackKeys,\n\t\tR\n\t>,\n): Effect.Effect<GenerateTextReturn, AiError, R> {\n\treturn Effect.gen(function* () {\n\t\tconst runPromise = yield* FiberSet.makeRuntimePromise<R>();\n\n\t\tconst originalParams = {\n\t\t\t...params,\n\t\t\tonStepFinish: wrapCallback(runPromise, params.onStepFinish),\n\t\t\tonFinish: wrapCallback(runPromise, params.onFinish),\n\t\t\texperimental_onStart: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onStart,\n\t\t\t),\n\t\t\texperimental_onStepStart: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onStepStart,\n\t\t\t),\n\t\t\texperimental_onToolCallStart: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onToolCallStart,\n\t\t\t),\n\t\t\texperimental_onToolCallFinish: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onToolCallFinish,\n\t\t\t),\n\t\t} as GenerateTextOriginalParams;\n\n\t\treturn yield* Effect.tryPromise({\n\t\t\ttry: () => Ai.generateText(originalParams),\n\t\t\tcatch: (cause) => new AiError({ message: 'generateText failed', cause }),\n\t\t});\n\t}).pipe(Effect.scoped);\n}\n\ntype StreamTextOriginalParams = Parameters<typeof Ai.streamText>[0];\ntype StreamTextReturn = ReturnType<typeof Ai.streamText>;\n\nexport function streamText<R = never>(\n\tparams: EffectifyCallbacks<\n\t\tStreamTextOriginalParams,\n\t\tStreamTextCallbackKeys,\n\t\tR\n\t>,\n): Effect.Effect<StreamTextReturn, AiError, R | Scope.Scope> {\n\treturn Effect.gen(function* () {\n\t\tconst runPromise = yield* FiberSet.makeRuntimePromise<R>();\n\n\t\tconst originalParams = {\n\t\t\t...params,\n\t\t\tonChunk: wrapCallback(runPromise, params.onChunk),\n\t\t\tonError: wrapCallback(runPromise, params.onError),\n\t\t\tonFinish: wrapCallback(runPromise, params.onFinish),\n\t\t\tonAbort: wrapCallback(runPromise, params.onAbort),\n\t\t\tonStepFinish: wrapCallback(runPromise, params.onStepFinish),\n\t\t\texperimental_onStart: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onStart,\n\t\t\t),\n\t\t\texperimental_onStepStart: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onStepStart,\n\t\t\t),\n\t\t\texperimental_onToolCallStart: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onToolCallStart,\n\t\t\t),\n\t\t\texperimental_onToolCallFinish: wrapCallback(\n\t\t\t\trunPromise,\n\t\t\t\tparams.experimental_onToolCallFinish,\n\t\t\t),\n\t\t} as StreamTextOriginalParams;\n\n\t\ttry {\n\t\t\treturn Ai.streamText(originalParams);\n\t\t} catch (cause) {\n\t\t\treturn yield* Effect.fail(\n\t\t\t\tnew AiError({ message: 'streamText failed', cause }),\n\t\t\t);\n\t\t}\n\t});\n}\n\ntype OriginalToolDef<INPUT, OUTPUT> = Parameters<\n\ttypeof Ai.tool<INPUT, OUTPUT>\n>[0];\n\ntype ToolModelOutput = Awaited<\n\tReturnType<NonNullable<Ai.Tool<unknown, unknown>['toModelOutput']>>\n>;\n\ntype EffectToolDef<INPUT, OUTPUT, R> = Omit<\n\tOriginalToolDef<INPUT, OUTPUT>,\n\t| 'execute'\n\t| 'onInputStart'\n\t| 'onInputDelta'\n\t| 'onInputAvailable'\n\t| 'toModelOutput'\n> & {\n\texecute?: (\n\t\tinput: INPUT,\n\t\toptions: Ai.ToolExecutionOptions,\n\t) => Effect.Effect<OUTPUT, unknown, R>;\n\tonInputStart?: (\n\t\toptions: Ai.ToolExecutionOptions,\n\t) => Effect.Effect<void, never, R>;\n\tonInputDelta?: (\n\t\toptions: { inputTextDelta: string } & Ai.ToolExecutionOptions,\n\t) => Effect.Effect<void, never, R>;\n\tonInputAvailable?: (\n\t\toptions: { input: INPUT } & Ai.ToolExecutionOptions,\n\t) => Effect.Effect<void, never, R>;\n\ttoModelOutput?: (options: {\n\t\ttoolCallId: string;\n\t\tinput: INPUT;\n\t\toutput: OUTPUT;\n\t}) => Effect.Effect<ToolModelOutput, never, R>;\n};\n\nexport function tool<INPUT, OUTPUT, R = never>(\n\tparams: EffectToolDef<INPUT, OUTPUT, R>,\n): Effect.Effect<Ai.Tool<INPUT, OUTPUT>, never, R | Scope.Scope> {\n\treturn Effect.gen(function* () {\n\t\tconst runPromise = yield* FiberSet.makeRuntimePromise<R>();\n\n\t\tconst originalParams = {\n\t\t\t...params,\n\t\t\t...(params.execute && {\n\t\t\t\texecute: (input: INPUT, options: Ai.ToolExecutionOptions) =>\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: guarded by truthiness check\n\t\t\t\t\trunPromise(params.execute!(input, options)),\n\t\t\t}),\n\t\t\tonInputStart: wrapCallback(runPromise, params.onInputStart),\n\t\t\tonInputDelta: wrapCallback(runPromise, params.onInputDelta),\n\t\t\tonInputAvailable: wrapCallback(runPromise, params.onInputAvailable),\n\t\t\t...(params.toModelOutput && {\n\t\t\t\ttoModelOutput: (options: {\n\t\t\t\t\ttoolCallId: string;\n\t\t\t\t\tinput: INPUT;\n\t\t\t\t\toutput: OUTPUT;\n\t\t\t\t}) =>\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: guarded by truthiness check\n\t\t\t\t\trunPromise(params.toModelOutput!(options)),\n\t\t\t}),\n\t\t} as OriginalToolDef<INPUT, OUTPUT>;\n\n\t\treturn Ai.tool(originalParams);\n\t});\n}\n","import { jsonSchema as aiJsonSchema } from 'ai';\nimport { Either, JSONSchema, Schema } from 'effect';\n\nexport function effectSchema<A, I>(schema: Schema.Schema<A, I>) {\n\tconst decode = Schema.decodeUnknownEither(schema);\n\treturn aiJsonSchema<A>(JSONSchema.make(schema), {\n\t\tvalidate: (value) => {\n\t\t\tconst result = decode(value);\n\t\t\tif (Either.isRight(result)) {\n\t\t\t\treturn { success: true as const, value: result.right };\n\t\t\t}\n\t\t\treturn { success: false as const, error: new Error(String(result.left)) };\n\t\t},\n\t});\n}\n\nexport const describe =\n\t(d: string) =>\n\t<A, I, R>(self: Schema.Schema<A, I, R>) =>\n\t\tself.annotations({ description: d });\n"],"mappings":"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","names":["generateText","streamText","tool"]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,28 +17,57 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
|
|
20
30
|
// src/for/drizzle/index.ts
|
|
21
31
|
var drizzle_exports = {};
|
|
22
32
|
__export(drizzle_exports, {
|
|
33
|
+
ChannelTypeId: () => ChannelTypeId2,
|
|
23
34
|
DrizzleError: () => DrizzleError,
|
|
24
|
-
|
|
35
|
+
EffectTypeId: () => EffectTypeId,
|
|
36
|
+
NodeInspectSymbol: () => NodeInspectSymbol2,
|
|
37
|
+
STMTypeId: () => STMTypeId2,
|
|
38
|
+
SinkTypeId: () => SinkTypeId2,
|
|
39
|
+
StreamTypeId: () => StreamTypeId2,
|
|
40
|
+
TagTypeId: () => TagTypeId2,
|
|
41
|
+
Unify: () => Unify,
|
|
25
42
|
createDatabase: () => createDatabase
|
|
26
43
|
});
|
|
27
44
|
module.exports = __toCommonJS(drizzle_exports);
|
|
28
45
|
var import_effect = require("effect");
|
|
29
|
-
var
|
|
46
|
+
var Channel = __toESM(require("effect/Channel"), 1);
|
|
47
|
+
var Context = __toESM(require("effect/Context"), 1);
|
|
48
|
+
var Inspectable = __toESM(require("effect/Inspectable"), 1);
|
|
49
|
+
var Sink = __toESM(require("effect/Sink"), 1);
|
|
50
|
+
var STM = __toESM(require("effect/STM"), 1);
|
|
51
|
+
var Stream = __toESM(require("effect/Stream"), 1);
|
|
52
|
+
var EUnify = __toESM(require("effect/Unify"), 1);
|
|
53
|
+
var TagTypeId2 = Context.TagTypeId;
|
|
54
|
+
var ChannelTypeId2 = Channel.ChannelTypeId;
|
|
55
|
+
var EffectTypeId = import_effect.Effect.EffectTypeId;
|
|
56
|
+
var NodeInspectSymbol2 = Inspectable.NodeInspectSymbol;
|
|
57
|
+
var STMTypeId2 = STM.STMTypeId;
|
|
58
|
+
var SinkTypeId2 = Sink.SinkTypeId;
|
|
59
|
+
var StreamTypeId2 = Stream.StreamTypeId;
|
|
60
|
+
var Unify = EUnify;
|
|
30
61
|
var DrizzleError = class extends import_effect.Data.TaggedError("ff-effect/DrizzleError") {
|
|
31
62
|
};
|
|
32
63
|
var WrappedTxError = class extends Error {
|
|
33
64
|
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
65
|
+
var defaultPrefix = "@ff-effect/Drizzle";
|
|
66
|
+
function createDatabase(createClient, opts) {
|
|
67
|
+
const tagId = opts?.tagId ?? defaultPrefix;
|
|
68
|
+
const Drizzle = Context.Tag(tagId)();
|
|
69
|
+
const drizzleTxTagId = `${tagId}.tx`;
|
|
70
|
+
const DrizzleTx = Context.Tag(drizzleTxTagId)();
|
|
40
71
|
const db = (fn) => import_effect.Effect.gen(function* () {
|
|
41
72
|
const client = yield* Drizzle;
|
|
42
73
|
return yield* import_effect.Effect.tryPromise({
|
|
@@ -76,14 +107,23 @@ function createDatabase(tagId, createClient) {
|
|
|
76
107
|
return {
|
|
77
108
|
db,
|
|
78
109
|
tx,
|
|
110
|
+
Drizzle,
|
|
111
|
+
DrizzleTx,
|
|
79
112
|
withTransaction,
|
|
80
113
|
layer: import_effect.Layer.effect(Drizzle, createClient)
|
|
81
114
|
};
|
|
82
115
|
}
|
|
83
116
|
// Annotate the CommonJS export names for ESM import in node:
|
|
84
117
|
0 && (module.exports = {
|
|
118
|
+
ChannelTypeId,
|
|
85
119
|
DrizzleError,
|
|
120
|
+
EffectTypeId,
|
|
121
|
+
NodeInspectSymbol,
|
|
122
|
+
STMTypeId,
|
|
123
|
+
SinkTypeId,
|
|
124
|
+
StreamTypeId,
|
|
86
125
|
TagTypeId,
|
|
126
|
+
Unify,
|
|
87
127
|
createDatabase
|
|
88
128
|
});
|
|
89
129
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/for/drizzle/index.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../../src/for/drizzle/index.ts"],"sourcesContent":["import { Data, Effect, FiberSet, Layer } from 'effect';\nimport * as Channel from 'effect/Channel';\nimport * as Context from 'effect/Context';\nimport * as Inspectable from 'effect/Inspectable';\nimport * as Sink from 'effect/Sink';\nimport * as STM from 'effect/STM';\nimport * as Stream from 'effect/Stream';\nimport * as EUnify from 'effect/Unify';\n\n// TypeScript issue where the return type of createDatabase\n// contains internal Effect types (TagTypeId) that aren't exported\n// from this module,\n// so TypeScript can't \"name\" them in the declaration file.\nexport const TagTypeId = Context.TagTypeId;\nexport const ChannelTypeId = Channel.ChannelTypeId;\nexport const EffectTypeId = Effect.EffectTypeId;\nexport const NodeInspectSymbol = Inspectable.NodeInspectSymbol;\nexport const STMTypeId = STM.STMTypeId;\nexport const SinkTypeId = Sink.SinkTypeId;\nexport const StreamTypeId = Stream.StreamTypeId;\nexport const Unify = EUnify;\n\nexport class DrizzleError extends Data.TaggedError('ff-effect/DrizzleError')<{\n\tmessage: string;\n\tcause?: unknown;\n}> {}\n\ntype AnyDrizzleClient = {\n\t// biome-ignore lint/suspicious/noExplicitAny: generic client type\n\ttransaction: (fn: (tx: any) => Promise<any>) => Promise<any>;\n};\n\ntype TxClient<TClient extends AnyDrizzleClient> = Parameters<\n\tParameters<TClient['transaction']>[0]\n>[0];\n\nclass WrappedTxError extends Error {}\n\nconst defaultPrefix = '@ff-effect/Drizzle' as const;\n\nexport function createDatabase<\n\tTClient extends AnyDrizzleClient,\n\tE,\n\tR,\n\tT extends string = typeof defaultPrefix,\n>(createClient: Effect.Effect<TClient, E, R>, opts?: { tagId?: T }) {\n\ttype Client = TClient | TxClient<TClient>;\n\ttype Tx = TxClient<TClient>;\n\n\tconst tagId = (opts?.tagId ?? defaultPrefix) as T;\n\n\ttype Drizzle = typeof tagId;\n\tconst Drizzle = Context.Tag(tagId)<Drizzle, Client>();\n\n\tconst drizzleTxTagId = `${tagId}.tx` as const;\n\ttype DrizzleTx = typeof drizzleTxTagId;\n\tconst DrizzleTx = Context.Tag(drizzleTxTagId)<DrizzleTx, Tx>();\n\n\tconst db = <T>(fn: (client: Client) => Promise<T>) =>\n\t\tEffect.gen(function* () {\n\t\t\tconst client = yield* Drizzle;\n\t\t\treturn yield* Effect.tryPromise({\n\t\t\t\ttry: () => fn(client),\n\t\t\t\tcatch: (cause) =>\n\t\t\t\t\tnew DrizzleError({ message: 'Database operation failed', cause }),\n\t\t\t});\n\t\t});\n\n\t/** Requires being inside withTransaction - enforces transaction at compile time */\n\tconst tx = <T>(fn: (client: Tx) => Promise<T>) =>\n\t\tEffect.gen(function* () {\n\t\t\tconst client = yield* DrizzleTx;\n\t\t\treturn yield* Effect.tryPromise({\n\t\t\t\ttry: () => fn(client),\n\t\t\t\tcatch: (cause) =>\n\t\t\t\t\tnew DrizzleError({ message: 'Database operation failed', cause }),\n\t\t\t});\n\t\t});\n\n\tconst withTransaction = <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n\t\tEffect.gen(function* () {\n\t\t\tconst client = yield* Drizzle;\n\t\t\tconst runFork =\n\t\t\t\tyield* FiberSet.makeRuntimePromise<Exclude<R, DrizzleTx>>();\n\n\t\t\treturn yield* Effect.tryPromise<A, E | DrizzleError>({\n\t\t\t\ttry: () =>\n\t\t\t\t\t(client as TClient).transaction((txClient) =>\n\t\t\t\t\t\trunFork(\n\t\t\t\t\t\t\teffect.pipe(\n\t\t\t\t\t\t\t\tEffect.provideService(Drizzle, txClient as Client),\n\t\t\t\t\t\t\t\tEffect.provideService(DrizzleTx, txClient as Tx),\n\t\t\t\t\t\t\t\tEffect.mapError((e) => new WrappedTxError('', { cause: e })),\n\t\t\t\t\t\t\t) as Effect.Effect<A, WrappedTxError, Exclude<R, DrizzleTx>>,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\tcatch: (error) => {\n\t\t\t\t\tif (error instanceof WrappedTxError) return error.cause as E;\n\t\t\t\t\treturn new DrizzleError({\n\t\t\t\t\t\tmessage: 'Transaction failed',\n\t\t\t\t\t\tcause: error,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t});\n\t\t}).pipe(Effect.scoped);\n\n\treturn {\n\t\tdb,\n\t\ttx,\n\t\tDrizzle,\n\t\tDrizzleTx,\n\t\twithTransaction,\n\t\tlayer: Layer.effect(Drizzle, createClient),\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,uBAAAA;AAAA,EAAA;AAAA;AAAA,2BAAAC;AAAA,EAAA,iBAAAC;AAAA,EAAA,kBAAAC;AAAA,EAAA,oBAAAC;AAAA,EAAA,iBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,oBAA8C;AAC9C,cAAyB;AACzB,cAAyB;AACzB,kBAA6B;AAC7B,WAAsB;AACtB,UAAqB;AACrB,aAAwB;AACxB,aAAwB;AAMjB,IAAMA,aAAoB;AAC1B,IAAML,iBAAwB;AAC9B,IAAM,eAAe,qBAAO;AAC5B,IAAMC,qBAAgC;AACtC,IAAMC,aAAgB;AACtB,IAAMC,cAAkB;AACxB,IAAMC,gBAAsB;AAC5B,IAAM,QAAQ;AAEd,IAAM,eAAN,cAA2B,mBAAK,YAAY,wBAAwB,EAGxE;AAAC;AAWJ,IAAM,iBAAN,cAA6B,MAAM;AAAC;AAEpC,IAAM,gBAAgB;AAEf,SAAS,eAKd,cAA4C,MAAsB;AAInE,QAAM,QAAS,MAAM,SAAS;AAG9B,QAAM,UAAkB,YAAI,KAAK,EAAmB;AAEpD,QAAM,iBAAiB,GAAG,KAAK;AAE/B,QAAM,YAAoB,YAAI,cAAc,EAAiB;AAE7D,QAAM,KAAK,CAAI,OACd,qBAAO,IAAI,aAAa;AACvB,UAAM,SAAS,OAAO;AACtB,WAAO,OAAO,qBAAO,WAAW;AAAA,MAC/B,KAAK,MAAM,GAAG,MAAM;AAAA,MACpB,OAAO,CAAC,UACP,IAAI,aAAa,EAAE,SAAS,6BAA6B,MAAM,CAAC;AAAA,IAClE,CAAC;AAAA,EACF,CAAC;AAGF,QAAM,KAAK,CAAI,OACd,qBAAO,IAAI,aAAa;AACvB,UAAM,SAAS,OAAO;AACtB,WAAO,OAAO,qBAAO,WAAW;AAAA,MAC/B,KAAK,MAAM,GAAG,MAAM;AAAA,MACpB,OAAO,CAAC,UACP,IAAI,aAAa,EAAE,SAAS,6BAA6B,MAAM,CAAC;AAAA,IAClE,CAAC;AAAA,EACF,CAAC;AAEF,QAAM,kBAAkB,CAAU,WACjC,qBAAO,IAAI,aAAa;AACvB,UAAM,SAAS,OAAO;AACtB,UAAM,UACL,OAAO,uBAAS,mBAA0C;AAE3D,WAAO,OAAO,qBAAO,WAAgC;AAAA,MACpD,KAAK,MACH,OAAmB;AAAA,QAAY,CAAC,aAChC;AAAA,UACC,OAAO;AAAA,YACN,qBAAO,eAAe,SAAS,QAAkB;AAAA,YACjD,qBAAO,eAAe,WAAW,QAAc;AAAA,YAC/C,qBAAO,SAAS,CAAC,MAAM,IAAI,eAAe,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAAA,UAC5D;AAAA,QACD;AAAA,MACD;AAAA,MACD,OAAO,CAAC,UAAU;AACjB,YAAI,iBAAiB,eAAgB,QAAO,MAAM;AAClD,eAAO,IAAI,aAAa;AAAA,UACvB,SAAS;AAAA,UACT,OAAO;AAAA,QACR,CAAC;AAAA,MACF;AAAA,IACD,CAAC;AAAA,EACF,CAAC,EAAE,KAAK,qBAAO,MAAM;AAEtB,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,oBAAM,OAAO,SAAS,YAAY;AAAA,EAC1C;AACD;","names":["ChannelTypeId","NodeInspectSymbol","STMTypeId","SinkTypeId","StreamTypeId","TagTypeId"]}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import * as effect_Scope from 'effect/Scope';
|
|
2
2
|
import * as effect_Cause from 'effect/Cause';
|
|
3
3
|
import * as effect_Types from 'effect/Types';
|
|
4
|
-
import { Effect,
|
|
4
|
+
import { Effect, Layer } from 'effect';
|
|
5
|
+
import * as Context from 'effect/Context';
|
|
6
|
+
import * as EUnify from 'effect/Unify';
|
|
5
7
|
|
|
6
8
|
declare const TagTypeId: symbol;
|
|
9
|
+
declare const ChannelTypeId: symbol;
|
|
10
|
+
declare const EffectTypeId: symbol;
|
|
11
|
+
declare const NodeInspectSymbol: symbol;
|
|
12
|
+
declare const STMTypeId: symbol;
|
|
13
|
+
declare const SinkTypeId: symbol;
|
|
14
|
+
declare const StreamTypeId: symbol;
|
|
15
|
+
declare const Unify: typeof EUnify;
|
|
7
16
|
declare const DrizzleError_base: new <A extends Record<string, any> = {}>(args: effect_Types.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => effect_Cause.YieldableError & {
|
|
8
17
|
readonly _tag: "ff-effect/DrizzleError";
|
|
9
18
|
} & Readonly<A>;
|
|
@@ -16,31 +25,16 @@ type AnyDrizzleClient = {
|
|
|
16
25
|
transaction: (fn: (tx: any) => Promise<any>) => Promise<any>;
|
|
17
26
|
};
|
|
18
27
|
type TxClient<TClient extends AnyDrizzleClient> = Parameters<Parameters<TClient['transaction']>[0]>[0];
|
|
19
|
-
declare
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}>;
|
|
30
|
-
withTransaction: <A, E_1, R_1>(effect: Effect.Effect<A, E_1, R_1>) => Effect.Effect<A, DrizzleError | E_1, {
|
|
31
|
-
readonly Id: TAG;
|
|
32
|
-
readonly Type: TClient | TxClient<TClient>;
|
|
33
|
-
readonly [TagTypeId]: Context.TagTypeId;
|
|
34
|
-
} | Exclude<Exclude<R_1, {
|
|
35
|
-
readonly Id: `${TAG}.tx`;
|
|
36
|
-
readonly Type: TxClient<TClient>;
|
|
37
|
-
readonly [TagTypeId]: Context.TagTypeId;
|
|
38
|
-
}>, effect_Scope.Scope>>;
|
|
39
|
-
layer: Layer.Layer<{
|
|
40
|
-
readonly Id: TAG;
|
|
41
|
-
readonly Type: TClient | TxClient<TClient>;
|
|
42
|
-
readonly [TagTypeId]: Context.TagTypeId;
|
|
43
|
-
}, E, R>;
|
|
28
|
+
declare const defaultPrefix: "@ff-effect/Drizzle";
|
|
29
|
+
declare function createDatabase<TClient extends AnyDrizzleClient, E, R, T extends string = typeof defaultPrefix>(createClient: Effect.Effect<TClient, E, R>, opts?: {
|
|
30
|
+
tagId?: T;
|
|
31
|
+
}): {
|
|
32
|
+
db: <T_1>(fn: (client: TClient | TxClient<TClient>) => Promise<T_1>) => Effect.Effect<T_1, DrizzleError, T>;
|
|
33
|
+
tx: <T_1>(fn: (client: TxClient<TClient>) => Promise<T_1>) => Effect.Effect<T_1, DrizzleError, `${T}.tx`>;
|
|
34
|
+
Drizzle: Context.TagClass<T, T, TClient | TxClient<TClient>>;
|
|
35
|
+
DrizzleTx: Context.TagClass<`${T}.tx`, `${T}.tx`, TxClient<TClient>>;
|
|
36
|
+
withTransaction: <A, E_1, R_1>(effect: Effect.Effect<A, E_1, R_1>) => Effect.Effect<A, DrizzleError | E_1, Exclude<T, effect_Scope.Scope> | Exclude<Exclude<R_1, `${T}.tx`>, effect_Scope.Scope>>;
|
|
37
|
+
layer: Layer.Layer<T, E, R>;
|
|
44
38
|
};
|
|
45
39
|
|
|
46
|
-
export { DrizzleError, TagTypeId, createDatabase };
|
|
40
|
+
export { ChannelTypeId, DrizzleError, EffectTypeId, NodeInspectSymbol, STMTypeId, SinkTypeId, StreamTypeId, TagTypeId, Unify, createDatabase };
|