@effect-uai/core 0.10.0 → 0.12.0
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/{Image-BZmKfIdq.d.mts → Image-C4vuBmu0.d.mts} +11 -11
- package/dist/{Image-BZmKfIdq.d.mts.map → Image-C4vuBmu0.d.mts.map} +1 -1
- package/dist/{Items-BnIduEV2.d.mts → Items-BKQgqJ8A.d.mts} +136 -97
- package/dist/Items-BKQgqJ8A.d.mts.map +1 -0
- package/dist/{Tool-2lC_XMth.d.mts → Tool-u5bag8SO.d.mts} +42 -9
- package/dist/Tool-u5bag8SO.d.mts.map +1 -0
- package/dist/{ToolEvent-cWZ2BnbS.d.mts → ToolEvent-BBfOdhF_.d.mts} +2 -2
- package/dist/{ToolEvent-cWZ2BnbS.d.mts.map → ToolEvent-BBfOdhF_.d.mts.map} +1 -1
- package/dist/{ToolResult-CL4hK_9z.d.mts → ToolResult-CRpmkBXR.d.mts} +2 -2
- package/dist/{ToolResult-CL4hK_9z.d.mts.map → ToolResult-CRpmkBXR.d.mts.map} +1 -1
- package/dist/{Toolkit-Dr9l_hNy.d.mts → Toolkit-D4mQvhjq.d.mts} +6 -6
- package/dist/Toolkit-D4mQvhjq.d.mts.map +1 -0
- package/dist/browser/Browser.mjs +4 -4
- package/dist/browser/Browser.mjs.map +1 -1
- package/dist/browser/BrowserTool.d.mts +34 -33
- package/dist/browser/BrowserTool.d.mts.map +1 -1
- package/dist/{dist-DWgRbDN3.mjs → dist-C0m0QnUP.mjs} +71 -30
- package/dist/dist-C0m0QnUP.mjs.map +1 -0
- package/dist/{dist-B04dlFHg.mjs → dist-CcRV3-A5.mjs} +8 -8
- package/dist/{dist-B04dlFHg.mjs.map → dist-CcRV3-A5.mjs.map} +1 -1
- package/dist/domain/Citation.d.mts +60 -0
- package/dist/domain/Citation.d.mts.map +1 -0
- package/dist/domain/Citation.mjs +7 -0
- package/dist/domain/Citation.mjs.map +1 -0
- package/dist/domain/Image.d.mts +1 -1
- package/dist/domain/Items.d.mts +1 -1
- package/dist/domain/Items.mjs +28 -4
- package/dist/domain/Items.mjs.map +1 -1
- package/dist/domain/Research.d.mts +37 -0
- package/dist/domain/Research.d.mts.map +1 -0
- package/dist/domain/Research.mjs +7 -0
- package/dist/domain/Research.mjs.map +1 -0
- package/dist/domain/Turn.d.mts +92 -9
- package/dist/domain/Turn.d.mts.map +1 -1
- package/dist/domain/Turn.mjs +8 -1
- package/dist/domain/Turn.mjs.map +1 -1
- package/dist/domain/Turn.test.mjs +1 -1
- package/dist/embedding-model/Embedding.d.mts +1 -1
- package/dist/embedding-model/EmbeddingModel.mjs +2 -2
- package/dist/embedding-model/EmbeddingModel.mjs.map +1 -1
- package/dist/embedding-model/EmbeddingModel.test.mjs +1 -1
- package/dist/index.d.mts +12 -8
- package/dist/index.mjs +5 -1
- package/dist/job/Job.d.mts +80 -0
- package/dist/job/Job.d.mts.map +1 -0
- package/dist/job/Job.mjs +49 -0
- package/dist/job/Job.mjs.map +1 -0
- package/dist/language-model/LanguageModel.d.mts +2 -2
- package/dist/language-model/LanguageModel.mjs +2 -2
- package/dist/language-model/LanguageModel.mjs.map +1 -1
- package/dist/language-model/LanguageModel.test.mjs +1 -1
- package/dist/loop/Loop.test.mjs +1 -1
- package/dist/music-generator/MusicGenerator.mjs +4 -4
- package/dist/music-generator/MusicGenerator.mjs.map +1 -1
- package/dist/music-generator/MusicGenerator.test.mjs +1 -1
- package/dist/observability/Metrics.d.mts +13 -5
- package/dist/observability/Metrics.d.mts.map +1 -1
- package/dist/observability/Metrics.mjs +30 -7
- package/dist/observability/Metrics.mjs.map +1 -1
- package/dist/observability/Metrics.test.mjs +44 -2
- package/dist/observability/Metrics.test.mjs.map +1 -1
- package/dist/observability/Telemetry.test.mjs +2 -2
- package/dist/research/DeepResearch.d.mts +71 -0
- package/dist/research/DeepResearch.d.mts.map +1 -0
- package/dist/research/DeepResearch.mjs +61 -0
- package/dist/research/DeepResearch.mjs.map +1 -0
- package/dist/retry/Retry.d.mts +3 -3
- package/dist/retry/Retry.d.mts.map +1 -1
- package/dist/retry/Retry.mjs +30 -1
- package/dist/retry/Retry.mjs.map +1 -1
- package/dist/retry/Retry.test.mjs +1 -1
- package/dist/sandbox/Sandbox.mjs +18 -18
- package/dist/sandbox/Sandbox.mjs.map +1 -1
- package/dist/speech-synthesizer/SpeechSynthesizer.mjs +8 -8
- package/dist/speech-synthesizer/SpeechSynthesizer.mjs.map +1 -1
- package/dist/speech-synthesizer/SpeechSynthesizer.test.mjs +1 -1
- package/dist/streaming/JSONL.d.mts +3 -1
- package/dist/streaming/JSONL.d.mts.map +1 -1
- package/dist/streaming/JSONL.mjs +5 -11
- package/dist/streaming/JSONL.mjs.map +1 -1
- package/dist/streaming/JSONL.test.mjs +10 -1
- package/dist/streaming/JSONL.test.mjs.map +1 -1
- package/dist/streaming/SSE.d.mts +5 -3
- package/dist/streaming/SSE.d.mts.map +1 -1
- package/dist/streaming/SSE.mjs +28 -38
- package/dist/streaming/SSE.mjs.map +1 -1
- package/dist/streaming/SSE.test.mjs +54 -4
- package/dist/streaming/SSE.test.mjs.map +1 -1
- package/dist/structured-format/StructuredFormat.test.mjs +1 -1
- package/dist/testing/MockProvider.d.mts +1 -1
- package/dist/testing/MockSandbox.d.mts +1 -1
- package/dist/tool/Approval.d.mts +3 -3
- package/dist/tool/Approval.test.mjs +1 -1
- package/dist/tool/HistoryCheck.d.mts +2 -2
- package/dist/tool/Tool.d.mts +2 -2
- package/dist/tool/Tool.mjs +27 -7
- package/dist/tool/Tool.mjs.map +1 -1
- package/dist/tool/Tool.test.mjs +127 -3
- package/dist/tool/Tool.test.mjs.map +1 -1
- package/dist/tool/ToolEvent.d.mts +1 -1
- package/dist/tool/ToolResult.d.mts +1 -1
- package/dist/tool/Toolkit.d.mts +1 -1
- package/dist/tool/Toolkit.mjs.map +1 -1
- package/dist/tool/Toolkit.test.mjs +46 -2
- package/dist/tool/Toolkit.test.mjs.map +1 -1
- package/dist/transcriber/Transcriber.mjs +3 -3
- package/dist/transcriber/Transcriber.mjs.map +1 -1
- package/dist/transcriber/Transcriber.test.mjs +1 -1
- package/dist/web-read/WebRead.mjs +1 -1
- package/dist/web-read/WebRead.mjs.map +1 -1
- package/dist/web-read/WebReadTool.d.mts +1 -1
- package/dist/web-search/WebSearch.mjs +1 -1
- package/dist/web-search/WebSearch.mjs.map +1 -1
- package/dist/web-search/WebSearchTool.d.mts +1 -1
- package/package.json +19 -3
- package/src/browser/Browser.ts +4 -4
- package/src/domain/Citation.ts +64 -0
- package/src/domain/Items.ts +32 -4
- package/src/domain/Research.ts +42 -0
- package/src/domain/Turn.ts +26 -0
- package/src/embedding-model/EmbeddingModel.ts +2 -2
- package/src/index.ts +4 -0
- package/src/job/Job.ts +125 -0
- package/src/language-model/LanguageModel.ts +2 -2
- package/src/music-generator/MusicGenerator.ts +4 -4
- package/src/observability/Metrics.test.ts +65 -0
- package/src/observability/Metrics.ts +53 -11
- package/src/research/DeepResearch.ts +137 -0
- package/src/retry/Retry.ts +44 -3
- package/src/sandbox/Sandbox.ts +18 -18
- package/src/speech-synthesizer/SpeechSynthesizer.ts +8 -8
- package/src/streaming/JSONL.test.ts +19 -0
- package/src/streaming/JSONL.ts +6 -38
- package/src/streaming/SSE.test.ts +86 -3
- package/src/streaming/SSE.ts +36 -80
- package/src/tool/Tool.test.ts +151 -1
- package/src/tool/Tool.ts +120 -22
- package/src/tool/Toolkit.test.ts +60 -0
- package/src/tool/Toolkit.ts +2 -2
- package/src/transcriber/Transcriber.ts +3 -3
- package/src/web-read/WebRead.ts +1 -1
- package/src/web-search/WebSearch.ts +1 -1
- package/dist/Items-BnIduEV2.d.mts.map +0 -1
- package/dist/Tool-2lC_XMth.d.mts.map +0 -1
- package/dist/Toolkit-Dr9l_hNy.d.mts.map +0 -1
- package/dist/dist-DWgRbDN3.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Browser.mjs","names":[],"sources":["../../src/browser/Browser.ts"],"sourcesContent":["import { Brand, Context, type Duration, Effect, Scope } from \"effect\"\nimport type * as BrowserError from \"./BrowserError.js\"\n\n// ---------------------------------------------------------------------------\n// Identity\n// ---------------------------------------------------------------------------\n\n/**\n * Session identifier. Branded `string` so providers don't accidentally\n * accept a raw user-supplied id, and so a session id can't be passed where\n * another service's id is expected. Each provider mints these per its own\n * scheme; core code treats them opaquely. Mint via `BrowserSessionId(...)`.\n */\nexport type BrowserSessionId = Brand.Branded<string, \"BrowserSessionId\">\nexport const BrowserSessionId = Brand.nominal<BrowserSessionId>()\n\n/** Reference returned by `list`; enough to `attach`. */\nexport type BrowserSessionRef = {\n readonly id: BrowserSessionId\n /** Current top-level URL, when the provider reports it. */\n readonly url?: string\n}\n\n/**\n * Output representation for {@link BrowserSession.content}. `markdown` is\n * the default.\n */\nexport type PageFormat = \"markdown\" | \"html\"\n\n// ---------------------------------------------------------------------------\n// Create request\n// ---------------------------------------------------------------------------\n\n/**\n * Cross-provider session-create request. Provider-specific knobs (proxy,\n * stealth, persistent profile, ...) live on each provider's narrowed\n * request type which extends this.\n */\nexport type CommonSessionRequest = {\n /**\n * Hard max lifetime of the session. Enforced locally (the handle is\n * disposed and further calls fail with `BrowserSessionExpired`) and,\n * where the provider supports it, passed through as a server-side cap so\n * a crashed client still gets the session reclaimed. The provider cap\n * must be >= the local reaper. Accepts millis, a string like\n * `\"5 minutes\"`, or a `Duration`.\n */\n readonly timeout?: Duration.Input\n /**\n * Idle teardown: dispose the session after this much inactivity, the\n * timer resetting on each operation. Opt-in; omit for no idle limit.\n */\n readonly idleTimeout?: Duration.Input\n /** Initial viewport size. Providers default differently. */\n readonly viewport?: { readonly width: number; readonly height: number }\n}\n\n// ---------------------------------------------------------------------------\n// Observation shapes\n// ---------------------------------------------------------------------------\n\nexport type BoundingBox = {\n readonly x: number\n readonly y: number\n readonly width: number\n readonly height: number\n}\n\n/**\n * One element returned by {@link BrowserSession.query}. Serializable data,\n * not a live handle (handles go stale across navigation and do not cross a\n * provider boundary cleanly).\n */\nexport type ElementInfo = {\n /**\n * Reference usable as a selector for a follow-up action. Valid until the\n * next navigation; do not cache across `goto` or a page-changing click.\n */\n readonly ref: string\n readonly tag: string\n readonly text?: string\n readonly attributes: Readonly<Record<string, string>>\n readonly box?: BoundingBox\n}\n\n/** Accessibility-tree node returned by {@link BrowserSession.snapshot}. */\nexport type AxNode = {\n readonly role: string\n readonly name?: string\n readonly value?: string\n /**\n * Reference usable as a selector for a follow-up action. Valid until the\n * next navigation; do not cache across `goto` or a page-changing click.\n */\n readonly ref?: string\n readonly children: ReadonlyArray<AxNode>\n}\n\n// ---------------------------------------------------------------------------\n// Interaction shapes\n// ---------------------------------------------------------------------------\n\nexport type ScrollDirection = \"up\" | \"down\" | \"left\" | \"right\"\n\nexport type ScrollOptions = {\n readonly direction: ScrollDirection\n /** Distance in CSS pixels. Provider default applies when omitted. */\n readonly pixels?: number\n}\n\nexport type ScreenshotOptions = {\n /** Clip to the first element matching this selector. */\n readonly selector?: string\n /** Capture the full scrollable page rather than the viewport. */\n readonly fullPage?: boolean\n}\n\nexport type Cookie = {\n readonly name: string\n readonly value: string\n readonly domain?: string\n readonly path?: string\n readonly expires?: number\n readonly httpOnly?: boolean\n readonly secure?: boolean\n readonly sameSite?: \"Strict\" | \"Lax\" | \"None\"\n}\n\n/** Read / write the session's cookie jar. Needed for authenticated flows. */\nexport type CookieApi = {\n readonly get: Effect.Effect<ReadonlyArray<Cookie>, BrowserError.BrowserError>\n readonly set: (cookies: ReadonlyArray<Cookie>) => Effect.Effect<void, BrowserError.BrowserError>\n}\n\n// ---------------------------------------------------------------------------\n// Live session handle\n// ---------------------------------------------------------------------------\n\n/**\n * Live session handle. Actions take a CSS selector string (so `#id` is\n * just `#id`). Methods are plain `Effect` values; disposal is the scope\n * finalizer, not a method here (see {@link BrowserService}). Anything not\n * covered by a verb is reachable via `evaluate`. Per-operation time budgets\n * are the provider's default; wrap any call in `Effect.timeout` for a\n * tighter bound.\n */\nexport type BrowserSession = {\n readonly id: BrowserSessionId\n\n // Navigation and waiting\n readonly goto: (url: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly waitFor: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n\n // Interaction\n readonly click: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly dblclick: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly fill: (selector: string, text: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly type: (selector: string, text: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly press: (key: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly hover: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly focus: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly select: (\n selector: string,\n value: string,\n ) => Effect.Effect<void, BrowserError.BrowserError>\n readonly check: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly uncheck: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly scroll: (options: ScrollOptions) => Effect.Effect<void, BrowserError.BrowserError>\n readonly scrollIntoView: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n\n // Observation\n readonly content: (format?: PageFormat) => Effect.Effect<string, BrowserError.BrowserError>\n readonly screenshot: (\n options?: ScreenshotOptions,\n ) => Effect.Effect<Uint8Array, BrowserError.BrowserError>\n readonly snapshot: Effect.Effect<AxNode, BrowserError.BrowserError>\n readonly query: (\n selector: string,\n ) => Effect.Effect<ReadonlyArray<ElementInfo>, BrowserError.BrowserError>\n\n // State and escape hatch\n readonly cookies: CookieApi\n readonly evaluate: (script: string) => Effect.Effect<unknown, BrowserError.BrowserError>\n}\n\n// ---------------------------------------------------------------------------\n// Service definition\n// ---------------------------------------------------------------------------\n\n/**\n * Cross-provider browser service.\n *\n * Lifetime: `create` and `attach` return a handle in `Scope.Scope`. The\n * scope finalizer disposes the session (close the transport, destroy or\n * detach the remote session, kill the local engine). Bind with\n * `Effect.scoped` for a single call, or hold a wider scope to keep a\n * session warm across many calls. This is why there is no `dispose()` on\n * {@link BrowserSession}; the scope is the lifecycle handle.\n */\nexport type BrowserService = {\n /**\n * Provision a new session, bound to the caller's scope. Disposed on\n * scope close.\n */\n readonly create: (\n request: CommonSessionRequest,\n ) => Effect.Effect<BrowserSession, BrowserError.BrowserError, Scope.Scope>\n\n /**\n * Re-acquire an existing session by id. Scope-bound, but the finalizer\n * detaches rather than destroying, for sessions kept warm beyond a\n * single run.\n */\n readonly attach: (\n id: BrowserSessionId,\n ) => Effect.Effect<BrowserSession, BrowserError.BrowserError, Scope.Scope>\n\n /** Enumerate sessions visible to the configured account / project. */\n readonly list: Effect.Effect<ReadonlyArray<BrowserSessionRef>, BrowserError.BrowserError>\n\n /**\n * Destroy a session from outside its owning scope. Most callers should\n * let the scope finalizer handle this.\n */\n readonly destroy: (id: BrowserSessionId) => Effect.Effect<void, BrowserError.BrowserError>\n}\n\nexport class Browser extends Context.Service<Browser, BrowserService>()(\n \"@betalyra/effect-uai/Browser\",\n) {}\n\n// ---------------------------------------------------------------------------\n// Free helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Provision a session bound to the caller's scope. Drop the `Scope.Scope`\n * requirement with `Effect.scoped`.\n */\nexport const create = (\n request: CommonSessionRequest,\n): Effect.Effect<BrowserSession, BrowserError.BrowserError, Browser | Scope.Scope> =>\n Effect.flatMap(Browser.asEffect(), (s) => s.create(request))\n\n/**\n * Re-acquire an existing session by id. Same scope semantics as `create`,\n * but the finalizer detaches rather than destroying.\n */\nexport const attach = (\n id: BrowserSessionId,\n): Effect.Effect<BrowserSession, BrowserError.BrowserError, Browser | Scope.Scope> =>\n Effect.flatMap(Browser.asEffect(), (s) => s.attach(id))\n\n/** Enumerate sessions for the configured account / project. */\nexport const list: Effect.Effect<\n ReadonlyArray<BrowserSessionRef>,\n BrowserError.BrowserError,\n Browser\n> = Effect.flatMap(Browser.asEffect(), (s) => s.list)\n\n/**\n * Destroy a session from outside its owning scope. Most callers should let\n * the scope finalizer handle this automatically.\n */\nexport const destroy = (\n id: BrowserSessionId,\n): Effect.Effect<void, BrowserError.BrowserError, Browser> =>\n Effect.flatMap(Browser.asEffect(), (s) => s.destroy(id))\n"],"mappings":";;;;;;;;;;;AAcA,MAAa,mBAAmB,MAAM,SAA2B;AAqNjE,IAAa,UAAb,cAA6B,QAAQ,SAAkC,CACrE,+BACD,CAAC;;;;;AAUF,MAAa,UACX,YAEA,OAAO,QAAQ,QAAQ,UAAU,GAAG,MAAM,EAAE,OAAO,QAAQ,CAAC;;;;;AAM9D,MAAa,UACX,OAEA,OAAO,QAAQ,QAAQ,UAAU,GAAG,MAAM,EAAE,OAAO,GAAG,CAAC;;AAGzD,MAAa,OAIT,OAAO,QAAQ,QAAQ,UAAU,GAAG,MAAM,EAAE,KAAK;;;;;AAMrD,MAAa,WACX,OAEA,OAAO,QAAQ,QAAQ,UAAU,GAAG,MAAM,EAAE,QAAQ,GAAG,CAAC"}
|
|
1
|
+
{"version":3,"file":"Browser.mjs","names":[],"sources":["../../src/browser/Browser.ts"],"sourcesContent":["import { Brand, Context, type Duration, Effect, Scope } from \"effect\"\nimport type * as BrowserError from \"./BrowserError.js\"\n\n// ---------------------------------------------------------------------------\n// Identity\n// ---------------------------------------------------------------------------\n\n/**\n * Session identifier. Branded `string` so providers don't accidentally\n * accept a raw user-supplied id, and so a session id can't be passed where\n * another service's id is expected. Each provider mints these per its own\n * scheme; core code treats them opaquely. Mint via `BrowserSessionId(...)`.\n */\nexport type BrowserSessionId = Brand.Branded<string, \"BrowserSessionId\">\nexport const BrowserSessionId = Brand.nominal<BrowserSessionId>()\n\n/** Reference returned by `list`; enough to `attach`. */\nexport type BrowserSessionRef = {\n readonly id: BrowserSessionId\n /** Current top-level URL, when the provider reports it. */\n readonly url?: string\n}\n\n/**\n * Output representation for {@link BrowserSession.content}. `markdown` is\n * the default.\n */\nexport type PageFormat = \"markdown\" | \"html\"\n\n// ---------------------------------------------------------------------------\n// Create request\n// ---------------------------------------------------------------------------\n\n/**\n * Cross-provider session-create request. Provider-specific knobs (proxy,\n * stealth, persistent profile, ...) live on each provider's narrowed\n * request type which extends this.\n */\nexport type CommonSessionRequest = {\n /**\n * Hard max lifetime of the session. Enforced locally (the handle is\n * disposed and further calls fail with `BrowserSessionExpired`) and,\n * where the provider supports it, passed through as a server-side cap so\n * a crashed client still gets the session reclaimed. The provider cap\n * must be >= the local reaper. Accepts millis, a string like\n * `\"5 minutes\"`, or a `Duration`.\n */\n readonly timeout?: Duration.Input\n /**\n * Idle teardown: dispose the session after this much inactivity, the\n * timer resetting on each operation. Opt-in; omit for no idle limit.\n */\n readonly idleTimeout?: Duration.Input\n /** Initial viewport size. Providers default differently. */\n readonly viewport?: { readonly width: number; readonly height: number }\n}\n\n// ---------------------------------------------------------------------------\n// Observation shapes\n// ---------------------------------------------------------------------------\n\nexport type BoundingBox = {\n readonly x: number\n readonly y: number\n readonly width: number\n readonly height: number\n}\n\n/**\n * One element returned by {@link BrowserSession.query}. Serializable data,\n * not a live handle (handles go stale across navigation and do not cross a\n * provider boundary cleanly).\n */\nexport type ElementInfo = {\n /**\n * Reference usable as a selector for a follow-up action. Valid until the\n * next navigation; do not cache across `goto` or a page-changing click.\n */\n readonly ref: string\n readonly tag: string\n readonly text?: string\n readonly attributes: Readonly<Record<string, string>>\n readonly box?: BoundingBox\n}\n\n/** Accessibility-tree node returned by {@link BrowserSession.snapshot}. */\nexport type AxNode = {\n readonly role: string\n readonly name?: string\n readonly value?: string\n /**\n * Reference usable as a selector for a follow-up action. Valid until the\n * next navigation; do not cache across `goto` or a page-changing click.\n */\n readonly ref?: string\n readonly children: ReadonlyArray<AxNode>\n}\n\n// ---------------------------------------------------------------------------\n// Interaction shapes\n// ---------------------------------------------------------------------------\n\nexport type ScrollDirection = \"up\" | \"down\" | \"left\" | \"right\"\n\nexport type ScrollOptions = {\n readonly direction: ScrollDirection\n /** Distance in CSS pixels. Provider default applies when omitted. */\n readonly pixels?: number\n}\n\nexport type ScreenshotOptions = {\n /** Clip to the first element matching this selector. */\n readonly selector?: string\n /** Capture the full scrollable page rather than the viewport. */\n readonly fullPage?: boolean\n}\n\nexport type Cookie = {\n readonly name: string\n readonly value: string\n readonly domain?: string\n readonly path?: string\n readonly expires?: number\n readonly httpOnly?: boolean\n readonly secure?: boolean\n readonly sameSite?: \"Strict\" | \"Lax\" | \"None\"\n}\n\n/** Read / write the session's cookie jar. Needed for authenticated flows. */\nexport type CookieApi = {\n readonly get: Effect.Effect<ReadonlyArray<Cookie>, BrowserError.BrowserError>\n readonly set: (cookies: ReadonlyArray<Cookie>) => Effect.Effect<void, BrowserError.BrowserError>\n}\n\n// ---------------------------------------------------------------------------\n// Live session handle\n// ---------------------------------------------------------------------------\n\n/**\n * Live session handle. Actions take a CSS selector string (so `#id` is\n * just `#id`). Methods are plain `Effect` values; disposal is the scope\n * finalizer, not a method here (see {@link BrowserService}). Anything not\n * covered by a verb is reachable via `evaluate`. Per-operation time budgets\n * are the provider's default; wrap any call in `Effect.timeout` for a\n * tighter bound.\n */\nexport type BrowserSession = {\n readonly id: BrowserSessionId\n\n // Navigation and waiting\n readonly goto: (url: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly waitFor: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n\n // Interaction\n readonly click: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly dblclick: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly fill: (selector: string, text: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly type: (selector: string, text: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly press: (key: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly hover: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly focus: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly select: (\n selector: string,\n value: string,\n ) => Effect.Effect<void, BrowserError.BrowserError>\n readonly check: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly uncheck: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n readonly scroll: (options: ScrollOptions) => Effect.Effect<void, BrowserError.BrowserError>\n readonly scrollIntoView: (selector: string) => Effect.Effect<void, BrowserError.BrowserError>\n\n // Observation\n readonly content: (format?: PageFormat) => Effect.Effect<string, BrowserError.BrowserError>\n readonly screenshot: (\n options?: ScreenshotOptions,\n ) => Effect.Effect<Uint8Array, BrowserError.BrowserError>\n readonly snapshot: Effect.Effect<AxNode, BrowserError.BrowserError>\n readonly query: (\n selector: string,\n ) => Effect.Effect<ReadonlyArray<ElementInfo>, BrowserError.BrowserError>\n\n // State and escape hatch\n readonly cookies: CookieApi\n readonly evaluate: (script: string) => Effect.Effect<unknown, BrowserError.BrowserError>\n}\n\n// ---------------------------------------------------------------------------\n// Service definition\n// ---------------------------------------------------------------------------\n\n/**\n * Cross-provider browser service.\n *\n * Lifetime: `create` and `attach` return a handle in `Scope.Scope`. The\n * scope finalizer disposes the session (close the transport, destroy or\n * detach the remote session, kill the local engine). Bind with\n * `Effect.scoped` for a single call, or hold a wider scope to keep a\n * session warm across many calls. This is why there is no `dispose()` on\n * {@link BrowserSession}; the scope is the lifecycle handle.\n */\nexport type BrowserService = {\n /**\n * Provision a new session, bound to the caller's scope. Disposed on\n * scope close.\n */\n readonly create: (\n request: CommonSessionRequest,\n ) => Effect.Effect<BrowserSession, BrowserError.BrowserError, Scope.Scope>\n\n /**\n * Re-acquire an existing session by id. Scope-bound, but the finalizer\n * detaches rather than destroying, for sessions kept warm beyond a\n * single run.\n */\n readonly attach: (\n id: BrowserSessionId,\n ) => Effect.Effect<BrowserSession, BrowserError.BrowserError, Scope.Scope>\n\n /** Enumerate sessions visible to the configured account / project. */\n readonly list: Effect.Effect<ReadonlyArray<BrowserSessionRef>, BrowserError.BrowserError>\n\n /**\n * Destroy a session from outside its owning scope. Most callers should\n * let the scope finalizer handle this.\n */\n readonly destroy: (id: BrowserSessionId) => Effect.Effect<void, BrowserError.BrowserError>\n}\n\nexport class Browser extends Context.Service<Browser, BrowserService>()(\n \"@betalyra/effect-uai/Browser\",\n) {}\n\n// ---------------------------------------------------------------------------\n// Free helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Provision a session bound to the caller's scope. Drop the `Scope.Scope`\n * requirement with `Effect.scoped`.\n */\nexport const create = (\n request: CommonSessionRequest,\n): Effect.Effect<BrowserSession, BrowserError.BrowserError, Browser | Scope.Scope> =>\n Effect.flatMap(Browser, (s) => s.create(request))\n\n/**\n * Re-acquire an existing session by id. Same scope semantics as `create`,\n * but the finalizer detaches rather than destroying.\n */\nexport const attach = (\n id: BrowserSessionId,\n): Effect.Effect<BrowserSession, BrowserError.BrowserError, Browser | Scope.Scope> =>\n Effect.flatMap(Browser, (s) => s.attach(id))\n\n/** Enumerate sessions for the configured account / project. */\nexport const list: Effect.Effect<\n ReadonlyArray<BrowserSessionRef>,\n BrowserError.BrowserError,\n Browser\n> = Effect.flatMap(Browser, (s) => s.list)\n\n/**\n * Destroy a session from outside its owning scope. Most callers should let\n * the scope finalizer handle this automatically.\n */\nexport const destroy = (\n id: BrowserSessionId,\n): Effect.Effect<void, BrowserError.BrowserError, Browser> =>\n Effect.flatMap(Browser, (s) => s.destroy(id))\n"],"mappings":";;;;;;;;;;;AAcA,MAAa,mBAAmB,MAAM,SAA2B;AAqNjE,IAAa,UAAb,cAA6B,QAAQ,SAAkC,CACrE,+BACD,CAAC;;;;;AAUF,MAAa,UACX,YAEA,OAAO,QAAQ,UAAU,MAAM,EAAE,OAAO,QAAQ,CAAC;;;;;AAMnD,MAAa,UACX,OAEA,OAAO,QAAQ,UAAU,MAAM,EAAE,OAAO,GAAG,CAAC;;AAG9C,MAAa,OAIT,OAAO,QAAQ,UAAU,MAAM,EAAE,KAAK;;;;;AAM1C,MAAa,WACX,OAEA,OAAO,QAAQ,UAAU,MAAM,EAAE,QAAQ,GAAG,CAAC"}
|
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
import { BrowserError } from "./BrowserError.mjs";
|
|
2
2
|
import { BrowserSession } from "./Browser.mjs";
|
|
3
|
-
import { l as Tool } from "../Tool-
|
|
3
|
+
import { l as Tool } from "../Tool-u5bag8SO.mjs";
|
|
4
|
+
import { Schema } from "effect";
|
|
4
5
|
|
|
5
6
|
//#region src/browser/BrowserTool.d.ts
|
|
6
7
|
declare namespace BrowserTool_d_exports {
|
|
7
8
|
export { browserToolkit, clickTool, fillTool, gotoTool, pressTool, scrollTool };
|
|
8
9
|
}
|
|
9
|
-
declare const gotoTool: (session: BrowserSession) => Tool<"browser_goto", {
|
|
10
|
-
readonly url:
|
|
11
|
-
}, unknown, string, BrowserError, never>;
|
|
12
|
-
declare const clickTool: (session: BrowserSession) => Tool<"browser_click", {
|
|
13
|
-
readonly ref:
|
|
14
|
-
}, unknown, string, BrowserError, never>;
|
|
15
|
-
declare const fillTool: (session: BrowserSession) => Tool<"browser_fill", {
|
|
16
|
-
readonly ref:
|
|
17
|
-
readonly text:
|
|
18
|
-
}, unknown, string, BrowserError, never>;
|
|
19
|
-
declare const pressTool: (session: BrowserSession) => Tool<"browser_press", {
|
|
20
|
-
readonly key:
|
|
21
|
-
}, unknown, string, BrowserError, never>;
|
|
22
|
-
declare const scrollTool: (session: BrowserSession) => Tool<"browser_scroll", {
|
|
23
|
-
readonly direction: "up"
|
|
24
|
-
}, unknown, string, BrowserError, never>;
|
|
10
|
+
declare const gotoTool: (session: BrowserSession) => Tool<"browser_goto", Schema.Struct.ReadonlySide<{
|
|
11
|
+
readonly url: Schema.String;
|
|
12
|
+
}, "Type">, unknown, string, BrowserError, never>;
|
|
13
|
+
declare const clickTool: (session: BrowserSession) => Tool<"browser_click", Schema.Struct.ReadonlySide<{
|
|
14
|
+
readonly ref: Schema.String;
|
|
15
|
+
}, "Type">, unknown, string, BrowserError, never>;
|
|
16
|
+
declare const fillTool: (session: BrowserSession) => Tool<"browser_fill", Schema.Struct.ReadonlySide<{
|
|
17
|
+
readonly ref: Schema.String;
|
|
18
|
+
readonly text: Schema.String;
|
|
19
|
+
}, "Type">, unknown, string, BrowserError, never>;
|
|
20
|
+
declare const pressTool: (session: BrowserSession) => Tool<"browser_press", Schema.Struct.ReadonlySide<{
|
|
21
|
+
readonly key: Schema.String;
|
|
22
|
+
}, "Type">, unknown, string, BrowserError, never>;
|
|
23
|
+
declare const scrollTool: (session: BrowserSession) => Tool<"browser_scroll", Schema.Struct.ReadonlySide<{
|
|
24
|
+
readonly direction: Schema.Literals<readonly ["up", "down"]>;
|
|
25
|
+
}, "Type">, unknown, string, BrowserError, never>;
|
|
25
26
|
/**
|
|
26
27
|
* The canonical browser action verbs bundled as a `Toolkit`, closed over a
|
|
27
28
|
* live `BrowserSession`. Compose it with a recipe-local page-reading tool and
|
|
@@ -36,22 +37,22 @@ declare const scrollTool: (session: BrowserSession) => Tool<"browser_scroll", {
|
|
|
36
37
|
* constructors directly. Run a turn's calls with `{ concurrency: 1 }`.
|
|
37
38
|
*/
|
|
38
39
|
declare const browserToolkit: (session: BrowserSession) => {
|
|
39
|
-
browser_goto: Tool<"browser_goto", {
|
|
40
|
-
readonly url:
|
|
41
|
-
}, unknown, string, BrowserError, never>;
|
|
42
|
-
browser_click: Tool<"browser_click", {
|
|
43
|
-
readonly ref:
|
|
44
|
-
}, unknown, string, BrowserError, never>;
|
|
45
|
-
browser_fill: Tool<"browser_fill", {
|
|
46
|
-
readonly ref:
|
|
47
|
-
readonly text:
|
|
48
|
-
}, unknown, string, BrowserError, never>;
|
|
49
|
-
browser_press: Tool<"browser_press", {
|
|
50
|
-
readonly key:
|
|
51
|
-
}, unknown, string, BrowserError, never>;
|
|
52
|
-
browser_scroll: Tool<"browser_scroll", {
|
|
53
|
-
readonly direction: "up"
|
|
54
|
-
}, unknown, string, BrowserError, never>;
|
|
40
|
+
browser_goto: Tool<"browser_goto", Schema.Struct.ReadonlySide<{
|
|
41
|
+
readonly url: Schema.String;
|
|
42
|
+
}, "Type">, unknown, string, BrowserError, never>;
|
|
43
|
+
browser_click: Tool<"browser_click", Schema.Struct.ReadonlySide<{
|
|
44
|
+
readonly ref: Schema.String;
|
|
45
|
+
}, "Type">, unknown, string, BrowserError, never>;
|
|
46
|
+
browser_fill: Tool<"browser_fill", Schema.Struct.ReadonlySide<{
|
|
47
|
+
readonly ref: Schema.String;
|
|
48
|
+
readonly text: Schema.String;
|
|
49
|
+
}, "Type">, unknown, string, BrowserError, never>;
|
|
50
|
+
browser_press: Tool<"browser_press", Schema.Struct.ReadonlySide<{
|
|
51
|
+
readonly key: Schema.String;
|
|
52
|
+
}, "Type">, unknown, string, BrowserError, never>;
|
|
53
|
+
browser_scroll: Tool<"browser_scroll", Schema.Struct.ReadonlySide<{
|
|
54
|
+
readonly direction: Schema.Literals<readonly ["up", "down"]>;
|
|
55
|
+
}, "Type">, unknown, string, BrowserError, never>;
|
|
55
56
|
};
|
|
56
57
|
//#endregion
|
|
57
58
|
export { browserToolkit, clickTool, fillTool, gotoTool, pressTool, scrollTool, BrowserTool_d_exports as t };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserTool.d.mts","names":[],"sources":["../../src/browser/BrowserTool.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"BrowserTool.d.mts","names":[],"sources":["../../src/browser/BrowserTool.ts"],"mappings":";;;;;;;;;cAoEa,QAAA,GAAY,OAAA,EAAS,cAAA,KAAc,IAAA,iBAAA,MAAA,CAAA,MAAA,CAAA,YAAA;EAAA;6BAAA,YAAA;AAAA,cAcnC,SAAA,GAAa,OAAA,EAAS,cAAA,KAAc,IAAA,kBAAA,MAAA,CAAA,MAAA,CAAA,YAAA;EAAA;6BAAA,YAAA;AAAA,cAcpC,QAAA,GAAY,OAAA,EAAS,cAAA,KAAc,IAAA,iBAAA,MAAA,CAAA,MAAA,CAAA,YAAA;EAAA;;6BAAA,YAAA;AAAA,cAenC,SAAA,GAAa,OAAA,EAAS,cAAA,KAAc,IAAA,kBAAA,MAAA,CAAA,MAAA,CAAA,YAAA;EAAA;6BAAA,YAAA;AAAA,cAcpC,UAAA,GAAc,OAAA,EAAS,cAAA,KAAc,IAAA,mBAAA,MAAA,CAAA,MAAA,CAAA,YAAA;EAAA;6BAAA,YAAA;;;;;;;;;;;;;;cA4BrC,cAAA,GAAkB,OAAA,EAAS,cAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as
|
|
1
|
+
import { a as beforeEach, c as it$1, i as beforeAll, o as describe, r as afterAll, s as getCurrentSuite } from "./dist-CcRV3-A5.mjs";
|
|
2
2
|
import * as Cause from "effect/Cause";
|
|
3
3
|
import * as Duration from "effect/Duration";
|
|
4
4
|
import * as Effect from "effect/Effect";
|
|
@@ -12,9 +12,9 @@ import * as Scope from "effect/Scope";
|
|
|
12
12
|
import * as fc from "effect/testing/FastCheck";
|
|
13
13
|
import * as TestClock from "effect/testing/TestClock";
|
|
14
14
|
import * as TestConsole from "effect/testing/TestConsole";
|
|
15
|
-
//#region ../../node_modules/.pnpm/@effect+vitest@4.0.0-beta.
|
|
15
|
+
//#region ../../node_modules/.pnpm/@effect+vitest@4.0.0-beta.94_effect@4.0.0-beta.94_vitest@4.1.5_@types+node@25.6.0_vite@_d376dad414e93cb5624154e275002f20/node_modules/@effect/vitest/dist/internal/internal.js
|
|
16
16
|
/**
|
|
17
|
-
* @since
|
|
17
|
+
* @since 4.0.0
|
|
18
18
|
*/
|
|
19
19
|
const runPromise = /* @__PURE__ */ Effect.fnUntraced(function* (effect, _ctx) {
|
|
20
20
|
const exit = yield* Effect.exit(effect);
|
|
@@ -29,6 +29,25 @@ const runTest = (ctx) => (effect) => runPromise(effect, ctx);
|
|
|
29
29
|
const TestEnv = /* @__PURE__ */ Layer.mergeAll(TestConsole.layer, /* @__PURE__ */ TestClock.layer());
|
|
30
30
|
/** @internal */
|
|
31
31
|
const testOptions = (timeout) => typeof timeout === "number" ? { timeout } : timeout ?? {};
|
|
32
|
+
const hookTimeout = (timeout) => timeout === void 0 ? void 0 : Duration.toMillis(Duration.fromInputUnsafe(timeout));
|
|
33
|
+
const makeItProxy = (it, overrides) => new Proxy(it, {
|
|
34
|
+
apply(target, thisArg, argArray) {
|
|
35
|
+
return Reflect.apply(target, thisArg, argArray);
|
|
36
|
+
},
|
|
37
|
+
get(target, property, receiver) {
|
|
38
|
+
if (property in overrides) return Reflect.get(overrides, property);
|
|
39
|
+
const value = Reflect.get(target, property, receiver);
|
|
40
|
+
return typeof value === "function" ? value.bind(target) : value;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
const collectTasks = (tasks, acc = []) => {
|
|
44
|
+
for (let i = 0; i < tasks.length; i++) {
|
|
45
|
+
const task = tasks[i];
|
|
46
|
+
if (task.type === "test" && task.mode !== "skip" && task.mode !== "todo") acc.push(task);
|
|
47
|
+
else if (task.tasks !== void 0) collectTasks(task.tasks, acc);
|
|
48
|
+
}
|
|
49
|
+
return acc;
|
|
50
|
+
};
|
|
32
51
|
/** @internal */
|
|
33
52
|
const makeTester = (mapEffect, it = it$1) => {
|
|
34
53
|
const run = (ctx, args, self) => pipe(Effect.suspend(() => self(...args)), mapEffect, runTest(ctx));
|
|
@@ -66,7 +85,7 @@ const makeTester = (mapEffect, it = it$1) => {
|
|
|
66
85
|
});
|
|
67
86
|
};
|
|
68
87
|
/** @internal */
|
|
69
|
-
const prop
|
|
88
|
+
const prop = (name, arbitraries, self, timeout) => {
|
|
70
89
|
if (Array.isArray(arbitraries)) {
|
|
71
90
|
const arbs = arbitraries.map((arbitrary) => {
|
|
72
91
|
if (Schema.isSchema(arbitrary)) throw new Error("Schemas are not supported yet");
|
|
@@ -83,58 +102,80 @@ const prop$1 = (name, arbitraries, self, timeout) => {
|
|
|
83
102
|
return it$1(name, testOptions(timeout), (ctx) => fc.assert(fc.property(arbs, (as) => self(as, ctx)), isObject(timeout) ? timeout?.fastCheck : {}));
|
|
84
103
|
};
|
|
85
104
|
/** @internal */
|
|
86
|
-
const layer
|
|
105
|
+
const layer = (layer_, options) => (...args) => {
|
|
87
106
|
const excludeTestServices = options?.excludeTestServices ?? false;
|
|
88
107
|
const withTestEnv = excludeTestServices ? layer_ : Layer.provideMerge(layer_, TestEnv);
|
|
89
108
|
const memoMap = options?.memoMap ?? Effect.runSync(Layer.makeMemoMap);
|
|
90
109
|
const scope = Effect.runSync(Scope.make());
|
|
91
110
|
const contextEffect = Layer.buildWithMemoMap(withTestEnv, memoMap, scope).pipe(Effect.orDie, Effect.cached, Effect.runSync);
|
|
92
|
-
|
|
111
|
+
let closed = false;
|
|
112
|
+
const closeScope = (ctx) => {
|
|
113
|
+
if (closed) return Promise.resolve();
|
|
114
|
+
closed = true;
|
|
115
|
+
return runPromise(Scope.close(scope, Exit.void), ctx);
|
|
116
|
+
};
|
|
117
|
+
const makeIt = (it) => makeItProxy(it, {
|
|
93
118
|
effect: makeTester((effect) => Effect.flatMap(contextEffect, (context) => effect.pipe(Effect.scoped, Effect.provide(context))), it),
|
|
94
|
-
prop
|
|
95
|
-
flakyTest
|
|
119
|
+
prop,
|
|
120
|
+
flakyTest,
|
|
96
121
|
layer(nestedLayer, options) {
|
|
97
|
-
return layer
|
|
122
|
+
return layer(Layer.provideMerge(nestedLayer, withTestEnv), {
|
|
98
123
|
...options,
|
|
99
|
-
memoMap,
|
|
124
|
+
memoMap: Layer.forkMemoMapUnsafe(memoMap),
|
|
100
125
|
excludeTestServices
|
|
101
126
|
});
|
|
102
127
|
}
|
|
103
128
|
});
|
|
104
129
|
if (args.length === 1) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
130
|
+
const currentSuite = getCurrentSuite();
|
|
131
|
+
const previousTasks = new Set(currentSuite.tasks);
|
|
132
|
+
args[0](makeIt(it$1));
|
|
133
|
+
const blockTasks = collectTasks(currentSuite.tasks.filter((task) => !previousTasks.has(task)));
|
|
134
|
+
if (blockTasks.length === 0) {
|
|
135
|
+
afterAll(() => closeScope(), hookTimeout(options?.timeout));
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const blockTaskSet = new Set(blockTasks);
|
|
139
|
+
let remaining = blockTasks.length;
|
|
140
|
+
beforeEach((ctx) => {
|
|
141
|
+
if (!blockTaskSet.has(ctx.task)) return;
|
|
142
|
+
ctx.onTestFinished(() => {
|
|
143
|
+
remaining--;
|
|
144
|
+
if (remaining === 0) return closeScope(ctx);
|
|
145
|
+
});
|
|
146
|
+
return runPromise(Effect.asVoid(contextEffect), ctx);
|
|
147
|
+
}, hookTimeout(options?.timeout));
|
|
148
|
+
afterAll(() => closeScope(), hookTimeout(options?.timeout));
|
|
149
|
+
return;
|
|
108
150
|
}
|
|
109
151
|
return describe(args[0], () => {
|
|
110
|
-
beforeAll(() => runPromise(Effect.asVoid(contextEffect)), options?.timeout
|
|
111
|
-
afterAll(() =>
|
|
152
|
+
beforeAll(() => runPromise(Effect.asVoid(contextEffect)), hookTimeout(options?.timeout));
|
|
153
|
+
afterAll(() => closeScope(), hookTimeout(options?.timeout));
|
|
112
154
|
return args[1](makeIt(it$1));
|
|
113
155
|
});
|
|
114
156
|
};
|
|
115
157
|
/** @internal */
|
|
116
|
-
const flakyTest
|
|
158
|
+
const flakyTest = (self, timeout = Duration.seconds(30)) => pipe(self, Effect.scoped, Effect.sandbox, Effect.retry(pipe(Schedule.recurs(10), Schedule.while((_) => Effect.succeed(Duration.isLessThanOrEqualTo(Duration.fromInputUnsafe(_.elapsed), Duration.fromInputUnsafe(timeout)))))), Effect.orDie);
|
|
117
159
|
/** @internal */
|
|
118
|
-
const makeMethods = (it) =>
|
|
160
|
+
const makeMethods = (it) => makeItProxy(it, {
|
|
119
161
|
effect: makeTester(flow(Effect.scoped, Effect.provide(TestEnv)), it),
|
|
120
162
|
live: makeTester(Effect.scoped, it),
|
|
121
|
-
flakyTest
|
|
122
|
-
layer
|
|
123
|
-
prop
|
|
163
|
+
flakyTest,
|
|
164
|
+
layer,
|
|
165
|
+
prop
|
|
124
166
|
});
|
|
125
167
|
/** @internal */
|
|
126
|
-
const { effect
|
|
168
|
+
const { effect, live } = /* @__PURE__ */ makeMethods(it$1);
|
|
169
|
+
//#endregion
|
|
170
|
+
//#region ../../node_modules/.pnpm/@effect+vitest@4.0.0-beta.94_effect@4.0.0-beta.94_vitest@4.1.5_@types+node@25.6.0_vite@_d376dad414e93cb5624154e275002f20/node_modules/@effect/vitest/dist/index.js
|
|
127
171
|
/**
|
|
128
|
-
* @since
|
|
172
|
+
* @since 4.0.0
|
|
129
173
|
*/
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
layer: layer$1,
|
|
135
|
-
prop: prop$1
|
|
136
|
-
});
|
|
174
|
+
/**
|
|
175
|
+
* @since 4.0.0
|
|
176
|
+
*/
|
|
177
|
+
const it = /* @__PURE__ */ makeMethods(it$1);
|
|
137
178
|
//#endregion
|
|
138
179
|
export { it as t };
|
|
139
180
|
|
|
140
|
-
//# sourceMappingURL=dist-
|
|
181
|
+
//# sourceMappingURL=dist-C0m0QnUP.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dist-C0m0QnUP.mjs","names":["V.it","V.describe","V.it"],"sources":["../../../node_modules/.pnpm/@effect+vitest@4.0.0-beta.94_effect@4.0.0-beta.94_vitest@4.1.5_@types+node@25.6.0_vite@_d376dad414e93cb5624154e275002f20/node_modules/@effect/vitest/dist/internal/internal.js","../../../node_modules/.pnpm/@effect+vitest@4.0.0-beta.94_effect@4.0.0-beta.94_vitest@4.1.5_@types+node@25.6.0_vite@_d376dad414e93cb5624154e275002f20/node_modules/@effect/vitest/dist/index.js"],"sourcesContent":["/**\n * @since 4.0.0\n */\nimport { getCurrentSuite } from \"@vitest/runner\";\nimport * as Cause from \"effect/Cause\";\nimport * as Duration from \"effect/Duration\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport { flow, pipe } from \"effect/Function\";\nimport * as Layer from \"effect/Layer\";\nimport { isObject } from \"effect/Predicate\";\nimport * as Schedule from \"effect/Schedule\";\nimport * as Schema from \"effect/Schema\";\nimport * as Scope from \"effect/Scope\";\nimport * as fc from \"effect/testing/FastCheck\";\nimport * as TestClock from \"effect/testing/TestClock\";\nimport * as TestConsole from \"effect/testing/TestConsole\";\nimport * as V from \"vitest\";\nconst runPromise = /*#__PURE__*/Effect.fnUntraced(function* (effect, _ctx) {\n const exit = yield* Effect.exit(effect);\n if (Exit.isFailure(exit)) {\n const errors = Cause.prettyErrors(exit.cause);\n for (let i = 0; i < errors.length; i++) {\n yield* Effect.logError(errors[i]);\n }\n }\n return yield* exit;\n}, (effect, _, ctx) => Effect.runPromise(effect, {\n signal: ctx?.signal\n}));\n/** @internal */\nconst runTest = ctx => effect => runPromise(effect, ctx);\nconst TestEnv = /*#__PURE__*/Layer.mergeAll(TestConsole.layer, /*#__PURE__*/TestClock.layer());\n/** @internal */\nexport const addEqualityTesters = () => {\n V.expect.addEqualityTesters([]);\n};\n/** @internal */\nconst testOptions = timeout => typeof timeout === \"number\" ? {\n timeout\n} : timeout ?? {};\nconst hookTimeout = timeout => timeout === undefined ? undefined : Duration.toMillis(Duration.fromInputUnsafe(timeout));\nconst makeItProxy = (it, overrides) => new Proxy(it, {\n apply(target, thisArg, argArray) {\n return Reflect.apply(target, thisArg, argArray);\n },\n get(target, property, receiver) {\n if (property in overrides) {\n return Reflect.get(overrides, property);\n }\n const value = Reflect.get(target, property, receiver);\n return typeof value === \"function\" ? value.bind(target) : value;\n }\n});\nconst collectTasks = (tasks, acc = []) => {\n for (let i = 0; i < tasks.length; i++) {\n const task = tasks[i];\n if (task.type === \"test\" && task.mode !== \"skip\" && task.mode !== \"todo\") {\n acc.push(task);\n } else if (task.tasks !== undefined) {\n collectTasks(task.tasks, acc);\n }\n }\n return acc;\n};\n/** @internal */\nconst makeTester = (mapEffect, it = V.it) => {\n const run = (ctx, args, self) => pipe(Effect.suspend(() => self(...args)), mapEffect, runTest(ctx));\n const f = (name, self, timeout) => it(name, testOptions(timeout), ctx => run(ctx, [ctx], self));\n const skip = (name, self, timeout) => it.skip(name, testOptions(timeout), ctx => run(ctx, [ctx], self));\n const skipIf = condition => (name, self, timeout) => it.skipIf(condition)(name, testOptions(timeout), ctx => run(ctx, [ctx], self));\n const runIf = condition => (name, self, timeout) => it.runIf(condition)(name, testOptions(timeout), ctx => run(ctx, [ctx], self));\n const only = (name, self, timeout) => it.only(name, testOptions(timeout), ctx => run(ctx, [ctx], self));\n const each = cases => (name, self, timeout) => it.for(cases)(name, testOptions(timeout), (args, ctx) => run(ctx, [args], self));\n const fails = (name, self, timeout) => V.it.fails(name, testOptions(timeout), ctx => run(ctx, [ctx], self));\n const prop = (name, arbitraries, self, timeout) => {\n if (Array.isArray(arbitraries)) {\n const arbs = arbitraries.map(arbitrary => {\n if (Schema.isSchema(arbitrary)) {\n return Schema.toArbitrary(arbitrary);\n }\n return arbitrary;\n });\n return it(name, testOptions(timeout), ctx =>\n // @ts-ignore\n fc.assert(\n // @ts-ignore\n fc.asyncProperty(...arbs, (...as) => run(ctx, [as, ctx], self)),\n // @ts-ignore\n isObject(timeout) ? timeout?.fastCheck : {}));\n }\n const arbs = fc.record(Object.keys(arbitraries).reduce(function (result, key) {\n const arb = arbitraries[key];\n if (Schema.isSchema(arb)) {\n result[key] = Schema.toArbitrary(arb);\n }\n result[key] = arb;\n return result;\n }, {}));\n return it(name, testOptions(timeout), ctx =>\n // @ts-ignore\n fc.assert(fc.asyncProperty(arbs, (...as) =>\n // @ts-ignore\n run(ctx, [as[0], ctx], self)),\n // @ts-ignore\n isObject(timeout) ? timeout?.fastCheck : {}));\n };\n return Object.assign(f, {\n skip,\n skipIf,\n runIf,\n only,\n each,\n fails,\n prop\n });\n};\n/** @internal */\nexport const prop = (name, arbitraries, self, timeout) => {\n if (Array.isArray(arbitraries)) {\n const arbs = arbitraries.map(arbitrary => {\n if (Schema.isSchema(arbitrary)) {\n throw new Error(\"Schemas are not supported yet\");\n }\n return arbitrary;\n });\n return V.it(name, testOptions(timeout),\n // @ts-ignore\n ctx => fc.assert(fc.property(...arbs, (...as) => self(as, ctx)), isObject(timeout) ? timeout?.fastCheck : {}));\n }\n const arbs = fc.record(Object.keys(arbitraries).reduce(function (result, key) {\n const arb = arbitraries[key];\n if (Schema.isSchema(arb)) {\n throw new Error(\"Schemas are not supported yet\");\n }\n result[key] = arb;\n return result;\n }, {}));\n return V.it(name, testOptions(timeout),\n // @ts-ignore\n ctx => fc.assert(fc.property(arbs, as => self(as, ctx)), isObject(timeout) ? timeout?.fastCheck : {}));\n};\n/** @internal */\nexport const layer = (layer_, options) => (...args) => {\n const excludeTestServices = options?.excludeTestServices ?? false;\n const withTestEnv = excludeTestServices ? layer_ : Layer.provideMerge(layer_, TestEnv);\n const memoMap = options?.memoMap ?? Effect.runSync(Layer.makeMemoMap);\n const scope = Effect.runSync(Scope.make());\n const contextEffect = Layer.buildWithMemoMap(withTestEnv, memoMap, scope).pipe(Effect.orDie, Effect.cached, Effect.runSync);\n let closed = false;\n const closeScope = ctx => {\n if (closed) {\n return Promise.resolve();\n }\n closed = true;\n return runPromise(Scope.close(scope, Exit.void), ctx);\n };\n const makeIt = it => makeItProxy(it, {\n effect: makeTester(effect => Effect.flatMap(contextEffect, context => effect.pipe(Effect.scoped, Effect.provide(context))), it),\n prop,\n flakyTest,\n layer(nestedLayer, options) {\n return layer(Layer.provideMerge(nestedLayer, withTestEnv), {\n ...options,\n memoMap: Layer.forkMemoMapUnsafe(memoMap),\n excludeTestServices\n });\n }\n });\n if (args.length === 1) {\n const currentSuite = getCurrentSuite();\n const previousTasks = new Set(currentSuite.tasks);\n args[0](makeIt(V.it));\n const blockTasks = collectTasks(currentSuite.tasks.filter(task => !previousTasks.has(task)));\n if (blockTasks.length === 0) {\n V.afterAll(() => closeScope(), hookTimeout(options?.timeout));\n return;\n }\n const blockTaskSet = new Set(blockTasks);\n let remaining = blockTasks.length;\n V.beforeEach(ctx => {\n if (!blockTaskSet.has(ctx.task)) {\n return;\n }\n ctx.onTestFinished(() => {\n remaining--;\n if (remaining === 0) {\n return closeScope(ctx);\n }\n });\n return runPromise(Effect.asVoid(contextEffect), ctx);\n }, hookTimeout(options?.timeout));\n V.afterAll(() => closeScope(), hookTimeout(options?.timeout));\n return;\n }\n return V.describe(args[0], () => {\n V.beforeAll(() => runPromise(Effect.asVoid(contextEffect)), hookTimeout(options?.timeout));\n V.afterAll(() => closeScope(), hookTimeout(options?.timeout));\n return args[1](makeIt(V.it));\n });\n};\n/** @internal */\nexport const flakyTest = (self, timeout = Duration.seconds(30)) => pipe(self, Effect.scoped, Effect.sandbox, Effect.retry(pipe(Schedule.recurs(10), Schedule.while(_ => Effect.succeed(Duration.isLessThanOrEqualTo(Duration.fromInputUnsafe(_.elapsed), Duration.fromInputUnsafe(timeout)))))), Effect.orDie);\n/** @internal */\nexport const makeMethods = it => makeItProxy(it, {\n effect: makeTester(flow(Effect.scoped, Effect.provide(TestEnv)), it),\n live: makeTester(Effect.scoped, it),\n flakyTest,\n layer,\n prop\n});\n/** @internal */\nexport const {\n /** @internal */\n effect,\n /** @internal */\n live\n} = /*#__PURE__*/makeMethods(V.it);\n/** @internal */\nexport const describeWrapped = (name, f) => V.describe(name, it => f(makeMethods(it)));\n//# sourceMappingURL=internal.js.map","import * as V from \"vitest\";\nimport * as internal from \"./internal/internal.js\";\n/**\n * @since 4.0.0\n */\nexport * from \"vitest\";\n/**\n * @since 4.0.0\n */\nexport const addEqualityTesters = internal.addEqualityTesters;\n/**\n * @since 4.0.0\n */\nexport const effect = internal.effect;\n/**\n * @since 4.0.0\n */\nexport const live = internal.live;\n/**\n * Share a `Layer` between multiple tests, optionally wrapping\n * the tests in a `describe` block if a name is provided.\n *\n * @since 4.0.0\n *\n * ```ts\n * import { expect, layer } from \"@effect/vitest\"\n * import { Effect, Layer, Context } from \"effect\"\n *\n * class Foo extends Context.Service(\"Foo\")<Foo, \"foo\">() {\n * static Live = Layer.succeed(Foo, \"foo\")\n * }\n *\n * class Bar extends Context.Service(\"Bar\")<Bar, \"bar\">() {\n * static Live = Layer.effect(\n * Bar,\n * Effect.map(Foo, () => \"bar\" as const)\n * )\n * }\n *\n * layer(Foo.Live)(\"layer\", (it) => {\n * it.effect(\"adds context\", () =>\n * Effect.gen(function*() {\n * const foo = yield* Foo\n * expect(foo).toEqual(\"foo\")\n * }))\n *\n * it.layer(Bar.Live)(\"nested\", (it) => {\n * it.effect(\"adds context\", () =>\n * Effect.gen(function*() {\n * const foo = yield* Foo\n * const bar = yield* Bar\n * expect(foo).toEqual(\"foo\")\n * expect(bar).toEqual(\"bar\")\n * }))\n * })\n * })\n * ```\n */\nexport const layer = internal.layer;\n/**\n * @since 4.0.0\n */\nexport const flakyTest = internal.flakyTest;\n/**\n * @since 4.0.0\n */\nexport const prop = internal.prop;\n/**\n * @since 4.0.0\n */\n/**\n * @since 4.0.0\n */\nexport const it = /*#__PURE__*/internal.makeMethods(V.it);\n/**\n * @since 4.0.0\n */\nexport const makeMethods = internal.makeMethods;\n/**\n * @since 4.0.0\n */\nexport const describeWrapped = internal.describeWrapped;\n//# sourceMappingURL=index.js.map"],"x_google_ignoreList":[0,1],"mappings":"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"}
|
|
@@ -5107,7 +5107,7 @@ function manageArtifactAttachment(attachment) {
|
|
|
5107
5107
|
if (attachment.body != null) attachment.bodyEncoding ??= "base64";
|
|
5108
5108
|
}
|
|
5109
5109
|
//#endregion
|
|
5110
|
-
//#region ../../node_modules/.pnpm/vitest@4.1.5_@types+node@25.6.0_vite@7.3.2_@types+node@25.6.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.21.0_yaml@2.
|
|
5110
|
+
//#region ../../node_modules/.pnpm/vitest@4.1.5_@types+node@25.6.0_vite@7.3.2_@types+node@25.6.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.21.0_yaml@2.9.0_/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js
|
|
5111
5111
|
const NAME_WORKER_STATE = "__vitest_worker__";
|
|
5112
5112
|
function getWorkerState() {
|
|
5113
5113
|
const workerState = globalThis[NAME_WORKER_STATE];
|
|
@@ -9986,10 +9986,10 @@ function offsetToLineNumber(source, offset) {
|
|
|
9986
9986
|
return line + 1;
|
|
9987
9987
|
}
|
|
9988
9988
|
//#endregion
|
|
9989
|
-
//#region ../../node_modules/.pnpm/vitest@4.1.5_@types+node@25.6.0_vite@7.3.2_@types+node@25.6.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.21.0_yaml@2.
|
|
9989
|
+
//#region ../../node_modules/.pnpm/vitest@4.1.5_@types+node@25.6.0_vite@7.3.2_@types+node@25.6.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.21.0_yaml@2.9.0_/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js
|
|
9990
9990
|
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
|
|
9991
9991
|
//#endregion
|
|
9992
|
-
//#region ../../node_modules/.pnpm/vitest@4.1.5_@types+node@25.6.0_vite@7.3.2_@types+node@25.6.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.21.0_yaml@2.
|
|
9992
|
+
//#region ../../node_modules/.pnpm/vitest@4.1.5_@types+node@25.6.0_vite@7.3.2_@types+node@25.6.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.21.0_yaml@2.9.0_/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js
|
|
9993
9993
|
const RealDate = Date;
|
|
9994
9994
|
let now = null;
|
|
9995
9995
|
var MockDate = class MockDate extends RealDate {
|
|
@@ -10952,7 +10952,7 @@ function raceWith(promise, other) {
|
|
|
10952
10952
|
}))]);
|
|
10953
10953
|
}
|
|
10954
10954
|
//#endregion
|
|
10955
|
-
//#region ../../node_modules/.pnpm/vitest@4.1.5_@types+node@25.6.0_vite@7.3.2_@types+node@25.6.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.21.0_yaml@2.
|
|
10955
|
+
//#region ../../node_modules/.pnpm/vitest@4.1.5_@types+node@25.6.0_vite@7.3.2_@types+node@25.6.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.21.0_yaml@2.9.0_/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js
|
|
10956
10956
|
var fakeTimersSrc = {};
|
|
10957
10957
|
var global$1;
|
|
10958
10958
|
var hasRequiredGlobal;
|
|
@@ -13629,7 +13629,7 @@ Object.defineProperty(globalThis, GLOBAL_EXPECT, {
|
|
|
13629
13629
|
configurable: true
|
|
13630
13630
|
});
|
|
13631
13631
|
//#endregion
|
|
13632
|
-
//#region ../../node_modules/.pnpm/vite@7.3.2_@types+node@25.6.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.21.0_yaml@2.
|
|
13632
|
+
//#region ../../node_modules/.pnpm/vite@7.3.2_@types+node@25.6.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.21.0_yaml@2.9.0/node_modules/vite/dist/node/module-runner.js
|
|
13633
13633
|
let SOURCEMAPPING_URL = "sourceMa";
|
|
13634
13634
|
SOURCEMAPPING_URL += "ppingURL";
|
|
13635
13635
|
typeof process < "u" && process.platform;
|
|
@@ -13677,7 +13677,7 @@ var require_utils = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
13677
13677
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13678
13678
|
}));
|
|
13679
13679
|
//#endregion
|
|
13680
|
-
//#region ../../node_modules/.pnpm/vitest@4.1.5_@types+node@25.6.0_vite@7.3.2_@types+node@25.6.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.21.0_yaml@2.
|
|
13680
|
+
//#region ../../node_modules/.pnpm/vitest@4.1.5_@types+node@25.6.0_vite@7.3.2_@types+node@25.6.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.21.0_yaml@2.9.0_/node_modules/vitest/dist/index.js
|
|
13681
13681
|
var import_dist = (/* @__PURE__ */ __commonJSMin(((exports) => {
|
|
13682
13682
|
var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
|
|
13683
13683
|
if (k2 === void 0) k2 = k;
|
|
@@ -13777,6 +13777,6 @@ var import_dist = (/* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
13777
13777
|
exports.expectTypeOf = expectTypeOf;
|
|
13778
13778
|
})))();
|
|
13779
13779
|
//#endregion
|
|
13780
|
-
export {
|
|
13780
|
+
export { beforeEach as a, it as c, beforeAll as i, globalExpect as n, describe as o, afterAll as r, getCurrentSuite as s, import_dist as t };
|
|
13781
13781
|
|
|
13782
|
-
//# sourceMappingURL=dist-
|
|
13782
|
+
//# sourceMappingURL=dist-CcRV3-A5.mjs.map
|