首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在StyleDictionary中用registerTransform方法访问完整的字典?

如何在StyleDictionary中用registerTransform方法访问完整的字典?
EN

Stack Overflow用户
提问于 2021-09-22 13:24:14
回答 1查看 59关注 0票数 0

非常简单的问题,我注册了一个转换,转换器需要一个项目,实际上是一个设计令牌,它位于我应用这个转换的同一个文件中。因此,我需要访问dictionary.properties以通过其name检索此元素,该元素用于转换所有其他元素。

代码语言:javascript
复制
    this.#handler.registerTransform({
      name: 'my/size/transform',
      type: 'value',
      matcher: (prop) => {
        return prop?.attributes?.category === 'size'
      },
      transformer: (prop, options) => {
        return parseFloat(prop.original.value) + [A DESIGN TOKEN DATA COMING FROM DICTIONARY];
      }
    })

transformer中,我只能访问propoptions,这是不够的,而且我认为在this.#handler中也没有可用的信息(为了澄清this.#handler = require('style-dictionary'))可以访问这些信息吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-23 06:26:46

我发现了这种方法,因为有prop.filePath信息,所以我直接从文件系统中读取它,并将其解析为对象。它是有效的,我没有看到性能的大幅下降(因为这种访问是在循环中完成的),但它是有效的:

代码语言:javascript
复制
    this.#handler.registerTransform({
      name: 'my/size/transform',
      type: 'value',
      matcher: (prop) => {
        return prop?.attributes?.category === 'size'
      },
      transformer: (prop) => {
        const dictionary = JSON.parse(
          fs.readFileSync(prop.filePath).toString()
        )
        return parseFloat(prop.original.value) + dictionary['design-token-to-fetch'].value;
      }
    })

也许像这样来减少文件系统访问:

代码语言:javascript
复制
    let dictionary: any

    this.#handler.registerTransform({
      name: 'my/size/transform',
      type: 'value',
      matcher: (prop) => {
        return prop?.attributes?.category === 'size'
      },
      transformer: (prop) => {
        dictionary ??= JSON.parse(
          fs.readFileSync(prop.filePath).toString()
        )
        return parseFloat(prop.original.value) + dictionary['design-token-to-fetch'].value;
      }
    })

更好的想法是非常受欢迎的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69285142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档