@pandacss/config 1.0.0 → 1.1.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.
@@ -87,6 +87,18 @@ var reducers = {
87
87
  }
88
88
  }
89
89
  return artifacts;
90
+ }),
91
+ "preset:resolved": createReducer((fns) => async (_args) => {
92
+ const args = Object.assign({}, _args);
93
+ const original = _args.preset;
94
+ let preset = args.preset;
95
+ for (const hookFn of fns) {
96
+ const result = await hookFn(Object.assign(args, { preset, original }));
97
+ if (result !== void 0) {
98
+ preset = result;
99
+ }
100
+ }
101
+ return preset;
90
102
  })
91
103
  };
92
104
  var syncHooks = [
@@ -231,6 +243,7 @@ function mergeConfigs(configs) {
231
243
  }
232
244
 
233
245
  export {
246
+ mergeHooks,
234
247
  isValidToken,
235
248
  isTokenReference,
236
249
  formatPath,
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _pandacss_types from '@pandacss/types';
2
- import { Config, ConfigTsOptions, LoadConfigResult } from '@pandacss/types';
2
+ import { Config, ConfigTsOptions, PandaHooks, LoadConfigResult } from '@pandacss/types';
3
3
  export { diffConfigs } from './diff-config.mjs';
4
4
  import { TSConfig } from 'pkg-types';
5
5
  import { P as PathMapping } from './ts-config-paths-qwrwgu2Q.mjs';
@@ -42,7 +42,7 @@ type ExtendableConfig = Extendable<Config>;
42
42
  /**
43
43
  * Recursively merge all presets into a single config (depth-first using stack)
44
44
  */
45
- declare function getResolvedConfig(config: ExtendableConfig, cwd: string): Promise<Config>;
45
+ declare function getResolvedConfig(config: ExtendableConfig, cwd: string, hooks?: Partial<PandaHooks>): Promise<Config>;
46
46
 
47
47
  /**
48
48
  * Find, load and resolve the final config (including presets)
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _pandacss_types from '@pandacss/types';
2
- import { Config, ConfigTsOptions, LoadConfigResult } from '@pandacss/types';
2
+ import { Config, ConfigTsOptions, PandaHooks, LoadConfigResult } from '@pandacss/types';
3
3
  export { diffConfigs } from './diff-config.js';
4
4
  import { TSConfig } from 'pkg-types';
5
5
  import { P as PathMapping } from './ts-config-paths-qwrwgu2Q.js';
@@ -42,7 +42,7 @@ type ExtendableConfig = Extendable<Config>;
42
42
  /**
43
43
  * Recursively merge all presets into a single config (depth-first using stack)
44
44
  */
45
- declare function getResolvedConfig(config: ExtendableConfig, cwd: string): Promise<Config>;
45
+ declare function getResolvedConfig(config: ExtendableConfig, cwd: string, hooks?: Partial<PandaHooks>): Promise<Config>;
46
46
 
47
47
  /**
48
48
  * Find, load and resolve the final config (including presets)
package/dist/index.js CHANGED
@@ -378,6 +378,9 @@ function getConfigDependencies(filePath, tsOptions = { pathMappings: [] }, compi
378
378
  return { deps, aliases: foundModuleAliases };
379
379
  }
380
380
 
381
+ // src/get-resolved-config.ts
382
+ var import_shared6 = require("@pandacss/shared");
383
+
381
384
  // src/merge-config.ts
382
385
  var import_shared5 = require("@pandacss/shared");
383
386
  var import_merge_anything = require("merge-anything");
@@ -467,6 +470,18 @@ var reducers = {
467
470
  }
468
471
  }
469
472
  return artifacts;
473
+ }),
474
+ "preset:resolved": createReducer((fns) => async (_args) => {
475
+ const args = Object.assign({}, _args);
476
+ const original = _args.preset;
477
+ let preset = args.preset;
478
+ for (const hookFn of fns) {
479
+ const result = await hookFn(Object.assign(args, { preset, original }));
480
+ if (result !== void 0) {
481
+ preset = result;
482
+ }
483
+ }
484
+ return preset;
470
485
  })
471
486
  };
472
487
  var syncHooks = [
@@ -611,19 +626,39 @@ function mergeConfigs(configs) {
611
626
  }
612
627
 
613
628
  // src/get-resolved-config.ts
614
- async function getResolvedConfig(config, cwd) {
629
+ var hookUtils = {
630
+ omit: import_shared6.omit,
631
+ pick: import_shared6.pick,
632
+ traverse: import_shared6.traverse
633
+ };
634
+ async function getResolvedConfig(config, cwd, hooks) {
615
635
  const stack = [config];
616
636
  const configs = [];
617
637
  while (stack.length > 0) {
618
638
  const current = stack.pop();
619
639
  const subPresets = current.presets ?? [];
620
640
  for (const subPreset of subPresets) {
641
+ let presetConfig;
642
+ let presetName;
621
643
  if (typeof subPreset === "string") {
622
644
  const presetModule = await bundle(subPreset, cwd);
623
- stack.push(presetModule.config);
645
+ presetConfig = presetModule.config;
646
+ presetName = subPreset;
624
647
  } else {
625
- stack.push(await subPreset);
648
+ presetConfig = await subPreset;
649
+ presetName = presetConfig.name || "unknown-preset";
650
+ }
651
+ if (hooks?.["preset:resolved"]) {
652
+ const resolvedPreset = await hooks["preset:resolved"]({
653
+ preset: presetConfig,
654
+ name: presetName,
655
+ utils: hookUtils
656
+ });
657
+ if (resolvedPreset !== void 0) {
658
+ presetConfig = resolvedPreset;
659
+ }
626
660
  }
661
+ stack.push(presetConfig);
627
662
  }
628
663
  configs.unshift(current);
629
664
  }
@@ -634,7 +669,7 @@ async function getResolvedConfig(config, cwd) {
634
669
 
635
670
  // src/resolve-config.ts
636
671
  var import_logger4 = require("@pandacss/logger");
637
- var import_shared10 = require("@pandacss/shared");
672
+ var import_shared11 = require("@pandacss/shared");
638
673
 
639
674
  // src/bundled-preset.ts
640
675
  var import_preset_base = require("@pandacss/preset-base");
@@ -652,7 +687,7 @@ var getBundledPreset = (preset) => {
652
687
 
653
688
  // src/validate-config.ts
654
689
  var import_logger3 = require("@pandacss/logger");
655
- var import_shared9 = require("@pandacss/shared");
690
+ var import_shared10 = require("@pandacss/shared");
656
691
 
657
692
  // src/validation/validate-artifact.ts
658
693
  var validateArtifactNames = (names, addError) => {
@@ -672,13 +707,13 @@ var validateArtifactNames = (names, addError) => {
672
707
  };
673
708
 
674
709
  // src/validation/validate-breakpoints.ts
675
- var import_shared6 = require("@pandacss/shared");
710
+ var import_shared7 = require("@pandacss/shared");
676
711
  var validateBreakpoints = (breakpoints, addError) => {
677
712
  if (!breakpoints) return;
678
713
  const units = /* @__PURE__ */ new Set();
679
714
  const values = Object.values(breakpoints);
680
715
  for (const value of values) {
681
- const unit = (0, import_shared6.getUnit)(value) ?? "px";
716
+ const unit = (0, import_shared7.getUnit)(value) ?? "px";
682
717
  units.add(unit);
683
718
  }
684
719
  if (units.size > 1) {
@@ -687,11 +722,11 @@ var validateBreakpoints = (breakpoints, addError) => {
687
722
  };
688
723
 
689
724
  // src/validation/validate-condition.ts
690
- var import_shared7 = require("@pandacss/shared");
725
+ var import_shared8 = require("@pandacss/shared");
691
726
  var validateConditions = (conditions, addError) => {
692
727
  if (!conditions) return;
693
728
  Object.values(conditions).forEach((condition) => {
694
- if ((0, import_shared7.isString)(condition)) {
729
+ if ((0, import_shared8.isString)(condition)) {
695
730
  if (!condition.startsWith("@") && !condition.includes("&")) {
696
731
  addError("conditions", `Selectors should contain the \`&\` character: \`${condition}\``);
697
732
  }
@@ -734,7 +769,7 @@ var validateRecipes = (options) => {
734
769
  };
735
770
 
736
771
  // src/validation/validate-tokens.ts
737
- var import_shared8 = require("@pandacss/shared");
772
+ var import_shared9 = require("@pandacss/shared");
738
773
 
739
774
  // src/validation/validate-token-references.ts
740
775
  var validateTokenReferences = (props) => {
@@ -785,7 +820,7 @@ var validateTokens = (options) => {
785
820
  const { tokenNames, semanticTokenNames, valueAtPath, refsByPath, typeByPath } = tokens2;
786
821
  if (theme.tokens) {
787
822
  const tokenPaths = /* @__PURE__ */ new Set();
788
- (0, import_shared8.walkObject)(
823
+ (0, import_shared9.walkObject)(
789
824
  theme.tokens,
790
825
  (value, paths) => {
791
826
  const path2 = paths.join(SEP);
@@ -825,7 +860,7 @@ var validateTokens = (options) => {
825
860
  }
826
861
  if (theme.semanticTokens) {
827
862
  const tokenPaths = /* @__PURE__ */ new Set();
828
- (0, import_shared8.walkObject)(
863
+ (0, import_shared9.walkObject)(
829
864
  theme.semanticTokens,
830
865
  (value, paths) => {
831
866
  const path2 = paths.join(SEP);
@@ -836,7 +871,7 @@ var validateTokens = (options) => {
836
871
  valueAtPath.set(path2.replace(SEP + "DEFAULT", ""), value);
837
872
  }
838
873
  if (!isValidToken(value)) return;
839
- (0, import_shared8.walkObject)(value, (itemValue, paths2) => {
874
+ (0, import_shared9.walkObject)(value, (itemValue, paths2) => {
840
875
  const valuePath = paths2.join(SEP);
841
876
  const formattedPath = formatPath(path2);
842
877
  typeByPath.set(formattedPath, "semanticTokens");
@@ -868,7 +903,7 @@ var validateTokens = (options) => {
868
903
  addError("tokens", `Token key must not contain spaces: \`theme.tokens.${formattedPath}\``);
869
904
  return;
870
905
  }
871
- if (!(0, import_shared8.isObject)(value) && !path2.includes("value")) {
906
+ if (!(0, import_shared9.isObject)(value) && !path2.includes("value")) {
872
907
  addError("tokens", `Token must contain 'value': \`theme.semanticTokens.${formattedPath}\``);
873
908
  }
874
909
  });
@@ -908,7 +943,7 @@ var validateConfig = (config) => {
908
943
  ${Array.from(warnings).map((err) => "- " + err).join("\n")}
909
944
  `;
910
945
  if (config.validation === "error") {
911
- throw new import_shared9.PandaError("CONFIG_ERROR", errors);
946
+ throw new import_shared10.PandaError("CONFIG_ERROR", errors);
912
947
  }
913
948
  import_logger3.logger.warn("config", errors);
914
949
  return warnings;
@@ -916,9 +951,10 @@ ${Array.from(warnings).map((err) => "- " + err).join("\n")}
916
951
  };
917
952
 
918
953
  // src/resolve-config.ts
919
- var hookUtils = {
920
- omit: import_shared10.omit,
921
- traverse: import_shared10.traverse
954
+ var hookUtils2 = {
955
+ omit: import_shared11.omit,
956
+ pick: import_shared11.pick,
957
+ traverse: import_shared11.traverse
922
958
  };
923
959
  async function resolveConfig(result, cwd) {
924
960
  const presets = /* @__PURE__ */ new Set();
@@ -933,7 +969,13 @@ async function resolveConfig(result, cwd) {
933
969
  presets.add(import_preset_panda.preset);
934
970
  }
935
971
  result.config.presets = Array.from(presets);
936
- const mergedConfig = await getResolvedConfig(result.config, cwd);
972
+ const userConfig = result.config;
973
+ const pluginHooks = userConfig.plugins ?? [];
974
+ if (userConfig.hooks) {
975
+ pluginHooks.push({ name: import_shared11.PANDA_CONFIG_NAME, hooks: userConfig.hooks });
976
+ }
977
+ const earlyHooks = mergeHooks(pluginHooks);
978
+ const mergedConfig = await getResolvedConfig(result.config, cwd, earlyHooks);
937
979
  const hooks = mergedConfig.hooks ?? {};
938
980
  if (mergedConfig.logLevel) {
939
981
  import_logger4.logger.level = mergedConfig.logLevel;
@@ -948,14 +990,14 @@ async function resolveConfig(result, cwd) {
948
990
  config: loadConfigResult.config,
949
991
  path: loadConfigResult.path,
950
992
  dependencies: loadConfigResult.dependencies,
951
- utils: hookUtils
993
+ utils: hookUtils2
952
994
  });
953
995
  if (result2) {
954
996
  loadConfigResult.config = result2;
955
997
  }
956
998
  }
957
- const serialized = (0, import_shared10.stringifyJson)(Object.assign({}, loadConfigResult.config, { name: import_shared10.PANDA_CONFIG_NAME, presets: [] }));
958
- const deserialize = () => (0, import_shared10.parseJson)(serialized);
999
+ const serialized = (0, import_shared11.stringifyJson)(Object.assign({}, loadConfigResult.config, { name: import_shared11.PANDA_CONFIG_NAME, presets: [] }));
1000
+ const deserialize = () => (0, import_shared11.parseJson)(serialized);
959
1001
  return { ...loadConfigResult, serialized, deserialize, hooks };
960
1002
  }
961
1003
 
package/dist/index.mjs CHANGED
@@ -8,8 +8,9 @@ import {
8
8
  isTokenReference,
9
9
  isValidToken,
10
10
  mergeConfigs,
11
+ mergeHooks,
11
12
  serializeTokenValue
12
- } from "./chunk-B47HB6K3.mjs";
13
+ } from "./chunk-KMUVLTV2.mjs";
13
14
  import {
14
15
  resolveTsPathPattern
15
16
  } from "./chunk-RPIVZP2I.mjs";
@@ -201,19 +202,40 @@ function getConfigDependencies(filePath, tsOptions = { pathMappings: [] }, compi
201
202
  }
202
203
 
203
204
  // src/get-resolved-config.ts
204
- async function getResolvedConfig(config, cwd) {
205
+ import { omit, pick, traverse } from "@pandacss/shared";
206
+ var hookUtils = {
207
+ omit,
208
+ pick,
209
+ traverse
210
+ };
211
+ async function getResolvedConfig(config, cwd, hooks) {
205
212
  const stack = [config];
206
213
  const configs = [];
207
214
  while (stack.length > 0) {
208
215
  const current = stack.pop();
209
216
  const subPresets = current.presets ?? [];
210
217
  for (const subPreset of subPresets) {
218
+ let presetConfig;
219
+ let presetName;
211
220
  if (typeof subPreset === "string") {
212
221
  const presetModule = await bundle(subPreset, cwd);
213
- stack.push(presetModule.config);
222
+ presetConfig = presetModule.config;
223
+ presetName = subPreset;
214
224
  } else {
215
- stack.push(await subPreset);
225
+ presetConfig = await subPreset;
226
+ presetName = presetConfig.name || "unknown-preset";
216
227
  }
228
+ if (hooks?.["preset:resolved"]) {
229
+ const resolvedPreset = await hooks["preset:resolved"]({
230
+ preset: presetConfig,
231
+ name: presetName,
232
+ utils: hookUtils
233
+ });
234
+ if (resolvedPreset !== void 0) {
235
+ presetConfig = resolvedPreset;
236
+ }
237
+ }
238
+ stack.push(presetConfig);
217
239
  }
218
240
  configs.unshift(current);
219
241
  }
@@ -224,7 +246,7 @@ async function getResolvedConfig(config, cwd) {
224
246
 
225
247
  // src/resolve-config.ts
226
248
  import { logger as logger3 } from "@pandacss/logger";
227
- import { PANDA_CONFIG_NAME, omit, parseJson, stringifyJson, traverse } from "@pandacss/shared";
249
+ import { PANDA_CONFIG_NAME, omit as omit2, parseJson, pick as pick2, stringifyJson, traverse as traverse2 } from "@pandacss/shared";
228
250
 
229
251
  // src/bundled-preset.ts
230
252
  import { preset as presetBase } from "@pandacss/preset-base";
@@ -506,9 +528,10 @@ ${Array.from(warnings).map((err) => "- " + err).join("\n")}
506
528
  };
507
529
 
508
530
  // src/resolve-config.ts
509
- var hookUtils = {
510
- omit,
511
- traverse
531
+ var hookUtils2 = {
532
+ omit: omit2,
533
+ pick: pick2,
534
+ traverse: traverse2
512
535
  };
513
536
  async function resolveConfig(result, cwd) {
514
537
  const presets = /* @__PURE__ */ new Set();
@@ -523,7 +546,13 @@ async function resolveConfig(result, cwd) {
523
546
  presets.add(presetPanda);
524
547
  }
525
548
  result.config.presets = Array.from(presets);
526
- const mergedConfig = await getResolvedConfig(result.config, cwd);
549
+ const userConfig = result.config;
550
+ const pluginHooks = userConfig.plugins ?? [];
551
+ if (userConfig.hooks) {
552
+ pluginHooks.push({ name: PANDA_CONFIG_NAME, hooks: userConfig.hooks });
553
+ }
554
+ const earlyHooks = mergeHooks(pluginHooks);
555
+ const mergedConfig = await getResolvedConfig(result.config, cwd, earlyHooks);
527
556
  const hooks = mergedConfig.hooks ?? {};
528
557
  if (mergedConfig.logLevel) {
529
558
  logger3.level = mergedConfig.logLevel;
@@ -538,7 +567,7 @@ async function resolveConfig(result, cwd) {
538
567
  config: loadConfigResult.config,
539
568
  path: loadConfigResult.path,
540
569
  dependencies: loadConfigResult.dependencies,
541
- utils: hookUtils
570
+ utils: hookUtils2
542
571
  });
543
572
  if (result2) {
544
573
  loadConfigResult.config = result2;
@@ -111,6 +111,18 @@ var reducers = {
111
111
  }
112
112
  }
113
113
  return artifacts;
114
+ }),
115
+ "preset:resolved": createReducer((fns) => async (_args) => {
116
+ const args = Object.assign({}, _args);
117
+ const original = _args.preset;
118
+ let preset = args.preset;
119
+ for (const hookFn of fns) {
120
+ const result = await hookFn(Object.assign(args, { preset, original }));
121
+ if (result !== void 0) {
122
+ preset = result;
123
+ }
124
+ }
125
+ return preset;
114
126
  })
115
127
  };
116
128
  var syncHooks = [
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  mergeConfigs
3
- } from "./chunk-B47HB6K3.mjs";
3
+ } from "./chunk-KMUVLTV2.mjs";
4
4
  export {
5
5
  mergeConfigs
6
6
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pandacss/config",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Find and load panda config",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -73,11 +73,11 @@
73
73
  "merge-anything": "5.1.7",
74
74
  "microdiff": "1.3.2",
75
75
  "typescript": "5.8.3",
76
- "@pandacss/logger": "1.0.0",
77
- "@pandacss/preset-base": "1.0.0",
78
- "@pandacss/preset-panda": "1.0.0",
79
- "@pandacss/shared": "1.0.0",
80
- "@pandacss/types": "1.0.0"
76
+ "@pandacss/logger": "1.1.0",
77
+ "@pandacss/preset-base": "1.1.0",
78
+ "@pandacss/preset-panda": "1.1.0",
79
+ "@pandacss/shared": "1.1.0",
80
+ "@pandacss/types": "1.1.0"
81
81
  },
82
82
  "devDependencies": {
83
83
  "pkg-types": "2.2.0"