@effect/platform-browser 4.0.0-beta.9 → 4.0.0-beta.90

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.
Files changed (91) hide show
  1. package/dist/BrowserCrypto.d.ts +49 -0
  2. package/dist/BrowserCrypto.d.ts.map +1 -0
  3. package/dist/BrowserCrypto.js +87 -0
  4. package/dist/BrowserCrypto.js.map +1 -0
  5. package/dist/BrowserHttpClient.d.ts +48 -19
  6. package/dist/BrowserHttpClient.d.ts.map +1 -1
  7. package/dist/BrowserHttpClient.js +62 -21
  8. package/dist/BrowserHttpClient.js.map +1 -1
  9. package/dist/BrowserKeyValueStore.d.ts +37 -14
  10. package/dist/BrowserKeyValueStore.d.ts.map +1 -1
  11. package/dist/BrowserKeyValueStore.js +144 -10
  12. package/dist/BrowserKeyValueStore.js.map +1 -1
  13. package/dist/BrowserPersistence.d.ts +40 -0
  14. package/dist/BrowserPersistence.d.ts.map +1 -0
  15. package/dist/BrowserPersistence.js +207 -0
  16. package/dist/BrowserPersistence.js.map +1 -0
  17. package/dist/BrowserRuntime.d.ts +64 -4
  18. package/dist/BrowserRuntime.d.ts.map +1 -1
  19. package/dist/BrowserRuntime.js +19 -1
  20. package/dist/BrowserRuntime.js.map +1 -1
  21. package/dist/BrowserSocket.d.ts +33 -6
  22. package/dist/BrowserSocket.d.ts.map +1 -1
  23. package/dist/BrowserSocket.js +33 -6
  24. package/dist/BrowserSocket.js.map +1 -1
  25. package/dist/BrowserStream.d.ts +19 -7
  26. package/dist/BrowserStream.d.ts.map +1 -1
  27. package/dist/BrowserStream.js +19 -7
  28. package/dist/BrowserStream.js.map +1 -1
  29. package/dist/BrowserWorker.d.ts +25 -4
  30. package/dist/BrowserWorker.d.ts.map +1 -1
  31. package/dist/BrowserWorker.js +34 -6
  32. package/dist/BrowserWorker.js.map +1 -1
  33. package/dist/BrowserWorkerRunner.d.ts +31 -6
  34. package/dist/BrowserWorkerRunner.d.ts.map +1 -1
  35. package/dist/BrowserWorkerRunner.js +43 -10
  36. package/dist/BrowserWorkerRunner.js.map +1 -1
  37. package/dist/Clipboard.d.ts +59 -14
  38. package/dist/Clipboard.d.ts.map +1 -1
  39. package/dist/Clipboard.js +34 -12
  40. package/dist/Clipboard.js.map +1 -1
  41. package/dist/Geolocation.d.ts +80 -25
  42. package/dist/Geolocation.d.ts.map +1 -1
  43. package/dist/Geolocation.js +48 -17
  44. package/dist/Geolocation.js.map +1 -1
  45. package/dist/IndexedDb.d.ts +75 -0
  46. package/dist/IndexedDb.d.ts.map +1 -0
  47. package/dist/IndexedDb.js +85 -0
  48. package/dist/IndexedDb.js.map +1 -0
  49. package/dist/IndexedDbDatabase.d.ts +153 -0
  50. package/dist/IndexedDbDatabase.d.ts.map +1 -0
  51. package/dist/IndexedDbDatabase.js +327 -0
  52. package/dist/IndexedDbDatabase.js.map +1 -0
  53. package/dist/IndexedDbQueryBuilder.d.ts +422 -0
  54. package/dist/IndexedDbQueryBuilder.d.ts.map +1 -0
  55. package/dist/IndexedDbQueryBuilder.js +935 -0
  56. package/dist/IndexedDbQueryBuilder.js.map +1 -0
  57. package/dist/IndexedDbTable.d.ts +166 -0
  58. package/dist/IndexedDbTable.d.ts.map +1 -0
  59. package/dist/IndexedDbTable.js +71 -0
  60. package/dist/IndexedDbTable.js.map +1 -0
  61. package/dist/IndexedDbVersion.d.ts +99 -0
  62. package/dist/IndexedDbVersion.d.ts.map +1 -0
  63. package/dist/IndexedDbVersion.js +44 -0
  64. package/dist/IndexedDbVersion.js.map +1 -0
  65. package/dist/Permissions.d.ts +52 -16
  66. package/dist/Permissions.d.ts.map +1 -1
  67. package/dist/Permissions.js +42 -11
  68. package/dist/Permissions.js.map +1 -1
  69. package/dist/index.d.ts +38 -10
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +38 -10
  72. package/dist/index.js.map +1 -1
  73. package/package.json +4 -3
  74. package/src/BrowserCrypto.ts +97 -0
  75. package/src/BrowserHttpClient.ts +72 -27
  76. package/src/BrowserKeyValueStore.ts +160 -12
  77. package/src/BrowserPersistence.ts +334 -0
  78. package/src/BrowserRuntime.ts +64 -4
  79. package/src/BrowserSocket.ts +33 -6
  80. package/src/BrowserStream.ts +19 -7
  81. package/src/BrowserWorker.ts +34 -6
  82. package/src/BrowserWorkerRunner.ts +43 -10
  83. package/src/Clipboard.ts +56 -14
  84. package/src/Geolocation.ts +76 -21
  85. package/src/IndexedDb.ts +113 -0
  86. package/src/IndexedDbDatabase.ts +648 -0
  87. package/src/IndexedDbQueryBuilder.ts +2032 -0
  88. package/src/IndexedDbTable.ts +260 -0
  89. package/src/IndexedDbVersion.ts +138 -0
  90. package/src/Permissions.ts +47 -14
  91. package/src/index.ts +45 -10
@@ -1,15 +1,25 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Effect service for the browser Permissions API.
3
+ *
4
+ * This module defines a `Permissions` service backed by
5
+ * `navigator.permissions`. The service exposes `query`, which returns the
6
+ * browser `PermissionStatus` for a permission name. Failed browser operations
7
+ * are represented as `PermissionsError` values with `InvalidStateError` or
8
+ * `TypeError` reasons, and `layer` provides the browser-backed service.
9
+ *
10
+ * @since 4.0.0
3
11
  */
12
+ import * as Context from "effect/Context";
4
13
  import * as Data from "effect/Data";
5
14
  import * as Effect from "effect/Effect";
6
15
  import * as Layer from "effect/Layer";
7
- import * as ServiceMap from "effect/ServiceMap";
8
16
  const TypeId = "~@effect/platform-browser/Permissions";
9
17
  const ErrorTypeId = "~@effect/platform-browser/Permissions/PermissionsError";
10
18
  /**
11
- * @since 1.0.0
19
+ * Error reason for an `InvalidStateError` raised by the browser Permissions API.
20
+ *
12
21
  * @category errors
22
+ * @since 4.0.0
13
23
  */
14
24
  export class PermissionsInvalidStateError extends /*#__PURE__*/Data.TaggedError("InvalidStateError") {
15
25
  get message() {
@@ -17,8 +27,10 @@ export class PermissionsInvalidStateError extends /*#__PURE__*/Data.TaggedError(
17
27
  }
18
28
  }
19
29
  /**
20
- * @since 1.0.0
30
+ * Error reason for a `TypeError` raised by the browser Permissions API.
31
+ *
21
32
  * @category errors
33
+ * @since 4.0.0
22
34
  */
23
35
  export class PermissionsTypeError extends /*#__PURE__*/Data.TaggedError("TypeError") {
24
36
  get message() {
@@ -26,8 +38,10 @@ export class PermissionsTypeError extends /*#__PURE__*/Data.TaggedError("TypeErr
26
38
  }
27
39
  }
28
40
  /**
29
- * @since 1.0.0
41
+ * Tagged error wrapping a browser Permissions API failure reason.
42
+ *
30
43
  * @category errors
44
+ * @since 4.0.0
31
45
  */
32
46
  export class PermissionsError extends /*#__PURE__*/Data.TaggedError("PermissionsError") {
33
47
  constructor(props) {
@@ -42,15 +56,32 @@ export class PermissionsError extends /*#__PURE__*/Data.TaggedError("Permissions
42
56
  }
43
57
  }
44
58
  /**
45
- * @since 1.0.0
46
- * @category Service
59
+ * Service tag for browser permission querying.
60
+ *
61
+ * **When to use**
62
+ *
63
+ * Use when you need to require or provide browser permission querying through
64
+ * Effect's context.
65
+ *
66
+ * @category services
67
+ * @since 4.0.0
47
68
  */
48
- export const Permissions = /*#__PURE__*/ServiceMap.Service(TypeId);
69
+ export const Permissions = /*#__PURE__*/Context.Service(TypeId);
49
70
  /**
50
- * A layer that directly interfaces with the `navigator.permissions` api
71
+ * Provides the `Permissions` service using the browser `navigator.permissions` API.
72
+ *
73
+ * **When to use**
74
+ *
75
+ * Use when you need a live browser `Permissions` service backed by the ambient
76
+ * `navigator.permissions` implementation.
77
+ *
78
+ * **Details**
79
+ *
80
+ * `query` delegates to `navigator.permissions.query({ name })` and wraps
81
+ * rejected browser operations in `PermissionsError`.
51
82
  *
52
- * @since 1.0.0
53
- * @category Layers
83
+ * @category layers
84
+ * @since 4.0.0
54
85
  */
55
86
  export const layer = /*#__PURE__*/Layer.succeed(Permissions, /*#__PURE__*/Permissions.of({
56
87
  [TypeId]: TypeId,
@@ -1 +1 @@
1
- {"version":3,"file":"Permissions.js","names":["Data","Effect","Layer","ServiceMap","TypeId","ErrorTypeId","PermissionsInvalidStateError","TaggedError","message","_tag","PermissionsTypeError","PermissionsError","constructor","props","cause","reason","Permissions","Service","layer","succeed","of","query","name","tryPromise","try","navigator","permissions","catch","DOMException"],"sources":["../src/Permissions.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,IAAI,MAAM,aAAa;AACnC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,UAAU,MAAM,mBAAmB;AAE/C,MAAMC,MAAM,GAAG,uCAAuC;AACtD,MAAMC,WAAW,GAAG,wDAAwD;AAyB5E;;;;AAIA,OAAM,MAAOC,4BAA6B,sBAAQN,IAAI,CAACO,WAAW,CAAC,mBAAmB,CAEpF;EACA,IAAaC,OAAOA,CAAA;IAClB,OAAO,IAAI,CAACC,IAAI;EAClB;;AAGF;;;;AAIA,OAAM,MAAOC,oBAAqB,sBAAQV,IAAI,CAACO,WAAW,CAAC,WAAW,CAEpE;EACA,IAAaC,OAAOA,CAAA;IAClB,OAAO,IAAI,CAACC,IAAI;EAClB;;AASF;;;;AAIA,OAAM,MAAOE,gBAAiB,sBAAQX,IAAI,CAACO,WAAW,CAAC,kBAAkB,CAEvE;EACAK,YAAYC,KAAkD;IAC5D,KAAK,CAAC;MACJ,GAAGA,KAAK;MACRC,KAAK,EAAED,KAAK,CAACE,MAAM,CAACD;KACd,CAAC;EACX;EAES,CAACT,WAAW,IAAIA,WAAW;EAEpC,IAAaG,OAAOA,CAAA;IAClB,OAAO,IAAI,CAACO,MAAM,CAACP,OAAO;EAC5B;;AAGF;;;;AAIA,OAAO,MAAMQ,WAAW,gBAAiDb,UAAU,CAACc,OAAO,CAAcb,MAAM,CAAC;AAEhH;;;;;;AAMA,OAAO,MAAMc,KAAK,gBAA6BhB,KAAK,CAACiB,OAAO,CAC1DH,WAAW,eACXA,WAAW,CAACI,EAAE,CAAC;EACb,CAAChB,MAAM,GAAGA,MAAM;EAChBiB,KAAK,EAAGC,IAAI,IACVrB,MAAM,CAACsB,UAAU,CAAC;IAChBC,GAAG,EAAEA,CAAA,KAAMC,SAAS,CAACC,WAAW,CAACL,KAAK,CAAC;MAAEC;IAAI,CAAE,CAAiB;IAChEK,KAAK,EAAGb,KAAK,IACX,IAAIH,gBAAgB,CAAC;MACnBI,MAAM,EAAED,KAAK,YAAYc,YAAY,GACjC,IAAItB,4BAA4B,CAAC;QAAEQ;MAAK,CAAE,CAAC,GAC3C,IAAIJ,oBAAoB,CAAC;QAAEI;MAAK,CAAE;KACvC;GACJ;CACJ,CAAC,CACH","ignoreList":[]}
1
+ {"version":3,"file":"Permissions.js","names":["Context","Data","Effect","Layer","TypeId","ErrorTypeId","PermissionsInvalidStateError","TaggedError","message","_tag","PermissionsTypeError","PermissionsError","constructor","props","cause","reason","Permissions","Service","layer","succeed","of","query","name","tryPromise","try","navigator","permissions","catch","DOMException"],"sources":["../src/Permissions.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;AAWA,OAAO,KAAKA,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,IAAI,MAAM,aAAa;AACnC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAErC,MAAMC,MAAM,GAAG,uCAAuC;AACtD,MAAMC,WAAW,GAAG,wDAAwD;AAyB5E;;;;;;AAMA,OAAM,MAAOC,4BAA6B,sBAAQL,IAAI,CAACM,WAAW,CAAC,mBAAmB,CAEpF;EACA,IAAaC,OAAOA,CAAA;IAClB,OAAO,IAAI,CAACC,IAAI;EAClB;;AAGF;;;;;;AAMA,OAAM,MAAOC,oBAAqB,sBAAQT,IAAI,CAACM,WAAW,CAAC,WAAW,CAEpE;EACA,IAAaC,OAAOA,CAAA;IAClB,OAAO,IAAI,CAACC,IAAI;EAClB;;AAWF;;;;;;AAMA,OAAM,MAAOE,gBAAiB,sBAAQV,IAAI,CAACM,WAAW,CAAC,kBAAkB,CAEvE;EACAK,YAAYC,KAAkD;IAC5D,KAAK,CAAC;MACJ,GAAGA,KAAK;MACRC,KAAK,EAAED,KAAK,CAACE,MAAM,CAACD;KACd,CAAC;EACX;EAES,CAACT,WAAW,IAAIA,WAAW;EAEpC,IAAaG,OAAOA,CAAA;IAClB,OAAO,IAAI,CAACO,MAAM,CAACP,OAAO;EAC5B;;AAGF;;;;;;;;;;;AAWA,OAAO,MAAMQ,WAAW,gBAA8ChB,OAAO,CAACiB,OAAO,CAAcb,MAAM,CAAC;AAE1G;;;;;;;;;;;;;;;;AAgBA,OAAO,MAAMc,KAAK,gBAA6Bf,KAAK,CAACgB,OAAO,CAC1DH,WAAW,eACXA,WAAW,CAACI,EAAE,CAAC;EACb,CAAChB,MAAM,GAAGA,MAAM;EAChBiB,KAAK,EAAGC,IAAI,IACVpB,MAAM,CAACqB,UAAU,CAAC;IAChBC,GAAG,EAAEA,CAAA,KAAMC,SAAS,CAACC,WAAW,CAACL,KAAK,CAAC;MAAEC;IAAI,CAAE,CAAiB;IAChEK,KAAK,EAAGb,KAAK,IACX,IAAIH,gBAAgB,CAAC;MACnBI,MAAM,EAAED,KAAK,YAAYc,YAAY,GACjC,IAAItB,4BAA4B,CAAC;QAAEQ;MAAK,CAAE,CAAC,GAC3C,IAAIJ,oBAAoB,CAAC;QAAEI;MAAK,CAAE;KACvC;GACJ;CACJ,CAAC,CACH","ignoreList":[]}
package/dist/index.d.ts CHANGED
@@ -1,44 +1,72 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * @since 4.0.0
3
3
  */
4
4
  /**
5
5
  * @since 1.0.0
6
6
  */
7
+ export * as BrowserCrypto from "./BrowserCrypto.ts";
8
+ /**
9
+ * @since 4.0.0
10
+ */
7
11
  export * as BrowserHttpClient from "./BrowserHttpClient.ts";
8
12
  /**
9
- * @since 1.0.0
13
+ * @since 4.0.0
10
14
  */
11
15
  export * as BrowserKeyValueStore from "./BrowserKeyValueStore.ts";
12
16
  /**
13
- * @since 1.0.0
17
+ * @since 4.0.0
18
+ */
19
+ export * as BrowserPersistence from "./BrowserPersistence.ts";
20
+ /**
21
+ * @since 4.0.0
14
22
  */
15
23
  export * as BrowserRuntime from "./BrowserRuntime.ts";
16
24
  /**
17
- * @since 1.0.0
25
+ * @since 4.0.0
18
26
  */
19
27
  export * as BrowserSocket from "./BrowserSocket.ts";
20
28
  /**
21
- * @since 1.0.0
29
+ * @since 4.0.0
22
30
  */
23
31
  export * as BrowserStream from "./BrowserStream.ts";
24
32
  /**
25
- * @since 1.0.0
33
+ * @since 4.0.0
26
34
  */
27
35
  export * as BrowserWorker from "./BrowserWorker.ts";
28
36
  /**
29
- * @since 1.0.0
37
+ * @since 4.0.0
30
38
  */
31
39
  export * as BrowserWorkerRunner from "./BrowserWorkerRunner.ts";
32
40
  /**
33
- * @since 1.0.0
41
+ * @since 4.0.0
34
42
  */
35
43
  export * as Clipboard from "./Clipboard.ts";
36
44
  /**
37
- * @since 1.0.0
45
+ * @since 4.0.0
38
46
  */
39
47
  export * as Geolocation from "./Geolocation.ts";
40
48
  /**
41
- * @since 1.0.0
49
+ * @since 4.0.0
50
+ */
51
+ export * as IndexedDb from "./IndexedDb.ts";
52
+ /**
53
+ * @since 4.0.0
54
+ */
55
+ export * as IndexedDbDatabase from "./IndexedDbDatabase.ts";
56
+ /**
57
+ * @since 4.0.0
58
+ */
59
+ export * as IndexedDbQueryBuilder from "./IndexedDbQueryBuilder.ts";
60
+ /**
61
+ * @since 4.0.0
62
+ */
63
+ export * as IndexedDbTable from "./IndexedDbTable.ts";
64
+ /**
65
+ * @since 4.0.0
66
+ */
67
+ export * as IndexedDbVersion from "./IndexedDbVersion.ts";
68
+ /**
69
+ * @since 4.0.0
42
70
  */
43
71
  export * as Permissions from "./Permissions.ts";
44
72
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAE3D;;GAEG;AACH,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAA;AAEjE;;GAEG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;GAEG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH,OAAO,KAAK,mBAAmB,MAAM,0BAA0B,CAAA;AAE/D;;GAEG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;GAEG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAE/C;;GAEG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAE3D;;GAEG;AACH,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAA;AAEjE;;GAEG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAE7D;;GAEG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;GAEG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH,OAAO,KAAK,mBAAmB,MAAM,0BAA0B,CAAA;AAE/D;;GAEG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;GAEG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAE/C;;GAEG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;GAEG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAE3D;;GAEG;AACH,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAA;AAEnE;;GAEG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;GAEG;AACH,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AAEzD;;GAEG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA"}
package/dist/index.js CHANGED
@@ -1,45 +1,73 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * @since 4.0.0
3
3
  */
4
4
  // @barrel: Auto-generated exports. Do not edit manually.
5
5
  /**
6
6
  * @since 1.0.0
7
7
  */
8
+ export * as BrowserCrypto from "./BrowserCrypto.js";
9
+ /**
10
+ * @since 4.0.0
11
+ */
8
12
  export * as BrowserHttpClient from "./BrowserHttpClient.js";
9
13
  /**
10
- * @since 1.0.0
14
+ * @since 4.0.0
11
15
  */
12
16
  export * as BrowserKeyValueStore from "./BrowserKeyValueStore.js";
13
17
  /**
14
- * @since 1.0.0
18
+ * @since 4.0.0
19
+ */
20
+ export * as BrowserPersistence from "./BrowserPersistence.js";
21
+ /**
22
+ * @since 4.0.0
15
23
  */
16
24
  export * as BrowserRuntime from "./BrowserRuntime.js";
17
25
  /**
18
- * @since 1.0.0
26
+ * @since 4.0.0
19
27
  */
20
28
  export * as BrowserSocket from "./BrowserSocket.js";
21
29
  /**
22
- * @since 1.0.0
30
+ * @since 4.0.0
23
31
  */
24
32
  export * as BrowserStream from "./BrowserStream.js";
25
33
  /**
26
- * @since 1.0.0
34
+ * @since 4.0.0
27
35
  */
28
36
  export * as BrowserWorker from "./BrowserWorker.js";
29
37
  /**
30
- * @since 1.0.0
38
+ * @since 4.0.0
31
39
  */
32
40
  export * as BrowserWorkerRunner from "./BrowserWorkerRunner.js";
33
41
  /**
34
- * @since 1.0.0
42
+ * @since 4.0.0
35
43
  */
36
44
  export * as Clipboard from "./Clipboard.js";
37
45
  /**
38
- * @since 1.0.0
46
+ * @since 4.0.0
39
47
  */
40
48
  export * as Geolocation from "./Geolocation.js";
41
49
  /**
42
- * @since 1.0.0
50
+ * @since 4.0.0
51
+ */
52
+ export * as IndexedDb from "./IndexedDb.js";
53
+ /**
54
+ * @since 4.0.0
55
+ */
56
+ export * as IndexedDbDatabase from "./IndexedDbDatabase.js";
57
+ /**
58
+ * @since 4.0.0
59
+ */
60
+ export * as IndexedDbQueryBuilder from "./IndexedDbQueryBuilder.js";
61
+ /**
62
+ * @since 4.0.0
63
+ */
64
+ export * as IndexedDbTable from "./IndexedDbTable.js";
65
+ /**
66
+ * @since 4.0.0
67
+ */
68
+ export * as IndexedDbVersion from "./IndexedDbVersion.js";
69
+ /**
70
+ * @since 4.0.0
43
71
  */
44
72
  export * as Permissions from "./Permissions.js";
45
73
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["BrowserHttpClient","BrowserKeyValueStore","BrowserRuntime","BrowserSocket","BrowserStream","BrowserWorker","BrowserWorkerRunner","Clipboard","Geolocation","Permissions"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;AAEA;;;AAGA,OAAO,KAAKA,iBAAiB,MAAM,wBAAwB;AAE3D;;;AAGA,OAAO,KAAKC,oBAAoB,MAAM,2BAA2B;AAEjE;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,mBAAmB,MAAM,0BAA0B;AAE/D;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,WAAW,MAAM,kBAAkB;AAE/C;;;AAGA,OAAO,KAAKC,WAAW,MAAM,kBAAkB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["BrowserCrypto","BrowserHttpClient","BrowserKeyValueStore","BrowserPersistence","BrowserRuntime","BrowserSocket","BrowserStream","BrowserWorker","BrowserWorkerRunner","Clipboard","Geolocation","IndexedDb","IndexedDbDatabase","IndexedDbQueryBuilder","IndexedDbTable","IndexedDbVersion","Permissions"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;AAEA;;;AAGA,OAAO,KAAKA,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,iBAAiB,MAAM,wBAAwB;AAE3D;;;AAGA,OAAO,KAAKC,oBAAoB,MAAM,2BAA2B;AAEjE;;;AAGA,OAAO,KAAKC,kBAAkB,MAAM,yBAAyB;AAE7D;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,mBAAmB,MAAM,0BAA0B;AAE/D;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,WAAW,MAAM,kBAAkB;AAE/C;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,iBAAiB,MAAM,wBAAwB;AAE3D;;;AAGA,OAAO,KAAKC,qBAAqB,MAAM,4BAA4B;AAEnE;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;AAGA,OAAO,KAAKC,gBAAgB,MAAM,uBAAuB;AAEzD;;;AAGA,OAAO,KAAKC,WAAW,MAAM,kBAAkB","ignoreList":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@effect/platform-browser",
3
3
  "type": "module",
4
- "version": "4.0.0-beta.9",
4
+ "version": "4.0.0-beta.90",
5
5
  "license": "MIT",
6
6
  "description": "Platform specific implementations for the browser",
7
7
  "homepage": "https://effect.website",
@@ -45,11 +45,12 @@
45
45
  "provenance": true
46
46
  },
47
47
  "peerDependencies": {
48
- "effect": "^4.0.0-beta.9"
48
+ "effect": "^4.0.0-beta.90"
49
49
  },
50
50
  "devDependencies": {
51
51
  "mock-xmlhttprequest": "^8.4.1",
52
- "effect": "^4.0.0-beta.9"
52
+ "fake-indexeddb": "^6.2.5",
53
+ "effect": "^4.0.0-beta.90"
53
54
  },
54
55
  "dependencies": {
55
56
  "multipasta": "^0.2.7"
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Browser-backed implementation of Effect's Crypto service.
3
+ *
4
+ * This module provides a `Crypto.Crypto` layer backed by the Web Crypto API.
5
+ * The {@link WebCrypto} context reference defaults to `globalThis.crypto`, so
6
+ * browser programs can use the standard implementation while tests or embedded
7
+ * runtimes can provide their own `Crypto` object.
8
+ *
9
+ * @since 1.0.0
10
+ */
11
+ import * as Context from "effect/Context"
12
+ import * as EffectCrypto from "effect/Crypto"
13
+ import * as Effect from "effect/Effect"
14
+ import * as Layer from "effect/Layer"
15
+ import * as PlatformError from "effect/PlatformError"
16
+
17
+ /**
18
+ * Provides Browser Web Crypto APIs used by the Crypto service implementation.
19
+ *
20
+ * **When to use**
21
+ *
22
+ * Use to override the browser `Crypto` object used by the platform crypto
23
+ * layer.
24
+ *
25
+ * @category references
26
+ * @since 1.0.0
27
+ */
28
+ export const WebCrypto = Context.Reference<Crypto>("@effect/platform-browser/Crypto/WebCrypto", {
29
+ defaultValue: () => globalThis.crypto
30
+ })
31
+
32
+ /**
33
+ * Layer that directly interfaces with the Web Crypto API.
34
+ *
35
+ * **When to use**
36
+ *
37
+ * Use to provide cryptographic randomness, UUID generation, and digest
38
+ * operations in browser runtimes backed by `globalThis.crypto`.
39
+ *
40
+ * **Details**
41
+ *
42
+ * Random bytes are produced with `crypto.getRandomValues`. Digests are computed
43
+ * with `crypto.subtle.digest` and returned as `Uint8Array` values.
44
+ *
45
+ * **Gotchas**
46
+ *
47
+ * The layer dies if the Web Crypto object is unavailable. Digest operations
48
+ * fail with `PlatformError` when `crypto.subtle.digest` is unavailable or the
49
+ * browser rejects the digest request.
50
+ *
51
+ * @category layers
52
+ * @since 1.0.0
53
+ */
54
+ export const layer: Layer.Layer<EffectCrypto.Crypto> = Layer.effect(
55
+ EffectCrypto.Crypto,
56
+ Effect.gen(function*() {
57
+ const crypto = yield* WebCrypto
58
+ if (!crypto) {
59
+ return yield* Effect.die(new Error("Web Crypto API is not available"))
60
+ }
61
+ const randomBytes = (size: number): Uint8Array => {
62
+ const bytes = new Uint8Array(size)
63
+ crypto.getRandomValues(bytes)
64
+ return bytes
65
+ }
66
+
67
+ const digest: EffectCrypto.Crypto["digest"] = (algorithm, data) => {
68
+ if (typeof crypto.subtle.digest !== "function") {
69
+ return Effect.fail(PlatformError.systemError({
70
+ module: "Crypto",
71
+ method: "digest",
72
+ _tag: "Unknown",
73
+ description: "crypto.subtle.digest is not available"
74
+ }))
75
+ }
76
+ return Effect.map(
77
+ Effect.tryPromise({
78
+ try: () => crypto.subtle.digest(algorithm, new Uint8Array(data)),
79
+ catch: (cause) =>
80
+ PlatformError.systemError({
81
+ module: "Crypto",
82
+ method: "digest",
83
+ _tag: "Unknown",
84
+ description: "Could not compute digest",
85
+ cause
86
+ })
87
+ }),
88
+ (buffer) => new Uint8Array(buffer)
89
+ )
90
+ }
91
+
92
+ return EffectCrypto.make({
93
+ randomBytes,
94
+ digest
95
+ })
96
+ })
97
+ )
@@ -1,13 +1,25 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Browser implementations of the Effect `HttpClient`.
3
+ *
4
+ * This module exposes HTTP client layers for code that runs in a browser. It
5
+ * re-exports the fetch-based `Fetch`, `RequestInit`, and `layerFetch` APIs for
6
+ * the common case where requests use the platform `fetch` implementation. It
7
+ * also provides an `XMLHttpRequest`-backed client, including controls for the
8
+ * XHR response type, an overridable `XMLHttpRequest` constructor service, and
9
+ * the `layerXMLHttpRequest` layer.
10
+ *
11
+ * @since 4.0.0
3
12
  */
4
13
  import * as Cause from "effect/Cause"
14
+ import * as Context from "effect/Context"
5
15
  import * as Effect from "effect/Effect"
6
16
  import type { LazyArg } from "effect/Function"
7
17
  import * as Inspectable from "effect/Inspectable"
8
18
  import type * as Layer from "effect/Layer"
19
+ import * as Option from "effect/Option"
20
+ import { type Pipeable, pipeArguments } from "effect/Pipeable"
9
21
  import * as Queue from "effect/Queue"
10
- import * as ServiceMap from "effect/ServiceMap"
22
+ import type * as Schema from "effect/Schema"
11
23
  import * as Stream from "effect/Stream"
12
24
  import * as Cookies from "effect/unstable/http/Cookies"
13
25
  import * as Headers from "effect/unstable/http/Headers"
@@ -25,18 +37,29 @@ import * as HeaderParser from "multipasta/HeadersParser"
25
37
 
26
38
  export {
27
39
  /**
28
- * @since 1.0.0
29
- * @category Fetch
40
+ * Context reference for the `fetch` implementation used by the fetch-based HTTP client.
41
+ *
42
+ * @category fetch
43
+ * @since 4.0.0
30
44
  */
31
45
  Fetch,
32
46
  /**
33
- * @since 1.0.0
34
- * @category Fetch
47
+ * Layer that provides an `HttpClient` implementation backed by the configured `Fetch` function.
48
+ *
49
+ * @category fetch
50
+ * @since 4.0.0
35
51
  */
36
52
  layer as layerFetch,
37
53
  /**
38
- * @since 1.0.0
39
- * @category Fetch
54
+ * Service that contains default fetch options for the browser fetch client.
55
+ *
56
+ * **When to use**
57
+ *
58
+ * Use to provide default credentials, cache, redirect, integrity, or other
59
+ * fetch options for browser HTTP requests.
60
+ *
61
+ * @category fetch
62
+ * @since 4.0.0
40
63
  */
41
64
  RequestInit
42
65
  } from "effect/unstable/http/FetchHttpClient"
@@ -46,23 +69,37 @@ export {
46
69
  // =============================================================================
47
70
 
48
71
  /**
49
- * @since 1.0.0
50
- * @category Models
72
+ * Allowed response body modes for the browser XHR HTTP client.
73
+ *
74
+ * @category models
75
+ * @since 4.0.0
51
76
  */
52
77
  export type XHRResponseType = "arraybuffer" | "text"
53
78
 
54
79
  /**
55
- * @since 1.0.0
56
- * @category References
80
+ * Context reference for the `XMLHttpRequest.responseType` used by the browser XHR HTTP client, defaulting to `"text"`.
81
+ *
82
+ * **When to use**
83
+ *
84
+ * Use when you need XHR-backed HTTP requests to receive response bodies as text
85
+ * or raw `ArrayBuffer` values.
86
+ *
87
+ * @see {@link XHRResponseType} for the allowed response body modes
88
+ * @see {@link withXHRArrayBuffer} for scoping XHR response handling to `ArrayBuffer`
89
+ *
90
+ * @category references
91
+ * @since 4.0.0
57
92
  */
58
- export const CurrentXHRResponseType: ServiceMap.Reference<XHRResponseType> = ServiceMap.Reference(
93
+ export const CurrentXHRResponseType: Context.Reference<XHRResponseType> = Context.Reference(
59
94
  "@effect/platform-browser/BrowserHttpClient/CurrentXHRResponseType",
60
95
  { defaultValue: (): XHRResponseType => "text" }
61
96
  )
62
97
 
63
98
  /**
64
- * @since 1.0.0
65
- * @category References
99
+ * Runs an effect with `CurrentXHRResponseType` set to `"arraybuffer"` so the XHR HTTP client receives response bodies as `ArrayBuffer` values.
100
+ *
101
+ * @category references
102
+ * @since 4.0.0
66
103
  */
67
104
  export const withXHRArrayBuffer = <A, E, R>(
68
105
  self: Effect.Effect<A, E, R>
@@ -74,10 +111,12 @@ export const withXHRArrayBuffer = <A, E, R>(
74
111
  )
75
112
 
76
113
  /**
77
- * @since 1.0.0
78
- * @category Services
114
+ * Service tag for the `XMLHttpRequest` constructor used by the browser XHR HTTP client.
115
+ *
116
+ * @category services
117
+ * @since 4.0.0
79
118
  */
80
- export class XMLHttpRequest extends ServiceMap.Service<
119
+ export class XMLHttpRequest extends Context.Service<
81
120
  XMLHttpRequest,
82
121
  LazyArg<globalThis.XMLHttpRequest>
83
122
  >()("@effect/platform-browser/BrowserHttpClient/XMLHttpRequest") {}
@@ -87,8 +126,8 @@ const makeXhrRequest = () => new globalThis.XMLHttpRequest()
87
126
  const makeXmlHttpRequest = HttpClient.make(
88
127
  (request, url, signal, fiber) =>
89
128
  Effect.suspend(() => {
90
- const xhr = ServiceMap.getOrElse(
91
- fiber.services,
129
+ const xhr = Context.getOrElse(
130
+ fiber.context,
92
131
  XMLHttpRequest,
93
132
  () => makeXhrRequest
94
133
  )()
@@ -213,7 +252,7 @@ abstract class IncomingMessageImpl<E> extends Inspectable.Class implements HttpI
213
252
  }
214
253
 
215
254
  get remoteAddress() {
216
- return undefined
255
+ return Option.none()
217
256
  }
218
257
 
219
258
  _textEffect: Effect.Effect<string, E> | undefined
@@ -247,10 +286,10 @@ abstract class IncomingMessageImpl<E> extends Inspectable.Class implements HttpI
247
286
  )
248
287
  }
249
288
 
250
- get json(): Effect.Effect<unknown, E> {
289
+ get json(): Effect.Effect<Schema.Json, E> {
251
290
  return Effect.flatMap(this.text, (text) =>
252
291
  Effect.try({
253
- try: () => text === "" ? null : JSON.parse(text) as unknown,
292
+ try: () => text === "" ? null : JSON.parse(text),
254
293
  catch: this.onError
255
294
  }))
256
295
  }
@@ -334,7 +373,7 @@ abstract class IncomingMessageImpl<E> extends Inspectable.Class implements HttpI
334
373
  }
335
374
 
336
375
  class ClientResponseImpl extends IncomingMessageImpl<HttpClientError.HttpClientError>
337
- implements HttpClientResponse.HttpClientResponse
376
+ implements HttpClientResponse.HttpClientResponse, Pipeable
338
377
  {
339
378
  readonly [HttpClientResponse.TypeId]: typeof HttpClientResponse.TypeId
340
379
  readonly request: HttpClientRequest.HttpClientRequest
@@ -374,12 +413,18 @@ class ClientResponseImpl extends IncomingMessageImpl<HttpClientError.HttpClientE
374
413
  status: this.status
375
414
  })
376
415
  }
416
+
417
+ pipe() {
418
+ return pipeArguments(this, arguments)
419
+ }
377
420
  }
378
421
 
379
422
  /**
380
- * @since 1.0.0
381
- * @category Layers
423
+ * Layer that provides an `HttpClient` implementation backed by the browser `XMLHttpRequest` API.
424
+ *
425
+ * @category layers
426
+ * @since 4.0.0
382
427
  */
383
- export const layerXMLHttpRequest: Layer.Layer<HttpClient.HttpClient> = HttpClient.layerMergedServices(
428
+ export const layerXMLHttpRequest: Layer.Layer<HttpClient.HttpClient> = HttpClient.layerMergedContext(
384
429
  Effect.succeed(makeXmlHttpRequest)
385
430
  )