@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 +41 -0
- package/README.md +27 -1
- package/TsconfigLoader.js +17 -4
- package/TsconfigLoaderSync.js +131 -0
- package/index.d.ts +404 -4
- package/index.js +3 -1
- package/package.json +3 -3
- package/tsdoc-metadata.json +1 -1
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,
|
|
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 =
|
|
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 =
|
|
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<
|
|
618
|
-
|
|
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
|
|
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.
|
|
42
|
-
"@effected/walker": "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": {
|