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.
@@ -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
- TagTypeId: () => TagTypeId,
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 TagTypeId = import_effect.Context.TagTypeId;
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
- function createDatabase(tagId, createClient) {
35
- class Drizzle extends import_effect.Context.Tag(tagId)() {
36
- }
37
- const txTag = `${tagId}.tx`;
38
- class DrizzleTx extends import_effect.Context.Tag(txTag)() {
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 { Context, Data, Effect, FiberSet, Layer } from 'effect';\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;\n\nexport class DrizzleError extends Data.TaggedError('ff-effect/DrizzleError')<{\n\tmessage: string;\n\tcause?: unknown;\n}> {}\n\ntype AnyDrizzleClient = {\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\nexport function createDatabase<\n\tTAG extends string,\n\tTClient extends AnyDrizzleClient,\n\tE,\n\tR,\n>(tagId: TAG, createClient: Effect.Effect<TClient, E, R>) {\n\ttype Client = TClient | TxClient<TClient>;\n\ttype Tx = TxClient<TClient>;\n\n\tclass Drizzle extends Context.Tag(tagId)<Drizzle, Client>() {}\n\tconst txTag = `${tagId}.tx` as const;\n\tclass DrizzleTx extends Context.Tag(txTag)<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\twithTransaction,\n\t\tlayer: Layer.effect(Drizzle, createClient),\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuD;AAMhD,IAAM,YAAY,sBAAQ;AAE1B,IAAM,eAAN,cAA2B,mBAAK,YAAY,wBAAwB,EAGxE;AAAC;AAUJ,IAAM,iBAAN,cAA6B,MAAM;AAAC;AAE7B,SAAS,eAKd,OAAY,cAA4C;AAAA,EAIzD,MAAM,gBAAgB,sBAAQ,IAAI,KAAK,EAAmB,EAAE;AAAA,EAAC;AAC7D,QAAM,QAAQ,GAAG,KAAK;AAAA,EACtB,MAAM,kBAAkB,sBAAQ,IAAI,KAAK,EAAiB,EAAE;AAAA,EAAC;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,OAAO,oBAAM,OAAO,SAAS,YAAY;AAAA,EAC1C;AACD;","names":[]}
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, Context, Layer } from '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 function createDatabase<TAG extends string, TClient extends AnyDrizzleClient, E, R>(tagId: TAG, createClient: Effect.Effect<TClient, E, R>): {
20
- db: <T>(fn: (client: TClient | TxClient<TClient>) => Promise<T>) => Effect.Effect<T, DrizzleError, {
21
- readonly Id: TAG;
22
- readonly Type: TClient | TxClient<TClient>;
23
- readonly [TagTypeId]: Context.TagTypeId;
24
- }>;
25
- tx: <T>(fn: (client: TxClient<TClient>) => Promise<T>) => Effect.Effect<T, DrizzleError, {
26
- readonly Id: `${TAG}.tx`;
27
- readonly Type: TxClient<TClient>;
28
- readonly [TagTypeId]: Context.TagTypeId;
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 };