Skip to content

Commit 3f09277

Browse files
authoredMay 30, 2024··
feat: pass dictionary options to preprocessors (#1224)
1 parent 2335f13 commit 3f09277

File tree

5 files changed

+46
-4
lines changed

5 files changed

+46
-4
lines changed
 

‎.changeset/stupid-mangos-explode.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'style-dictionary': patch
3+
---
4+
5+
Pass dictionary options to preprocessor functions.

‎__tests__/register/preprocessor.test.js

+24
Original file line numberDiff line numberDiff line change
@@ -139,4 +139,28 @@ describe('register/transformGroup', async () => {
139139
},
140140
});
141141
});
142+
143+
it('should pass options to preprocessor function as second argument', async () => {
144+
let opts;
145+
StyleDictionary.registerPreprocessor({
146+
name: 'foo-processor',
147+
preprocessor: async (dict, options) => {
148+
opts = options;
149+
return dict;
150+
},
151+
});
152+
153+
StyleDictionaryExtended = new StyleDictionary({
154+
preprocessors: ['foo-processor'],
155+
tokens: {
156+
foo: {
157+
$value: '4px',
158+
$type: 'dimension',
159+
$description: 'Foo description',
160+
},
161+
},
162+
});
163+
await StyleDictionaryExtended.hasInitialized;
164+
expect(opts.usesDtcg).to.be.true;
165+
});
142166
});

‎lib/StyleDictionary.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -335,8 +335,13 @@ export default class StyleDictionary extends Register {
335335
if (this.shouldRunExpansion(this.expand)) {
336336
tokens = expandTokens(tokens, this.options);
337337
}
338-
this.tokens = await preprocess(tokens, this.preprocessors, this.hooks.preprocessors);
339338
this.options = { ...this.options, usesDtcg: this.usesDtcg };
339+
this.tokens = await preprocess(
340+
tokens,
341+
this.preprocessors,
342+
this.hooks.preprocessors,
343+
this.options,
344+
);
340345
this.hasInitializedResolve(null);
341346

342347
// For chaining

‎lib/utils/preprocess.js

+9-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
/**
1515
* @typedef {import('../../types/DesignToken.d.ts').DesignTokens} DesignTokens
16+
* @typedef {import('../../types/Config.d.ts').Config} Config
1617
* @typedef {import('../../types/Preprocessor.d.ts').Preprocessor} Preprocessor
1718
*/
1819

@@ -23,16 +24,22 @@
2324
* @param {DesignTokens} tokens
2425
* @param {string[]} [appliedPreprocessors]
2526
* @param {Record<string, Preprocessor['preprocessor']>} [preprocessorObj]
27+
* @param {Config} [options]
2628
* @returns {Promise<DesignTokens>}
2729
*/
28-
export async function preprocess(tokens, appliedPreprocessors = [], preprocessorObj = {}) {
30+
export async function preprocess(
31+
tokens,
32+
appliedPreprocessors = [],
33+
preprocessorObj = {},
34+
options = {},
35+
) {
2936
let processedTokens = tokens;
3037

3138
const preprocessors = Object.entries(preprocessorObj);
3239
if (preprocessors.length > 0) {
3340
for (const [key, preprocessor] of preprocessors) {
3441
if (appliedPreprocessors.includes(key)) {
35-
processedTokens = await preprocessor(processedTokens);
42+
processedTokens = await preprocessor(processedTokens, options);
3643
}
3744
}
3845
}

‎types/Preprocessor.d.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212
*/
1313

1414
import type { DesignTokens } from './DesignToken.d.ts';
15+
import type { Config } from './Config.d.ts';
1516

1617
export type Preprocessor = {
1718
name: string;
18-
preprocessor: (dictionary: DesignTokens) => DesignTokens | Promise<DesignTokens>;
19+
preprocessor: (dictionary: DesignTokens, options: Config) => DesignTokens | Promise<DesignTokens>;
1920
};

0 commit comments

Comments
 (0)
Please sign in to comment.