@pandacss/config 0.0.0-dev-20221220033401 → 0.0.0-dev-20221220144042

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/dist/index.d.ts CHANGED
@@ -5,8 +5,8 @@ type ConfigFileOptions = {
5
5
  file?: string;
6
6
  };
7
7
  declare function loadConfigFile(options: ConfigFileOptions): Promise<{
8
+ config: any;
8
9
  path: string;
9
- config: UserConfig;
10
10
  dependencies: string[];
11
11
  }>;
12
12
  type LoadConfigResult = {
@@ -15,4 +15,18 @@ type LoadConfigResult = {
15
15
  dependencies: string[];
16
16
  };
17
17
 
18
- export { LoadConfigResult, loadConfigFile };
18
+ type Extendable<T> = T & {
19
+ extend?: T;
20
+ };
21
+ type Dict = Record<string, any>;
22
+ type ExtendableRecord = Extendable<Dict>;
23
+ /**
24
+ * Merge all configs into a single config
25
+ */
26
+ declare function mergeConfigs(configs: ExtendableRecord[]): any;
27
+ /**
28
+ * Recursively merge all presets into a single config
29
+ */
30
+ declare function getResolvedConfig(config: ExtendableRecord, cwd: string): Promise<any>;
31
+
32
+ export { LoadConfigResult, getResolvedConfig, loadConfigFile, mergeConfigs };
package/dist/index.js CHANGED
@@ -26,14 +26,15 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
26
26
  // src/index.ts
27
27
  var src_exports = {};
28
28
  __export(src_exports, {
29
- loadConfigFile: () => loadConfigFile
29
+ getResolvedConfig: () => getResolvedConfig,
30
+ loadConfigFile: () => loadConfigFile,
31
+ mergeConfigs: () => mergeConfigs
30
32
  });
31
33
  module.exports = __toCommonJS(src_exports);
32
34
 
33
35
  // src/load-config.ts
34
36
  var import_error = require("@pandacss/error");
35
37
  var import_logger2 = require("@pandacss/logger");
36
- var import_merge_anything = require("merge-anything");
37
38
 
38
39
  // src/bundle-require.ts
39
40
  var import_logger = require("@pandacss/logger");
@@ -124,6 +125,91 @@ function findConfigFile({ cwd, file }) {
124
125
  });
125
126
  }
126
127
 
128
+ // src/merge-config.ts
129
+ var import_merge_anything = require("merge-anything");
130
+
131
+ // src/utils.ts
132
+ var isObject = (value) => {
133
+ return Object.prototype.toString.call(value) === "[object Object]";
134
+ };
135
+ function mergeWith(target, ...sources) {
136
+ const customizer = sources.pop();
137
+ for (const source of sources) {
138
+ for (const key in source) {
139
+ const merged = customizer(target[key], source[key]);
140
+ if (merged === void 0) {
141
+ if (isObject(target[key]) && isObject(source[key])) {
142
+ target[key] = mergeWith({}, target[key], source[key], customizer);
143
+ } else {
144
+ target[key] = source[key];
145
+ }
146
+ } else {
147
+ target[key] = merged;
148
+ }
149
+ }
150
+ }
151
+ return target;
152
+ }
153
+ function assign(target, ...sources) {
154
+ for (const source of sources) {
155
+ for (const key in source) {
156
+ if (!target?.hasOwnProperty?.(key)) {
157
+ target[key] = source[key];
158
+ }
159
+ }
160
+ }
161
+ return target;
162
+ }
163
+
164
+ // src/merge-config.ts
165
+ function getExtends(items) {
166
+ return items.reduce((merged, { extend }) => {
167
+ return mergeWith(merged, extend, (originalValue, newValue) => {
168
+ if (originalValue === void 0) {
169
+ return [newValue];
170
+ }
171
+ if (Array.isArray(originalValue)) {
172
+ return [newValue, ...originalValue];
173
+ }
174
+ return [newValue, originalValue];
175
+ });
176
+ }, {});
177
+ }
178
+ function mergeRecords(records) {
179
+ return {
180
+ ...records.reduce((acc, record) => assign(acc, record), {}),
181
+ extend: getExtends(records)
182
+ };
183
+ }
184
+ function mergeExtensions(records) {
185
+ const { extend = [], ...restProps } = mergeRecords(records);
186
+ return mergeWith(restProps, extend, (obj, extensions) => {
187
+ return (0, import_merge_anything.mergeAndConcat)({}, obj, ...extensions);
188
+ });
189
+ }
190
+ function mergeConfigs(configs2) {
191
+ return assign(
192
+ {
193
+ conditions: mergeExtensions(configs2.map((config) => config.conditions ?? {})),
194
+ theme: mergeExtensions(configs2.map((config) => config.theme ?? {})),
195
+ patterns: mergeExtensions(configs2.map((config) => config.patterns ?? {})),
196
+ utilities: mergeExtensions(configs2.map((config) => config.utilities ?? {}))
197
+ },
198
+ ...configs2
199
+ );
200
+ }
201
+ async function getResolvedConfig(config, cwd) {
202
+ const presets = config.presets ?? [];
203
+ const configs2 = await Promise.all(
204
+ presets.slice().reverse().map(async (preset) => {
205
+ const presetModule = await bundleAndRequire(preset, cwd);
206
+ return getResolvedConfig(presetModule.config, cwd);
207
+ })
208
+ );
209
+ delete config.presets;
210
+ return mergeConfigs([config, ...configs2]);
211
+ }
212
+
127
213
  // src/load-config.ts
128
214
  async function loadConfigFile(options) {
129
215
  const { cwd, file } = options;
@@ -136,18 +222,17 @@ async function loadConfigFile(options) {
136
222
  if (typeof result.config !== "object") {
137
223
  throw new import_error.ConfigError(`\u{1F4A5} Config must export or return an object.`);
138
224
  }
139
- const presets = result.config.presets ?? [];
140
- for (const preset of presets) {
141
- const presetResult = await bundleAndRequire(preset, cwd);
142
- result.config = (0, import_merge_anything.merge)({}, presetResult.config, result.config);
143
- }
144
- delete result.config.presets;
225
+ result.config.presets ||= ["css-panda/presets"];
226
+ const mergedConfig = await getResolvedConfig(result.config, cwd);
145
227
  return {
146
228
  ...result,
229
+ config: mergedConfig,
147
230
  path: filePath
148
231
  };
149
232
  }
150
233
  // Annotate the CommonJS export names for ESM import in node:
151
234
  0 && (module.exports = {
152
- loadConfigFile
235
+ getResolvedConfig,
236
+ loadConfigFile,
237
+ mergeConfigs
153
238
  });
package/dist/index.mjs CHANGED
@@ -7,9 +7,8 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
7
7
  });
8
8
 
9
9
  // src/load-config.ts
10
- import { ConfigNotFoundError, ConfigError } from "@pandacss/error";
10
+ import { ConfigError, ConfigNotFoundError } from "@pandacss/error";
11
11
  import { logger as logger2 } from "@pandacss/logger";
12
- import { merge } from "merge-anything";
13
12
 
14
13
  // src/bundle-require.ts
15
14
  import { logger, quote } from "@pandacss/logger";
@@ -100,6 +99,91 @@ function findConfigFile({ cwd, file }) {
100
99
  });
101
100
  }
102
101
 
102
+ // src/merge-config.ts
103
+ import { mergeAndConcat } from "merge-anything";
104
+
105
+ // src/utils.ts
106
+ var isObject = (value) => {
107
+ return Object.prototype.toString.call(value) === "[object Object]";
108
+ };
109
+ function mergeWith(target, ...sources) {
110
+ const customizer = sources.pop();
111
+ for (const source of sources) {
112
+ for (const key in source) {
113
+ const merged = customizer(target[key], source[key]);
114
+ if (merged === void 0) {
115
+ if (isObject(target[key]) && isObject(source[key])) {
116
+ target[key] = mergeWith({}, target[key], source[key], customizer);
117
+ } else {
118
+ target[key] = source[key];
119
+ }
120
+ } else {
121
+ target[key] = merged;
122
+ }
123
+ }
124
+ }
125
+ return target;
126
+ }
127
+ function assign(target, ...sources) {
128
+ for (const source of sources) {
129
+ for (const key in source) {
130
+ if (!target?.hasOwnProperty?.(key)) {
131
+ target[key] = source[key];
132
+ }
133
+ }
134
+ }
135
+ return target;
136
+ }
137
+
138
+ // src/merge-config.ts
139
+ function getExtends(items) {
140
+ return items.reduce((merged, { extend }) => {
141
+ return mergeWith(merged, extend, (originalValue, newValue) => {
142
+ if (originalValue === void 0) {
143
+ return [newValue];
144
+ }
145
+ if (Array.isArray(originalValue)) {
146
+ return [newValue, ...originalValue];
147
+ }
148
+ return [newValue, originalValue];
149
+ });
150
+ }, {});
151
+ }
152
+ function mergeRecords(records) {
153
+ return {
154
+ ...records.reduce((acc, record) => assign(acc, record), {}),
155
+ extend: getExtends(records)
156
+ };
157
+ }
158
+ function mergeExtensions(records) {
159
+ const { extend = [], ...restProps } = mergeRecords(records);
160
+ return mergeWith(restProps, extend, (obj, extensions) => {
161
+ return mergeAndConcat({}, obj, ...extensions);
162
+ });
163
+ }
164
+ function mergeConfigs(configs2) {
165
+ return assign(
166
+ {
167
+ conditions: mergeExtensions(configs2.map((config) => config.conditions ?? {})),
168
+ theme: mergeExtensions(configs2.map((config) => config.theme ?? {})),
169
+ patterns: mergeExtensions(configs2.map((config) => config.patterns ?? {})),
170
+ utilities: mergeExtensions(configs2.map((config) => config.utilities ?? {}))
171
+ },
172
+ ...configs2
173
+ );
174
+ }
175
+ async function getResolvedConfig(config, cwd) {
176
+ const presets = config.presets ?? [];
177
+ const configs2 = await Promise.all(
178
+ presets.slice().reverse().map(async (preset) => {
179
+ const presetModule = await bundleAndRequire(preset, cwd);
180
+ return getResolvedConfig(presetModule.config, cwd);
181
+ })
182
+ );
183
+ delete config.presets;
184
+ return mergeConfigs([config, ...configs2]);
185
+ }
186
+
103
187
  // src/load-config.ts
104
188
  async function loadConfigFile(options) {
105
189
  const { cwd, file } = options;
@@ -112,17 +196,16 @@ async function loadConfigFile(options) {
112
196
  if (typeof result.config !== "object") {
113
197
  throw new ConfigError(`\u{1F4A5} Config must export or return an object.`);
114
198
  }
115
- const presets = result.config.presets ?? [];
116
- for (const preset of presets) {
117
- const presetResult = await bundleAndRequire(preset, cwd);
118
- result.config = merge({}, presetResult.config, result.config);
119
- }
120
- delete result.config.presets;
199
+ result.config.presets ||= ["css-panda/presets"];
200
+ const mergedConfig = await getResolvedConfig(result.config, cwd);
121
201
  return {
122
202
  ...result,
203
+ config: mergedConfig,
123
204
  path: filePath
124
205
  };
125
206
  }
126
207
  export {
127
- loadConfigFile
208
+ getResolvedConfig,
209
+ loadConfigFile,
210
+ mergeConfigs
128
211
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pandacss/config",
3
- "version": "0.0.0-dev-20221220033401",
3
+ "version": "0.0.0-dev-20221220144042",
4
4
  "description": "Find and load panda config",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -18,9 +18,9 @@
18
18
  "esbuild": "0.16.10",
19
19
  "escalade": "3.1.1",
20
20
  "node-eval": "2.0.0",
21
- "@pandacss/logger": "0.0.0-dev-20221220033401",
22
- "@pandacss/error": "0.0.0-dev-20221220033401",
23
- "@pandacss/types": "0.0.0-dev-20221220033401"
21
+ "@pandacss/logger": "0.0.0-dev-20221220144042",
22
+ "@pandacss/error": "0.0.0-dev-20221220144042",
23
+ "@pandacss/types": "0.0.0-dev-20221220144042"
24
24
  },
25
25
  "scripts": {
26
26
  "build": "pnpm tsup src/index.ts --format=esm,cjs --shims --dts",