@shipfox/client-config 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +2 -0
- package/.turbo/turbo-type$colon$emit.log +1 -0
- package/.turbo/turbo-type.log +1 -0
- package/CHANGELOG.md +56 -0
- package/LICENSE +21 -0
- package/dist/config-error-screen.d.ts +17 -0
- package/dist/config-error-screen.d.ts.map +1 -0
- package/dist/config-error-screen.js +109 -0
- package/dist/config-error-screen.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/load-config.d.ts +55 -0
- package/dist/load-config.d.ts.map +1 -0
- package/dist/load-config.js +59 -0
- package/dist/load-config.js.map +1 -0
- package/dist/runtime-config.d.ts +17 -0
- package/dist/runtime-config.d.ts.map +1 -0
- package/dist/runtime-config.js +22 -0
- package/dist/runtime-config.js.map +1 -0
- package/dist/tsconfig.test.tsbuildinfo +1 -0
- package/package.json +66 -0
- package/src/config-error-screen.test.tsx +31 -0
- package/src/config-error-screen.tsx +81 -0
- package/src/index.ts +3 -0
- package/src/load-config.test.ts +86 -0
- package/src/load-config.ts +93 -0
- package/src/runtime-config.ts +38 -0
- package/test/setup.ts +3 -0
- package/tsconfig.build.json +10 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/tsconfig.json +3 -0
- package/tsconfig.test.json +8 -0
- package/vitest.config.ts +31 -0
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@shipfox/client-config",
|
|
3
|
+
"license": "MIT",
|
|
4
|
+
"version": "0.2.0",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/ShipfoxHQ/shipfox.git",
|
|
8
|
+
"directory": "libs/client/config"
|
|
9
|
+
},
|
|
10
|
+
"type": "module",
|
|
11
|
+
"main": "dist/index.js",
|
|
12
|
+
"types": "dist/index.d.ts",
|
|
13
|
+
"imports": {
|
|
14
|
+
"#*": {
|
|
15
|
+
"workspace-source": "./src/*",
|
|
16
|
+
"development": "./src/*",
|
|
17
|
+
"default": "./dist/*"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"development": {
|
|
23
|
+
"types": "./src/index.ts",
|
|
24
|
+
"default": "./src/index.ts"
|
|
25
|
+
},
|
|
26
|
+
"default": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"default": "./dist/index.js"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@swc/helpers": "^0.5.17",
|
|
34
|
+
"@shipfox/react-ui": "0.3.1"
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"react": "^19.0.0",
|
|
38
|
+
"react-dom": "^19.0.0",
|
|
39
|
+
"zod": "^4.4.3"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@testing-library/jest-dom": "^6.6.3",
|
|
43
|
+
"@testing-library/react": "^16.3.2",
|
|
44
|
+
"@types/react": "^19.1.11",
|
|
45
|
+
"@types/react-dom": "^19.1.7",
|
|
46
|
+
"jsdom": "^29.0.0",
|
|
47
|
+
"react": "^19.1.1",
|
|
48
|
+
"react-dom": "^19.1.1",
|
|
49
|
+
"zod": "^4.4.3",
|
|
50
|
+
"@shipfox/biome": "1.8.1",
|
|
51
|
+
"@shipfox/client-test-setup": "0.0.2",
|
|
52
|
+
"@shipfox/ts-config": "1.3.8",
|
|
53
|
+
"@shipfox/typescript": "1.1.6",
|
|
54
|
+
"@shipfox/swc": "1.2.5",
|
|
55
|
+
"@shipfox/vitest": "1.2.2"
|
|
56
|
+
},
|
|
57
|
+
"scripts": {
|
|
58
|
+
"build": "shipfox-swc",
|
|
59
|
+
"check": "shipfox-biome-check",
|
|
60
|
+
"check:fix": "shipfox-biome-check --write",
|
|
61
|
+
"test": "shipfox-vitest-run",
|
|
62
|
+
"test:watch": "shipfox-vitest-watch",
|
|
63
|
+
"type": "shipfox-tsc-check",
|
|
64
|
+
"type:emit": "shipfox-tsc-emit"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import {render, screen} from '@testing-library/react';
|
|
2
|
+
import {ConfigErrorScreen} from './config-error-screen.js';
|
|
3
|
+
import type {ConfigKeyError} from './load-config.js';
|
|
4
|
+
|
|
5
|
+
const apiUrlError: ConfigKeyError = {
|
|
6
|
+
key: 'apiUrl',
|
|
7
|
+
envVars: ['SHIPFOX_PUBLIC_API_URL', 'VITE_API_URL'],
|
|
8
|
+
description: 'Base URL of the Shipfox API.',
|
|
9
|
+
message: 'Invalid URL',
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
describe('ConfigErrorScreen', () => {
|
|
13
|
+
it('shows each key with its description, reason, and env var', () => {
|
|
14
|
+
render(<ConfigErrorScreen errors={[apiUrlError]} />);
|
|
15
|
+
|
|
16
|
+
expect(screen.getByText('apiUrl')).toBeInTheDocument();
|
|
17
|
+
expect(screen.getByText('Base URL of the Shipfox API.')).toBeInTheDocument();
|
|
18
|
+
expect(screen.getByText('Invalid URL')).toBeInTheDocument();
|
|
19
|
+
expect(screen.getByText('SHIPFOX_PUBLIC_API_URL')).toBeInTheDocument();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('renders the docs link only when a url is given', () => {
|
|
23
|
+
const {rerender} = render(<ConfigErrorScreen errors={[apiUrlError]} />);
|
|
24
|
+
|
|
25
|
+
expect(screen.queryByRole('link')).toBeNull();
|
|
26
|
+
|
|
27
|
+
rerender(<ConfigErrorScreen errors={[apiUrlError]} docsUrl="https://docs.shipfox.io/config" />);
|
|
28
|
+
|
|
29
|
+
expect(screen.getByRole('link')).toHaveAttribute('href', 'https://docs.shipfox.io/config');
|
|
30
|
+
});
|
|
31
|
+
});
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import {ButtonLink} from '@shipfox/react-ui/button';
|
|
2
|
+
import {Card, CardContent, CardDescription, CardHeader, CardTitle} from '@shipfox/react-ui/card';
|
|
3
|
+
import {Icon} from '@shipfox/react-ui/icon';
|
|
4
|
+
import {Code, Text} from '@shipfox/react-ui/typography';
|
|
5
|
+
import type {ConfigKeyError} from './load-config.js';
|
|
6
|
+
|
|
7
|
+
export interface ConfigErrorScreenProps {
|
|
8
|
+
errors: ConfigKeyError[];
|
|
9
|
+
/** Link to the self-hosting configuration guide. */
|
|
10
|
+
docsUrl?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Full-screen configuration diagnostic shown instead of the app when required
|
|
15
|
+
* config is missing or invalid. It lists every problem at once with the exact
|
|
16
|
+
* environment variable to set, so a self-hoster fixes the deployment in one pass
|
|
17
|
+
* rather than discovering errors one failed request at a time.
|
|
18
|
+
*
|
|
19
|
+
* Rendered outside the app's auth/router tree but inside `ThemeProvider` (see
|
|
20
|
+
* main.tsx), so it uses the design system directly.
|
|
21
|
+
*/
|
|
22
|
+
export function ConfigErrorScreen({errors, docsUrl}: ConfigErrorScreenProps) {
|
|
23
|
+
return (
|
|
24
|
+
<main className="flex min-h-screen items-center justify-center bg-background-subtle-base px-24 py-32">
|
|
25
|
+
<Card className="w-full max-w-[512px]">
|
|
26
|
+
<CardHeader>
|
|
27
|
+
<div className="flex items-center gap-8">
|
|
28
|
+
<Icon name="errorWarningLine" className="size-20 text-tag-error-icon" />
|
|
29
|
+
<CardTitle variant="h2">Configuration error</CardTitle>
|
|
30
|
+
</div>
|
|
31
|
+
<CardDescription>
|
|
32
|
+
The Shipfox client could not start because its configuration is missing or invalid. Set
|
|
33
|
+
the environment variables below and restart the container.
|
|
34
|
+
</CardDescription>
|
|
35
|
+
</CardHeader>
|
|
36
|
+
|
|
37
|
+
<CardContent className="flex flex-col">
|
|
38
|
+
{errors.map((error) => (
|
|
39
|
+
<div
|
|
40
|
+
key={error.key}
|
|
41
|
+
className="flex flex-col gap-4 border-t border-border-neutral-base py-12 first:border-t-0 first:pt-0"
|
|
42
|
+
>
|
|
43
|
+
<Code variant="label" bold className="text-foreground-neutral-base">
|
|
44
|
+
{error.key}
|
|
45
|
+
</Code>
|
|
46
|
+
{error.description ? (
|
|
47
|
+
<Text size="sm" className="text-foreground-neutral-muted">
|
|
48
|
+
{error.description}
|
|
49
|
+
</Text>
|
|
50
|
+
) : null}
|
|
51
|
+
<Text size="sm" className="text-tag-error-text">
|
|
52
|
+
{error.message}
|
|
53
|
+
</Text>
|
|
54
|
+
<Text size="xs" className="text-foreground-neutral-muted">
|
|
55
|
+
Set{' '}
|
|
56
|
+
<Code as="code" variant="label" className="text-foreground-neutral-subtle">
|
|
57
|
+
{error.envVars[0]}
|
|
58
|
+
</Code>{' '}
|
|
59
|
+
(self-hosting) or{' '}
|
|
60
|
+
<Code as="code" variant="label" className="text-foreground-neutral-subtle">
|
|
61
|
+
{error.envVars[1]}
|
|
62
|
+
</Code>{' '}
|
|
63
|
+
(build time).
|
|
64
|
+
</Text>
|
|
65
|
+
</div>
|
|
66
|
+
))}
|
|
67
|
+
</CardContent>
|
|
68
|
+
|
|
69
|
+
{docsUrl ? (
|
|
70
|
+
<Text size="sm" className="text-foreground-neutral-muted">
|
|
71
|
+
See the{' '}
|
|
72
|
+
<ButtonLink href={docsUrl} variant="interactive" underline>
|
|
73
|
+
self-hosting configuration guide
|
|
74
|
+
</ButtonLink>
|
|
75
|
+
.
|
|
76
|
+
</Text>
|
|
77
|
+
) : null}
|
|
78
|
+
</Card>
|
|
79
|
+
</main>
|
|
80
|
+
);
|
|
81
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import {z} from 'zod';
|
|
2
|
+
import {envNameFor, envVarsFor, loadConfig} from './load-config.js';
|
|
3
|
+
|
|
4
|
+
const shape = {
|
|
5
|
+
apiUrl: z.string().url().or(z.literal('')).default('').describe('Base URL of the Shipfox API.'),
|
|
6
|
+
datadogClientToken: z.string().describe('Datadog RUM client token.'),
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
describe('envNameFor', () => {
|
|
10
|
+
it.each([
|
|
11
|
+
['apiUrl', 'API_URL'],
|
|
12
|
+
['datadogClientToken', 'DATADOG_CLIENT_TOKEN'],
|
|
13
|
+
['datadogApplicationId', 'DATADOG_APPLICATION_ID'],
|
|
14
|
+
['environment', 'ENVIRONMENT'],
|
|
15
|
+
])('maps %s to %s', (key, expected) => {
|
|
16
|
+
const result = envNameFor(key);
|
|
17
|
+
|
|
18
|
+
expect(result).toBe(expected);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
describe('envVarsFor', () => {
|
|
23
|
+
it('lists the self-host and build-time env vars', () => {
|
|
24
|
+
const result = envVarsFor('apiUrl');
|
|
25
|
+
|
|
26
|
+
expect(result).toEqual(['SHIPFOX_PUBLIC_API_URL', 'VITE_API_URL']);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
describe('loadConfig', () => {
|
|
31
|
+
it('reads runtime values by their SCREAMING_SNAKE key', () => {
|
|
32
|
+
const result = loadConfig(shape, {
|
|
33
|
+
runtime: {API_URL: 'https://api.runtime.test', DATADOG_CLIENT_TOKEN: 'dd-token'},
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
expect(result).toEqual({
|
|
37
|
+
ok: true,
|
|
38
|
+
config: {apiUrl: 'https://api.runtime.test', datadogClientToken: 'dd-token'},
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('falls back to the build value when the runtime value is absent', () => {
|
|
43
|
+
const result = loadConfig(shape, {
|
|
44
|
+
runtime: {DATADOG_CLIENT_TOKEN: 'dd-token'},
|
|
45
|
+
build: {VITE_API_URL: 'https://api.build.test'},
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
expect(result.ok && result.config.apiUrl).toBe('https://api.build.test');
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('prefers the runtime value over the build value', () => {
|
|
52
|
+
const result = loadConfig(shape, {
|
|
53
|
+
runtime: {API_URL: 'https://api.runtime.test', DATADOG_CLIENT_TOKEN: 'dd-token'},
|
|
54
|
+
build: {VITE_API_URL: 'https://api.build.test'},
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
expect(result.ok && result.config.apiUrl).toBe('https://api.runtime.test');
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('applies schema defaults when a key is set in neither source', () => {
|
|
61
|
+
const result = loadConfig(shape, {runtime: {DATADOG_CLIENT_TOKEN: 'dd-token'}});
|
|
62
|
+
|
|
63
|
+
expect(result.ok && result.config.apiUrl).toBe('');
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('aggregates every missing or invalid key with its description and env vars', () => {
|
|
67
|
+
const result = loadConfig(shape, {runtime: {API_URL: 'not-a-url'}});
|
|
68
|
+
|
|
69
|
+
expect(result.ok).toBe(false);
|
|
70
|
+
if (result.ok) throw new Error('expected a config error');
|
|
71
|
+
expect(result.errors).toEqual([
|
|
72
|
+
{
|
|
73
|
+
key: 'apiUrl',
|
|
74
|
+
envVars: ['SHIPFOX_PUBLIC_API_URL', 'VITE_API_URL'],
|
|
75
|
+
description: 'Base URL of the Shipfox API.',
|
|
76
|
+
message: expect.any(String),
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
key: 'datadogClientToken',
|
|
80
|
+
envVars: ['SHIPFOX_PUBLIC_DATADOG_CLIENT_TOKEN', 'VITE_DATADOG_CLIENT_TOKEN'],
|
|
81
|
+
description: 'Datadog RUM client token.',
|
|
82
|
+
message: expect.any(String),
|
|
83
|
+
},
|
|
84
|
+
]);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import {z} from 'zod';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A config schema fragment: the Zod shape a feature module contributes. The app
|
|
5
|
+
* composes fragments from every module into one shape, then validates it once.
|
|
6
|
+
*/
|
|
7
|
+
export type ConfigShape = z.ZodRawShape;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The two places a config value can come from. The same image serves any
|
|
11
|
+
* deployment because the app reads both and lets `runtime` win:
|
|
12
|
+
*
|
|
13
|
+
* - `runtime` is `window.__SHIPFOX_CONFIG__`, written per deployment (the
|
|
14
|
+
* self-host Docker entrypoint, or a Vercel edge function). Keys are the
|
|
15
|
+
* SCREAMING_SNAKE form of each config key, matching the env var suffix
|
|
16
|
+
* (`apiUrl` -> `API_URL`).
|
|
17
|
+
* - `build` is `import.meta.env`, baked by Vite. Keys are `VITE_`-prefixed
|
|
18
|
+
* (`VITE_API_URL`). Used by the Vercel SaaS build and in local dev.
|
|
19
|
+
*/
|
|
20
|
+
export interface ConfigSources {
|
|
21
|
+
runtime?: Record<string, unknown> | undefined;
|
|
22
|
+
build?: Record<string, unknown> | undefined;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** One missing or invalid config key, shaped for reporting to a self-hoster. */
|
|
26
|
+
export interface ConfigKeyError {
|
|
27
|
+
key: string;
|
|
28
|
+
/** The env vars that set this key: `SHIPFOX_PUBLIC_*` (self-host), `VITE_*` (Vercel/dev). */
|
|
29
|
+
envVars: string[];
|
|
30
|
+
description: string | undefined;
|
|
31
|
+
message: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type ConfigResult<TConfig> =
|
|
35
|
+
| {ok: true; config: TConfig}
|
|
36
|
+
| {ok: false; errors: ConfigKeyError[]};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Maps a camelCase config key to the SCREAMING_SNAKE suffix shared by its env
|
|
40
|
+
* vars and its runtime-global key: `apiUrl` -> `API_URL`,
|
|
41
|
+
* `datadogClientToken` -> `DATADOG_CLIENT_TOKEN`. Deriving every name from one
|
|
42
|
+
* key is what keeps adding a config key to a single Zod-fragment edit.
|
|
43
|
+
*/
|
|
44
|
+
export function envNameFor(key: string): string {
|
|
45
|
+
return key.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** The `SHIPFOX_PUBLIC_*` then `VITE_*` env var names that feed a config key. */
|
|
49
|
+
export function envVarsFor(key: string): string[] {
|
|
50
|
+
const suffix = envNameFor(key);
|
|
51
|
+
return [`SHIPFOX_PUBLIC_${suffix}`, `VITE_${suffix}`];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Resolves and validates the config from both sources in a single pass.
|
|
56
|
+
*
|
|
57
|
+
* For each schema key, the runtime value wins over the build value; a value
|
|
58
|
+
* that is absent from both is left to the schema (its default applies, or it is
|
|
59
|
+
* reported as missing). Validation is aggregated, never fail-fast, so a
|
|
60
|
+
* misconfigured deployment learns about every problem at once.
|
|
61
|
+
*/
|
|
62
|
+
export function loadConfig<TShape extends ConfigShape>(
|
|
63
|
+
shape: TShape,
|
|
64
|
+
sources: ConfigSources,
|
|
65
|
+
): ConfigResult<z.infer<z.ZodObject<TShape>>> {
|
|
66
|
+
const input: Record<string, unknown> = {};
|
|
67
|
+
for (const key of Object.keys(shape)) {
|
|
68
|
+
const suffix = envNameFor(key);
|
|
69
|
+
const value = sources.runtime?.[suffix] ?? sources.build?.[`VITE_${suffix}`];
|
|
70
|
+
if (value !== undefined) input[key] = value;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const result = z.object(shape).safeParse(input);
|
|
74
|
+
if (result.success) return {ok: true, config: result.data};
|
|
75
|
+
|
|
76
|
+
return {ok: false, errors: toKeyErrors(result.error, shape)};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function toKeyErrors(error: z.ZodError, shape: ConfigShape): ConfigKeyError[] {
|
|
80
|
+
const byKey = new Map<string, ConfigKeyError>();
|
|
81
|
+
for (const issue of error.issues) {
|
|
82
|
+
const key = String(issue.path[0] ?? '');
|
|
83
|
+
if (byKey.has(key)) continue;
|
|
84
|
+
const field = shape[key] as {description?: string} | undefined;
|
|
85
|
+
byKey.set(key, {
|
|
86
|
+
key,
|
|
87
|
+
envVars: envVarsFor(key),
|
|
88
|
+
description: field?.description,
|
|
89
|
+
message: issue.message,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return [...byKey.values()];
|
|
93
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
interface Window {
|
|
3
|
+
// The runtime config object written before the app bundle loads. The
|
|
4
|
+
// self-host Docker entrypoint (or a Vercel edge function) populates it from
|
|
5
|
+
// environment variables; keys are SCREAMING_SNAKE (see envNameFor).
|
|
6
|
+
__SHIPFOX_CONFIG__?: Record<string, unknown> | undefined;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** Reads `window.__SHIPFOX_CONFIG__`, or undefined when not in a browser. */
|
|
11
|
+
export function getWindowRuntimeConfig(): Record<string, unknown> | undefined {
|
|
12
|
+
return typeof window === 'undefined' ? undefined : window.__SHIPFOX_CONFIG__;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let loaded: unknown;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Stores the validated config as a frozen, app-wide singleton at boot. The
|
|
19
|
+
* config is immutable for the lifetime of the page, so non-React code (such as
|
|
20
|
+
* the API client wiring) and `useConfig` can both read it without a provider.
|
|
21
|
+
*/
|
|
22
|
+
export function setLoadedConfig(config: unknown): void {
|
|
23
|
+
loaded = Object.freeze(config);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function getLoadedConfig<TConfig>(): TConfig {
|
|
27
|
+
if (loaded === undefined) {
|
|
28
|
+
throw new Error(
|
|
29
|
+
'Runtime config has not been loaded. Call loadConfig + setLoadedConfig at app boot before reading it.',
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
return loaded as TConfig;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** React accessor for the validated config. Config is immutable post-boot. */
|
|
36
|
+
export function useConfig<TConfig>(): TConfig {
|
|
37
|
+
return getLoadedConfig<TConfig>();
|
|
38
|
+
}
|
package/test/setup.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/@types+react@19.2.17/node_modules/@types/react/global.d.ts","../../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../../node_modules/.pnpm/@types+react@19.2.17/node_modules/@types/react/index.d.ts","../../../node_modules/.pnpm/@types+react@19.2.17/node_modules/@types/react/jsx-runtime.d.ts","../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/clsx.d.mts","../../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/types.d.ts","../../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.d.ts","../../../node_modules/.pnpm/@remixicon+react@4.9.0_react@19.2.7/node_modules/@remixicon/react/index.d.ts","../../shared/react/ui/dist/components/icon/custom/svg-icon-props.d.ts","../../shared/react/ui/dist/components/icon/custom/badge.d.ts","../../shared/react/ui/dist/components/icon/custom/check-circle-solid.d.ts","../../shared/react/ui/dist/components/icon/custom/circle-dotted-line.d.ts","../../shared/react/ui/dist/components/icon/custom/component-fill.d.ts","../../shared/react/ui/dist/components/icon/custom/component-line.d.ts","../../shared/react/ui/dist/components/icon/custom/ellipse-mini-solid.d.ts","../../shared/react/ui/dist/components/icon/custom/gitea-logo.d.ts","../../shared/react/ui/dist/components/icon/custom/info-tooltip-fill.d.ts","../../shared/react/ui/dist/components/icon/custom/linear-logo.d.ts","../../shared/react/ui/dist/components/icon/custom/resize.d.ts","../../shared/react/ui/dist/components/icon/custom/sentry-logo.d.ts","../../shared/react/ui/dist/components/icon/custom/shipfox-logo.d.ts","../../shared/react/ui/dist/components/icon/custom/slack-logo.d.ts","../../shared/react/ui/dist/components/icon/custom/spinner.d.ts","../../shared/react/ui/dist/components/icon/custom/stripe-logo.d.ts","../../shared/react/ui/dist/components/icon/custom/thunder.d.ts","../../shared/react/ui/dist/components/icon/custom/x-circle-solid.d.ts","../../shared/react/ui/dist/components/icon/custom/index.d.ts","../../shared/react/ui/dist/components/icon/icon.d.ts","../../shared/react/ui/dist/components/icon/index.d.ts","../../shared/react/ui/dist/components/button/button.d.ts","../../shared/react/ui/dist/components/button/button-link.d.ts","../../shared/react/ui/dist/components/button/icon-button.d.ts","../../shared/react/ui/dist/components/button/index.d.ts","../../shared/react/ui/dist/components/typography/code.d.ts","../../shared/react/ui/dist/components/typography/header.d.ts","../../shared/react/ui/dist/components/typography/text.d.ts","../../shared/react/ui/dist/components/typography/index.d.ts","../../shared/react/ui/dist/components/card/card.d.ts","../../shared/react/ui/dist/components/card/index.d.ts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/standard-schema.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/registries.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/to-json-schema.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/util.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/versions.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/schemas.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/checks.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/errors.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/core.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/parse.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/regexes.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ar.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/az.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/be.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/bg.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ca.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/cs.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/da.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/de.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/el.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/en.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/eo.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/es.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fa.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fi.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fr.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fr-ca.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/he.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hr.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hu.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hy.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/id.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/is.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/it.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ja.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ka.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/kh.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/km.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ko.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/lt.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/mk.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ms.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/nl.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/no.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ota.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ps.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/pl.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/pt.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ro.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ru.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/sl.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/sv.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ta.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/th.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/tr.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ua.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/uk.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ur.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/uz.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/vi.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/zh-cn.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/zh-tw.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/yo.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/index.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/doc.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/api.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-processors.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-generator.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/index.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/errors.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/parse.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/checks.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/compat.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/from-json-schema.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/iso.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/coerce.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/index.d.cts","./src/load-config.ts","./src/config-error-screen.tsx","./src/runtime-config.ts","./src/index.ts"],"fileIdsList":[[63,88,92,96,98,179],[63,179,180,181],[63,178],[63],[62,65,66,88],[89,90,91],[62,96],[97],[62,68],[69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85],[62,67],[62,67,86],[87],[62,65,66],[93,94,95],[62],[60,61],[64,65],[64],[177],[168],[168,171],[103,163,166,168,169,170,171,172,173,174,175,176],[99,101,171],[168,169],[100,168,170],[101,103,105,106,107,108],[103,105,107,108],[103,105,107],[100,103,105,106,108],[99,101,102,103,104,105,106,107,108,109,110,163,164,165,166,167],[99,101,102,105],[101,102,105],[105,108],[99,100,102,103,104,106,107,108],[99,100,101,105,168],[105,106,107,108],[107],[111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc782ff85b2cb10075ecffc158af7bfb27ff97bf8491c917efea0c3d622d5ac4","impliedFormat":1},{"version":"b838d4c72740eb0afd284bf7575b74c624b105eff2e8c7b4aeead57e7ac320ff","impliedFormat":1},{"version":"c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","impliedFormat":99},{"version":"2fbe402f0ee5aa8ab55367f88030f79d46211c0a0f342becaa9f648bf8534e9d","impliedFormat":1},{"version":"b94258ef37e67474ac5522e9c519489a55dcb3d4a8f645e335fc68ea2215fe88","impliedFormat":1},{"version":"e2fb4905b98dc8aaf64ecf2e1eaff4b306e9f7312a639cc92836575dd09bfe04","impliedFormat":1},"631fd719d012b301b239173bb97b9acae555313b6fa3152299cc9fd1226ad35a","2b8750dfe72137742f3be168ed52f4fc868316b791c59155d3ec84ef3a99e913","072c49181f44f1ef5a4c2b8436a7052651282573a41dfcf115412b9e44bf5f4a","689c0d681d9e79b5ab53630259384076fba525615d0288b05886c9f264c4cf55","9871074f765114494d094532f276934f90de0365046d052f694c972a97e31804","d09d826eedde6178265fee6161b430173599b463fbe6881dfe6d892077d438de","11c7055bf4ed618aea48098e49ffabbbb74179a090df76653d5a9bfe28b204b8","0ac86609b34b6b2232446956f444bc0466393766ab5a2fd095829a2c133fa82b","d61e84814ef18a47edd7a14e73f9ae14b7db3d43aa4fe78023e0037e8a8ddca8","3d72db5defa5774dcee63f5313ab08e1d274e0bb39250f98b2f20cc0f3762597","9f800f519f6a64791818673a49433ae1feb2624c53656fa6de390da92ba4c27b","52661ab17c4597782fbb704681581e77864e23f0f71cc123d06e28e3a3bfaf7b","6d0e96f1610a518201e9b1ae1de8a9a35d8b74b4a83e10f00e14538a54cf0c58","2873491cf7f7924ea1a3f459766252969cffee344b2288f09aec3f05ba424647","9e102dc6dcc1316a84c51c29db1c8edd22e9ddd348cb7e60d0f932fff064eb36","4b9bab2658af85bbb62430265e5ef8d6b6457b34515219d9428934ee8372e2bd","3224c4e0a476fb12055116b3d993d40a9e785072a1191e3983a963d2f2104d67","3c28b421ecf22fa57bd3f444971fd5c26d40697b0966065f7609415edb659e22","148b3ef1f6bb1aa3f969a2386540bf5f44abe0b924869ff61a8a679657f48372","f9022291b7ef994482583537bd1b4af59ddbc40fc6bc49f838242d1d5d215a7f","92570495891dbc9616067a25f57b641ad8b7bd44a2054d847b447bf05e749c8a","537915f47152a8898cf346ffecc732fc1bf708bca4e6f54d58754c0b03c7c110","e888815b05e7e3635feb31536466a5a5b0681a37a76c4f4fb67473b467102369","d6dd3f6c4ebbb4f7f9f74f1051b95cb7ee5847810857489e43825d16e86e391c","28979af97b9c86eed15afe2610d0fe412388611180202ad6c997feeaec206694","6dd6f2c92e702dac6e2073f3c0757ceaf2be6022afbf7cb2ed492420a4236638","4278ce3b162cfbd57e6438157aec5290224a424085d39cb6f19750e6b70c513d","32a0063559238fbf06290cf5cdd8a39d2ea8cd08920f53a2dd413f868681948c","5704911a45b621c8aae8e73bd1d6cfbfbbbac17a87515e4bc4a8f18f81c368bc","08e84b10f8f0aaecf13832e77194aed405790acf02351c0703c2394b9cbed242","80c2293059f8e2a3d4c0ae81fd1dd5f5a4a033486bfb161b1751e3fec2a41785",{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"40ba6c32eb732a09e4446ade5cb6ad0c147f186f9c9dc6878b90b4418ad9f6ea","impliedFormat":1},{"version":"fdd814741843f85c98281522c58f5a646590ba9019fad2efaa95987655e0611b","impliedFormat":1},{"version":"c78aff4fb58b28b8f642d5095fc7eeb79f00e652a67caa19693af1adabb833c9","impliedFormat":1},{"version":"f80a08ced8818dc99359c0acd5b3f12762e1ce53758007759b0d4e503cbf4a5e","impliedFormat":1},{"version":"37935fa7564bcc6e0bc845b766a24391098d26f7c8245d6e8ab37bc016816e94","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"0f8a263f4c8595c8a07de52e3f3927640c44386c1aa2984de9eae50d75e613b2","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"346fffde7c32da87c2196eb7494422449dc2ca82d3b4e6bf55be1d1a33ffc2b0","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8b5875e4958528042103fdd775e106a7f76bafc29709f0690df9a7d2241d52a7","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"aef26cf95593c8ace1c62c4724f9afac77bdfa756fb8a00613cd152117cb2f43","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"268fd6d9f2e807a39a6c5aa654b00f949feb63d3faa7dd0f9bba7dde9172159c","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"81b4c5f62e3ecf60b810b871800b462376f8a1b4db42520980c86b951c5bd177","signature":"aa29d1be960c190a0f355941244957e46b5872e93e0226b790eb92ac899715ad"},{"version":"c5ed7595dfe34a4677f53e7cdbdcd2b361917f38f146da7ff6c6e838edb4ce4e","signature":"ca401dbc6a990d546c8fbba121a687b616c0dd3da631e7838ed957da58870f00"},{"version":"2d2faae952971142cee89d0e49c72ae80168bdc630f5fcafacb776bb99d9492a","signature":"a6f2b8465b49438da3e7b83037053295853f58dd4980846c02db5684c06aa7b2","affectsGlobalScope":true},"c9a6ccf79876161eb978726db37eb4779f888b034765f50775512f451aa81d5c"],"root":[[179,182]],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"exactOptionalPropertyTypes":true,"jsx":4,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":9,"verbatimModuleSyntax":true},"referencedMap":[[180,1],[182,2],[179,3],[181,4],[90,5],[89,5],[91,5],[92,6],[97,7],[98,8],[69,9],[70,9],[71,9],[72,9],[73,9],[74,9],[75,9],[86,10],[76,9],[77,9],[78,9],[79,9],[80,11],[81,9],[82,9],[83,11],[68,11],[84,9],[85,9],[87,12],[88,13],[93,14],[94,14],[96,15],[95,14],[67,16],[62,17],[63,16],[66,18],[65,19],[178,20],[172,21],[176,22],[173,22],[169,21],[177,23],[174,24],[175,22],[170,25],[171,26],[165,27],[106,28],[108,29],[107,30],[168,31],[167,32],[166,33],[109,28],[101,34],[105,35],[102,36],[103,37],[111,38],[112,38],[113,38],[114,38],[115,38],[116,38],[117,38],[118,38],[119,38],[120,38],[121,38],[122,38],[123,38],[124,38],[126,38],[125,38],[127,38],[128,38],[129,38],[130,38],[131,38],[163,39],[132,38],[133,38],[134,38],[135,38],[136,38],[137,38],[138,38],[139,38],[140,38],[141,38],[142,38],[143,38],[144,38],[146,38],[145,38],[147,38],[148,38],[149,38],[150,38],[151,38],[152,38],[153,38],[154,38],[155,38],[156,38],[157,38],[158,38],[159,38],[162,38],[160,38],[161,38]],"semanticDiagnosticsPerFile":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182],"latestChangedDtsFile":"./dist/index.d.ts","checkPending":true,"version":"6.0.3"}
|
package/tsconfig.json
ADDED
package/vitest.config.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import {defineConfig, type UserConfigExport} from '@shipfox/vitest';
|
|
2
|
+
|
|
3
|
+
export default defineConfig(
|
|
4
|
+
{
|
|
5
|
+
test: {
|
|
6
|
+
projects: [
|
|
7
|
+
{
|
|
8
|
+
extends: true,
|
|
9
|
+
test: {
|
|
10
|
+
name: 'node',
|
|
11
|
+
environment: 'node',
|
|
12
|
+
include: ['src/**/*.test.ts'],
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
extends: true,
|
|
17
|
+
test: {
|
|
18
|
+
name: 'dom',
|
|
19
|
+
environment: 'jsdom',
|
|
20
|
+
// Files are isolation-safe (test/setup.ts resets DOM + api client), so reuse the
|
|
21
|
+
// module graph across files in a worker instead of re-importing it per file.
|
|
22
|
+
isolate: false,
|
|
23
|
+
include: ['src/**/*.test.tsx'],
|
|
24
|
+
setupFiles: ['test/setup.ts'],
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
import.meta.url,
|
|
31
|
+
) as UserConfigExport;
|