@next-box/appsettings 0.0.6 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -14
- package/dist/cjs/hooks/createUseAppSettings.cjs +2 -0
- package/dist/cjs/hooks/createUseAppSettings.cjs.map +1 -0
- package/dist/cjs/hooks/createUseSetting.cjs +2 -0
- package/dist/cjs/hooks/createUseSetting.cjs.map +1 -0
- package/dist/cjs/index.cjs +1 -1
- package/dist/esm/hooks/createUseAppSettings.mjs +2 -0
- package/dist/esm/hooks/createUseAppSettings.mjs.map +1 -0
- package/dist/esm/hooks/createUseSetting.mjs +2 -0
- package/dist/esm/hooks/createUseSetting.mjs.map +1 -0
- package/dist/esm/index.mjs +1 -1
- package/dist/types/cjs/hooks/createUseAppSettings.d.cts +4 -0
- package/dist/types/cjs/hooks/createUseAppSettings.d.cts.map +1 -0
- package/dist/types/cjs/hooks/createUseSetting.d.cts +4 -0
- package/dist/types/cjs/hooks/createUseSetting.d.cts.map +1 -0
- package/dist/types/cjs/index.d.cts +2 -5
- package/dist/types/cjs/index.d.cts.map +1 -1
- package/dist/types/cjs/types/Config.types.d.cts +2 -2
- package/dist/types/cjs/types/Config.types.d.cts.map +1 -1
- package/dist/types/esm/hooks/createUseAppSettings.d.ts +4 -0
- package/dist/types/esm/hooks/createUseAppSettings.d.ts.map +1 -0
- package/dist/types/esm/hooks/createUseSetting.d.ts +4 -0
- package/dist/types/esm/hooks/createUseSetting.d.ts.map +1 -0
- package/dist/types/esm/index.d.ts +2 -5
- package/dist/types/esm/index.d.ts.map +1 -1
- package/dist/types/esm/types/Config.types.d.ts +2 -2
- package/dist/types/esm/types/Config.types.d.ts.map +1 -1
- package/dist/types/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/components/AppSettingsProvider.test.tsx +4 -1
- package/src/hooks/{useAppSetting.test.tsx → createUseAppSetting.test.tsx} +12 -6
- package/src/hooks/{useAppSettings.test.tsx → createUseAppSettings.test.tsx} +5 -3
- package/src/hooks/createUseAppSettings.ts +12 -0
- package/src/hooks/createUseSetting.ts +12 -0
- package/src/index.ts +2 -7
- package/src/types/Config.types.ts +2 -3
- package/dist/cjs/hooks/useAppSetting.cjs +0 -2
- package/dist/cjs/hooks/useAppSetting.cjs.map +0 -1
- package/dist/cjs/hooks/useAppSettings.cjs +0 -2
- package/dist/cjs/hooks/useAppSettings.cjs.map +0 -1
- package/dist/esm/hooks/useAppSetting.mjs +0 -2
- package/dist/esm/hooks/useAppSetting.mjs.map +0 -1
- package/dist/esm/hooks/useAppSettings.mjs +0 -2
- package/dist/esm/hooks/useAppSettings.mjs.map +0 -1
- package/dist/types/cjs/hooks/useAppSetting.d.cts +0 -6
- package/dist/types/cjs/hooks/useAppSetting.d.cts.map +0 -1
- package/dist/types/cjs/hooks/useAppSettings.d.cts +0 -8
- package/dist/types/cjs/hooks/useAppSettings.d.cts.map +0 -1
- package/dist/types/esm/hooks/useAppSetting.d.ts +0 -6
- package/dist/types/esm/hooks/useAppSetting.d.ts.map +0 -1
- package/dist/types/esm/hooks/useAppSettings.d.ts +0 -8
- package/dist/types/esm/hooks/useAppSettings.d.ts.map +0 -1
- package/src/hooks/useAppSetting.ts +0 -14
- package/src/hooks/useAppSettings.ts +0 -19
package/README.md
CHANGED
|
@@ -80,9 +80,9 @@ export default async function RootLayout({ children }: { children: React.ReactNo
|
|
|
80
80
|
|
|
81
81
|
return (
|
|
82
82
|
<html lang="en">
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
<body>
|
|
84
|
+
<AppSettingsProvider settings={settings}>{children}</AppSettingsProvider>
|
|
85
|
+
</body>
|
|
86
86
|
</html>
|
|
87
87
|
);
|
|
88
88
|
}
|
|
@@ -132,35 +132,80 @@ Each later source overrides earlier values according to the merge rules describe
|
|
|
132
132
|
|
|
133
133
|
### Read settings
|
|
134
134
|
|
|
135
|
-
Paths use dot notation.
|
|
135
|
+
Paths use dot notation. The library provides two hook factories:
|
|
136
|
+
|
|
137
|
+
- `createUseSetting` creates a hook for reading individual setting values.
|
|
138
|
+
- `createUseAppSettings` creates a hook for reading object sections.
|
|
139
|
+
|
|
140
|
+
Both factories accept your application's settings type and return a fully typed React hook.
|
|
141
|
+
|
|
142
|
+
#### Create typed hooks
|
|
143
|
+
|
|
144
|
+
Create the hooks once, outside your React components:
|
|
145
|
+
|
|
146
|
+
```ts
|
|
147
|
+
// ./src/hooks/appSettings.ts
|
|
148
|
+
'use client';
|
|
149
|
+
|
|
150
|
+
import {
|
|
151
|
+
createUseAppSettings,
|
|
152
|
+
createUseSetting,
|
|
153
|
+
} from '@next-box/appsettings';
|
|
154
|
+
|
|
155
|
+
import type { AppSettingsConfig } from '../appSettings.schema';
|
|
156
|
+
|
|
157
|
+
export const useSetting = createUseSetting<AppSettingsConfig>();
|
|
158
|
+
|
|
159
|
+
export const useAppSettings = createUseAppSettings<AppSettingsConfig>();
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
#### Use the hooks in components
|
|
136
163
|
|
|
137
164
|
```tsx
|
|
138
165
|
// ./src/ApiTimeout.tsx
|
|
139
166
|
'use client';
|
|
140
167
|
|
|
141
|
-
import {
|
|
168
|
+
import { useAppSettings, useSetting } from './hooks/appSettings';
|
|
142
169
|
|
|
143
170
|
export const ApiTimeout = () => {
|
|
144
|
-
const timeout =
|
|
171
|
+
const timeout = useSetting('Api.Timeout');
|
|
172
|
+
const api = useAppSettings('Api');
|
|
145
173
|
const features = useAppSettings('Features');
|
|
146
174
|
|
|
147
|
-
return
|
|
175
|
+
return (
|
|
176
|
+
<span>
|
|
177
|
+
{features?.DarkMode ? `${api?.BaseUrl} (${timeout}ms)` : 'Disabled'}
|
|
178
|
+
</span>
|
|
179
|
+
);
|
|
148
180
|
};
|
|
149
181
|
```
|
|
150
182
|
|
|
151
|
-
|
|
183
|
+
#### Type inference
|
|
184
|
+
|
|
185
|
+
Given the `AppSettingsConfig` schema defined above:
|
|
152
186
|
|
|
153
|
-
|
|
187
|
+
```ts
|
|
188
|
+
const timeout = useSetting('Api.Timeout');
|
|
189
|
+
// number | undefined
|
|
154
190
|
|
|
155
|
-
|
|
191
|
+
const baseUrl = useSetting('Api.BaseUrl');
|
|
192
|
+
// string | undefined
|
|
156
193
|
|
|
157
|
-
|
|
158
|
-
|
|
194
|
+
const api = useAppSettings('Api');
|
|
195
|
+
// { BaseUrl: string; Timeout: number } | undefined
|
|
196
|
+
|
|
197
|
+
const features = useAppSettings('Features');
|
|
198
|
+
// { DarkMode: boolean; NewDashboard: boolean } | undefined
|
|
199
|
+
|
|
200
|
+
useSetting('Api.InvalidProperty');
|
|
201
|
+
// TypeScript error
|
|
159
202
|
```
|
|
160
203
|
|
|
161
|
-
|
|
204
|
+
Both hooks return `undefined` when the requested path does not exist.
|
|
205
|
+
|
|
206
|
+
The settings snapshot is read-only. Configuration is loaded and validated before it reaches the provider; there are no client-side mutation or reload methods.
|
|
162
207
|
|
|
163
|
-
|
|
208
|
+
No module augmentation or generated declaration files are required. Each application supplies its settings type explicitly when creating its hooks.
|
|
164
209
|
|
|
165
210
|
### Conditionally render with `Setting`
|
|
166
211
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createUseAppSettings.cjs","sources":["../../../src/hooks/createUseAppSettings.ts"],"sourcesContent":["import { type Get } from 'type-fest';\nimport { type SettingSectionPath } from '#types/Config.types.ts';\nimport { useAppSettingsContext } from './useAppSettingsContext.ts';\n\nexport const createUseAppSettings = <T extends object>() => {\n return <P extends SettingSectionPath<T>>(path: P): Get<T, P> | undefined => {\n const settings = useAppSettingsContext();\n // Assert the resolved settings type based on the caller-provided schema and path.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return settings.read(path) as Get<T, P> | undefined;\n };\n};\n"],"names":["path","useAppSettingsContext","read"],"mappings":"uFAIoC,IACOA,GACtBC,EAAAA,wBAGDC,KAAKF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createUseSetting.cjs","sources":["../../../src/hooks/createUseSetting.ts"],"sourcesContent":["import { type Get } from 'type-fest';\nimport { useAppSettingsContext } from '#hooks/useAppSettingsContext.ts';\nimport { type SettingPath } from '#types/Config.types.ts';\n\nexport const createUseSetting = <T extends object>() => {\n return <P extends SettingPath<T>>(path: P): Get<T, P> | undefined => {\n const settings = useAppSettingsContext();\n // Assert the resolved setting type based on the caller-provided schema and path.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return settings.read(path) as Get<T, P> | undefined;\n };\n};\n"],"names":["path","useAppSettingsContext","read"],"mappings":"mFAIgC,IACIA,GACfC,EAAAA,wBAGDC,KAAKF"}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("./components/AppSettingsProvider.cjs"),t=require("./components/Setting.cjs"),s=require("./hooks/
|
|
1
|
+
"use strict";var e=require("./components/AppSettingsProvider.cjs"),t=require("./components/Setting.cjs"),s=require("./hooks/createUseSetting.cjs"),r=require("./hooks/createUseAppSettings.cjs"),p=require("./hooks/useAppSettingsContext.cjs");exports.AppSettingsProvider=e.AppSettingsProvider,exports.Setting=t.Setting,exports.createUseSetting=s.createUseSetting,exports.createUseAppSettings=r.createUseAppSettings,exports.useAppSettingsContext=p.useAppSettingsContext;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createUseAppSettings.mjs","sources":["../../../src/hooks/createUseAppSettings.ts"],"sourcesContent":["import { type Get } from 'type-fest';\nimport { type SettingSectionPath } from '#types/Config.types.ts';\nimport { useAppSettingsContext } from './useAppSettingsContext.ts';\n\nexport const createUseAppSettings = <T extends object>() => {\n return <P extends SettingSectionPath<T>>(path: P): Get<T, P> | undefined => {\n const settings = useAppSettingsContext();\n // Assert the resolved settings type based on the caller-provided schema and path.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return settings.read(path) as Get<T, P> | undefined;\n };\n};\n"],"names":["createUseAppSettings","path","useAppSettingsContext","read"],"mappings":"0EAIaA,EAAuB,IACOC,GACtBC,IAGDC,KAAKF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createUseSetting.mjs","sources":["../../../src/hooks/createUseSetting.ts"],"sourcesContent":["import { type Get } from 'type-fest';\nimport { useAppSettingsContext } from '#hooks/useAppSettingsContext.ts';\nimport { type SettingPath } from '#types/Config.types.ts';\n\nexport const createUseSetting = <T extends object>() => {\n return <P extends SettingPath<T>>(path: P): Get<T, P> | undefined => {\n const settings = useAppSettingsContext();\n // Assert the resolved setting type based on the caller-provided schema and path.\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return settings.read(path) as Get<T, P> | undefined;\n };\n};\n"],"names":["createUseSetting","path","useAppSettingsContext","read"],"mappings":"0EAIaA,EAAmB,IACIC,GACfC,IAGDC,KAAKF"}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{AppSettingsProvider}from"./components/AppSettingsProvider.mjs";export{Setting}from"./components/Setting.mjs";export{
|
|
1
|
+
export{AppSettingsProvider}from"./components/AppSettingsProvider.mjs";export{Setting}from"./components/Setting.mjs";export{createUseSetting}from"./hooks/createUseSetting.mjs";export{createUseAppSettings}from"./hooks/createUseAppSettings.mjs";export{useAppSettingsContext}from"./hooks/useAppSettingsContext.mjs";
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Get } from 'type-fest';
|
|
2
|
+
import { type SettingSectionPath } from '#types/Config.types.cts';
|
|
3
|
+
export declare const createUseAppSettings: <T extends object>() => <P extends SettingSectionPath<T>>(path: P) => Get<T, P> | undefined;
|
|
4
|
+
//# sourceMappingURL=createUseAppSettings.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createUseAppSettings.d.cts","sourceRoot":"","sources":["../../../../src/hooks/createUseAppSettings.cts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,MAAM,QAC3C,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAMhE,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Get } from 'type-fest';
|
|
2
|
+
import { type SettingPath } from '#types/Config.types.cts';
|
|
3
|
+
export declare const createUseSetting: <T extends object>() => <P extends SettingPath<T>>(path: P) => Get<T, P> | undefined;
|
|
4
|
+
//# sourceMappingURL=createUseSetting.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createUseSetting.d.cts","sourceRoot":"","sources":["../../../../src/hooks/createUseSetting.cts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,MAAM,QACvC,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAMzD,CAAC"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
export { AppSettingsProvider } from '#components/AppSettingsProvider.ctsx';
|
|
2
2
|
export { Setting } from '#components/Setting.ctsx';
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
3
|
+
export { createUseSetting } from '#hooks/createUseSetting.cts';
|
|
4
|
+
export { createUseAppSettings } from '#hooks/createUseAppSettings.cts';
|
|
5
5
|
export { useAppSettingsContext } from '#hooks/useAppSettingsContext.cts';
|
|
6
6
|
export type { AppSettings, ScopedSettings } from '#types/AppSettings.types.cts';
|
|
7
7
|
export type { SettingPath, SettingSectionPath, SettingValue } from '#types/Config.types.cts';
|
|
8
|
-
export interface AppSettingsSchema {
|
|
9
|
-
readonly __appSettingsSchema?: never;
|
|
10
|
-
}
|
|
11
8
|
//# sourceMappingURL=index.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/index.cts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/index.cts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC/E,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -5,8 +5,8 @@ export type SettingPath<T extends object, Depth extends number = 5> = Depth exte
|
|
|
5
5
|
[K in Extract<keyof T, string>]: T[K] extends Primitive | readonly Primitive[] ? K : T[K] extends object ? `${K}.${SettingPath<T[K], PreviousDepth[Depth]>}` : K;
|
|
6
6
|
}[Extract<keyof T, string>];
|
|
7
7
|
export type SettingSectionPath<T extends object, Depth extends number = 5> = Depth extends 0 ? never : {
|
|
8
|
-
[K in
|
|
9
|
-
}[
|
|
8
|
+
[K in Extract<keyof T, string>]: NonNullable<T[K]> extends Primitive | readonly Primitive[] ? never : NonNullable<T[K]> extends object ? K | `${K}.${SettingSectionPath<NonNullable<T[K]>, PreviousDepth[Depth]>}` : never;
|
|
9
|
+
}[Extract<keyof T, string>];
|
|
10
10
|
export type SettingValue<T extends object, P extends SettingPath<T>> = Get<T, P>;
|
|
11
11
|
export {};
|
|
12
12
|
//# sourceMappingURL=Config.types.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.types.d.cts","sourceRoot":"","sources":["../../../../src/types/Config.types.cts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEhF,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/C,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,GACjF,KAAK,GACL;KACG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,SAAS,EAAE,GAC1E,CAAC,GACD,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,GACjD,CAAC;CACR,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhC,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,GACxF,KAAK,GACL;KACG,CAAC,IAAI,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"Config.types.d.cts","sourceRoot":"","sources":["../../../../src/types/Config.types.cts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEhF,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/C,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,GACjF,KAAK,GACL;KACG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,SAAS,EAAE,GAC1E,CAAC,GACD,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,GACjD,CAAC;CACR,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhC,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,GACxF,KAAK,GACL;KACG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,SAAS,EAAE,GACvF,KAAK,GACL,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAC9B,CAAC,GAAG,GAAG,CAAC,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,GACzE,KAAK;CACZ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhC,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Get } from 'type-fest';
|
|
2
|
+
import { type SettingSectionPath } from '#types/Config.types.ts';
|
|
3
|
+
export declare const createUseAppSettings: <T extends object>() => <P extends SettingSectionPath<T>>(path: P) => Get<T, P> | undefined;
|
|
4
|
+
//# sourceMappingURL=createUseAppSettings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createUseAppSettings.d.ts","sourceRoot":"","sources":["../../../../src/hooks/createUseAppSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,MAAM,QAC3C,CAAC,SAAS,kBAAkB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAMhE,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Get } from 'type-fest';
|
|
2
|
+
import { type SettingPath } from '#types/Config.types.ts';
|
|
3
|
+
export declare const createUseSetting: <T extends object>() => <P extends SettingPath<T>>(path: P) => Get<T, P> | undefined;
|
|
4
|
+
//# sourceMappingURL=createUseSetting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createUseSetting.d.ts","sourceRoot":"","sources":["../../../../src/hooks/createUseSetting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,MAAM,QACvC,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAMzD,CAAC"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
export { AppSettingsProvider } from '#components/AppSettingsProvider.tsx';
|
|
2
2
|
export { Setting } from '#components/Setting.tsx';
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
3
|
+
export { createUseSetting } from '#hooks/createUseSetting.ts';
|
|
4
|
+
export { createUseAppSettings } from '#hooks/createUseAppSettings.ts';
|
|
5
5
|
export { useAppSettingsContext } from '#hooks/useAppSettingsContext.ts';
|
|
6
6
|
export type { AppSettings, ScopedSettings } from '#types/AppSettings.types.ts';
|
|
7
7
|
export type { SettingPath, SettingSectionPath, SettingValue } from '#types/Config.types.ts';
|
|
8
|
-
export interface AppSettingsSchema {
|
|
9
|
-
readonly __appSettingsSchema?: never;
|
|
10
|
-
}
|
|
11
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC/E,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -5,8 +5,8 @@ export type SettingPath<T extends object, Depth extends number = 5> = Depth exte
|
|
|
5
5
|
[K in Extract<keyof T, string>]: T[K] extends Primitive | readonly Primitive[] ? K : T[K] extends object ? `${K}.${SettingPath<T[K], PreviousDepth[Depth]>}` : K;
|
|
6
6
|
}[Extract<keyof T, string>];
|
|
7
7
|
export type SettingSectionPath<T extends object, Depth extends number = 5> = Depth extends 0 ? never : {
|
|
8
|
-
[K in
|
|
9
|
-
}[
|
|
8
|
+
[K in Extract<keyof T, string>]: NonNullable<T[K]> extends Primitive | readonly Primitive[] ? never : NonNullable<T[K]> extends object ? K | `${K}.${SettingSectionPath<NonNullable<T[K]>, PreviousDepth[Depth]>}` : never;
|
|
9
|
+
}[Extract<keyof T, string>];
|
|
10
10
|
export type SettingValue<T extends object, P extends SettingPath<T>> = Get<T, P>;
|
|
11
11
|
export {};
|
|
12
12
|
//# sourceMappingURL=Config.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.types.d.ts","sourceRoot":"","sources":["../../../../src/types/Config.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEhF,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/C,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,GACjF,KAAK,GACL;KACG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,SAAS,EAAE,GAC1E,CAAC,GACD,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,GACjD,CAAC;CACR,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhC,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,GACxF,KAAK,GACL;KACG,CAAC,IAAI,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"Config.types.d.ts","sourceRoot":"","sources":["../../../../src/types/Config.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEhF,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/C,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,GACjF,KAAK,GACL;KACG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,SAAS,EAAE,GAC1E,CAAC,GACD,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACjB,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,GACjD,CAAC;CACR,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhC,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,GACxF,KAAK,GACL;KACG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,SAAS,EAAE,GACvF,KAAK,GACL,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAC9B,CAAC,GAAG,GAAG,CAAC,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,GACzE,KAAK;CACZ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhC,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
|