@terrazzo/plugin-sass 2.0.0-beta.3 → 2.0.0-beta.4
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/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FORMAT_ID as FORMAT_ID$1 } from "@terrazzo/plugin-css";
|
|
2
2
|
import { MULTI_VALUE } from "@terrazzo/parser";
|
|
3
|
-
import {
|
|
3
|
+
import { getTokenMatcher } from "@terrazzo/token-tools";
|
|
4
4
|
import { makeCSSVar } from "@terrazzo/token-tools/css";
|
|
5
5
|
|
|
6
6
|
//#region src/lib.ts
|
|
@@ -204,12 +204,13 @@ async function build({ getTransforms, options }) {
|
|
|
204
204
|
root.appendUse("sass:map");
|
|
205
205
|
root.appendBlankLine();
|
|
206
206
|
const tokenValuesMap = root.createMap();
|
|
207
|
+
const exclude = options?.exclude ? getTokenMatcher(options?.exclude) : void 0;
|
|
207
208
|
for (const token of getTransforms({
|
|
208
209
|
format: FORMAT_ID,
|
|
209
210
|
id: "*",
|
|
210
211
|
mode: "."
|
|
211
212
|
})) {
|
|
212
|
-
if (
|
|
213
|
+
if (exclude?.(token.token.id)) continue;
|
|
213
214
|
const tokenId = token.token.id;
|
|
214
215
|
const tokenName = token.localID ?? tokenId;
|
|
215
216
|
if (token.token.$type === "typography" && token.type === MULTI_VALUE) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["CSS_FORMAT_ID"],"sources":["../src/lib.ts","../src/node.ts","../src/build.ts","../src/index.ts"],"sourcesContent":["import type { CSSPluginOptions } from '@terrazzo/plugin-css';\n\nexport const FORMAT_ID = 'sass';\n\nexport interface SassPluginOptions {\n /** Where to output CSS */\n filename?: CSSPluginOptions['filename'];\n /** Glob patterns to exclude tokens from output */\n exclude?: CSSPluginOptions['exclude'];\n}\n\nexport const FILE_HEADER = `////\n/// Autogenerated by ⛋ Terrazzo. DO NOT EDIT!\n////\n\n@use \"sass:list\";\n@use \"sass:map\";\n@use \"sass:meta\";`;\n\nexport const MIXIN_TOKEN = `@function token($tokenName) {\n @if map.has-key($__token-values, $tokenName) == false {\n @error 'No token named \"#{$tokenName}\"';\n }\n $_token: map.get($__token-values, $tokenName);\n @if meta.type-of($_token) == map and map.has-key($_token, \"__tz-error\") {\n @error map.get($_token, \"__tz-error\");\n }\n\n @return $_token;\n}`;\n\nexport const MIXIN_TYPOGRAPHY = `@mixin typography($tokenName, $modeName: \".\") {\n @if map.has-key($__token-typography-mixins, $tokenName) == false {\n @error 'No typography mixin named \"#{$tokenName}\"';\n }\n $_mixin: map.get($__token-typography-mixins, $tokenName);\n $_properties: map.get($_mixin, \".\");\n @if map.has-key($_mixin) {\n $_properties: map.get($_mixin);\n }\n @each $_property, $_value in $_properties {\n #{$_property}: #{$_value};\n }\n}`;\n\nconst INDENT_NUM_SPACES = 2;\n\nexport function getIndent(indentationLevel: number): string {\n return indentationLevel > 0 ? ' '.repeat(indentationLevel * INDENT_NUM_SPACES) : '';\n}\n","import { makeCSSVar } from '@terrazzo/token-tools/css';\nimport { getIndent } from './lib.js';\n\nexport type SassMapKey = string | number;\nexport type SassMapValue = string | SassToken;\nexport type SassMapValues = Record<SassMapKey, SassMapValue> | Iterable<[SassMapKey, SassMapValue]>;\n\nexport abstract class SassToken {\n constructor(public readonly indentationLevel: number = 0) {}\n\n abstract format(): string;\n\n public toString(): string {\n return `${getIndent(this.indentationLevel)}${this.format()}`;\n }\n\n public createMap(values?: SassMapValues): SassMap {\n return new SassMap(this.indentationLevel + 1, values);\n }\n\n public createVariableDefinition(name: string, value: SassToken): VariableDefinitionSassToken {\n return new VariableDefinitionSassToken(this.indentationLevel + 1, name, value);\n }\n}\n\nexport abstract class ValueSassToken extends SassToken {\n public toString(): string {\n return this.format();\n }\n}\n\nexport class StringSassToken extends SassToken {\n constructor(\n public readonly value: string,\n indentationLevel = 0,\n ) {\n super(indentationLevel);\n }\n\n public format(): string {\n return this.value;\n }\n}\n\nexport class CssVarReferenceSassToken extends StringSassToken {\n public format(): string {\n return `${makeCSSVar(this.value, { wrapVar: true })}`;\n }\n}\n\nexport class BlankLineSassToken extends StringSassToken {\n constructor() {\n super('');\n }\n}\n\nexport class RootSassToken extends SassToken {\n private readonly SEPARATOR = '\\n';\n\n private sassTokens: SassToken[];\n\n constructor() {\n super(-1);\n this.sassTokens = [];\n }\n\n public append(sassToken: SassToken) {\n this.sassTokens.push(sassToken);\n }\n\n public appendString(value: string) {\n this.append(new StringSassToken(value));\n }\n\n public appendVariableDefinition(name: string, sassToken: SassToken) {\n this.append(this.createVariableDefinition(name, sassToken));\n }\n\n public appendBlankLine() {\n this.append(new BlankLineSassToken());\n }\n\n public appendUse(value: string, as_?: string) {\n this.append(new UseSassToken(value, as_));\n }\n\n public format(): string {\n return this.sassTokens.map((sassToken) => sassToken).join(this.SEPARATOR);\n }\n}\n\nexport class SassMap extends ValueSassToken {\n private readonly MAP_OPEN = '(';\n private readonly MAP_CLOSE = ')';\n private readonly MAP_VALUE_SEPARATOR = ',\\n';\n\n private readonly SEPARATOR = '\\n';\n\n private readonly values: Map<SassMapKey, SassMapValue>;\n\n constructor(indentationLevel: number, values?: SassMapValues) {\n super(indentationLevel);\n this.values = new Map<SassMapKey, SassMapValue>(values ? this.sassMapValuesToIter(values) : undefined);\n }\n\n public set(key: SassMapKey, value: SassMapValue) {\n this.values.set(key, value);\n }\n\n public extend(values: SassMapValues) {\n for (const [key, value] of this.sassMapValuesToIter(values)) {\n this.set(key, value);\n }\n }\n\n public setMap(key: SassMapKey, values: SassMapValues) {\n const nestedMap = this.createMap(values);\n this.set(key, nestedMap);\n return nestedMap;\n }\n\n public format(): string {\n return [\n this.MAP_OPEN,\n Array.from(\n this.values\n .entries()\n .map(([key, value]) => new StringSassToken(`\"${key}\": ${value}`, this.indentationLevel + 1)),\n ).join(this.MAP_VALUE_SEPARATOR),\n new StringSassToken(this.MAP_CLOSE, this.indentationLevel),\n ].join(this.SEPARATOR);\n }\n\n private sassMapValuesToIter(values: SassMapValues) {\n return Symbol.iterator in values && typeof values[Symbol.iterator] === 'function' ? values : Object.entries(values);\n }\n}\n\nexport class UseSassToken extends StringSassToken {\n constructor(value: string, as_?: string) {\n const valueQuoted = `\"${value}\"`;\n const atUseUrl = as_ ? `${valueQuoted} as ${as_}` : valueQuoted;\n super(`@use ${atUseUrl};`);\n }\n}\n\nexport class VariableDefinitionSassToken extends SassToken {\n constructor(\n indentationLevel: number,\n public readonly name: string,\n public readonly value: SassToken,\n ) {\n super(indentationLevel);\n }\n\n public format(): string {\n return `${this.name}: ${this.value};`;\n }\n}\n","import { type BuildHookOptions, MULTI_VALUE } from '@terrazzo/parser';\nimport { getTokenMatch } from '@terrazzo/token-tools';\nimport { FORMAT_ID, type SassPluginOptions } from './lib.js';\nimport { CssVarReferenceSassToken, RootSassToken, type SassMapKey, type SassMapValue, type SassToken } from './node.js';\n\nexport interface BuildParams {\n getTransforms: BuildHookOptions['getTransforms'];\n options?: SassPluginOptions;\n}\n\nconst FONT_SHORTHAND_PROPERTIES = [\n 'font-family',\n 'font-size',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'line-height',\n];\n\nconst SASS_HEADER = `////\n/// Autogenerated by ⛋ Terrazzo. DO NOT EDIT!\n////\n`;\n\nconst SASS_LIB = `@function token($tokenName) {\n @if not map.has-key($__token-values, $tokenName) {\n @error 'No token named \"#{$tokenName}\"';\n }\n\n $token: map.get($__token-values, $tokenName);\n\n @if $token == \"__tz-error-typography\" {\n @error \"This is a typography mixin. Use \\`@include typography(\"#{tokenId}\")\\` instead.\";\n }\n\n @return $token;\n}\n\n@mixin typography($tokenName) {\n @if not map.has-key($__token-typography-mixins, $tokenName) {\n @error 'No typography mixin named \"#{$tokenName}\"';\n }\n\n $mixin: map.get($__token-typography-mixins, $tokenName);\n\n @each $_property, $_value in $mixin {\n #{$_property}: #{$_value};\n }\n}\n`;\n\nexport default async function build({ getTransforms, options }: BuildParams): Promise<string> {\n const root = new RootSassToken();\n root.appendString(SASS_HEADER);\n root.appendUse('sass:list');\n root.appendUse('sass:map');\n root.appendBlankLine();\n\n const tokenValuesMap = root.createMap();\n\n for (const token of getTransforms({ format: FORMAT_ID, id: '*', mode: '.' })) {\n if (getTokenMatch(token.token.id, options?.exclude ?? [])) {\n continue;\n }\n const tokenId = token.token.id;\n const tokenName = token.localID ?? tokenId;\n if (token.token.$type === 'typography' && token.type === MULTI_VALUE) {\n const tokenValue = token.value;\n const typographySassVars = new Map<SassMapKey, SassToken>(\n Object.keys(tokenValue).map((key) => [\n `${tokenId}.${key}`,\n new CssVarReferenceSassToken(`${tokenName}-${key}`),\n ]),\n );\n if ('font-size' in tokenValue && 'font-family' in tokenValue) {\n typographySassVars.set(tokenId, new CssVarReferenceSassToken(tokenName));\n }\n tokenValuesMap.extend(typographySassVars);\n } else {\n tokenValuesMap.set(tokenId, new CssVarReferenceSassToken(tokenName));\n }\n }\n root.appendVariableDefinition('$__token-values', tokenValuesMap);\n root.appendBlankLine();\n const tokenTypographyMixinsMap = root.createMap();\n\n for (const token of getTransforms({ format: 'css', id: '*', mode: '.', $type: 'typography' })) {\n if (typeof token.value === 'string') {\n continue;\n }\n const tokenId = token.token.id;\n const tokenName = token.localID ?? tokenId;\n const tokenValue = token.value;\n const values = { ...token.value };\n const fontMap = tokenTypographyMixinsMap.createMap();\n if ('font-size' in tokenValue && 'font-family' in tokenValue) {\n fontMap.set('font', new CssVarReferenceSassToken(`${tokenName}`));\n for (const property of FONT_SHORTHAND_PROPERTIES) {\n delete values[property];\n }\n }\n fontMap.extend(\n Object.keys(values).map(\n (propertyName) =>\n [propertyName, new CssVarReferenceSassToken(`${tokenName}-${propertyName}`)] as [SassMapKey, SassMapValue],\n ),\n );\n tokenTypographyMixinsMap.set(tokenId, fontMap);\n }\n\n root.appendVariableDefinition('$__token-typography-mixins', tokenTypographyMixinsMap);\n root.appendBlankLine();\n root.appendString(SASS_LIB);\n return root.toString();\n}\n","import type { Plugin } from '@terrazzo/parser';\nimport { FORMAT_ID as CSS_FORMAT_ID } from '@terrazzo/plugin-css';\nimport build from './build.js';\nimport { FORMAT_ID, type SassPluginOptions } from './lib.js';\n\nexport * from './build.js';\nexport * from './lib.js';\nexport * from './node.js';\n\nexport default function pluginSass(options?: SassPluginOptions): Plugin {\n const filename = options?.filename ?? 'index.scss';\n\n return {\n name: '@terrazzo/plugin-sass',\n enforce: 'post',\n config(config) {\n // plugin-css is required for transforms. throw error\n if (!config.plugins.some((p) => p.name === '@terrazzo/plugin-css')) {\n throw new Error(\n `@terrazzo/plugin-sass relies on @terrazzo/plugin-css.\nPlease install @terrazzo/plugin-css and follow setup to add to your config.`,\n );\n }\n },\n\n async transform({ getTransforms, setTransform }) {\n const tokens = getTransforms({ format: CSS_FORMAT_ID });\n for (const token of tokens) {\n const value = `var(${token.localID})`;\n let listingName = `token(\"${token.token.id}\")`;\n if (token.token.$type === 'typography') {\n listingName =\n token.mode !== '.' ? `typography(\"${token.token.id}\", \"${token.mode}\")` : `typography(\"${token.token.id}\")`;\n }\n setTransform(token.id, {\n format: FORMAT_ID,\n localID: token.id,\n value,\n mode: token.mode,\n meta: { 'token-listing': { name: listingName } },\n });\n }\n },\n\n async build({ getTransforms, outputFile }) {\n const output = await build({ getTransforms, options });\n outputFile(filename, output);\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["CSS_FORMAT_ID"],"sources":["../src/lib.ts","../src/node.ts","../src/build.ts","../src/index.ts"],"sourcesContent":["import type { CSSPluginOptions } from '@terrazzo/plugin-css';\n\nexport const FORMAT_ID = 'sass';\n\nexport interface SassPluginOptions {\n /** Where to output CSS */\n filename?: CSSPluginOptions['filename'];\n /** Glob patterns to exclude tokens from output */\n exclude?: CSSPluginOptions['exclude'];\n}\n\nexport const FILE_HEADER = `////\n/// Autogenerated by ⛋ Terrazzo. DO NOT EDIT!\n////\n\n@use \"sass:list\";\n@use \"sass:map\";\n@use \"sass:meta\";`;\n\nexport const MIXIN_TOKEN = `@function token($tokenName) {\n @if map.has-key($__token-values, $tokenName) == false {\n @error 'No token named \"#{$tokenName}\"';\n }\n $_token: map.get($__token-values, $tokenName);\n @if meta.type-of($_token) == map and map.has-key($_token, \"__tz-error\") {\n @error map.get($_token, \"__tz-error\");\n }\n\n @return $_token;\n}`;\n\nexport const MIXIN_TYPOGRAPHY = `@mixin typography($tokenName, $modeName: \".\") {\n @if map.has-key($__token-typography-mixins, $tokenName) == false {\n @error 'No typography mixin named \"#{$tokenName}\"';\n }\n $_mixin: map.get($__token-typography-mixins, $tokenName);\n $_properties: map.get($_mixin, \".\");\n @if map.has-key($_mixin) {\n $_properties: map.get($_mixin);\n }\n @each $_property, $_value in $_properties {\n #{$_property}: #{$_value};\n }\n}`;\n\nconst INDENT_NUM_SPACES = 2;\n\nexport function getIndent(indentationLevel: number): string {\n return indentationLevel > 0 ? ' '.repeat(indentationLevel * INDENT_NUM_SPACES) : '';\n}\n","import { makeCSSVar } from '@terrazzo/token-tools/css';\nimport { getIndent } from './lib.js';\n\nexport type SassMapKey = string | number;\nexport type SassMapValue = string | SassToken;\nexport type SassMapValues = Record<SassMapKey, SassMapValue> | Iterable<[SassMapKey, SassMapValue]>;\n\nexport abstract class SassToken {\n constructor(public readonly indentationLevel: number = 0) {}\n\n abstract format(): string;\n\n public toString(): string {\n return `${getIndent(this.indentationLevel)}${this.format()}`;\n }\n\n public createMap(values?: SassMapValues): SassMap {\n return new SassMap(this.indentationLevel + 1, values);\n }\n\n public createVariableDefinition(name: string, value: SassToken): VariableDefinitionSassToken {\n return new VariableDefinitionSassToken(this.indentationLevel + 1, name, value);\n }\n}\n\nexport abstract class ValueSassToken extends SassToken {\n public toString(): string {\n return this.format();\n }\n}\n\nexport class StringSassToken extends SassToken {\n constructor(\n public readonly value: string,\n indentationLevel = 0,\n ) {\n super(indentationLevel);\n }\n\n public format(): string {\n return this.value;\n }\n}\n\nexport class CssVarReferenceSassToken extends StringSassToken {\n public format(): string {\n return `${makeCSSVar(this.value, { wrapVar: true })}`;\n }\n}\n\nexport class BlankLineSassToken extends StringSassToken {\n constructor() {\n super('');\n }\n}\n\nexport class RootSassToken extends SassToken {\n private readonly SEPARATOR = '\\n';\n\n private sassTokens: SassToken[];\n\n constructor() {\n super(-1);\n this.sassTokens = [];\n }\n\n public append(sassToken: SassToken) {\n this.sassTokens.push(sassToken);\n }\n\n public appendString(value: string) {\n this.append(new StringSassToken(value));\n }\n\n public appendVariableDefinition(name: string, sassToken: SassToken) {\n this.append(this.createVariableDefinition(name, sassToken));\n }\n\n public appendBlankLine() {\n this.append(new BlankLineSassToken());\n }\n\n public appendUse(value: string, as_?: string) {\n this.append(new UseSassToken(value, as_));\n }\n\n public format(): string {\n return this.sassTokens.map((sassToken) => sassToken).join(this.SEPARATOR);\n }\n}\n\nexport class SassMap extends ValueSassToken {\n private readonly MAP_OPEN = '(';\n private readonly MAP_CLOSE = ')';\n private readonly MAP_VALUE_SEPARATOR = ',\\n';\n\n private readonly SEPARATOR = '\\n';\n\n private readonly values: Map<SassMapKey, SassMapValue>;\n\n constructor(indentationLevel: number, values?: SassMapValues) {\n super(indentationLevel);\n this.values = new Map<SassMapKey, SassMapValue>(values ? this.sassMapValuesToIter(values) : undefined);\n }\n\n public set(key: SassMapKey, value: SassMapValue) {\n this.values.set(key, value);\n }\n\n public extend(values: SassMapValues) {\n for (const [key, value] of this.sassMapValuesToIter(values)) {\n this.set(key, value);\n }\n }\n\n public setMap(key: SassMapKey, values: SassMapValues) {\n const nestedMap = this.createMap(values);\n this.set(key, nestedMap);\n return nestedMap;\n }\n\n public format(): string {\n return [\n this.MAP_OPEN,\n Array.from(\n this.values\n .entries()\n .map(([key, value]) => new StringSassToken(`\"${key}\": ${value}`, this.indentationLevel + 1)),\n ).join(this.MAP_VALUE_SEPARATOR),\n new StringSassToken(this.MAP_CLOSE, this.indentationLevel),\n ].join(this.SEPARATOR);\n }\n\n private sassMapValuesToIter(values: SassMapValues) {\n return Symbol.iterator in values && typeof values[Symbol.iterator] === 'function' ? values : Object.entries(values);\n }\n}\n\nexport class UseSassToken extends StringSassToken {\n constructor(value: string, as_?: string) {\n const valueQuoted = `\"${value}\"`;\n const atUseUrl = as_ ? `${valueQuoted} as ${as_}` : valueQuoted;\n super(`@use ${atUseUrl};`);\n }\n}\n\nexport class VariableDefinitionSassToken extends SassToken {\n constructor(\n indentationLevel: number,\n public readonly name: string,\n public readonly value: SassToken,\n ) {\n super(indentationLevel);\n }\n\n public format(): string {\n return `${this.name}: ${this.value};`;\n }\n}\n","import { type BuildHookOptions, MULTI_VALUE } from '@terrazzo/parser';\nimport { getTokenMatcher } from '@terrazzo/token-tools';\nimport { FORMAT_ID, type SassPluginOptions } from './lib.js';\nimport { CssVarReferenceSassToken, RootSassToken, type SassMapKey, type SassMapValue, type SassToken } from './node.js';\n\nexport interface BuildParams {\n getTransforms: BuildHookOptions['getTransforms'];\n options?: SassPluginOptions;\n}\n\nconst FONT_SHORTHAND_PROPERTIES = [\n 'font-family',\n 'font-size',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'line-height',\n];\n\nconst SASS_HEADER = `////\n/// Autogenerated by ⛋ Terrazzo. DO NOT EDIT!\n////\n`;\n\nconst SASS_LIB = `@function token($tokenName) {\n @if not map.has-key($__token-values, $tokenName) {\n @error 'No token named \"#{$tokenName}\"';\n }\n\n $token: map.get($__token-values, $tokenName);\n\n @if $token == \"__tz-error-typography\" {\n @error \"This is a typography mixin. Use \\`@include typography(\"#{tokenId}\")\\` instead.\";\n }\n\n @return $token;\n}\n\n@mixin typography($tokenName) {\n @if not map.has-key($__token-typography-mixins, $tokenName) {\n @error 'No typography mixin named \"#{$tokenName}\"';\n }\n\n $mixin: map.get($__token-typography-mixins, $tokenName);\n\n @each $_property, $_value in $mixin {\n #{$_property}: #{$_value};\n }\n}\n`;\n\nexport default async function build({ getTransforms, options }: BuildParams): Promise<string> {\n const root = new RootSassToken();\n root.appendString(SASS_HEADER);\n root.appendUse('sass:list');\n root.appendUse('sass:map');\n root.appendBlankLine();\n\n const tokenValuesMap = root.createMap();\n\n const exclude = options?.exclude ? getTokenMatcher(options?.exclude) : undefined;\n\n for (const token of getTransforms({ format: FORMAT_ID, id: '*', mode: '.' })) {\n if (exclude?.(token.token.id)) {\n continue;\n }\n const tokenId = token.token.id;\n const tokenName = token.localID ?? tokenId;\n if (token.token.$type === 'typography' && token.type === MULTI_VALUE) {\n const tokenValue = token.value;\n const typographySassVars = new Map<SassMapKey, SassToken>(\n Object.keys(tokenValue).map((key) => [\n `${tokenId}.${key}`,\n new CssVarReferenceSassToken(`${tokenName}-${key}`),\n ]),\n );\n if ('font-size' in tokenValue && 'font-family' in tokenValue) {\n typographySassVars.set(tokenId, new CssVarReferenceSassToken(tokenName));\n }\n tokenValuesMap.extend(typographySassVars);\n } else {\n tokenValuesMap.set(tokenId, new CssVarReferenceSassToken(tokenName));\n }\n }\n root.appendVariableDefinition('$__token-values', tokenValuesMap);\n root.appendBlankLine();\n const tokenTypographyMixinsMap = root.createMap();\n\n for (const token of getTransforms({ format: 'css', id: '*', mode: '.', $type: 'typography' })) {\n if (typeof token.value === 'string') {\n continue;\n }\n const tokenId = token.token.id;\n const tokenName = token.localID ?? tokenId;\n const tokenValue = token.value;\n const values = { ...token.value };\n const fontMap = tokenTypographyMixinsMap.createMap();\n if ('font-size' in tokenValue && 'font-family' in tokenValue) {\n fontMap.set('font', new CssVarReferenceSassToken(`${tokenName}`));\n for (const property of FONT_SHORTHAND_PROPERTIES) {\n delete values[property];\n }\n }\n fontMap.extend(\n Object.keys(values).map(\n (propertyName) =>\n [propertyName, new CssVarReferenceSassToken(`${tokenName}-${propertyName}`)] as [SassMapKey, SassMapValue],\n ),\n );\n tokenTypographyMixinsMap.set(tokenId, fontMap);\n }\n\n root.appendVariableDefinition('$__token-typography-mixins', tokenTypographyMixinsMap);\n root.appendBlankLine();\n root.appendString(SASS_LIB);\n return root.toString();\n}\n","import type { Plugin } from '@terrazzo/parser';\nimport { FORMAT_ID as CSS_FORMAT_ID } from '@terrazzo/plugin-css';\nimport build from './build.js';\nimport { FORMAT_ID, type SassPluginOptions } from './lib.js';\n\nexport * from './build.js';\nexport * from './lib.js';\nexport * from './node.js';\n\nexport default function pluginSass(options?: SassPluginOptions): Plugin {\n const filename = options?.filename ?? 'index.scss';\n\n return {\n name: '@terrazzo/plugin-sass',\n enforce: 'post',\n config(config) {\n // plugin-css is required for transforms. throw error\n if (!config.plugins.some((p) => p.name === '@terrazzo/plugin-css')) {\n throw new Error(\n `@terrazzo/plugin-sass relies on @terrazzo/plugin-css.\nPlease install @terrazzo/plugin-css and follow setup to add to your config.`,\n );\n }\n },\n\n async transform({ getTransforms, setTransform }) {\n const tokens = getTransforms({ format: CSS_FORMAT_ID });\n for (const token of tokens) {\n const value = `var(${token.localID})`;\n let listingName = `token(\"${token.token.id}\")`;\n if (token.token.$type === 'typography') {\n listingName =\n token.mode !== '.' ? `typography(\"${token.token.id}\", \"${token.mode}\")` : `typography(\"${token.token.id}\")`;\n }\n setTransform(token.id, {\n format: FORMAT_ID,\n localID: token.id,\n value,\n mode: token.mode,\n meta: { 'token-listing': { name: listingName } },\n });\n }\n },\n\n async build({ getTransforms, outputFile }) {\n const output = await build({ getTransforms, options });\n outputFile(filename, output);\n },\n };\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@terrazzo/plugin-sass",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.4",
|
|
4
4
|
"description": "Generate .scss from your DTCG design tokens JSON.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -27,18 +27,18 @@
|
|
|
27
27
|
"directory": "packages/plugin-sass"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
|
-
"@terrazzo/cli": "^2.0.0-beta.
|
|
31
|
-
"@terrazzo/parser": "^2.0.0-beta.
|
|
32
|
-
"@terrazzo/plugin-css": "^2.0.0-beta.
|
|
30
|
+
"@terrazzo/cli": "^2.0.0-beta.4",
|
|
31
|
+
"@terrazzo/parser": "^2.0.0-beta.4",
|
|
32
|
+
"@terrazzo/plugin-css": "^2.0.0-beta.4"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"wildcard-match": "^5.1.4",
|
|
36
|
-
"@terrazzo/token-tools": "^2.0.0-beta.
|
|
36
|
+
"@terrazzo/token-tools": "^2.0.0-beta.4"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@terrazzo/cli": "^2.0.0-beta.
|
|
40
|
-
"@terrazzo/parser": "^2.0.0-beta.
|
|
41
|
-
"@terrazzo/plugin-css": "^2.0.0-beta.
|
|
39
|
+
"@terrazzo/cli": "^2.0.0-beta.4",
|
|
40
|
+
"@terrazzo/parser": "^2.0.0-beta.4",
|
|
41
|
+
"@terrazzo/plugin-css": "^2.0.0-beta.4"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
44
|
"build": "rolldown -c && attw --profile esm-only --pack .",
|