@bamboocss/config 1.11.3 → 1.12.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.
@@ -1,4 +1,254 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_merge_config = require("./merge-config-CcNpHJit.cjs");
3
- exports.mergeConfigs = require_merge_config.mergeConfigs;
4
- exports.mergeHooks = require_merge_config.mergeHooks;
2
+ let _bamboocss_shared = require("@bamboocss/shared");
3
+ let _bamboocss_logger = require("@bamboocss/logger");
4
+ //#region src/merge-hooks.ts
5
+ const mergeHooks = (plugins) => {
6
+ const hooksFns = {};
7
+ plugins.forEach(({ name, hooks }) => {
8
+ Object.entries(hooks ?? {}).forEach(([key, value]) => {
9
+ if (!hooksFns[key]) hooksFns[key] = [];
10
+ hooksFns[key].push([name, value]);
11
+ });
12
+ });
13
+ return Object.fromEntries(Object.entries(hooksFns).map(([key, entries]) => {
14
+ const fns = entries.map(([name, fn]) => tryCatch(name, fn));
15
+ const reducer = key in reducers ? reducers[key] : void 0;
16
+ if (reducer) return [key, reducer(fns)];
17
+ return [key, syncHooks.includes(key) ? callAll(...fns) : callAllAsync(...fns)];
18
+ }));
19
+ };
20
+ const createReducer = (reducer) => reducer;
21
+ const reducers = {
22
+ "config:resolved": createReducer((fns) => async (_args) => {
23
+ const args = Object.assign({}, _args);
24
+ const original = _args.config;
25
+ let config = args.config;
26
+ for (const hookFn of fns) {
27
+ const result = await hookFn(Object.assign(args, {
28
+ config,
29
+ original
30
+ }));
31
+ if (result !== void 0) config = result;
32
+ }
33
+ return config;
34
+ }),
35
+ "parser:before": createReducer((fns) => (_args) => {
36
+ const args = Object.assign({}, _args);
37
+ const original = _args.content;
38
+ let content = args.content;
39
+ for (const hookFn of fns) {
40
+ const result = hookFn(Object.assign(args, {
41
+ content,
42
+ original
43
+ }));
44
+ if (result !== void 0) content = result;
45
+ }
46
+ return content;
47
+ }),
48
+ "parser:preprocess": createReducer((fns) => (_args) => {
49
+ const args = Object.assign({}, _args);
50
+ const original = _args.data;
51
+ let data = args.data;
52
+ for (const hookFn of fns) {
53
+ const result = hookFn(Object.assign(args, {
54
+ data,
55
+ original
56
+ }));
57
+ if (result !== void 0) data = result;
58
+ }
59
+ return data;
60
+ }),
61
+ "cssgen:done": createReducer((fns) => (_args) => {
62
+ const args = Object.assign({}, _args);
63
+ const original = _args.content;
64
+ let content = args.content;
65
+ for (const hookFn of fns) {
66
+ const result = hookFn(Object.assign(args, {
67
+ content,
68
+ original
69
+ }));
70
+ if (result !== void 0) content = result;
71
+ }
72
+ return content;
73
+ }),
74
+ "codegen:prepare": createReducer((fns) => async (_args) => {
75
+ const args = Object.assign({}, _args);
76
+ const original = _args.artifacts;
77
+ let artifacts = args.artifacts;
78
+ for (const hookFn of fns) {
79
+ const result = await hookFn(Object.assign(args, {
80
+ artifacts,
81
+ original
82
+ }));
83
+ if (result) artifacts = result;
84
+ }
85
+ return artifacts;
86
+ }),
87
+ "preset:resolved": createReducer((fns) => async (_args) => {
88
+ const args = Object.assign({}, _args);
89
+ const original = _args.preset;
90
+ let preset = args.preset;
91
+ for (const hookFn of fns) {
92
+ const result = await hookFn(Object.assign(args, {
93
+ preset,
94
+ original
95
+ }));
96
+ if (result !== void 0) preset = result;
97
+ }
98
+ return preset;
99
+ }),
100
+ "css:optimize": createReducer((fns) => (_args) => {
101
+ const args = Object.assign({}, _args);
102
+ const original = _args.css;
103
+ let css = args.css;
104
+ for (const hookFn of fns) {
105
+ const result = hookFn(Object.assign(args, {
106
+ css,
107
+ original
108
+ }));
109
+ if (result !== void 0) css = result;
110
+ }
111
+ return css;
112
+ })
113
+ };
114
+ const syncHooks = [
115
+ "context:created",
116
+ "parser:before",
117
+ "parser:preprocess",
118
+ "parser:after",
119
+ "cssgen:done",
120
+ "css:optimize"
121
+ ];
122
+ const callAllAsync = (...fns) => async (...a) => {
123
+ for (const fn of fns) await fn?.(...a);
124
+ };
125
+ const callAll = (...fns) => (...a) => {
126
+ fns.forEach((fn) => fn?.(...a));
127
+ };
128
+ const tryCatch = (name, fn) => {
129
+ return (...args) => {
130
+ try {
131
+ return fn(...args);
132
+ } catch (e) {
133
+ _bamboocss_logger.logger.caughtError("hooks", `Error in plugin "${name}"`, e);
134
+ }
135
+ };
136
+ };
137
+ //#endregion
138
+ //#region src/validation/utils.ts
139
+ const isValidToken = (token) => (0, _bamboocss_shared.isObject)(token) && Object.hasOwnProperty.call(token, "value");
140
+ //#endregion
141
+ //#region src/merge-config.ts
142
+ /**
143
+ * Collect all `extend` properties into an array (to avoid mutation)
144
+ */
145
+ function getExtends(items) {
146
+ return items.reduce((merged, { extend }) => {
147
+ if (!extend) return merged;
148
+ return (0, _bamboocss_shared.mergeWith)(merged, extend, (originalValue, newValue) => {
149
+ if (newValue === void 0) return originalValue ?? [];
150
+ if (originalValue === void 0) return [newValue];
151
+ if (Array.isArray(originalValue)) return [newValue, ...originalValue];
152
+ return [newValue, originalValue];
153
+ });
154
+ }, {});
155
+ }
156
+ /**
157
+ * Separate the `extend` properties from the rest of the object
158
+ */
159
+ function mergeRecords(records) {
160
+ return {
161
+ ...records.reduce((acc, record) => (0, _bamboocss_shared.assign)(acc, record), {}),
162
+ extend: getExtends(records)
163
+ };
164
+ }
165
+ /**
166
+ * Merge all `extend` properties into the rest of the object
167
+ */
168
+ function mergeExtensions(records) {
169
+ const { extend = [], ...restProps } = mergeRecords(records);
170
+ return (0, _bamboocss_shared.mergeWith)(restProps, extend, (obj, extensions) => {
171
+ return (0, _bamboocss_shared.mergeAndConcat)({}, obj, ...extensions);
172
+ });
173
+ }
174
+ const isEmptyObject = (obj) => typeof obj === "object" && Object.keys(obj).length === 0;
175
+ const compact = (obj) => {
176
+ return Object.keys(obj).reduce((acc, key) => {
177
+ if (obj[key] !== void 0 && !isEmptyObject(obj[key])) acc[key] = obj[key];
178
+ return acc;
179
+ }, {});
180
+ };
181
+ const tokenKeys = [
182
+ "description",
183
+ "extensions",
184
+ "type",
185
+ "value",
186
+ "deprecated"
187
+ ];
188
+ /**
189
+ * Merge all configs into a single config
190
+ */
191
+ function mergeConfigs(configs) {
192
+ const userConfig = configs.at(-1);
193
+ const pluginHooks = userConfig.plugins ?? [];
194
+ if (userConfig.hooks) pluginHooks.push({
195
+ name: _bamboocss_shared.BAMBOO_CONFIG_NAME,
196
+ hooks: userConfig.hooks
197
+ });
198
+ const reversed = Array.from(configs).reverse();
199
+ const withoutEmpty = compact((0, _bamboocss_shared.assign)({
200
+ conditions: mergeExtensions(reversed.map((config) => config.conditions ?? {})),
201
+ theme: mergeExtensions(reversed.map((config) => config.theme ?? {})),
202
+ patterns: mergeExtensions(reversed.map((config) => config.patterns ?? {})),
203
+ utilities: mergeExtensions(reversed.map((config) => config.utilities ?? {})),
204
+ globalCss: mergeExtensions(reversed.map((config) => config.globalCss ?? {})),
205
+ globalVars: mergeExtensions(reversed.map((config) => config.globalVars ?? {})),
206
+ globalFontface: mergeExtensions(reversed.map((config) => config.globalFontface ?? {})),
207
+ globalPositionTry: mergeExtensions(reversed.map((config) => config.globalPositionTry ?? {})),
208
+ staticCss: mergeExtensions(reversed.map((config) => config.staticCss ?? {})),
209
+ themes: mergeExtensions(reversed.map((config) => config.themes ?? {})),
210
+ hooks: mergeHooks(pluginHooks)
211
+ }, ...reversed));
212
+ /**
213
+ * Properly merge tokens between flat/nested forms by setting the flat form as the default
214
+ * preset:
215
+ * ```
216
+ * tokens: {
217
+ * black: {
218
+ * value: "black"
219
+ * }
220
+ * }
221
+ * // color: "black"
222
+ * ```
223
+ *
224
+ * config:
225
+ * ```
226
+ * tokens: {
227
+ * black: {
228
+ * 0: { value: "black" },
229
+ * 10: { value: "black/10" },
230
+ * 20: { value: "black/20" },
231
+ * // ...
232
+ * }
233
+ * }
234
+ *
235
+ * // color: "black.20"
236
+ * ```
237
+ */
238
+ if (withoutEmpty.theme?.tokens) (0, _bamboocss_shared.walkObject)(withoutEmpty.theme.tokens, (args) => args, { stop(token) {
239
+ if (!isValidToken(token)) return false;
240
+ if (Object.keys(token).filter((k) => !tokenKeys.includes(k)).length > 0) {
241
+ token.DEFAULT ||= {};
242
+ tokenKeys.forEach((key) => {
243
+ if (token[key] == null) return;
244
+ token.DEFAULT[key] ||= token[key];
245
+ delete token[key];
246
+ });
247
+ }
248
+ return true;
249
+ } });
250
+ return withoutEmpty;
251
+ }
252
+ //#endregion
253
+ exports.mergeConfigs = mergeConfigs;
254
+ exports.mergeHooks = mergeHooks;
@@ -1,2 +1,16 @@
1
- import { n as mergeHooks, t as mergeConfigs } from "./merge-config-DVOlBQJY.cjs";
1
+ import { BambooPlugin, Config } from "@bamboocss/types";
2
+
3
+ //#region src/merge-hooks.d.ts
4
+ declare const mergeHooks: (plugins: BambooPlugin[]) => BambooHooks;
5
+ //#endregion
6
+ //#region src/merge-config.d.ts
7
+ type Extendable<T> = T & {
8
+ extend?: T;
9
+ };
10
+ type ExtendableConfig = Extendable<Config>;
11
+ /**
12
+ * Merge all configs into a single config
13
+ */
14
+ declare function mergeConfigs(configs: ExtendableConfig[]): any;
15
+ //#endregion
2
16
  export { mergeConfigs, mergeHooks };
@@ -1,2 +1,16 @@
1
- import { n as mergeHooks, t as mergeConfigs } from "./merge-config-oEiBYbfB.mjs";
1
+ import { BambooPlugin, Config } from "@bamboocss/types";
2
+
3
+ //#region src/merge-hooks.d.ts
4
+ declare const mergeHooks: (plugins: BambooPlugin[]) => BambooHooks;
5
+ //#endregion
6
+ //#region src/merge-config.d.ts
7
+ type Extendable<T> = T & {
8
+ extend?: T;
9
+ };
10
+ type ExtendableConfig = Extendable<Config>;
11
+ /**
12
+ * Merge all configs into a single config
13
+ */
14
+ declare function mergeConfigs(configs: ExtendableConfig[]): any;
15
+ //#endregion
2
16
  export { mergeConfigs, mergeHooks };
@@ -1,2 +1,252 @@
1
- import { s as mergeHooks, t as mergeConfigs } from "./merge-config-DI__LOWx.mjs";
1
+ import { BAMBOO_CONFIG_NAME, assign, isObject, mergeAndConcat, mergeWith, walkObject } from "@bamboocss/shared";
2
+ import { logger } from "@bamboocss/logger";
3
+ //#region src/merge-hooks.ts
4
+ const mergeHooks = (plugins) => {
5
+ const hooksFns = {};
6
+ plugins.forEach(({ name, hooks }) => {
7
+ Object.entries(hooks ?? {}).forEach(([key, value]) => {
8
+ if (!hooksFns[key]) hooksFns[key] = [];
9
+ hooksFns[key].push([name, value]);
10
+ });
11
+ });
12
+ return Object.fromEntries(Object.entries(hooksFns).map(([key, entries]) => {
13
+ const fns = entries.map(([name, fn]) => tryCatch(name, fn));
14
+ const reducer = key in reducers ? reducers[key] : void 0;
15
+ if (reducer) return [key, reducer(fns)];
16
+ return [key, syncHooks.includes(key) ? callAll(...fns) : callAllAsync(...fns)];
17
+ }));
18
+ };
19
+ const createReducer = (reducer) => reducer;
20
+ const reducers = {
21
+ "config:resolved": createReducer((fns) => async (_args) => {
22
+ const args = Object.assign({}, _args);
23
+ const original = _args.config;
24
+ let config = args.config;
25
+ for (const hookFn of fns) {
26
+ const result = await hookFn(Object.assign(args, {
27
+ config,
28
+ original
29
+ }));
30
+ if (result !== void 0) config = result;
31
+ }
32
+ return config;
33
+ }),
34
+ "parser:before": createReducer((fns) => (_args) => {
35
+ const args = Object.assign({}, _args);
36
+ const original = _args.content;
37
+ let content = args.content;
38
+ for (const hookFn of fns) {
39
+ const result = hookFn(Object.assign(args, {
40
+ content,
41
+ original
42
+ }));
43
+ if (result !== void 0) content = result;
44
+ }
45
+ return content;
46
+ }),
47
+ "parser:preprocess": createReducer((fns) => (_args) => {
48
+ const args = Object.assign({}, _args);
49
+ const original = _args.data;
50
+ let data = args.data;
51
+ for (const hookFn of fns) {
52
+ const result = hookFn(Object.assign(args, {
53
+ data,
54
+ original
55
+ }));
56
+ if (result !== void 0) data = result;
57
+ }
58
+ return data;
59
+ }),
60
+ "cssgen:done": createReducer((fns) => (_args) => {
61
+ const args = Object.assign({}, _args);
62
+ const original = _args.content;
63
+ let content = args.content;
64
+ for (const hookFn of fns) {
65
+ const result = hookFn(Object.assign(args, {
66
+ content,
67
+ original
68
+ }));
69
+ if (result !== void 0) content = result;
70
+ }
71
+ return content;
72
+ }),
73
+ "codegen:prepare": createReducer((fns) => async (_args) => {
74
+ const args = Object.assign({}, _args);
75
+ const original = _args.artifacts;
76
+ let artifacts = args.artifacts;
77
+ for (const hookFn of fns) {
78
+ const result = await hookFn(Object.assign(args, {
79
+ artifacts,
80
+ original
81
+ }));
82
+ if (result) artifacts = result;
83
+ }
84
+ return artifacts;
85
+ }),
86
+ "preset:resolved": createReducer((fns) => async (_args) => {
87
+ const args = Object.assign({}, _args);
88
+ const original = _args.preset;
89
+ let preset = args.preset;
90
+ for (const hookFn of fns) {
91
+ const result = await hookFn(Object.assign(args, {
92
+ preset,
93
+ original
94
+ }));
95
+ if (result !== void 0) preset = result;
96
+ }
97
+ return preset;
98
+ }),
99
+ "css:optimize": createReducer((fns) => (_args) => {
100
+ const args = Object.assign({}, _args);
101
+ const original = _args.css;
102
+ let css = args.css;
103
+ for (const hookFn of fns) {
104
+ const result = hookFn(Object.assign(args, {
105
+ css,
106
+ original
107
+ }));
108
+ if (result !== void 0) css = result;
109
+ }
110
+ return css;
111
+ })
112
+ };
113
+ const syncHooks = [
114
+ "context:created",
115
+ "parser:before",
116
+ "parser:preprocess",
117
+ "parser:after",
118
+ "cssgen:done",
119
+ "css:optimize"
120
+ ];
121
+ const callAllAsync = (...fns) => async (...a) => {
122
+ for (const fn of fns) await fn?.(...a);
123
+ };
124
+ const callAll = (...fns) => (...a) => {
125
+ fns.forEach((fn) => fn?.(...a));
126
+ };
127
+ const tryCatch = (name, fn) => {
128
+ return (...args) => {
129
+ try {
130
+ return fn(...args);
131
+ } catch (e) {
132
+ logger.caughtError("hooks", `Error in plugin "${name}"`, e);
133
+ }
134
+ };
135
+ };
136
+ //#endregion
137
+ //#region src/validation/utils.ts
138
+ const isValidToken = (token) => isObject(token) && Object.hasOwnProperty.call(token, "value");
139
+ //#endregion
140
+ //#region src/merge-config.ts
141
+ /**
142
+ * Collect all `extend` properties into an array (to avoid mutation)
143
+ */
144
+ function getExtends(items) {
145
+ return items.reduce((merged, { extend }) => {
146
+ if (!extend) return merged;
147
+ return mergeWith(merged, extend, (originalValue, newValue) => {
148
+ if (newValue === void 0) return originalValue ?? [];
149
+ if (originalValue === void 0) return [newValue];
150
+ if (Array.isArray(originalValue)) return [newValue, ...originalValue];
151
+ return [newValue, originalValue];
152
+ });
153
+ }, {});
154
+ }
155
+ /**
156
+ * Separate the `extend` properties from the rest of the object
157
+ */
158
+ function mergeRecords(records) {
159
+ return {
160
+ ...records.reduce((acc, record) => assign(acc, record), {}),
161
+ extend: getExtends(records)
162
+ };
163
+ }
164
+ /**
165
+ * Merge all `extend` properties into the rest of the object
166
+ */
167
+ function mergeExtensions(records) {
168
+ const { extend = [], ...restProps } = mergeRecords(records);
169
+ return mergeWith(restProps, extend, (obj, extensions) => {
170
+ return mergeAndConcat({}, obj, ...extensions);
171
+ });
172
+ }
173
+ const isEmptyObject = (obj) => typeof obj === "object" && Object.keys(obj).length === 0;
174
+ const compact = (obj) => {
175
+ return Object.keys(obj).reduce((acc, key) => {
176
+ if (obj[key] !== void 0 && !isEmptyObject(obj[key])) acc[key] = obj[key];
177
+ return acc;
178
+ }, {});
179
+ };
180
+ const tokenKeys = [
181
+ "description",
182
+ "extensions",
183
+ "type",
184
+ "value",
185
+ "deprecated"
186
+ ];
187
+ /**
188
+ * Merge all configs into a single config
189
+ */
190
+ function mergeConfigs(configs) {
191
+ const userConfig = configs.at(-1);
192
+ const pluginHooks = userConfig.plugins ?? [];
193
+ if (userConfig.hooks) pluginHooks.push({
194
+ name: BAMBOO_CONFIG_NAME,
195
+ hooks: userConfig.hooks
196
+ });
197
+ const reversed = Array.from(configs).reverse();
198
+ const withoutEmpty = compact(assign({
199
+ conditions: mergeExtensions(reversed.map((config) => config.conditions ?? {})),
200
+ theme: mergeExtensions(reversed.map((config) => config.theme ?? {})),
201
+ patterns: mergeExtensions(reversed.map((config) => config.patterns ?? {})),
202
+ utilities: mergeExtensions(reversed.map((config) => config.utilities ?? {})),
203
+ globalCss: mergeExtensions(reversed.map((config) => config.globalCss ?? {})),
204
+ globalVars: mergeExtensions(reversed.map((config) => config.globalVars ?? {})),
205
+ globalFontface: mergeExtensions(reversed.map((config) => config.globalFontface ?? {})),
206
+ globalPositionTry: mergeExtensions(reversed.map((config) => config.globalPositionTry ?? {})),
207
+ staticCss: mergeExtensions(reversed.map((config) => config.staticCss ?? {})),
208
+ themes: mergeExtensions(reversed.map((config) => config.themes ?? {})),
209
+ hooks: mergeHooks(pluginHooks)
210
+ }, ...reversed));
211
+ /**
212
+ * Properly merge tokens between flat/nested forms by setting the flat form as the default
213
+ * preset:
214
+ * ```
215
+ * tokens: {
216
+ * black: {
217
+ * value: "black"
218
+ * }
219
+ * }
220
+ * // color: "black"
221
+ * ```
222
+ *
223
+ * config:
224
+ * ```
225
+ * tokens: {
226
+ * black: {
227
+ * 0: { value: "black" },
228
+ * 10: { value: "black/10" },
229
+ * 20: { value: "black/20" },
230
+ * // ...
231
+ * }
232
+ * }
233
+ *
234
+ * // color: "black.20"
235
+ * ```
236
+ */
237
+ if (withoutEmpty.theme?.tokens) walkObject(withoutEmpty.theme.tokens, (args) => args, { stop(token) {
238
+ if (!isValidToken(token)) return false;
239
+ if (Object.keys(token).filter((k) => !tokenKeys.includes(k)).length > 0) {
240
+ token.DEFAULT ||= {};
241
+ tokenKeys.forEach((key) => {
242
+ if (token[key] == null) return;
243
+ token.DEFAULT[key] ||= token[key];
244
+ delete token[key];
245
+ });
246
+ }
247
+ return true;
248
+ } });
249
+ return withoutEmpty;
250
+ }
251
+ //#endregion
2
252
  export { mergeConfigs, mergeHooks };
@@ -1,5 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- require("./diff-config-Co_3mDXE.cjs");
3
2
  let path = require("path");
4
3
  //#region src/resolve-ts-path-pattern.ts
5
4
  /**
@@ -1,5 +1,9 @@
1
- import { t as PathMapping } from "./ts-config-paths-wVx39QZ0.cjs";
2
-
1
+ //#region src/ts-config-paths.d.ts
2
+ interface PathMapping {
3
+ pattern: RegExp;
4
+ paths: string[];
5
+ }
6
+ //#endregion
3
7
  //#region src/resolve-ts-path-pattern.d.ts
4
8
  /**
5
9
  * @see https://github.com/aleclarson/vite-tsconfig-paths/blob/e8f0acf7adfcfbf77edbe937f64b4e5d39557ad0/src/index.ts#LL231C57-L231C57
@@ -1,5 +1,9 @@
1
- import { t as PathMapping } from "./ts-config-paths-CvGId8kq.mjs";
2
-
1
+ //#region src/ts-config-paths.d.ts
2
+ interface PathMapping {
3
+ pattern: RegExp;
4
+ paths: string[];
5
+ }
6
+ //#endregion
3
7
  //#region src/resolve-ts-path-pattern.d.ts
4
8
  /**
5
9
  * @see https://github.com/aleclarson/vite-tsconfig-paths/blob/e8f0acf7adfcfbf77edbe937f64b4e5d39557ad0/src/index.ts#LL231C57-L231C57
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bamboocss/config",
3
- "version": "1.11.3",
3
+ "version": "1.12.0",
4
4
  "description": "Find and load bamboo config",
5
5
  "homepage": "https://bamboo-css.com",
6
6
  "license": "MIT",
@@ -64,11 +64,11 @@
64
64
  "escalade": "3.2.0",
65
65
  "microdiff": "1.5.0",
66
66
  "typescript": "6.0.2",
67
- "@bamboocss/logger": "1.11.3",
68
- "@bamboocss/preset-base": "1.11.3",
69
- "@bamboocss/shared": "1.11.3",
70
- "@bamboocss/types": "1.11.3",
71
- "@bamboocss/preset-bamboo": "1.11.3"
67
+ "@bamboocss/logger": "1.12.0",
68
+ "@bamboocss/preset-bamboo": "1.12.0",
69
+ "@bamboocss/preset-base": "1.12.0",
70
+ "@bamboocss/shared": "1.12.0",
71
+ "@bamboocss/types": "1.12.0"
72
72
  },
73
73
  "devDependencies": {
74
74
  "pkg-types": "2.3.0"