Skip to content

Commit bb2cada

Browse files
adding deprecated filter and transformer to index
1 parent d25584c commit bb2cada

7 files changed

Lines changed: 117 additions & 0 deletions

File tree

src/build.test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ describe('index.js', () => {
1313
expect(StyleDictionary.hooks.transforms["color/rgbAlpha"]).toBeDefined();
1414
expect(StyleDictionary.hooks.transforms["color/rgbaFloat"]).toBeDefined();
1515
expect(StyleDictionary.hooks.transforms["color/hexAlpha"]).toBeDefined();
16+
expect(StyleDictionary.hooks.transforms["comment/deprecated"]).toBeDefined();
1617
expect(StyleDictionary.hooks.transforms["clamp/css"]).toBeDefined();
1718
expect(StyleDictionary.hooks.transforms["name/pathToDotNotation"]).toBeDefined();
1819
expect(StyleDictionary.hooks.transforms["name/pathToCamelCase"]).toBeDefined();
@@ -37,6 +38,7 @@ describe('index.js', () => {
3738
expect(StyleDictionary.hooks.filters["isColorOrGradient"]).toBeDefined();
3839
expect(StyleDictionary.hooks.filters["isCubicBezier"]).toBeDefined();
3940
expect(StyleDictionary.hooks.filters["isClamp"]).toBeDefined();
41+
expect(StyleDictionary.hooks.filters['isDeprecated']).toBeDefined()
4042
expect(StyleDictionary.hooks.filters["isDimension"]).toBeDefined();
4143
expect(StyleDictionary.hooks.filters["isDuration"]).toBeDefined();
4244
expect(StyleDictionary.hooks.filters["isFontFamily"]).toBeDefined();

src/filter/isDeprecated.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { TransformedToken } from 'style-dictionary/types';
2+
import { isDeprecated } from './isDeprecated';
3+
4+
describe('Filter: isDeprecated', () => {
5+
const items = [{
6+
value: 'true boolean',
7+
deprecated: true,
8+
}, {
9+
value: 'true string',
10+
deprecated: "a valid string e.g. to inform about a replacement",
11+
}, {
12+
value: 'false boolean',
13+
deprecated: false,
14+
}, {
15+
value: 'false string',
16+
deprecated: "false",
17+
}, {
18+
value: 'nothing',
19+
}] as TransformedToken[];
20+
21+
it('filters deprecated tokens', () => {
22+
expect(items.filter(isDeprecated)).toStrictEqual([items[0], items[1]]);
23+
});
24+
25+
});

src/filter/isDeprecated.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { TransformedToken } from 'style-dictionary/types';
2+
/**
3+
* @name isDeprecated
4+
* @type filter
5+
* @description only returns tokens with deprecated = true
6+
*/
7+
export const isDeprecated = (token: TransformedToken): boolean => typeof token.deprecated === 'string' && token.deprecated !== 'false' || token.deprecated === true;

src/index.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ describe('index.ts', () => {
2323
expect(StyleDictionary.hooks.transforms['color/rgbAlpha']).toBeDefined()
2424
expect(StyleDictionary.hooks.transforms['color/rgbaFloat']).toBeDefined()
2525
expect(StyleDictionary.hooks.transforms['color/hexAlpha']).toBeDefined()
26+
expect(StyleDictionary.hooks.transforms['comment/deprecated']).toBeDefined()
2627
expect(StyleDictionary.hooks.transforms["clamp/css"]).toBeDefined();
2728
expect(StyleDictionary.hooks.transforms['name/pathToDotNotation']).toBeDefined()
2829
expect(StyleDictionary.hooks.transforms['name/pathToCamelCase']).toBeDefined()
@@ -47,6 +48,7 @@ describe('index.ts', () => {
4748
expect(StyleDictionary.hooks.filters['isColorOrGradient']).toBeDefined()
4849
expect(StyleDictionary.hooks.filters['isCubicBezier']).toBeDefined()
4950
expect(StyleDictionary.hooks.filters["isClamp"]).toBeDefined();
51+
expect(StyleDictionary.hooks.filters['isDeprecated']).toBeDefined()
5052
expect(StyleDictionary.hooks.filters['isDimension']).toBeDefined()
5153
expect(StyleDictionary.hooks.filters['isDuration']).toBeDefined()
5254
expect(StyleDictionary.hooks.filters['isFontFamily']).toBeDefined()

src/index.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { isClamp } from './filter/isClamp'
44
import { isColor } from './filter/isColor'
55
import { isColorOrGradient } from './filter/isColorOrGradient'
66
import { isCubicBezier } from './filter/isCubicBezier'
7+
import { isDeprecated } from './filter/isDeprecated'
78
import { isDimension } from './filter/isDimension'
89
import { isDuration } from './filter/isDuration'
910
import { isFontFamily } from './filter/isFontFamily'
@@ -28,6 +29,7 @@ import { colorAlphaToRgba } from './transformer/color-alpha-to-rgba'
2829
import { colorToHex } from './transformer/color-to-hex'
2930
import { colorToRgba } from './transformer/color-to-rgba'
3031
import { colorToRgbaFloat } from './transformer/color-to-rgba-float'
32+
import { commentDeprecated } from './transformer/comment-deprecated'
3133
import { cubicBezierCss } from './transformer/cubic-bezier-css'
3234
import { dimensionPixelToRem } from './transformer/dimension-pixel-to-rem'
3335
import { dimensionRemToPixel } from './transformer/dimension-rem-to-pixel'
@@ -95,6 +97,10 @@ OrigialStyleDictionary.registerTransform({
9597
...colorToRgbaFloat
9698
})
9799

100+
OrigialStyleDictionary.registerTransform({
101+
...commentDeprecated
102+
})
103+
98104
OrigialStyleDictionary.registerTransform({
99105
...namePathToDotNotation
100106
})
@@ -220,6 +226,11 @@ OrigialStyleDictionary.registerFilter({
220226
filter: isDuration
221227
})
222228

229+
OrigialStyleDictionary.registerFilter({
230+
name: 'isDeprecated',
231+
filter: isDeprecated
232+
})
233+
223234
OrigialStyleDictionary.registerFilter({
224235
name: 'isDimension',
225236
filter: isDimension
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { TransformedToken } from "style-dictionary/types";
2+
import { commentDeprecated } from "./comment-deprecated";
3+
4+
describe("transform: commentDeprecated", () => {
5+
const items = [
6+
{
7+
value: "true boolean",
8+
deprecated: true,
9+
},
10+
{
11+
value: "true string",
12+
deprecated: "a valid string e.g. to inform about a replacement",
13+
},
14+
{
15+
value: "false boolean",
16+
deprecated: false,
17+
},
18+
{
19+
value: "false string",
20+
deprecated: "false",
21+
},
22+
{
23+
value: "nothing",
24+
},
25+
] as TransformedToken[];
26+
27+
it("matches tokens with valid `deprecated` property", () => {
28+
expect(items.filter(commentDeprecated.filter)).toStrictEqual([
29+
items[0],
30+
items[1],
31+
]);
32+
});
33+
34+
it("adds deprecated comment to tokens", () => {
35+
expect(
36+
items
37+
.filter(commentDeprecated.filter)
38+
.map((item) => commentDeprecated.transform(item, {}, {}))
39+
).toStrictEqual([
40+
{
41+
$description: "DEPRECATED",
42+
deprecated: true,
43+
value: "true boolean",
44+
},
45+
{
46+
$description:
47+
"DEPRECATED: a valid string e.g. to inform about a replacement",
48+
deprecated: "a valid string e.g. to inform about a replacement",
49+
value: "true string",
50+
},
51+
]);
52+
});
53+
});
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { Transform, TransformedToken } from 'style-dictionary/types';
2+
import { isDeprecated } from '../filter/isDeprecated';
3+
4+
/**
5+
* commentDeprecated
6+
* @description replaces the comment of a token with the deprecated comment
7+
*/
8+
export const commentDeprecated: Transform = {
9+
name: 'comment/deprecated',
10+
type: `attribute`,
11+
transitive: true,
12+
filter: isDeprecated,
13+
transform: (token: TransformedToken) => {
14+
token.$description = `DEPRECATED${typeof token.deprecated === 'string' && token.deprecated !== 'true' ? `: ${token.deprecated}` : ''}`;
15+
return token;
16+
}
17+
}

0 commit comments

Comments
 (0)