UNPKG

@ftdata/tokens

Version:

Fulltime Design Tokens

213 lines (189 loc) 6.58 kB
/* eslint-disable @typescript-eslint/no-var-requires */ const StyleDictionaryPackage = require('style-dictionary'); const _ = require('lodash'); const fs = require('fs'); function getStyleDictionaryConfig() { return { source: [`token-generators/**/*.json`], platforms: { 'web/js': { transformGroup: 'tokens-js', buildPath: `dist/web/`, prefix: '', files: [ { destination: 'tokens.js', format: 'javascript/es6', }, ], }, 'web/ts': { transformGroup: 'tokens-js', buildPath: 'dist/web/', files: [ { destination: 'tokens.ts', format: 'javascript/es6', }, ], }, 'web/ts.d': { transformGroup: 'tokens-js', buildPath: 'dist/web/', files: [ { destination: 'tokens.d.ts', format: 'typings/es6', }, ], }, 'web/json': { transformGroup: 'tokens-json', buildPath: `dist/web/`, prefix: '', files: [ { destination: 'tokens.json', format: 'json/flat', }, ], }, 'web/css': { transformGroup: 'tokens-scss', buildPath: `dist/web/`, prefix: '', files: [ { destination: 'tokens.css', format: 'css/variables', }, ], }, 'web/scss': { transformGroup: 'tokens-scss', buildPath: `dist/web/`, prefix: '', files: [ { destination: 'tokens.scss', format: 'scss/variables', }, ], }, ios: { transformGroup: 'tokens-ios', buildPath: `dist/ios/`, prefix: '', files: [ { destination: 'tokens-all.plist', format: 'ios/plist', }, ], }, android: { transformGroup: 'tokens-android', buildPath: `dist/android/`, prefix: '', files: [ { destination: 'tokens-all.xml', format: 'android/xml', }, ], }, }, }; } StyleDictionaryPackage.registerFormat({ name: 'json/flat', formatter: function (dictionary) { return JSON.stringify(dictionary.allProperties, null, 2); }, }); const typingsES6Template = _.template(fs.readFileSync(`${__dirname}/templates/typings/es6.template`)); const CSSTemplate = _.template(fs.readFileSync(`${__dirname}/templates/typings/css.template`)); const iosTemplate = _.template(fs.readFileSync(__dirname + '/templates/ios-plist.template')); const androidTemplate = _.template(fs.readFileSync(__dirname + '/templates/android-xml.template')); StyleDictionaryPackage.registerFormat({ name: 'css/variables', formatter: CSSTemplate, }); StyleDictionaryPackage.registerFormat({ name: 'typings/es6', formatter: typingsES6Template, }); StyleDictionaryPackage.registerFormat({ name: 'ios/plist', formatter: iosTemplate, }); StyleDictionaryPackage.registerFormat({ name: 'android/xml', formatter: androidTemplate, }); StyleDictionaryPackage.registerFormat({ name: 'android/colors', formatter: androidTemplate, }); StyleDictionaryPackage.registerTransform({ name: 'size/pxToPt', type: 'value', matcher: function (prop) { return prop.value.match(/^[\d.]+px$/); }, transformer: function (prop) { return prop.value.replace(/px$/, 'pt'); }, }); StyleDictionaryPackage.registerTransform({ name: 'size/pxToDp', type: 'value', matcher: function (prop) { return prop.value.match(/^[\d.]+px$/); }, transformer: function (prop) { return prop.value.replace(/px$/, 'dp'); }, }); StyleDictionaryPackage.registerTransformGroup({ name: 'tokens-js', transforms: ['name/cti/constant', 'size/px', 'color/hex'], }); StyleDictionaryPackage.registerTransformGroup({ name: 'tokens-json', transforms: ['attribute/cti', 'name/cti/kebab', 'size/px', 'color/css'], }); StyleDictionaryPackage.registerTransformGroup({ name: 'tokens-scss', transforms: ['name/cti/kebab', 'time/seconds', 'size/px', 'color/css'], }); StyleDictionaryPackage.registerTransformGroup({ name: 'tokens-ios', transforms: ['attribute/cti', 'name/cti/camel', 'size/pxToPt'], }); StyleDictionaryPackage.registerTransformGroup({ name: 'tokens-android', transforms: ['attribute/cti', 'name/cti/camel', 'size/pxToDp'], }); StyleDictionaryPackage.transformGroup['android']; console.log('Build started...'); ['web', 'ios', 'android'].map(function (platform) { console.log('\n=============================================='); console.log(`\nProcessing: [${platform}]`); const StyleDictionary = StyleDictionaryPackage.extend(getStyleDictionaryConfig(platform)); if (platform === 'web') { StyleDictionary.buildPlatform('web/js'); StyleDictionary.buildPlatform('web/json'); StyleDictionary.buildPlatform('web/css'); StyleDictionary.buildPlatform('web/scss'); StyleDictionary.buildPlatform('web/ts'); StyleDictionary.buildPlatform('web/ts.d'); } else if (platform === 'ios') { StyleDictionary.buildPlatform('ios'); } else if (platform === 'android') { StyleDictionary.buildPlatform('android'); } console.log('\nEnd processing'); }); console.log('\n=============================================='); console.log('\nBuild completed!');