@pandacss/config 1.11.2 → 2.0.0-beta.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/LICENSE.md +1 -1
- package/README.md +12 -0
- package/dist/chunk-LUSBBUHX.js +250 -0
- package/dist/chunk-VYX3JX5J.js +106 -0
- package/dist/index.d.ts +68 -43
- package/dist/index.js +476 -1020
- package/dist/merge-Bt4BM1CH.d.ts +47 -0
- package/dist/merge.d.ts +2 -0
- package/dist/merge.js +8 -0
- package/dist/serialize.d.ts +17 -0
- package/dist/serialize.js +6 -0
- package/package.json +25 -58
- package/dist/chunk-BJRWQ6BQ.mjs +0 -154
- package/dist/chunk-FQ7G6ORY.mjs +0 -265
- package/dist/chunk-RPIVZP2I.mjs +0 -22
- package/dist/diff-config.d.mts +0 -9
- package/dist/diff-config.d.ts +0 -9
- package/dist/diff-config.js +0 -188
- package/dist/diff-config.mjs +0 -6
- package/dist/index.d.mts +0 -59
- package/dist/index.mjs +0 -628
- package/dist/merge-config.d.mts +0 -14
- package/dist/merge-config.d.ts +0 -14
- package/dist/merge-config.js +0 -259
- package/dist/merge-config.mjs +0 -8
- package/dist/resolve-ts-path-pattern.d.mts +0 -8
- package/dist/resolve-ts-path-pattern.d.ts +0 -8
- package/dist/resolve-ts-path-pattern.js +0 -46
- package/dist/resolve-ts-path-pattern.mjs +0 -6
- package/dist/ts-config-paths-qwrwgu2Q.d.mts +0 -10
- package/dist/ts-config-paths-qwrwgu2Q.d.ts +0 -10
package/dist/index.js
CHANGED
|
@@ -1,1084 +1,540 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
import {
|
|
2
|
+
PandaError,
|
|
3
|
+
isPlainObject,
|
|
4
|
+
mergeConfigs,
|
|
5
|
+
mergeConfigsWithSources
|
|
6
|
+
} from "./chunk-LUSBBUHX.js";
|
|
7
|
+
import {
|
|
8
|
+
collectPluginHookHandlers,
|
|
9
|
+
createConfigSnapshot,
|
|
10
|
+
normalizeHook
|
|
11
|
+
} from "./chunk-VYX3JX5J.js";
|
|
12
|
+
|
|
13
|
+
// src/load.ts
|
|
14
|
+
import { applyConfigDefaults } from "@pandacss/compiler-shared";
|
|
15
|
+
|
|
16
|
+
// src/bundle.ts
|
|
17
|
+
import { parse } from "acorn";
|
|
18
|
+
import { simple } from "acorn-walk";
|
|
19
|
+
import MagicString from "magic-string";
|
|
20
|
+
import { realpathSync } from "fs";
|
|
21
|
+
import { builtinModules } from "module";
|
|
22
|
+
import { isAbsolute, normalize, relative } from "path";
|
|
23
|
+
import { pathToFileURL } from "url";
|
|
24
|
+
import { rolldown } from "rolldown";
|
|
25
|
+
var nodeBuiltins = /* @__PURE__ */ new Set([...builtinModules, ...builtinModules.map((mod) => `node:${mod}`)]);
|
|
26
|
+
async function bundleConfig(filepath, cwd) {
|
|
27
|
+
const build = await rolldown({
|
|
28
|
+
input: filepath,
|
|
29
|
+
cwd,
|
|
30
|
+
platform: "node",
|
|
31
|
+
external: (id) => nodeBuiltins.has(id),
|
|
32
|
+
treeshake: false,
|
|
33
|
+
plugins: [importMetaUrlPlugin()]
|
|
34
|
+
});
|
|
35
|
+
let chunks;
|
|
36
|
+
try {
|
|
37
|
+
chunks = await build.generate({ format: "esm", exports: "named", codeSplitting: false });
|
|
38
|
+
} finally {
|
|
39
|
+
await build.close?.();
|
|
40
|
+
}
|
|
41
|
+
const output = chunks.output.find((item) => item.type === "chunk");
|
|
42
|
+
if (!output || output.type !== "chunk") {
|
|
43
|
+
throw new PandaError("CONFIG_ERROR", "\u{1F4A5} Config bundle did not produce an executable module.");
|
|
44
|
+
}
|
|
45
|
+
const dependencies = collectDependencies(chunks.output, filepath, cwd);
|
|
46
|
+
const mod = await importBundledConfig(output.code);
|
|
47
|
+
const hasDefaultExport = Object.prototype.hasOwnProperty.call(mod ?? {}, "default");
|
|
48
|
+
const exported = hasDefaultExport ? mod.default : mod;
|
|
49
|
+
const config = hasDefaultExport && isPromiseLike(exported) ? await exported : exported;
|
|
50
|
+
return { config, dependencies };
|
|
51
|
+
}
|
|
52
|
+
async function importBundledConfig(code) {
|
|
53
|
+
const dataUrl = `data:text/javascript;base64,${Buffer.from(code).toString("base64")}`;
|
|
54
|
+
return import(
|
|
55
|
+
/* @vite-ignore */
|
|
56
|
+
dataUrl
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
function importMetaUrlPlugin() {
|
|
60
|
+
return {
|
|
61
|
+
name: "panda-import-meta-url",
|
|
62
|
+
transform(code, id) {
|
|
63
|
+
if (!isAbsolute(id) || !code.includes("import.meta.url")) return;
|
|
64
|
+
const replacement = JSON.stringify(pathToFileURL(id).href);
|
|
65
|
+
const patched = replaceImportMetaUrl(code, replacement);
|
|
66
|
+
if (patched === code) return;
|
|
67
|
+
return { code: patched, map: null };
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function replaceImportMetaUrl(code, replacement) {
|
|
72
|
+
const ast = parse(code, {
|
|
73
|
+
ecmaVersion: "latest",
|
|
74
|
+
sourceType: "module"
|
|
75
|
+
});
|
|
76
|
+
const output = new MagicString(code);
|
|
77
|
+
let changed = false;
|
|
78
|
+
simple(ast, {
|
|
79
|
+
MemberExpression(node) {
|
|
80
|
+
if (!isImportMetaUrl(node)) return;
|
|
81
|
+
output.overwrite(node.start, node.end, replacement);
|
|
82
|
+
changed = true;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
return changed ? output.toString() : code;
|
|
86
|
+
}
|
|
87
|
+
function isImportMetaUrl(node) {
|
|
88
|
+
if (node.computed || !isIdentifier(node.property, "url")) return false;
|
|
89
|
+
const object = node.object;
|
|
90
|
+
return isNode(object, "MetaProperty") && isIdentifier(object.meta, "import") && isIdentifier(object.property, "meta");
|
|
91
|
+
}
|
|
92
|
+
function isIdentifier(value, name) {
|
|
93
|
+
return isNode(value, "Identifier") && value.name === name;
|
|
94
|
+
}
|
|
95
|
+
function isNode(value, type) {
|
|
96
|
+
return !!value && typeof value === "object" && value.type === type;
|
|
97
|
+
}
|
|
98
|
+
function isPromiseLike(value) {
|
|
99
|
+
return value != null && typeof value === "object" && typeof value.then === "function";
|
|
100
|
+
}
|
|
101
|
+
function collectDependencies(output, entry, cwd) {
|
|
102
|
+
const dependencies = /* @__PURE__ */ new Set();
|
|
103
|
+
const base = canonical(cwd);
|
|
104
|
+
const add = (id) => dependencies.add(normalize(relative(base, canonical(id))));
|
|
105
|
+
for (const item of output) {
|
|
106
|
+
if (item.type !== "chunk") continue;
|
|
107
|
+
Object.keys(item.modules ?? {}).forEach((id) => {
|
|
108
|
+
if (isAbsolute(id)) add(id);
|
|
109
|
+
});
|
|
17
110
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
|
|
30
|
-
// src/index.ts
|
|
31
|
-
var index_exports = {};
|
|
32
|
-
__export(index_exports, {
|
|
33
|
-
bundleConfig: () => bundleConfig,
|
|
34
|
-
convertTsPathsToRegexes: () => convertTsPathsToRegexes,
|
|
35
|
-
diffConfigs: () => diffConfigs,
|
|
36
|
-
findConfig: () => findConfig,
|
|
37
|
-
getConfigDependencies: () => getConfigDependencies,
|
|
38
|
-
getResolvedConfig: () => getResolvedConfig,
|
|
39
|
-
loadConfig: () => loadConfig,
|
|
40
|
-
mergeConfigs: () => mergeConfigs,
|
|
41
|
-
mergeHooks: () => mergeHooks,
|
|
42
|
-
resolveConfig: () => resolveConfig
|
|
43
|
-
});
|
|
44
|
-
module.exports = __toCommonJS(index_exports);
|
|
45
|
-
|
|
46
|
-
// src/bundle-config.ts
|
|
47
|
-
var import_logger = require("@pandacss/logger");
|
|
48
|
-
var import_shared2 = require("@pandacss/shared");
|
|
49
|
-
var import_bundle_n_require = require("bundle-n-require");
|
|
50
|
-
|
|
51
|
-
// src/find-config.ts
|
|
52
|
-
var import_shared = require("@pandacss/shared");
|
|
53
|
-
var import_sync = __toESM(require("escalade/sync"));
|
|
54
|
-
var import_path = require("path");
|
|
111
|
+
if (isAbsolute(entry)) add(entry);
|
|
112
|
+
return Array.from(dependencies);
|
|
113
|
+
}
|
|
114
|
+
function canonical(filepath) {
|
|
115
|
+
try {
|
|
116
|
+
return realpathSync(filepath);
|
|
117
|
+
} catch {
|
|
118
|
+
return filepath;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
55
121
|
|
|
56
|
-
// src/
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
122
|
+
// src/find.ts
|
|
123
|
+
import { readdirSync } from "fs";
|
|
124
|
+
import { dirname, resolve } from "path";
|
|
125
|
+
var configFiles = /* @__PURE__ */ new Set([
|
|
126
|
+
"panda.config.ts",
|
|
127
|
+
"panda.config.js",
|
|
128
|
+
"panda.config.mts",
|
|
129
|
+
"panda.config.mjs",
|
|
130
|
+
"panda.config.cts",
|
|
131
|
+
"panda.config.cjs"
|
|
65
132
|
]);
|
|
66
|
-
var isPandaConfig = (file) =>
|
|
67
|
-
|
|
68
|
-
|
|
133
|
+
var isPandaConfig = (file) => configFiles.has(file);
|
|
134
|
+
function findUp(cwd) {
|
|
135
|
+
let dir = resolve(cwd);
|
|
136
|
+
while (true) {
|
|
137
|
+
let entries;
|
|
138
|
+
try {
|
|
139
|
+
entries = readdirSync(dir);
|
|
140
|
+
} catch {
|
|
141
|
+
entries = [];
|
|
142
|
+
}
|
|
143
|
+
const match = entries.find(isPandaConfig);
|
|
144
|
+
if (match) return resolve(dir, match);
|
|
145
|
+
const parent = dirname(dir);
|
|
146
|
+
if (parent === dir) return void 0;
|
|
147
|
+
dir = parent;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
69
150
|
function findConfig(options) {
|
|
70
|
-
const { cwd
|
|
151
|
+
const { cwd, file } = options;
|
|
71
152
|
if (file) {
|
|
72
|
-
return
|
|
153
|
+
return resolve(cwd, file);
|
|
73
154
|
}
|
|
74
|
-
const configPath = (
|
|
155
|
+
const configPath = findUp(cwd);
|
|
75
156
|
if (!configPath) {
|
|
76
|
-
throw new
|
|
157
|
+
throw new PandaError(
|
|
77
158
|
"CONFIG_NOT_FOUND",
|
|
78
|
-
|
|
159
|
+
"Cannot find config file `panda.config.{ts,js,mjs,mts}`. Did you forget to run `panda init`?"
|
|
79
160
|
);
|
|
80
161
|
}
|
|
81
162
|
return configPath;
|
|
82
163
|
}
|
|
83
164
|
|
|
84
|
-
// src/
|
|
85
|
-
|
|
86
|
-
|
|
165
|
+
// src/preset.ts
|
|
166
|
+
import { normalize as normalize2, relative as relative2 } from "path";
|
|
167
|
+
async function resolveAuthoredPresets(config, cwd, options = {}) {
|
|
168
|
+
const ctx = {
|
|
87
169
|
cwd,
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
config,
|
|
93
|
-
dependencies
|
|
170
|
+
configs: [],
|
|
171
|
+
dependencies: /* @__PURE__ */ new Set(),
|
|
172
|
+
presetResolvedHooks: [],
|
|
173
|
+
...options.trackSources ? { sourcedConfigs: [] } : {}
|
|
94
174
|
};
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
175
|
+
const rootSource = { kind: "config" };
|
|
176
|
+
if (options.configFile) rootSource.file = normalize2(relative2(cwd, options.configFile));
|
|
177
|
+
await collectConfigs(config, rootSource, ctx, /* @__PURE__ */ new WeakSet());
|
|
178
|
+
if (ctx.sourcedConfigs) {
|
|
179
|
+
const merged = mergeConfigsWithSources(ctx.sourcedConfigs);
|
|
180
|
+
if (options.preserveRuntimeHooks) attachRuntimeHooks(merged.config, ctx.configs);
|
|
181
|
+
return {
|
|
182
|
+
config: merged.config,
|
|
183
|
+
dependencies: Array.from(ctx.dependencies),
|
|
184
|
+
metadata: { sources: merged.sources }
|
|
185
|
+
};
|
|
103
186
|
}
|
|
104
|
-
result.config.outdir ??= "styled-system";
|
|
105
|
-
result.config.validation ??= "warn";
|
|
106
187
|
return {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
path: filePath
|
|
188
|
+
config: options.preserveRuntimeHooks ? attachRuntimeHooks(mergeConfigs(ctx.configs), ctx.configs) : mergeConfigs(ctx.configs),
|
|
189
|
+
dependencies: Array.from(ctx.dependencies)
|
|
110
190
|
};
|
|
111
191
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (!patterns?.length) return () => void 0;
|
|
120
|
-
const includePatterns = [];
|
|
121
|
-
const excludePatterns = [];
|
|
122
|
-
const deduped = new Set(patterns);
|
|
123
|
-
deduped.forEach((pattern) => {
|
|
124
|
-
const regexString = pattern.replace(/\*/g, ".*");
|
|
125
|
-
if (pattern.startsWith("!")) {
|
|
126
|
-
excludePatterns.push(regexString.slice(1));
|
|
127
|
-
} else {
|
|
128
|
-
includePatterns.push(regexString);
|
|
192
|
+
function attachRuntimeHooks(config, configs) {
|
|
193
|
+
const plugins = configs.flatMap((item) => {
|
|
194
|
+
if ("hooks" in item && item.hooks != null) {
|
|
195
|
+
throw new PandaError(
|
|
196
|
+
"CONFIG_ERROR",
|
|
197
|
+
'\u{1F4A5} `config.hooks` was removed in v2. Use `plugins: [{ name: "local", hooks: { ... } }]` instead.'
|
|
198
|
+
);
|
|
129
199
|
}
|
|
200
|
+
return [...item.plugins ?? [], ...item.extend?.plugins ?? []];
|
|
130
201
|
});
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// src/config-deps.ts
|
|
140
|
-
var all = [
|
|
141
|
-
"clean",
|
|
142
|
-
"cwd",
|
|
143
|
-
"eject",
|
|
144
|
-
"outdir",
|
|
145
|
-
"forceConsistentTypeExtension",
|
|
146
|
-
"outExtension",
|
|
147
|
-
"emitTokensOnly",
|
|
148
|
-
"presets",
|
|
149
|
-
"plugins",
|
|
150
|
-
"hooks"
|
|
151
|
-
];
|
|
152
|
-
var format = [
|
|
153
|
-
"syntax",
|
|
154
|
-
"hash",
|
|
155
|
-
"prefix",
|
|
156
|
-
"separator",
|
|
157
|
-
"strictTokens",
|
|
158
|
-
"strictPropertyValues",
|
|
159
|
-
"shorthands"
|
|
160
|
-
];
|
|
161
|
-
var tokens = [
|
|
162
|
-
"utilities",
|
|
163
|
-
"conditions",
|
|
164
|
-
"theme.tokens",
|
|
165
|
-
"theme.semanticTokens",
|
|
166
|
-
"theme.breakpoints",
|
|
167
|
-
"theme.containerNames",
|
|
168
|
-
"theme.containerSizes"
|
|
169
|
-
];
|
|
170
|
-
var jsx = ["jsxFramework", "jsxFactory", "jsxStyleProps", "syntax"];
|
|
171
|
-
var common = tokens.concat(jsx, format);
|
|
172
|
-
var artifactConfigDeps = {
|
|
173
|
-
helpers: ["syntax", "jsxFramework"],
|
|
174
|
-
keyframes: ["theme.keyframes", "layers"],
|
|
175
|
-
"design-tokens": ["layers", "!utilities.*.className"].concat(tokens),
|
|
176
|
-
types: ["!utilities.*.className"].concat(common),
|
|
177
|
-
"css-fn": common,
|
|
178
|
-
cva: ["syntax"],
|
|
179
|
-
sva: ["syntax"],
|
|
180
|
-
cx: [],
|
|
181
|
-
"create-recipe": ["separator", "prefix", "hash"],
|
|
182
|
-
"recipes-index": ["theme.recipes", "theme.slotRecipes"],
|
|
183
|
-
recipes: ["theme.recipes", "theme.slotRecipes"],
|
|
184
|
-
"patterns-index": ["syntax", "patterns"],
|
|
185
|
-
patterns: ["syntax", "patterns"],
|
|
186
|
-
"jsx-is-valid-prop": common,
|
|
187
|
-
"jsx-factory": jsx,
|
|
188
|
-
"jsx-helpers": jsx,
|
|
189
|
-
"jsx-patterns": jsx.concat("patterns"),
|
|
190
|
-
"jsx-patterns-index": jsx.concat("patterns"),
|
|
191
|
-
"jsx-create-style-context": jsx,
|
|
192
|
-
"css-index": ["syntax"],
|
|
193
|
-
"package.json": ["forceConsistentTypeExtension", "outExtension"],
|
|
194
|
-
"types-styles": ["shorthands"],
|
|
195
|
-
"types-conditions": ["conditions"],
|
|
196
|
-
"types-jsx": jsx,
|
|
197
|
-
"types-entry": [],
|
|
198
|
-
"types-gen": [],
|
|
199
|
-
"types-gen-system": [],
|
|
200
|
-
themes: ["themes"].concat(tokens),
|
|
201
|
-
// staticCss depends on tokens (for wildcards) and recipes (for recipe rules)
|
|
202
|
-
"static-css": ["staticCss", "patterns", "theme.recipes", "theme.slotRecipes"].concat(tokens),
|
|
203
|
-
// Split CSS artifacts (generated via cssgen --splitting)
|
|
204
|
-
styles: [],
|
|
205
|
-
"styles.css": []
|
|
206
|
-
};
|
|
207
|
-
var artifactMatchers = Object.entries(artifactConfigDeps).map(([key, paths]) => {
|
|
208
|
-
if (!paths.length) return () => void 0;
|
|
209
|
-
return createMatcher(key, paths.concat(all));
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
// src/diff-config.ts
|
|
213
|
-
var runIfFn = (fn) => typeof fn === "function" ? fn() : fn;
|
|
214
|
-
var hasRecipeStateTransition = (prevConfig, nextConfig) => {
|
|
215
|
-
const prevRecipes = prevConfig.theme?.recipes ?? {};
|
|
216
|
-
const prevSlotRecipes = prevConfig.theme?.slotRecipes ?? {};
|
|
217
|
-
const prevHasRecipes = Object.keys(prevRecipes).length > 0 || Object.keys(prevSlotRecipes).length > 0;
|
|
218
|
-
const nextRecipes = nextConfig.theme?.recipes ?? {};
|
|
219
|
-
const nextSlotRecipes = nextConfig.theme?.slotRecipes ?? {};
|
|
220
|
-
const nextHasRecipes = Object.keys(nextRecipes).length > 0 || Object.keys(nextSlotRecipes).length > 0;
|
|
221
|
-
return prevHasRecipes !== nextHasRecipes;
|
|
222
|
-
};
|
|
223
|
-
function diffConfigs(config, prevConfig) {
|
|
224
|
-
const affected = {
|
|
225
|
-
artifacts: /* @__PURE__ */ new Set(),
|
|
226
|
-
hasConfigChanged: false,
|
|
227
|
-
diffs: []
|
|
228
|
-
};
|
|
229
|
-
if (!prevConfig) {
|
|
230
|
-
affected.hasConfigChanged = true;
|
|
231
|
-
return affected;
|
|
232
|
-
}
|
|
233
|
-
const configDiff = (0, import_microdiff.default)(prevConfig, runIfFn(config));
|
|
234
|
-
if (!configDiff.length) {
|
|
235
|
-
return affected;
|
|
236
|
-
}
|
|
237
|
-
affected.hasConfigChanged = true;
|
|
238
|
-
affected.diffs = configDiff;
|
|
239
|
-
configDiff.forEach((change) => {
|
|
240
|
-
const changePath = change.path.join(".");
|
|
241
|
-
artifactMatchers.forEach((matcher) => {
|
|
242
|
-
const id = matcher(changePath);
|
|
243
|
-
if (!id) return;
|
|
244
|
-
if (id === "recipes") {
|
|
245
|
-
const name = (0, import_shared3.dashCase)(change.path.slice(1, 3).join("."));
|
|
246
|
-
affected.artifacts.add(name);
|
|
247
|
-
}
|
|
248
|
-
if (id === "patterns") {
|
|
249
|
-
const name = (0, import_shared3.dashCase)(change.path.slice(0, 2).join("."));
|
|
250
|
-
affected.artifacts.add(name);
|
|
251
|
-
}
|
|
252
|
-
affected.artifacts.add(id);
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
if (affected.artifacts.has("recipes") || affected.artifacts.has("recipes-index")) {
|
|
256
|
-
const nextConfig = runIfFn(config);
|
|
257
|
-
if (hasRecipeStateTransition(prevConfig, nextConfig)) {
|
|
258
|
-
affected.artifacts.add("create-recipe");
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
return affected;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// src/get-mod-deps.ts
|
|
265
|
-
var import_fs = __toESM(require("fs"));
|
|
266
|
-
var import_path4 = __toESM(require("path"));
|
|
267
|
-
var import_typescript = __toESM(require("typescript"));
|
|
268
|
-
|
|
269
|
-
// src/resolve-ts-path-pattern.ts
|
|
270
|
-
var import_path2 = require("path");
|
|
271
|
-
var resolveTsPathPattern = (pathMappings, moduleSpecifier) => {
|
|
272
|
-
for (const mapping of pathMappings) {
|
|
273
|
-
const match = moduleSpecifier.match(mapping.pattern);
|
|
274
|
-
if (!match) {
|
|
275
|
-
continue;
|
|
276
|
-
}
|
|
277
|
-
for (const pathTemplate of mapping.paths) {
|
|
278
|
-
let starCount = 0;
|
|
279
|
-
const mappedId = pathTemplate.replace(/\*/g, () => {
|
|
280
|
-
const matchIndex = Math.min(++starCount, match.length - 1);
|
|
281
|
-
return match[matchIndex];
|
|
282
|
-
});
|
|
283
|
-
return mappedId.split(import_path2.sep).join(import_path2.posix.sep);
|
|
202
|
+
for (const plugin of plugins) {
|
|
203
|
+
if (!isPlainObject(plugin) || typeof plugin.name !== "string" || plugin.name.length === 0) {
|
|
204
|
+
throw new PandaError(
|
|
205
|
+
"CONFIG_ERROR",
|
|
206
|
+
"\u{1F4A5} Every plugin in `config.plugins` must be an object with a non-empty `name`."
|
|
207
|
+
);
|
|
284
208
|
}
|
|
285
209
|
}
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
// src/ts-config-paths.ts
|
|
289
|
-
var import_path3 = require("path");
|
|
290
|
-
function convertTsPathsToRegexes(paths, baseUrl) {
|
|
291
|
-
const sortedPatterns = Object.keys(paths).sort((a, b) => getPrefixLength(b) - getPrefixLength(a));
|
|
292
|
-
const resolved = [];
|
|
293
|
-
for (let pattern of sortedPatterns) {
|
|
294
|
-
const relativePaths = paths[pattern];
|
|
295
|
-
pattern = escapeStringRegexp(pattern).replace(/\*/g, "(.+)");
|
|
296
|
-
resolved.push({
|
|
297
|
-
pattern: new RegExp("^" + pattern + "$"),
|
|
298
|
-
paths: relativePaths.map((relativePath) => (0, import_path3.resolve)(baseUrl, relativePath))
|
|
299
|
-
});
|
|
210
|
+
if (plugins.length > 0) {
|
|
211
|
+
config.plugins = plugins;
|
|
300
212
|
}
|
|
301
|
-
return
|
|
213
|
+
return config;
|
|
302
214
|
}
|
|
303
|
-
function
|
|
304
|
-
|
|
305
|
-
|
|
215
|
+
async function collectConfigs(config, source, ctx, active) {
|
|
216
|
+
if (active.has(config)) {
|
|
217
|
+
throw new PandaError("CONFIG_ERROR", "\u{1F4A5} Circular preset dependency detected.");
|
|
218
|
+
}
|
|
219
|
+
active.add(config);
|
|
220
|
+
const hookCount = ctx.presetResolvedHooks.length;
|
|
221
|
+
ctx.presetResolvedHooks.push(...collectPresetResolvedHooks(config));
|
|
222
|
+
for (const preset of config.presets ?? []) {
|
|
223
|
+
const resolved = await resolvePreset(preset, ctx.cwd);
|
|
224
|
+
resolved.dependencies.forEach((dependency) => ctx.dependencies.add(dependency));
|
|
225
|
+
const config2 = await runPresetResolvedHooks(resolved.config, resolved.source, ctx.presetResolvedHooks);
|
|
226
|
+
await collectConfigs(config2, resolved.source, ctx, active);
|
|
227
|
+
}
|
|
228
|
+
ctx.configs.push(config);
|
|
229
|
+
ctx.sourcedConfigs?.push({ config, source });
|
|
230
|
+
ctx.presetResolvedHooks.length = hookCount;
|
|
231
|
+
active.delete(config);
|
|
306
232
|
}
|
|
307
|
-
function
|
|
308
|
-
return
|
|
233
|
+
function collectPresetResolvedHooks(config) {
|
|
234
|
+
return collectPluginHookHandlers(config, "preset:resolved");
|
|
309
235
|
}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
if (import_fs.default.existsSync(full) && import_fs.default.statSync(full).isFile()) {
|
|
319
|
-
return full;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
for (const ext of extensions) {
|
|
323
|
-
const full = `${file}/index${ext}`;
|
|
324
|
-
if (import_fs.default.existsSync(full)) {
|
|
325
|
-
return full;
|
|
236
|
+
async function runPresetResolvedHooks(preset, source, hooks) {
|
|
237
|
+
let current = preset;
|
|
238
|
+
const name = source.name ?? source.specifier ?? presetName(current) ?? "unknown-preset";
|
|
239
|
+
for (const entry of hooks) {
|
|
240
|
+
const hook = normalizeHook(entry.value, "preset:resolved");
|
|
241
|
+
const next = await hook.handler({ preset: current, name });
|
|
242
|
+
if (next !== void 0) {
|
|
243
|
+
current = ensureConfigObject(next, name);
|
|
326
244
|
}
|
|
327
245
|
}
|
|
328
|
-
return
|
|
246
|
+
return current;
|
|
329
247
|
}
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
var requireRegex = /require\(['"`](.+)['"`]\)/gi;
|
|
333
|
-
var exportRegex = /export[\s\S]*from[\s\S]*?['"](.{3,}?)['"]/gi;
|
|
334
|
-
function getDeps(opts, fromAlias) {
|
|
335
|
-
const { filename, seen } = opts;
|
|
336
|
-
const { moduleResolution: _, ...compilerOptions } = opts.compilerOptions ?? {};
|
|
337
|
-
const absoluteFile = resolveWithExtension(
|
|
338
|
-
import_path4.default.resolve(opts.cwd, filename),
|
|
339
|
-
jsExtensions.includes(opts.ext) ? jsResolutionOrder : tsResolutionOrder
|
|
340
|
-
);
|
|
341
|
-
if (absoluteFile === null) return;
|
|
342
|
-
if (fromAlias) {
|
|
343
|
-
opts.foundModuleAliases.set(fromAlias, absoluteFile);
|
|
344
|
-
}
|
|
345
|
-
if (seen.size > 1 && seen.has(absoluteFile)) return;
|
|
346
|
-
seen.add(absoluteFile);
|
|
347
|
-
const contents = import_fs.default.readFileSync(absoluteFile, "utf-8");
|
|
348
|
-
const fileDeps = [
|
|
349
|
-
...contents.matchAll(importRegex),
|
|
350
|
-
...contents.matchAll(importFromRegex),
|
|
351
|
-
...contents.matchAll(requireRegex),
|
|
352
|
-
...contents.matchAll(exportRegex)
|
|
353
|
-
];
|
|
354
|
-
if (!fileDeps.length) return;
|
|
355
|
-
const nextOpts = {
|
|
356
|
-
// Resolve new base for new imports/requires
|
|
357
|
-
cwd: import_path4.default.dirname(absoluteFile),
|
|
358
|
-
ext: import_path4.default.extname(absoluteFile),
|
|
359
|
-
seen,
|
|
360
|
-
baseUrl: opts.baseUrl,
|
|
361
|
-
pathMappings: opts.pathMappings,
|
|
362
|
-
foundModuleAliases: opts.foundModuleAliases
|
|
363
|
-
};
|
|
364
|
-
fileDeps.forEach((match) => {
|
|
365
|
-
const mod = match[1];
|
|
366
|
-
if (mod[0] === ".") {
|
|
367
|
-
getDeps(Object.assign({}, nextOpts, { filename: mod }));
|
|
368
|
-
return;
|
|
369
|
-
}
|
|
248
|
+
async function resolvePreset(preset, cwd) {
|
|
249
|
+
if (typeof preset === "string") {
|
|
370
250
|
try {
|
|
371
|
-
const
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
if (
|
|
379
|
-
|
|
380
|
-
|
|
251
|
+
const result = await bundleConfig(preset, cwd);
|
|
252
|
+
return {
|
|
253
|
+
config: ensureConfigObject(result.config, preset),
|
|
254
|
+
dependencies: result.dependencies,
|
|
255
|
+
source: presetSource(result.config, preset, result.dependencies[0])
|
|
256
|
+
};
|
|
257
|
+
} catch (error) {
|
|
258
|
+
if (error instanceof PandaError) throw error;
|
|
259
|
+
throw new PandaError(
|
|
260
|
+
"CONFIG_ERROR",
|
|
261
|
+
`\u{1F4A5} Failed to resolve preset ${JSON.stringify(preset)}: ${errorMessage(error)}`
|
|
262
|
+
);
|
|
381
263
|
}
|
|
382
|
-
}
|
|
264
|
+
}
|
|
265
|
+
try {
|
|
266
|
+
const config = await preset;
|
|
267
|
+
return {
|
|
268
|
+
config: ensureConfigObject(config, config?.name ?? "unknown-preset"),
|
|
269
|
+
dependencies: [],
|
|
270
|
+
source: presetSource(config)
|
|
271
|
+
};
|
|
272
|
+
} catch (error) {
|
|
273
|
+
if (error instanceof PandaError) throw error;
|
|
274
|
+
throw new PandaError("CONFIG_ERROR", `\u{1F4A5} Failed to resolve preset "unknown-preset": ${errorMessage(error)}`);
|
|
275
|
+
}
|
|
383
276
|
}
|
|
384
|
-
function
|
|
385
|
-
if (
|
|
386
|
-
|
|
387
|
-
const deps = /* @__PURE__ */ new Set();
|
|
388
|
-
deps.add(filePath);
|
|
389
|
-
getDeps({
|
|
390
|
-
filename: filePath,
|
|
391
|
-
ext: import_path4.default.extname(filePath),
|
|
392
|
-
cwd: import_path4.default.dirname(filePath),
|
|
393
|
-
seen: deps,
|
|
394
|
-
baseUrl: tsOptions.baseUrl,
|
|
395
|
-
pathMappings: tsOptions.pathMappings ?? [],
|
|
396
|
-
foundModuleAliases,
|
|
397
|
-
compilerOptions
|
|
398
|
-
});
|
|
399
|
-
return { deps, aliases: foundModuleAliases };
|
|
277
|
+
function ensureConfigObject(config, name) {
|
|
278
|
+
if (isPlainObject(config)) return config;
|
|
279
|
+
throw new PandaError("CONFIG_ERROR", `\u{1F4A5} Preset ${JSON.stringify(name)} must resolve to an object.`);
|
|
400
280
|
}
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
var import_shared6 = require("@pandacss/shared");
|
|
404
|
-
|
|
405
|
-
// src/merge-config.ts
|
|
406
|
-
var import_shared5 = require("@pandacss/shared");
|
|
407
|
-
|
|
408
|
-
// src/merge-hooks.ts
|
|
409
|
-
var import_logger2 = require("@pandacss/logger");
|
|
410
|
-
var mergeHooks = (plugins) => {
|
|
411
|
-
const hooksFns = {};
|
|
412
|
-
plugins.forEach(({ name, hooks }) => {
|
|
413
|
-
Object.entries(hooks ?? {}).forEach(([key, value]) => {
|
|
414
|
-
if (!hooksFns[key]) {
|
|
415
|
-
hooksFns[key] = [];
|
|
416
|
-
}
|
|
417
|
-
hooksFns[key].push([name, value]);
|
|
418
|
-
});
|
|
419
|
-
});
|
|
420
|
-
const mergedHooks = Object.fromEntries(
|
|
421
|
-
Object.entries(hooksFns).map(([key, entries]) => {
|
|
422
|
-
const fns = entries.map(([name, fn]) => tryCatch(name, fn));
|
|
423
|
-
const reducer = key in reducers ? reducers[key] : void 0;
|
|
424
|
-
if (reducer) {
|
|
425
|
-
return [key, reducer(fns)];
|
|
426
|
-
}
|
|
427
|
-
return [key, syncHooks.includes(key) ? callAll(...fns) : callAllAsync(...fns)];
|
|
428
|
-
})
|
|
429
|
-
);
|
|
430
|
-
return mergedHooks;
|
|
431
|
-
};
|
|
432
|
-
var createReducer = (reducer) => reducer;
|
|
433
|
-
var reducers = {
|
|
434
|
-
"config:resolved": createReducer((fns) => async (_args) => {
|
|
435
|
-
const args = Object.assign({}, _args);
|
|
436
|
-
const original = _args.config;
|
|
437
|
-
let config = args.config;
|
|
438
|
-
for (const hookFn of fns) {
|
|
439
|
-
const result = await hookFn(Object.assign(args, { config, original }));
|
|
440
|
-
if (result !== void 0) {
|
|
441
|
-
config = result;
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
return config;
|
|
445
|
-
}),
|
|
446
|
-
"parser:before": createReducer((fns) => (_args) => {
|
|
447
|
-
const args = Object.assign({}, _args);
|
|
448
|
-
const original = _args.content;
|
|
449
|
-
let content = args.content;
|
|
450
|
-
for (const hookFn of fns) {
|
|
451
|
-
const result = hookFn(Object.assign(args, { content, original }));
|
|
452
|
-
if (result !== void 0) {
|
|
453
|
-
content = result;
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
return content;
|
|
457
|
-
}),
|
|
458
|
-
"parser:preprocess": createReducer((fns) => (_args) => {
|
|
459
|
-
const args = Object.assign({}, _args);
|
|
460
|
-
const original = _args.data;
|
|
461
|
-
let data = args.data;
|
|
462
|
-
for (const hookFn of fns) {
|
|
463
|
-
const result = hookFn(Object.assign(args, { data, original }));
|
|
464
|
-
if (result !== void 0) {
|
|
465
|
-
data = result;
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
return data;
|
|
469
|
-
}),
|
|
470
|
-
"cssgen:done": createReducer((fns) => (_args) => {
|
|
471
|
-
const args = Object.assign({}, _args);
|
|
472
|
-
const original = _args.content;
|
|
473
|
-
let content = args.content;
|
|
474
|
-
for (const hookFn of fns) {
|
|
475
|
-
const result = hookFn(Object.assign(args, { content, original }));
|
|
476
|
-
if (result !== void 0) {
|
|
477
|
-
content = result;
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
return content;
|
|
481
|
-
}),
|
|
482
|
-
"codegen:prepare": createReducer((fns) => async (_args) => {
|
|
483
|
-
const args = Object.assign({}, _args);
|
|
484
|
-
const original = _args.artifacts;
|
|
485
|
-
let artifacts = args.artifacts;
|
|
486
|
-
for (const hookFn of fns) {
|
|
487
|
-
const result = await hookFn(Object.assign(args, { artifacts, original }));
|
|
488
|
-
if (result) {
|
|
489
|
-
artifacts = result;
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
return artifacts;
|
|
493
|
-
}),
|
|
494
|
-
"preset:resolved": createReducer((fns) => async (_args) => {
|
|
495
|
-
const args = Object.assign({}, _args);
|
|
496
|
-
const original = _args.preset;
|
|
497
|
-
let preset = args.preset;
|
|
498
|
-
for (const hookFn of fns) {
|
|
499
|
-
const result = await hookFn(Object.assign(args, { preset, original }));
|
|
500
|
-
if (result !== void 0) {
|
|
501
|
-
preset = result;
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
return preset;
|
|
505
|
-
}),
|
|
506
|
-
"css:optimize": createReducer((fns) => (_args) => {
|
|
507
|
-
const args = Object.assign({}, _args);
|
|
508
|
-
const original = _args.css;
|
|
509
|
-
let css = args.css;
|
|
510
|
-
for (const hookFn of fns) {
|
|
511
|
-
const result = hookFn(Object.assign(args, { css, original }));
|
|
512
|
-
if (result !== void 0) {
|
|
513
|
-
css = result;
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
return css;
|
|
517
|
-
})
|
|
518
|
-
};
|
|
519
|
-
var syncHooks = [
|
|
520
|
-
"context:created",
|
|
521
|
-
"parser:before",
|
|
522
|
-
"parser:preprocess",
|
|
523
|
-
"parser:after",
|
|
524
|
-
"cssgen:done",
|
|
525
|
-
"css:optimize"
|
|
526
|
-
];
|
|
527
|
-
var callAllAsync = (...fns) => async (...a) => {
|
|
528
|
-
for (const fn of fns) {
|
|
529
|
-
await fn?.(...a);
|
|
530
|
-
}
|
|
531
|
-
};
|
|
532
|
-
var callAll = (...fns) => (...a) => {
|
|
533
|
-
fns.forEach((fn) => fn?.(...a));
|
|
534
|
-
};
|
|
535
|
-
var tryCatch = (name, fn) => {
|
|
536
|
-
return (...args) => {
|
|
537
|
-
try {
|
|
538
|
-
return fn(...args);
|
|
539
|
-
} catch (e) {
|
|
540
|
-
import_logger2.logger.caughtError("hooks", `Error in plugin "${name}"`, e);
|
|
541
|
-
}
|
|
542
|
-
};
|
|
543
|
-
};
|
|
544
|
-
|
|
545
|
-
// src/validation/utils.ts
|
|
546
|
-
var import_shared4 = require("@pandacss/shared");
|
|
547
|
-
var REFERENCE_REGEX = /({([^}]*)})/g;
|
|
548
|
-
var curlyBracketRegex = /[{}]/g;
|
|
549
|
-
var isValidToken = (token) => (0, import_shared4.isObject)(token) && Object.hasOwnProperty.call(token, "value");
|
|
550
|
-
var isTokenReference = (value) => typeof value === "string" && REFERENCE_REGEX.test(value);
|
|
551
|
-
var formatPath = (path2) => path2;
|
|
552
|
-
var SEP = ".";
|
|
553
|
-
function getReferences(value) {
|
|
554
|
-
if (typeof value !== "string") return [];
|
|
555
|
-
const matches = value.match(REFERENCE_REGEX);
|
|
556
|
-
if (!matches) return [];
|
|
557
|
-
return matches.map((match) => match.replace(curlyBracketRegex, "")).map((value2) => {
|
|
558
|
-
return value2.trim().split("/")[0];
|
|
559
|
-
});
|
|
281
|
+
function presetName(config) {
|
|
282
|
+
return isPlainObject(config) && typeof config.name === "string" ? config.name : void 0;
|
|
560
283
|
}
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
if (
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
if (Array.isArray(value)) {
|
|
569
|
-
return value.map((v) => serializeTokenValue(v)).join(" ");
|
|
570
|
-
}
|
|
571
|
-
return value.toString();
|
|
572
|
-
};
|
|
573
|
-
|
|
574
|
-
// src/merge-config.ts
|
|
575
|
-
function getExtends(items) {
|
|
576
|
-
return items.reduce((merged, { extend }) => {
|
|
577
|
-
if (!extend) return merged;
|
|
578
|
-
return (0, import_shared5.mergeWith)(merged, extend, (originalValue, newValue) => {
|
|
579
|
-
if (newValue === void 0) {
|
|
580
|
-
return originalValue ?? [];
|
|
581
|
-
}
|
|
582
|
-
if (originalValue === void 0) {
|
|
583
|
-
return [newValue];
|
|
584
|
-
}
|
|
585
|
-
if (Array.isArray(originalValue)) {
|
|
586
|
-
return [newValue, ...originalValue];
|
|
587
|
-
}
|
|
588
|
-
return [newValue, originalValue];
|
|
589
|
-
});
|
|
590
|
-
}, {});
|
|
284
|
+
function presetSource(config, specifier, file) {
|
|
285
|
+
const source = { kind: "preset" };
|
|
286
|
+
const name = presetName(config);
|
|
287
|
+
if (name) source.name = name;
|
|
288
|
+
if (specifier) source.specifier = specifier;
|
|
289
|
+
if (file) source.file = file;
|
|
290
|
+
return source;
|
|
591
291
|
}
|
|
592
|
-
function
|
|
593
|
-
return
|
|
594
|
-
...records.reduce((acc, record) => (0, import_shared5.assign)(acc, record), {}),
|
|
595
|
-
extend: getExtends(records)
|
|
596
|
-
};
|
|
292
|
+
function errorMessage(error) {
|
|
293
|
+
return error instanceof Error ? error.message : String(error);
|
|
597
294
|
}
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
295
|
+
|
|
296
|
+
// src/load.ts
|
|
297
|
+
async function loadConfig(options) {
|
|
298
|
+
const { cwd, file } = options;
|
|
299
|
+
const path = findConfig({ cwd, file });
|
|
300
|
+
const { config, dependencies } = await bundleConfig(path, cwd);
|
|
301
|
+
if (!isPlainObject(config)) {
|
|
302
|
+
throw new PandaError("CONFIG_ERROR", "\u{1F4A5} Config must export or return an object.");
|
|
303
|
+
}
|
|
304
|
+
const authored = await resolveAuthoredPresets(config, cwd, {
|
|
305
|
+
configFile: path,
|
|
306
|
+
trackSources: options.trackSources,
|
|
307
|
+
preserveRuntimeHooks: true
|
|
602
308
|
});
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
var compact = (obj) => {
|
|
606
|
-
return Object.keys(obj).reduce((acc, key) => {
|
|
607
|
-
if (obj[key] !== void 0 && !isEmptyObject(obj[key])) {
|
|
608
|
-
acc[key] = obj[key];
|
|
609
|
-
}
|
|
610
|
-
return acc;
|
|
611
|
-
}, {});
|
|
612
|
-
};
|
|
613
|
-
var tokenKeys = ["description", "extensions", "type", "value", "deprecated"];
|
|
614
|
-
function mergeConfigs(configs) {
|
|
615
|
-
const userConfig = configs.at(-1);
|
|
616
|
-
const pluginHooks = userConfig.plugins ?? [];
|
|
617
|
-
if (userConfig.hooks) {
|
|
618
|
-
pluginHooks.push({ name: import_shared5.PANDA_CONFIG_NAME, hooks: userConfig.hooks });
|
|
619
|
-
}
|
|
620
|
-
const reversed = Array.from(configs).reverse();
|
|
621
|
-
const mergedResult = (0, import_shared5.assign)(
|
|
622
|
-
{
|
|
623
|
-
conditions: mergeExtensions(reversed.map((config) => config.conditions ?? {})),
|
|
624
|
-
theme: mergeExtensions(reversed.map((config) => config.theme ?? {})),
|
|
625
|
-
patterns: mergeExtensions(reversed.map((config) => config.patterns ?? {})),
|
|
626
|
-
utilities: mergeExtensions(reversed.map((config) => config.utilities ?? {})),
|
|
627
|
-
globalCss: mergeExtensions(reversed.map((config) => config.globalCss ?? {})),
|
|
628
|
-
globalVars: mergeExtensions(reversed.map((config) => config.globalVars ?? {})),
|
|
629
|
-
globalFontface: mergeExtensions(reversed.map((config) => config.globalFontface ?? {})),
|
|
630
|
-
globalPositionTry: mergeExtensions(reversed.map((config) => config.globalPositionTry ?? {})),
|
|
631
|
-
staticCss: mergeExtensions(reversed.map((config) => config.staticCss ?? {})),
|
|
632
|
-
themes: mergeExtensions(reversed.map((config) => config.themes ?? {})),
|
|
633
|
-
hooks: mergeHooks(pluginHooks)
|
|
634
|
-
},
|
|
635
|
-
...reversed
|
|
309
|
+
const authoredDependencies = Array.from(
|
|
310
|
+
/* @__PURE__ */ new Set([...dependencies, ...authored.dependencies, ...authored.config.dependencies ?? []])
|
|
636
311
|
);
|
|
637
|
-
const
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
});
|
|
656
|
-
}
|
|
657
|
-
return withoutEmpty;
|
|
312
|
+
const userConfig = await runConfigResolvedHooks(authored.config, path, authoredDependencies);
|
|
313
|
+
const resolved = applyConfigDefaults(userConfig, cwd);
|
|
314
|
+
const dependencyList = Array.from(
|
|
315
|
+
/* @__PURE__ */ new Set([...dependencies, ...authored.dependencies, ...resolved.dependencies ?? []])
|
|
316
|
+
);
|
|
317
|
+
const snapshot = createConfigSnapshot(resolved);
|
|
318
|
+
return {
|
|
319
|
+
path,
|
|
320
|
+
config: snapshot.config,
|
|
321
|
+
callbacks: snapshot.callbacks,
|
|
322
|
+
...snapshot.hooks ? { hooks: snapshot.hooks } : {},
|
|
323
|
+
hostHooks: {
|
|
324
|
+
"codegen:prepare": collectPluginHookHandlers(resolved, "codegen:prepare"),
|
|
325
|
+
"codegen:done": collectPluginHookHandlers(resolved, "codegen:done")
|
|
326
|
+
},
|
|
327
|
+
dependencies: dependencyList,
|
|
328
|
+
...authored.metadata ? { metadata: authored.metadata } : {}
|
|
329
|
+
};
|
|
658
330
|
}
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
const stack = [config];
|
|
668
|
-
const configs = [];
|
|
669
|
-
while (stack.length > 0) {
|
|
670
|
-
const current = stack.pop();
|
|
671
|
-
const subPresets = current.presets ?? [];
|
|
672
|
-
for (const subPreset of subPresets) {
|
|
673
|
-
let presetConfig;
|
|
674
|
-
let presetName;
|
|
675
|
-
if (typeof subPreset === "string") {
|
|
676
|
-
const presetModule = await bundle(subPreset, cwd);
|
|
677
|
-
presetConfig = presetModule.config;
|
|
678
|
-
presetName = subPreset;
|
|
679
|
-
} else {
|
|
680
|
-
presetConfig = await subPreset;
|
|
681
|
-
presetName = presetConfig.name || "unknown-preset";
|
|
331
|
+
async function runConfigResolvedHooks(config, path, dependencies) {
|
|
332
|
+
let current = config;
|
|
333
|
+
for (const entry of collectPluginHookHandlers(current, "config:resolved")) {
|
|
334
|
+
const hook = normalizeHook(entry.value, "config:resolved");
|
|
335
|
+
const next = await hook.handler({ config: current, path, dependencies, utils: configResolvedUtils });
|
|
336
|
+
if (next !== void 0) {
|
|
337
|
+
if (!isPlainObject(next)) {
|
|
338
|
+
throw new PandaError("CONFIG_ERROR", "\u{1F4A5} config:resolved hook must return a config object or undefined.");
|
|
682
339
|
}
|
|
683
|
-
|
|
684
|
-
const resolvedPreset = await hooks["preset:resolved"]({
|
|
685
|
-
preset: presetConfig,
|
|
686
|
-
name: presetName,
|
|
687
|
-
utils: hookUtils
|
|
688
|
-
});
|
|
689
|
-
if (resolvedPreset !== void 0) {
|
|
690
|
-
presetConfig = resolvedPreset;
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
stack.push(presetConfig);
|
|
340
|
+
current = next;
|
|
694
341
|
}
|
|
695
|
-
configs.unshift(current);
|
|
696
342
|
}
|
|
697
|
-
|
|
698
|
-
merged.presets = configs.slice(0, -1);
|
|
699
|
-
return merged;
|
|
343
|
+
return current;
|
|
700
344
|
}
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
var getBundledPreset = (preset) => {
|
|
717
|
-
return typeof preset === "string" && isBundledPreset(preset) ? bundledPresets[preset] : void 0;
|
|
718
|
-
};
|
|
719
|
-
|
|
720
|
-
// src/validate-config.ts
|
|
721
|
-
var import_logger3 = require("@pandacss/logger");
|
|
722
|
-
var import_shared10 = require("@pandacss/shared");
|
|
723
|
-
|
|
724
|
-
// src/validation/validate-artifact.ts
|
|
725
|
-
var validateArtifactNames = (names, addError) => {
|
|
726
|
-
names.recipes.forEach((recipeName) => {
|
|
727
|
-
if (names.slotRecipes.has(recipeName)) {
|
|
728
|
-
addError("recipes", `This recipe name is already used in \`theme.slotRecipes\`: ${recipeName}`);
|
|
729
|
-
}
|
|
730
|
-
if (names.patterns.has(recipeName)) {
|
|
731
|
-
addError("recipes", `This recipe name is already used in \`patterns\`: \`${recipeName}\``);
|
|
732
|
-
}
|
|
733
|
-
});
|
|
734
|
-
names.slotRecipes.forEach((recipeName) => {
|
|
735
|
-
if (names.patterns.has(recipeName)) {
|
|
736
|
-
addError("recipes", `This recipe name is already used in \`patterns\`: ${recipeName}`);
|
|
345
|
+
var configResolvedUtils = {
|
|
346
|
+
omit(obj, paths) {
|
|
347
|
+
const clone = cloneValue(obj);
|
|
348
|
+
for (const path of paths) {
|
|
349
|
+
deleteAtPath(clone, path);
|
|
350
|
+
}
|
|
351
|
+
return clone;
|
|
352
|
+
},
|
|
353
|
+
pick(obj, paths) {
|
|
354
|
+
const result = {};
|
|
355
|
+
for (const path of paths) {
|
|
356
|
+
const value = getAtPath(obj, path);
|
|
357
|
+
if (value !== void 0) {
|
|
358
|
+
setAtPath(result, path, value);
|
|
359
|
+
}
|
|
737
360
|
}
|
|
738
|
-
|
|
739
|
-
}
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
var import_shared7 = require("@pandacss/shared");
|
|
743
|
-
var validateBreakpoints = (breakpoints, addError) => {
|
|
744
|
-
if (!breakpoints) return;
|
|
745
|
-
const units = /* @__PURE__ */ new Set();
|
|
746
|
-
const values = Object.values(breakpoints);
|
|
747
|
-
for (const value of values) {
|
|
748
|
-
const unit = (0, import_shared7.getUnit)(value) ?? "px";
|
|
749
|
-
units.add(unit);
|
|
750
|
-
}
|
|
751
|
-
if (units.size > 1) {
|
|
752
|
-
addError("breakpoints", `All breakpoints must use the same unit: \`${values.join(", ")}\``);
|
|
361
|
+
return result;
|
|
362
|
+
},
|
|
363
|
+
traverse(obj, callback, options = {}) {
|
|
364
|
+
traverseValue(obj, callback, options);
|
|
753
365
|
}
|
|
754
366
|
};
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
if (
|
|
769
|
-
|
|
770
|
-
"conditions",
|
|
771
|
-
`Object condition leaves must be the literal string \`'@slot'\`, got \`${JSON.stringify(value)}\` at \`${key}\``
|
|
772
|
-
);
|
|
773
|
-
continue;
|
|
774
|
-
}
|
|
775
|
-
if (typeof value === "object" && value !== null) {
|
|
776
|
-
const nested = validateObjectCondition(value, addError);
|
|
777
|
-
if (nested.hasSlot) hasSlot = true;
|
|
778
|
-
}
|
|
367
|
+
function cloneValue(value) {
|
|
368
|
+
if (Array.isArray(value)) return value.map((item) => cloneValue(item));
|
|
369
|
+
if (!isPlainObject(value)) return value;
|
|
370
|
+
return Object.fromEntries(
|
|
371
|
+
Object.entries(value).map(([key, child]) => [key, cloneValue(child)])
|
|
372
|
+
);
|
|
373
|
+
}
|
|
374
|
+
function pathParts(path) {
|
|
375
|
+
return path.split(".").filter(Boolean);
|
|
376
|
+
}
|
|
377
|
+
function getAtPath(value, path) {
|
|
378
|
+
let current = value;
|
|
379
|
+
for (const part of pathParts(path)) {
|
|
380
|
+
if (!isPlainObject(current) && !Array.isArray(current)) return void 0;
|
|
381
|
+
current = current[part];
|
|
779
382
|
}
|
|
780
|
-
return
|
|
781
|
-
}
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
}
|
|
789
|
-
return;
|
|
790
|
-
}
|
|
791
|
-
if (Array.isArray(condition)) {
|
|
792
|
-
condition.forEach((c) => {
|
|
793
|
-
if (!c.startsWith("@") && !c.includes("&")) {
|
|
794
|
-
addError("conditions", `Selectors should contain the \`&\` character: \`${c}\``);
|
|
795
|
-
}
|
|
796
|
-
});
|
|
383
|
+
return current;
|
|
384
|
+
}
|
|
385
|
+
function setAtPath(target, path, value) {
|
|
386
|
+
const parts = pathParts(path);
|
|
387
|
+
let current = target;
|
|
388
|
+
parts.forEach((part, index) => {
|
|
389
|
+
if (index === parts.length - 1) {
|
|
390
|
+
current[part] = cloneValue(value);
|
|
797
391
|
return;
|
|
798
392
|
}
|
|
799
|
-
const
|
|
800
|
-
if (!
|
|
801
|
-
|
|
393
|
+
const next = current[part];
|
|
394
|
+
if (!isPlainObject(next)) {
|
|
395
|
+
current[part] = {};
|
|
802
396
|
}
|
|
397
|
+
current = current[part];
|
|
803
398
|
});
|
|
804
|
-
}
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
if (!
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
const {
|
|
817
|
-
config: { theme },
|
|
818
|
-
artifacts
|
|
819
|
-
} = options;
|
|
820
|
-
if (!theme) return;
|
|
821
|
-
if (theme.recipes) {
|
|
822
|
-
Object.keys(theme.recipes).forEach((recipeName) => {
|
|
823
|
-
artifacts.recipes.add(recipeName);
|
|
824
|
-
});
|
|
825
|
-
}
|
|
826
|
-
if (theme.slotRecipes) {
|
|
827
|
-
Object.keys(theme.slotRecipes).forEach((recipeName) => {
|
|
828
|
-
artifacts.slotRecipes.add(recipeName);
|
|
829
|
-
});
|
|
399
|
+
}
|
|
400
|
+
function deleteAtPath(target, path) {
|
|
401
|
+
const parts = pathParts(path);
|
|
402
|
+
const key = parts.pop();
|
|
403
|
+
if (!key) return;
|
|
404
|
+
let current = target;
|
|
405
|
+
for (const part of parts) {
|
|
406
|
+
if (!isPlainObject(current) && !Array.isArray(current)) return;
|
|
407
|
+
current = current[part];
|
|
408
|
+
}
|
|
409
|
+
if (isPlainObject(current) || Array.isArray(current)) {
|
|
410
|
+
delete current[key];
|
|
830
411
|
}
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
const
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
addError("tokens", `Self token reference: \`${path2}\``);
|
|
843
|
-
}
|
|
844
|
-
const stack = [path2];
|
|
845
|
-
while (stack.length > 0) {
|
|
846
|
-
let currentPath = stack.pop();
|
|
847
|
-
if (currentPath.includes("/")) {
|
|
848
|
-
const [tokenPath] = currentPath.split("/");
|
|
849
|
-
currentPath = tokenPath;
|
|
850
|
-
}
|
|
851
|
-
const value = valueAtPath.get(currentPath);
|
|
852
|
-
if (!value) {
|
|
853
|
-
const configKey = typeByPath.get(path2);
|
|
854
|
-
addError("tokens", `Missing token: \`${currentPath}\` used in \`theme.${configKey}.${path2}\``);
|
|
855
|
-
}
|
|
856
|
-
if (isTokenReference(value) && !refsByPath.has(value)) {
|
|
857
|
-
addError("tokens", `Unknown token reference: \`${currentPath}\` used in \`${value}\``);
|
|
858
|
-
}
|
|
859
|
-
const deps = refsByPath.get(currentPath);
|
|
860
|
-
if (!deps) continue;
|
|
861
|
-
for (const transitiveDep of deps) {
|
|
862
|
-
if (path2 === transitiveDep) {
|
|
863
|
-
addError(
|
|
864
|
-
"tokens",
|
|
865
|
-
`Circular token reference: \`${transitiveDep}\` -> \`${currentPath}\` -> ... -> \`${path2}\``
|
|
866
|
-
);
|
|
867
|
-
break;
|
|
868
|
-
}
|
|
869
|
-
stack.push(transitiveDep);
|
|
870
|
-
}
|
|
871
|
-
}
|
|
412
|
+
}
|
|
413
|
+
function traverseValue(value, callback, options, parent, key, path = "", depth = 0) {
|
|
414
|
+
if (parent && key !== void 0) {
|
|
415
|
+
callback({ value, path, depth, parent, key });
|
|
416
|
+
}
|
|
417
|
+
if (options.maxDepth !== void 0 && depth >= options.maxDepth) return;
|
|
418
|
+
if (!isPlainObject(value) && !Array.isArray(value)) return;
|
|
419
|
+
const separator = options.separator ?? ".";
|
|
420
|
+
const container = value;
|
|
421
|
+
Object.entries(value).forEach(([childKey, child]) => {
|
|
422
|
+
traverseValue(child, callback, options, container, childKey, joinPath(path, childKey, separator), depth + 1);
|
|
872
423
|
});
|
|
873
|
-
}
|
|
424
|
+
}
|
|
425
|
+
function joinPath(parent, key, separator) {
|
|
426
|
+
return parent ? `${parent}${separator}${key}` : key;
|
|
427
|
+
}
|
|
874
428
|
|
|
875
|
-
// src/
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
}
|
|
913
|
-
const valueStr = serializeTokenValue(itemValue.value || itemValue);
|
|
914
|
-
if (isTokenReference(valueStr)) {
|
|
915
|
-
refsByPath.set(formattedPath, /* @__PURE__ */ new Set([]));
|
|
916
|
-
}
|
|
917
|
-
const references = refsByPath.get(formattedPath);
|
|
918
|
-
if (!references) return;
|
|
919
|
-
getReferences(valueStr).forEach((reference) => {
|
|
920
|
-
references.add(reference);
|
|
921
|
-
});
|
|
922
|
-
});
|
|
923
|
-
}
|
|
924
|
-
if (theme.semanticTokens) {
|
|
925
|
-
const tokenPaths = /* @__PURE__ */ new Set();
|
|
926
|
-
(0, import_shared9.walkObject)(
|
|
927
|
-
theme.semanticTokens,
|
|
928
|
-
(value, paths) => {
|
|
929
|
-
const path2 = paths.join(SEP);
|
|
930
|
-
semanticTokenNames.add(path2);
|
|
931
|
-
valueAtPath.set(path2, value);
|
|
932
|
-
tokenPaths.add(path2);
|
|
933
|
-
if (path2.includes("DEFAULT")) {
|
|
934
|
-
valueAtPath.set(path2.replace(SEP + "DEFAULT", ""), value);
|
|
935
|
-
}
|
|
936
|
-
if (!isValidToken(value)) return;
|
|
937
|
-
(0, import_shared9.walkObject)(value, (itemValue, paths2) => {
|
|
938
|
-
const valuePath = paths2.join(SEP);
|
|
939
|
-
const formattedPath = formatPath(path2);
|
|
940
|
-
typeByPath.set(formattedPath, "semanticTokens");
|
|
941
|
-
const fullPath = formattedPath + "." + paths2.join(SEP);
|
|
942
|
-
if (valuePath.includes("value" + SEP + "value")) {
|
|
943
|
-
addError("tokens", `You used \`value\` twice resulting in an invalid token \`theme.tokens.${fullPath}\``);
|
|
944
|
-
}
|
|
945
|
-
const valueStr = serializeTokenValue(itemValue.value || itemValue);
|
|
946
|
-
if (isTokenReference(valueStr)) {
|
|
947
|
-
if (!refsByPath.has(formattedPath)) {
|
|
948
|
-
refsByPath.set(formattedPath, /* @__PURE__ */ new Set());
|
|
949
|
-
}
|
|
950
|
-
const references = refsByPath.get(formattedPath);
|
|
951
|
-
if (!references) return;
|
|
952
|
-
getReferences(valueStr).forEach((reference) => {
|
|
953
|
-
references.add(reference);
|
|
954
|
-
});
|
|
955
|
-
}
|
|
956
|
-
});
|
|
957
|
-
},
|
|
958
|
-
{
|
|
959
|
-
stop: isValidToken
|
|
960
|
-
}
|
|
961
|
-
);
|
|
962
|
-
tokenPaths.forEach((path2) => {
|
|
963
|
-
const formattedPath = formatPath(path2);
|
|
964
|
-
const value = valueAtPath.get(path2);
|
|
965
|
-
if (path2.includes(" ")) {
|
|
966
|
-
addError("tokens", `Token key must not contain spaces: \`theme.tokens.${formattedPath}\``);
|
|
967
|
-
return;
|
|
968
|
-
}
|
|
969
|
-
if (!(0, import_shared9.isObject)(value) && !path2.includes("value")) {
|
|
970
|
-
addError("tokens", `Token must contain 'value': \`theme.semanticTokens.${formattedPath}\``);
|
|
971
|
-
}
|
|
972
|
-
});
|
|
429
|
+
// src/diff.ts
|
|
430
|
+
import diff from "microdiff";
|
|
431
|
+
var ALL_DEPENDENCIES = [
|
|
432
|
+
"outExtension",
|
|
433
|
+
"forceImportExtension",
|
|
434
|
+
"conditions",
|
|
435
|
+
"hash",
|
|
436
|
+
"jsxFactory",
|
|
437
|
+
"jsxFramework",
|
|
438
|
+
"jsxStyleProps",
|
|
439
|
+
"patterns",
|
|
440
|
+
"prefix",
|
|
441
|
+
"recipes",
|
|
442
|
+
"separator",
|
|
443
|
+
"syntax",
|
|
444
|
+
"themes",
|
|
445
|
+
"tokens",
|
|
446
|
+
"utilities"
|
|
447
|
+
];
|
|
448
|
+
function diffConfig(prev, next) {
|
|
449
|
+
if (!prev) {
|
|
450
|
+
return { hasChanged: true, dependencies: [...ALL_DEPENDENCIES], recipes: [], patterns: [], changes: [] };
|
|
451
|
+
}
|
|
452
|
+
const prevInput = diffInput(prev);
|
|
453
|
+
const nextInput = diffInput(next);
|
|
454
|
+
const changes = diff(prevInput, nextInput);
|
|
455
|
+
if (changes.length === 0) {
|
|
456
|
+
return { hasChanged: false, dependencies: [], recipes: [], patterns: [], changes };
|
|
457
|
+
}
|
|
458
|
+
const dependencies = /* @__PURE__ */ new Set();
|
|
459
|
+
const recipes = /* @__PURE__ */ new Set();
|
|
460
|
+
const patterns = /* @__PURE__ */ new Set();
|
|
461
|
+
for (const change of changes) {
|
|
462
|
+
const classified = classify(change.path.map(String));
|
|
463
|
+
classified.deps.forEach((dep) => dependencies.add(dep));
|
|
464
|
+
if (classified.recipe) recipes.add(classified.recipe);
|
|
465
|
+
if (classified.pattern) patterns.add(classified.pattern);
|
|
973
466
|
}
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
const warnings = /* @__PURE__ */ new Set();
|
|
981
|
-
const addError = (scope, message) => {
|
|
982
|
-
warnings.add(`[${scope}] ` + message);
|
|
983
|
-
};
|
|
984
|
-
validateBreakpoints(config.theme?.breakpoints, addError);
|
|
985
|
-
validateConditions(config.conditions, addError);
|
|
986
|
-
const artifacts = {
|
|
987
|
-
recipes: /* @__PURE__ */ new Set(),
|
|
988
|
-
slotRecipes: /* @__PURE__ */ new Set(),
|
|
989
|
-
patterns: /* @__PURE__ */ new Set()
|
|
990
|
-
};
|
|
991
|
-
const tokens2 = {
|
|
992
|
-
tokenNames: /* @__PURE__ */ new Set(),
|
|
993
|
-
semanticTokenNames: /* @__PURE__ */ new Set(),
|
|
994
|
-
valueAtPath: /* @__PURE__ */ new Map(),
|
|
995
|
-
refsByPath: /* @__PURE__ */ new Map(),
|
|
996
|
-
typeByPath: /* @__PURE__ */ new Map()
|
|
467
|
+
return {
|
|
468
|
+
hasChanged: true,
|
|
469
|
+
dependencies: [...dependencies],
|
|
470
|
+
recipes: [...recipes],
|
|
471
|
+
patterns: [...patterns],
|
|
472
|
+
changes
|
|
997
473
|
};
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
}
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
};
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
474
|
+
}
|
|
475
|
+
function classify(path) {
|
|
476
|
+
const [head, second, third] = path;
|
|
477
|
+
if (head === "config") return classify(path.slice(1));
|
|
478
|
+
if (head === "hooks") return { deps: [] };
|
|
479
|
+
if (head === "theme") {
|
|
480
|
+
if (second === "recipes" || second === "slotRecipes") {
|
|
481
|
+
return { deps: ["recipes"], recipe: third };
|
|
482
|
+
}
|
|
483
|
+
if (second === "containers" || second === "containerNames") {
|
|
484
|
+
return { deps: ["tokens", "conditions"] };
|
|
485
|
+
}
|
|
486
|
+
return { deps: ["tokens"] };
|
|
487
|
+
}
|
|
488
|
+
switch (head) {
|
|
489
|
+
case "conditions":
|
|
490
|
+
return { deps: ["conditions"] };
|
|
491
|
+
case "utilities":
|
|
492
|
+
return { deps: ["utilities"] };
|
|
493
|
+
case "patterns":
|
|
494
|
+
return { deps: ["patterns"], pattern: second };
|
|
495
|
+
case "themes":
|
|
496
|
+
return { deps: ["themes"] };
|
|
497
|
+
case "syntax":
|
|
498
|
+
return { deps: ["syntax"] };
|
|
499
|
+
case "hash":
|
|
500
|
+
return { deps: ["hash"] };
|
|
501
|
+
case "prefix":
|
|
502
|
+
return { deps: ["prefix"] };
|
|
503
|
+
case "separator":
|
|
504
|
+
return { deps: ["separator"] };
|
|
505
|
+
case "jsxFramework":
|
|
506
|
+
return { deps: ["jsxFramework"] };
|
|
507
|
+
case "jsxFactory":
|
|
508
|
+
return { deps: ["jsxFactory"] };
|
|
509
|
+
case "jsxStyleProps":
|
|
510
|
+
return { deps: ["jsxStyleProps"] };
|
|
511
|
+
case "outExtension":
|
|
512
|
+
return { deps: ["outExtension"] };
|
|
513
|
+
case "forceImportExtension":
|
|
514
|
+
return { deps: ["forceImportExtension"] };
|
|
515
|
+
case "shorthands":
|
|
516
|
+
return { deps: ["utilities"] };
|
|
517
|
+
case "strictTokens":
|
|
518
|
+
case "strictPropertyValues":
|
|
519
|
+
return { deps: ["outExtension"] };
|
|
520
|
+
default:
|
|
521
|
+
return { deps: [] };
|
|
1045
522
|
}
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
config:
|
|
1050
|
-
};
|
|
1051
|
-
if (hooks["config:resolved"]) {
|
|
1052
|
-
const result2 = await hooks["config:resolved"]({
|
|
1053
|
-
config: loadConfigResult.config,
|
|
1054
|
-
path: loadConfigResult.path,
|
|
1055
|
-
dependencies: loadConfigResult.dependencies,
|
|
1056
|
-
utils: hookUtils2
|
|
1057
|
-
});
|
|
1058
|
-
if (result2) {
|
|
1059
|
-
loadConfigResult.config = result2;
|
|
1060
|
-
}
|
|
523
|
+
}
|
|
524
|
+
function diffInput(input) {
|
|
525
|
+
if (isConfigSnapshot(input)) {
|
|
526
|
+
return { config: input.config, ...input.hooks ? { hooks: input.hooks } : {} };
|
|
1061
527
|
}
|
|
1062
|
-
|
|
1063
|
-
const deserialize = () => (0, import_shared11.parseJson)(serialized);
|
|
1064
|
-
return { ...loadConfigResult, serialized, deserialize, hooks };
|
|
528
|
+
return { config: input };
|
|
1065
529
|
}
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
async function loadConfig(options) {
|
|
1069
|
-
const result = await bundleConfig(options);
|
|
1070
|
-
return resolveConfig(result, options.cwd);
|
|
530
|
+
function isConfigSnapshot(input) {
|
|
531
|
+
return !!input && typeof input === "object" && !Array.isArray(input) && ("callbacks" in input || "hooks" in input) && "config" in input && !!input.config && typeof input.config === "object" && !Array.isArray(input.config);
|
|
1071
532
|
}
|
|
1072
|
-
|
|
1073
|
-
0 && (module.exports = {
|
|
533
|
+
export {
|
|
1074
534
|
bundleConfig,
|
|
1075
|
-
|
|
1076
|
-
|
|
535
|
+
createConfigSnapshot,
|
|
536
|
+
diffConfig,
|
|
1077
537
|
findConfig,
|
|
1078
|
-
getConfigDependencies,
|
|
1079
|
-
getResolvedConfig,
|
|
1080
538
|
loadConfig,
|
|
1081
|
-
mergeConfigs
|
|
1082
|
-
|
|
1083
|
-
resolveConfig
|
|
1084
|
-
});
|
|
539
|
+
mergeConfigs
|
|
540
|
+
};
|