effect 4.0.0-beta.56 → 4.0.0-beta.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -118,11 +118,7 @@ export const grouped = options => {
118
118
  export const findById = options => {
119
119
  const decodeResults = Schema.decodeUnknownEffect(Schema.Array(options.Result));
120
120
  return RequestResolver.makeGrouped({
121
- key(entry) {
122
- const conn = entry.context.mapUnsafe.get(SqlClient.TransactionConnection.key);
123
- if (!conn) return undefined;
124
- return Equal.byReferenceUnsafe(conn);
125
- },
121
+ key: transactionKey,
126
122
  resolver: Effect.fnUntraced(function* (entries) {
127
123
  const [inputs, idMap] = yield* partitionRequestsById(entries, options.Id);
128
124
  const results = yield* options.execute(inputs).pipe(Effect.provideContext(entries[0].context));
@@ -206,7 +202,9 @@ const partitionRequestsById = function* (requests, schema) {
206
202
  return [inputs, byIdMap];
207
203
  };
208
204
  function transactionKey(entry) {
209
- const conn = entry.context.mapUnsafe.get(SqlClient.TransactionConnection.key);
205
+ const client = entry.context.mapUnsafe.get(SqlClient.SqlClient.key);
206
+ if (!client) return undefined;
207
+ const conn = entry.context.mapUnsafe.get(client.transactionService.key);
210
208
  if (!conn) return undefined;
211
209
  return Equal.byReferenceUnsafe(conn);
212
210
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SqlResolver.js","names":["Arr","Cause","Effect","Equal","Exit","Hash","MutableHashMap","Request","RequestResolver","Schema","SqlClient","ResultLengthMismatch","SqlRequestProto","Class","prototype","symbol","that","equals","payload","hash","request","arguments","length","resolver","SqlRequest","self","Object","create","ordered","options","decodeArray","decodeUnknownEffect","Array","Result","makeGrouped","key","transactionKey","fnUntraced","entries","inputs","partitionRequests","results","execute","pipe","provideContext","context","expected","actual","decodedResults","i","completeUnsafe","succeed","grouped","decodeResults","resultMap","empty","len","result","ResultGroupKey","group","get","_tag","set","value","push","entry","RequestGroupKey","constNoSuchElement","findById","conn","mapUnsafe","TransactionConnection","undefined","byReferenceUnsafe","idMap","partitionRequestsById","Id","id","ResultId","remove","isEmpty","forEach","void_","void","fail","NoSuchElementError","requests","schema","encode","encodeEffect","handle","matchCauseEager","onFailure","cause","failCause","onSuccess","byIdMap"],"sources":["../../../src/unstable/sql/SqlResolver.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,GAAG,MAAM,gBAAgB;AACrC,OAAO,KAAKC,KAAK,MAAM,gBAAgB;AACvC,OAAO,KAAKC,MAAM,MAAM,iBAAiB;AACzC,OAAO,KAAKC,KAAK,MAAM,gBAAgB;AACvC,OAAO,KAAKC,IAAI,MAAM,eAAe;AACrC,OAAO,KAAKC,IAAI,MAAM,eAAe;AACrC,OAAO,KAAKC,cAAc,MAAM,yBAAyB;AACzD,OAAO,KAAKC,OAAO,MAAM,kBAAkB;AAC3C,OAAO,KAAKC,eAAe,MAAM,0BAA0B;AAC3D,OAAO,KAAKC,MAAM,MAAM,iBAAiB;AAEzC,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAC3C,SAASC,oBAAoB,QAAQ,eAAe;AAUpD,MAAMC,eAAe,GAAG;EACtB,GAAGL,OAAO,CAACM,KAAK,CAACC,SAAS;EAC1B,CAACX,KAAK,CAACY,MAAM,EAEXC,IAAoC;IAEpC,OAAOb,KAAK,CAACc,MAAM,CAAC,IAAI,CAACC,OAAO,EAAEF,IAAI,CAACE,OAAO,CAAC;EACjD,CAAC;EACD,CAACb,IAAI,CAACU,MAAM,IAAC;IACX,OAAOV,IAAI,CAACc,IAAI,CAAC,IAAI,CAACD,OAAO,CAAC;EAChC;CACD;AAED;;;;AAIA,OAAO,MAAME,OAAO,GAchB,SAAAA,CAAA;EACF,IAAIC,SAAS,CAACC,MAAM,KAAK,CAAC,EAAE;IAC1B,MAAMC,QAAQ,GAAGF,SAAS,CAAC,CAAC,CAAC;IAC7B,OAAQH,OAAY,IAAKhB,MAAM,CAACkB,OAAO,CAACI,UAAU,CAACN,OAAO,CAAC,EAAEK,QAAQ,CAAC;EACxE;EACA,OAAOrB,MAAM,CAACkB,OAAO,CAACI,UAAU,CAACH,SAAS,CAAC,CAAC,CAAC,CAAC,EAAEA,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAQ;AAER;;;;AAIA,OAAO,MAAMG,UAAU,GAAiBN,OAAW,IAA6B;EAC9E,MAAMO,IAAI,GAAGC,MAAM,CAACC,MAAM,CAACf,eAAe,CAAC;EAC3Ca,IAAI,CAACP,OAAO,GAAGA,OAAO;EACtB,OAAOO,IAAI;AACb,CAAC;AAED;;;;;;;;;;;AAWA,OAAO,MAAMG,OAAO,GAClBC,OAMC,IAGC;EACF,MAAMC,WAAW,GAAGrB,MAAM,CAACsB,mBAAmB,CAACtB,MAAM,CAACuB,KAAK,CAACH,OAAO,CAACI,MAAM,CAAC,CAAC;EAC5E,OAAOzB,eAAe,CAAC0B,WAAW,CAQhC;IACAC,GAAG,EAAEC,cAAc;IACnBb,QAAQ,EAAErB,MAAM,CAACmC,UAAU,CAAC,WAAUC,OAAO;MAC3C,MAAMC,MAAM,GAAG,OAAOC,iBAAiB,CAACF,OAAO,EAAET,OAAO,CAACtB,OAAO,CAAC;MACjE,MAAMkC,OAAO,GAAG,OAAOZ,OAAO,CAACa,OAAO,CAACH,MAAa,CAAC,CAACI,IAAI,CACxDzC,MAAM,CAAC0C,cAAc,CAACN,OAAO,CAAC,CAAC,CAAC,CAACO,OAAO,CAAC,CAC1C;MACD,IAAIJ,OAAO,CAACnB,MAAM,KAAKiB,MAAM,CAACjB,MAAM,EAAE;QACpC,OAAO,OAAO,IAAIX,oBAAoB,CAAC;UAAEmC,QAAQ,EAAEP,MAAM,CAACjB,MAAM;UAAEyB,MAAM,EAAEN,OAAO,CAACnB;QAAM,CAAE,CAAC;MAC7F;MACA,MAAM0B,cAAc,GAAG,OAAOlB,WAAW,CAACW,OAAO,CAAC,CAACE,IAAI,CACrDzC,MAAM,CAAC0C,cAAc,CAACN,OAAO,CAAC,CAAC,CAAC,CAACO,OAAO,CAAC,CAC1C;MACD,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGX,OAAO,CAAChB,MAAM,EAAE2B,CAAC,EAAE,EAAE;QACvCX,OAAO,CAACW,CAAC,CAAC,CAACC,cAAc,CAAC9C,IAAI,CAAC+C,OAAO,CAACH,cAAc,CAACC,CAAC,CAAC,CAAC,CAAC;MAC5D;IACF,CAAC;GACF,CAAC;AACJ,CAAC;AAED;;;;;;;;AAQA,OAAO,MAAMG,OAAO,GAClBvB,OAQC,IAQC;EACF,MAAMwB,aAAa,GAAG5C,MAAM,CAACsB,mBAAmB,CAACtB,MAAM,CAACuB,KAAK,CAACH,OAAO,CAACI,MAAM,CAAC,CAAC;EAE9E,OAAOzB,eAAe,CAAC0B,WAAW,CAQhC;IACAC,GAAG,EAAEC,cAAc;IACnBb,QAAQ,EAAErB,MAAM,CAACmC,UAAU,CAAC,WAAUC,OAAO;MAC3C,MAAMC,MAAM,GAAG,OAAOC,iBAAiB,CAACF,OAAO,EAAET,OAAO,CAACtB,OAAO,CAAC;MACjE,MAAM+C,SAAS,GAAGhD,cAAc,CAACiD,KAAK,EAAqC;MAC3E,MAAMd,OAAO,GAAG,OAAOZ,OAAO,CAACa,OAAO,CAACH,MAAa,CAAC,CAACI,IAAI,CACxDzC,MAAM,CAAC0C,cAAc,CAACN,OAAO,CAAC,CAAC,CAAC,CAACO,OAAO,CAAC,CAC1C;MACD,MAAMG,cAAc,GAAG,OAAOK,aAAa,CAACZ,OAAO,CAAC,CAACE,IAAI,CACvDzC,MAAM,CAAC0C,cAAc,CAACN,OAAO,CAAC,CAAC,CAAC,CAACO,OAAO,CAAC,CAC1C;MACD,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEO,GAAG,GAAGR,cAAc,CAAC1B,MAAM,EAAE2B,CAAC,GAAGO,GAAG,EAAEP,CAAC,EAAE,EAAE;QACzD,MAAMQ,MAAM,GAAGT,cAAc,CAACC,CAAC,CAAC;QAChC,MAAMd,GAAG,GAAGN,OAAO,CAAC6B,cAAc,CAACD,MAAM,EAAEhB,OAAO,CAACQ,CAAC,CAAC,CAAC;QACtD,MAAMU,KAAK,GAAGrD,cAAc,CAACsD,GAAG,CAACN,SAAS,EAAEnB,GAAG,CAAC;QAChD,IAAIwB,KAAK,CAACE,IAAI,KAAK,MAAM,EAAE;UACzBvD,cAAc,CAACwD,GAAG,CAACR,SAAS,EAAEnB,GAAG,EAAE,CAACsB,MAAM,CAAC,CAAC;QAC9C,CAAC,MAAM;UACLE,KAAK,CAACI,KAAK,CAACC,IAAI,CAACP,MAAM,CAAC;QAC1B;MACF;MACA,KAAK,IAAIR,CAAC,GAAG,CAAC,EAAEO,GAAG,GAAGlB,OAAO,CAAChB,MAAM,EAAE2B,CAAC,GAAGO,GAAG,EAAEP,CAAC,EAAE,EAAE;QAClD,MAAMgB,KAAK,GAAG3B,OAAO,CAACW,CAAC,CAAC;QACxB,MAAMd,GAAG,GAAGN,OAAO,CAACqC,eAAe,CAACD,KAAK,CAAC7C,OAAO,CAACF,OAAO,CAAC;QAC1D,MAAMuC,MAAM,GAAGnD,cAAc,CAACsD,GAAG,CAACN,SAAS,EAAEnB,GAAG,CAAC;QACjD8B,KAAK,CAACf,cAAc,CAClBO,MAAM,CAACI,IAAI,KAAK,MAAM,GAAGM,kBAAkB,GAAG/D,IAAI,CAAC+C,OAAO,CAACM,MAAM,CAACM,KAAK,CAAC,CACzE;MACH;IACF,CAAC;GACF,CAAC;AACJ,CAAC;AAED;;;;;;AAMA,OAAO,MAAMK,QAAQ,GACnBvC,OAOC,IAQC;EACF,MAAMwB,aAAa,GAAG5C,MAAM,CAACsB,mBAAmB,CAACtB,MAAM,CAACuB,KAAK,CAACH,OAAO,CAACI,MAAM,CAAC,CAAC;EAE9E,OAAOzB,eAAe,CAAC0B,WAAW,CAQhC;IACAC,GAAGA,CAAC8B,KAAK;MACP,MAAMI,IAAI,GAAGJ,KAAK,CAACpB,OAAO,CAACyB,SAAS,CAACV,GAAG,CAAClD,SAAS,CAAC6D,qBAAqB,CAACpC,GAAG,CAAC;MAC7E,IAAI,CAACkC,IAAI,EAAE,OAAOG,SAAS;MAC3B,OAAOrE,KAAK,CAACsE,iBAAiB,CAACJ,IAAI,CAAC;IACtC,CAAC;IACD9C,QAAQ,EAAErB,MAAM,CAACmC,UAAU,CAAC,WAAUC,OAAO;MAC3C,MAAM,CAACC,MAAM,EAAEmC,KAAK,CAAC,GAAG,OAAOC,qBAAqB,CAACrC,OAAO,EAAET,OAAO,CAAC+C,EAAE,CAAC;MACzE,MAAMnC,OAAO,GAAG,OAAOZ,OAAO,CAACa,OAAO,CAACH,MAAa,CAAC,CAACI,IAAI,CACxDzC,MAAM,CAAC0C,cAAc,CAACN,OAAO,CAAC,CAAC,CAAC,CAACO,OAAO,CAAC,CAC1C;MACD,MAAMG,cAAc,GAAG,OAAOK,aAAa,CAACZ,OAAO,CAAC,CAACE,IAAI,CACvDzC,MAAM,CAAC0C,cAAc,CAACN,OAAO,CAAC,CAAC,CAAC,CAACO,OAAO,CAAC,CAC1C;MACD,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,cAAc,CAAC1B,MAAM,EAAE2B,CAAC,EAAE,EAAE;QAC9C,MAAMQ,MAAM,GAAGT,cAAc,CAACC,CAAC,CAAC;QAChC,MAAM4B,EAAE,GAAGhD,OAAO,CAACiD,QAAQ,CAACrB,MAAM,EAAEhB,OAAO,CAACQ,CAAC,CAAC,CAAC;QAC/C,MAAM7B,OAAO,GAAGd,cAAc,CAACsD,GAAG,CAACc,KAAK,EAAEG,EAAE,CAAC;QAC7C,IAAIzD,OAAO,CAACyC,IAAI,KAAK,MAAM,EAAE;UAC3B;QACF;QACAvD,cAAc,CAACyE,MAAM,CAACL,KAAK,EAAEG,EAAE,CAAC;QAChCzD,OAAO,CAAC2C,KAAK,CAACb,cAAc,CAAC9C,IAAI,CAAC+C,OAAO,CAACM,MAAM,CAAC,CAAC;MACpD;MACA,IAAInD,cAAc,CAAC0E,OAAO,CAACN,KAAK,CAAC,EAAE;QACjC;MACF;MACApE,cAAc,CAAC2E,OAAO,CAACP,KAAK,EAAGtD,OAAO,IAAI;QACxCA,OAAO,CAAC8B,cAAc,CAACiB,kBAAkB,CAAC;MAC5C,CAAC,CAAC;IACJ,CAAC;GACF,CAAC;AACJ,CAAC;AAED,MAAMe,KAAK,GACTrD,OAKC,IASDrB,eAAe,CAAC0B,WAAW,CAQzB;EACAC,GAAG,EAAEC,cAAc;EACnBb,QAAQ,EAAErB,MAAM,CAACmC,UAAU,CAAC,WAAUC,OAAO;IAC3C,MAAMC,MAAM,GAAG,OAAOC,iBAAiB,CAACF,OAAO,EAAET,OAAO,CAACtB,OAAO,CAAC;IACjE,OAAOsB,OAAO,CAACa,OAAO,CAACH,MAAa,CAAC,CAACI,IAAI,CACxCzC,MAAM,CAAC0C,cAAc,CAACN,OAAO,CAAC,CAAC,CAAC,CAACO,OAAO,CAAC,CAC1C;IACD,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGX,OAAO,CAAChB,MAAM,EAAE2B,CAAC,EAAE,EAAE;MACvCX,OAAO,CAACW,CAAC,CAAC,CAACC,cAAc,CAAC9C,IAAI,CAAC+E,IAAI,CAAC;IACtC;EACF,CAAC;CACF,CAAC;AAEJ;AACE;;;;;;AAMAD,KAAK,IAAIC,IAAI;AAGf,MAAMhB,kBAAkB,gBAAG/D,IAAI,CAACgF,IAAI,cAAC,IAAInF,KAAK,CAACoF,kBAAkB,EAAE,CAAC;AAEpE,MAAM7C,iBAAiB,GAAG,UAAAA,CACxB8C,QAAmE,EACnEC,MAAmC;EAEnC,MAAM/B,GAAG,GAAG8B,QAAQ,CAAChE,MAAM;EAC3B,MAAMiB,MAAM,GAAGvC,GAAG,CAACuD,KAAK,EAAO;EAC/B,IAAIU,KAA8C;EAClD,MAAMuB,MAAM,GAAG/E,MAAM,CAACgF,YAAY,CAACF,MAAM,CAAC;EAC1C,MAAMG,MAAM,GAAGxF,MAAM,CAACyF,eAAe,CAAC;IACpCC,SAASA,CAACC,KAAsC;MAC9C5B,KAAK,CAACf,cAAc,CAAC9C,IAAI,CAAC0F,SAAS,CAACD,KAAK,CAAC,CAAC;IAC7C,CAAC;IACDE,SAASA,CAAChC,KAAU;MAClBxB,MAAM,CAACyB,IAAI,CAACD,KAAK,CAAC;IACpB;GACD,CAAC;EAEF,KAAK,IAAId,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGO,GAAG,EAAEP,CAAC,EAAE,EAAE;IAC5BgB,KAAK,GAAGqB,QAAQ,CAACrC,CAAC,CAAC;IACnB,MAAO/C,MAAM,CAAC0C,cAAc,CAAC8C,MAAM,CAACF,MAAM,CAACvB,KAAK,CAAC7C,OAAO,CAACF,OAAO,CAAC,CAAC,EAAE+C,KAAK,CAACpB,OAAO,CAAyB;EAC5G;EAEA,OAAON,MAAM;AACf,CAAC;AAED,MAAMoC,qBAAqB,GAAG,UAAAA,CAC5BW,QAA+D,EAC/DC,MAAmC;EAEnC,MAAM/B,GAAG,GAAG8B,QAAQ,CAAChE,MAAM;EAC3B,MAAMiB,MAAM,GAAGvC,GAAG,CAACuD,KAAK,EAAO;EAC/B,MAAMyC,OAAO,GAAG1F,cAAc,CAACiD,KAAK,EAA8C;EAClF,IAAIU,KAA8C;EAClD,MAAMuB,MAAM,GAAG/E,MAAM,CAACgF,YAAY,CAACF,MAAM,CAAC;EAC1C,MAAMG,MAAM,GAAGxF,MAAM,CAACyF,eAAe,CAAC;IACpCC,SAASA,CAACC,KAAsC;MAC9C5B,KAAK,CAACf,cAAc,CAAC9C,IAAI,CAAC0F,SAAS,CAACD,KAAK,CAAC,CAAC;IAC7C,CAAC;IACDE,SAASA,CAAChC,KAAU;MAClBxB,MAAM,CAACyB,IAAI,CAACD,KAAK,CAAC;IACpB;GACD,CAAC;EAEF,KAAK,IAAId,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGO,GAAG,EAAEP,CAAC,EAAE,EAAE;IAC5BgB,KAAK,GAAGqB,QAAQ,CAACrC,CAAC,CAAC;IACnB,MAAO/C,MAAM,CAAC0C,cAAc,CAAC8C,MAAM,CAACF,MAAM,CAACvB,KAAK,CAAC7C,OAAO,CAACF,OAAO,CAAC,CAAC,EAAE+C,KAAK,CAACpB,OAAO,CAAyB;IAC1GvC,cAAc,CAACwD,GAAG,CAACkC,OAAO,EAAE/B,KAAK,CAAC7C,OAAO,CAACF,OAAO,EAAE+C,KAAK,CAAC;EAC3D;EAEA,OAAO,CAAC1B,MAAM,EAAEyD,OAAO,CAAU;AACnC,CAAC;AAED,SAAS5D,cAAcA,CAAI6B,KAAuB;EAChD,MAAMI,IAAI,GAAGJ,KAAK,CAACpB,OAAO,CAACyB,SAAS,CAACV,GAAG,CAAClD,SAAS,CAAC6D,qBAAqB,CAACpC,GAAG,CAAC;EAC7E,IAAI,CAACkC,IAAI,EAAE,OAAOG,SAAS;EAC3B,OAAOrE,KAAK,CAACsE,iBAAiB,CAACJ,IAAI,CAAC;AACtC","ignoreList":[]}
1
+ {"version":3,"file":"SqlResolver.js","names":["Arr","Cause","Effect","Equal","Exit","Hash","MutableHashMap","Request","RequestResolver","Schema","SqlClient","ResultLengthMismatch","SqlRequestProto","Class","prototype","symbol","that","equals","payload","hash","request","arguments","length","resolver","SqlRequest","self","Object","create","ordered","options","decodeArray","decodeUnknownEffect","Array","Result","makeGrouped","key","transactionKey","fnUntraced","entries","inputs","partitionRequests","results","execute","pipe","provideContext","context","expected","actual","decodedResults","i","completeUnsafe","succeed","grouped","decodeResults","resultMap","empty","len","result","ResultGroupKey","group","get","_tag","set","value","push","entry","RequestGroupKey","constNoSuchElement","findById","idMap","partitionRequestsById","Id","id","ResultId","remove","isEmpty","forEach","void_","void","fail","NoSuchElementError","requests","schema","encode","encodeEffect","handle","matchCauseEager","onFailure","cause","failCause","onSuccess","byIdMap","client","mapUnsafe","undefined","conn","transactionService","byReferenceUnsafe"],"sources":["../../../src/unstable/sql/SqlResolver.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "effect",
3
3
  "type": "module",
4
- "version": "4.0.0-beta.56",
4
+ "version": "4.0.0-beta.58",
5
5
  "license": "MIT",
6
6
  "description": "The missing standard library for TypeScript, for writing production-grade software.",
7
7
  "homepage": "https://effect.website",
package/src/Effect.ts CHANGED
@@ -13342,6 +13342,14 @@ export const interruptibleMask: <A, E, R>(
13342
13342
  ) => Effect<A, E, R>
13343
13343
  ) => Effect<A, E, R> = internal.interruptibleMask
13344
13344
 
13345
+ /**
13346
+ * Creates an AbortSignal that is managed by the provided scope.
13347
+ *
13348
+ * @since 4.0.0
13349
+ * @category Interruption
13350
+ */
13351
+ export const abortSignal: Effect<AbortSignal, never, Scope> = internal.abortSignal
13352
+
13345
13353
  // -----------------------------------------------------------------------------
13346
13354
  // Repetition & Recursion
13347
13355
  // -----------------------------------------------------------------------------
package/src/Stream.ts CHANGED
@@ -17810,20 +17810,31 @@ export const mkString = <E, R>(self: Stream<string, E, R>): Effect.Effect<string
17810
17810
  * @category Destructors
17811
17811
  */
17812
17812
  export const mkUint8Array = <E, R>(self: Stream<Uint8Array, E, R>): Effect.Effect<Uint8Array, E, R> =>
17813
- Channel.runFold(
17814
- self.channel,
17815
- () => new Uint8Array(0),
17816
- (acc, chunk) => {
17817
- let chunkLength = 0
17818
- for (let i = 0; i < chunk.length; i++) {
17819
- chunkLength += chunk[i].length
17813
+ Effect.map(
17814
+ Channel.runFold(
17815
+ self.channel,
17816
+ (): {
17817
+ bytes: number
17818
+ readonly arrays: Array<Uint8Array>
17819
+ } => ({
17820
+ bytes: 0,
17821
+ arrays: []
17822
+ }),
17823
+ (acc, chunk) => {
17824
+ for (let i = 0; i < chunk.length; i++) {
17825
+ acc.bytes += chunk[i].length
17826
+ acc.arrays.push(chunk[i])
17827
+ }
17828
+ return acc
17820
17829
  }
17821
- const result = new Uint8Array(acc.length + chunkLength)
17822
- result.set(acc, 0)
17823
- let offset = acc.length
17824
- for (let i = 0; i < chunk.length; i++) {
17825
- result.set(chunk[i], offset)
17826
- offset += chunk[i].length
17830
+ ),
17831
+ ({ arrays, bytes }) => {
17832
+ const result = new Uint8Array(bytes)
17833
+ let offset = 0
17834
+ for (let i = 0; i < arrays.length; i++) {
17835
+ const array = arrays[i]
17836
+ result.set(array, offset)
17837
+ offset += array.length
17827
17838
  }
17828
17839
  return result
17829
17840
  }
@@ -4177,6 +4177,15 @@ export const interruptibleMask = <A, E, R>(
4177
4177
  return f(uninterruptible)
4178
4178
  })
4179
4179
 
4180
+ /** @internal */
4181
+ export const abortSignal: Effect.Effect<AbortSignal, never, Scope.Scope> = map(
4182
+ acquireRelease(
4183
+ sync(() => new AbortController()),
4184
+ (controller) => sync(() => controller.abort())
4185
+ ),
4186
+ (_) => _.signal
4187
+ )
4188
+
4180
4189
  // ========================================================================
4181
4190
  // collecting & elements
4182
4191
  // ========================================================================
@@ -316,7 +316,10 @@ class WebHttpClientResponse extends Inspectable.Class implements HttpClientRespo
316
316
 
317
317
  private textBody?: Effect.Effect<string, Error.HttpClientError>
318
318
  get text(): Effect.Effect<string, Error.HttpClientError> {
319
- return this.textBody ??= Effect.tryPromise({
319
+ if (this.textBody) {
320
+ return this.textBody
321
+ }
322
+ this.textBody = Effect.tryPromise({
320
323
  try: () => this.source.text(),
321
324
  catch: (cause) =>
322
325
  new Error.HttpClientError({
@@ -327,6 +330,8 @@ class WebHttpClientResponse extends Inspectable.Class implements HttpClientRespo
327
330
  })
328
331
  })
329
332
  }).pipe(Effect.cached, Effect.runSync)
333
+ this.arrayBufferBody = Effect.map(this.textBody, (_) => new TextEncoder().encode(_).buffer)
334
+ return this.textBody
330
335
  }
331
336
 
332
337
  get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, Error.HttpClientError> {
@@ -361,7 +366,10 @@ class WebHttpClientResponse extends Inspectable.Class implements HttpClientRespo
361
366
 
362
367
  private arrayBufferBody?: Effect.Effect<ArrayBuffer, Error.HttpClientError>
363
368
  get arrayBuffer(): Effect.Effect<ArrayBuffer, Error.HttpClientError> {
364
- return this.arrayBufferBody ??= Effect.tryPromise({
369
+ if (this.arrayBufferBody) {
370
+ return this.arrayBufferBody
371
+ }
372
+ this.arrayBufferBody = Effect.tryPromise({
365
373
  try: () => this.source.arrayBuffer(),
366
374
  catch: (cause) =>
367
375
  new Error.HttpClientError({
@@ -372,6 +380,8 @@ class WebHttpClientResponse extends Inspectable.Class implements HttpClientRespo
372
380
  })
373
381
  })
374
382
  }).pipe(Effect.cached, Effect.runSync)
383
+ this.textBody = Effect.map(this.arrayBufferBody, (_) => new TextDecoder().decode(_))
384
+ return this.arrayBufferBody
375
385
  }
376
386
 
377
387
  pipe() {
@@ -684,54 +684,85 @@ export const builder = <A extends AsyncResult<any, any>>(self: A): Builder<
684
684
  never,
685
685
  A extends Success<infer _A, infer _E> ? _A : never,
686
686
  A extends Failure<infer _A, infer _E> ? _E : never,
687
- A extends Initial<infer _A, infer _E> ? true : never
687
+ A extends Initial<infer _A, infer _E> ? true : never,
688
+ A extends Failure<infer _A, infer _E> ? Defect | Interrupt : never
688
689
  > => new BuilderImpl(self) as any
689
690
 
690
691
  /**
691
692
  * @since 4.0.0
692
693
  * @category Builder
693
694
  */
694
- export type Builder<Out, A, E, I> =
695
+ export interface Defect {
696
+ readonly _: unique symbol
697
+ }
698
+
699
+ /**
700
+ * @since 4.0.0
701
+ * @category Builder
702
+ */
703
+ export interface Interrupt {
704
+ readonly _: unique symbol
705
+ }
706
+
707
+ /**
708
+ * @since 4.0.0
709
+ * @category Builder
710
+ */
711
+ export type Builder<Out, A, E, I, F> =
695
712
  & Pipeable
696
713
  & {
697
- onWaiting<B>(f: (result: AsyncResult<A, E>) => B): Builder<Out | B, A, E, I>
698
- onDefect<B>(f: (defect: unknown, result: Failure<A, E>) => B): Builder<Out | B, A, E, I>
714
+ onWaiting<B>(f: (result: AsyncResult<A, E>) => B): Builder<Out | B, A, E, I, F>
699
715
  orElse<B>(orElse: LazyArg<B>): Out | B
700
716
  orNull(): Out | null
701
717
  render(): [A | I] extends [never] ? Out : Out | null
702
718
  }
703
- & ([I] extends [never] ? {} :
719
+ & ([A | E | I | F] extends [never] ? {
720
+ exhaustive(): Out
721
+ } :
722
+ unknown)
723
+ & ([I] extends [never] ? unknown :
704
724
  {
705
- onInitial<B>(f: (result: Initial<A, E>) => B): Builder<Out | B, A, E, never>
706
- onInitialOrWaiting<B>(f: (result: AsyncResult<A, E>) => B): Builder<Out | B, A, E, never>
725
+ onInitial<B>(f: (result: Initial<A, E>) => B): Builder<Out | B, A, E, never, F>
726
+ onInitialOrWaiting<B>(f: (result: AsyncResult<A, E>) => B): Builder<Out | B, A, E, never, F>
707
727
  })
708
- & ([A] extends [never] ? {} :
728
+ & ([A] extends [never] ? unknown :
709
729
  {
710
- onSuccess<B>(f: (value: A, result: Success<A, E>) => B): Builder<Out | B, never, E, I>
730
+ onSuccess<B>(f: (value: A, result: Success<A, E>) => B): Builder<Out | B, never, E, I, F>
711
731
  })
712
- & ([E] extends [never] ? {} : {
713
- onFailure<B>(f: (cause: Cause.Cause<E>, result: Failure<A, E>) => B): Builder<Out | B, A, never, I>
714
-
715
- onError<B>(f: (error: E, result: Failure<A, E>) => B): Builder<Out | B, A, never, I>
732
+ & ([E] extends [never] ? unknown : {
733
+ onError<B>(f: (error: E, result: Failure<A, E>) => B): Builder<Out | B, A, never, I, F>
716
734
 
717
735
  onErrorIf<B extends E, C>(
718
736
  refinement: Refinement<E, B>,
719
737
  f: (error: B, result: Failure<A, E>) => C
720
- ): Builder<Out | C, A, Types.EqualsWith<E, B, E, Exclude<E, B>>, I>
738
+ ): Builder<Out | C, A, Types.EqualsWith<E, B, E, Exclude<E, B>>, I, F>
721
739
  onErrorIf<C>(
722
740
  predicate: Predicate<E>,
723
741
  f: (error: E, result: Failure<A, E>) => C
724
- ): Builder<Out | C, A, E, I>
742
+ ): Builder<Out | C, A, E, I, F>
725
743
 
726
744
  onErrorTag<const Tags extends ReadonlyArray<Types.Tags<E>>, B>(
727
745
  tags: Tags,
728
746
  f: (error: Types.ExtractTag<E, Tags[number]>, result: Failure<A, E>) => B
729
- ): Builder<Out | B, A, Types.ExcludeTag<E, Tags[number]>, I>
747
+ ): Builder<Out | B, A, Types.ExcludeTag<E, Tags[number]>, I, F>
730
748
  onErrorTag<const Tag extends Types.Tags<E>, B>(
731
749
  tag: Tag,
732
750
  f: (error: Types.ExtractTag<E, Tag>, result: Failure<A, E>) => B
733
- ): Builder<Out | B, A, Types.ExcludeTag<E, Tag>, I>
751
+ ): Builder<Out | B, A, Types.ExcludeTag<E, Tag>, I, F>
734
752
  })
753
+ & ([E | F] extends [never] ? unknown : {
754
+ onFailure<B>(f: (cause: Cause.Cause<E>, result: Failure<A, E>) => B): Builder<Out | B, A, never, I, never>
755
+ })
756
+ & (Interrupt extends F ? {
757
+ onInterrupt<B>(
758
+ f: (interruptors: ReadonlySet<number>, result: Failure<A, E>) => B
759
+ ): Builder<Out | B, A, E, I, Exclude<F, Interrupt>>
760
+ } :
761
+ unknown)
762
+ & (Defect extends F ? {
763
+ onDefect<B>(f: (defect: unknown, result: Failure<A, E>) => B): Builder<Out | B, A, E, I, Exclude<F, Defect>>
764
+ } :
765
+ unknown)
735
766
 
736
767
  class BuilderImpl<Out, A, E> {
737
768
  constructor(result: AsyncResult<A, E>) {
@@ -817,6 +848,13 @@ class BuilderImpl<Out, A, E> {
817
848
  })
818
849
  }
819
850
 
851
+ onInterrupt<B>(f: (interruptors: ReadonlySet<number>, result: Failure<A, E>) => B): BuilderImpl<Out | B, A, E> {
852
+ return this.when(isFailure, (result) => {
853
+ const interruptors = Cause.filterInterruptors(result.cause)
854
+ return Result.isFailure(interruptors) ? Option.none() : Option.some(f(interruptors.success, result))
855
+ })
856
+ }
857
+
820
858
  orElse<B>(orElse: LazyArg<B>): Out | B {
821
859
  return Option.getOrElse(this.output, orElse)
822
860
  }
@@ -833,6 +871,10 @@ class BuilderImpl<Out, A, E> {
833
871
  }
834
872
  return null
835
873
  }
874
+
875
+ exhaustive(): Out {
876
+ return this.render() as Out
877
+ }
836
878
  }
837
879
 
838
880
  /**
@@ -46,6 +46,11 @@ export interface SqlClient extends Constructor {
46
46
  self: Effect.Effect<A, E, R>
47
47
  ) => Effect.Effect<A, E | SqlError, R>
48
48
 
49
+ /**
50
+ * The transaction service for this client.
51
+ */
52
+ readonly transactionService: Context.Service<TransactionConnection, TransactionConnection.Service>
53
+
49
54
  /**
50
55
  * Use the Reactivity service from @effect/experimental to create a reactive
51
56
  * query.
@@ -85,6 +90,7 @@ export namespace SqlClient {
85
90
  readonly compiler: Compiler
86
91
  readonly transactionAcquirer?: Connection.Acquirer
87
92
  readonly spanAttributes: ReadonlyArray<readonly [string, unknown]>
93
+ readonly transactionService?: Context.Service<TransactionConnection, TransactionConnection.Service>
88
94
  readonly beginTransaction?: string | undefined
89
95
  readonly rollback?: string | undefined
90
96
  readonly commit?: string | undefined
@@ -98,13 +104,16 @@ export namespace SqlClient {
98
104
  }
99
105
  }
100
106
 
107
+ let clientIdCounter = 0
108
+
101
109
  /**
102
110
  * @category constructors
103
111
  * @since 4.0.0
104
112
  */
105
113
  export const make = Effect.fnUntraced(function*(options: SqlClient.MakeOptions) {
114
+ const transactionService = options.transactionService ?? TransactionConnection(clientIdCounter++)
106
115
  const getConnection = Effect.flatMap(
107
- Effect.serviceOption(TransactionConnection),
116
+ Effect.serviceOption(transactionService),
108
117
  Option.match({
109
118
  onNone: () => options.acquirer,
110
119
  onSome: ([conn]) => Effect.succeed(conn)
@@ -118,7 +127,7 @@ export const make = Effect.fnUntraced(function*(options: SqlClient.MakeOptions)
118
127
  const rollbackSavepoint = options.rollbackSavepoint ?? ((name: string) => `ROLLBACK TO SAVEPOINT ${name}`)
119
128
  const transactionAcquirer = options.transactionAcquirer ?? options.acquirer
120
129
  const withTransaction = makeWithTransaction({
121
- transactionService: TransactionConnection,
130
+ transactionService,
122
131
  spanAttributes: options.spanAttributes,
123
132
  acquireConnection: Effect.flatMap(
124
133
  Scope.make(),
@@ -138,6 +147,7 @@ export const make = Effect.fnUntraced(function*(options: SqlClient.MakeOptions)
138
147
  [TypeId]: TypeId as typeof TypeId,
139
148
  safe: undefined as any,
140
149
  withTransaction,
150
+ transactionService,
141
151
  reserve: transactionAcquirer,
142
152
  withoutTransforms(): any {
143
153
  if (options.transformRows === undefined) {
@@ -189,8 +199,8 @@ export const makeWithTransaction = <I, S>(options: {
189
199
  readonly rollback: (conn: NoInfer<S>) => Effect.Effect<void, SqlError>
190
200
  readonly rollbackSavepoint: (conn: NoInfer<S>, id: number) => Effect.Effect<void, SqlError>
191
201
  }) =>
192
- <R, E, A>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E | SqlError, R> =>
193
- Effect.uninterruptibleMask((restore) =>
202
+ <R, E, A>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E | SqlError, R> => {
203
+ return Effect.uninterruptibleMask((restore) =>
194
204
  Effect.useSpan(
195
205
  "sql.transaction",
196
206
  { kind: "client" },
@@ -249,15 +259,32 @@ export const makeWithTransaction = <I, S>(options: {
249
259
  })
250
260
  )
251
261
  )
262
+ }
252
263
 
253
264
  /**
254
265
  * @since 4.0.0
255
266
  */
256
- export class TransactionConnection
257
- extends Context.Service<TransactionConnection, readonly [conn: Connection.Connection, depth: number]>()(
258
- "effect/sql/SqlClient/TransactionConnection"
259
- )
260
- {}
267
+ export interface TransactionConnection {
268
+ readonly _: unique symbol
269
+ }
270
+
271
+ /**
272
+ * @since 4.0.0
273
+ */
274
+ export declare namespace TransactionConnection {
275
+ /**
276
+ * @since 4.0.0
277
+ */
278
+ export type Service = readonly [conn: Connection.Connection, depth: number]
279
+ }
280
+
281
+ /**
282
+ * @since 4.0.0
283
+ */
284
+ export const TransactionConnection = (
285
+ clientId: number
286
+ ): Context.Service<TransactionConnection, TransactionConnection.Service> =>
287
+ Context.Service(`effect/sql/SqlClient/TransactionConnection/${clientId}`)
261
288
 
262
289
  /**
263
290
  * @since 4.0.0
@@ -102,7 +102,7 @@ export const ordered = <Req extends Schema.Top, Res extends Schema.Top, _, E, R>
102
102
  E | ResultLengthMismatch,
103
103
  Req["EncodingServices"] | Res["DecodingServices"] | R
104
104
  >,
105
- SqlClient.TransactionConnection["Service"] | undefined
105
+ SqlClient.TransactionConnection.Service | undefined
106
106
  >({
107
107
  key: transactionKey,
108
108
  resolver: Effect.fnUntraced(function*(entries) {
@@ -158,7 +158,7 @@ export const grouped = <Req extends Schema.Top, Res extends Schema.Top, K, Row,
158
158
  E | Schema.SchemaError | Cause.NoSuchElementError,
159
159
  Req["EncodingServices"] | Res["DecodingServices"] | R
160
160
  >,
161
- SqlClient.TransactionConnection["Service"] | undefined
161
+ SqlClient.TransactionConnection.Service | undefined
162
162
  >({
163
163
  key: transactionKey,
164
164
  resolver: Effect.fnUntraced(function*(entries) {
@@ -224,13 +224,9 @@ export const findById = <Id extends Schema.Top, Res extends Schema.Top, Row, E,
224
224
  E | Schema.SchemaError | Cause.NoSuchElementError,
225
225
  Id["EncodingServices"] | Res["DecodingServices"] | R
226
226
  >,
227
- SqlClient.TransactionConnection["Service"] | undefined
227
+ SqlClient.TransactionConnection.Service | undefined
228
228
  >({
229
- key(entry) {
230
- const conn = entry.context.mapUnsafe.get(SqlClient.TransactionConnection.key)
231
- if (!conn) return undefined
232
- return Equal.byReferenceUnsafe(conn)
233
- },
229
+ key: transactionKey,
234
230
  resolver: Effect.fnUntraced(function*(entries) {
235
231
  const [inputs, idMap] = yield* partitionRequestsById(entries, options.Id)
236
232
  const results = yield* options.execute(inputs as any).pipe(
@@ -281,7 +277,7 @@ const void_ = <Req extends Schema.Top, _, E, R>(
281
277
  E | Schema.SchemaError,
282
278
  Req["EncodingServices"] | R
283
279
  >,
284
- SqlClient.TransactionConnection["Service"] | undefined
280
+ SqlClient.TransactionConnection.Service | undefined
285
281
  >({
286
282
  key: transactionKey,
287
283
  resolver: Effect.fnUntraced(function*(entries) {
@@ -359,8 +355,10 @@ const partitionRequestsById = function*<In, A, E, R, InE>(
359
355
  return [inputs, byIdMap] as const
360
356
  }
361
357
 
362
- function transactionKey<A>(entry: Request.Entry<A>): SqlClient.TransactionConnection["Service"] | undefined {
363
- const conn = entry.context.mapUnsafe.get(SqlClient.TransactionConnection.key)
358
+ function transactionKey<A>(entry: Request.Entry<A>): SqlClient.TransactionConnection.Service | undefined {
359
+ const client = entry.context.mapUnsafe.get(SqlClient.SqlClient.key)
360
+ if (!client) return undefined
361
+ const conn = entry.context.mapUnsafe.get(client.transactionService.key)
364
362
  if (!conn) return undefined
365
363
  return Equal.byReferenceUnsafe(conn)
366
364
  }