hazo_config 2.1.6 → 2.1.12
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/CHANGE_LOG.md +21 -0
- package/README.md +9 -4
- package/dist/components/app_config.d.ts.map +1 -1
- package/dist/components/app_config.js +1 -0
- package/dist/components/app_config_list_editor/app_config_list_editor.d.ts +1 -1
- package/dist/components/app_config_list_editor/app_config_list_editor.d.ts.map +1 -1
- package/dist/components/app_config_list_editor/app_config_list_editor.js +1 -0
- package/dist/components/app_config_list_editor/components/color_swatch_picker.d.ts +1 -1
- package/dist/components/app_config_list_editor/components/color_swatch_picker.d.ts.map +1 -1
- package/dist/components/app_config_list_editor/components/delete_dialog.d.ts +1 -1
- package/dist/components/app_config_list_editor/components/delete_dialog.d.ts.map +1 -1
- package/dist/components/app_config_list_editor/components/edit_modal.d.ts +1 -1
- package/dist/components/app_config_list_editor/components/edit_modal.d.ts.map +1 -1
- package/dist/components/app_config_list_editor/components/edit_modal.js +1 -0
- package/dist/components/app_config_list_editor/components/empty_state.d.ts +1 -1
- package/dist/components/app_config_list_editor/components/empty_state.d.ts.map +1 -1
- package/dist/components/app_config_list_editor/components/import_export_buttons.d.ts +1 -1
- package/dist/components/app_config_list_editor/components/import_export_buttons.d.ts.map +1 -1
- package/dist/components/app_config_list_editor/components/import_export_buttons.js +1 -0
- package/dist/components/app_config_list_editor/components/list_item_row.d.ts +1 -1
- package/dist/components/app_config_list_editor/components/list_item_row.d.ts.map +1 -1
- package/dist/components/app_config_list_editor/components/save_status_indicator.d.ts +1 -1
- package/dist/components/app_config_list_editor/components/save_status_indicator.d.ts.map +1 -1
- package/dist/components/app_config_list_editor/components/save_status_indicator.js +1 -0
- package/dist/components/app_config_list_editor/components/search_bar.d.ts +1 -1
- package/dist/components/app_config_list_editor/components/search_bar.d.ts.map +1 -1
- package/dist/components/config_editor.d.ts.map +1 -1
- package/dist/components/config_editor.js +1 -0
- package/dist/components/config_viewer.d.ts.map +1 -1
- package/dist/components/config_viewer.js +1 -0
- package/dist/components/ui/alert-dialog.d.ts +2 -2
- package/dist/components/ui/dialog.d.ts +2 -2
- package/dist/components/use_app_config.d.ts.map +1 -1
- package/dist/components/use_app_config.js +1 -0
- package/dist/components/use_config_sections.d.ts.map +1 -1
- package/dist/components/use_config_sections.js +1 -0
- package/dist/lib/config_loader.d.ts +1 -0
- package/dist/lib/config_loader.d.ts.map +1 -1
- package/dist/lib/config_loader.js +35 -13
- package/dist/server/index.d.ts +8 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +8 -1
- package/package.json +4 -4
- package/dist/lib/utils.d.ts +0 -8
- package/dist/lib/utils.d.ts.map +0 -1
- package/dist/lib/utils.js +0 -12
package/CHANGE_LOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.1.11 — 2026-06-14
|
|
4
|
+
|
|
5
|
+
### Fixed (RSC bundling defect surfaced by hazo_admin)
|
|
6
|
+
- Added the `'use client'` directive to the 9 client component/hook modules re-exported from the package barrel (`config_viewer`, `config_editor`, `app_config`, `use_config_sections`, `use_app_config`, and the four `app_config_list_editor/*` files). All import React hooks (`useState`/`useEffect`/`useCallback`) but were missing the directive, so any server module that pulled in the `hazo_config` barrel — e.g. `hazo_admin`'s `createAdminPresetRoutes` install-probe (`import('hazo_config')`) inside an API route — failed `next build` with *"You're importing a module that depends on `useEffect` into a React Server Component module."* Turbopack stops at the first offending file (`edit_modal`), so the directive had to be added to every hook-using module to fully clear the error. Stories (`*.stories.tsx`) are build-excluded and left untouched.
|
|
7
|
+
|
|
8
|
+
## 2.1.10 — 2026-06-09
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- 2.1.10 — expose dotted [a.b] sections via getSection('a.b'); composite-key sections stored additively alongside flat sections.
|
|
12
|
+
|
|
13
|
+
## 2.1.9 — 2026-06-04
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
- `hazo_core/errors` probe: replaced the synchronous `createRequire('hazo_core/errors')` optional probe with a lazy `import(/* turbopackIgnore: true */ /* webpackIgnore: true */ 'hazo_core/errors')` fired at module init. Eliminates the `⚠ Module not found: Can't resolve 'hazo_core/errors'` Turbopack static-analysis warning in every Next 16 app that includes hazo_config in its server bundle. Also fixes a latent bug: the old `_require` call was dead code because `hazo_core/errors` is an ESM-only subpath export that CJS `require()` never resolved — `HazoConfigError` was always silently falling back to `LocalConfigError`. The new `import()` form actually resolves at runtime.
|
|
17
|
+
- `refresh()` null-prototype crash: `ini` v4 uses `Object.create(null)` for all parsed objects and creates nested null-prototype objects for dotted section names (e.g. `[parent.child]` → `parsed.parent = { child: {...} }`). Calling `String()` on a null-prototype object throws `"Cannot convert object to primitive value"` because there is no inherited `toString()`. Fixed by skipping nested object values in the value loop — hazo config uses flat sections; the dotted section name itself is the correct access key.
|
|
18
|
+
|
|
19
|
+
## 2.1.7 — 2026-05-30
|
|
20
|
+
|
|
21
|
+
### Fixed (bundling defect surfaced by seo_monitor)
|
|
22
|
+
- Removed `import 'server-only';` from `src/server/index.ts`. Next 15's "Collecting page data" build phase evaluates `route.ts` modules without setting the `react-server` resolution condition, so the marker throws and breaks `next build` for every legitimate server-side consumer (e.g. `hazo_notify/adapters/telegram` pulls `hazo_config/server` for INI parsing, which then loads in seo_monitor's telegram route at build time). Documented the deliberate omission in the file. `HazoConfig` uses `fs`/`path`, so a real Client Component import still fails at runtime — we just lose fail-fast at module load. Same root cause as hazo_logs@2.0.2 and hazo_api@2.1.1.
|
|
23
|
+
|
|
3
24
|
## 2.1.6 — 2026-05-29
|
|
4
25
|
|
|
5
26
|
### Changed (internal — no API surface change)
|
package/README.md
CHANGED
|
@@ -13,9 +13,9 @@ A React component library for managing configuration with database-backed storag
|
|
|
13
13
|
|
|
14
14
|
## Quick Start
|
|
15
15
|
|
|
16
|
-
1. Install the package:
|
|
16
|
+
1. Install the package (with its hazo peers):
|
|
17
17
|
```bash
|
|
18
|
-
npm install hazo_config
|
|
18
|
+
npm install hazo_config hazo_core hazo_ui
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
2. Add CSS custom properties to your `globals.css`:
|
|
@@ -59,7 +59,7 @@ See detailed setup instructions below.
|
|
|
59
59
|
### Installation
|
|
60
60
|
|
|
61
61
|
```bash
|
|
62
|
-
npm install hazo_config
|
|
62
|
+
npm install hazo_config hazo_core hazo_ui
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
### Styling Setup (Required)
|
|
@@ -150,7 +150,7 @@ import type { AppConfigItem, AppConfigContext, ConfigType } from 'hazo_config'
|
|
|
150
150
|
import { HazoConfig } from 'hazo_config/server'
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
**Why?** The `HazoConfig` class uses Node.js `fs` and `path` modules. Importing it in client code causes "Module not found: Can't resolve 'fs'" errors. The `/server` entry point
|
|
153
|
+
**Why?** The `HazoConfig` class uses Node.js `fs` and `path` modules. Importing it in client code causes "Module not found: Can't resolve 'fs'" errors. The `/server` entry point is intentionally kept without the `server-only` marker — Next.js's build phase evaluates route modules without the `react-server` condition, causing `server-only` to throw during `next build`. A real client-side import of `HazoConfig` still fails at runtime due to the `fs`/`path` usage.
|
|
154
154
|
|
|
155
155
|
### Major Version 2.0 Changes
|
|
156
156
|
|
|
@@ -171,6 +171,11 @@ import { HazoConfig } from 'hazo_config/server'
|
|
|
171
171
|
|
|
172
172
|
const config = new HazoConfig({ filePath: './config.ini' })
|
|
173
173
|
const dbHost = config.get('database', 'host')
|
|
174
|
+
|
|
175
|
+
// Dotted section names (e.g. [parent.child] in INI) are accessed as-is:
|
|
176
|
+
// [parent.child]
|
|
177
|
+
// key = value
|
|
178
|
+
const section = config.getSection('parent.child') // { key: 'value' }
|
|
174
179
|
```
|
|
175
180
|
|
|
176
181
|
### Example: Client-side Config Display (INI-based)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app_config.d.ts","sourceRoot":"","sources":["../../src/components/app_config.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app_config.d.ts","sourceRoot":"","sources":["../../src/components/app_config.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAyC,MAAM,OAAO,CAAA;AAK7D,OAAO,KAAK,EAAE,cAAc,EAA6B,MAAM,4BAA4B,CAAA;AA0P3F;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA6a9C,CAAA"}
|
|
@@ -3,5 +3,5 @@ import type { AppConfigListEditorProps } from './types.js';
|
|
|
3
3
|
* AppConfigListEditor - A polished CRUD list editor for config item arrays.
|
|
4
4
|
* Purely callback-based: no API calls, no database access.
|
|
5
5
|
*/
|
|
6
|
-
export declare function AppConfigListEditor<T extends Record<string, unknown>>({ items, on_items_change, columns, id_field, auto_id_from, title, description, enable_search, search_threshold, render_item, render_item_indicator, render_preview, delete_confirmation, max_items, id_editable_after_create, className, save_status, edit_modal_max_width, }: AppConfigListEditorProps<T>): import("react
|
|
6
|
+
export declare function AppConfigListEditor<T extends Record<string, unknown>>({ items, on_items_change, columns, id_field, auto_id_from, title, description, enable_search, search_threshold, render_item, render_item_indicator, render_preview, delete_confirmation, max_items, id_editable_after_create, className, save_status, edit_modal_max_width, }: AppConfigListEditorProps<T>): import("react").JSX.Element;
|
|
7
7
|
//# sourceMappingURL=app_config_list_editor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app_config_list_editor.d.ts","sourceRoot":"","sources":["../../../src/components/app_config_list_editor/app_config_list_editor.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app_config_list_editor.d.ts","sourceRoot":"","sources":["../../../src/components/app_config_list_editor/app_config_list_editor.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,wBAAwB,EAAqC,MAAM,YAAY,CAAA;AAS7F;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACrE,KAAK,EACL,eAAe,EACf,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,KAAK,EACL,WAAW,EACX,aAAqB,EACrB,gBAAoB,EACpB,WAAW,EACX,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,wBAAgC,EAChC,SAAS,EACT,WAAoB,EACpB,oBAAoB,GACrB,EAAE,wBAAwB,CAAC,CAAC,CAAC,+BAoQ7B"}
|
|
@@ -4,6 +4,6 @@ interface ColorSwatchPickerProps {
|
|
|
4
4
|
on_change: (color: string) => void;
|
|
5
5
|
className?: string;
|
|
6
6
|
}
|
|
7
|
-
export declare function ColorSwatchPicker({ value, options, on_change, className, }: ColorSwatchPickerProps): import("react
|
|
7
|
+
export declare function ColorSwatchPicker({ value, options, on_change, className, }: ColorSwatchPickerProps): import("react").JSX.Element;
|
|
8
8
|
export {};
|
|
9
9
|
//# sourceMappingURL=color_swatch_picker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color_swatch_picker.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/color_swatch_picker.tsx"],"names":[],"mappings":"AAMA,UAAU,sBAAsB;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAS,GACV,EAAE,sBAAsB
|
|
1
|
+
{"version":3,"file":"color_swatch_picker.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/color_swatch_picker.tsx"],"names":[],"mappings":"AAMA,UAAU,sBAAsB;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAS,GACV,EAAE,sBAAsB,+BA+BxB"}
|
|
@@ -5,6 +5,6 @@ interface DeleteDialogProps {
|
|
|
5
5
|
on_confirm: () => void;
|
|
6
6
|
on_cancel: () => void;
|
|
7
7
|
}
|
|
8
|
-
export declare function DeleteDialog({ open, item_name, message, on_confirm, on_cancel, }: DeleteDialogProps): import("react
|
|
8
|
+
export declare function DeleteDialog({ open, item_name, message, on_confirm, on_cancel, }: DeleteDialogProps): import("react").JSX.Element;
|
|
9
9
|
export {};
|
|
10
10
|
//# sourceMappingURL=delete_dialog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete_dialog.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/delete_dialog.tsx"],"names":[],"mappings":"AAeA,UAAU,iBAAiB;IACzB,IAAI,EAAE,OAAO,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,SAAS,EACT,OAAO,EACP,UAAU,EACV,SAAS,GACV,EAAE,iBAAiB
|
|
1
|
+
{"version":3,"file":"delete_dialog.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/delete_dialog.tsx"],"names":[],"mappings":"AAeA,UAAU,iBAAiB;IACzB,IAAI,EAAE,OAAO,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,SAAS,EACT,OAAO,EACP,UAAU,EACV,SAAS,GACV,EAAE,iBAAiB,+BAgCnB"}
|
|
@@ -16,6 +16,6 @@ interface EditModalProps<T extends Record<string, unknown>> {
|
|
|
16
16
|
/** Tailwind max-width class(es). Default: `sm:max-w-2xl`. */
|
|
17
17
|
max_width_class?: string;
|
|
18
18
|
}
|
|
19
|
-
export declare function EditModal<T extends Record<string, unknown>>({ open, mode, item: initial_item, columns, id_field, auto_id_from, id_editable_after_create, existing_ids, item_type_label, render_preview, on_save, on_cancel, max_width_class, }: EditModalProps<T>):
|
|
19
|
+
export declare function EditModal<T extends Record<string, unknown>>({ open, mode, item: initial_item, columns, id_field, auto_id_from, id_editable_after_create, existing_ids, item_type_label, render_preview, on_save, on_cancel, max_width_class, }: EditModalProps<T>): React.JSX.Element;
|
|
20
20
|
export {};
|
|
21
21
|
//# sourceMappingURL=edit_modal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit_modal.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/edit_modal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"edit_modal.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/edit_modal.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAY/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAG5C,UAAU,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxD,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;IACvB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAChB,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAA;IAC/B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IAC7C,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;IAC1B,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC3D,IAAI,EACJ,IAAI,EACJ,IAAI,EAAE,YAAY,EAClB,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,wBAAwB,EACxB,YAAY,EACZ,eAAe,EACf,cAAc,EACd,OAAO,EACP,SAAS,EACT,eAAgC,GACjC,EAAE,cAAc,CAAC,CAAC,CAAC,qBAqRnB"}
|
|
@@ -3,6 +3,6 @@ interface EmptyStateProps {
|
|
|
3
3
|
on_add: () => void;
|
|
4
4
|
className?: string;
|
|
5
5
|
}
|
|
6
|
-
export declare function EmptyState({ item_label, on_add, className, }: EmptyStateProps): import("react
|
|
6
|
+
export declare function EmptyState({ item_label, on_add, className, }: EmptyStateProps): import("react").JSX.Element;
|
|
7
7
|
export {};
|
|
8
8
|
//# sourceMappingURL=empty_state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"empty_state.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/empty_state.tsx"],"names":[],"mappings":"AAMA,UAAU,eAAe;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,UAAU,CAAC,EACzB,UAAU,EACV,MAAM,EACN,SAAS,GACV,EAAE,eAAe
|
|
1
|
+
{"version":3,"file":"empty_state.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/empty_state.tsx"],"names":[],"mappings":"AAMA,UAAU,eAAe;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,UAAU,CAAC,EACzB,UAAU,EACV,MAAM,EACN,SAAS,GACV,EAAE,eAAe,+BAsBjB"}
|
|
@@ -7,6 +7,6 @@ interface ImportExportButtonsProps<T extends Record<string, unknown>> {
|
|
|
7
7
|
title?: string;
|
|
8
8
|
max_items?: number;
|
|
9
9
|
}
|
|
10
|
-
export declare function ImportExportButtons<T extends Record<string, unknown>>({ items, on_items_change, columns, id_field, title, max_items, }: ImportExportButtonsProps<T>): import("react
|
|
10
|
+
export declare function ImportExportButtons<T extends Record<string, unknown>>({ items, on_items_change, columns, id_field, title, max_items, }: ImportExportButtonsProps<T>): import("react").JSX.Element;
|
|
11
11
|
export {};
|
|
12
12
|
//# sourceMappingURL=import_export_buttons.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import_export_buttons.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/import_export_buttons.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"import_export_buttons.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/import_export_buttons.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAQ5C,UAAU,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClE,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,eAAe,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;IACrC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACrE,KAAK,EACL,eAAe,EACf,OAAO,EACP,QAAQ,EACR,KAAK,EACL,SAAS,GACV,EAAE,wBAAwB,CAAC,CAAC,CAAC,+BA0H7B"}
|
|
@@ -9,6 +9,6 @@ interface ListItemRowProps<T extends Record<string, unknown>> {
|
|
|
9
9
|
on_edit: () => void;
|
|
10
10
|
on_delete: () => void;
|
|
11
11
|
}
|
|
12
|
-
export declare function ListItemRow<T extends Record<string, unknown>>({ item, index, columns, render_item, render_item_indicator, on_edit, on_delete, }: ListItemRowProps<T>):
|
|
12
|
+
export declare function ListItemRow<T extends Record<string, unknown>>({ item, index, columns, render_item, render_item_indicator, on_edit, on_delete, }: ListItemRowProps<T>): React.JSX.Element;
|
|
13
13
|
export {};
|
|
14
14
|
//# sourceMappingURL=list_item_row.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list_item_row.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/list_item_row.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,UAAU,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1D,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IACzD,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IACpD,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC7D,IAAI,EACJ,KAAK,EACL,OAAO,EACP,WAAW,EACX,qBAAqB,EACrB,OAAO,EACP,SAAS,GACV,EAAE,gBAAgB,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"list_item_row.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/list_item_row.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,UAAU,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1D,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IACzD,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IACpD,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC7D,IAAI,EACJ,KAAK,EACL,OAAO,EACP,WAAW,EACX,qBAAqB,EACrB,OAAO,EACP,SAAS,GACV,EAAE,gBAAgB,CAAC,CAAC,CAAC,qBAgGrB"}
|
|
@@ -2,6 +2,6 @@ interface SaveStatusIndicatorProps {
|
|
|
2
2
|
status: 'idle' | 'saving' | 'saved' | 'error';
|
|
3
3
|
className?: string;
|
|
4
4
|
}
|
|
5
|
-
export declare function SaveStatusIndicator({ status, className, }: SaveStatusIndicatorProps): import("react
|
|
5
|
+
export declare function SaveStatusIndicator({ status, className, }: SaveStatusIndicatorProps): import("react").JSX.Element | null;
|
|
6
6
|
export {};
|
|
7
7
|
//# sourceMappingURL=save_status_indicator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save_status_indicator.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/save_status_indicator.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"save_status_indicator.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/save_status_indicator.tsx"],"names":[],"mappings":"AASA,UAAU,wBAAwB;IAChC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAA;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,SAAS,GACV,EAAE,wBAAwB,sCA+C1B"}
|
|
@@ -5,6 +5,6 @@ interface SearchBarProps {
|
|
|
5
5
|
item_label: string;
|
|
6
6
|
className?: string;
|
|
7
7
|
}
|
|
8
|
-
export declare function SearchBar({ value, on_change, item_count, item_label, className, }: SearchBarProps): import("react
|
|
8
|
+
export declare function SearchBar({ value, on_change, item_count, item_label, className, }: SearchBarProps): import("react").JSX.Element;
|
|
9
9
|
export {};
|
|
10
10
|
//# sourceMappingURL=search_bar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search_bar.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/search_bar.tsx"],"names":[],"mappings":"AAMA,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,GACV,EAAE,cAAc
|
|
1
|
+
{"version":3,"file":"search_bar.d.ts","sourceRoot":"","sources":["../../../../src/components/app_config_list_editor/components/search_bar.tsx"],"names":[],"mappings":"AAMA,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,GACV,EAAE,cAAc,+BA6BhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config_editor.d.ts","sourceRoot":"","sources":["../../src/components/config_editor.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config_editor.d.ts","sourceRoot":"","sources":["../../src/components/config_editor.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAyC,MAAM,OAAO,CAAA;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAIrD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,eAAe,EAAE,cAAc,CAAA;IAC/B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IACjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAWD;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAgYpD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config_viewer.d.ts","sourceRoot":"","sources":["../../src/components/config_viewer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config_viewer.d.ts","sourceRoot":"","sources":["../../src/components/config_viewer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAyC,MAAM,OAAO,CAAA;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAIrD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,eAAe,EAAE,cAAc,CAAA;IAC/B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IACjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA2MpD,CAAA"}
|
|
@@ -6,11 +6,11 @@ declare const AlertDialogPortal: React.FC<AlertDialogPrimitive.AlertDialogPortal
|
|
|
6
6
|
declare const AlertDialogOverlay: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
7
7
|
declare const AlertDialogContent: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
8
8
|
declare const AlertDialogHeader: {
|
|
9
|
-
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>):
|
|
9
|
+
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
|
|
10
10
|
displayName: string;
|
|
11
11
|
};
|
|
12
12
|
declare const AlertDialogFooter: {
|
|
13
|
-
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>):
|
|
13
|
+
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
|
|
14
14
|
displayName: string;
|
|
15
15
|
};
|
|
16
16
|
declare const AlertDialogTitle: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
@@ -7,11 +7,11 @@ declare const DialogClose: React.ForwardRefExoticComponent<DialogPrimitive.Dialo
|
|
|
7
7
|
declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
8
8
|
declare const DialogContent: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
9
9
|
declare const DialogHeader: {
|
|
10
|
-
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>):
|
|
10
|
+
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
|
|
11
11
|
displayName: string;
|
|
12
12
|
};
|
|
13
13
|
declare const DialogFooter: {
|
|
14
|
-
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>):
|
|
14
|
+
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element;
|
|
15
15
|
displayName: string;
|
|
16
16
|
};
|
|
17
17
|
declare const DialogTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_app_config.d.ts","sourceRoot":"","sources":["../../src/components/use_app_config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use_app_config.d.ts","sourceRoot":"","sources":["../../src/components/use_app_config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EACnB,MAAM,4BAA4B,CAAA;AAkBnC;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,EACrE,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,YAAY,GAAG,YAAY,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAC7F,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,GACzF,kBAAkB,CA2JpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_config_sections.d.ts","sourceRoot":"","sources":["../../src/components/use_config_sections.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use_config_sections.d.ts","sourceRoot":"","sources":["../../src/components/use_config_sections.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD;;;GAGG;AACH,eAAO,MAAM,0BAA0B,UAUtC,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,kBAAkB,GAAE,MAAM,EAA+B,GACxD,OAAO,CAUT;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAChD;;OAEG;IACH,UAAU,EAAE,OAAO,CAAA;IACnB;;OAEG;IACH,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB;;OAEG;IACH,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,cAAc,GAAG,uBAAuB,CAgC1F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config_loader.d.ts","sourceRoot":"","sources":["../../src/lib/config_loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"config_loader.d.ts","sourceRoot":"","sources":["../../src/lib/config_loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAU,MAAM,YAAY,CAAA;AAwF3E;;;;;GAKG;AACH,qBAAa,UAAW,YAAW,cAAc;IAC/C,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,MAAM,CAA6C;IAC3D,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,kBAAkB,CAAY;IAEtC;;;;OAIG;gBACS,OAAO,EAAE,iBAAiB;IAoCtC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAsB1B;;;;;OAKG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKrD;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;IAK/D;;;OAGG;IACH,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAUxD;;;;;OAKG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQtD;;;;OAIG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAa1C;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOpC;;;OAGG;IACH,IAAI,IAAI,IAAI;IAmBZ;;;OAGG;IACH,OAAO,IAAI,IAAI;IAgDf;;;OAGG;IACH,WAAW,IAAI,MAAM;IAIrB,OAAO,CAAC,sBAAsB;CAU/B"}
|
|
@@ -18,21 +18,25 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import fs from 'fs';
|
|
20
20
|
import path from 'path';
|
|
21
|
-
import { createRequire } from 'module';
|
|
22
21
|
import ini from 'ini';
|
|
23
22
|
import { ConfigErrorCode as EC } from './types.js';
|
|
24
|
-
// ---------------------------------------------------------------------------
|
|
25
|
-
// Optional hazo_core integration — HazoConfigError when available
|
|
26
|
-
// ---------------------------------------------------------------------------
|
|
27
|
-
const _require = createRequire(import.meta.url);
|
|
28
23
|
let HazoCoreConfigError = null;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
// Fire-and-forget: populates HazoCoreConfigError as soon as the microtask queue runs.
|
|
25
|
+
// Using dynamic import() with bundler-ignore hints so Turbopack/webpack never try
|
|
26
|
+
// to statically resolve this optional peer dep and emit "Module not found" warnings.
|
|
27
|
+
// hazo_core/errors is an ESM-only subpath export, so import() is required (require() never works).
|
|
28
|
+
void (async () => {
|
|
29
|
+
try {
|
|
30
|
+
// @ts-ignore — hazo_core/errors is a valid subpath export; moduleResolution:"node" predates
|
|
31
|
+
// subpath exports so TS can't resolve it statically, but it loads correctly at runtime.
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
33
|
+
const errorsModule = (await import(/* turbopackIgnore: true */ /* webpackIgnore: true */ 'hazo_core/errors'));
|
|
34
|
+
HazoCoreConfigError = errorsModule.HazoConfigError ?? null;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// hazo_core not installed — use local fallback below
|
|
38
|
+
}
|
|
39
|
+
})();
|
|
36
40
|
/**
|
|
37
41
|
* Local fallback error for when hazo_core is not installed.
|
|
38
42
|
* When hazo_core IS installed, throws HazoConfigError from hazo_core instead.
|
|
@@ -304,7 +308,14 @@ export class HazoConfig {
|
|
|
304
308
|
if (typeof values === 'object' && values !== null) {
|
|
305
309
|
this.config[section] = {};
|
|
306
310
|
for (const [key, value] of Object.entries(values)) {
|
|
307
|
-
|
|
311
|
+
if (typeof value === 'object' && value !== null) {
|
|
312
|
+
// Dotted section [a.b] → ini parses as { a: { b: {...} } }.
|
|
313
|
+
// Register the composite key 'a.b' so getSection('a.b') works.
|
|
314
|
+
this._registerNestedSection(section + '.' + key, value);
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
this.config[section][key] = String(value);
|
|
318
|
+
}
|
|
308
319
|
}
|
|
309
320
|
}
|
|
310
321
|
}
|
|
@@ -333,4 +344,15 @@ export class HazoConfig {
|
|
|
333
344
|
getFilePath() {
|
|
334
345
|
return this.filePath;
|
|
335
346
|
}
|
|
347
|
+
_registerNestedSection(compositeName, obj) {
|
|
348
|
+
this.config[compositeName] = {};
|
|
349
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
350
|
+
if (typeof v === 'object' && v !== null) {
|
|
351
|
+
this._registerNestedSection(compositeName + '.' + k, v);
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
this.config[compositeName][k] = String(v);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
336
358
|
}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -4,10 +4,17 @@
|
|
|
4
4
|
* This entry point contains Node.js-specific code that uses fs and path modules.
|
|
5
5
|
* It should only be imported in server-side code (API routes, server components, etc.)
|
|
6
6
|
*
|
|
7
|
+
* We intentionally do NOT `import 'server-only'` here because Next 15's
|
|
8
|
+
* "Collecting page data" build phase evaluates route.ts modules without the
|
|
9
|
+
* `react-server` resolution condition, so the marker throws and breaks
|
|
10
|
+
* `next build` for every legitimate server-side consumer. HazoConfig uses
|
|
11
|
+
* fs/path, so a real Client Component import still fails at runtime — we
|
|
12
|
+
* just lose fail-fast at module load. Same root cause as hazo_logs@2.0.2 /
|
|
13
|
+
* hazo_api@2.1.1.
|
|
14
|
+
*
|
|
7
15
|
* Usage:
|
|
8
16
|
* import { HazoConfig } from 'hazo_config/server'
|
|
9
17
|
*/
|
|
10
|
-
import 'server-only';
|
|
11
18
|
export { HazoConfig } from '../lib/config_loader.js';
|
|
12
19
|
export type { HazoConfigOptions } from '../lib/types.js';
|
|
13
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA"}
|
package/dist/server/index.js
CHANGED
|
@@ -4,8 +4,15 @@
|
|
|
4
4
|
* This entry point contains Node.js-specific code that uses fs and path modules.
|
|
5
5
|
* It should only be imported in server-side code (API routes, server components, etc.)
|
|
6
6
|
*
|
|
7
|
+
* We intentionally do NOT `import 'server-only'` here because Next 15's
|
|
8
|
+
* "Collecting page data" build phase evaluates route.ts modules without the
|
|
9
|
+
* `react-server` resolution condition, so the marker throws and breaks
|
|
10
|
+
* `next build` for every legitimate server-side consumer. HazoConfig uses
|
|
11
|
+
* fs/path, so a real Client Component import still fails at runtime — we
|
|
12
|
+
* just lose fail-fast at module load. Same root cause as hazo_logs@2.0.2 /
|
|
13
|
+
* hazo_api@2.1.1.
|
|
14
|
+
*
|
|
7
15
|
* Usage:
|
|
8
16
|
* import { HazoConfig } from 'hazo_config/server'
|
|
9
17
|
*/
|
|
10
|
-
import 'server-only';
|
|
11
18
|
export { HazoConfig } from '../lib/config_loader.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hazo_config",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.12",
|
|
4
4
|
"description": "Config wrapper with error handling",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"@types/react-dom": "^18.3.0",
|
|
89
89
|
"@tailwindcss/postcss": "^4.2.4",
|
|
90
90
|
"@vitejs/plugin-react": "^4.2.0",
|
|
91
|
-
"hazo_connect": "^3.
|
|
91
|
+
"hazo_connect": "^3.8.0",
|
|
92
92
|
"jsdom": "^24.1.3",
|
|
93
93
|
"postcss": "^8.4.49",
|
|
94
94
|
"react": "^18.2.0",
|
|
@@ -100,8 +100,8 @@
|
|
|
100
100
|
"vitest": "^1.6.1"
|
|
101
101
|
},
|
|
102
102
|
"peerDependencies": {
|
|
103
|
-
"hazo_core": "^1.
|
|
104
|
-
"hazo_ui": "^
|
|
103
|
+
"hazo_core": "^1.2.0",
|
|
104
|
+
"hazo_ui": "^4.0.0",
|
|
105
105
|
"react": "^18.0.0 || ^19.0.0",
|
|
106
106
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
107
107
|
"tailwindcss": "^4.0.0"
|
package/dist/lib/utils.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { type ClassValue } from "clsx";
|
|
2
|
-
/**
|
|
3
|
-
* Merges class names using clsx and tailwind-merge
|
|
4
|
-
* @param inputs - Class values to merge
|
|
5
|
-
* @returns Merged class string
|
|
6
|
-
*/
|
|
7
|
-
export declare function cn(...inputs: ClassValue[]): string;
|
|
8
|
-
//# sourceMappingURL=utils.d.ts.map
|
package/dist/lib/utils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAA;AAG5C;;;;GAIG;AACH,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
|
package/dist/lib/utils.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// Utility functions for the component library
|
|
2
|
-
// Provides class name merging functionality using clsx and tailwind-merge
|
|
3
|
-
import { clsx } from "clsx";
|
|
4
|
-
import { twMerge } from "tailwind-merge";
|
|
5
|
-
/**
|
|
6
|
-
* Merges class names using clsx and tailwind-merge
|
|
7
|
-
* @param inputs - Class values to merge
|
|
8
|
-
* @returns Merged class string
|
|
9
|
-
*/
|
|
10
|
-
export function cn(...inputs) {
|
|
11
|
-
return twMerge(clsx(inputs));
|
|
12
|
-
}
|