@effected/tsconfig-json 0.1.0 → 0.2.1

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/JsxConfig.js ADDED
@@ -0,0 +1,41 @@
1
+ import { Option, Schema } from "effect";
2
+
3
+ //#region src/JsxConfig.ts
4
+ /**
5
+ * The JSX transform configuration a `jsx` compiler option implies: which
6
+ * runtime (`"automatic"` for `react-jsx` / `react-jsxdev`, `"classic"` for
7
+ * `react`) and, for the automatic runtime, the import source the transform
8
+ * emits (`jsxImportSource`, defaulting to `"react"` per tsc).
9
+ *
10
+ * @public
11
+ */
12
+ var JsxConfig = class JsxConfig extends Schema.Class("JsxConfig")({
13
+ /** The JSX transform runtime: `"automatic"` (`react-jsx` / `react-jsxdev`) or `"classic"` (`react`). */
14
+ runtime: Schema.Literals(["automatic", "classic"]),
15
+ /** The automatic runtime's import source (`jsxImportSource`, defaulted to `"react"`); absent for classic. */
16
+ importSource: Schema.optionalKey(Schema.String)
17
+ }) {
18
+ /**
19
+ * Project decoded compiler options to their implied JSX transform
20
+ * configuration. `"react-jsx"` and `"react-jsxdev"` yield the automatic
21
+ * runtime with `importSource` taken from `jsxImportSource` (defaulting to
22
+ * `"react"`, tsc's own default); `"react"` yields the classic runtime with
23
+ * no `importSource`. `"preserve"`, `"react-native"` and an absent `jsx`
24
+ * yield `Option.none()` — JSX is left untransformed (or absent entirely),
25
+ * so there is nothing for a bundler to configure.
26
+ */
27
+ static fromCompilerOptions(options) {
28
+ switch (options.jsx) {
29
+ case "react-jsx":
30
+ case "react-jsxdev": return Option.some(JsxConfig.make({
31
+ runtime: "automatic",
32
+ importSource: options.jsxImportSource ?? "react"
33
+ }));
34
+ case "react": return Option.some(JsxConfig.make({ runtime: "classic" }));
35
+ default: return Option.none();
36
+ }
37
+ }
38
+ };
39
+
40
+ //#endregion
41
+ export { JsxConfig };
package/README.md CHANGED
@@ -37,6 +37,8 @@ pnpm add @effected/tsconfig-json @effected/jsonc @effected/walker effect
37
37
 
38
38
  Requires Node.js >=24.11.0. `effect` v4, `@effected/jsonc` and `@effected/walker` are peer dependencies; there are no runtime dependencies of its own.
39
39
 
40
+ All `@effected/*` packages are ESM-only: the exports maps publish only `import` conditions, so `require()` — including tools that resolve in CJS mode — fails with Node's `ERR_PACKAGE_PATH_NOT_EXPORTED` rather than loading a CJS build that does not exist. Import from an ES module.
41
+
40
42
  All IO goes through `FileSystem` and `Path` from `effect` core, not a platform package, so a consumer provides them once at the edge (`@effect/platform-node` on Node, `@effect/platform-bun` on Bun) and a test provides `Path.layer` and `FileSystem.layerNoop` straight from core with nothing else installed.
41
43
 
42
44
  ## Quick start
@@ -58,6 +60,8 @@ console.log(resolved.compilerOptions);
58
60
  // the merged options after folding the whole chain — later configs win per field, paths replaced wholesale
59
61
  ```
60
62
 
63
+ `TsconfigLoader.compilerOptions("./tsconfig.json")` is the same pipeline projected down to the merged options, for when the effective options are all you want.
64
+
61
65
  Find the nearest config first when you only have a starting directory:
62
66
 
63
67
  ```ts
@@ -80,15 +84,37 @@ console.log(PortableTsconfig.make(resolved).compilerOptions.noEmit);
80
84
  // true — always forced, whatever the source config declared
81
85
  ```
82
86
 
87
+ ## Synchronous loading
88
+
89
+ Bundler plugin hooks and config factories often cannot await. `TsconfigLoaderSync` runs the unchanged loader pipeline synchronously over file and path operations you supply — the package still imports no `node:*` module, and Node's built-ins satisfy the operations directly:
90
+
91
+ ```ts
92
+ import { existsSync, readFileSync } from "node:fs";
93
+ import * as path from "node:path";
94
+ import { TsconfigLoaderSync } from "@effected/tsconfig-json";
95
+
96
+ const options = {
97
+ fileSystem: { exists: existsSync, readFile: (p: string) => readFileSync(p, "utf8") },
98
+ path, // node:path satisfies SyncPath verbatim; path.win32 / path.posix force a convention
99
+ };
100
+
101
+ const compilerOptions = TsconfigLoaderSync.compilerOptions("./tsconfig.json", options);
102
+ // the merged options for the full extends chain — the same result TsconfigLoader.resolve computes
103
+ ```
104
+
105
+ `load` and `resolve` have the same synchronous forms. Failures are the async pipeline's own typed errors thrown as themselves — `TsconfigParseError`, `TsconfigExtendsError` or a `PlatformError` wrapping whatever your `readFile` threw — never a fiber-failure wrapper.
106
+
83
107
  ## Features
84
108
 
85
109
  - `TsconfigJson` / `TsconfigJsonFromString` — the document schema and its JSONC string codec. Comments and trailing commas are legal in every parse; there is no JSON-strict path.
86
110
  - `CompilerOptions` — string-level schemas for `compilerOptions`: enum values decode case-insensitively and encode to canonical lowercase, and unknown or removed options survive a round trip as passthrough.
87
- - `TsconfigLoader.load` / `TsconfigLoader.resolve` — read and decode one config, or resolve its full `extends` chain depth-first with per-branch cycle stacks (diamond chains are legal), a depth guard and tsc's target resolution for relative, rooted and bare-specifier targets including `exports` maps.
111
+ - `TsconfigLoader.load` / `TsconfigLoader.resolve` / `TsconfigLoader.compilerOptions` — read and decode one config, resolve its full `extends` chain depth-first with per-branch cycle stacks (diamond chains are legal), a depth guard and tsc's target resolution for relative, rooted and bare-specifier targets including `exports` maps, or project the resolved chain straight down to its merged options.
112
+ - `TsconfigLoaderSync` — the synchronous facade for sync-only hosts: `load`, `resolve` and `compilerOptions` over consumer-supplied `{ fileSystem, path }` operations, running the same pipeline and throwing the same typed errors.
88
113
  - `ResolvedTsconfig` — the pure merge engine behind `resolve`: per-field merge semantics, path-option absolutization against the declaring config's directory, final `${configDir}` substitution and `pathsBase` provenance, with no filesystem access at all.
89
114
  - `TsconfigDiscovery.findNearest` — the nearest `tsconfig.json` (or any filename via `options.filename`) at or above a starting directory, over `@effected/walker`; one unreadable ancestor cannot hide a config above it.
90
115
  - `TsEnumCodec` — the string↔numeric enum tables as plain data with zero `typescript` imports. `encodeCompilerOptions` produces the numeric shape `ts.CompilerOptions` expects, with `lib` entries in the file-name form the compiler resolves verbatim; `decodeCompilerOptions` reverses it.
91
116
  - `PortableTsconfig.make` — an allow-list projection down to machine-independent type-semantics options, with `composite: false` and `noEmit: true` forced: the slice a virtual TypeScript environment (Twoslash, API Extractor, an in-memory language service) can safely inherit.
117
+ - `JsxConfig.fromCompilerOptions` — the JSX transform a bundler can configure, projected from decoded options: `react-jsx` / `react-jsxdev` select the automatic runtime with its import source (defaulting to `react`, tsc's own default), `react` selects classic, and `preserve`, `react-native` or an absent `jsx` yield `Option.none()`.
92
118
  - Typed failures everywhere: a malformed file is a `TsconfigParseError` carrying its path, a broken chain is a `TsconfigExtendsError` with a `not-found` / `cycle` / `depth` / `empty` reason and the full resolution chain, and IO errors flow through as `PlatformError`. Nothing fails as a defect.
93
119
 
94
120
  ## License
package/TsconfigLoader.js CHANGED
@@ -66,7 +66,7 @@ const loadAbs = (abs) => Effect.gen(function* () {
66
66
  *
67
67
  * @public
68
68
  */
69
- const load = (configPath) => Effect.gen(function* () {
69
+ const load = Effect.fn("TsconfigLoader.load")(function* (configPath) {
70
70
  const path = yield* Path.Path;
71
71
  return yield* loadAbs(normalizeSlashes(path.resolve(configPath)));
72
72
  });
@@ -132,7 +132,7 @@ const collect = (configPath, chain) => Effect.gen(function* () {
132
132
  *
133
133
  * @public
134
134
  */
135
- const resolve = (configPath) => Effect.gen(function* () {
135
+ const resolve = Effect.fn("TsconfigLoader.resolve")(function* (configPath) {
136
136
  const path = yield* Path.Path;
137
137
  const topAbs = normalizeSlashes(path.resolve(configPath));
138
138
  const layers = yield* collect(topAbs, []);
@@ -145,15 +145,28 @@ const resolve = (configPath) => Effect.gen(function* () {
145
145
  return ResolvedTsconfig.substituteConfigDir(acc, path.dirname(topAbs));
146
146
  });
147
147
  /**
148
+ * Resolve a tsconfig.json's full `extends` chain and project out the merged
149
+ * `compilerOptions` — a thin projection of {@link TsconfigLoader.resolve} for
150
+ * the common "just give me the effective options" query. Same pipeline, same
151
+ * typed failures.
152
+ *
153
+ * @public
154
+ */
155
+ const compilerOptions = Effect.fn("TsconfigLoader.compilerOptions")(function* (configPath) {
156
+ return (yield* resolve(configPath)).compilerOptions;
157
+ });
158
+ /**
148
159
  * The tsconfig.json loader: {@link TsconfigLoader.load} reads and decodes one
149
160
  * config file, {@link TsconfigLoader.resolve} runs the full load -\> extends -\>
150
- * merge -\> `${configDir}` pipeline.
161
+ * merge -\> `${configDir}` pipeline, and {@link TsconfigLoader.compilerOptions}
162
+ * projects the resolved result down to its merged `compilerOptions`.
151
163
  *
152
164
  * @public
153
165
  */
154
166
  const TsconfigLoader = {
155
167
  load,
156
- resolve
168
+ resolve,
169
+ compilerOptions
157
170
  };
158
171
 
159
172
  //#endregion
@@ -0,0 +1,131 @@
1
+ import { TsconfigLoader } from "./TsconfigLoader.js";
2
+ import { Cause, Effect, Exit, FileSystem, Option, Path, PlatformError, Result } from "effect";
3
+
4
+ //#region src/TsconfigLoaderSync.ts
5
+ /** A `Path.Path` member the loader pipeline never calls: throw an informative defect if something reaches it. */
6
+ const unsupported = (member) => {
7
+ throw new Error(`Path.${member} is not supported by TsconfigLoaderSync — its SyncPath adapter only carries resolve/dirname/join/isAbsolute/basename`);
8
+ };
9
+ /** Adapt the consumer's `SyncPath` into a core `Path.Path` service value. */
10
+ const makePathService = (path) => Path.Path.of({
11
+ [Path.TypeId]: Path.TypeId,
12
+ get sep() {
13
+ return unsupported("sep");
14
+ },
15
+ basename: (p) => path.basename(p),
16
+ dirname: (p) => path.dirname(p),
17
+ extname: () => unsupported("extname"),
18
+ format: () => unsupported("format"),
19
+ fromFileUrl: () => unsupported("fromFileUrl"),
20
+ isAbsolute: (p) => path.isAbsolute(p),
21
+ join: (...segments) => path.join(...segments),
22
+ normalize: () => unsupported("normalize"),
23
+ parse: () => unsupported("parse"),
24
+ relative: () => unsupported("relative"),
25
+ resolve: (...segments) => path.resolve(...segments),
26
+ toFileUrl: () => unsupported("toFileUrl"),
27
+ toNamespacedPath: () => unsupported("toNamespacedPath")
28
+ });
29
+ /**
30
+ * Adapt the consumer's `SyncFileSystem` into a core `FileSystem` service
31
+ * value. A `readFile` throw is wrapped exactly as a platform filesystem would
32
+ * report it: a `PlatformError` whose `SystemError` reason carries module
33
+ * `"FileSystem"`, method `"readFileString"`, and the original throw as
34
+ * `cause`.
35
+ *
36
+ * NOTE the deliberate asymmetry with `makePathService`: an unsupported `Path`
37
+ * member throws a named defect, but an unsupported `FileSystem` member
38
+ * inherits `FileSystem.makeNoop`'s behavior — a TYPED `NotFound` failure. If
39
+ * a future loader change reaches for a filesystem operation not overridden
40
+ * here, it surfaces as a spurious `NotFound` (not a crash), and this adapter
41
+ * must be extended to cover the new operation.
42
+ */
43
+ const makeFileSystemService = (fileSystem) => FileSystem.makeNoop({
44
+ exists: (path) => Effect.sync(() => fileSystem.exists(path)),
45
+ readFileString: (path) => Effect.try({
46
+ try: () => fileSystem.readFile(path),
47
+ catch: (cause) => PlatformError.systemError({
48
+ _tag: "Unknown",
49
+ module: "FileSystem",
50
+ method: "readFileString",
51
+ pathOrDescriptor: path,
52
+ cause
53
+ })
54
+ })
55
+ });
56
+ /**
57
+ * Run one loader effect synchronously against the consumer-supplied services,
58
+ * unwrapping the result: a typed failure is thrown as itself, a defect is
59
+ * rethrown as-is — never a fiber-failure wrapper.
60
+ */
61
+ const runWith = (options, effect) => {
62
+ const exit = Effect.runSyncExit(effect.pipe(Effect.provideService(FileSystem.FileSystem, makeFileSystemService(options.fileSystem)), Effect.provideService(Path.Path, makePathService(options.path))));
63
+ if (Exit.isSuccess(exit)) return exit.value;
64
+ const failure = Cause.findErrorOption(exit.cause);
65
+ if (Option.isSome(failure)) throw failure.value;
66
+ const defect = Cause.findDefect(exit.cause);
67
+ if (Result.isSuccess(defect)) throw defect.success;
68
+ throw Cause.squash(exit.cause);
69
+ };
70
+ /**
71
+ * {@link TsconfigLoader.load}, synchronously: read and decode one config file
72
+ * through the consumer-supplied operations. Throws `TsconfigParseError` or a
73
+ * `PlatformError` — the async pipeline's exact typed failures.
74
+ *
75
+ * @public
76
+ */
77
+ const load = (configPath, options) => runWith(options, TsconfigLoader.load(configPath));
78
+ /**
79
+ * {@link TsconfigLoader.resolve}, synchronously: the full load -\> extends -\>
80
+ * merge -\> `${configDir}` pipeline through the consumer-supplied operations.
81
+ * Throws `TsconfigParseError`, `TsconfigExtendsError` or a `PlatformError` —
82
+ * the async pipeline's exact typed failures.
83
+ *
84
+ * @public
85
+ */
86
+ const resolve = (configPath, options) => runWith(options, TsconfigLoader.resolve(configPath));
87
+ /**
88
+ * {@link TsconfigLoader.compilerOptions}, synchronously: resolve the full
89
+ * `extends` chain and project out the merged `compilerOptions`. Throws the
90
+ * same typed failures as {@link TsconfigLoaderSync.resolve}.
91
+ *
92
+ * @public
93
+ */
94
+ const compilerOptions = (configPath, options) => resolve(configPath, options).compilerOptions;
95
+ /**
96
+ * The synchronous tsconfig.json loader facade: the {@link TsconfigLoader}
97
+ * pipeline run under `Effect.runSyncExit` against consumer-supplied
98
+ * {@link SyncFileSystem} and {@link SyncPath} operations. For sync-only host
99
+ * APIs (bundler plugin hooks, config factories); everything else should use
100
+ * {@link TsconfigLoader} with real platform layers.
101
+ *
102
+ * @remarks
103
+ * The two adapters treat unsupported members asymmetrically: a `Path` member
104
+ * the loader pipeline never calls throws a named defect on contact, while a
105
+ * `FileSystem` member outside the two overridden here (`exists`,
106
+ * `readFileString`) inherits `FileSystem.makeNoop`'s typed `NotFound`
107
+ * failure. A loader change that starts using a new filesystem operation
108
+ * therefore surfaces as a `NotFound` rather than a defect — extend the
109
+ * adapter when that happens.
110
+ *
111
+ * ```ts
112
+ * import { existsSync, readFileSync } from "node:fs";
113
+ * import * as path from "node:path";
114
+ * import { TsconfigLoaderSync } from "@effected/tsconfig-json";
115
+ *
116
+ * const resolved = TsconfigLoaderSync.resolve("./tsconfig.json", {
117
+ * fileSystem: { exists: existsSync, readFile: (p) => readFileSync(p, "utf8") },
118
+ * path,
119
+ * });
120
+ * ```
121
+ *
122
+ * @public
123
+ */
124
+ const TsconfigLoaderSync = {
125
+ load,
126
+ resolve,
127
+ compilerOptions
128
+ };
129
+
130
+ //#endregion
131
+ export { TsconfigLoaderSync };
package/index.d.ts CHANGED
@@ -190,6 +190,34 @@ declare namespace CompilerOptions {
190
190
  type Encoded = typeof CompilerOptions.Encoded;
191
191
  }
192
192
  //#endregion
193
+ //#region src/JsxConfig.d.ts
194
+ declare const JsxConfig_base: Schema.Class<JsxConfig, Schema.Struct<{
195
+ /** The JSX transform runtime: `"automatic"` (`react-jsx` / `react-jsxdev`) or `"classic"` (`react`). */
196
+ readonly runtime: Schema.Literals<readonly ["automatic", "classic"]>;
197
+ /** The automatic runtime's import source (`jsxImportSource`, defaulted to `"react"`); absent for classic. */
198
+ readonly importSource: Schema.optionalKey<Schema.String>;
199
+ }>, {}>;
200
+ /**
201
+ * The JSX transform configuration a `jsx` compiler option implies: which
202
+ * runtime (`"automatic"` for `react-jsx` / `react-jsxdev`, `"classic"` for
203
+ * `react`) and, for the automatic runtime, the import source the transform
204
+ * emits (`jsxImportSource`, defaulting to `"react"` per tsc).
205
+ *
206
+ * @public
207
+ */
208
+ declare class JsxConfig extends JsxConfig_base {
209
+ /**
210
+ * Project decoded compiler options to their implied JSX transform
211
+ * configuration. `"react-jsx"` and `"react-jsxdev"` yield the automatic
212
+ * runtime with `importSource` taken from `jsxImportSource` (defaulting to
213
+ * `"react"`, tsc's own default); `"react"` yields the classic runtime with
214
+ * no `importSource`. `"preserve"`, `"react-native"` and an absent `jsx`
215
+ * yield `Option.none()` — JSX is left untransformed (or absent entirely),
216
+ * so there is nothing for a bundler to configure.
217
+ */
218
+ static fromCompilerOptions(options: CompilerOptions.Type): Option.Option<JsxConfig>;
219
+ }
220
+ //#endregion
193
221
  //#region src/TsconfigJson.d.ts
194
222
  /** `watchOptions.watchFile`. @public */
195
223
  declare const WatchFile: Schema.decodeTo<Schema.Literals<readonly ["fixedpollinginterval", "prioritypollinginterval", "dynamicprioritypolling", "fixedchunksizepolling", "usefsevents", "usefseventsonparentdirectory"]>, Schema.String, never, never>;
@@ -609,13 +637,385 @@ declare class TsconfigExtendsError extends TsconfigExtendsError_base {
609
637
  /**
610
638
  * The tsconfig.json loader: {@link TsconfigLoader.load} reads and decodes one
611
639
  * config file, {@link TsconfigLoader.resolve} runs the full load -\> extends -\>
612
- * merge -\> `${configDir}` pipeline.
640
+ * merge -\> `${configDir}` pipeline, and {@link TsconfigLoader.compilerOptions}
641
+ * projects the resolved result down to its merged `compilerOptions`.
613
642
  *
614
643
  * @public
615
644
  */
616
645
  declare const TsconfigLoader: {
617
- readonly load: (configPath: string) => Effect.Effect<TsconfigJson.Type, TsconfigParseError | PlatformError.PlatformError, FileSystem.FileSystem | Path.Path>;
618
- readonly resolve: (configPath: string) => Effect.Effect<ResolvedTsconfig, TsconfigParseError | TsconfigExtendsError | PlatformError.PlatformError, FileSystem.FileSystem | Path.Path>;
646
+ readonly load: (configPath: string) => Effect.Effect<{
647
+ readonly [x: string]: unknown;
648
+ readonly compilerOptions?: {
649
+ readonly [x: string]: unknown;
650
+ readonly target?: "es2015" | "es2016" | "es2017" | "es2018" | "es2019" | "es2020" | "es2021" | "es2022" | "es2023" | "es2024" | "es2025" | "es5" | "es6" | "esnext" | undefined;
651
+ readonly module?: "amd" | "commonjs" | "es2015" | "es2020" | "es2022" | "es6" | "esnext" | "node16" | "node18" | "node20" | "nodenext" | "none" | "preserve" | "system" | "umd" | undefined;
652
+ readonly moduleResolution?: "bundler" | "classic" | "node" | "node10" | "node16" | "nodenext" | undefined;
653
+ readonly jsx?: "preserve" | "react" | "react-jsx" | "react-jsxdev" | "react-native" | undefined;
654
+ readonly newLine?: "crlf" | "lf" | undefined;
655
+ readonly moduleDetection?: "auto" | "force" | "legacy" | undefined;
656
+ readonly lib?: readonly ("decorators" | "decorators.legacy" | "dom" | "dom.asynciterable" | "dom.iterable" | "es2015" | "es2015.collection" | "es2015.core" | "es2015.generator" | "es2015.iterable" | "es2015.promise" | "es2015.proxy" | "es2015.reflect" | "es2015.symbol" | "es2015.symbol.wellknown" | "es2016" | "es2016.array.include" | "es2016.intl" | "es2017" | "es2017.arraybuffer" | "es2017.date" | "es2017.intl" | "es2017.object" | "es2017.sharedmemory" | "es2017.string" | "es2017.typedarrays" | "es2018" | "es2018.asyncgenerator" | "es2018.asynciterable" | "es2018.intl" | "es2018.promise" | "es2018.regexp" | "es2019" | "es2019.array" | "es2019.intl" | "es2019.object" | "es2019.string" | "es2019.symbol" | "es2020" | "es2020.bigint" | "es2020.date" | "es2020.intl" | "es2020.number" | "es2020.promise" | "es2020.sharedmemory" | "es2020.string" | "es2020.symbol.wellknown" | "es2021" | "es2021.intl" | "es2021.promise" | "es2021.string" | "es2021.weakref" | "es2022" | "es2022.array" | "es2022.error" | "es2022.intl" | "es2022.object" | "es2022.regexp" | "es2022.string" | "es2023" | "es2023.array" | "es2023.collection" | "es2023.intl" | "es2024" | "es2024.arraybuffer" | "es2024.collection" | "es2024.object" | "es2024.promise" | "es2024.regexp" | "es2024.sharedmemory" | "es2024.string" | "es2025" | "es2025.collection" | "es2025.float16" | "es2025.intl" | "es2025.iterator" | "es2025.promise" | "es2025.regexp" | "es5" | "es6" | "es7" | "esnext" | "esnext.array" | "esnext.asynciterable" | "esnext.bigint" | "esnext.collection" | "esnext.date" | "esnext.decorators" | "esnext.disposable" | "esnext.error" | "esnext.float16" | "esnext.intl" | "esnext.iterator" | "esnext.object" | "esnext.promise" | "esnext.regexp" | "esnext.sharedmemory" | "esnext.string" | "esnext.symbol" | "esnext.temporal" | "esnext.typedarrays" | "esnext.weakref" | "scripthost" | "webworker" | "webworker.asynciterable" | "webworker.importscripts" | "webworker.iterable")[] | undefined;
657
+ readonly ignoreDeprecations?: "5.0" | "6.0" | undefined;
658
+ readonly strict?: boolean | undefined;
659
+ readonly noImplicitAny?: boolean | undefined;
660
+ readonly strictNullChecks?: boolean | undefined;
661
+ readonly strictFunctionTypes?: boolean | undefined;
662
+ readonly strictBindCallApply?: boolean | undefined;
663
+ readonly strictPropertyInitialization?: boolean | undefined;
664
+ readonly strictBuiltinIteratorReturn?: boolean | undefined;
665
+ readonly noImplicitThis?: boolean | undefined;
666
+ readonly useUnknownInCatchVariables?: boolean | undefined;
667
+ readonly alwaysStrict?: boolean | undefined;
668
+ readonly noUnusedLocals?: boolean | undefined;
669
+ readonly noUnusedParameters?: boolean | undefined;
670
+ readonly exactOptionalPropertyTypes?: boolean | undefined;
671
+ readonly noImplicitReturns?: boolean | undefined;
672
+ readonly noFallthroughCasesInSwitch?: boolean | undefined;
673
+ readonly noUncheckedIndexedAccess?: boolean | undefined;
674
+ readonly noImplicitOverride?: boolean | undefined;
675
+ readonly noPropertyAccessFromIndexSignature?: boolean | undefined;
676
+ readonly allowUnusedLabels?: boolean | undefined;
677
+ readonly allowUnreachableCode?: boolean | undefined;
678
+ readonly noUncheckedSideEffectImports?: boolean | undefined;
679
+ readonly allowJs?: boolean | undefined;
680
+ readonly checkJs?: boolean | undefined;
681
+ readonly resolveJsonModule?: boolean | undefined;
682
+ readonly allowArbitraryExtensions?: boolean | undefined;
683
+ readonly allowImportingTsExtensions?: boolean | undefined;
684
+ readonly rewriteRelativeImportExtensions?: boolean | undefined;
685
+ readonly resolvePackageJsonExports?: boolean | undefined;
686
+ readonly resolvePackageJsonImports?: boolean | undefined;
687
+ readonly allowSyntheticDefaultImports?: boolean | undefined;
688
+ readonly esModuleInterop?: boolean | undefined;
689
+ readonly preserveSymlinks?: boolean | undefined;
690
+ readonly allowUmdGlobalAccess?: boolean | undefined;
691
+ readonly verbatimModuleSyntax?: boolean | undefined;
692
+ readonly isolatedModules?: boolean | undefined;
693
+ readonly isolatedDeclarations?: boolean | undefined;
694
+ readonly erasableSyntaxOnly?: boolean | undefined;
695
+ readonly forceConsistentCasingInFileNames?: boolean | undefined;
696
+ readonly declaration?: boolean | undefined;
697
+ readonly declarationMap?: boolean | undefined;
698
+ readonly emitDeclarationOnly?: boolean | undefined;
699
+ readonly sourceMap?: boolean | undefined;
700
+ readonly inlineSourceMap?: boolean | undefined;
701
+ readonly inlineSources?: boolean | undefined;
702
+ readonly removeComments?: boolean | undefined;
703
+ readonly importHelpers?: boolean | undefined;
704
+ readonly downlevelIteration?: boolean | undefined;
705
+ readonly emitBOM?: boolean | undefined;
706
+ readonly noEmit?: boolean | undefined;
707
+ readonly noEmitHelpers?: boolean | undefined;
708
+ readonly noEmitOnError?: boolean | undefined;
709
+ readonly preserveConstEnums?: boolean | undefined;
710
+ readonly stripInternal?: boolean | undefined;
711
+ readonly experimentalDecorators?: boolean | undefined;
712
+ readonly emitDecoratorMetadata?: boolean | undefined;
713
+ readonly useDefineForClassFields?: boolean | undefined;
714
+ readonly noCheck?: boolean | undefined;
715
+ readonly composite?: boolean | undefined;
716
+ readonly incremental?: boolean | undefined;
717
+ readonly disableSourceOfProjectReferenceRedirect?: boolean | undefined;
718
+ readonly disableSolutionSearching?: boolean | undefined;
719
+ readonly disableReferencedProjectLoad?: boolean | undefined;
720
+ readonly assumeChangesOnlyAffectDirectDependencies?: boolean | undefined;
721
+ readonly noErrorTruncation?: boolean | undefined;
722
+ readonly noLib?: boolean | undefined;
723
+ readonly noResolve?: boolean | undefined;
724
+ readonly skipDefaultLibCheck?: boolean | undefined;
725
+ readonly skipLibCheck?: boolean | undefined;
726
+ readonly diagnostics?: boolean | undefined;
727
+ readonly extendedDiagnostics?: boolean | undefined;
728
+ readonly listFiles?: boolean | undefined;
729
+ readonly listFilesOnly?: boolean | undefined;
730
+ readonly listEmittedFiles?: boolean | undefined;
731
+ readonly explainFiles?: boolean | undefined;
732
+ readonly traceResolution?: boolean | undefined;
733
+ readonly preserveWatchOutput?: boolean | undefined;
734
+ readonly pretty?: boolean | undefined;
735
+ readonly disableSizeLimit?: boolean | undefined;
736
+ readonly libReplacement?: boolean | undefined;
737
+ readonly stableTypeOrdering?: boolean | undefined;
738
+ readonly outFile?: string | undefined;
739
+ readonly outDir?: string | undefined;
740
+ readonly rootDir?: string | undefined;
741
+ readonly declarationDir?: string | undefined;
742
+ readonly sourceRoot?: string | undefined;
743
+ readonly mapRoot?: string | undefined;
744
+ readonly tsBuildInfoFile?: string | undefined;
745
+ readonly baseUrl?: string | undefined;
746
+ readonly generateCpuProfile?: string | undefined;
747
+ readonly generateTrace?: string | undefined;
748
+ readonly typeRoots?: readonly string[] | undefined;
749
+ readonly rootDirs?: readonly string[] | undefined;
750
+ readonly jsxFactory?: string | undefined;
751
+ readonly jsxFragmentFactory?: string | undefined;
752
+ readonly jsxImportSource?: string | undefined;
753
+ readonly reactNamespace?: string | undefined;
754
+ readonly types?: readonly string[] | undefined;
755
+ readonly customConditions?: readonly string[] | undefined;
756
+ readonly moduleSuffixes?: readonly string[] | undefined;
757
+ readonly paths?: {
758
+ readonly [x: string]: readonly string[];
759
+ } | undefined;
760
+ readonly plugins?: readonly {
761
+ readonly [x: string]: unknown;
762
+ readonly name: string;
763
+ }[] | undefined;
764
+ readonly maxNodeModuleJsDepth?: number | undefined;
765
+ } | undefined;
766
+ readonly extends?: string | readonly string[] | undefined;
767
+ readonly files?: readonly string[] | undefined;
768
+ readonly include?: readonly string[] | undefined;
769
+ readonly exclude?: readonly string[] | undefined;
770
+ readonly references?: readonly {
771
+ readonly [x: string]: unknown;
772
+ readonly path: string;
773
+ }[] | undefined;
774
+ readonly watchOptions?: {
775
+ readonly [x: string]: unknown;
776
+ readonly watchFile?: "dynamicprioritypolling" | "fixedchunksizepolling" | "fixedpollinginterval" | "prioritypollinginterval" | "usefsevents" | "usefseventsonparentdirectory" | undefined;
777
+ readonly watchDirectory?: "dynamicprioritypolling" | "fixedchunksizepolling" | "fixedpollinginterval" | "usefsevents" | undefined;
778
+ readonly fallbackPolling?: "dynamicpriority" | "fixedchunksize" | "fixedinterval" | "priorityinterval" | undefined;
779
+ readonly synchronousWatchDirectory?: boolean | undefined;
780
+ readonly excludeDirectories?: readonly string[] | undefined;
781
+ readonly excludeFiles?: readonly string[] | undefined;
782
+ } | undefined;
783
+ readonly typeAcquisition?: {
784
+ readonly [x: string]: unknown;
785
+ readonly enable?: boolean | undefined;
786
+ readonly include?: readonly string[] | undefined;
787
+ readonly exclude?: readonly string[] | undefined;
788
+ readonly disableFilenameBasedTypeAcquisition?: boolean | undefined;
789
+ } | undefined;
790
+ readonly compileOnSave?: boolean | undefined;
791
+ readonly $schema?: string | undefined;
792
+ }, PlatformError.PlatformError | TsconfigParseError, FileSystem.FileSystem | Path.Path>;
793
+ readonly resolve: (configPath: string) => Effect.Effect<ResolvedTsconfig, PlatformError.PlatformError | TsconfigExtendsError | TsconfigParseError, FileSystem.FileSystem | Path.Path>;
794
+ readonly compilerOptions: (configPath: string) => Effect.Effect<{
795
+ readonly [x: string]: unknown;
796
+ readonly target?: "es2015" | "es2016" | "es2017" | "es2018" | "es2019" | "es2020" | "es2021" | "es2022" | "es2023" | "es2024" | "es2025" | "es5" | "es6" | "esnext" | undefined;
797
+ readonly module?: "amd" | "commonjs" | "es2015" | "es2020" | "es2022" | "es6" | "esnext" | "node16" | "node18" | "node20" | "nodenext" | "none" | "preserve" | "system" | "umd" | undefined;
798
+ readonly moduleResolution?: "bundler" | "classic" | "node" | "node10" | "node16" | "nodenext" | undefined;
799
+ readonly jsx?: "preserve" | "react" | "react-jsx" | "react-jsxdev" | "react-native" | undefined;
800
+ readonly newLine?: "crlf" | "lf" | undefined;
801
+ readonly moduleDetection?: "auto" | "force" | "legacy" | undefined;
802
+ readonly lib?: readonly ("decorators" | "decorators.legacy" | "dom" | "dom.asynciterable" | "dom.iterable" | "es2015" | "es2015.collection" | "es2015.core" | "es2015.generator" | "es2015.iterable" | "es2015.promise" | "es2015.proxy" | "es2015.reflect" | "es2015.symbol" | "es2015.symbol.wellknown" | "es2016" | "es2016.array.include" | "es2016.intl" | "es2017" | "es2017.arraybuffer" | "es2017.date" | "es2017.intl" | "es2017.object" | "es2017.sharedmemory" | "es2017.string" | "es2017.typedarrays" | "es2018" | "es2018.asyncgenerator" | "es2018.asynciterable" | "es2018.intl" | "es2018.promise" | "es2018.regexp" | "es2019" | "es2019.array" | "es2019.intl" | "es2019.object" | "es2019.string" | "es2019.symbol" | "es2020" | "es2020.bigint" | "es2020.date" | "es2020.intl" | "es2020.number" | "es2020.promise" | "es2020.sharedmemory" | "es2020.string" | "es2020.symbol.wellknown" | "es2021" | "es2021.intl" | "es2021.promise" | "es2021.string" | "es2021.weakref" | "es2022" | "es2022.array" | "es2022.error" | "es2022.intl" | "es2022.object" | "es2022.regexp" | "es2022.string" | "es2023" | "es2023.array" | "es2023.collection" | "es2023.intl" | "es2024" | "es2024.arraybuffer" | "es2024.collection" | "es2024.object" | "es2024.promise" | "es2024.regexp" | "es2024.sharedmemory" | "es2024.string" | "es2025" | "es2025.collection" | "es2025.float16" | "es2025.intl" | "es2025.iterator" | "es2025.promise" | "es2025.regexp" | "es5" | "es6" | "es7" | "esnext" | "esnext.array" | "esnext.asynciterable" | "esnext.bigint" | "esnext.collection" | "esnext.date" | "esnext.decorators" | "esnext.disposable" | "esnext.error" | "esnext.float16" | "esnext.intl" | "esnext.iterator" | "esnext.object" | "esnext.promise" | "esnext.regexp" | "esnext.sharedmemory" | "esnext.string" | "esnext.symbol" | "esnext.temporal" | "esnext.typedarrays" | "esnext.weakref" | "scripthost" | "webworker" | "webworker.asynciterable" | "webworker.importscripts" | "webworker.iterable")[] | undefined;
803
+ readonly ignoreDeprecations?: "5.0" | "6.0" | undefined;
804
+ readonly strict?: boolean | undefined;
805
+ readonly noImplicitAny?: boolean | undefined;
806
+ readonly strictNullChecks?: boolean | undefined;
807
+ readonly strictFunctionTypes?: boolean | undefined;
808
+ readonly strictBindCallApply?: boolean | undefined;
809
+ readonly strictPropertyInitialization?: boolean | undefined;
810
+ readonly strictBuiltinIteratorReturn?: boolean | undefined;
811
+ readonly noImplicitThis?: boolean | undefined;
812
+ readonly useUnknownInCatchVariables?: boolean | undefined;
813
+ readonly alwaysStrict?: boolean | undefined;
814
+ readonly noUnusedLocals?: boolean | undefined;
815
+ readonly noUnusedParameters?: boolean | undefined;
816
+ readonly exactOptionalPropertyTypes?: boolean | undefined;
817
+ readonly noImplicitReturns?: boolean | undefined;
818
+ readonly noFallthroughCasesInSwitch?: boolean | undefined;
819
+ readonly noUncheckedIndexedAccess?: boolean | undefined;
820
+ readonly noImplicitOverride?: boolean | undefined;
821
+ readonly noPropertyAccessFromIndexSignature?: boolean | undefined;
822
+ readonly allowUnusedLabels?: boolean | undefined;
823
+ readonly allowUnreachableCode?: boolean | undefined;
824
+ readonly noUncheckedSideEffectImports?: boolean | undefined;
825
+ readonly allowJs?: boolean | undefined;
826
+ readonly checkJs?: boolean | undefined;
827
+ readonly resolveJsonModule?: boolean | undefined;
828
+ readonly allowArbitraryExtensions?: boolean | undefined;
829
+ readonly allowImportingTsExtensions?: boolean | undefined;
830
+ readonly rewriteRelativeImportExtensions?: boolean | undefined;
831
+ readonly resolvePackageJsonExports?: boolean | undefined;
832
+ readonly resolvePackageJsonImports?: boolean | undefined;
833
+ readonly allowSyntheticDefaultImports?: boolean | undefined;
834
+ readonly esModuleInterop?: boolean | undefined;
835
+ readonly preserveSymlinks?: boolean | undefined;
836
+ readonly allowUmdGlobalAccess?: boolean | undefined;
837
+ readonly verbatimModuleSyntax?: boolean | undefined;
838
+ readonly isolatedModules?: boolean | undefined;
839
+ readonly isolatedDeclarations?: boolean | undefined;
840
+ readonly erasableSyntaxOnly?: boolean | undefined;
841
+ readonly forceConsistentCasingInFileNames?: boolean | undefined;
842
+ readonly declaration?: boolean | undefined;
843
+ readonly declarationMap?: boolean | undefined;
844
+ readonly emitDeclarationOnly?: boolean | undefined;
845
+ readonly sourceMap?: boolean | undefined;
846
+ readonly inlineSourceMap?: boolean | undefined;
847
+ readonly inlineSources?: boolean | undefined;
848
+ readonly removeComments?: boolean | undefined;
849
+ readonly importHelpers?: boolean | undefined;
850
+ readonly downlevelIteration?: boolean | undefined;
851
+ readonly emitBOM?: boolean | undefined;
852
+ readonly noEmit?: boolean | undefined;
853
+ readonly noEmitHelpers?: boolean | undefined;
854
+ readonly noEmitOnError?: boolean | undefined;
855
+ readonly preserveConstEnums?: boolean | undefined;
856
+ readonly stripInternal?: boolean | undefined;
857
+ readonly experimentalDecorators?: boolean | undefined;
858
+ readonly emitDecoratorMetadata?: boolean | undefined;
859
+ readonly useDefineForClassFields?: boolean | undefined;
860
+ readonly noCheck?: boolean | undefined;
861
+ readonly composite?: boolean | undefined;
862
+ readonly incremental?: boolean | undefined;
863
+ readonly disableSourceOfProjectReferenceRedirect?: boolean | undefined;
864
+ readonly disableSolutionSearching?: boolean | undefined;
865
+ readonly disableReferencedProjectLoad?: boolean | undefined;
866
+ readonly assumeChangesOnlyAffectDirectDependencies?: boolean | undefined;
867
+ readonly noErrorTruncation?: boolean | undefined;
868
+ readonly noLib?: boolean | undefined;
869
+ readonly noResolve?: boolean | undefined;
870
+ readonly skipDefaultLibCheck?: boolean | undefined;
871
+ readonly skipLibCheck?: boolean | undefined;
872
+ readonly diagnostics?: boolean | undefined;
873
+ readonly extendedDiagnostics?: boolean | undefined;
874
+ readonly listFiles?: boolean | undefined;
875
+ readonly listFilesOnly?: boolean | undefined;
876
+ readonly listEmittedFiles?: boolean | undefined;
877
+ readonly explainFiles?: boolean | undefined;
878
+ readonly traceResolution?: boolean | undefined;
879
+ readonly preserveWatchOutput?: boolean | undefined;
880
+ readonly pretty?: boolean | undefined;
881
+ readonly disableSizeLimit?: boolean | undefined;
882
+ readonly libReplacement?: boolean | undefined;
883
+ readonly stableTypeOrdering?: boolean | undefined;
884
+ readonly outFile?: string | undefined;
885
+ readonly outDir?: string | undefined;
886
+ readonly rootDir?: string | undefined;
887
+ readonly declarationDir?: string | undefined;
888
+ readonly sourceRoot?: string | undefined;
889
+ readonly mapRoot?: string | undefined;
890
+ readonly tsBuildInfoFile?: string | undefined;
891
+ readonly baseUrl?: string | undefined;
892
+ readonly generateCpuProfile?: string | undefined;
893
+ readonly generateTrace?: string | undefined;
894
+ readonly typeRoots?: readonly string[] | undefined;
895
+ readonly rootDirs?: readonly string[] | undefined;
896
+ readonly jsxFactory?: string | undefined;
897
+ readonly jsxFragmentFactory?: string | undefined;
898
+ readonly jsxImportSource?: string | undefined;
899
+ readonly reactNamespace?: string | undefined;
900
+ readonly types?: readonly string[] | undefined;
901
+ readonly customConditions?: readonly string[] | undefined;
902
+ readonly moduleSuffixes?: readonly string[] | undefined;
903
+ readonly paths?: {
904
+ readonly [x: string]: readonly string[];
905
+ } | undefined;
906
+ readonly plugins?: readonly {
907
+ readonly [x: string]: unknown;
908
+ readonly name: string;
909
+ }[] | undefined;
910
+ readonly maxNodeModuleJsDepth?: number | undefined;
911
+ }, PlatformError.PlatformError | TsconfigExtendsError | TsconfigParseError, FileSystem.FileSystem | Path.Path>;
912
+ };
913
+ //#endregion
914
+ //#region src/TsconfigLoaderSync.d.ts
915
+ /**
916
+ * The synchronous file operations {@link TsconfigLoaderSync} needs, supplied
917
+ * by the consumer. Node's built-ins satisfy it directly:
918
+ *
919
+ * ```ts
920
+ * import { existsSync, readFileSync } from "node:fs";
921
+ *
922
+ * const fileSystem: SyncFileSystem = {
923
+ * exists: existsSync,
924
+ * readFile: (p) => readFileSync(p, "utf8"),
925
+ * };
926
+ * ```
927
+ *
928
+ * `readFile` returns the file's text and may throw on failure (a missing
929
+ * file, a permission error); the throw is wrapped in a `PlatformError` and
930
+ * rethrown through the loader's typed channel.
931
+ *
932
+ * @public
933
+ */
934
+ interface SyncFileSystem {
935
+ /** Whether a file exists at `path`. Directory hits follow the loader's documented file-only contract. */
936
+ readonly exists: (path: string) => boolean;
937
+ /** Read the file at `path` as text. May throw; the throw surfaces as a `PlatformError`. */
938
+ readonly readFile: (path: string) => string;
939
+ }
940
+ /**
941
+ * The synchronous path operations {@link TsconfigLoaderSync} needs, supplied
942
+ * by the consumer. Deliberately a structural subset of `node:path`, so the
943
+ * built-in module (and its `win32` / `posix` variants, or a Bun / Deno
944
+ * equivalent) satisfies it verbatim:
945
+ *
946
+ * ```ts
947
+ * import * as path from "node:path";
948
+ *
949
+ * const options: TsconfigLoaderSyncOptions = {
950
+ * fileSystem: { exists: existsSync, readFile: (p) => readFileSync(p, "utf8") },
951
+ * path, // node:path IS a SyncPath
952
+ * };
953
+ * ```
954
+ *
955
+ * The loader passes these through untouched — Windows correctness comes from
956
+ * supplying a win32-appropriate implementation, not from anything here.
957
+ *
958
+ * @public
959
+ */
960
+ interface SyncPath {
961
+ /** Resolve segments to an absolute path (rightmost-wins, like `path.resolve`). */
962
+ readonly resolve: (...segments: ReadonlyArray<string>) => string;
963
+ /** The directory portion of `p` (like `path.dirname`). */
964
+ readonly dirname: (p: string) => string;
965
+ /** Join segments with the implementation's separator (like `path.join`). */
966
+ readonly join: (...segments: ReadonlyArray<string>) => string;
967
+ /** Whether `p` is absolute under this implementation's convention. */
968
+ readonly isAbsolute: (p: string) => boolean;
969
+ /** The final segment of `p` (like `path.basename`). */
970
+ readonly basename: (p: string) => string;
971
+ }
972
+ /**
973
+ * The consumer-supplied operations backing one {@link TsconfigLoaderSync}
974
+ * call: the file operations and the path implementation. Both are required —
975
+ * this package never imports `node:*` and never assumes posix, so the
976
+ * platform binding is entirely the caller's.
977
+ *
978
+ * @public
979
+ */
980
+ interface TsconfigLoaderSyncOptions {
981
+ /** The synchronous file operations (Node: `existsSync` / `readFileSync`). */
982
+ readonly fileSystem: SyncFileSystem;
983
+ /** The synchronous path implementation (Node: the `node:path` module itself). */
984
+ readonly path: SyncPath;
985
+ }
986
+ /**
987
+ * The synchronous tsconfig.json loader facade: the {@link TsconfigLoader}
988
+ * pipeline run under `Effect.runSyncExit` against consumer-supplied
989
+ * {@link SyncFileSystem} and {@link SyncPath} operations. For sync-only host
990
+ * APIs (bundler plugin hooks, config factories); everything else should use
991
+ * {@link TsconfigLoader} with real platform layers.
992
+ *
993
+ * @remarks
994
+ * The two adapters treat unsupported members asymmetrically: a `Path` member
995
+ * the loader pipeline never calls throws a named defect on contact, while a
996
+ * `FileSystem` member outside the two overridden here (`exists`,
997
+ * `readFileString`) inherits `FileSystem.makeNoop`'s typed `NotFound`
998
+ * failure. A loader change that starts using a new filesystem operation
999
+ * therefore surfaces as a `NotFound` rather than a defect — extend the
1000
+ * adapter when that happens.
1001
+ *
1002
+ * ```ts
1003
+ * import { existsSync, readFileSync } from "node:fs";
1004
+ * import * as path from "node:path";
1005
+ * import { TsconfigLoaderSync } from "@effected/tsconfig-json";
1006
+ *
1007
+ * const resolved = TsconfigLoaderSync.resolve("./tsconfig.json", {
1008
+ * fileSystem: { exists: existsSync, readFile: (p) => readFileSync(p, "utf8") },
1009
+ * path,
1010
+ * });
1011
+ * ```
1012
+ *
1013
+ * @public
1014
+ */
1015
+ declare const TsconfigLoaderSync: {
1016
+ readonly load: (configPath: string, options: TsconfigLoaderSyncOptions) => TsconfigJson.Type;
1017
+ readonly resolve: (configPath: string, options: TsconfigLoaderSyncOptions) => ResolvedTsconfig;
1018
+ readonly compilerOptions: (configPath: string, options: TsconfigLoaderSyncOptions) => CompilerOptions.Type;
619
1019
  };
620
1020
  //#endregion
621
1021
  //#region src/TsEnumCodec.d.ts
@@ -641,5 +1041,5 @@ declare const TsEnumCodec: {
641
1041
  readonly decodeCompilerOptions: (numeric: Readonly<Record<string, unknown>>) => Record<string, unknown>;
642
1042
  };
643
1043
  //#endregion
644
- export { CompilerOptions, type EnumFamily, FallbackPolling, type FindNearestOptions, Jsx, Lib, Module, ModuleDetection, ModuleResolution, NewLine, PortableTsconfig, Reference, ResolvedTsconfig, Target, TsEnumCodec, TsconfigDiscovery, TsconfigExtendsError, TsconfigJson, TsconfigJsonFromString, TsconfigLoader, TsconfigParseError, TypeAcquisition, WatchDirectory, WatchFile, WatchOptions };
1044
+ export { CompilerOptions, type EnumFamily, FallbackPolling, type FindNearestOptions, Jsx, JsxConfig, Lib, Module, ModuleDetection, ModuleResolution, NewLine, PortableTsconfig, Reference, ResolvedTsconfig, type SyncFileSystem, type SyncPath, Target, TsEnumCodec, TsconfigDiscovery, TsconfigExtendsError, TsconfigJson, TsconfigJsonFromString, TsconfigLoader, TsconfigLoaderSync, type TsconfigLoaderSyncOptions, TsconfigParseError, TypeAcquisition, WatchDirectory, WatchFile, WatchOptions };
645
1045
  //# sourceMappingURL=index.d.ts.map
package/index.js CHANGED
@@ -1,9 +1,11 @@
1
1
  import { CompilerOptions, Jsx, Lib, Module, ModuleDetection, ModuleResolution, NewLine, Target } from "./CompilerOptions.js";
2
+ import { JsxConfig } from "./JsxConfig.js";
2
3
  import { PortableTsconfig } from "./PortableTsconfig.js";
3
4
  import { ResolvedTsconfig } from "./ResolvedTsconfig.js";
4
5
  import { TsconfigDiscovery } from "./TsconfigDiscovery.js";
5
6
  import { FallbackPolling, Reference, TsconfigJson, TsconfigJsonFromString, TsconfigParseError, TypeAcquisition, WatchDirectory, WatchFile, WatchOptions } from "./TsconfigJson.js";
6
7
  import { TsconfigExtendsError, TsconfigLoader } from "./TsconfigLoader.js";
8
+ import { TsconfigLoaderSync } from "./TsconfigLoaderSync.js";
7
9
  import { TsEnumCodec } from "./TsEnumCodec.js";
8
10
 
9
- export { CompilerOptions, FallbackPolling, Jsx, Lib, Module, ModuleDetection, ModuleResolution, NewLine, PortableTsconfig, Reference, ResolvedTsconfig, Target, TsEnumCodec, TsconfigDiscovery, TsconfigExtendsError, TsconfigJson, TsconfigJsonFromString, TsconfigLoader, TsconfigParseError, TypeAcquisition, WatchDirectory, WatchFile, WatchOptions };
11
+ export { CompilerOptions, FallbackPolling, Jsx, JsxConfig, Lib, Module, ModuleDetection, ModuleResolution, NewLine, PortableTsconfig, Reference, ResolvedTsconfig, Target, TsEnumCodec, TsconfigDiscovery, TsconfigExtendsError, TsconfigJson, TsconfigJsonFromString, TsconfigLoader, TsconfigLoaderSync, TsconfigParseError, TypeAcquisition, WatchDirectory, WatchFile, WatchOptions };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effected/tsconfig-json",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "private": false,
5
5
  "description": "Composable tsconfig.json handling for Effect: schemas, extends-chain resolution, and config discovery.",
6
6
  "keywords": [
@@ -38,8 +38,8 @@
38
38
  "./package.json": "./package.json"
39
39
  },
40
40
  "peerDependencies": {
41
- "@effected/jsonc": "0.1.0",
42
- "@effected/walker": "0.1.0",
41
+ "@effected/jsonc": "0.2.0",
42
+ "@effected/walker": "0.2.0",
43
43
  "effect": "4.0.0-beta.98"
44
44
  },
45
45
  "engines": {
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.58.9"
8
+ "packageVersion": "7.58.10"
9
9
  }
10
10
  ]
11
11
  }