@ama-styling/style-dictionary 13.0.0-next.2 → 13.0.0-next.21

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/README.md CHANGED
@@ -159,7 +159,7 @@ To enhance and facilitate the configuration of the `StyleDictionary` instance, t
159
159
 
160
160
  The `getTargetFiles` function is used to parameterize the generated file based on Design Token (following the same logic as `$extensions`):
161
161
 
162
- ```typescript
162
+ ```javascript
163
163
  // Example to generate the `color-primary-**` variables in `my-color-primary.css`
164
164
 
165
165
  import { getTargetFiles } from '@ama-styling/style-dictionary';
@@ -190,6 +190,22 @@ register(sd); // Register all Otter modules
190
190
  > The `format` option will be applied to all the files provided to the `getTargetFiles` function (including `defaultFile`).
191
191
  > `defaultFile` defines the default file where variables not matching any rule will be generated.
192
192
 
193
+ The helper function `getTargetFiles` is registering the filter into `StyleDictionary` with a unique ID.\
194
+ This IDs can be retrieved as follows:
195
+
196
+ ```javascript
197
+ import { getTargetFiles } from '@ama-styling/style-dictionary';
198
+
199
+ const sd = new StyleDictionary();
200
+ const files = getTargetFiles({ rules, { styleDictionary: sd } });
201
+
202
+ /**
203
+ * Filter IDs registered in {@link sd} Style Dictionary instance
204
+ * @type {string[]}
205
+ **/
206
+ const filterIds = files.map(({ filter }) => filter);
207
+ ```
208
+
193
209
  ## Advanced
194
210
 
195
211
  ### Basic Node Configuration Example
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ama-styling/style-dictionary",
3
- "version": "13.0.0-next.2",
3
+ "version": "13.0.0-next.21",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -39,17 +39,17 @@
39
39
  }
40
40
  },
41
41
  "dependencies": {
42
- "@angular-devkit/architect": "~0.1902.0",
43
- "@angular-devkit/schematics": "~19.2.0",
44
- "@o3r/schematics": "^13.0.0-next.2",
45
- "@schematics/angular": "~19.2.0",
42
+ "@angular-devkit/architect": "~0.2000.0",
43
+ "@angular-devkit/schematics": "~20.0.0",
44
+ "@o3r/schematics": "^13.0.0-next.21",
45
+ "@schematics/angular": "~20.0.0",
46
46
  "tslib": "^2.6.2"
47
47
  },
48
48
  "peerDependencies": {
49
- "@o3r/core": "^13.0.0-next.2",
50
- "@o3r/schematics": "^13.0.0-next.2",
51
- "@o3r/telemetry": "^13.0.0-next.2",
52
- "style-dictionary": "^4.3.2",
49
+ "@o3r/core": "^13.0.0-next.21",
50
+ "@o3r/schematics": "^13.0.0-next.21",
51
+ "@o3r/telemetry": "^13.0.0-next.21",
52
+ "style-dictionary": "^5.0.0",
53
53
  "type-fest": "^4.30.1"
54
54
  },
55
55
  "peerDependenciesMeta": {
@@ -73,32 +73,32 @@
73
73
  }
74
74
  },
75
75
  "devDependencies": {
76
- "@babel/core": "~7.27.0",
77
- "@babel/preset-env": "~7.27.0",
76
+ "@babel/core": "~7.28.0",
77
+ "@babel/preset-env": "~7.28.0",
78
78
  "@babel/preset-typescript": "~7.27.0",
79
79
  "@compodoc/compodoc": "^1.1.19",
80
80
  "@eslint-community/eslint-plugin-eslint-comments": "^4.4.0",
81
- "@nx/eslint": "~20.8.0",
82
- "@nx/eslint-plugin": "~20.8.0",
83
- "@nx/jest": "~20.8.0",
84
- "@nx/js": "~20.8.0",
85
- "@o3r/build-helpers": "^13.0.0-next.2",
86
- "@o3r/core": "^13.0.0-next.2",
87
- "@o3r/eslint-plugin": "^13.0.0-next.2",
88
- "@o3r/telemetry": "^13.0.0-next.2",
89
- "@o3r/test-helpers": "^13.0.0-next.2",
90
- "@schematics/angular": "~19.2.0",
81
+ "@nx/eslint": "~21.3.11",
82
+ "@nx/eslint-plugin": "~21.3.11",
83
+ "@nx/jest": "~21.3.11",
84
+ "@nx/js": "~21.3.11",
85
+ "@o3r/build-helpers": "^13.0.0-next.21",
86
+ "@o3r/core": "^13.0.0-next.21",
87
+ "@o3r/eslint-plugin": "^13.0.0-next.21",
88
+ "@o3r/telemetry": "^13.0.0-next.21",
89
+ "@o3r/test-helpers": "^13.0.0-next.21",
90
+ "@schematics/angular": "~20.0.0",
91
91
  "@stylistic/eslint-plugin": "~3.1.0",
92
92
  "@types/jest": "~29.5.2",
93
93
  "@types/minimist": "^1.2.2",
94
94
  "@types/node": "^20.0.0",
95
95
  "@types/semver": "^7.3.13",
96
- "@typescript-eslint/parser": "~8.35.0",
97
- "angular-eslint": "~19.4.0",
96
+ "@typescript-eslint/parser": "~8.37.0",
97
+ "angular-eslint": "~20.1.0",
98
98
  "babel-jest": "^29.7.0",
99
99
  "chokidar": "^4.0.3",
100
100
  "cpy-cli": "^5.0.0",
101
- "eslint": "~9.29.0",
101
+ "eslint": "~9.31.0",
102
102
  "eslint-import-resolver-node": "~0.3.9",
103
103
  "eslint-import-resolver-typescript": "~3.10.0",
104
104
  "eslint-plugin-import": "~2.32.0",
@@ -113,18 +113,18 @@
113
113
  "jest-junit": "~16.0.0",
114
114
  "jest-resolve": "~29.7.0",
115
115
  "jsonc-eslint-parser": "~2.4.0",
116
- "nx": "~20.8.0",
116
+ "nx": "~21.3.11",
117
117
  "pid-from-port": "^1.1.3",
118
- "style-dictionary": "~4.4.0",
118
+ "style-dictionary": "~5.0.0",
119
119
  "ts-jest": "~29.3.0",
120
120
  "ts-node": "~10.9.2",
121
121
  "type-fest": "^4.30.1",
122
122
  "typescript": "~5.8.2",
123
- "typescript-eslint": "~8.35.0",
123
+ "typescript-eslint": "~8.37.0",
124
124
  "zone.js": "~0.15.0"
125
125
  },
126
126
  "engines": {
127
- "node": "^20.11.1 || >=22.0.0"
127
+ "node": "^20.19.0 || ^22.12.0 || ^24.0.0"
128
128
  },
129
129
  "schematics": "./collection.json",
130
130
  "contributors": [
@@ -9,7 +9,8 @@
9
9
  "description": "Project name",
10
10
  "$default": {
11
11
  "$source": "projectName"
12
- }
12
+ },
13
+ "alias": "project"
13
14
  },
14
15
  "exactO3rVersion": {
15
16
  "type": "boolean",
@@ -1,3 +1,4 @@
1
+ import StyleDictionary from 'style-dictionary';
1
2
  import type { File, FormatFn } from 'style-dictionary/types';
2
3
  /** Options to get file filters */
3
4
  interface TargetFileOptions {
@@ -7,6 +8,8 @@ interface TargetFileOptions {
7
8
  rootPath?: string;
8
9
  /** Default file if not matching any rule */
9
10
  defaultFile?: string;
11
+ /** styleDictionary instance */
12
+ styleDictionary?: StyleDictionary;
10
13
  }
11
14
  /** Mapping of the Design Tokens to a given file */
12
15
  export interface FileRuleNode {
@@ -1 +1 @@
1
- {"version":3,"file":"target-file.filter.d.mts","sourceRoot":"","sources":["../../../src/filters/target-file.filter.mts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,IAAI,EACJ,QAAQ,EACT,MAAM,wBAAwB,CAAC;AAKhC,kCAAkC;AAClC,UAAU,iBAAiB;IACzB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC3B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,oDAAoD;IACpD,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;CACvC;AAgBD;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,WAAW,YAAY,EAAE,UAAU,iBAAiB,KAAG,IAAI,EAgCzF,CAAC"}
1
+ {"version":3,"file":"target-file.filter.d.mts","sourceRoot":"","sources":["../../../src/filters/target-file.filter.mts"],"names":[],"mappings":"AAOA,OAAO,eAEN,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,IAAI,EACJ,QAAQ,EACT,MAAM,wBAAwB,CAAC;AAQhC,kCAAkC;AAClC,UAAU,iBAAiB;IACzB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC3B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,oDAAoD;IACpD,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;CACvC;AAgBD;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,WAAW,YAAY,EAAE,UAAU,iBAAiB,KAAG,IAAI,EAwCzF,CAAC"}
@@ -1,4 +1,7 @@
1
+ import { randomUUID, } from 'node:crypto';
1
2
  import { normalize, resolve, } from 'node:path';
3
+ import StyleDictionary from 'style-dictionary';
4
+ import { OTTER_NAME_PREFIX, } from '../constants.mjs';
2
5
  import { deflatten, } from '../helpers/config-deflatten.helpers.mjs';
3
6
  const getPathMap = (rule, path = [], map = new Map()) => {
4
7
  return Object.entries(rule)
@@ -18,27 +21,33 @@ const getPathMap = (rule, path = [], map = new Map()) => {
18
21
  * @param options
19
22
  */
20
23
  export const getTargetFiles = (fileRules, options) => {
24
+ const styleDictionary = options?.styleDictionary || StyleDictionary;
21
25
  const flatterRules = deflatten(fileRules);
22
26
  const fileMap = getPathMap(flatterRules);
23
27
  const fileMapEntries = [...fileMap.entries()];
24
- return [
25
- ...fileMapEntries
26
- .map(([filePath, nodes]) => {
27
- return {
28
- destination: options?.rootPath ? resolve(options.rootPath, filePath) : filePath,
29
- format: options?.format,
30
- filter: (token) => nodes.some((path) => path.every((item, idx) => token.path[idx] === item))
31
- };
32
- }),
33
- ...(options?.defaultFile
34
- ? [{
35
- destination: options.rootPath ? resolve(options.rootPath, options.defaultFile) : options.defaultFile,
36
- format: options?.format,
37
- filter: (token) => !fileMapEntries
38
- .filter(([filePath]) => normalize(filePath) !== normalize(options.defaultFile))
39
- .some(([, nodes]) => nodes.some((path) => path.every((item, idx) => token.path[idx] === item)))
40
- }]
41
- : [])
42
- ];
28
+ const files = fileMapEntries
29
+ .map(([filePath, nodes]) => {
30
+ const filter = (token) => nodes.some((path) => path.every((item, idx) => token.path[idx] === item));
31
+ const name = `${OTTER_NAME_PREFIX}/filter/${randomUUID()}`;
32
+ styleDictionary.registerFilter({ name, filter });
33
+ return {
34
+ destination: options?.rootPath ? resolve(options.rootPath, filePath) : filePath,
35
+ format: options?.format,
36
+ filter: name
37
+ };
38
+ });
39
+ if (options?.defaultFile) {
40
+ const filter = (token) => !fileMapEntries
41
+ .filter(([filePath]) => normalize(filePath) !== normalize(options.defaultFile))
42
+ .some(([, nodes]) => nodes.some((path) => path.every((item, idx) => token.path[idx] === item)));
43
+ const name = `${OTTER_NAME_PREFIX}/filter/${randomUUID()}`;
44
+ styleDictionary.registerFilter({ name, filter });
45
+ files.push({
46
+ destination: options.rootPath ? resolve(options.rootPath, options.defaultFile) : options.defaultFile,
47
+ format: options?.format,
48
+ filter: name
49
+ });
50
+ }
51
+ return files;
43
52
  };
44
53
  //# sourceMappingURL=target-file.filter.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"target-file.filter.mjs","sourceRoot":"","sources":["../../../src/filters/target-file.filter.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"target-file.filter.mjs","sourceRoot":"","sources":["../../../src/filters/target-file.filter.mts"],"names":[],"mappings":"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"}