@effect/tsgo 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -58,6 +58,7 @@ Some diagnostics are off by default or have a default severity of suggestion, bu
58
58
  <tr><td><code>globalErrorInEffectCatch</code></td><td>⚠️</td><td></td><td>Warns when catch callbacks return global Error type instead of typed errors</td><td>✓</td><td>✓</td></tr>
59
59
  <tr><td><code>globalErrorInEffectFailure</code></td><td>⚠️</td><td></td><td>Warns when the global Error type is used in an Effect failure channel</td><td>✓</td><td>✓</td></tr>
60
60
  <tr><td><code>layerMergeAllWithDependencies</code></td><td>⚠️</td><td>🔧</td><td>Detects interdependencies in Layer.mergeAll calls where one layer provides a service that another layer requires</td><td>✓</td><td>✓</td></tr>
61
+ <tr><td><code>lazyPromiseInEffectSync</code></td><td>⚠️</td><td></td><td>Warns when Effect.sync lazily returns a Promise instead of using an async Effect constructor</td><td>✓</td><td>✓</td></tr>
61
62
  <tr><td><code>leakingRequirements</code></td><td>💡</td><td></td><td>Detects implementation services leaked in service methods</td><td>✓</td><td>✓</td></tr>
62
63
  <tr><td><code>multipleEffectProvide</code></td><td>⚠️</td><td>🔧</td><td>Warns against chaining Effect.provide calls which can cause service lifecycle issues</td><td>✓</td><td>✓</td></tr>
63
64
  <tr><td><code>returnEffectInGen</code></td><td>💡</td><td>🔧</td><td>Warns when returning an Effect in a generator causes nested Effect&lt;Effect&lt;...&gt;&gt;</td><td>✓</td><td>✓</td></tr>
@@ -68,6 +69,9 @@ Some diagnostics are off by default or have a default severity of suggestion, bu
68
69
  <tr><td><code>tryCatchInEffectGen</code></td><td>💡</td><td></td><td>Discourages try/catch in Effect generators in favor of Effect error handling</td><td>✓</td><td>✓</td></tr>
69
70
  <tr><td><code>unknownInEffectCatch</code></td><td>⚠️</td><td></td><td>Warns when catch callbacks return unknown instead of typed errors</td><td>✓</td><td>✓</td></tr>
70
71
  <tr><td colspan="6"><strong>Effect-native</strong> <em>Prefer Effect-native APIs and abstractions when available.</em></td></tr>
72
+ <tr><td><code>asyncFunction</code></td><td>➖</td><td></td><td>Warns when declaring async functions and suggests using Effect values and Effect.gen for async control flow</td><td>✓</td><td>✓</td></tr>
73
+ <tr><td><code>cryptoRandomUUID</code></td><td>➖</td><td></td><td>Warns when using crypto.randomUUID() outside Effect generators instead of the Effect Random module, which uses Effect-injected randomness rather than the crypto module behind the scenes</td><td></td><td>✓</td></tr>
74
+ <tr><td><code>cryptoRandomUUIDInEffect</code></td><td>➖</td><td></td><td>Warns when using crypto.randomUUID() inside Effect generators instead of the Effect Random module, which uses Effect-injected randomness rather than the crypto module behind the scenes</td><td></td><td>✓</td></tr>
71
75
  <tr><td><code>extendsNativeError</code></td><td>➖</td><td></td><td>Warns when a class directly extends the native Error class</td><td>✓</td><td>✓</td></tr>
72
76
  <tr><td><code>globalConsole</code></td><td>➖</td><td></td><td>Warns when using console methods outside Effect generators instead of Effect.log/Logger</td><td>✓</td><td>✓</td></tr>
73
77
  <tr><td><code>globalConsoleInEffect</code></td><td>➖</td><td></td><td>Warns when using console methods inside Effect generators instead of Effect.log/Logger</td><td>✓</td><td>✓</td></tr>
@@ -80,21 +84,28 @@ Some diagnostics are off by default or have a default severity of suggestion, bu
80
84
  <tr><td><code>globalTimers</code></td><td>➖</td><td></td><td>Warns when using setTimeout/setInterval outside Effect generators instead of Effect.sleep/Schedule</td><td>✓</td><td>✓</td></tr>
81
85
  <tr><td><code>globalTimersInEffect</code></td><td>➖</td><td></td><td>Warns when using setTimeout/setInterval inside Effect generators instead of Effect.sleep/Schedule</td><td>✓</td><td>✓</td></tr>
82
86
  <tr><td><code>instanceOfSchema</code></td><td>➖</td><td>🔧</td><td>Suggests using Schema.is instead of instanceof for Effect Schema types</td><td>✓</td><td>✓</td></tr>
87
+ <tr><td><code>newPromise</code></td><td>➖</td><td></td><td>Warns when constructing promises with new Promise instead of using Effect APIs</td><td>✓</td><td>✓</td></tr>
83
88
  <tr><td><code>nodeBuiltinImport</code></td><td>➖</td><td></td><td>Warns when importing Node.js built-in modules that have Effect-native counterparts</td><td>✓</td><td>✓</td></tr>
84
89
  <tr><td><code>preferSchemaOverJson</code></td><td>💡</td><td></td><td>Suggests using Effect Schema for JSON operations instead of JSON.parse/JSON.stringify</td><td>✓</td><td>✓</td></tr>
90
+ <tr><td><code>processEnv</code></td><td>➖</td><td></td><td>Warns when reading process.env outside Effect generators instead of using Effect Config</td><td>✓</td><td>✓</td></tr>
91
+ <tr><td><code>processEnvInEffect</code></td><td>➖</td><td></td><td>Warns when reading process.env inside Effect generators instead of using Effect Config</td><td>✓</td><td>✓</td></tr>
85
92
  <tr><td colspan="6"><strong>Style</strong> <em>Cleanup, consistency, and idiomatic Effect code.</em></td></tr>
86
93
  <tr><td><code>catchAllToMapError</code></td><td>💡</td><td>🔧</td><td>Suggests using Effect.mapError instead of Effect.catch + Effect.fail</td><td>✓</td><td>✓</td></tr>
87
94
  <tr><td><code>deterministicKeys</code></td><td>➖</td><td>🔧</td><td>Enforces deterministic naming for service/tag/error identifiers based on class names</td><td>✓</td><td>✓</td></tr>
95
+ <tr><td><code>effectDoNotation</code></td><td>➖</td><td></td><td>Suggests using Effect.gen or Effect.fn instead of the Effect.Do notation helpers</td><td>✓</td><td>✓</td></tr>
88
96
  <tr><td><code>effectFnOpportunity</code></td><td>💡</td><td>🔧</td><td>Suggests using Effect.fn for functions that return an Effect</td><td>✓</td><td>✓</td></tr>
97
+ <tr><td><code>effectMapFlatten</code></td><td>💡</td><td></td><td>Suggests using Effect.flatMap instead of Effect.map followed by Effect.flatten in piping flows</td><td>✓</td><td>✓</td></tr>
89
98
  <tr><td><code>effectMapVoid</code></td><td>💡</td><td>🔧</td><td>Suggests using Effect.asVoid instead of Effect.map(() =&gt; void 0), Effect.map(() =&gt; undefined), or Effect.map(() =&gt; {})</td><td>✓</td><td>✓</td></tr>
90
99
  <tr><td><code>effectSucceedWithVoid</code></td><td>💡</td><td>🔧</td><td>Suggests using Effect.void instead of Effect.succeed(undefined) or Effect.succeed(void 0)</td><td>✓</td><td>✓</td></tr>
91
100
  <tr><td><code>missedPipeableOpportunity</code></td><td>➖</td><td>🔧</td><td>Suggests using .pipe() for nested function calls</td><td>✓</td><td>✓</td></tr>
92
101
  <tr><td><code>missingEffectServiceDependency</code></td><td>➖</td><td></td><td>Checks that Effect.Service dependencies satisfy all required layer inputs</td><td>✓</td><td></td></tr>
102
+ <tr><td><code>nestedEffectGenYield</code></td><td>➖</td><td></td><td>Warns when yielding a nested bare Effect.gen inside an existing Effect generator context</td><td>✓</td><td>✓</td></tr>
93
103
  <tr><td><code>redundantSchemaTagIdentifier</code></td><td>💡</td><td>🔧</td><td>Suggests removing redundant identifier argument when it equals the tag value in Schema.TaggedClass/TaggedError/TaggedRequest</td><td>✓</td><td>✓</td></tr>
94
104
  <tr><td><code>schemaStructWithTag</code></td><td>💡</td><td>🔧</td><td>Suggests using Schema.TaggedStruct instead of Schema.Struct with _tag field</td><td>✓</td><td>✓</td></tr>
95
105
  <tr><td><code>schemaUnionOfLiterals</code></td><td>➖</td><td>🔧</td><td>Suggests combining multiple Schema.Literal calls in Schema.Union into a single Schema.Literal</td><td>✓</td><td></td></tr>
96
106
  <tr><td><code>serviceNotAsClass</code></td><td>➖</td><td>🔧</td><td>Warns when ServiceMap.Service is used as a variable instead of a class declaration</td><td></td><td>✓</td></tr>
97
107
  <tr><td><code>strictBooleanExpressions</code></td><td>➖</td><td></td><td>Enforces boolean types in conditional expressions for type safety</td><td>✓</td><td>✓</td></tr>
108
+ <tr><td><code>unnecessaryArrowBlock</code></td><td>➖</td><td>🔧</td><td>Suggests using a concise arrow body when the block only returns an expression</td><td>✓</td><td>✓</td></tr>
98
109
  <tr><td><code>unnecessaryEffectGen</code></td><td>💡</td><td>🔧</td><td>Suggests removing Effect.gen when it contains only a single return statement</td><td>✓</td><td>✓</td></tr>
99
110
  <tr><td><code>unnecessaryFailYieldableError</code></td><td>💡</td><td>🔧</td><td>Suggests yielding yieldable errors directly instead of wrapping with Effect.fail</td><td>✓</td><td>✓</td></tr>
100
111
  <tr><td><code>unnecessaryPipe</code></td><td>💡</td><td>🔧</td><td>Removes pipe calls with no arguments</td><td>✓</td><td>✓</td></tr>
@@ -197,6 +208,8 @@ Each release of `effect-tsgo` is built against a specific upstream `tsgo` commit
197
208
  "quickinfo": true,
198
209
  // Controls Effect completions. (default: true)
199
210
  "completions": true,
211
+ // Enables additional debug-only Effect language service output. (default: false)
212
+ "debug": false,
200
213
  // Controls Effect goto references support. (default: true)
201
214
  "goto": true,
202
215
  // Controls Effect rename helpers. (default: true)
@@ -197377,7 +197377,7 @@ var FileReadError = class extends TaggedError("FileReadError") {
197377
197377
  //#endregion
197378
197378
  //#region package.json
197379
197379
  var name = "@effect/tsgo";
197380
- var version = "0.2.1";
197380
+ var version = "0.3.0";
197381
197381
 
197382
197382
  //#endregion
197383
197383
  //#region src/setup/consts.ts
@@ -198207,6 +198207,9 @@ var presets$1 = [{
198207
198207
  "name": "effect-native",
198208
198208
  "description": "Enable all Effect-native diagnostics at warning level.",
198209
198209
  "diagnosticSeverity": {
198210
+ "asyncFunction": "warning",
198211
+ "cryptoRandomUUID": "warning",
198212
+ "cryptoRandomUUIDInEffect": "warning",
198210
198213
  "extendsNativeError": "warning",
198211
198214
  "globalConsole": "warning",
198212
198215
  "globalConsoleInEffect": "warning",
@@ -198219,8 +198222,11 @@ var presets$1 = [{
198219
198222
  "globalTimers": "warning",
198220
198223
  "globalTimersInEffect": "warning",
198221
198224
  "instanceOfSchema": "warning",
198225
+ "newPromise": "warning",
198222
198226
  "nodeBuiltinImport": "warning",
198223
- "preferSchemaOverJson": "warning"
198227
+ "preferSchemaOverJson": "warning",
198228
+ "processEnv": "warning",
198229
+ "processEnvInEffect": "warning"
198224
198230
  }
198225
198231
  }];
198226
198232
  var rules = [
@@ -198614,6 +198620,23 @@ var rules = [
198614
198620
  }]
198615
198621
  }
198616
198622
  },
198623
+ {
198624
+ "name": "lazyPromiseInEffectSync",
198625
+ "group": "antipattern",
198626
+ "description": "Warns when Effect.sync lazily returns a Promise instead of using an async Effect constructor",
198627
+ "defaultSeverity": "warning",
198628
+ "fixable": false,
198629
+ "supportedEffect": ["v3", "v4"],
198630
+ "codes": [377082],
198631
+ "preview": {
198632
+ "sourceText": "import { Effect } from \"effect\"\n\nexport const preview = Effect.sync(() => Promise.resolve(1))\n",
198633
+ "diagnostics": [{
198634
+ "start": 68,
198635
+ "end": 92,
198636
+ "text": "This `Effect.sync` thunk returns a Promise. Use `Effect.promise` or `Effect.tryPromise` to represent async work. effect(lazyPromiseInEffectSync)"
198637
+ }]
198638
+ }
198639
+ },
198617
198640
  {
198618
198641
  "name": "leakingRequirements",
198619
198642
  "group": "antipattern",
@@ -198771,6 +198794,57 @@ var rules = [
198771
198794
  }]
198772
198795
  }
198773
198796
  },
198797
+ {
198798
+ "name": "asyncFunction",
198799
+ "group": "effectNative",
198800
+ "description": "Warns when declaring async functions and suggests using Effect values and Effect.gen for async control flow",
198801
+ "defaultSeverity": "off",
198802
+ "fixable": false,
198803
+ "supportedEffect": ["v3", "v4"],
198804
+ "codes": [377081],
198805
+ "preview": {
198806
+ "sourceText": "\nexport const preview = async () => {\n await Promise.resolve(1)\n}\n",
198807
+ "diagnostics": [{
198808
+ "start": 24,
198809
+ "end": 37,
198810
+ "text": "This code declares an async function, consider representing this async control flow with Effect values and `Effect.gen`. effect(asyncFunction)"
198811
+ }]
198812
+ }
198813
+ },
198814
+ {
198815
+ "name": "cryptoRandomUUID",
198816
+ "group": "effectNative",
198817
+ "description": "Warns when using crypto.randomUUID() outside Effect generators instead of the Effect Random module, which uses Effect-injected randomness rather than the crypto module behind the scenes",
198818
+ "defaultSeverity": "off",
198819
+ "fixable": false,
198820
+ "supportedEffect": ["v4"],
198821
+ "codes": [377078],
198822
+ "preview": {
198823
+ "sourceText": "\nexport const preview = crypto.randomUUID()\n",
198824
+ "diagnostics": [{
198825
+ "start": 24,
198826
+ "end": 43,
198827
+ "text": "This code uses `crypto.randomUUID()`, prefer the Effect `Random` module instead because it uses Effect-injected randomness rather than the `crypto` module behind the scenes. effect(cryptoRandomUUID)"
198828
+ }]
198829
+ }
198830
+ },
198831
+ {
198832
+ "name": "cryptoRandomUUIDInEffect",
198833
+ "group": "effectNative",
198834
+ "description": "Warns when using crypto.randomUUID() inside Effect generators instead of the Effect Random module, which uses Effect-injected randomness rather than the crypto module behind the scenes",
198835
+ "defaultSeverity": "off",
198836
+ "fixable": false,
198837
+ "supportedEffect": ["v4"],
198838
+ "codes": [377079],
198839
+ "preview": {
198840
+ "sourceText": "import { Effect } from \"effect\"\n\nexport const preview = Effect.gen(function*() {\n return crypto.randomUUID()\n})\n",
198841
+ "diagnostics": [{
198842
+ "start": 90,
198843
+ "end": 109,
198844
+ "text": "This Effect code uses `crypto.randomUUID()`, prefer the Effect `Random` module instead because it uses Effect-injected randomness rather than the `crypto` module behind the scenes. effect(cryptoRandomUUIDInEffect)"
198845
+ }]
198846
+ }
198847
+ },
198774
198848
  {
198775
198849
  "name": "extendsNativeError",
198776
198850
  "group": "effectNative",
@@ -198971,6 +199045,23 @@ var rules = [
198971
199045
  }]
198972
199046
  }
198973
199047
  },
199048
+ {
199049
+ "name": "newPromise",
199050
+ "group": "effectNative",
199051
+ "description": "Warns when constructing promises with new Promise instead of using Effect APIs",
199052
+ "defaultSeverity": "off",
199053
+ "fixable": false,
199054
+ "supportedEffect": ["v3", "v4"],
199055
+ "codes": [377080],
199056
+ "preview": {
199057
+ "sourceText": "\nexport const preview = new Promise<number>((resolve) => resolve(1))\n",
199058
+ "diagnostics": [{
199059
+ "start": 24,
199060
+ "end": 68,
199061
+ "text": "This code constructs `new Promise(...)`, prefer Effect APIs such as `Effect.async`, `Effect.promise`, or `Effect.tryPromise` instead of manual Promise construction. effect(newPromise)"
199062
+ }]
199063
+ }
199064
+ },
198974
199065
  {
198975
199066
  "name": "nodeBuiltinImport",
198976
199067
  "group": "effectNative",
@@ -199005,6 +199096,40 @@ var rules = [
199005
199096
  }]
199006
199097
  }
199007
199098
  },
199099
+ {
199100
+ "name": "processEnv",
199101
+ "group": "effectNative",
199102
+ "description": "Warns when reading process.env outside Effect generators instead of using Effect Config",
199103
+ "defaultSeverity": "off",
199104
+ "fixable": false,
199105
+ "supportedEffect": ["v3", "v4"],
199106
+ "codes": [377076],
199107
+ "preview": {
199108
+ "sourceText": "/// <reference types=\"node\" />\n\nexport const preview = process.env.PORT\n",
199109
+ "diagnostics": [{
199110
+ "start": 55,
199111
+ "end": 71,
199112
+ "text": "This code reads from `process.env`, environment configuration is represented through `Config` from Effect. effect(processEnv)"
199113
+ }]
199114
+ }
199115
+ },
199116
+ {
199117
+ "name": "processEnvInEffect",
199118
+ "group": "effectNative",
199119
+ "description": "Warns when reading process.env inside Effect generators instead of using Effect Config",
199120
+ "defaultSeverity": "off",
199121
+ "fixable": false,
199122
+ "supportedEffect": ["v3", "v4"],
199123
+ "codes": [377077],
199124
+ "preview": {
199125
+ "sourceText": "/// <reference types=\"node\" />\nimport { Effect } from \"effect\"\n\nexport const preview = Effect.gen(function*() {\n return process.env.PORT\n})\n",
199126
+ "diagnostics": [{
199127
+ "start": 121,
199128
+ "end": 137,
199129
+ "text": "This Effect code reads from `process.env`, environment configuration in Effect code is represented through `Config` from Effect. effect(processEnvInEffect)"
199130
+ }]
199131
+ }
199132
+ },
199008
199133
  {
199009
199134
  "name": "catchAllToMapError",
199010
199135
  "group": "style",
@@ -199039,6 +199164,23 @@ var rules = [
199039
199164
  }]
199040
199165
  }
199041
199166
  },
199167
+ {
199168
+ "name": "effectDoNotation",
199169
+ "group": "style",
199170
+ "description": "Suggests using Effect.gen or Effect.fn instead of the Effect.Do notation helpers",
199171
+ "defaultSeverity": "off",
199172
+ "fixable": false,
199173
+ "supportedEffect": ["v3", "v4"],
199174
+ "codes": [377085],
199175
+ "preview": {
199176
+ "sourceText": "import { Effect } from \"effect\"\nimport { pipe } from \"effect/Function\"\n\nexport const preview = pipe(\n Effect.Do,\n Effect.bind(\"a\", () => Effect.succeed(1)),\n Effect.let(\"b\", ({ a }) => a + 1),\n Effect.bind(\"c\", ({ b }) => Effect.succeed(b.toString()))\n)\n",
199177
+ "diagnostics": [{
199178
+ "start": 103,
199179
+ "end": 112,
199180
+ "text": "This uses the Effect do emulation. `Effect.gen` or `Effect.fn` achieve the same result with native JS scopes. effect(effectDoNotation)"
199181
+ }]
199182
+ }
199183
+ },
199042
199184
  {
199043
199185
  "name": "effectFnOpportunity",
199044
199186
  "group": "style",
@@ -199056,6 +199198,23 @@ var rules = [
199056
199198
  }]
199057
199199
  }
199058
199200
  },
199201
+ {
199202
+ "name": "effectMapFlatten",
199203
+ "group": "style",
199204
+ "description": "Suggests using Effect.flatMap instead of Effect.map followed by Effect.flatten in piping flows",
199205
+ "defaultSeverity": "suggestion",
199206
+ "fixable": false,
199207
+ "supportedEffect": ["v3", "v4"],
199208
+ "codes": [377086],
199209
+ "preview": {
199210
+ "sourceText": "import { Effect } from \"effect\"\n\nexport const preview = Effect.succeed(1).pipe(\n Effect.map((n) => Effect.succeed(n + 1)),\n Effect.flatten\n)\n",
199211
+ "diagnostics": [{
199212
+ "start": 126,
199213
+ "end": 140,
199214
+ "text": "`Effect.map` + `Effect.flatten` is the same as `Effect.flatMap` that expresses the same steps more directly. effect(effectMapFlatten)"
199215
+ }]
199216
+ }
199217
+ },
199059
199218
  {
199060
199219
  "name": "effectMapVoid",
199061
199220
  "group": "style",
@@ -199124,6 +199283,23 @@ var rules = [
199124
199283
  }]
199125
199284
  }
199126
199285
  },
199286
+ {
199287
+ "name": "nestedEffectGenYield",
199288
+ "group": "style",
199289
+ "description": "Warns when yielding a nested bare Effect.gen inside an existing Effect generator context",
199290
+ "defaultSeverity": "off",
199291
+ "fixable": false,
199292
+ "supportedEffect": ["v3", "v4"],
199293
+ "codes": [377083],
199294
+ "preview": {
199295
+ "sourceText": "import { Effect } from \"effect\"\n\nexport const preview = Effect.gen(function*() {\n yield* Effect.gen(function*() {\n return 1\n })\n})\n",
199296
+ "diagnostics": [{
199297
+ "start": 89,
199298
+ "end": 128,
199299
+ "text": "This `yield*` is applied to a nested `Effect.gen(...)` that can be inlined in the parent Effect generator context. effect(nestedEffectGenYield)"
199300
+ }]
199301
+ }
199302
+ },
199127
199303
  {
199128
199304
  "name": "redundantSchemaTagIdentifier",
199129
199305
  "group": "style",
@@ -199213,6 +199389,23 @@ var rules = [
199213
199389
  }]
199214
199390
  }
199215
199391
  },
199392
+ {
199393
+ "name": "unnecessaryArrowBlock",
199394
+ "group": "style",
199395
+ "description": "Suggests using a concise arrow body when the block only returns an expression",
199396
+ "defaultSeverity": "off",
199397
+ "fixable": true,
199398
+ "supportedEffect": ["v3", "v4"],
199399
+ "codes": [377084],
199400
+ "preview": {
199401
+ "sourceText": "export const preview = (value: string) => {\n return value.trim()\n}\n",
199402
+ "diagnostics": [{
199403
+ "start": 42,
199404
+ "end": 66,
199405
+ "text": "This arrow function block only returns an expression and can use a concise body. effect(unnecessaryArrowBlock)"
199406
+ }]
199407
+ }
199408
+ },
199216
199409
  {
199217
199410
  "name": "unnecessaryEffectGen",
199218
199411
  "group": "style",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/tsgo",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Effect Language Service for TypeScript-Go — Effect-specific diagnostics and hover features.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -22,13 +22,13 @@
22
22
  "README.md"
23
23
  ],
24
24
  "optionalDependencies": {
25
- "@effect/tsgo-win32-x64": "0.2.1",
26
- "@effect/tsgo-win32-arm64": "0.2.1",
27
- "@effect/tsgo-linux-x64": "0.2.1",
28
- "@effect/tsgo-linux-arm64": "0.2.1",
29
- "@effect/tsgo-linux-arm": "0.2.1",
30
- "@effect/tsgo-darwin-x64": "0.2.1",
31
- "@effect/tsgo-darwin-arm64": "0.2.1"
25
+ "@effect/tsgo-win32-x64": "0.3.0",
26
+ "@effect/tsgo-win32-arm64": "0.3.0",
27
+ "@effect/tsgo-linux-x64": "0.3.0",
28
+ "@effect/tsgo-linux-arm64": "0.3.0",
29
+ "@effect/tsgo-linux-arm": "0.3.0",
30
+ "@effect/tsgo-darwin-x64": "0.3.0",
31
+ "@effect/tsgo-darwin-arm64": "0.3.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@effect/platform-node": "^4.0.0-beta.40",