@effect/platform
0.97.2
Patch Changes
-
#7998
2e471d9Thanks @javascript-unsafe! - Fix multipart limit failures being silently ignored. -
Updated dependencies [
291d5a9,7c6e1e5]:- effect@3.22.2
0.97.1
Patch Changes
-
#6652
e5dfd78Thanks @IMax153! - Add anextendEnvoption toCommand.envfor spawning commands with a clean environment. -
#6774
4b03605Thanks @tim-smart! - Reject empty,.and..keys in file-backed key-value stores. -
#6756
8ee801dThanks @tim-smart! - Fix a security issue in HTML escaping for generated Scalar and Swagger API documentation. -
#6765
5859b37Thanks @tim-smart! - Reject invalid cookie names and cookie attribute separators in domains and paths. -
Updated dependencies [
7ccbd9c,ab2af6d,3cc3c6e,3d390f2,fcabf08,735d81b]:- effect@3.22.1
0.97.0
Patch Changes
- Updated dependencies [
fffdee0]:- effect@3.22.0
0.96.3
Patch Changes
-
#6244
99d5575Thanks @spokodev! - FixHttpLayerRouter.addHttpApiso two registered APIs no longer share error encoders. Previously each call’s middleware was added to a shared context map and applied to every route, so a 500 response from one API was sometimes encoded against the other API’s error schema. The fix scopes each API’s middleware to its own endpoints (matched by method + path) and wraps each route handler directly. -
Updated dependencies [
307d54a,d95868a,95c7d2e,d24511f]:- effect@3.21.5
0.96.2
Patch Changes
-
#6273
7e00169Thanks @tim-smart! - Remove the content-length header before sending FetchHttpClient requests. -
Updated dependencies [
8222963]:- effect@3.21.4
0.96.1
Patch Changes
-
#6147
518d0e3Thanks @syhstanley! - FixHttpLayerRouter.addHttpApisilently skipping API-level middleware. -
#6191
c016642Thanks @IGassmann! - Updatemsgpackrto 1.11.10 to fix silent decode failures in environments that blocknew Function()at runtime (e.g. Cloudflare Workers). The new version wraps the JITnew Function()call in a try/catch, falling back to the interpreted path when dynamic code evaluation is blocked. -
Updated dependencies [
74f3267]:- effect@3.21.2
0.96.0
Patch Changes
0.95.0
Patch Changes
0.94.5
Patch Changes
-
#6050
d67c708Thanks @tim-smart! - Backport Effect 4contentTypesupport forHttpBodyJSON / URL-encoded constructors andHttpServerResponseJSON / URL-encoded helpers. -
Updated dependencies [
a8c436f]:- effect@3.19.17
0.94.4
Patch Changes
- #6035
22d9d27Thanks @tim-smart! - FixHttpServerError.causeResponseto prefer 499 when a client abort interrupt is present.
0.94.3
Patch Changes
-
#6021
0023c19Thanks @codewithkenzo! - FixHttpClientRequest.appendUrlto properly join URL paths.Previously,
appendUrlused simple string concatenation which could produce invalid URLs:// Before (broken):appendUrl("https://api.example.com/v1", "users")// Result: "https://api.example.com/v1users" (missing slash!)Now it ensures proper path joining:
// After (fixed):appendUrl("https://api.example.com/v1", "users")// Result: "https://api.example.com/v1/users" -
#6019
9a96b87Thanks @codewithkenzo! - FixretryTransientto use correct transient status codesChanged
isTransientResponsefromstatus >= 429to an explicit allowlist (408, 429, 500, 502, 503, 504). This correctly excludes 501 (Not Implemented) and 505+ permanent errors, while including 408 (Request Timeout) which was previously missed.Also aligned response retry behavior with v4: the
whilepredicate now only applies to error retries, not response retries. Response retries are determined solely byisTransientResponse. This matches the semantic intent sincewhileis typed for errors, not responses.Fixes #5995
-
Updated dependencies [
e71889f]:- effect@3.19.16
0.94.2
Patch Changes
-
#5977
118e7a4Thanks @scotttrinh! - AddedrowsandisTTYproperties toTerminal -
Updated dependencies [
7e925ea,d7e75d6,4860d1e]:- effect@3.19.15
0.94.1
Patch Changes
-
#5936
65e9e35Thanks @schickling! - Document subtle CORS middlewareallowedHeadersbehavior: when empty array (default), it reflects back the client’sAccess-Control-Request-Headers(permissive), and when non-empty array, it only allows specified headers (restrictive). Added comprehensive JSDoc with examples. -
#5940
ee69cd7Thanks @kitlangton! - HttpServerResponse: fixfromWebto preserve Content-Type header when response has a bodyPreviously, when converting a web
Responseto anHttpServerResponseviafromWeb, theContent-Typeheader was not passed toBody.stream(), causing it to default toapplication/octet-stream. This affected any code usingHttpApp.fromWebHandlerto wrap web handlers, as JSON responses would incorrectly have their Content-Type set toapplication/octet-streaminstead ofapplication/json. -
Updated dependencies [
488d6e8]:- effect@3.19.14
0.94.0
Minor Changes
Patch Changes
0.93.8
Patch Changes
-
#5902
a0a84d8Thanks @tim-smart! - add HttpApp.fromWebHandler -
Updated dependencies [
a6dfca9]:- effect@3.19.12
0.93.7
Patch Changes
0.93.6
Patch Changes
0.93.5
Patch Changes
0.93.4
Patch Changes
0.93.3
Patch Changes
0.93.2
Patch Changes
0.93.1
Patch Changes
0.93.0
Patch Changes
-
#5606
24a1685Thanks @tim-smart! - expose Layer output in HttpLayerRouter.serve -
Updated dependencies [
3c15d5f,3863fa8,2a03c76,24a1685]:- effect@3.19.0
0.92.1
Patch Changes
- #5588
f6987c0Thanks @wmaurer! - add additional predicate typings for HttpMiddleware.cors allowOrigins
0.92.0
Patch Changes
-
#5302
c60956eThanks @OliverJAsh! - AdjustxForwardedHeadersmiddleware to always usex-forwarded-for -
Updated dependencies [
1c6ab74,70fe803,c296e32,a098ddf]:- effect@3.18.0
0.91.1
Patch Changes
0.91.0
Minor Changes
0.90.10
Patch Changes
0.90.9
Patch Changes
0.90.8
Patch Changes
- #5481
333be04Thanks @jpowersdev! - Allow user to set extension of file created usingFileSystem.makeTempFile
0.90.7
Patch Changes
0.90.6
Patch Changes
- #5418
7ad7b3cThanks @tim-smart! - exclude layer services from HttpLayerRouter.toWebHandler request context
0.90.5
Patch Changes
-
#5410
fef9771Thanks @beeman! - export isQuitExection function from @effect/platform/Terminal -
Updated dependencies [
84bc300]:- effect@3.17.8
0.90.4
Patch Changes
-
#5402
8c7bb52Thanks @tim-smart! - abort HttpClientResponse.stream regardless of how stream ends -
#5397
0e46e24Thanks @IMax153! - Avoid issues with ESM builds by removing dependency on@opentelemetry/semantic-conventions
0.90.3
Patch Changes
0.90.2
Patch Changes
0.90.1
Patch Changes
0.90.0
Minor Changes
-
#5258
7813640Thanks @kitlangton! - Changes Terminal.readInput to return a ReadonlyMailbox of eventsThis allows for more efficient handling of input events, as well as ensuring events are not lost.
0.89.0
Patch Changes
- Updated dependencies [
40c3c87,ed2c74a,073a1b8,f382e99,e8c7ba5,7e10415,e9bdece,8d95eb0]:- effect@3.17.0
0.88.2
Patch Changes
0.88.1
Patch Changes
-
#5192
17a5ea8Thanks @nikelborm! - Updated deprecated OTel Resource attributes names and values.Many of the attributes have undergone the process of deprecation not once, but twice. Most of the constants holding attribute names have been renamed. These are minor changes.
Additionally, there were numerous changes to the attribute keys themselves. These changes can be considered major.
In the
@opentelemetry/semantic-conventionspackage, new attributes having ongoing discussion about them are going through a process called incubation, until a consensus about their necessity and form is reached. Otel team recommends devs to copy them directly into their code. Luckily, it’s not necessary because all of the new attribute names and values came out of this process (some of them were changed again) and are now considered stable.Reasoning for minor version bump
Package Major attribute changes Major value changes Clickhouse client db.system->db.system.name
db.name->db.namespaceMsSQL client db.system->db.system.name
db.name->db.namespacemssql->microsoft.sql_serverMySQL client db.system->db.system.name
db.name->db.namespacePg client db.system->db.system.name
db.name->db.namespaceBun SQLite client db.system->db.system.nameNode SQLite client db.system->db.system.nameReact.Native SQLite client db.system->db.system.nameWasm SQLite client db.system->db.system.nameSQLite Do client db.system->db.system.nameLibSQL client db.system->db.system.nameD1 client db.system->db.system.nameKysely client db.statement->db.query.text@effect/sql db.statement->db.query.text
db.operation->db.operation.name -
#5211
d25f22bThanks @mattiamanzati! - Removed some unnecessary single-arg pipe calls -
Updated dependencies [
f5dfabf,17a5ea8,d25f22b]:- effect@3.16.14
0.88.0
Minor Changes
Patch Changes
0.87.13
Patch Changes
0.87.12
Patch Changes
-
#5177
32ba77aThanks @johtso! - Fix KeyValueStore.make type mismatch -
#5174
d5e25b2Thanks @schickling! - feat(platform): add recursive option to FileSystem.watchAdded a
recursiveoption toFileSystem.watchthat allows watching for changes in subdirectories. When set totrue, the watcher will monitor changes in all nested directories.Note: The recursive option is only supported on macOS and Windows. On other platforms, it will be ignored.
Example:
import { FileSystem } from "@effect/platform"import { Effect, Stream } from "effect"Effect.gen(function* () {const fs = yield* FileSystem.FileSystem// Watch directory and all subdirectoriesyield* fs.watch("src", { recursive: true }).pipe(Stream.runForEach(console.log))})
0.87.11
Patch Changes
0.87.10
Patch Changes
-
#5175
678318dThanks @tim-smart! - rename HttpLayerRouter.Type to Request -
#5175
678318dThanks @tim-smart! - propagate headers to HttpServerResponse.raw(Response)
0.87.9
Patch Changes
0.87.8
Patch Changes
0.87.7
Patch Changes
-
#5153
a9b617fThanks @thewilkybarkid! - Fix UrlParams.toRecord when there’s a proto key -
#5159
7e26e86Thanks @tim-smart! - add HttpLayerRouter.add & addAll apis
0.87.6
Patch Changes
- Updated dependencies [
905da99]:- effect@3.16.12
0.87.5
Patch Changes
0.87.4
Patch Changes
0.87.3
Patch Changes
- #5128
1b6e396Thanks @tim-smart! - attach http request scope to stream lifetime for stream responses
0.87.2
Patch Changes
-
#5111
4fea68cThanks @mlegenhausen! -HttpRouter.mountAppprefix matching fixed -
#5117
b927954Thanks @tim-smart! - add HttpLayerRouter moduleThe experimental HttpLayerRouter module provides a simplified way to create HTTP servers.
You can read more in the /platform README:
https://github.com/Effect-TS/effect/blob/main/packages/platform/README.md#httplayerrouter
-
Updated dependencies [
99590a6,6c3e24c]:- effect@3.16.11
0.87.1
Patch Changes
- Updated dependencies [
faad30e]:- effect@3.16.10
0.87.0
Minor Changes
- #5087
b5bac9aThanks @tim-smart! - add HttpApiClient.makeWith, for supporting passing in HttpClient with errors and requirements
0.86.0
Minor Changes
Patch Changes
-
#5081
5137c70Thanks @tim-smart! - allow configuring multipart limits in HttpApiSchema.Multipart -
Updated dependencies [
5137c70,c23d25c]:- effect@3.16.9
0.85.2
Patch Changes
0.85.1
Patch Changes
0.85.0
Minor Changes
Patch Changes
-
#5042
93687ddThanks @tim-smart! - allow return HttpServerResponse from HttpApiBuilder .handle -
#5042
93687ddThanks @tim-smart! - add HttpApiSchema.MultipartStream
0.84.11
Patch Changes
- Updated dependencies [
1bb0d8a]:- effect@3.16.7
0.84.10
Patch Changes
-
#5032
bf369b2Thanks @tim-smart! - allow property signatures in HttpApiSchema.param -
Updated dependencies [
a5f7595,a02470c,f891d45]:- effect@3.16.6
0.84.9
Patch Changes
- Updated dependencies [
bf418ef]:- effect@3.16.5
0.84.8
Patch Changes
0.84.7
Patch Changes
0.84.6
Patch Changes
- #4975
ceea77aThanks @tim-smart! - allow wrapping a web Response with HttpServerResponse.raw on some platforms
0.84.5
Patch Changes
0.84.4
Patch Changes
0.84.3
Patch Changes
0.84.2
Patch Changes
- Updated dependencies [
0ddf148]:- effect@3.16.2
0.84.1
Patch Changes
-
#4936
71174d0Thanks @mattiamanzati! - Escape JSON Schema $id for empty struct -
Updated dependencies [
71174d0,d615e6e]:- effect@3.16.1
0.84.0
Patch Changes
- Updated dependencies [
ee0bd5d,5189800,58bfeaa,194d748,918c9ea,9198e6f,2a370bf,58ccb91,fd47834]:- effect@3.16.0
0.83.0
Minor Changes
Patch Changes
- Updated dependencies [
cc5bb2b]:- effect@3.15.5
0.82.8
Patch Changes
0.82.7
Patch Changes
-
#4921
c20b95aThanks @tim-smart! - update /platform dependencies -
#4916
94ada43Thanks @mattiamanzati! - Fix missing encoding of path parameters in HttpApiClient -
Updated dependencies [
f570554,78047e8]:- effect@3.15.4
0.82.6
Patch Changes
- #4855
618903bThanks @gcanti! - Enhance OpenAPI documentation handling by adding safe serialization and HTML escaping functions. This prevents script injection and ensures valid JSON output in the Swagger UI
0.82.5
Patch Changes
-
#4912
7764a07Thanks @tim-smart! - add HttpClient.withScope, for tying the lifetime of the request to a Scope -
#4909
30a0d9cThanks @tim-smart! - add HttpClientRequest.toUrl -
Updated dependencies [
4577f54]:- effect@3.15.3
0.82.4
Patch Changes
-
#4896
d45e8a8Thanks @seniorkonung! - HandleRespondabledefects intoResponseOrElseDefect -
#4890
d13b68eThanks @KhraksMamtsov! -Url.setPasswordsupportsRedacted<string>values
0.82.3
Patch Changes
-
#4889
a328f4bThanks @tim-smart! - add HttpBody.formDataRecord -
Updated dependencies [
b8722b8]:- effect@3.15.2
0.82.2
Patch Changes
0.82.1
Patch Changes
0.82.0
Minor Changes
Patch Changes
- Updated dependencies [
c654595,d9f5dea,49aa723,74c14d0,e4f49b6,6f02224,1dcfd41,b21ab16,fcf1822,0061dd1,8421e6e,fa10f56]:- effect@3.15.0
0.81.1
Patch Changes
- Updated dependencies [
24a9ebb]:- effect@3.14.22
0.81.0
Minor Changes
-
#4842
672920fThanks @tim-smart! - allow overriding http span namesimport { FetchHttpClient, HttpClient } from "@effect/platform"import { NodeRuntime } from "@effect/platform-node"import { Effect } from "effect"Effect.gen(function* () {const client = (yield* HttpClient.HttpClient).pipe(// Customize the span names for this HttpClientHttpClient.withSpanNameGenerator((request) => `http.client ${request.method} ${request.url}`))yield* client.get("https://jsonplaceholder.typicode.com/posts/1")}).pipe(Effect.provide(FetchHttpClient.layer), NodeRuntime.runMain)And for a server:
import {HttpMiddleware,HttpRouter,HttpServer,HttpServerResponse} from "@effect/platform"import { NodeHttpServer, NodeRuntime } from "@effect/platform-node"import { Layer } from "effect"import { createServer } from "http"HttpRouter.empty.pipe(HttpRouter.get("/", HttpServerResponse.empty()),HttpServer.serve(),// Customize the span names for this HttpAppHttpMiddleware.withSpanNameGenerator((request) => `GET ${request.url}`),Layer.provide(NodeHttpServer.layer(createServer, { port: 3000 })),Layer.launch,NodeRuntime.runMain)
0.80.21
Patch Changes
- Updated dependencies [
2f3b7d4]:- effect@3.14.21
0.80.20
Patch Changes
- Updated dependencies [
17e2f30]:- effect@3.14.20
0.80.19
Patch Changes
-
#4821
e25e7bbThanks @seniorkonung! - Ensure HttpApp defects are always 500 -
Updated dependencies [
056a910,3273d57]:- effect@3.14.19
0.80.18
Patch Changes
- Updated dependencies [
b1164d4]:- effect@3.14.18
0.80.17
Patch Changes
0.80.16
Patch Changes
-
#4803
f1c8583Thanks @tim-smart! - expose uninteruptible option to HttpApiBuilder .handle apis -
Updated dependencies [
ee14444]:- effect@3.14.16
0.80.15
Patch Changes
0.80.14
Patch Changes
- Updated dependencies [
6ed8d15]:- effect@3.14.14
0.80.13
Patch Changes
0.80.12
Patch Changes
0.80.11
Patch Changes
- Updated dependencies [
e536127]:- effect@3.14.11
0.80.10
Patch Changes
- Updated dependencies [
bc7efa3]:- effect@3.14.10
0.80.9
Patch Changes
- Updated dependencies [
d78249f]:- effect@3.14.9
0.80.8
Patch Changes
- Updated dependencies [
b3a2d32]:- effect@3.14.8
0.80.7
Patch Changes
- Updated dependencies [
b542a4b]:- effect@3.14.7
0.80.6
Patch Changes
0.80.5
Patch Changes
-
#4642
85fba81Thanks @nounder! - Fix options inHttpServerResponse.raw -
Updated dependencies [
40dbfef,5a5ebdd]:- effect@3.14.5
0.80.4
Patch Changes
- Updated dependencies [
e4ba2c6]:- effect@3.14.4
0.80.3
Patch Changes
0.80.2
Patch Changes
0.80.1
Patch Changes
- Updated dependencies [
4a274fe]:- effect@3.14.1
0.80.0
Minor Changes
Patch Changes
-
#4469
aba2d1dThanks @tim-smart! - move the MsgPack, Ndjson & ChannelSchema modules to @effect/platform -
#4469
aba2d1dThanks @tim-smart! - add HttpRouter.Tag.serve api -
#4469
aba2d1dThanks @tim-smart! - Move SocketServer modules to @effect/platform -
Updated dependencies [
1f47e4e,26dd75f,04dff2d,c7fac0c,aba2d1d,ffaa3f3,ab957c1,35db9ce,cf77ea9,26dd75f,baaab60]:- effect@3.14.0
0.79.4
Patch Changes
-
#4592
5662363Thanks @tim-smart! - support nested records in UrlParams module -
#4615
5f1fd15Thanks @KhraksMamtsov! - - RelaxUrl.setPortconstraint- Use
URL | ...forbaseUrlinHttpApiClient.make
- Use
-
#4614
8bb1460Thanks @gcanti! - HttpApiEndpoint: add missingheadandoptionsconstructors, closes #4613.
0.79.3
Patch Changes
0.79.2
Patch Changes
0.79.1
Patch Changes
- Updated dependencies [
527c964]:- effect@3.13.10
0.79.0
Minor Changes
-
#4573
88fe129Thanks @tim-smart! - remove Scope from HttpClient requirementsBefore:
import { HttpClient } from "@effect/platform"import { Effect } from "effect"Effect.gen(function* () {const client = yield* HttpClient.HttpClientconst response = yield* client.get("https://api.github.com/users/octocat")return yield* response.json}).pipe(Effect.scoped)After:
import { HttpClient } from "@effect/platform"import { Effect } from "effect"Effect.gen(function* () {const client = yield* HttpClient.HttpClientconst response = yield* client.get("https://api.github.com/users/octocat")return yield* response.json}) // no need to add Effect.scoped
Patch Changes
-
#4583
d630249Thanks @tim-smart! - support Layer.launch when using WorkerRunner -
Updated dependencies [
2976e52]:- effect@3.13.9
0.78.1
Patch Changes
0.78.0
Minor Changes
0.77.7
Patch Changes
-
#4540
840cc73Thanks @gcanti! - AddadditionalPropertiesStrategyoption toOpenApi.fromApi, closes #4531.This update introduces the
additionalPropertiesStrategyoption inOpenApi.fromApi, allowing control over how additional properties are handled in the generated OpenAPI schema.- When
"strict"(default), additional properties are disallowed ("additionalProperties": false). - When
"allow", additional properties are allowed ("additionalProperties": true), making APIs more flexible.
The
additionalPropertiesStrategyoption has also been added to:JSONSchema.fromASTOpenApiJsonSchema.makeWithDefs
Example
import {HttpApi,HttpApiEndpoint,HttpApiGroup,OpenApi} from "@effect/platform"import { Schema } from "effect"const api = HttpApi.make("api").add(HttpApiGroup.make("group").add(HttpApiEndpoint.get("get", "/").addSuccess(Schema.Struct({ a: Schema.String }))))const schema = OpenApi.fromApi(api, {additionalPropertiesStrategy: "allow"})console.log(JSON.stringify(schema, null, 2))/*{"openapi": "3.1.0","info": {"title": "Api","version": "0.0.1"},"paths": {"/": {"get": {"tags": ["group"],"operationId": "group.get","parameters": [],"security": [],"responses": {"200": {"description": "Success","content": {"application/json": {"schema": {"type": "object","required": ["a"],"properties": {"a": {"type": "string"}},"additionalProperties": true}}}},"400": {"description": "The request did not match the expected schema","content": {"application/json": {"schema": {"$ref": "#/components/schemas/HttpApiDecodeError"}}}}}}}},"components": {"schemas": {"HttpApiDecodeError": {"type": "object","required": ["issues","message","_tag"],"properties": {"issues": {"type": "array","items": {"$ref": "#/components/schemas/Issue"}},"message": {"type": "string"},"_tag": {"type": "string","enum": ["HttpApiDecodeError"]}},"additionalProperties": true,"description": "The request did not match the expected schema"},"Issue": {"type": "object","required": ["_tag","path","message"],"properties": {"_tag": {"type": "string","enum": ["Pointer","Unexpected","Missing","Composite","Refinement","Transformation","Type","Forbidden"],"description": "The tag identifying the type of parse issue"},"path": {"type": "array","items": {"$ref": "#/components/schemas/PropertyKey"},"description": "The path to the property where the issue occurred"},"message": {"type": "string","description": "A descriptive message explaining the issue"}},"additionalProperties": true,"description": "Represents an error encountered while parsing a value to match the schema"},"PropertyKey": {"anyOf": [{"type": "string"},{"type": "number"},{"type": "object","required": ["_tag","key"],"properties": {"_tag": {"type": "string","enum": ["symbol"]},"key": {"type": "string"}},"additionalProperties": true,"description": "an object to be decoded into a globally shared symbol"}]}},"securitySchemes": {}},"security": [],"tags": [{"name": "group"}]}*/ - When
-
#4541
9bf8a74Thanks @fubhy! - Disallowed excess properties for various function options -
#4559
f910880Thanks @tim-smart! - add additional properties options to HttpApiBuilder.middlewareOpenApi -
#4493
0d01480Thanks @leonitousconforti! - FetchHttpClient merge headers from request and requestInit -
Updated dependencies [
840cc73,9bf8a74,87ba23c]:- effect@3.13.7
0.77.6
Patch Changes
- Updated dependencies [
3154ce4]:- effect@3.13.6
0.77.5
Patch Changes
0.77.4
Patch Changes
-
#4525
e0746f9Thanks @anderssjoberg97! - Fix w3c traceparent header parsing -
Updated dependencies [
17d9e89]:- effect@3.13.4
0.77.3
Patch Changes
- Updated dependencies [
cc5588d,623c8cd,00b4eb1,f2aee98,fb798eb,2251b15,2e15c1e,a4979db,b74255a,d7f6a5c,9dd8979,477b488,10932cb,9f6c784,2c639ec,886aaa8]:- effect@3.13.3
0.77.2
Patch Changes
-
#4456
3e7ce97Thanks @tim-smart! - ensure key for header security is lower case -
#4472
31be72aThanks @gcanti! - Add support forSchema.EnumsinHttpApiBuilder.isSingleStringType, closes #4471. -
Updated dependencies [
31be72a]:- effect@3.13.2
0.77.1
Patch Changes
- Updated dependencies [
b56a211]:- effect@3.13.1
0.77.0
Patch Changes
- Updated dependencies [
8baef83,655bfe2,d90cbc2,75632bd,c874a2e,bf865e5,f98b2b7,de8ce92,cf8b2dd,db426a5,6862444,5fc8a90,546a492,65c4796,9760fdc,5b471e7,4f810cc]:- effect@3.13.0
0.76.1
Patch Changes
-
#4444
c407726Thanks @gcanti! - HttpApiBuilder: URL parameters are now automatically converted to arrays when needed, closes #4442.Example
import {HttpApi,HttpApiBuilder,HttpApiEndpoint,HttpApiGroup,HttpMiddleware,HttpServer} from "@effect/platform"import { NodeHttpServer, NodeRuntime } from "@effect/platform-node"import { Effect, Layer, Schema } from "effect"import { createServer } from "node:http"const api = HttpApi.make("api").add(HttpApiGroup.make("group").add(HttpApiEndpoint.get("get", "/").addSuccess(Schema.String).setUrlParams(Schema.Struct({param: Schema.NonEmptyArray(Schema.String)}))))const usersGroupLive = HttpApiBuilder.group(api, "group", (handlers) =>handlers.handle("get", (req) =>Effect.succeed(req.urlParams.param.join(", "))))const MyApiLive = HttpApiBuilder.api(api).pipe(Layer.provide(usersGroupLive))const HttpLive = HttpApiBuilder.serve(HttpMiddleware.logger).pipe(Layer.provide(MyApiLive),HttpServer.withLogAddress,Layer.provide(NodeHttpServer.layer(createServer, { port: 3000 })))Layer.launch(HttpLive).pipe(NodeRuntime.runMain)Previously, if a query parameter was defined as a
NonEmptyArray(an array that requires at least one element), providing a single value would cause a parsing error.For example, this worked fine:
Terminal window curl "http://localhost:3000/?param=1¶m=2"But this would fail:
Terminal window curl "http://localhost:3000/?param=1"Resulting in an error because
"1"was treated as a string instead of an array.With this update, single values are automatically wrapped in an array, so they match the expected schema without requiring manual fixes.
-
Updated dependencies [
4018eae,543d36d,f70a65a,ba409f6,3d2e356]:- effect@3.12.12
0.76.0
Minor Changes
- #4429
2473ad5Thanks @tim-smart! - run platform workers in a Scope, send errors or termination to a CloseLatch
Patch Changes
0.75.4
Patch Changes
-
#4416
7d57ecdThanks @tim-smart! - add HttpServerResponse.mergeCookies -
Updated dependencies [
e30f132,33fa667,87f5f28,4dbd170]:- effect@3.12.10
0.75.3
Patch Changes
- Updated dependencies [
1b4a4e9]:- effect@3.12.9
0.75.2
Patch Changes
-
#4334
59b3cfbThanks @gcanti! - Cookies:unsafeMakeCookieandunsafeSetAllnow throw a more informative error instead of a generic one -
#4360
bb05fb8Thanks @IMax153! - Ensure that nested configuration values can be properly loaded from an env file -
#4353
8f6006aThanks @tim-smart! - fix HttpServerRequest.arrayBuffer for bun & web handlers -
#4345
c9175aeThanks @ethanniser! - Addition ofsyncproperty toFileSystem.Filerepresenting thefsyncsyscall. -
Updated dependencies [
766113c,712277f,f269122,430c846,7b03057,a9c94c8,107e6f0,65c11b9,e386d2f,9172efb]:- effect@3.12.8
0.75.1
Patch Changes
- Updated dependencies [
8dff1d1]:- effect@3.12.7
0.75.0
Minor Changes
Patch Changes
-
#4304
76eb7d0Thanks @tim-smart! - ensure toWebHandler context argument is a Context before using itFixes issues with next.js where they supply a different second argument to request handlers
-
#4286
eb264edThanks @thewilkybarkid! - Fix following relative locations -
Updated dependencies [
289c13b,8b4e75d,fc5e0f0,004fd2b,b2a31be,5514d05,bf5f0ae,3b19bcf,b064b3b,289c13b,f474678,ee187d0]:- effect@3.12.6
0.74.0
Minor Changes
- #4264
6cb9b76Thanks @gcanti! - Add support for symbols in theIssuedefinition withinplatform/HttpApiError.
Patch Changes
-
#4277
8653072Thanks @tim-smart! - simplify HttpApi path regex for parametersHttpApi path parameters now only support the following syntax:
:parameterNameConditional parameters are no longer supported (i.e. using
?etc after the parameter name). -
Updated dependencies [
a8b0ddb,507d546,a8b0ddb,8db239b,84a0911,84a0911,3179a9f,6cb9b76,1fcbe55,d9a63d9]:- effect@3.12.5
0.73.1
Patch Changes
-
#4250
c9e5e1bThanks @thewilkybarkid! - Add isHttpMethod refinement -
#4225
7b3d58dThanks @thewilkybarkid! - Add HttpClient.tapError -
Updated dependencies [
5b50ea4,c170a68,a66c2eb]:- effect@3.12.4
0.73.0
Minor Changes
-
#4245
c110032Thanks @gcanti! - UpdateHttpApito remove wildcard support for better OpenAPI compatibility.The
HttpApi*modules previously reused the following type fromHttpRouter:type PathInput = `/${string}` | "*"However, the
"*"wildcard value was not handled correctly, as OpenAPI does not support wildcards.This has been updated to use a more specific type:
type PathSegment = `/${string}`This change ensures better alignment with OpenAPI specifications and eliminates potential issues related to unsupported wildcard paths.
-
#4237
23ac740Thanks @gcanti! - MakeOpenApiSpecmutable to make handling it more convenient.
Patch Changes
-
#4177
8cd7319Thanks @KhraksMamtsov! -Urlmodule has been introduced:- immutable setters with dual-function api
- integration with
UrlParams
-
Updated dependencies [
d7dac48,1d7fd2b,1d7fd2b]:- effect@3.12.3
0.72.2
Patch Changes
-
#4226
212e784Thanks @gcanti! - Ensure the encoding kind of success responses is respected in the OpenAPI spec.Before
When generating an OpenAPI spec for a request with a success schema of type `HttpApiSchema.Text()“, the response content type was incorrectly set to “application/json” instead of “text/plain”.
import {HttpApi,HttpApiEndpoint,HttpApiGroup,HttpApiSchema,OpenApi} from "@effect/platform"const api = HttpApi.make("api").add(HttpApiGroup.make("group").add(HttpApiEndpoint.get("get", "/").addSuccess(HttpApiSchema.Text())))const spec = OpenApi.fromApi(api)console.log(JSON.stringify(spec.paths, null, 2))/*Output:{"/": {"get": {"tags": ["group"],"operationId": "group.get","parameters": [],"security": [],"responses": {"200": {"description": "a string","content": {"application/json": {"schema": {"type": "string"}}}},"400": {"description": "The request did not match the expected schema","content": {"application/json": {"schema": {"$ref": "#/components/schemas/HttpApiDecodeError"}}}}}}}}*/After
import {HttpApi,HttpApiEndpoint,HttpApiGroup,HttpApiSchema,OpenApi} from "@effect/platform"const api = HttpApi.make("api").add(HttpApiGroup.make("group").add(HttpApiEndpoint.get("get", "/").addSuccess(HttpApiSchema.Text())))const spec = OpenApi.fromApi(api)console.log(JSON.stringify(spec.paths, null, 2))/*Output:{"/": {"get": {"tags": ["group"],"operationId": "group.get","parameters": [],"security": [],"responses": {"200": {"description": "a string","content": {"application/json": {"text/plain": {"schema": {"type": "string"}}}},"400": {"description": "The request did not match the expected schema","content": {"application/json": {"schema": {"$ref": "#/components/schemas/HttpApiDecodeError"}}}}}}}}*/ -
#4234
f852cb0Thanks @gcanti! - Deduplicate errors inOpenApi.fromApi.When multiple identical errors were added to the same endpoint, group, or API, they were all included in the generated OpenAPI specification, leading to redundant entries in the
anyOfarray for error schemas.Identical errors are now deduplicated in the OpenAPI specification. This ensures that each error schema is included only once, simplifying the generated spec and improving readability.
Before
import {HttpApi,HttpApiEndpoint,HttpApiGroup,OpenApi} from "@effect/platform"import { Schema } from "effect"const err = Schema.String.annotations({ identifier: "err" })const api = HttpApi.make("api").add(HttpApiGroup.make("group1").add(HttpApiEndpoint.get("get1", "/1").addSuccess(Schema.String).addError(err).addError(err)).addError(err).addError(err)).addError(err).addError(err)const spec = OpenApi.fromApi(api)console.log(JSON.stringify(spec.paths, null, 2))/*Output:{"/1": {"get": {"tags": ["group1"],"operationId": "group1.get1","parameters": [],"security": [],"responses": {"200": {"description": "a string","content": {"application/json": {"schema": {"type": "string"}}}},"400": {"description": "The request did not match the expected schema","content": {"application/json": {"schema": {"$ref": "#/components/schemas/HttpApiDecodeError"}}}},"500": {"description": "a string","content": {"application/json": {"schema": "schema": {"anyOf": [{"$ref": "#/components/schemas/err"},{"$ref": "#/components/schemas/err"},{"$ref": "#/components/schemas/err"}]}}}}}}}}*/After
import {HttpApi,HttpApiEndpoint,HttpApiGroup,OpenApi} from "@effect/platform"import { Schema } from "effect"const err = Schema.String.annotations({ identifier: "err" })const api = HttpApi.make("api").add(HttpApiGroup.make("group1").add(HttpApiEndpoint.get("get1", "/1").addSuccess(Schema.String).addError(err).addError(err)).addError(err).addError(err)).addError(err).addError(err)const spec = OpenApi.fromApi(api)console.log(JSON.stringify(spec.paths, null, 2))/*Output:{"/1": {"get": {"tags": ["group1"],"operationId": "group1.get1","parameters": [],"security": [],"responses": {"200": {"description": "a string","content": {"application/json": {"schema": {"type": "string"}}}},"400": {"description": "The request did not match the expected schema","content": {"application/json": {"schema": {"$ref": "#/components/schemas/HttpApiDecodeError"}}}},"500": {"description": "a string","content": {"application/json": {"schema": {"$ref": "#/components/schemas/err"}}}}}}}}*/ -
#4233
7276ae2Thanks @gcanti! - Ensure the encoding kind of error responses is respected in the OpenAPI spec.Before
When generating an OpenAPI spec for a request with an error schema of type `HttpApiSchema.Text()“, the response content type was incorrectly set to “application/json” instead of “text/plain”.
import {HttpApi,HttpApiEndpoint,HttpApiGroup,HttpApiSchema,OpenApi} from "@effect/platform"const api = HttpApi.make("api").add(HttpApiGroup.make("group").add(HttpApiEndpoint.get("get", "/").addError(HttpApiSchema.Text())))const spec = OpenApi.fromApi(api)console.log(JSON.stringify(spec.paths, null, 2))/*Output:{"/": {"get": {"tags": ["group"],"operationId": "group.get","parameters": [],"security": [],"responses": {"204": {"description": "Success"},"400": {"description": "The request did not match the expected schema","content": {"application/json": {"schema": {"$ref": "#/components/schemas/HttpApiDecodeError"}}}},"500": {"description": "a string","content": {"application/json": {"schema": {"type": "string"}}}}}}}}*/After
import { HttpApi, HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "@effect/platform"const api = HttpApi.make("api").add(HttpApiGroup.make("group").add(HttpApiEndpoint.get("get", "/").addError(HttpApiSchema.Text())))const spec = OpenApi.fromApi(api)console.log(JSON.stringify(spec.paths, null, 2))/*Output:{"/": {"get": {"tags": ["group"],"operationId": "group.get","parameters": [],"security": [],"responses": {"204": {"description": "Success"},"400": {"description": "The request did not match the expected schema","content": {"application/json": {"schema": {"$ref": "#/components/schemas/HttpApiDecodeError"}}}},"500": {"description": "a string","content": {"text/plain": {"application/json": {"schema": {"type": "string"}}}}}}}}*/ -
#4226
212e784Thanks @gcanti! - Add missingdeprecatedkey toOpenApi.annotationsAPI. -
#4226
212e784Thanks @gcanti! - Fix: Prevent request body from being added to the OpenAPI spec for GET methods inOpenApi.fromApi.When creating a
GETendpoint with a request payload, therequestBodywas incorrectly added to the OpenAPI specification, which is invalid forGETmethods.Before
import {HttpApi,HttpApiEndpoint,HttpApiGroup,OpenApi} from "@effect/platform"import { Schema } from "effect"const api = HttpApi.make("api").add(HttpApiGroup.make("group").add(HttpApiEndpoint.get("get", "/").addSuccess(Schema.String).setPayload(Schema.Struct({a: Schema.String}))))const spec = OpenApi.fromApi(api)console.log(JSON.stringify(spec.paths, null, 2))/*Output:{"/": {"get": {"tags": ["group"],"operationId": "group.get","parameters": [{"name": "a","in": "query","schema": {"type": "string"},"required": true}],"security": [],"responses": {"200": {"description": "a string","content": {"application/json": {"schema": {"type": "string"}}}},"400": {"description": "The request did not match the expected schema","content": {"application/json": {"schema": {"$ref": "#/components/schemas/HttpApiDecodeError"}}}}},"requestBody": {"content": {"application/json": {"schema": {"type": "object","required": ["a"],"properties": {"a": {"type": "string"}},"additionalProperties": false}}},"required": true}}}}*/After
import {HttpApi,HttpApiEndpoint,HttpApiGroup,OpenApi} from "@effect/platform"import { Schema } from "effect"const api = HttpApi.make("api").add(HttpApiGroup.make("group").add(HttpApiEndpoint.get("get", "/").addSuccess(Schema.String).setPayload(Schema.Struct({a: Schema.String}))))const spec = OpenApi.fromApi(api)console.log(JSON.stringify(spec.paths, null, 2))/*Output:{"/": {"get": {"tags": ["group"],"operationId": "group.get","parameters": [{"name": "a","in": "query","schema": {"type": "string"},"required": true}],"security": [],"responses": {"200": {"description": "a string","content": {"application/json": {"schema": {"type": "string"}}}},"400": {"description": "The request did not match the expected schema","content": {"application/json": {"schema": {"$ref": "#/components/schemas/HttpApiDecodeError"}}}}}}}}*/ -
#4226
212e784Thanks @gcanti! - Add"application/x-www-form-urlencoded"toOpenApiSpecContentTypetype as it is generated by the system when usingHttpApiSchema.withEncoding({ kind: "UrlParams" })Example
import {HttpApi,HttpApiEndpoint,HttpApiGroup,HttpApiSchema,OpenApi} from "@effect/platform"import { Schema } from "effect"const api = HttpApi.make("api").add(HttpApiGroup.make("group").add(HttpApiEndpoint.post("post", "/").addSuccess(Schema.String).setPayload(Schema.Struct({ foo: Schema.String }).pipe(HttpApiSchema.withEncoding({ kind: "UrlParams" })))))const spec = OpenApi.fromApi(api)console.log(JSON.stringify(spec.paths, null, 2))/*Output:{"/": {"post": {"tags": ["group"],"operationId": "group.post","parameters": [],"security": [],"responses": {"200": {"description": "a string","content": {"application/json": {"schema": {"type": "string"}}}},"400": {"description": "The request did not match the expected schema","content": {"application/json": {"schema": {"$ref": "#/components/schemas/HttpApiDecodeError"}}}}},"requestBody": {"content": {"application/x-www-form-urlencoded": {"schema": {"type": "object","required": ["foo"],"properties": {"foo": {"type": "string"}},"additionalProperties": false}}},"required": true}}}}*/ -
Updated dependencies [
734af82,b63c780,c640d77,0def088]:- effect@3.12.2
0.72.1
Patch Changes
0.72.0
Minor Changes
-
#4068
ef64c6fThanks @tim-smart! - remove generics from HttpClient tag serviceInstead you can now use
HttpClient.With<E, R>to specify the error and requirement types.
Patch Changes
- Updated dependencies [
abb22a4,f369a89,642376c,3d2b7a7,73f9c6f,17cb451,d801820,e1eeb2d,c11f3a6,618f7e0,c0ba834,e1eeb2d]:- effect@3.12.0
0.71.7
Patch Changes
0.71.6
Patch Changes
0.71.5
Patch Changes
-
#4154
05d71f8Thanks @thewilkybarkid! - Support URL objects in HttpServerResponse.redirect -
#4157
e66b920Thanks @tim-smart! - ensure WebSocket’s are always closed with an explicit code
0.71.4
Patch Changes
-
#4152
909181aThanks @tim-smart! - accept Headers.Input in HttpServerResponse constructors -
#4152
909181aThanks @tim-smart! - add HttpServerResponse.redirect api -
Updated dependencies [
1a6b52d]:- effect@3.11.8
0.71.3
Patch Changes
-
#4147
6984508Thanks @tim-smart! - ensure HttpApi union schemas don’t transfer non-api related annotations -
#4145
883639cThanks @tim-smart! - ensure HttpApi preserves referential equality of error schemas
0.71.2
Patch Changes
-
#4138
cec0b4dThanks @gcanti! - JSONSchema: handle thenullablekeyword for OpenAPI target, closes #4075.Before
import { OpenApiJsonSchema } from "@effect/platform"import { Schema } from "effect"const schema = Schema.NullOr(Schema.String)console.log(JSON.stringify(OpenApiJsonSchema.make(schema), null, 2))/*{"anyOf": [{"type": "string"},{"enum": [null]}]}*/After
import { OpenApiJsonSchema } from "@effect/platform"import { Schema } from "effect"const schema = Schema.NullOr(Schema.String)console.log(JSON.stringify(OpenApiJsonSchema.make(schema), null, 2))/*{"type": "string","nullable": true}*/ -
#4128
8d978c5Thanks @gcanti! - JSONSchema: addtypefor homogeneous enum schemas, closes #4127Before
import { JSONSchema, Schema } from "effect"const schema = Schema.Literal("a", "b")console.log(JSON.stringify(JSONSchema.make(schema), null, 2))/*{"$schema": "http://json-schema.org/draft-07/schema#","enum": ["a","b"]}*/After
import { JSONSchema, Schema } from "effect"const schema = Schema.Literal("a", "b")console.log(JSON.stringify(JSONSchema.make(schema), null, 2))/*{"$schema": "http://json-schema.org/draft-07/schema#","type": "string","enum": ["a","b"]}*/ -
#4138
cec0b4dThanks @gcanti! - JSONSchema: use{ "type": "null" }to represent thenullliteralBefore
import { JSONSchema, Schema } from "effect"const schema = Schema.NullOr(Schema.String)console.log(JSON.stringify(JSONSchema.make(schema), null, 2))/*{"$schema": "http://json-schema.org/draft-07/schema#","anyOf": [{"type": "string"},{"enum": [null]}]}*/After
import { JSONSchema, Schema } from "effect"const schema = Schema.NullOr(Schema.String)console.log(JSON.stringify(JSONSchema.make(schema), null, 2))/*{"$schema": "http://json-schema.org/draft-07/schema#","anyOf": [{"type": "string"},{"type": "null"}]}*/ -
Updated dependencies [
2408616,cec0b4d,cec0b4d,8d978c5,cec0b4d,cec0b4d]:- effect@3.11.7
0.71.1
Patch Changes
-
#4132
1d3df5bThanks @tim-smart! - allow passing Context to HttpApp web handlersThis allows you to pass request-scoped data to your handlers.
import { Context, Effect } from "effect"import { HttpApp, HttpServerResponse } from "@effect/platform"class Env extends Context.Reference<Env>()("Env", {defaultValue: () => ({ foo: "bar" })}) {}const handler = HttpApp.toWebHandler(Effect.gen(function* () {const env = yield* Envreturn yield* HttpServerResponse.json(env)}))const response = await handler(new Request("http://localhost:3000/"),Env.context({ foo: "baz" }))assert.deepStrictEqual(await response.json(), {foo: "baz"})
0.71.0
Minor Changes
-
#4129
c99a0f3Thanks @tim-smart! - replace HttpApi.empty with HttpApi.make(identifier)This ensures if you have multiple HttpApi instances, the HttpApiGroup’s are implemented correctly.
import { HttpApi } from "@effect/platform"// Beforeclass Api extends HttpApi.empty.add(...) {}// Afterclass Api extends HttpApi.make("api").add(...) {}
Patch Changes
-
#4130
11fc401Thanks @tim-smart! - add predefined empty errors to HttpApiError -
#4129
c99a0f3Thanks @tim-smart! - add OpenApi annotation for exluding parts of the api from the spec -
Updated dependencies [
662d1ce,31c62d8]:- effect@3.11.6
0.70.7
Patch Changes
-
#4111
22905cfThanks @gcanti! - JSONSchema: merge refinement fragments instead of just overwriting them.Before
import { JSONSchema, Schema } from "effect"export const schema = Schema.String.pipe(Schema.startsWith("a"), // <= overwritten!Schema.endsWith("c"))console.log(JSON.stringify(JSONSchema.make(schema), null, 2))/*{"$schema": "http://json-schema.org/draft-07/schema#","type": "string","description": "a string ending with \"c\"","pattern": "^.*c$" // <= overwritten!}*/After
import { JSONSchema, Schema } from "effect"export const schema = Schema.String.pipe(Schema.startsWith("a"), // <= preserved!Schema.endsWith("c"))console.log(JSON.stringify(JSONSchema.make(schema), null, 2))/*{"type": "string","description": "a string ending with \"c\"","pattern": "^.*c$","allOf": [{"pattern": "^a" // <= preserved!}],"$schema": "http://json-schema.org/draft-07/schema#"}*/ -
#4019
9f5a6f7Thanks @gcanti! - OpenApiJsonSchema: Use the experimentalJSONSchema.fromASTAPI for implementation. -
Updated dependencies [
9f5a6f7,22905cf,9f5a6f7,1e59e4f,8d914e5,03bb00f,9f5a6f7,14e1149,9f5a6f7,9f5a6f7]:- effect@3.11.5
0.70.6
Patch Changes
0.70.5
Patch Changes
-
#4091
415f4c9Thanks @ryskajakub! - http api param inherits description from schema -
#4087
518b258Thanks @tim-smart! - remove Socket write indirection -
Updated dependencies [
518b258,6e323a3,6e323a3]:- effect@3.11.4
0.70.4
Patch Changes
0.70.3
Patch Changes
-
#4065
7044730Thanks @KhraksMamtsov! - Ensure the uniqueness of the parameters at the type levelimport { HttpApiEndpoint, HttpApiSchema } from "@effect/platform"import { Schema } from "effect"HttpApiEndpoint.get("test")`/${HttpApiSchema.param("id", Schema.NumberFromString)}/${// @ts-expect-error: Argument of type 'Param<"id", typeof NumberFromString>' is not assignable to parameter of type '"Duplicate param :id"'HttpApiSchema.param("id", Schema.NumberFromString)}`
0.70.2
Patch Changes
-
#4064
c2249eaThanks @tim-smart! - HttpApi OpenApi adjustments- Allow using transform annotation on endpoints & groups
- Preserve descriptions for “empty” schemas
-
#4055
1358aa5Thanks @thewilkybarkid! - Allow creating a route for all methods -
#4062
1de3fe7Thanks @tim-smart! - simplify HttpApiClient param regex -
Updated dependencies [
01cee56]:- effect@3.11.2
0.70.1
Patch Changes
0.70.0
Minor Changes
Patch Changes
-
#3835
5eff3f6Thanks @tim-smart! - fix multipart support for bun http server -
#3835
b4ce4eaThanks @SandroMaglione! - New methodsextractAllandextractSchematoUrlParams(addedSchema.BooleanFromString). -
#3835
1e2747cThanks @KhraksMamtsov! - - JSONSchema module- add
format?: stringoptional field toJsonSchema7Stringinterface - Schema module
- add custom json schema annotation to
UUIDschema includingformat: "uuid"
- add custom json schema annotation to
- OpenApiJsonSchema module
- add
format?: stringoptional field toStringandNumericinterfaces
- add
- add
-
Updated dependencies [
147434b,6e69493,147434b,5eff3f6,d9fe79b,251d189,5a259f3,b4ce4ea,15fcc5a,9bc9a47,aadb8a4,1e2747c,9264162,e0b9b09,c36f3b9,aadb8a4]:- effect@3.11.0
0.69.32
Patch Changes
0.69.31
Patch Changes
- #4035
e6d4a37Thanks @tim-smart! - add template literal api for defining HttpApiEndpoint path schema
0.69.30
Patch Changes
0.69.29
Patch Changes
0.69.28
Patch Changes
-
#4017
edd72beThanks @tim-smart! - try encode defects that match an Error schema in HttpApi -
#4014
a3e2771Thanks @tim-smart! - consider TimeoutException a transient error in HttpClient.retryTransient -
#4007
944025bThanks @gcanti! - Wrap JSDoc @example tags with a TypeScript fence, closes #4002 -
#4016
a9e00e4Thanks @tim-smart! - allow using HttpApiSchema.Multipart in a union -
Updated dependencies [
944025b,54addee]:- effect@3.10.19
0.69.27
Patch Changes
-
#4005
beaccaeThanks @tim-smart! - fix HttpApiBuilder.middleware when used multiple times -
Updated dependencies [
af409cf]:- effect@3.10.18
0.69.26
Patch Changes
- #3977
c963886Thanks @KhraksMamtsov! -HttpApiClient.group&HttpApiClient.endpointhave been added This makes it possible to createHttpApiClientfor some part of theHttpApiThis eliminates the need to provide all the dependencies for the entireHttpApi- but only those necessary for its specific part to work - Updated dependencies [
42c4ce6]:- effect@3.10.17
0.69.25
Patch Changes
-
#3968
320557aThanks @KhraksMamtsov! -OpenApi.Transformannotation has been addedThis customization point allows you to transform the generated specification in an arbitrary way
class Api extends HttpApi.empty.annotateContext(OpenApi.annotations({title: "API",summary: "test api summary",transform: (openApiSpec) => ({...openApiSpec,tags: [...openApiSpec.tags ?? [], {name: "Tag from OpenApi.Transform annotation"}]})})) -
#3962
7b93dd6Thanks @KhraksMamtsov! - fix HttpApiGroup.addError signature -
Updated dependencies [
4dca30c,1d99867,6dae414,6b0d737,d8356aa]:- effect@3.10.16
0.69.24
Patch Changes
-
#3939
3cc6514Thanks @KhraksMamtsov! - Added the ability to annotate theHttpApiwith additional schemas Which will be taken into account when generatingcomponents.schemassection ofOpenApischemaimport { Schema } from "effect"import { HttpApi } from "@effect/platform"HttpApi.empty.annotate(HttpApi.AdditionalSchemas, [Schema.Struct({contentType: Schema.String,length: Schema.Int}).annotations({identifier: "ComponentsSchema"})])/**{"openapi": "3.0.3",..."components": {"schemas": {"ComponentsSchema": {...},...},...}*/
0.69.23
Patch Changes
- #3944
3aff4d3Thanks @KhraksMamtsov! -OpenApi.Summary&OpenApi.Deprecatedannotations have been added
0.69.22
Patch Changes
0.69.21
Patch Changes
0.69.20
Patch Changes
- Updated dependencies [
995bbdf]:- effect@3.10.13
0.69.19
Patch Changes
0.69.18
Patch Changes
-
#3906
a0584ecThanks @tim-smart! - ensure Socket send queue is not ended -
#3904
dd14efeThanks @tim-smart! - improve platform/Worker shutdown and logging -
Updated dependencies [
dd14efe]:- effect@3.10.12
0.69.17
Patch Changes
-
#3898
8240b1cThanks @mattphillips! - Fixed handling of basic auth header values -
#3903
5eef499Thanks @tim-smart! - add HttpApi.addHttpApi method, for merging two HttpApi instances -
Updated dependencies [
5eef499]:- effect@3.10.11
0.69.16
Patch Changes
-
#3893
cd720aeThanks @tim-smart! - refactor Socket internal code -
#3892
7d89650Thanks @tim-smart! - simplify HttpApiClient implementation -
Updated dependencies [
cd720ae,cd720ae,b631f40]:- effect@3.10.10
0.69.15
Patch Changes
0.69.14
Patch Changes
-
#3884
07c493aThanks @tim-smart! - add withResponse option to HttpApiClient methods -
#3882
257ab1bThanks @tim-smart! - simplify Socket internal code -
Updated dependencies [
a123e80,bd5fcd3,0289d3b,7386b71,4211a23]:- effect@3.10.9
0.69.13
Patch Changes
0.69.12
Patch Changes
0.69.11
Patch Changes
-
#3856
81ddd45Thanks @KhraksMamtsov! - Integration with Scalar has been implemented -
Updated dependencies [
ce1c21f]:- effect@3.10.6
0.69.10
Patch Changes
0.69.9
Patch Changes
-
#3842
2367708Thanks @gcanti! - add support forSchema.OptionFromUndefinedOrin JSON Schema generation, closes #3839Before
import { JSONSchema, Schema } from "effect"const schema = Schema.Struct({a: Schema.OptionFromUndefinedOr(Schema.Number)})console.log(JSON.stringify(JSONSchema.make(schema), null, 2))/*throws:Error: Missing annotationat path: ["a"]details: Generating a JSON Schema for this schema requires a "jsonSchema" annotationschema (UndefinedKeyword): undefined*/After
import { JSONSchema, Schema } from "effect"const schema = Schema.Struct({a: Schema.OptionFromUndefinedOr(Schema.Number)})console.log(JSON.stringify(JSONSchema.make(schema), null, 2))/*Output:{"$schema": "http://json-schema.org/draft-07/schema#","type": "object","required": [],"properties": {"a": {"type": "number"}},"additionalProperties": false}*/ -
Updated dependencies [
2367708]:- effect@3.10.4
0.69.8
Patch Changes
0.69.7
Patch Changes
-
#3836
690d6c5Thanks @tim-smart! - add HttpApiBuilder.handler, for defining a single handler -
#3831
279fe3aThanks @tim-smart! - ensure parent annotations take precedence over surrogate annotations -
Updated dependencies [
b9423d8]:- effect@3.10.3
0.69.6
Patch Changes
-
#3826
42cd72aThanks @juliusmarminge! - ensure requests & responses have headers redacted when inspecting -
Updated dependencies [
714e119,c1afd55]:- effect@3.10.2
0.69.5
Patch Changes
- Updated dependencies [
9604d6b]:- effect@3.10.1
0.69.4
Patch Changes
0.69.3
Patch Changes
-
#3814
d5fba63Thanks @tim-smart! - cache OpenApi schema generation -
#3813
1eb2c30Thanks @KhraksMamtsov! - Add support for bearer format OpenApi annotation -
#3811
02d413eThanks @KhraksMamtsov! - A bug related to the format of the security schema keys has been fixed. According to the OpenAPI specification, it must match the regular expression` ^[a-zA-Z0-9.-_]+# @effect/platform
0.69.2
Patch Changes
0.69.1
Patch Changes
-
#3802
7564f56Thanks @tim-smart! - simplify HttpApiMiddleware.TagClass type -
#3802
7564f56Thanks @tim-smart! - add HttpServer.layerContext to platform-node/bun
0.69.0
Minor Changes
-
#3764
6d9de6bThanks @tim-smart! - HttpApi second revisionHttpApi,HttpApiGroup&HttpApiEndpointnow use a chainable api instead of a pipeable api.HttpApiMiddlewaremodule has been added, with a updated way of defining security middleware.- You can now add multiple success schemas
- A url search parameter schema has been added
- Error schemas now support
HttpApiSchemaencoding apis toWebHandlerhas been simplified
For more information, see the README.
-
#3764
5821ce3Thanks @patroza! - feat: implement Redactable. Used by Headers to not log sensitive information
Patch Changes
0.68.6
Patch Changes
0.68.5
Patch Changes
0.68.4
Patch Changes
0.68.3
Patch Changes
-
#3769
8c33087Thanks @tim-smart! - add support for WebSocket protocols option -
Updated dependencies [
61a99b2]:- effect@3.9.2
- @effect/schema@0.75.4
0.68.2
Patch Changes
- Updated dependencies [
360ec14]:- @effect/schema@0.75.3
0.68.1
Patch Changes
-
#3743
b75ac5dThanks @sukovanej! - Add support forConfigProviderbased on .env files.import { PlatformConfigProvider } from "@effect/platform"import { NodeContext } from "@effect/platform-node"import { Config } from "effect"Effect.gen(function* () {const config = yield* Config.all({api_url: Config.string("API_URL"),api_key: Config.string("API_KEY")})console.log(`Api config: ${config}`)}).pipe(Effect.provide(PlatformConfigProvider.layerDotEnvAdd(".env").pipe(Layer.provide(NodeContext.layer))))
0.68.0
Minor Changes
-
#3756
90ceeabThanks @tim-smart! - remove HttpClient.Service type -
#3756
90ceeabThanks @tim-smart! - constrain HttpClient success type to HttpClientResponse -
#3756
90ceeabThanks @tim-smart! - add HttpClient accessor apisThese apis allow you to easily send requests without first accessing the
HttpClientservice.Below is an example of using the
getaccessor api to send a GET request:import { FetchHttpClient, HttpClient } from "@effect/platform"import { Effect } from "effect"const program = HttpClient.get("https://jsonplaceholder.typicode.com/posts/1").pipe(Effect.andThen((response) => response.json),Effect.scoped,Effect.provide(FetchHttpClient.layer))Effect.runPromise(program)/*Output:{userId: 1,id: 1,title: 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit',body: 'quia et suscipit\n' +'suscipit recusandae consequuntur expedita et cum\n' +'reprehenderit molestiae ut ut quas totam\n' +'nostrum rerum est autem sunt rem eveniet architecto'}*/
Patch Changes
- Updated dependencies [
f02b354]:- @effect/schema@0.75.2
0.67.1
Patch Changes
-
#3740
3b2ad1dThanks @tim-smart! - revert deno Inspectable changes -
Updated dependencies [
3b2ad1d]:- effect@3.9.1
- @effect/schema@0.75.1
0.67.0
Minor Changes
Patch Changes
- Updated dependencies [
ff3d1aa,0ba66f2,bf77f51,016f9ad,0779681,534129f,d75140c,be0451c,9237ac6,be0451c,5b36494,c716adb,4986391,d75140c,d1387ae]:- effect@3.9.0
- @effect/schema@0.75.0
0.66.3
Patch Changes
-
#3736
f40da15Thanks @tim-smart! - add HttpClientResponse.filterStatus apis -
#3732
8e94585Thanks @sukovanej! - Fix: handleBlobmessage data from a websocket. -
#3736
f40da15Thanks @tim-smart! - add HttpClient.retryTransient api -
Updated dependencies [
88e85db,83887ca,5266b6c,cdead5c,766a8af]:- effect@3.8.5
- @effect/schema@0.74.2
0.66.2
Patch Changes
-
#3667
fd83d0eThanks @gcanti! - Remove default json schema annotations from string, number and boolean.Before
import { JSONSchema, Schema } from "@effect/schema"const schema = Schema.String.annotations({ examples: ["a", "b"] })console.log(JSON.stringify(JSONSchema.make(schema), null, 2))/*{"$schema": "http://json-schema.org/draft-07/schema#","type": "string","description": "a string","title": "string","examples": ["a","b"]}*/After
import { JSONSchema, Schema } from "@effect/schema"const schema = Schema.String.annotations({ examples: ["a", "b"] })console.log(JSON.stringify(JSONSchema.make(schema), null, 2))/*{"$schema": "http://json-schema.org/draft-07/schema#","type": "string","examples": ["a","b"]}*/ -
#3672
090e41cThanks @gcanti! - JSON Schema: handle refinements where the ‘from’ part includes a transformation, closes #3662Before
import { JSONSchema, Schema } from "@effect/schema"const schema = Schema.Dateconsole.log(JSON.stringify(JSONSchema.make(schema), null, 2))/*throwsError: Missing annotationdetails: Generating a JSON Schema for this schema requires a "jsonSchema" annotationschema (Refinement): Date*/After
import { JSONSchema, Schema } from "@effect/schema"const schema = Schema.Dateconsole.log(JSON.stringify(JSONSchema.make(schema), null, 2))/*{"$schema": "http://json-schema.org/draft-07/schema#","type": "string","description": "a string that will be parsed into a Date"}*/ -
Updated dependencies [
734eae6,fd83d0e,4509656,ad7e1de,090e41c,090e41c]:- @effect/schema@0.74.1
- effect@3.8.4
0.66.1
Patch Changes
0.66.0
Patch Changes
- Updated dependencies [
de48aa5]:- @effect/schema@0.74.0
0.65.5
Patch Changes
-
#3640
321b201Thanks @tim-smart! - use HttpClientRequest.originalUrl for search params parser -
Updated dependencies [
bb5ec6b]:- effect@3.8.3
- @effect/schema@0.73.4
0.65.4
Patch Changes
- Updated dependencies [
e6440a7]:- @effect/schema@0.73.3
0.65.3
Patch Changes
- Updated dependencies [
f0d8ef1]:- effect@3.8.2
- @effect/schema@0.73.2
0.65.2
Patch Changes
0.65.1
Patch Changes
0.65.0
Minor Changes
-
#3541
7041393Thanks @tim-smart! - refactor /platform HttpClientHttpClient.fetch removed
The
HttpClient.fetchclient implementation has been removed. Instead, you can access aHttpClientusing the correspondingContext.Tag.import { FetchHttpClient, HttpClient } from "@effect/platform"import { Effect } from "effect"Effect.gen(function* () {const client = yield* HttpClient.HttpClient// make a get requestyield* client.get("https://jsonplaceholder.typicode.com/todos/1")}).pipe(Effect.scoped,// the fetch client has been moved to the `FetchHttpClient` moduleEffect.provide(FetchHttpClient.layer))HttpClientinterface now uses methodsInstead of being a function that returns the response, the
HttpClientinterface now uses methods to make requests.Some shorthand methods have been added to the
HttpClientinterface to make less complex requests easier.import {FetchHttpClient,HttpClient,HttpClientRequest} from "@effect/platform"import { Effect } from "effect"Effect.gen(function* () {const client = yield* HttpClient.HttpClient// make a get requestyield* client.get("https://jsonplaceholder.typicode.com/todos/1")// make a post requestyield* client.post("https://jsonplaceholder.typicode.com/todos")// execute a request instanceyield* client.execute(HttpClientRequest.get("https://jsonplaceholder.typicode.com/todos/1"))})Scoped
HttpClientResponsehelpers removedThe
HttpClientResponsehelpers that also supplied theScopehave been removed.Instead, you can use the
HttpClientResponsemethods directly, and explicitly add aEffect.scopedto the pipeline.import { FetchHttpClient, HttpClient } from "@effect/platform"import { Effect } from "effect"Effect.gen(function* () {const client = yield* HttpClient.HttpClientyield* client.get("https://jsonplaceholder.typicode.com/todos/1").pipe(Effect.flatMap((response) => response.json),Effect.scoped // supply the `Scope`)})Some apis have been renamed
Including the
HttpClientRequestbody apis, which is to make them more discoverable.
Patch Changes
-
#3541
812a4e8Thanks @tim-smart! - add Logger.prettyLoggerDefault, to prevent duplicate pretty loggers -
#3541
6a128f6Thanks @tim-smart! - ensure FetchHttpClient always attempts to send a request body -
#3541
adf7d7aThanks @tim-smart! - use Mailbox for Workers, Socket & Rpc -
#3541
e0d21a5Thanks @fubhy! - Added refinement overloads toHttpClient.filterOrFailandHttpClient.filterOrElse -
Updated dependencies [
fcfa6ee,bb9931b,5798f76,5f0bfa1,7fdf9d9,812a4e8,273565e,569a801,aa1fa53,02f6b06,12b893e,bbad27e,adf7d7a,007289a,42a8f99,eebfd29,040703d]:- effect@3.8.0
- @effect/schema@0.73.0
0.64.1
Patch Changes
-
#3582
8261c5aThanks @gcanti! - add missingencodingargument toCommand.streamLines -
Updated dependencies [
35a0f81]:- effect@3.7.3
- @effect/schema@0.72.4
0.64.0
Minor Changes
Patch Changes
-
#3565
90ac8f6Thanks @tim-smart! - add HttpApiBuilder.toWebHandler api -
#3567
3791e24Thanks @tim-smart! - reduce boxing in Socket.toChannel implementation -
#3567
3791e24Thanks @tim-smart! - add Socket.toChannelString api -
Updated dependencies [
f6acb71]:- @effect/schema@0.72.3
0.63.3
Patch Changes
0.63.2
Patch Changes
0.63.1
Patch Changes
0.63.0
Patch Changes
-
#3410
6bf28f7Thanks @tim-smart! - add HttpApi modulesThe
HttpApifamily of modules provide a declarative way to define HTTP APIs.For more infomation see the README.md for the /platform package:
https://github.com/Effect-TS/effect/blob/main/packages/platform/README.md -
Updated dependencies [
db89601,2f456cc,8745e41,e557838,d6e7e40,8356321,192f2eb,718cb70,e9d0310,6bf28f7]:- effect@3.7.0
- @effect/schema@0.72.0
0.62.5
Patch Changes
- Updated dependencies [
e809286]:- effect@3.6.8
- @effect/schema@0.71.4
0.62.4
Patch Changes
-
#3506
e7a65e3Thanks @tim-smart! - use Logger.pretty for runMain, and support dual usage -
Updated dependencies [
50ec889]:- effect@3.6.7
- @effect/schema@0.71.3
0.62.3
Patch Changes
0.62.2
Patch Changes
-
#3494
413994cThanks @tim-smart! - add binary support to KeyValueStore -
Updated dependencies [
14a47a8,0c09841]:- effect@3.6.5
- @effect/schema@0.71.1
0.62.1
Patch Changes
- #3469
9efe0e5Thanks @tim-smart! - respond with 404 for NoSuchElementException in HttpServerRespondable
0.62.0
Patch Changes
-
#3454
5dcb401Thanks @tim-smart! - add HttpRouter.currentRouterConfig fiber ref -
Updated dependencies [
c1987e2,8295281,c940df6,00b6c6d,1ceed14,f8d95a6,0e42a8f]:- @effect/schema@0.71.0
- effect@3.6.4
0.61.8
Patch Changes
- Updated dependencies [
04adcac]:- effect@3.6.3
- @effect/schema@0.70.4
0.61.7
Patch Changes
-
#3437
17245a4Thanks @tim-smart! - add Cookies.get/getValue apis -
#3439
630d40eThanks @sukovanej! - AddHttpRouter.concatAll. -
#3439
630d40eThanks @sukovanej! - FixHttpRouter.concat- add mounts from both routers.
0.61.6
Patch Changes
-
#3436
d829b57Thanks @tim-smart! - remove host from HttpServerRequest url’s -
Updated dependencies [
99ad841,fd4b2f6]:- @effect/schema@0.70.3
- effect@3.6.2
0.61.5
Patch Changes
0.61.4
Patch Changes
0.61.3
Patch Changes
-
#3408
fb9f786Thanks @tim-smart! - ensure failure in HttpMiddleware results in a response -
Updated dependencies [
510a34d,45dbb9f]:- effect@3.6.1
- @effect/schema@0.70.2
0.61.2
Patch Changes
0.61.1
Patch Changes
0.61.0
Patch Changes
-
#3380
7d02174Thanks @fubhy! - Changed various function signatures to returnArrayinstead ofReadonlyArray -
Updated dependencies [
1e0fe80,8135294,cd255a4,3845646,2d09078,4bce5a0,4ddbff0,e74cc38,bb069b4,cd255a4,7d02174]:- effect@3.6.0
- @effect/schema@0.70.0
0.60.3
Patch Changes
- Updated dependencies [
7c0da50,2fc0ff4,6359644,f262665,7f41e42,9bbe7a6,f566fd1]:- @effect/schema@0.69.3
- effect@3.5.9
0.60.2
Patch Changes
-
#3339
eb4d014Thanks @fubhy! - Fixed various search params related function signatures (Array => ReadonlyArray) -
#3353
fc20f73Thanks @tim-smart! - wait for worker ready latch before sending initial message -
Updated dependencies [
1ba640c,c8c71bd,a26ce58]:- effect@3.5.8
- @effect/schema@0.69.2
0.60.1
Patch Changes
- Updated dependencies [
f241154]:- @effect/schema@0.69.1
0.60.0
Patch Changes
- Updated dependencies [
20807a4]:- @effect/schema@0.69.0
0.59.3
Patch Changes
-
#3310
99bddcfThanks @fubhy! - Added additional pure annotations to improve tree-shakeability -
Updated dependencies [
3afcc93,99bddcf,6921c4f]:- effect@3.5.7
- @effect/schema@0.68.27
0.59.2
Patch Changes
- Updated dependencies [
f0285d3,8ec4955,3ac2d76,cc327a1,4bfe4fb,2b14d18]:- @effect/schema@0.68.26
- effect@3.5.6
0.59.1
Patch Changes
-
#3278
fcecff7Thanks @tim-smart! - ensure /platform HttpApp.toWebHandler runs Stream’s with the current runtimeAlso add runtime options to HttpServerResponse.toWeb
-
#3281
adbf753Thanks @tim-smart! - drop path-browserify dependency -
#3281
adbf753Thanks @tim-smart! - drop fast-querystring dependency -
Updated dependencies [
a9d7800]:- effect@3.5.5
- @effect/schema@0.68.25
0.59.0
Minor Changes
-
#3260
53c0db0Thanks @tim-smart! - replace /platform RefailError with use of the “cause” property -
#3255
ada68b3Thanks @tim-smart! - refactor & simplify /platform backing workersImproves worker performance by 2x
Patch Changes
- Updated dependencies [
ed0dde4,ca775ce,5be9cc0,203658f,eb1c4d4]:- effect@3.5.4
- @effect/schema@0.68.24
0.58.27
Patch Changes
-
#3241
a1db40aThanks @tim-smart! - ensure interrupts are handled in WorkerRunner -
Updated dependencies [
edb0da3,edb0da3,c8d3fb0,dabd028,786b2ab,fc57354]:- effect@3.5.3
- @effect/schema@0.68.23
0.58.26
Patch Changes
0.58.25
Patch Changes
0.58.24
Patch Changes
- Updated dependencies [
55fdd76]:- effect@3.5.1
- @effect/schema@0.68.21
0.58.23
Patch Changes
- Updated dependencies [
a1f5b83,a1f5b83,a1f5b83,60bc3d0,5ab348f,60bc3d0,3e04bf8,e7fc45f,a1f5b83,4626de5,f01e7db,60bc3d0,79d2d91,ac71f37,8432360,e4bf1bf,13cb861,79d2d91,e7fc45f,9f66825]:- effect@3.5.0
- @effect/schema@0.68.20
0.58.22
Patch Changes
-
#3209
366f2eeThanks @tim-smart! - simplify /platform http response handling -
#3209
366f2eeThanks @tim-smart! - support middleware in HttpApp web handler apis -
Updated dependencies [
7af137c,ee4b3dc,097d25c]:- effect@3.4.9
- @effect/schema@0.68.19
0.58.21
Patch Changes
- Updated dependencies [
5d5cc6c,a435e0f,b5554db,359ff8a,a9c4fb3,f7534b9]:- @effect/schema@0.68.18
- effect@3.4.8
0.58.20
Patch Changes
0.58.19
Patch Changes
0.58.18
Patch Changes
0.58.17
Patch Changes
- Updated dependencies [
5c0ceb0,5c0ceb0,34faeb6,33735b1,5c0ceb0,139d4b3]:- effect@3.4.6
- @effect/schema@0.68.15
0.58.16
Patch Changes
- Updated dependencies [
61e5964]:- @effect/schema@0.68.14
0.58.15
Patch Changes
-
#3123
baa90dfThanks @tim-smart! - add HttpClient.followRedirects api -
Updated dependencies [
cb76bcb]:- @effect/schema@0.68.13
0.58.14
Patch Changes
-
#3104
52a87c7Thanks @tim-smart! - remove the stack from HttpServerError.RouteNotFound -
#3109
6d2280eThanks @tim-smart! - fix assignability of HttpMiddleware in HttpRouter.use
0.58.13
Patch Changes
-
#3102
dbd53eaThanks @tim-smart! - filter undefined from UrlParams Input -
Updated dependencies [
a047af9,d990544]:- effect@3.4.5
- @effect/schema@0.68.12
0.58.12
Patch Changes
-
#3094
74e0ad2Thanks @tim-smart! - add mount apis to HttpRouter.Service -
#3094
74e0ad2Thanks @tim-smart! - add HttpRouter.DefaultServices to all HttpRouter.Tag’s -
Updated dependencies [
72638e3,d7dde2b,9b2fc3b,d71c192]:- effect@3.4.4
- @effect/schema@0.68.11
0.58.11
Patch Changes
-
#3091
a5b95b5Thanks @tim-smart! - add some common services to HttpRouter.Default -
#3090
5e29579Thanks @tim-smart! - add HttpServerRequest.toURL apiTo try retreive the full URL for the request.
0.58.10
Patch Changes
-
#3088
a48ee84Thanks @tim-smart! - add HttpServerRespondable traitThis trait allows you to define how a value should be responded to in an HTTP server.
You can it for both errors and success values.
import { Schema } from "@effect/schema"import {HttpRouter,HttpServerRespondable,HttpServerResponse} from "@effect/platform"class User extends Schema.Class<User>("User")({name: Schema.String}) {[HttpServerRespondable.symbol]() {return HttpServerResponse.schemaJson(User)(this)}}class MyError extends Schema.TaggedError<MyError>()("MyError", {message: Schema.String}) {[HttpServerRespondable.symbol]() {return HttpServerResponse.schemaJson(MyError)(this, { status: 403 })}}HttpRouter.empty.pipe(// responds with `{ "name": "test" }`HttpRouter.get("/user", Effect.succeed(new User({ name: "test" }))),// responds with a 403 status, and `{ "_tag": "MyError", "message": "boom" }`HttpRouter.get("/fail", new MyError({ message: "boom" }))) -
#3088
a48ee84Thanks @tim-smart! - swap type parameters for HttpRouter.Tag, so request context comes first -
#3088
a48ee84Thanks @tim-smart! - add HttpRouter.Default, a default instance of HttpRouter.Tag -
#3089
ab3180fThanks @tim-smart! - add HttpClientResponse.matchStatus* apisWhich allows you to pattern match on the status code of a response.
HttpClientRequest.get("/todos/1").pipe(HttpClient.fetch,HttpClientResponse.matchStatusScoped({"2xx": (_response) => Effect.succeed("ok"),404: (_response) => Effect.fail("not found"),orElse: (_response) => Effect.fail("boom")})) -
Updated dependencies [
c342739,8898e5e,ff78636,c86bd4e,bbdd365,bbdd365]:- effect@3.4.3
- @effect/schema@0.68.10
0.58.9
Patch Changes
- Updated dependencies [
0b47fdf]:- @effect/schema@0.68.9
0.58.8
Patch Changes
0.58.7
Patch Changes
0.58.6
Patch Changes
-
#3059
2e8e252Thanks @tim-smart! - add Layer based api for creating HttpRouter’simport {HttpMiddleware,HttpRouter,HttpServer,HttpServerResponse} from "@effect/platform"import { BunHttpServer, BunRuntime } from "@effect/platform-bun"import { Effect, Layer } from "effect"// create your router Context.Tagclass UserRouter extends HttpRouter.Tag("UserRouter")<UserRouter>() {}// create routes with the `.use` api.// There is also `.useScoped`const GetUsers = UserRouter.use((router) =>Effect.gen(function* () {yield* router.get("/", HttpServerResponse.text("got users"))}))const CreateUser = UserRouter.use((router) =>Effect.gen(function* () {yield* router.post("/", HttpServerResponse.text("created user"))}))const AllRoutes = Layer.mergeAll(GetUsers, CreateUser)const ServerLive = BunHttpServer.layer({ port: 3000 })// access the router with the `.router` api, to create your serverconst HttpLive = Layer.unwrapEffect(Effect.gen(function* () {return HttpServer.serve(yield* UserRouter.router, HttpMiddleware.logger)})).pipe(Layer.provide(UserRouter.Live),Layer.provide(AllRoutes),Layer.provide(ServerLive))BunRuntime.runMain(Layer.launch(HttpLive)) -
Updated dependencies [
66a1910]:- effect@3.4.1
- @effect/schema@0.68.7
0.58.5
Patch Changes
0.58.4
Patch Changes
0.58.3
Patch Changes
- Updated dependencies [
530fa9e]:- @effect/schema@0.68.6
0.58.2
Patch Changes
- Updated dependencies [
1d62815]:- @effect/schema@0.68.5
0.58.1
Patch Changes
0.58.0
Minor Changes
-
#2938
63dd0c3Thanks @tim-smart! - restructure platform http to use flattened modulesInstead of using the previous re-exports, you now use the modules directly.
Before:
import { HttpClient } from "@effect/platform"HttpClient.request.get("/").pipe(HttpClient.client.fetchOk)After:
import { HttpClient, HttpClientRequest } from "@effect/platform"HttpClientRequest.get("/").pipe(HttpClient.fetchOk)
Patch Changes
- Updated dependencies [
c0ce180,61707b6,9c1b5b3,a35faf8,ff73c0c,984d516,8c3b8a2,017e2f9,91bf8a2,c6a4a26]:- effect@3.4.0
- @effect/schema@0.68.4
0.57.8
Patch Changes
0.57.7
Patch Changes
- Updated dependencies [
d473800]:- @effect/schema@0.68.3
0.57.6
Patch Changes
- Updated dependencies [
eb341b3]:- @effect/schema@0.68.2
0.57.5
Patch Changes
0.57.4
Patch Changes
0.57.3
Patch Changes
0.57.2
Patch Changes
0.57.1
Patch Changes
-
#2988
07e12ecThanks @tim-smart! - refactor Socket to use do notation -
Updated dependencies [
2ee4f2b,3572646,1aed347,df4bf4b,f085f92,9b3b4ac]:- @effect/schema@0.67.23
- effect@3.3.2
0.57.0
Minor Changes
Patch Changes
- Updated dependencies [
eb98c5b,184fed8,6068e07,3a77e20,d79ca17]:- effect@3.3.1
- @effect/schema@0.67.22
0.56.0
Minor Changes
-
#2837
2b9ddfcThanks @tim-smart! - support new Pool options in /platform WorkerPool -
#2837
188f0a5Thanks @tim-smart! - parse URL instances when creating client requests
Patch Changes
- Updated dependencies [
1f4ac00,9305b76,0f40d98,b761ef0,b53f69b,0f40d98,5bd549e,67f160a,67f160a]:- effect@3.3.0
- @effect/schema@0.67.21
0.55.7
Patch Changes
-
#2931
a67d602Thanks @tim-smart! - ensure pre-response handler is checked after running the user-provided http app -
Updated dependencies [
4c6bc7f]:- @effect/schema@0.67.20
0.55.6
Patch Changes
-
#2903
799aa20Thanks @rocwang! - # Make baseUrl() more defensive in @effect/platformSometimes, third party code may patch a missing global
locationto accommodate for non-browser JavaScript runtimes, e.g. Cloudflare Workers, Deno. Such patch might not yield a fully validlocation. This could breakbaseUrl(), which is called bymakeUrl().For example, the following code would log
Invalid URL: '/api/v1/users' with base 'NaN'.import { makeUrl } from "@effect/platform/Http/UrlParams"globalThis.location = { href: "" }const url = makeUrl("/api/v1/users", [])// This would log "Invalid URL: '/api/v1/users' with base 'NaN'",// because location.origin + location.pathname return NaN in baseUrl()console.log(url.left.message)Arguably, this is not an issue of Effect per se, but it’s better to be defensive and handle such cases gracefully. So this change does that by checking if
location.orignandlocation.pathnameare available before accessing them. -
Updated dependencies [
8c5d280,6ba6d26,cd7496b,3f28bf2,5817820,349a036]:- effect@3.2.9
- @effect/schema@0.67.19
0.55.5
Patch Changes
- Updated dependencies [
a0dd1c1]:- @effect/schema@0.67.18
0.55.4
Patch Changes
- Updated dependencies [
d9d22e7,3c080f7,3c080f7,7d6d875,70cda70,fb91f17]:- @effect/schema@0.67.17
- effect@3.2.8
0.55.3
Patch Changes
0.55.2
Patch Changes
-
#2737
2c2280bThanks @jessekelly881! - added KeyValueStore.layerStorage to wrap instances of theStoragetype. -
Updated dependencies [
e2740fc,cc8ac50,60fe3d5]:- @effect/schema@0.67.15
- effect@3.2.6
0.55.1
Patch Changes
- Updated dependencies [
c5846e9]:- @effect/schema@0.67.14
0.55.0
Minor Changes
- #2835
5133ca9Thanks @tim-smart! - remove pool resizing in platform workers to enable concurrent access
Patch Changes
0.54.0
Minor Changes
-
#2801
1af94dfThanks @tim-smart! - removepermitsfrom workers, to prevent issues with pool resizing -
#2801
c07e0ceThanks @gcanti! - Revise the ordering of type parameters within theSchemaStoreinterface to enhance consistency
Patch Changes
-
#2801
1af94dfThanks @tim-smart! - ensure worker pool construction errors are reported during creation -
Updated dependencies [
1af94df,f8038ca,e376641,e313a01]:- effect@3.2.4
- @effect/schema@0.67.12
0.53.14
Patch Changes
0.53.13
Patch Changes
-
#2784
c1eaef9Thanks @gcanti! - Update the definition ofHandlerto utilizeApp.Default -
Updated dependencies [
5d9266e,9f8122e,6a6f670,78ffc27]:- effect@3.2.2
- @effect/schema@0.67.10
0.53.12
Patch Changes
- Updated dependencies [
5432fff]:- @effect/schema@0.67.9
0.53.11
Patch Changes
- Updated dependencies [
c1e991d]:- effect@3.2.1
- @effect/schema@0.67.8
0.53.10
Patch Changes
-
#2778
146caddThanks @tim-smart! - Run client request stream with a current runtime. -
#2778
7135748Thanks @tim-smart! - capture stack trace for tracing spans -
Updated dependencies [
146cadd,7135748,7135748,963b4e7,64c9414,7135748,2cbb76b,870c5fa,7135748,64c9414]:- effect@3.2.0
- @effect/schema@0.67.7
0.53.9
Patch Changes
-
#2761
17fc22eThanks @KhraksMamtsov! - Add{ once: true }to all"abort"event listeners forAbortControllerto automatically remove handlers after execution -
Updated dependencies [
17da864,17fc22e,810f222,596aaea,ff0efa0]:- @effect/schema@0.67.6
- effect@3.1.6
0.53.8
Patch Changes
- Updated dependencies [
9c514de]:- @effect/schema@0.67.5
0.53.7
Patch Changes
0.53.6
Patch Changes
-
#2750
6ac4847Thanks @tim-smart! - fix memory leak in Socket’s -
Updated dependencies [
6ac4847]:- effect@3.1.5
- @effect/schema@0.67.3
0.53.5
Patch Changes
0.53.4
Patch Changes
- Updated dependencies [
e41e911]:- effect@3.1.4
- @effect/schema@0.67.1
0.53.3
Patch Changes
- Updated dependencies [
d7e4997]:- @effect/schema@0.67.0
0.53.2
Patch Changes
- Updated dependencies [
1f6dc96]:- effect@3.1.3
- @effect/schema@0.66.16
0.53.1
Patch Changes
- Updated dependencies [
121d6d9]:- @effect/schema@0.66.15
0.53.0
Minor Changes
-
#2703
d57fbbbThanks @tim-smart! - replace isows with WebSocketConstructor service in @effect/platform/SocketYou now have to provide a WebSocketConstructor implementation to the
Socket.makeWebSocketapi.import * as Socket from "@effect/platform/Socket"import * as NodeSocket from "@effect/platform-node/NodeSocket"import { Effect } from "effect"Socket.makeWebSocket("ws://localhost:8080").pipe(Effect.provide(NodeSocket.layerWebSocketConstructor) // use "ws" npm package)
0.52.3
Patch Changes
- #2698
5866c62Thanks @tim-smart! - fix http ServerResponse cookie apis
0.52.2
Patch Changes
-
#2679
2e1cdf6Thanks @tim-smart! - ensure all type ids are annotated withunique symbol -
Updated dependencies [
2e1cdf6]:- effect@3.1.2
- @effect/schema@0.66.14
0.52.1
Patch Changes
- Updated dependencies [
e5e56d1]:- effect@3.1.1
- @effect/schema@0.66.13
0.52.0
Minor Changes
-
#2669
9deab0aThanks @tim-smart! - move http search params apis to ServerRequest moduleIf you want to access the search params for a request, you can now use the
Http.request.ParsedSearchParamstag.import * as Http from "@effect/platform/HttpServer"import { Effect } from "effect"Effect.gen(function* () {const searchParams = yield* Http.request.ParsedSearchParamsconsole.log(searchParams)})The schema method has also been moved to the
ServerRequestmodule. It is now available asHttp.request.schemaSearchParams.
Patch Changes
-
#2672
7719b8aThanks @tim-smart! - allow http client trace propagation to be controlledTo disable trace propagation:
import { HttpClient as Http } from "@effect/platform"Http.request.get("https://example.com").pipe(Http.client.fetchOk, Http.client.withTracerPropagation(false))
0.51.0
Minor Changes
- #2543
0ec93cbThanks @github-actions! - * capitalised Http.multipart.FileSchema and Http.multipart.FilesSchema- exported Http.multipart.FileSchema
- added Http.multipart.SingleFileSchema
Patch Changes
-
#2543
a023f28Thanks @github-actions! - set spankindwhere applicable -
Updated dependencies [
c3c12c6,ba64ea6,b5de2d2,a1c7ab8,a023f28,1c9454d,92d56db]:- effect@3.1.0
- @effect/schema@0.66.12
0.50.8
Patch Changes
-
#2650
16039a0Thanks @tim-smart! - improve error messages for Http.client.filterStatus* -
#2648
d1d33e1Thanks @floydspace! - Fixed import path for type import. -
Updated dependencies [
557707b,f4ed306,661004f,e79cb83]:- effect@3.0.8
- @effect/schema@0.66.11
0.50.7
Patch Changes
- Updated dependencies [
18de56b]:- effect@3.0.7
- @effect/schema@0.66.10
0.50.6
Patch Changes
- Updated dependencies [
ffe4f4e,027418e,ac1898e,ffe4f4e,8206529]:- effect@3.0.6
- @effect/schema@0.66.9
0.50.5
Patch Changes
0.50.4
Patch Changes
0.50.3
Patch Changes
-
#2589
b3b51a2Thanks @tim-smart! - redact some common sensitive http headers names in traces -
Updated dependencies [
9dfc156,80271bd,e4ba97d]:- @effect/schema@0.66.6
0.50.2
Patch Changes
0.50.1
Patch Changes
- Updated dependencies [
773b8e0]:- @effect/schema@0.66.4
0.50.0
Minor Changes
- #2567
6f38dffThanks @tim-smart! - add URL & AbortSignal to Http.client.makeDefault
Patch Changes
-
#2567
6f38dffThanks @tim-smart! - add more span attributes to http traces -
#2565
a3b0e6cThanks @tim-smart! - add Http.response.void helper, for creating a http request that returns void -
Updated dependencies [
a7b4b84]:- effect@3.0.3
- @effect/schema@0.66.3
0.49.4
Patch Changes
-
Updated dependencies [
2cecdbd]:- effect@3.0.2
- @effect/schema@0.66.2
0.49.3
Patch Changes
- #2558
8d39d65Thanks @tim-smart! - add no-op FileSystem constructor for testing
0.49.2
Patch Changes
- #2556
5ef0a1aThanks @tim-smart! - fix Command stdin being closed too early
0.49.1
Patch Changes
-
#2542
87c5687Thanks @tim-smart! - allow fs.watch backend to be customizedIf you want to use the @parcel/watcher backend, you now need to provide it to your effects.
import { Layer } from "effect"import { FileSystem } from "@effect/platform"import { NodeFileSystem } from "@effect/platform-node"import * as ParcelWatcher from "@effect/platform-node/NodeFileSystem/ParcelWatcher"// create a Layer that uses the ParcelWatcher backendNodeFileSystem.layer.pipe(Layer.provide(ParcelWatcher.layer)) -
#2555
8edaccaThanks @tim-smart! - prevent use ofArrayas import name to solve bundler issues -
Updated dependencies [
3da0cfa,570e8d8,b2b5d66,8edacca]:- effect@3.0.1
- @effect/schema@0.66.1
0.49.0
Minor Changes
-
#2207
cf69f46Thanks @github-actions! - make Http.middleware.withTracerDisabledWhen a Layer apiAnd add Http.middleware.withTracerDisabledWhenEffect to operate on Effect’s.
Usage is now:
import * as Http from "@effect/platform/HttpServer"Http.router.empty.pipe(Http.router.get("/health"),Http.server.serve(),Http.middleware.withTracerDisabledWhen((request) => request.url === "/no-tracing")) -
#2207
aa4a3b5Thanks @github-actions! - Swap type parameters in /platform data typesA codemod has been released to make migration easier:
npx @effect/codemod platform-0.49 src/**/* -
#2207
6c6087aThanks @github-actions! - rename auto-scoped ClientResponse apis from *Effect to *Scoped -
#2207
5a2314bThanks @github-actions! - replace use ofunitterminology withvoidFor all the data types.
Effect.unit // => Effect.voidStream.unit // => Stream.void// etc -
#2207
6c6087aThanks @github-actions! - move fetch options to a FiberRefThis change makes adjusting options to fetch more composable. You can now do:
import { pipe } from "effect"import * as Http from "@effect/platform/HttpClient"pipe(Http.request.get("https://example.com"),Http.client.fetchOk,Http.client.withFetchOptions({ credentials: "include" }),Http.response.text) -
#2207
2fb7d9cThanks @github-actions! - Release Effect 3.0 🎉
Patch Changes
-
#2207
6460414Thanks @github-actions! - properly handle multiple ports in SharedWorker -
#2207
cf69f46Thanks @github-actions! - add Http.middleware.withTracerDisabledForUrlsAllows you to disable the http server tracer for the given urls:
import * as Http from "@effect/platform/HttpServer"Http.router.empty.pipe(Http.router.get("/health"),Http.server.serve(),Http.middleware.withTracerDisabledForUrls(["/health"])) -
#2529
78b767cThanks @fubhy! - RenamedReadonlyArrayandReadonlyRecordmodules for better discoverability. -
#2514
25d74f8Thanks @rocwang! - Fix UrlParams.makeUrl when globalThis.location is set toundefined -
Updated dependencies [
1b5f0c7,d50a652,9aeae46,9a3bd47,e542371,be9d025,78b767c,1499974,1b5f0c7,5c2b561,a18f594,1499974,2f96d93,5a2314b,271b79f,1b5f0c7,2fb7d9c,53d1c2a,e7e1bbe,10c169e,6424181]:- effect@3.0.0
- @effect/schema@0.66.0
0.48.29
Patch Changes
- #2517
b79cc59Thanks @tim-smart! - add uninterruptible option to http routes, for marking a route as uninterruptible
0.48.28
Patch Changes
-
#2515
d590094Thanks @tim-smart! - add Http.router.uninterruptible, for marking a route as uninterruptible -
Updated dependencies [
0aee906,41c8102,4c37001,776ef2b,217147e,8a69b4e,90776ec,b3acf47,8709856,232c353,0d3231a,0ca835c,8709856,c22b019,e983740,e3e0924]:- @effect/schema@0.65.0
- effect@2.4.19
0.48.27
Patch Changes
-
#2479
c6dd3c6Thanks @tim-smart! - Make the file tree provider the fallback in PlatformConfigProvider.layerFileTreeAdd -
#2486
672f137Thanks @tim-smart! - accept string as a valid Socket input -
#2486
672f137Thanks @tim-smart! - add Socket.runRaw to handle strings directly -
Updated dependencies [
42b3651]:- @effect/schema@0.64.20
0.48.26
Patch Changes
-
#2477
365a486Thanks @tim-smart! - add PlatformConfigProvider moduleIt contains a file tree provider, that can be used to read config values from a file tree.
For example, if you have a file tree like this:
config/secretnested/valueYou could do the following:
import { PlatformConfigProvider } from "@effect/platform"import { NodeContext } from "@effect/platform-node"import { Config, Effect, Layer } from "effect"const ConfigProviderLive = PlatformConfigProvider.layerFileTree({rootDirectory: `/config`}).pipe(Layer.provide(NodeContext.layer))Effect.gen(function* (_) {const secret = yield* _(Config.secret("secret"))const value = yield* _(Config.string("value"), Config.nested("nested"))}).pipe(Effect.provide(ConfigProviderLive))
0.48.25
Patch Changes
-
#2469
d209171Thanks @tim-smart! - replace isomorphic-ws with isows -
Updated dependencies [
dadc690,58f66fe,3cad21d]:- effect@2.4.18
- @effect/schema@0.64.19
0.48.24
Patch Changes
-
#2427
9c6a500Thanks @devmatteini! - add force option to FileSystem.remove -
#2463
35ad0baThanks @tim-smart! - fix exact optional properties type errors -
Updated dependencies [
8fdfda6,607b2e7,8fdfda6,8206caf,7ddd654,7ddd654,8fdfda6,f456ba2]:- effect@2.4.17
- @effect/schema@0.64.18
0.48.23
Patch Changes
-
#2445
5170ce7Thanks @vecerek! - Add support for W3C Trace Context propagation -
#2454
63a1df2Thanks @tim-smart! - add support for binary data with XHR client -
#2450
74a5daeThanks @vecerek! - Platform: auto-instrument HTTP client -
Updated dependencies [
5170ce7,62a7f23,7cc2b41,8b46fde]:- effect@2.4.16
- @effect/schema@0.64.17
0.48.22
Patch Changes
0.48.21
Patch Changes
0.48.20
Patch Changes
-
#2413
4789083Thanks @tim-smart! - make /platform ClientRequest implement EffectClientRequest now implements
Effect<ClientResponse, HttpClientError, Client.Default | Scope>This makes it easier to quickly create a request and execute it in a single line.
import * as Http from "@effect/platform/HttpClient"Http.request.get("https://jsonplaceholder.typicode.com/todos/1").pipe(Http.response.json) -
#2413
4789083Thanks @tim-smart! - prevent unhandled errors in undici http client
0.48.19
Patch Changes
- #2411
fb7285eThanks @tim-smart! - fix broken imports in /platform
0.48.18
Patch Changes
-
#2410
26435ecThanks @tim-smart! - add undici http client to @effect/platform-node -
Updated dependencies [
a76e5e1,6180c0c]:- @effect/schema@0.64.14
- effect@2.4.14
0.48.17
Patch Changes
-
#2400
47a8f1bThanks @tim-smart! - expose Schema ParseOptions in /platform schema apis -
#2403
8c9abe2Thanks @tim-smart! - use ReadonlyRecord for storing cookies -
#2403
8c9abe2Thanks @tim-smart! - add set-cookie headers in Http.response.toWeb -
#2400
47a8f1bThanks @tim-smart! - add .schemaJson / .schemaNoBody to http router apis -
Updated dependencies [
3336287,54b7c00,3336287]:- effect@2.4.13
- @effect/schema@0.64.13
0.48.16
Patch Changes
-
#2387
75a8d16Thanks @tim-smart! - add Cookies module to /platform httpTo add cookies to a http response:
import * as Http from "@effect/platform/HttpServer"Http.response.empty().pipe(Http.response.setCookies([["name", "value"],["foo", "bar", { httpOnly: true }]]))You can also use cookies with the http client:
import * as Http from "@effect/platform/HttpClient"import { Effect, Ref } from "effect"Effect.gen(function* (_) {const ref = yield* _(Ref.make(Http.cookies.empty))const defaultClient = yield* _(Http.client.Client)const clientWithCookies = defaultClient.pipe(Http.client.withCookiesRef(ref),Http.client.filterStatusOk)// cookies will be stored in the ref and sent in any subsequent requestsyield* _(Http.request.get("https://www.google.com/"),clientWithCookies,Effect.scoped)}) -
#2385
3307729Thanks @tim-smart! - update typescript to 5.4 -
Updated dependencies [
9392de6,3307729,9392de6,3307729,d17a427]:- @effect/schema@0.64.12
- effect@2.4.12
0.48.15
Patch Changes
0.48.14
Patch Changes
0.48.13
Patch Changes
0.48.12
Patch Changes
- Updated dependencies [
e0af20e]:- @effect/schema@0.64.8
0.48.11
Patch Changes
- #2360
0f6c7b4Thanks @tim-smart! - add support for watching single files
0.48.10
Patch Changes
-
#2357
71fd528Thanks @tim-smart! - make more data types in /platform implement Inspectable -
Updated dependencies [
71fd528]:- effect@2.4.9
- @effect/schema@0.64.7
0.48.9
Patch Changes
- Updated dependencies [
595140a,5f5fcd9,bb0b69e,7a45ad0,5c3b1cc,6f7dfc9,88b8583,cb20824,6b20bad,4e64e9b,3851a02,5f5fcd9,814e5b8,a45a525]:- @effect/schema@0.64.6
- effect@2.4.8
0.48.8
Patch Changes
-
#2334
69d27bbThanks @tim-smart! - add .watch method to /platform FileSystemIt can be used to listen for file system events. Example:
import { FileSystem } from "@effect/platform"import { NodeFileSystem, NodeRuntime } from "@effect/platform-node"import { Console, Effect, Stream } from "effect"Effect.gen(function* (_) {const fs = yield* _(FileSystem.FileSystem)yield* _(fs.watch("./"), Stream.runForEach(Console.log))}).pipe(Effect.provide(NodeFileSystem.layer), NodeRuntime.runMain) -
Updated dependencies [
d0f56c6]:- @effect/schema@0.64.5
0.48.7
Patch Changes
- #2330
f908948Thanks @tim-smart! - use Deferred.unsafeDone for websocket onclose + onerror
0.48.6
Patch Changes
- Updated dependencies [
eb93283]:- effect@2.4.7
- @effect/schema@0.64.4
0.48.5
Patch Changes
- #2325
e006e4aThanks @tim-smart! - ensure Socket fibers are interruptible
0.48.4
Patch Changes
- Updated dependencies [
cfef6ec]:- @effect/schema@0.64.3
0.48.3
Patch Changes
-
#2314
c362e06Thanks @tim-smart! - prevent unhandled fiber errors in Sockets -
#2262
83ddd6fThanks @thewilkybarkid! - Don’t log an empty message when responding to a request
0.48.2
Patch Changes
-
#2290
4f35a7eThanks @mikearnaldi! - Remove function renaming from internals, introduce new cutpoint strategy -
Updated dependencies [
89748c9,4f35a7e,9971186]:- @effect/schema@0.64.2
- effect@2.4.6
0.48.1
Patch Changes
- Updated dependencies [
d10f876,743ae6d,a75bc48,bce21c5,c7d3036]:- @effect/schema@0.64.1
- effect@2.4.5
0.48.0
Minor Changes
-
#2287
a1f44cbThanks @tim-smart! - add option to /platform runMain to disable error reporting -
#2279
bdff193Thanks @gcanti! - -src/Worker.ts- use
CauseEncodedinWorkernamespace src/WorkerError.ts- use
CauseEncodedinCause
- use
- use
Patch Changes
-
#2284
1cb7f9cThanks @tim-smart! - use Schema.declare for http multipart PersistedFile schema -
#2283
509be1aThanks @tim-smart! - add SocketCloseError with additional metadata -
#2284
1cb7f9cThanks @tim-smart! - add more http multipart data type refinements -
#2281
e7ca973Thanks @tim-smart! - add OpenTimeout error to websocket client -
#2286
d910dd2Thanks @tim-smart! - allow optional fields in http form schemas -
#2281
e7ca973Thanks @tim-smart! - support closing a Socket by writing a CloseEvent -
Updated dependencies [
5d47ee0,5d47ee0,5d47ee0,817a04c,d90a99d,dd05faa,dd05faa,802674b]:- @effect/schema@0.64.0
- effect@2.4.4
0.47.1
Patch Changes
-
#2276
0680545Thanks @tim-smart! - improve /platform error messages -
Updated dependencies [
20e63fb,20e63fb]:- effect@2.4.3
- @effect/schema@0.63.4
0.47.0
Minor Changes
- #2261
fa9663cThanks @tim-smart! - move Socket module to platform
Patch Changes
-
#2267
0f3d99cThanks @tim-smart! - propogate Socket handler errors to .run Effect -
#2269
4064ea0Thanks @jessekelly881! - added PlatformLogger module, for writing logs to a fileIf you wanted to write logfmt logs to a file, you can do the following:
import { PlatformLogger } from "@effect/platform"import { NodeFileSystem, NodeRuntime } from "@effect/platform-node"import { Effect, Layer, Logger } from "effect"const fileLogger = Logger.logfmtLogger.pipe(PlatformLogger.toFile("log.txt"))const LoggerLive = Logger.replaceScoped(Logger.defaultLogger,fileLogger).pipe(Layer.provide(NodeFileSystem.layer))Effect.log("a").pipe(Effect.zipRight(Effect.log("b")),Effect.zipRight(Effect.log("c")),Effect.provide(LoggerLive),NodeRuntime.runMain) -
#2261
fa9663cThanks @tim-smart! - add websocket support to platform http serverYou can use the
Http.request.upgrade*apis to access theSocketfor the request.Here is an example server that handles websockets on the
/wspath:import { NodeHttpServer, NodeRuntime } from "@effect/platform-node"import * as Http from "@effect/platform/HttpServer"import { Console, Effect, Layer, Schedule, Stream } from "effect"import { createServer } from "node:http"const ServerLive = NodeHttpServer.server.layer(() => createServer(), {port: 3000})const HttpLive = Http.router.empty.pipe(Http.router.get("/ws",Effect.gen(function* (_) {yield* _(Stream.fromSchedule(Schedule.spaced(1000)),Stream.map(JSON.stringify),Stream.encodeText,Stream.pipeThroughChannel(Http.request.upgradeChannel()),Stream.decodeText(),Stream.runForEach(Console.log))return Http.response.empty()})),Http.server.serve(Http.middleware.logger),Http.server.withLogAddress,Layer.provide(ServerLive))NodeRuntime.runMain(Layer.launch(HttpLive)) -
Updated dependencies [
e03811e,ac41d84,6137533,f373529,1bf9f31,e3ff789,6137533,507ba40,e466afe,465be79,f373529,de74eb8,d8e6940]:- effect@2.4.2
- @effect/schema@0.63.3
0.46.3
Patch Changes
-
#2231
7535080Thanks @tim-smart! - add option to include prefix when mounting an http app to a routerBy default the prefix is removed. For example:
// Here a request to `/child/hello` will be mapped to `/hello`Http.router.mountApp("/child", httpApp)// Here a request to `/child/hello` will be mapped to `/child/hello`Http.router.mountApp("/child", httpApp, { includePrefix: true }) -
#2232
bd1d7acThanks @tim-smart! - use less aggressive type exclusion in http router apis -
Updated dependencies [
a4a0006,39f583e,f428198,0a37676,c035972,6f503b7]:- effect@2.4.1
- @effect/schema@0.63.2
0.46.2
Patch Changes
0.46.1
Patch Changes
- #2196
aa6556fThanks @tim-smart! - handle defects in worker runner
0.46.0
Minor Changes
- #2101
5de7be5Thanks @github-actions! - add key type to ReadonlyRecord
Patch Changes
- Updated dependencies [
5de7be5,489fcf3,7d9c3bf,d8d278b,14c5711,5de7be5,54ddbb7,b9cb3a9,585fcce,93b412d,55b26a6,136ef40,a025b12,2097739,f24ac9f]:- effect@2.4.0
- @effect/schema@0.63.0
0.45.6
Patch Changes
-
#2187
e6d36c0Thanks @tim-smart! - update development dependencies -
Updated dependencies [
5ad2eec,e6d36c0]:- effect@2.3.8
- @effect/schema@0.62.9
0.45.5
Patch Changes
- #2177
6daf084Thanks @tim-smart! - support Arrays in platform Template module
0.45.4
Patch Changes
-
#2174
abcb7d9Thanks @tim-smart! - add ServerResponse.html/htmlStream apiIt uses the Template module to create html responses
Example:
import { Effect } from "effect"import * as Http from "@effect/platform/HttpServer"Http.response.html`<html>${Effect.succeed(123)}</html>` -
#2174
abcb7d9Thanks @tim-smart! - add Template module to platformThe Template module can be used to create effectful text templates.
Example:
import { Effect } from "effect"import { Template } from "@effect/platform"const t = Template.make`<html>${Effect.succeed(123)}</html>`Effect.runSync(t) // returns "<html>123</html>" -
Updated dependencies [
bc8404d,2c5cbcd,6565916]:- effect@2.3.7
- @effect/schema@0.62.8
0.45.3
Patch Changes
- #2152
09532a8Thanks @tim-smart! - fix incorrect removal of scope in Client.schemaFunction
0.45.2
Patch Changes
-
#2122
44c3b43Thanks @thewilkybarkid! - Add a way to redact HTTP headers -
Updated dependencies [
b1163b2,b46b869,dbff62c,de1b226,a663390,ff88f80,11be07b,c568645,88835e5,e572b07,e787a57,b415577,ff8046f]:- effect@2.3.6
- @effect/schema@0.62.7
0.45.1
Patch Changes
- #2133
65895abThanks @tim-smart! - use Schema.TaggedError for worker errors
0.45.0
Minor Changes
-
#2119
2b62548Thanks @tim-smart! - add Scope to Http clientThis change adds a scope to the default http client, ensuring connections are cleaned up if you abort the request at any point.
Some response helpers have been added to reduce the noise.
import * as Http from "@effect/platform/HttpClient"import { Effect } from "effect"// instead ofHttp.request.get("/").pipe(Http.client.fetchOk(),Effect.flatMap((_) => _.json),Effect.scoped)// you can doHttp.request.get("/").pipe(Http.client.fetchOk(), Http.response.json)// other helpers includeHttp.response.textHttp.response.streamHttp.response.arrayBufferHttp.response.urlParamsBodyHttp.response.formDataHttp.response.schema * Effect
0.44.7
Patch Changes
0.44.6
Patch Changes
- Updated dependencies [
17bda66]:- effect@2.3.4
- @effect/schema@0.62.5
0.44.5
Patch Changes
0.44.4
Patch Changes
0.44.3
Patch Changes
- Updated dependencies [
6654f5f,2eb11b4,56c09bd,71aa5b1,1700af8]:- effect@2.3.2
- @effect/schema@0.62.2
0.44.2
Patch Changes
- #2091
29739ddThanks @tim-smart! - improve type extraction for Router.fromIterable
0.44.1
Patch Changes
- Updated dependencies [
b5a8215]:- effect@2.3.1
- @effect/schema@0.62.1
0.44.0
Minor Changes
-
#2006
9a2d1c1Thanks @github-actions! - With this change we now require a string key to be provided for all tags and renames the dear oldTagtoGenericTag, so when previously you could do:import { Effect, Context } from "effect"interface Service {readonly _: unique symbol}const Service = Context.Tag<Service,{number: Effect.Effect<never, never, number>}>()you are now mandated to do:
import { Effect, Context } from "effect"interface Service {readonly _: unique symbol}const Service = Context.GenericTag<Service,{number: Effect.Effect<never, never, number>}>("Service")This makes by default all tags globals and ensures better debuggaility when unexpected errors arise.
Furthermore we introduce a new way of constructing tags that should be considered the new default:
import { Effect, Context } from "effect"class Service extends Context.Tag("Service")<Service,{number: Effect.Effect<never, never, number>}>() {}const program = Effect.flatMap(Service, ({ number }) => number).pipe(Effect.flatMap((_) => Effect.log(`number: ${_}`)))this will use “Service” as the key and will create automatically an opaque identifier (the class) to be used at the type level, it does something similar to the above in a single shot.
-
#2006
1a77f72Thanks @github-actions! - changeEffecttype parameters order fromEffect<R, E, A>toEffect<A, E = never, R = never> -
#2006
af47aa3Thanks @github-actions! - move where platform worker spawn function is providedWith this change, the point in which you provide the spawn function moves closer to the edge, where you provide platform specific implementation.
This seperates even more platform concerns from your business logic. Example:
import { Worker } from "@effect/platform"import { BrowserWorker } from "@effect/platform-browser"import { Effect } from "effect"Worker.makePool({ ... }).pipe(Effect.provide(BrowserWorker.layer(() => new globalThis.Worker(...)))) -
#2006
a34dbdcThanks @github-actions! - - Schema: change type parameters order fromSchema<R, I, A>toSchema<A, I = A, R = never>- Serializable: change type parameters order from
Serializable<R, I, A>toSerializable<A, I, R> - Class: change type parameters order from
Class<R, I, A, C, Self, Inherited>toClass<A, I, R, C, Self, Inherited> - PropertySignature: change type parameters order from
PropertySignature<R, From, FromIsOptional, To, ToIsOptional>toPropertySignature<From, FromIsOptional, To, ToIsOptional, R = never>
- Serializable: change type parameters order from
-
#2006
b1e2086Thanks @github-actions! - remove re-exports from platform packages -
#2006
02c3461Thanks @github-actions! - With this change we remove theData.Datatype and we makeEqual.Equal&Hash.Hashimplicit traits.The main reason is that
Data.Data<A>was structurally equivalent toA & Equal.Equalbut extendingEqual.Equaldoesn’t mean that the equality is implemented by-value, so the type was simply adding noise without gaining any level of safety.The module
Dataremains unchanged at the value level, all the functions previously available are supposed to work in exactly the same manner.At the type level instead the functions return
Readonlyvariants, so for example we have:import { Data } from "effect"const obj = Data.struct({a: 0,b: 1})will have the
objtyped as:declare const obj: {readonly a: numberreadonly b: number} -
#2006
6361ee2Thanks @github-actions! - fix for encoding of Transferable schemas -
#2006
86f665dThanks @github-actions! - use Context for collecting tranferablesThis changes the platform Transferable module to use Effect context to collect tranferables when using schemas with workers etc.
You can now use a tranferable data type anywhere in your schema without having to wrap the outermost schema:
import { Transferable } from "@effect/platform"import { Schema } from "@effect/schema"const structWithTransferable = Schema.struct({data: Transferable.Uint8Array}) -
#2006
9a2d1c1Thanks @github-actions! - This change enablesEffect.serviceConstantsandEffect.serviceMembersto access any constant in the service, not only the effects, namely it is now possible to do:import { Effect, Context } from "effect"class NumberRepo extends Context.TagClass("NumberRepo")<NumberRepo,{readonly numbers: Array<number>}>() {static numbers = Effect.serviceConstants(NumberRepo).numbers}
Patch Changes
-
#2006
b1e2086Thanks @github-actions! - add server address apis -
Updated dependencies [
96bcee2,4cd6e14,96bcee2,c77f635,e343a74,acf1894,9dc04c8,9a2d1c1,1a77f72,d3f9f4d,c986f0e,96bcee2,d3f9f4d,d3f9f4d,d3f9f4d,70dde23,a34dbdc,d3f9f4d,81b7425,02c3461,0e56e99,8b0ded9,8dd83e8,5127afe,d75f6fe,7356e5c,3077cde,be19ce0,4a5d01a,78f47ab,52e5d20,c6137ec,f5ae081,4a5d01a,60686f5,9a2d1c1,5127afe,56b8691,8ee2931,6727474,5127afe]:- effect@2.3.0
- @effect/schema@0.62.0
0.43.11
Patch Changes
0.43.10
Patch Changes
-
#2057
6928a2bThanks @joepjoosten! - Fix for possible stack overflow errors when using Array.push with spread operator arguments -
Updated dependencies [
d0b911c,330e1a4,6928a2b,296bc1c]:- effect@2.2.4
- @effect/schema@0.61.6
0.43.9
Patch Changes
- #2039
1b841a9Thanks @tim-smart! - fix ClientRequest.make signature (generic was unused)
0.43.8
Patch Changes
-
#2037
32bf796Thanks @tim-smart! - remove overloads from ClientRequest.makeThis makes it easier to programatically create client request instances:
import * as Http from "@effect/platform/HttpClient"declare const method: "GET" | "POST"declare const url: stringHttp.request.make(method)(url)
0.43.7
Patch Changes
- #2020
cde08f3Thanks @tim-smart! - use Proxy for platform schema Transferable
0.43.6
Patch Changes
- #2016
c96bb17Thanks @thewilkybarkid! - Support URL objects in client requests
0.43.5
Patch Changes
0.43.4
Patch Changes
-
#1999
78f5921Thanks @tim-smart! - ensure forked fibers are interruptible -
Updated dependencies [
22794e0,f73e6c0,6bf02c7]:- effect@2.2.3
- @effect/schema@0.61.4
0.43.3
Patch Changes
- Updated dependencies [
9863e2f]:- @effect/schema@0.61.3
0.43.2
Patch Changes
- Updated dependencies [
64f710a]:- @effect/schema@0.61.2
0.43.1
Patch Changes
- Updated dependencies [
c7550f9,8d1f6e4,d404561,7b84a3c,1a84dee,ac30bf4]:- @effect/schema@0.61.1
- effect@2.2.2
0.43.0
Minor Changes
Patch Changes
0.42.7
Patch Changes
-
#1959
fe05ad7Thanks @tim-smart! - fix ClientRequest stream bodies -
Updated dependencies [
202befc,ee4ff8a,ee4ff8a,ee4ff8a,ee4ff8a,10df798]:- effect@2.2.0
- @effect/schema@0.60.7
0.42.6
Patch Changes
- Updated dependencies [
21b9edd]:- effect@2.1.2
- @effect/schema@0.60.6
0.42.5
Patch Changes
- Updated dependencies [
3bf67cf]:- @effect/schema@0.60.5
0.42.4
Patch Changes
0.42.3
Patch Changes
0.42.2
Patch Changes
-
#1919
05c44b3Thanks @github-actions! - Improve Effect.retry options -
Updated dependencies [
05c44b3,05c44b3,05c44b3,05c44b3,05c44b3,05c44b3]:- effect@2.1.0
- @effect/schema@0.60.2
0.42.1
Patch Changes
- Updated dependencies [
f7f19f6]:- effect@2.0.5
- @effect/schema@0.60.1
0.42.0
Minor Changes
- #1895
48a3d40Thanks @tim-smart! - make worker initial message type safe
Patch Changes
- Updated dependencies [
ec2bdfa,687e02e,536c1df,8eec87e,540b294,8eec87e,536c1df,a3f96d6,0c397e7,8eec87e,b557a10,536c1df,8eec87e,8eec87e,74b9094,337e80f,25adce7,536c1df]:- @effect/schema@0.60.0
- effect@2.0.4
0.41.0
Minor Changes
- #1885
1d3a06bThanks @mikearnaldi! - lift worker shutdown to /platform implementation
Patch Changes
-
#1885
1d3a06bThanks @mikearnaldi! - Avoid killing all fibers on interrupt -
Updated dependencies [
5b46e99,87f7ef2,210d27e,1d3a06b]:- @effect/schema@0.59.1
- effect@2.0.3
0.40.4
Patch Changes
0.40.3
Patch Changes
-
#1879
92c0322Thanks @tim-smart! - add http Multiplex module -
Updated dependencies [
7b2f874,a904a73,7b2f874,7b2f874,7b2f874,7b2f874]:- @effect/schema@0.58.0
0.40.2
Patch Changes
-
#1870
4c90c54Thanks @tim-smart! - support context propogation in platform workers -
#1869
d3d3bdaThanks @tim-smart! - don’t add Transferable to schema types -
Updated dependencies [
d5a1949]:- effect@2.0.2
- @effect/schema@0.57.2
0.40.1
Patch Changes
- Updated dependencies [
16bd87d]:- effect@2.0.1
- @effect/schema@0.57.1
0.40.0
Minor Changes
-
d0471caThanks @mikearnaldi! - Switch to monorepo structure -
#1846
693b8f3Thanks @fubhy! - EnabledexactOptionalPropertyTypesthroughout
Patch Changes
-
d987daaThanks @mikearnaldi! - Switch effect dependency to caret -
#1848
04fb8b4Thanks @fubhy! - Avoid default parameter initilization -
#1847
bcf0900Thanks @fubhy! - Avoid inline creation & spreading of objects and arrays -
#1799
c0aeb5eThanks @tim-smart! - add Route to RouteContext -
Updated dependencies [
d987daa,7b5eaa3,0724211,9f2bc5a,04fb8b4,d0471ca,bcf0900,6299b84]:- @effect/schema@0.57.0
- effect@2.0.0
0.39.0
Minor Changes
-
#369
5d5f62bThanks @tim-smart! - rename server FormData module to Multipart -
#372
15784c9Thanks @tim-smart! - update dependencies -
#373
b042ba5Thanks @tim-smart! - update effect -
#371
49fb154Thanks @tim-smart! - rename schemaBodyMultipartJson to schemaBodyFormJson & support url forms
0.38.0
Minor Changes
- #367
7d1584bThanks @tim-smart! - update effect
0.37.8
Patch Changes
-
#363
e2c545aThanks @tim-smart! - fix schemaNoBody type -
#366
1d6bf73Thanks @tim-smart! - add Scope to every http request -
#365
3351136Thanks @tim-smart! - respond with 503 on server induced interrupt
0.37.7
Patch Changes
- #361
df3af6bThanks @tim-smart! - fix headers type for schemaJson
0.37.6
Patch Changes
-
#359
6dbc587Thanks @tim-smart! - use branded type for Headers -
#359
6dbc587Thanks @tim-smart! - change UrlParams to ReadonlyArray
0.37.5
Patch Changes
- #354
190bc84Thanks @tim-smart! - add Layer support to SerializedWorker
0.37.4
Patch Changes
-
#352
1c02a35Thanks @tim-smart! - interrupt all fibers on worker interrupt -
#352
1c02a35Thanks @tim-smart! - interrupt workers on all failures
0.37.3
Patch Changes
- #350
b30e5e3Thanks @tim-smart! - add decode option to worker runner
0.37.2
Patch Changes
- #348
28edc60Thanks @tim-smart! - add layer worker runner apis
0.37.1
Patch Changes
-
#344
5b7cdbdThanks @tim-smart! - support error and output transfers in worker runners -
#344
5b7cdbdThanks @tim-smart! - support initialMessage in workers -
#344
5b7cdbdThanks @tim-smart! - add Schema transforms to Transferable -
#344
5b7cdbdThanks @tim-smart! - make worker encoding return Effects
0.37.0
Minor Changes
-
#341
649f57fThanks @tim-smart! - use peer deps for /platform-* -
#341
649f57fThanks @tim-smart! - replace http router with find-my-way-ts
0.36.0
Minor Changes
-
#338
7eaa8e5Thanks @tim-smart! - change http serve api to return immediately -
#338
7eaa8e5Thanks @tim-smart! - Http.server.serve now returns a Layer
Patch Changes
- #338
7eaa8e5Thanks @tim-smart! - add Http.server.serveEffect
0.35.0
Minor Changes
- #335
4f0166eThanks @tim-smart! - remove index module from /platform
Patch Changes
- #335
4f0166eThanks @tim-smart! - add SerializedWorker
0.34.0
Minor Changes
- #331
db1ca18Thanks @tim-smart! - update effect
0.33.1
Patch Changes
- #326
162aa91Thanks @tim-smart! - add Router.schemaSearchParams/schemaPathParams
0.33.0
Minor Changes
- #321
16a5bcaThanks @tim-smart! - update effect
Patch Changes
-
#319
425365eThanks @IMax153! - add Terminal.readLine to read input line-by-line from the terminal -
#319
425365eThanks @IMax153! - make Terminal.columns an Effect to account for resizing the terminal
0.32.2
Patch Changes
- #312
cc1f588Thanks @tim-smart! - scope commands to prevent process leaks
0.32.1
Patch Changes
- #310
14239fbThanks @tim-smart! - update effect
0.32.0
Minor Changes
- #307
746f969Thanks @tim-smart! - update effect
Patch Changes
-
#304
92e56a1Thanks @tim-smart! - allow fetch function to be replaced -
#304
92e56a1Thanks @tim-smart! - add HttpClient.mapInputRequest apis
0.31.2
Patch Changes
- #298
7a46ec6Thanks @tim-smart! - add .toWebHandler* to Http/App
0.31.1
Patch Changes
- #292
b712491Thanks @tim-smart! - add ability to disable http tracer with predicate
0.31.0
Minor Changes
- #291
5a677f1Thanks @tim-smart! - update effect
Patch Changes
- #289
624855fThanks @tim-smart! - update deps
0.30.6
Patch Changes
- #287
d5d0932Thanks @tim-smart! - expose ServerResponse.setStatus
0.30.5
Patch Changes
- #277
36e449cThanks @tim-smart! - wait for ready latch in worker
0.30.4
Patch Changes
- #275
e28989eThanks @tim-smart! - add stack to WorkerError
0.30.3
Patch Changes
- #272
1a055acThanks @tim-smart! - add WorkerError to send api
0.30.2
Patch Changes
- #270
3257fd5Thanks @tim-smart! - update multipasta
0.30.1
Patch Changes
- #268
58f5cccThanks @tim-smart! - update deps
0.30.0
Minor Changes
- #267
3d38b40Thanks @tim-smart! - update effect
0.29.1
Patch Changes
- #263
2bbe692Thanks @tim-smart! - fix fieldMimeTypes fiber ref
0.29.0
Minor Changes
- #250
6e18090Thanks @tim-smart! - updated FormData model and apis
0.28.4
Patch Changes
0.28.3
Patch Changes
0.28.2
Patch Changes
0.28.1
Patch Changes
0.28.0
Minor Changes
0.27.4
Patch Changes
0.27.3
Patch Changes
- #243
1ac0a42Thanks @tim-smart! - fix worker interruption
0.27.2
Patch Changes
- #241
e2aa7cdThanks @tim-smart! - decrease bun worker close timeout
0.27.1
Patch Changes
- #239
4d94b9dThanks @tim-smart! - update effect
0.27.0
Minor Changes
- #237
1f79ed6Thanks @tim-smart! - update effect
0.26.7
Patch Changes
- #235
6e14c02Thanks @tim-smart! - fix for hanging worker shutdown
0.26.6
Patch Changes
- #233
71947e0Thanks @tim-smart! - fix worker scope hanging on close
0.26.5
Patch Changes
- #231
a3cbba4Thanks @tim-smart! - add onCreate and broadcast to pool options
0.26.4
Patch Changes
-
#229
4661a8cThanks @tim-smart! - type worker runner success as never -
#229
4661a8cThanks @tim-smart! - disable worker pool scaling
0.26.3
Patch Changes
- #227
abb6baaThanks @patroza! - feat: cache the reading of text/urlParamsBody/formData bodies so they can be reused
0.26.2
Patch Changes
- #219
f37f58cThanks @tim-smart! - fix encode / transfers for effect workers
0.26.1
Patch Changes
- #217
7471ac1Thanks @tim-smart! - add encode option to Worker & WorkerRunner
0.26.0
Minor Changes
- #215
59da2a6Thanks @tim-smart! - seperate request processing in http client
0.25.1
Patch Changes
- #213
38a49ebThanks @tim-smart! - update effect
0.25.0
Minor Changes
- #211
9ec45cbThanks @tim-smart! - update effect
0.24.0
Minor Changes
- #209
9c51aa1Thanks @tim-smart! - update effect
0.23.1
Patch Changes
-
#206
b47639bThanks @tim-smart! - small stream improvements -
#208
41f8a65Thanks @tim-smart! - add Http.middleware.withLoggerDisabled
0.23.0
Minor Changes
- #204
ee0c08fThanks @tim-smart! - update effect
0.22.1
Patch Changes
- #194
79b71d8Thanks @tim-smart! - add Worker & WorkerRunner modules
0.22.0
Minor Changes
- #199
1e94b15Thanks @tim-smart! - enable tracing by default
0.21.0
Minor Changes
- #193
9ec4b1dThanks @tim-smart! - update effect
Patch Changes
- #191
2711aeaThanks @tim-smart! - update effect
0.20.0
Minor Changes
- #189
b07f8cdThanks @tim-smart! - update effect
0.19.0
Minor Changes
- #184
903b599Thanks @tim-smart! - update effect
Patch Changes
- #186
a3bcda4Thanks @tim-smart! - add pre response handlers to http
0.18.7
Patch Changes
- #179
843488fThanks @tim-smart! - update effect
0.18.6
Patch Changes
-
#177
7e4e2a5Thanks @tim-smart! - add ClientResponse.schemaNoBody -
#175
d1c2b38Thanks @tim-smart! - make ServerResponse an Effect
0.18.5
Patch Changes
- #171
fbbcaa9Thanks @tim-smart! - remove preserveModules patch for preconstruct
0.18.4
Patch Changes
- #169
bd8778dThanks @tim-smart! - fix nested modules
0.18.3
Patch Changes
- #167
7027589Thanks @tim-smart! - build with preconstruct
0.18.2
Patch Changes
0.18.1
Patch Changes
- #163
c957232Thanks @tim-smart! - update effect
0.18.0
Minor Changes
0.17.1
Patch Changes
- #158
9b10bf3Thanks @tim-smart! - add client transform apis
0.17.0
Minor Changes
- #156
e6c4101Thanks @tim-smart! - update dependencies
0.16.1
Patch Changes
- #148
492f0e7Thanks @tim-smart! - add IncomingMessage.remoteAddress
0.16.0
Minor Changes
- #145
d0522beThanks @tim-smart! - update dependencies
Patch Changes
- #144
6583ad4Thanks @tim-smart! - b3 header propagation in http client and server
0.15.2
Patch Changes
- #131
06e27ceThanks @jessekelly881! - add Clipboard module to /platform-browser
0.15.1
Patch Changes
- #138
2b2f658Thanks @tim-smart! - remove Router.WithoutProvided
0.15.0
Minor Changes
- #135
99f2a49Thanks @tim-smart! - update dependencies
0.14.1
Patch Changes
-
#133
1d2c403Thanks @tim-smart! - add http platform abstraction -
#133
1d2c403Thanks @tim-smart! - handle HEAD requests
0.14.0
Minor Changes
- #130
2713c4fThanks @tim-smart! - update dependencies
0.13.16
Patch Changes
- #125
eb54e53Thanks @tim-smart! - restruture platform-node for platform-bun reuse
0.13.15
Patch Changes
- #123
07089a8Thanks @tim-smart! - add ClientResponse.schemaJson
0.13.14
Patch Changes
-
#120
9cda8c9Thanks @tim-smart! - add KeyValueStore.SchemaStore -
#111
6e96703Thanks @jessekelly881! - add KeyValueStore module -
#120
9cda8c9Thanks @tim-smart! - add KeyValueStore.prefix
0.13.13
Patch Changes
- #117
ee7e365Thanks @tim-smart! - add support for File web api to http
0.13.12
Patch Changes
- #115
4cba795Thanks @tim-smart! - add Router.WithoutProvided
0.13.11
Patch Changes
- #113
5945805Thanks @tim-smart! - try to remove route context and requests from Router context
0.13.10
Patch Changes
- #109
7031ec0Thanks @tim-smart! - remove Body.EffectBody
0.13.9
Patch Changes
- #106
df3dbcfThanks @tim-smart! - add count to http log span
0.13.8
Patch Changes
-
#99
e42c3f5Thanks @tim-smart! - add ClientRequest.bearerToken -
#105
127c8f5Thanks @tim-smart! - add more form data limit config
0.13.7
Patch Changes
- #97
e5c91ebThanks @tim-smart! - rename IncomingMessage.urlParams to urlParamsBody
0.13.6
Patch Changes
- #94
cd3b15eThanks @tim-smart! - only use mime module in ServerResponse
0.13.5
Patch Changes
- #92
a034383Thanks @tim-smart! - fix mime import
0.13.4
Patch Changes
-
#90
05d1765Thanks @tim-smart! - rename Router.transform to Router.use -
#89
30025cbThanks @tim-smart! - add etag generation for http file responses
0.13.3
Patch Changes
-
#86
6dfc5b0Thanks @tim-smart! - add router combinators -
#88
d7fffebThanks @tim-smart! - remove Middleware.compose
0.13.2
Patch Changes
-
#83
ce5e086Thanks @tim-smart! - update deps -
#81
c1ec2baThanks @tim-smart! - use ReadonlyRecord for headers -
#83
ce5e086Thanks @tim-smart! - performance tweaks
0.13.1
Patch Changes
0.13.0
Minor Changes
- #77
e97d80bThanks @tim-smart! - remove Console module
0.12.1
Patch Changes
- #75
d23ff14Thanks @tim-smart! - add size helpers
0.12.0
Minor Changes
- #71
139de2eThanks @tim-smart! - add HttpServer module
Patch Changes
- #71
139de2eThanks @tim-smart! - add SizeInput type
0.11.5
Patch Changes
- #69
0eb7df0Thanks @tim-smart! - have Command & Client implement Pipeable
0.11.4
Patch Changes
- #67
c41a166Thanks @tim-smart! - add node implementation of http client
0.11.3
Patch Changes
- #64
6f2d011Thanks @tim-smart! - fix ClientRequest jsonBody types
0.11.2
Patch Changes
- #62
3d44256Thanks @tim-smart! - improve http client options type
0.11.1
Patch Changes
- #38
f70a121Thanks @tim-smart! - add HttpClient module
0.11.0
Minor Changes
- #59
b2f7bc0Thanks @tim-smart! - update dependencies
Patch Changes
-
#58
f61aa57Thanks @tim-smart! - update build tools -
#56
efcf469Thanks @tim-smart! - switch to peerDependencies
0.10.4
Patch Changes
-
#55
67caeffThanks @tim-smart! - add labels to Tags -
#46
4a4d0afThanks @fubhy! - add seek method to file handles -
#54
b3950e1Thanks @tim-smart! - add writeFileString
0.10.3
Patch Changes
- #51
9163d96Thanks @tim-smart! - revert exists change
0.10.2
Patch Changes
- #49
44eaaf5Thanks @tim-smart! - fix exists catching wrong error
0.10.1
Patch Changes
- #47
24b56d5Thanks @tim-smart! - add exists and readFileString to FileSystem
0.10.0
Minor Changes
- #41
68cbdcaThanks @tim-smart! - update /data, /io and /stream
0.9.0
Minor Changes
- #39
3012e28Thanks @tim-smart! - update dependencies
0.8.0
Minor Changes
- #36
b82cbccThanks @tim-smart! - update dependencies
0.7.0
Minor Changes
- #34
601d045Thanks @tim-smart! - update /stream
0.6.0
Minor Changes
- #32
ee94eaeThanks @tim-smart! - update /io and /data
0.5.0
Minor Changes
- #28
f3d73f5Thanks @tim-smart! - update /io
0.4.0
Minor Changes
- #26
834e1a7Thanks @tim-smart! - update /io and /data
0.3.0
Minor Changes
- #22
645f10fThanks @tim-smart! - update /io and /data
0.2.0
Minor Changes
- #20
756ccbeThanks @IMax153! - upgrade to@effect/data@0.13.5,@effect/io@0.31.3, and@effect/stream@0.25.1
0.1.0
Minor Changes
- #13
b95c25fThanks @tim-smart! - initial release