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.js
CHANGED
|
@@ -5880,6 +5880,32 @@ var TokenParser = class {
|
|
|
5880
5880
|
};
|
|
5881
5881
|
|
|
5882
5882
|
// src/build/pipeline/token-pipeline.ts
|
|
5883
|
+
var ROOT_REF_PATTERN = /\.\$root\}/g;
|
|
5884
|
+
function rewriteRootReferences(value) {
|
|
5885
|
+
if (typeof value === "string") {
|
|
5886
|
+
return ROOT_REF_PATTERN.test(value) ? value.replace(ROOT_REF_PATTERN, "}") : value;
|
|
5887
|
+
}
|
|
5888
|
+
if (Array.isArray(value)) {
|
|
5889
|
+
let changed = false;
|
|
5890
|
+
const mapped = value.map((item) => {
|
|
5891
|
+
const rewritten = rewriteRootReferences(item);
|
|
5892
|
+
if (rewritten !== item) changed = true;
|
|
5893
|
+
return rewritten;
|
|
5894
|
+
});
|
|
5895
|
+
return changed ? mapped : value;
|
|
5896
|
+
}
|
|
5897
|
+
if (typeof value === "object" && value !== null) {
|
|
5898
|
+
let changed = false;
|
|
5899
|
+
const result = {};
|
|
5900
|
+
for (const [k, v] of Object.entries(value)) {
|
|
5901
|
+
const rewritten = rewriteRootReferences(v);
|
|
5902
|
+
if (rewritten !== v) changed = true;
|
|
5903
|
+
result[k] = rewritten;
|
|
5904
|
+
}
|
|
5905
|
+
return changed ? result : value;
|
|
5906
|
+
}
|
|
5907
|
+
return value;
|
|
5908
|
+
}
|
|
5883
5909
|
var TokenPipeline = class {
|
|
5884
5910
|
options;
|
|
5885
5911
|
validationHandler;
|
|
@@ -5904,8 +5930,9 @@ var TokenPipeline = class {
|
|
|
5904
5930
|
* 5. Resolve JSON Pointer references
|
|
5905
5931
|
* 6. Parse and flatten token structure
|
|
5906
5932
|
* 7. Resolve alias references
|
|
5907
|
-
* 8.
|
|
5908
|
-
* 9. Apply
|
|
5933
|
+
* 8. Strip $root from token names/paths (DTCG structural mechanism, transparent in output)
|
|
5934
|
+
* 9. Apply filters (if provided) — runs first to remove tokens before transforms
|
|
5935
|
+
* 10. Apply transforms (if provided) — runs on the already-filtered token set
|
|
5909
5936
|
*
|
|
5910
5937
|
* Each stage is explicitly typed to ensure correct order and prevent temporal coupling.
|
|
5911
5938
|
*
|
|
@@ -5945,7 +5972,8 @@ var TokenPipeline = class {
|
|
|
5945
5972
|
const refResolved = await this.resolveReferences(preprocessed);
|
|
5946
5973
|
const flattened = this.flattenTokens(refResolved);
|
|
5947
5974
|
const aliasResolved = this.resolveAliases(flattened);
|
|
5948
|
-
const
|
|
5975
|
+
const rootStripped = this.stripRootTokenNames(aliasResolved);
|
|
5976
|
+
const filtered = this.applyFilterStage(rootStripped, filterList);
|
|
5949
5977
|
return this.applyTransformStage(filtered, transformList);
|
|
5950
5978
|
}
|
|
5951
5979
|
/**
|
|
@@ -6030,8 +6058,34 @@ var TokenPipeline = class {
|
|
|
6030
6058
|
return { ...rest, aliasResolvedTokens };
|
|
6031
6059
|
}
|
|
6032
6060
|
/**
|
|
6033
|
-
* Stage 8:
|
|
6061
|
+
* Stage 8: Strip `$root` from token names and paths.
|
|
6062
|
+
*
|
|
6063
|
+
* `$root` is a DTCG structural mechanism that allows a group to carry a
|
|
6064
|
+
* default value alongside child tokens. References must use the full path
|
|
6065
|
+
* (`{color.action.brand.$root}`) for alias resolution, but `$root` should
|
|
6066
|
+
* be transparent in output. This stage re-keys tokens so downstream
|
|
6067
|
+
* consumers (filters, transforms, renderers) see clean names.
|
|
6034
6068
|
*/
|
|
6069
|
+
stripRootTokenNames(stage) {
|
|
6070
|
+
const tokens = stage.aliasResolvedTokens;
|
|
6071
|
+
const result = {};
|
|
6072
|
+
for (const [key, token] of Object.entries(tokens)) {
|
|
6073
|
+
const rewrittenOriginal = rewriteRootReferences(token.originalValue);
|
|
6074
|
+
if (!key.endsWith(".$root")) {
|
|
6075
|
+
result[key] = rewrittenOriginal !== token.originalValue ? { ...token, originalValue: rewrittenOriginal } : token;
|
|
6076
|
+
continue;
|
|
6077
|
+
}
|
|
6078
|
+
const strippedPath = token.path.filter((segment) => segment !== "$root");
|
|
6079
|
+
const strippedName = strippedPath.join(".");
|
|
6080
|
+
result[strippedName] = {
|
|
6081
|
+
...token,
|
|
6082
|
+
path: strippedPath,
|
|
6083
|
+
name: strippedName,
|
|
6084
|
+
originalValue: rewrittenOriginal
|
|
6085
|
+
};
|
|
6086
|
+
}
|
|
6087
|
+
return { ...stage, aliasResolvedTokens: result };
|
|
6088
|
+
}
|
|
6035
6089
|
applyFilterStage(stage, filterList) {
|
|
6036
6090
|
let tokens = stage.aliasResolvedTokens;
|
|
6037
6091
|
if (filterList !== void 0 && filterList.length > 0) {
|