@trebired/frontend 0.4.1 → 0.5.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/CHANGELOG.md +13 -0
- package/README.md +61 -1
- package/dist/config/index.d.ts +6 -50
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +19 -266
- package/dist/config/index.js.map +1 -1
- package/dist/config/module.d.ts +5 -0
- package/dist/config/module.d.ts.map +1 -0
- package/dist/config/module.js +124 -0
- package/dist/config/module.js.map +1 -0
- package/dist/config/normalize.d.ts +10 -0
- package/dist/config/normalize.d.ts.map +1 -0
- package/dist/config/normalize.js +105 -0
- package/dist/config/normalize.js.map +1 -0
- package/dist/config/scss.d.ts +4 -0
- package/dist/config/scss.d.ts.map +1 -0
- package/dist/config/scss.js +84 -0
- package/dist/config/scss.js.map +1 -0
- package/dist/config/shared.d.ts +9 -0
- package/dist/config/shared.d.ts.map +1 -0
- package/dist/config/shared.js +27 -0
- package/dist/config/shared.js.map +1 -0
- package/dist/config/theme.d.ts +6 -0
- package/dist/config/theme.d.ts.map +1 -0
- package/dist/config/theme.js +133 -0
- package/dist/config/theme.js.map +1 -0
- package/dist/config/types.d.ts +62 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/src/config/index.d.ts +6 -50
- package/dist/src/config/index.d.ts.map +1 -1
- package/dist/src/config/index.js +19 -266
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/config/module.d.ts +5 -0
- package/dist/src/config/module.d.ts.map +1 -0
- package/dist/src/config/module.js +124 -0
- package/dist/src/config/module.js.map +1 -0
- package/dist/src/config/normalize.d.ts +10 -0
- package/dist/src/config/normalize.d.ts.map +1 -0
- package/dist/src/config/normalize.js +105 -0
- package/dist/src/config/normalize.js.map +1 -0
- package/dist/src/config/scss.d.ts +4 -0
- package/dist/src/config/scss.d.ts.map +1 -0
- package/dist/src/config/scss.js +84 -0
- package/dist/src/config/scss.js.map +1 -0
- package/dist/src/config/shared.d.ts +9 -0
- package/dist/src/config/shared.d.ts.map +1 -0
- package/dist/src/config/shared.js +27 -0
- package/dist/src/config/shared.js.map +1 -0
- package/dist/src/config/theme.d.ts +6 -0
- package/dist/src/config/theme.d.ts.map +1 -0
- package/dist/src/config/theme.js +133 -0
- package/dist/src/config/theme.js.map +1 -0
- package/dist/src/config/types.d.ts +62 -0
- package/dist/src/config/types.d.ts.map +1 -0
- package/dist/src/config/types.js +2 -0
- package/dist/src/config/types.js.map +1 -0
- package/dist/src/theme/apply.d.ts +26 -0
- package/dist/src/theme/apply.d.ts.map +1 -0
- package/dist/src/theme/apply.js +85 -0
- package/dist/src/theme/apply.js.map +1 -0
- package/dist/src/theme/boot.d.ts +4 -0
- package/dist/src/theme/boot.d.ts.map +1 -0
- package/dist/src/theme/boot.js +23 -0
- package/dist/src/theme/boot.js.map +1 -0
- package/dist/src/theme/components/index.d.ts +13 -5
- package/dist/src/theme/components/index.d.ts.map +1 -1
- package/dist/src/theme/components/index.js +22 -6
- package/dist/src/theme/components/index.js.map +1 -1
- package/dist/src/theme/constants.d.ts +12 -0
- package/dist/src/theme/constants.d.ts.map +1 -0
- package/dist/src/theme/constants.js +12 -0
- package/dist/src/theme/constants.js.map +1 -0
- package/dist/src/theme/controls.d.ts +15 -0
- package/dist/src/theme/controls.d.ts.map +1 -0
- package/dist/src/theme/controls.js +128 -0
- package/dist/src/theme/controls.js.map +1 -0
- package/dist/src/theme/index.d.ts +10 -24
- package/dist/src/theme/index.d.ts.map +1 -1
- package/dist/src/theme/index.js +15 -117
- package/dist/src/theme/index.js.map +1 -1
- package/dist/src/theme/modes.d.ts +36 -0
- package/dist/src/theme/modes.d.ts.map +1 -0
- package/dist/src/theme/modes.js +107 -0
- package/dist/src/theme/modes.js.map +1 -0
- package/dist/theme/apply.d.ts +26 -0
- package/dist/theme/apply.d.ts.map +1 -0
- package/dist/theme/apply.js +85 -0
- package/dist/theme/apply.js.map +1 -0
- package/dist/theme/boot.d.ts +4 -0
- package/dist/theme/boot.d.ts.map +1 -0
- package/dist/theme/boot.js +23 -0
- package/dist/theme/boot.js.map +1 -0
- package/dist/theme/components/index.d.ts +13 -5
- package/dist/theme/components/index.d.ts.map +1 -1
- package/dist/theme/components/index.js +22 -6
- package/dist/theme/components/index.js.map +1 -1
- package/dist/theme/constants.d.ts +12 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +12 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/controls.d.ts +15 -0
- package/dist/theme/controls.d.ts.map +1 -0
- package/dist/theme/controls.js +128 -0
- package/dist/theme/controls.js.map +1 -0
- package/dist/theme/index.d.ts +10 -24
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +15 -117
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/modes.d.ts +36 -0
- package/dist/theme/modes.d.ts.map +1 -0
- package/dist/theme/modes.js +107 -0
- package/dist/theme/modes.js.map +1 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,19 @@ All notable changes to `@trebired/frontend` will be documented here.
|
|
|
4
4
|
|
|
5
5
|
This project follows semantic versioning once published.
|
|
6
6
|
|
|
7
|
+
## 0.5.0
|
|
8
|
+
|
|
9
|
+
- Generalized the `./theme` runtime to an open, caller-supplied registry of named modes: `configureThemeModes()`, `getThemeModes()`, `themeModeKeys()`, `findThemeMode()`, `isThemeMode()`, mode-aware `setTheme()`/`normalizeTheme()`/`systemThemeKey()`, and `nextTheme()` as a cycler over the registry. `ThemeValue` is now `string`; `data-tbf-theme` accepts any registered key and `color-scheme` follows each mode's declared scheme.
|
|
10
|
+
- Added `[data-tbf-theme-select]` control binding (`bindThemeControls()`, `bindThemeSelect()`, `bindThemeSelects()`, `syncThemeControls()`, `syncThemeSelect()`, `syncThemeSelects()`) for `<select>` pickers and `[data-tbf-theme-value]` option groups.
|
|
11
|
+
- Added the `<ThemeSelect>` multi-choice component with `select` and `buttons` variants, a `labels` prop on `<ThemeToggle>`, and mode registry props on `<ThemeBootScript>`, whose boot script now publishes the registry for the client runtime.
|
|
12
|
+
- Added `theme.modes`, `theme.defaultMode`, `theme.dark`, and `theme.light` to `.trebired/frontend/config.ts`. `generateTrebiredFrontendScss()` emits one `[data-tbf-theme="<mode>"] {}` block per declared mode plus `prefers-color-scheme` fallbacks, alongside the existing shared `:root {}` block.
|
|
13
|
+
- Added `dependencies` to the `loadTrebiredFrontendConfig()` result and keyed the config compile cache on the whole relative import graph, so a design-tokens module imported by the config file drives generated CSS without stale output.
|
|
14
|
+
- Added `collectConfigDependencies()` and `THEME_MODE_ATTRIBUTE` to `@trebired/frontend/config`.
|
|
15
|
+
|
|
16
|
+
## 0.4.2
|
|
17
|
+
|
|
18
|
+
- Removed the project-local `.trebired/frontend/generated/styles.scss` writer contract; frontend config now exposes deterministic SCSS for bundlers to consume in memory.
|
|
19
|
+
|
|
7
20
|
## 0.4.1
|
|
8
21
|
|
|
9
22
|
- Refreshed package dependency ranges and lockfile state with `bun update` after adopting the `.trebired/code-discipline` structure.
|
package/README.md
CHANGED
|
@@ -138,7 +138,41 @@ export default defineTrebiredFrontendConfig({
|
|
|
138
138
|
});
|
|
139
139
|
```
|
|
140
140
|
|
|
141
|
-
`@trebired/frontend/config` exports `defineTrebiredFrontendConfig()`, `normalizeTrebiredFrontendConfig()`, `loadTrebiredFrontendConfig()`, `findTrebiredFrontendConfig()`, `generateTrebiredFrontendScss()`, and `
|
|
141
|
+
`@trebired/frontend/config` exports `defineTrebiredFrontendConfig()`, `normalizeTrebiredFrontendConfig()`, `loadTrebiredFrontendConfig()`, `findTrebiredFrontendConfig()`, `generateTrebiredFrontendScss()`, `collectConfigDependencies()`, and `THEME_MODE_ATTRIBUTE`. Missing config files use package defaults. Bundlers should consume the generated SCSS string in memory and emit normal bundled CSS; projects do not need a `.trebired/frontend/generated/styles.scss` file.
|
|
142
|
+
|
|
143
|
+
`loadTrebiredFrontendConfig()` resolves the config file's relative import graph, returns it as `dependencies`, and keys its compile cache on the contents of every file in that graph. A project can therefore keep design tokens in a sibling module and edit them without stale output:
|
|
144
|
+
|
|
145
|
+
```ts
|
|
146
|
+
// .trebired/frontend/tokens.ts
|
|
147
|
+
export const surface = { dark: "#101014", light: "#ffffff", sepia: "#f4ecd8" };
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Theme Modes
|
|
151
|
+
|
|
152
|
+
`theme.modes` declares an open set of named modes. Each mode owns a token block and, optionally, a `label` and a `scheme` (`"dark"` or `"light"`). Anything other than `label`, `scheme`, and `tokens` inside a mode is rejected, so custom properties always live under `tokens`.
|
|
153
|
+
|
|
154
|
+
```ts
|
|
155
|
+
import { defineTrebiredFrontendConfig } from "@trebired/frontend/config";
|
|
156
|
+
import { surface } from "./tokens.js";
|
|
157
|
+
|
|
158
|
+
export default defineTrebiredFrontendConfig({
|
|
159
|
+
prefix: "app",
|
|
160
|
+
theme: {
|
|
161
|
+
cssVariables: true,
|
|
162
|
+
defaultMode: "sepia",
|
|
163
|
+
tokens: { radius: { md: "6px" } },
|
|
164
|
+
modes: {
|
|
165
|
+
dark: { tokens: { color: { surface: surface.dark } } },
|
|
166
|
+
light: { tokens: { color: { surface: surface.light } } },
|
|
167
|
+
sepia: { label: "Paper", scheme: "light", tokens: { color: { surface: surface.sepia } } },
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
`generateTrebiredFrontendScss()` emits shared tokens in `:root {}` and one `[data-tbf-theme="<mode>"] {}` block per declared mode, each carrying its own `color-scheme`. It also emits `--<prefix>-theme-modes`, `--<prefix>-theme-default`, and `prefers-color-scheme` fallbacks scoped to `:root:not([data-tbf-theme])` so unbooted documents still resolve.
|
|
174
|
+
|
|
175
|
+
`theme.dark` and `theme.light` name which registered modes answer `prefers-color-scheme`. When omitted, the first mode of each scheme wins. Declaring no `theme.modes` keeps the previous single `:root {}` output.
|
|
142
176
|
|
|
143
177
|
### Runtime Options
|
|
144
178
|
|
|
@@ -168,6 +202,32 @@ Set `frontend_quiet: true`, `quiet: true`, `globalThis.frontend_quiet = true`, o
|
|
|
168
202
|
|
|
169
203
|
The canonical runtime binds theme, layer roots, icons, progress, flash, inputs, uploads, tooltips, popovers, modals, actions, fullscreen controls, and live refresh in that order.
|
|
170
204
|
|
|
205
|
+
### Theme
|
|
206
|
+
|
|
207
|
+
`@trebired/frontend/theme` works against a caller-supplied mode registry rather than a fixed light/dark pair. The registry defaults to `["dark", "light"]`, so existing callers keep their behavior.
|
|
208
|
+
|
|
209
|
+
```ts
|
|
210
|
+
import { bindThemeRuntime } from "@trebired/frontend/theme";
|
|
211
|
+
|
|
212
|
+
await bindThemeRuntime(document, {
|
|
213
|
+
modes: ["dark", "light", { key: "sepia", label: "Paper", scheme: "light" }],
|
|
214
|
+
dark: "dark",
|
|
215
|
+
light: "light",
|
|
216
|
+
defaultTheme: "sepia",
|
|
217
|
+
persistence,
|
|
218
|
+
});
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Passing `modes`, `dark`, or `light` to `bindThemeRuntime()` registers them process-wide, so `setTheme()`, `nextTheme()`, and control syncing can be called later without repeating the list. `configureThemeModes(registry)` registers them directly; `configureThemeModes(null)` restores the default pair. `<ThemeBootScript>` publishes the registry it renders with, so a server-rendered page hands its modes to the client before first paint.
|
|
222
|
+
|
|
223
|
+
- `setTheme(key, options)` validates `key` against the registry and falls back to system preference when it is not registered.
|
|
224
|
+
- `nextTheme(options)` cycles through the registry in declaration order.
|
|
225
|
+
- `data-tbf-theme` accepts any registered key; `color-scheme` is set from the mode's `scheme`, not from its name.
|
|
226
|
+
- `systemThemeKey(options)` maps `prefers-color-scheme` onto the registry's `dark` / `light` members.
|
|
227
|
+
- `bindThemeControls(root, options)` binds both `[data-tbf-theme-button]` cyclers and `[data-tbf-theme-select]` pickers; `bindThemeToggles()` and `bindThemeSelects()` bind one kind each.
|
|
228
|
+
|
|
229
|
+
A `[data-tbf-theme-select]` element is either a `<select>` whose option values are mode keys, or a container of `[data-tbf-theme-value]` options. Both stay in sync with the active mode. `<ThemeToggle>` remains the two-mode control and now accepts a `labels` record for registries larger than two; `<ThemeSelect>` renders the multi-choice picker in either `select` or `buttons` form.
|
|
230
|
+
|
|
171
231
|
### CSS
|
|
172
232
|
|
|
173
233
|
There is no aggregate CSS file. Each style-owning system exposes SCSS through package exports so `@trebired/bundler` can resolve package `sass` and `style` conditions from `node_modules`.
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,54 +1,10 @@
|
|
|
1
|
-
type
|
|
2
|
-
type TrebiredFrontendSystemKey = "actions" | "flash" | "fullscreen" | "icons" | "inputs" | "layer" | "modal" | "popover" | "progress" | "theme" | "tooltip";
|
|
3
|
-
type TrebiredFrontendThemeTokens = Record<string, unknown>;
|
|
4
|
-
type TrebiredFrontendConfig = {
|
|
5
|
-
prefix?: string;
|
|
6
|
-
icons?: {
|
|
7
|
-
endpoint?: string;
|
|
8
|
-
packs?: readonly TrebiredFrontendIconPack[];
|
|
9
|
-
};
|
|
10
|
-
systems?: Partial<Record<TrebiredFrontendSystemKey, boolean>>;
|
|
11
|
-
theme?: {
|
|
12
|
-
cssVariables?: boolean;
|
|
13
|
-
tokens?: TrebiredFrontendThemeTokens;
|
|
14
|
-
};
|
|
15
|
-
};
|
|
16
|
-
type NormalizedTrebiredFrontendConfig = {
|
|
17
|
-
prefix: string;
|
|
18
|
-
icons: {
|
|
19
|
-
endpoint: string;
|
|
20
|
-
packs: TrebiredFrontendIconPack[];
|
|
21
|
-
};
|
|
22
|
-
systems: Record<TrebiredFrontendSystemKey, boolean>;
|
|
23
|
-
theme: {
|
|
24
|
-
cssVariables: boolean;
|
|
25
|
-
tokens: TrebiredFrontendThemeTokens;
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
type LoadedTrebiredFrontendConfig = {
|
|
29
|
-
config: NormalizedTrebiredFrontendConfig;
|
|
30
|
-
configPath: string | null;
|
|
31
|
-
generatedScss: string;
|
|
32
|
-
generatedScssPath: string;
|
|
33
|
-
};
|
|
34
|
-
type LoadTrebiredFrontendConfigOptions = {
|
|
35
|
-
configPath?: string;
|
|
36
|
-
defaultIfMissing?: boolean;
|
|
37
|
-
searchFrom?: string;
|
|
38
|
-
};
|
|
39
|
-
declare const TREBIRED_FRONTEND_CONFIG_PATH = ".trebired/frontend/config.ts";
|
|
40
|
-
declare const TREBIRED_FRONTEND_GENERATED_DIR = ".trebired/frontend/generated";
|
|
41
|
-
declare const TREBIRED_FRONTEND_GENERATED_SCSS_PATH = ".trebired/frontend/generated/styles.scss";
|
|
42
|
-
declare const SUPPORTED_ICON_PACKS: TrebiredFrontendIconPack[];
|
|
43
|
-
declare const SYSTEM_ORDER: TrebiredFrontendSystemKey[];
|
|
44
|
-
declare const DEFAULT_TREBIRED_FRONTEND_CONFIG: NormalizedTrebiredFrontendConfig;
|
|
1
|
+
import type { LoadTrebiredFrontendConfigOptions, LoadedTrebiredFrontendConfig, TrebiredFrontendConfig } from "./types.js";
|
|
45
2
|
declare function defineTrebiredFrontendConfig<T extends TrebiredFrontendConfig>(config: T): T;
|
|
46
|
-
declare function normalizeTrebiredFrontendConfig(config?: unknown): NormalizedTrebiredFrontendConfig;
|
|
47
|
-
declare function generateTrebiredFrontendScss(configInput: TrebiredFrontendConfig | NormalizedTrebiredFrontendConfig): string;
|
|
48
3
|
declare function findTrebiredFrontendConfig(startDir?: string, boundaryDir?: string): Promise<string | null>;
|
|
49
4
|
declare function loadTrebiredFrontendConfig(projectRoot?: string, options?: LoadTrebiredFrontendConfigOptions): Promise<LoadedTrebiredFrontendConfig>;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
export {
|
|
53
|
-
export
|
|
5
|
+
export { DEFAULT_TREBIRED_FRONTEND_CONFIG, SUPPORTED_ICON_PACKS, SYSTEM_ORDER, THEME_MODE_ATTRIBUTE, TREBIRED_FRONTEND_CONFIG_PATH, normalizeTrebiredFrontendConfig, } from "./normalize.js";
|
|
6
|
+
export { generateTrebiredFrontendScss } from "./scss.js";
|
|
7
|
+
export { collectConfigDependencies } from "./module.js";
|
|
8
|
+
export { defineTrebiredFrontendConfig, findTrebiredFrontendConfig, loadTrebiredFrontendConfig };
|
|
9
|
+
export type { LoadTrebiredFrontendConfigOptions, LoadedTrebiredFrontendConfig, NormalizedTrebiredFrontendConfig, NormalizedTrebiredFrontendThemeConfig, NormalizedTrebiredFrontendThemeMode, TrebiredFrontendConfig, TrebiredFrontendIconPack, TrebiredFrontendSystemKey, TrebiredFrontendThemeConfig, TrebiredFrontendThemeMode, TrebiredFrontendThemeModeScheme, TrebiredFrontendThemeTokens, } from "./types.js";
|
|
54
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAKA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,iCAAiC,EACjC,4BAA4B,EAC5B,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,iBAAS,4BAA4B,CAAC,CAAC,SAAS,sBAAsB,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAEpF;AAED,iBAAe,0BAA0B,CACvC,QAAQ,GAAE,MAAsB,EAChC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASxB;AAYD,iBAAe,0BAA0B,CACvC,WAAW,GAAE,MAAsB,EACnC,OAAO,GAAE,iCAAsC,GAC9C,OAAO,CAAC,4BAA4B,CAAC,CAyBvC;AAED,OAAO,EACL,gCAAgC,EAChC,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACpB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,4BAA4B,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,CAAC;AAChG,YAAY,EACV,iCAAiC,EACjC,4BAA4B,EAC5B,gCAAgC,EAChC,qCAAqC,EACrC,mCAAmC,EACnC,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,YAAY,CAAC"}
|
package/dist/config/index.js
CHANGED
|
@@ -1,213 +1,10 @@
|
|
|
1
|
-
import crypto from "node:crypto";
|
|
2
|
-
import fs from "node:fs/promises";
|
|
3
1
|
import path from "node:path";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const TREBIRED_FRONTEND_GENERATED_SCSS_PATH = `${TREBIRED_FRONTEND_GENERATED_DIR}/styles.scss`;
|
|
8
|
-
const SUPPORTED_ICON_PACKS = ["remixicon", "simple-icons"];
|
|
9
|
-
const SYSTEM_ORDER = [
|
|
10
|
-
"theme",
|
|
11
|
-
"layer",
|
|
12
|
-
"icons",
|
|
13
|
-
"progress",
|
|
14
|
-
"flash",
|
|
15
|
-
"tooltip",
|
|
16
|
-
"popover",
|
|
17
|
-
"modal",
|
|
18
|
-
"inputs",
|
|
19
|
-
"actions",
|
|
20
|
-
"fullscreen",
|
|
21
|
-
];
|
|
22
|
-
const SYSTEM_STYLE_IMPORTS = {
|
|
23
|
-
actions: "@trebired/frontend/actions/styles",
|
|
24
|
-
flash: "@trebired/frontend/flash/styles",
|
|
25
|
-
icons: "@trebired/frontend/icons/styles",
|
|
26
|
-
inputs: "@trebired/frontend/inputs/styles",
|
|
27
|
-
layer: "@trebired/frontend/layer/styles",
|
|
28
|
-
modal: "@trebired/frontend/modal/styles",
|
|
29
|
-
popover: "@trebired/frontend/popover/styles",
|
|
30
|
-
progress: "@trebired/frontend/progress/styles",
|
|
31
|
-
tooltip: "@trebired/frontend/tooltip/styles",
|
|
32
|
-
};
|
|
33
|
-
const DEFAULT_TREBIRED_FRONTEND_CONFIG = Object.freeze({
|
|
34
|
-
prefix: "tbf",
|
|
35
|
-
icons: Object.freeze({
|
|
36
|
-
endpoint: "/__icons/svg",
|
|
37
|
-
packs: Object.freeze([...SUPPORTED_ICON_PACKS]),
|
|
38
|
-
}),
|
|
39
|
-
systems: Object.freeze(Object.fromEntries(SYSTEM_ORDER.map((key) => [key, true]))),
|
|
40
|
-
theme: Object.freeze({
|
|
41
|
-
cssVariables: true,
|
|
42
|
-
tokens: Object.freeze({}),
|
|
43
|
-
}),
|
|
44
|
-
});
|
|
2
|
+
import { collectConfigDependencies, importConfigModule, pathExists } from "./module.js";
|
|
3
|
+
import { TREBIRED_FRONTEND_CONFIG_PATH, normalizeTrebiredFrontendConfig } from "./normalize.js";
|
|
4
|
+
import { generateTrebiredFrontendScss } from "./scss.js";
|
|
45
5
|
function defineTrebiredFrontendConfig(config) {
|
|
46
6
|
return config;
|
|
47
7
|
}
|
|
48
|
-
function isPlainObject(value) {
|
|
49
|
-
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
50
|
-
}
|
|
51
|
-
function assertPlainObject(value, pathLabel) {
|
|
52
|
-
if (!isPlainObject(value)) {
|
|
53
|
-
throw new Error(`trebired-frontend-invalid-config :: ${pathLabel} must be an object`);
|
|
54
|
-
}
|
|
55
|
-
return value;
|
|
56
|
-
}
|
|
57
|
-
function normalizePrefix(value) {
|
|
58
|
-
const prefix = String(value || DEFAULT_TREBIRED_FRONTEND_CONFIG.prefix).trim();
|
|
59
|
-
if (!/^[a-z][a-z0-9_-]*$/iu.test(prefix)) {
|
|
60
|
-
throw new Error("trebired-frontend-invalid-config :: prefix must start with a letter and contain only letters, numbers, underscores, or hyphens");
|
|
61
|
-
}
|
|
62
|
-
return prefix;
|
|
63
|
-
}
|
|
64
|
-
function normalizeEndpoint(value) {
|
|
65
|
-
const endpoint = String(value || DEFAULT_TREBIRED_FRONTEND_CONFIG.icons.endpoint).trim();
|
|
66
|
-
if (!endpoint || /[\s"'<>]/u.test(endpoint)) {
|
|
67
|
-
throw new Error("trebired-frontend-invalid-config :: icons.endpoint must be a URL path without whitespace");
|
|
68
|
-
}
|
|
69
|
-
return endpoint;
|
|
70
|
-
}
|
|
71
|
-
function normalizeIconPacks(value) {
|
|
72
|
-
const raw = value === undefined ? DEFAULT_TREBIRED_FRONTEND_CONFIG.icons.packs : value;
|
|
73
|
-
if (!Array.isArray(raw)) {
|
|
74
|
-
throw new Error("trebired-frontend-invalid-config :: icons.packs must be an array");
|
|
75
|
-
}
|
|
76
|
-
const packs = [];
|
|
77
|
-
for (const item of raw) {
|
|
78
|
-
if (!SUPPORTED_ICON_PACKS.includes(item)) {
|
|
79
|
-
throw new Error(`trebired-frontend-invalid-config :: unsupported icon pack ${String(item)}`);
|
|
80
|
-
}
|
|
81
|
-
if (!packs.includes(item))
|
|
82
|
-
packs.push(item);
|
|
83
|
-
}
|
|
84
|
-
return packs;
|
|
85
|
-
}
|
|
86
|
-
function normalizeSystems(value) {
|
|
87
|
-
if (value === undefined)
|
|
88
|
-
return { ...DEFAULT_TREBIRED_FRONTEND_CONFIG.systems };
|
|
89
|
-
const source = assertPlainObject(value, "systems");
|
|
90
|
-
const systems = { ...DEFAULT_TREBIRED_FRONTEND_CONFIG.systems };
|
|
91
|
-
for (const [key, enabled] of Object.entries(source)) {
|
|
92
|
-
if (!SYSTEM_ORDER.includes(key)) {
|
|
93
|
-
throw new Error(`trebired-frontend-invalid-config :: unsupported system ${key}`);
|
|
94
|
-
}
|
|
95
|
-
if (typeof enabled !== "boolean") {
|
|
96
|
-
throw new Error(`trebired-frontend-invalid-config :: systems.${key} must be boolean`);
|
|
97
|
-
}
|
|
98
|
-
systems[key] = enabled;
|
|
99
|
-
}
|
|
100
|
-
return systems;
|
|
101
|
-
}
|
|
102
|
-
function normalizeThemeTokens(value, pathLabel = "theme.tokens") {
|
|
103
|
-
if (value === undefined)
|
|
104
|
-
return {};
|
|
105
|
-
const source = assertPlainObject(value, pathLabel);
|
|
106
|
-
const out = {};
|
|
107
|
-
for (const [key, item] of Object.entries(source).sort(([a], [b]) => a.localeCompare(b))) {
|
|
108
|
-
if (!/^[a-z0-9_-]+$/iu.test(key)) {
|
|
109
|
-
throw new Error(`trebired-frontend-invalid-config :: ${pathLabel}.${key} has an invalid token key`);
|
|
110
|
-
}
|
|
111
|
-
if (isPlainObject(item)) {
|
|
112
|
-
out[key] = normalizeThemeTokens(item, `${pathLabel}.${key}`);
|
|
113
|
-
continue;
|
|
114
|
-
}
|
|
115
|
-
if (typeof item !== "string" && typeof item !== "number") {
|
|
116
|
-
throw new Error(`trebired-frontend-invalid-config :: ${pathLabel}.${key} must be a string, number, or token object`);
|
|
117
|
-
}
|
|
118
|
-
out[key] = item;
|
|
119
|
-
}
|
|
120
|
-
return out;
|
|
121
|
-
}
|
|
122
|
-
function normalizeBoolean(value, defaultValue, pathLabel) {
|
|
123
|
-
if (value === undefined)
|
|
124
|
-
return defaultValue;
|
|
125
|
-
if (typeof value !== "boolean") {
|
|
126
|
-
throw new Error(`trebired-frontend-invalid-config :: ${pathLabel} must be boolean`);
|
|
127
|
-
}
|
|
128
|
-
return value;
|
|
129
|
-
}
|
|
130
|
-
function normalizeTrebiredFrontendConfig(config = {}) {
|
|
131
|
-
const source = assertPlainObject(config, "config");
|
|
132
|
-
const icons = source.icons === undefined ? {} : assertPlainObject(source.icons, "icons");
|
|
133
|
-
const theme = source.theme === undefined ? {} : assertPlainObject(source.theme, "theme");
|
|
134
|
-
return {
|
|
135
|
-
prefix: normalizePrefix(source.prefix),
|
|
136
|
-
icons: {
|
|
137
|
-
endpoint: normalizeEndpoint(icons.endpoint),
|
|
138
|
-
packs: normalizeIconPacks(icons.packs),
|
|
139
|
-
},
|
|
140
|
-
systems: normalizeSystems(source.systems),
|
|
141
|
-
theme: {
|
|
142
|
-
cssVariables: normalizeBoolean(theme.cssVariables, true, "theme.cssVariables"),
|
|
143
|
-
tokens: normalizeThemeTokens(theme.tokens),
|
|
144
|
-
},
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
function cssString(value) {
|
|
148
|
-
return JSON.stringify(String(value ?? ""));
|
|
149
|
-
}
|
|
150
|
-
function cssComment(value) {
|
|
151
|
-
return String(value || "").replace(/\*\//gu, "* /");
|
|
152
|
-
}
|
|
153
|
-
function flattenThemeTokens(tokens, prefix = []) {
|
|
154
|
-
const out = [];
|
|
155
|
-
for (const [key, value] of Object.entries(tokens).sort(([a], [b]) => a.localeCompare(b))) {
|
|
156
|
-
if (isPlainObject(value)) {
|
|
157
|
-
out.push(...flattenThemeTokens(value, [...prefix, key]));
|
|
158
|
-
continue;
|
|
159
|
-
}
|
|
160
|
-
if (typeof value === "string" || typeof value === "number") {
|
|
161
|
-
out.push([[...prefix, key].join("-"), value]);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
return out;
|
|
165
|
-
}
|
|
166
|
-
function renderCssVariables(config) {
|
|
167
|
-
if (!config.theme.cssVariables)
|
|
168
|
-
return [];
|
|
169
|
-
const declarations = [
|
|
170
|
-
` --${config.prefix}-config-prefix: ${cssString(config.prefix)};`,
|
|
171
|
-
` --${config.prefix}-icon-endpoint: ${cssString(config.icons.endpoint)};`,
|
|
172
|
-
...flattenThemeTokens(config.theme.tokens).map(([key, value]) => {
|
|
173
|
-
return ` --${config.prefix}-${key}: ${String(value)};`;
|
|
174
|
-
}),
|
|
175
|
-
];
|
|
176
|
-
return [
|
|
177
|
-
":root {",
|
|
178
|
-
...declarations,
|
|
179
|
-
"}",
|
|
180
|
-
];
|
|
181
|
-
}
|
|
182
|
-
function generateTrebiredFrontendScss(configInput) {
|
|
183
|
-
const config = normalizeTrebiredFrontendConfig(configInput);
|
|
184
|
-
const lines = [
|
|
185
|
-
"/* Generated by @trebired/frontend. Do not edit directly. */",
|
|
186
|
-
`/* prefix: ${cssComment(config.prefix)} */`,
|
|
187
|
-
'@use "@trebired/frontend/styles/tokens" as *;',
|
|
188
|
-
'@use "@trebired/frontend/styles/utils" as *;',
|
|
189
|
-
];
|
|
190
|
-
for (const system of SYSTEM_ORDER) {
|
|
191
|
-
const importPath = SYSTEM_STYLE_IMPORTS[system];
|
|
192
|
-
if (importPath && config.systems[system]) {
|
|
193
|
-
lines.push(`@use ${cssString(importPath)} as *;`);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
const variables = renderCssVariables(config);
|
|
197
|
-
if (variables.length) {
|
|
198
|
-
lines.push("", ...variables);
|
|
199
|
-
}
|
|
200
|
-
return `${lines.join("\n")}\n`;
|
|
201
|
-
}
|
|
202
|
-
async function pathExists(filePath) {
|
|
203
|
-
try {
|
|
204
|
-
await fs.access(filePath);
|
|
205
|
-
return true;
|
|
206
|
-
}
|
|
207
|
-
catch {
|
|
208
|
-
return false;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
8
|
async function findTrebiredFrontendConfig(startDir = process.cwd(), boundaryDir) {
|
|
212
9
|
const boundary = path.resolve(boundaryDir || path.parse(path.resolve(startDir)).root);
|
|
213
10
|
let current = path.resolve(startDir);
|
|
@@ -220,46 +17,14 @@ async function findTrebiredFrontendConfig(startDir = process.cwd(), boundaryDir)
|
|
|
220
17
|
current = path.dirname(current);
|
|
221
18
|
}
|
|
222
19
|
}
|
|
223
|
-
function
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
async function buildConfigModuleToUrl(projectRoot, filePath) {
|
|
232
|
-
if (typeof Bun === "undefined" || typeof Bun.build !== "function") {
|
|
233
|
-
const url = pathToFileURL(filePath);
|
|
234
|
-
url.searchParams.set("mtime", String((await fs.stat(filePath)).mtimeMs));
|
|
235
|
-
return url.href;
|
|
236
|
-
}
|
|
237
|
-
const sourceText = await fs.readFile(filePath, "utf8");
|
|
238
|
-
const digest = createConfigBuildHash(filePath, sourceText);
|
|
239
|
-
const outputDir = path.join(projectRoot, "node_modules", ".cache", "trebired-frontend", "config", digest);
|
|
240
|
-
const basename = path.basename(filePath, path.extname(filePath)).replace(/[^\w.-]/gu, "_") || "config";
|
|
241
|
-
const outputPath = path.join(outputDir, `${basename}.js`);
|
|
242
|
-
if (!await pathExists(outputPath)) {
|
|
243
|
-
await fs.mkdir(outputDir, { recursive: true });
|
|
244
|
-
const result = await Bun.build({
|
|
245
|
-
entrypoints: [filePath],
|
|
246
|
-
external: ["@trebired/frontend", "@trebired/frontend/*"],
|
|
247
|
-
format: "esm",
|
|
248
|
-
naming: `${basename}.js`,
|
|
249
|
-
outdir: outputDir,
|
|
250
|
-
packages: "external",
|
|
251
|
-
target: "bun",
|
|
252
|
-
});
|
|
253
|
-
if (!result.success) {
|
|
254
|
-
const message = result.logs.map((log) => log.message).filter(Boolean).join("\n");
|
|
255
|
-
throw new Error(`trebired-frontend-invalid-config :: failed to compile ${filePath}${message ? `\n${message}` : ""}`);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
return pathToFileURL(outputPath).href;
|
|
259
|
-
}
|
|
260
|
-
async function importConfigModule(projectRoot, filePath) {
|
|
261
|
-
const imported = await import(await buildConfigModuleToUrl(projectRoot, filePath));
|
|
262
|
-
return imported.default;
|
|
20
|
+
function createDefaultLoadedConfig() {
|
|
21
|
+
const config = normalizeTrebiredFrontendConfig({});
|
|
22
|
+
return {
|
|
23
|
+
config,
|
|
24
|
+
configPath: null,
|
|
25
|
+
dependencies: [],
|
|
26
|
+
generatedScss: generateTrebiredFrontendScss(config),
|
|
27
|
+
};
|
|
263
28
|
}
|
|
264
29
|
async function loadTrebiredFrontendConfig(projectRoot = process.cwd(), options = {}) {
|
|
265
30
|
const root = path.resolve(projectRoot);
|
|
@@ -270,34 +35,22 @@ async function loadTrebiredFrontendConfig(projectRoot = process.cwd(), options =
|
|
|
270
35
|
if (options.defaultIfMissing === false) {
|
|
271
36
|
throw new Error(`trebired-frontend-config-not-found :: ${TREBIRED_FRONTEND_CONFIG_PATH}`);
|
|
272
37
|
}
|
|
273
|
-
|
|
274
|
-
return {
|
|
275
|
-
config,
|
|
276
|
-
configPath: null,
|
|
277
|
-
generatedScss: generateTrebiredFrontendScss(config),
|
|
278
|
-
generatedScssPath: resolveTrebiredFrontendGeneratedScssPath(root),
|
|
279
|
-
};
|
|
38
|
+
return createDefaultLoadedConfig();
|
|
280
39
|
}
|
|
281
40
|
if (!await pathExists(resolvedPath)) {
|
|
282
41
|
throw new Error(`trebired-frontend-config-not-found :: ${resolvedPath}`);
|
|
283
42
|
}
|
|
284
|
-
const
|
|
43
|
+
const dependencies = await collectConfigDependencies(resolvedPath);
|
|
44
|
+
const config = normalizeTrebiredFrontendConfig(await importConfigModule(root, resolvedPath, dependencies));
|
|
285
45
|
return {
|
|
286
46
|
config,
|
|
287
47
|
configPath: resolvedPath,
|
|
48
|
+
dependencies,
|
|
288
49
|
generatedScss: generateTrebiredFrontendScss(config),
|
|
289
|
-
generatedScssPath: resolveTrebiredFrontendGeneratedScssPath(root),
|
|
290
50
|
};
|
|
291
51
|
}
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
const filePath = resolveTrebiredFrontendGeneratedScssPath(projectRoot);
|
|
297
|
-
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
298
|
-
const scss = generateTrebiredFrontendScss(config);
|
|
299
|
-
await fs.writeFile(filePath, scss, "utf8");
|
|
300
|
-
return filePath;
|
|
301
|
-
}
|
|
302
|
-
export { DEFAULT_TREBIRED_FRONTEND_CONFIG, SUPPORTED_ICON_PACKS, SYSTEM_ORDER, TREBIRED_FRONTEND_CONFIG_PATH, TREBIRED_FRONTEND_GENERATED_DIR, TREBIRED_FRONTEND_GENERATED_SCSS_PATH, defineTrebiredFrontendConfig, findTrebiredFrontendConfig, generateTrebiredFrontendScss, loadTrebiredFrontendConfig, normalizeTrebiredFrontendConfig, resolveTrebiredFrontendGeneratedScssPath, writeGeneratedTrebiredFrontendScss, };
|
|
52
|
+
export { DEFAULT_TREBIRED_FRONTEND_CONFIG, SUPPORTED_ICON_PACKS, SYSTEM_ORDER, THEME_MODE_ATTRIBUTE, TREBIRED_FRONTEND_CONFIG_PATH, normalizeTrebiredFrontendConfig, } from "./normalize.js";
|
|
53
|
+
export { generateTrebiredFrontendScss } from "./scss.js";
|
|
54
|
+
export { collectConfigDependencies } from "./module.js";
|
|
55
|
+
export { defineTrebiredFrontendConfig, findTrebiredFrontendConfig, loadTrebiredFrontendConfig };
|
|
303
56
|
//# sourceMappingURL=index.js.map
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
declare function pathExists(filePath: string): Promise<boolean>;
|
|
2
|
+
declare function collectConfigDependencies(entryPath: string): Promise<string[]>;
|
|
3
|
+
declare function importConfigModule(projectRoot: string, filePath: string, dependencies: string[]): Promise<unknown>;
|
|
4
|
+
export { collectConfigDependencies, importConfigModule, pathExists };
|
|
5
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/config/module.ts"],"names":[],"mappings":"AAcA,iBAAe,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO5D;AAqCD,iBAAe,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAe7E;AAwDD,iBAAe,kBAAkB,CAC/B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { pathToFileURL } from "node:url";
|
|
5
|
+
import { invalidConfig } from "./shared.js";
|
|
6
|
+
const CONFIG_DEPENDENCY_EXTENSIONS = [".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs", ".json"];
|
|
7
|
+
const IMPORT_FROM_RE = /\bimport\s+(?:type\s+)?(?:[\w*\s{},]+?)\s+from\s+["']([^"']+)["']/gu;
|
|
8
|
+
const IMPORT_SIDE_EFFECT_RE = /\bimport\s+["']([^"']+)["']/gu;
|
|
9
|
+
const EXPORT_FROM_RE = /\bexport\s+(?:type\s+)?(?:[\w*\s{},]+?)\s+from\s+["']([^"']+)["']/gu;
|
|
10
|
+
const DYNAMIC_IMPORT_RE = /\bimport\s*\(\s*["']([^"']+)["']\s*\)/gu;
|
|
11
|
+
const RELATIVE_SPECIFIER_PATTERNS = [IMPORT_FROM_RE, IMPORT_SIDE_EFFECT_RE, EXPORT_FROM_RE, DYNAMIC_IMPORT_RE];
|
|
12
|
+
async function pathExists(filePath) {
|
|
13
|
+
try {
|
|
14
|
+
await fs.access(filePath);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async function isFile(filePath) {
|
|
22
|
+
try {
|
|
23
|
+
return (await fs.stat(filePath)).isFile();
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function collectRelativeSpecifiers(source) {
|
|
30
|
+
const specifiers = new Set();
|
|
31
|
+
for (const pattern of RELATIVE_SPECIFIER_PATTERNS) {
|
|
32
|
+
pattern.lastIndex = 0;
|
|
33
|
+
let match = null;
|
|
34
|
+
while ((match = pattern.exec(source))) {
|
|
35
|
+
const specifier = String(match[1] || "").trim();
|
|
36
|
+
if (specifier.startsWith("./") || specifier.startsWith("../"))
|
|
37
|
+
specifiers.add(specifier);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return [...specifiers];
|
|
41
|
+
}
|
|
42
|
+
async function resolveDependencyPath(fromFile, specifier) {
|
|
43
|
+
const base = path.resolve(path.dirname(fromFile), specifier);
|
|
44
|
+
const withoutJsExtension = base.replace(/\.(js|jsx|mjs|cjs)$/u, "");
|
|
45
|
+
const candidates = [
|
|
46
|
+
base,
|
|
47
|
+
...CONFIG_DEPENDENCY_EXTENSIONS.map((extension) => `${withoutJsExtension}${extension}`),
|
|
48
|
+
...CONFIG_DEPENDENCY_EXTENSIONS.map((extension) => path.join(base, `index${extension}`)),
|
|
49
|
+
];
|
|
50
|
+
for (const candidate of candidates) {
|
|
51
|
+
if (await isFile(candidate))
|
|
52
|
+
return path.resolve(candidate);
|
|
53
|
+
}
|
|
54
|
+
return "";
|
|
55
|
+
}
|
|
56
|
+
async function collectConfigDependencies(entryPath) {
|
|
57
|
+
const visited = new Set();
|
|
58
|
+
const pending = [path.resolve(entryPath)];
|
|
59
|
+
while (pending.length) {
|
|
60
|
+
const current = pending.pop();
|
|
61
|
+
if (visited.has(current) || !await isFile(current))
|
|
62
|
+
continue;
|
|
63
|
+
visited.add(current);
|
|
64
|
+
if (current.endsWith(".json"))
|
|
65
|
+
continue;
|
|
66
|
+
const source = await fs.readFile(current, "utf8");
|
|
67
|
+
for (const specifier of collectRelativeSpecifiers(source)) {
|
|
68
|
+
const resolved = await resolveDependencyPath(current, specifier);
|
|
69
|
+
if (resolved && !visited.has(resolved))
|
|
70
|
+
pending.push(resolved);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return [...visited].sort((a, b) => a.localeCompare(b));
|
|
74
|
+
}
|
|
75
|
+
async function createConfigBuildHash(dependencies) {
|
|
76
|
+
const hash = crypto.createHash("sha256");
|
|
77
|
+
for (const dependency of dependencies) {
|
|
78
|
+
hash.update(path.resolve(dependency)).update("\0").update(await fs.readFile(dependency, "utf8")).update("\0");
|
|
79
|
+
}
|
|
80
|
+
return hash.digest("hex").slice(0, 16);
|
|
81
|
+
}
|
|
82
|
+
async function buildConfigModuleToUrl(projectRoot, filePath, dependencies) {
|
|
83
|
+
if (typeof Bun === "undefined" || typeof Bun.build !== "function") {
|
|
84
|
+
const url = pathToFileURL(filePath);
|
|
85
|
+
url.searchParams.set("mtime", String(await newestDependencyMtime(dependencies)));
|
|
86
|
+
return url.href;
|
|
87
|
+
}
|
|
88
|
+
const digest = await createConfigBuildHash(dependencies);
|
|
89
|
+
const outputDir = path.join(projectRoot, "node_modules", ".cache", "trebired-frontend", "config", digest);
|
|
90
|
+
const basename = path.basename(filePath, path.extname(filePath)).replace(/[^\w.-]/gu, "_") || "config";
|
|
91
|
+
const outputPath = path.join(outputDir, `${basename}.js`);
|
|
92
|
+
if (!await pathExists(outputPath)) {
|
|
93
|
+
await fs.mkdir(outputDir, { recursive: true });
|
|
94
|
+
const result = await Bun.build({
|
|
95
|
+
entrypoints: [filePath],
|
|
96
|
+
external: ["@trebired/frontend", "@trebired/frontend/*"],
|
|
97
|
+
format: "esm",
|
|
98
|
+
naming: `${basename}.js`,
|
|
99
|
+
outdir: outputDir,
|
|
100
|
+
packages: "external",
|
|
101
|
+
target: "bun",
|
|
102
|
+
});
|
|
103
|
+
if (!result.success) {
|
|
104
|
+
const message = result.logs.map((log) => log.message).filter(Boolean).join("\n");
|
|
105
|
+
throw invalidConfig(`failed to compile ${filePath}${message ? `\n${message}` : ""}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return pathToFileURL(outputPath).href;
|
|
109
|
+
}
|
|
110
|
+
async function newestDependencyMtime(dependencies) {
|
|
111
|
+
let newest = 0;
|
|
112
|
+
for (const dependency of dependencies) {
|
|
113
|
+
const stats = await fs.stat(dependency);
|
|
114
|
+
if (stats.mtimeMs > newest)
|
|
115
|
+
newest = stats.mtimeMs;
|
|
116
|
+
}
|
|
117
|
+
return newest;
|
|
118
|
+
}
|
|
119
|
+
async function importConfigModule(projectRoot, filePath, dependencies) {
|
|
120
|
+
const imported = await import(await buildConfigModuleToUrl(projectRoot, filePath, dependencies));
|
|
121
|
+
return imported.default;
|
|
122
|
+
}
|
|
123
|
+
export { collectConfigDependencies, importConfigModule, pathExists };
|
|
124
|
+
//# sourceMappingURL=module.js.map
|