dispersa 0.3.0 → 0.4.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/dist/index.cjs +58 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +58 -4
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -5907,6 +5907,32 @@ var TokenParser = class {
|
|
|
5907
5907
|
};
|
|
5908
5908
|
|
|
5909
5909
|
// src/build/pipeline/token-pipeline.ts
|
|
5910
|
+
var ROOT_REF_PATTERN = /\.\$root\}/g;
|
|
5911
|
+
function rewriteRootReferences(value) {
|
|
5912
|
+
if (typeof value === "string") {
|
|
5913
|
+
return ROOT_REF_PATTERN.test(value) ? value.replace(ROOT_REF_PATTERN, "}") : value;
|
|
5914
|
+
}
|
|
5915
|
+
if (Array.isArray(value)) {
|
|
5916
|
+
let changed = false;
|
|
5917
|
+
const mapped = value.map((item) => {
|
|
5918
|
+
const rewritten = rewriteRootReferences(item);
|
|
5919
|
+
if (rewritten !== item) changed = true;
|
|
5920
|
+
return rewritten;
|
|
5921
|
+
});
|
|
5922
|
+
return changed ? mapped : value;
|
|
5923
|
+
}
|
|
5924
|
+
if (typeof value === "object" && value !== null) {
|
|
5925
|
+
let changed = false;
|
|
5926
|
+
const result = {};
|
|
5927
|
+
for (const [k, v] of Object.entries(value)) {
|
|
5928
|
+
const rewritten = rewriteRootReferences(v);
|
|
5929
|
+
if (rewritten !== v) changed = true;
|
|
5930
|
+
result[k] = rewritten;
|
|
5931
|
+
}
|
|
5932
|
+
return changed ? result : value;
|
|
5933
|
+
}
|
|
5934
|
+
return value;
|
|
5935
|
+
}
|
|
5910
5936
|
var TokenPipeline = class {
|
|
5911
5937
|
options;
|
|
5912
5938
|
validationHandler;
|
|
@@ -5931,8 +5957,9 @@ var TokenPipeline = class {
|
|
|
5931
5957
|
* 5. Resolve JSON Pointer references
|
|
5932
5958
|
* 6. Parse and flatten token structure
|
|
5933
5959
|
* 7. Resolve alias references
|
|
5934
|
-
* 8.
|
|
5935
|
-
* 9. Apply
|
|
5960
|
+
* 8. Strip $root from token names/paths (DTCG structural mechanism, transparent in output)
|
|
5961
|
+
* 9. Apply filters (if provided) — runs first to remove tokens before transforms
|
|
5962
|
+
* 10. Apply transforms (if provided) — runs on the already-filtered token set
|
|
5936
5963
|
*
|
|
5937
5964
|
* Each stage is explicitly typed to ensure correct order and prevent temporal coupling.
|
|
5938
5965
|
*
|
|
@@ -5972,7 +5999,8 @@ var TokenPipeline = class {
|
|
|
5972
5999
|
const refResolved = await this.resolveReferences(preprocessed);
|
|
5973
6000
|
const flattened = this.flattenTokens(refResolved);
|
|
5974
6001
|
const aliasResolved = this.resolveAliases(flattened);
|
|
5975
|
-
const
|
|
6002
|
+
const rootStripped = this.stripRootTokenNames(aliasResolved);
|
|
6003
|
+
const filtered = this.applyFilterStage(rootStripped, filterList);
|
|
5976
6004
|
return this.applyTransformStage(filtered, transformList);
|
|
5977
6005
|
}
|
|
5978
6006
|
/**
|
|
@@ -6057,8 +6085,34 @@ var TokenPipeline = class {
|
|
|
6057
6085
|
return { ...rest, aliasResolvedTokens };
|
|
6058
6086
|
}
|
|
6059
6087
|
/**
|
|
6060
|
-
* Stage 8:
|
|
6088
|
+
* Stage 8: Strip `$root` from token names and paths.
|
|
6089
|
+
*
|
|
6090
|
+
* `$root` is a DTCG structural mechanism that allows a group to carry a
|
|
6091
|
+
* default value alongside child tokens. References must use the full path
|
|
6092
|
+
* (`{color.action.brand.$root}`) for alias resolution, but `$root` should
|
|
6093
|
+
* be transparent in output. This stage re-keys tokens so downstream
|
|
6094
|
+
* consumers (filters, transforms, renderers) see clean names.
|
|
6061
6095
|
*/
|
|
6096
|
+
stripRootTokenNames(stage) {
|
|
6097
|
+
const tokens = stage.aliasResolvedTokens;
|
|
6098
|
+
const result = {};
|
|
6099
|
+
for (const [key, token] of Object.entries(tokens)) {
|
|
6100
|
+
const rewrittenOriginal = rewriteRootReferences(token.originalValue);
|
|
6101
|
+
if (!key.endsWith(".$root")) {
|
|
6102
|
+
result[key] = rewrittenOriginal !== token.originalValue ? { ...token, originalValue: rewrittenOriginal } : token;
|
|
6103
|
+
continue;
|
|
6104
|
+
}
|
|
6105
|
+
const strippedPath = token.path.filter((segment) => segment !== "$root");
|
|
6106
|
+
const strippedName = strippedPath.join(".");
|
|
6107
|
+
result[strippedName] = {
|
|
6108
|
+
...token,
|
|
6109
|
+
path: strippedPath,
|
|
6110
|
+
name: strippedName,
|
|
6111
|
+
originalValue: rewrittenOriginal
|
|
6112
|
+
};
|
|
6113
|
+
}
|
|
6114
|
+
return { ...stage, aliasResolvedTokens: result };
|
|
6115
|
+
}
|
|
6062
6116
|
applyFilterStage(stage, filterList) {
|
|
6063
6117
|
let tokens = stage.aliasResolvedTokens;
|
|
6064
6118
|
if (filterList !== void 0 && filterList.length > 0) {
|