@terrazzo/plugin-js 2.0.0-alpha.2 → 2.0.0-alpha.3

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/CHANGELOG.md CHANGED
@@ -1,15 +1,5 @@
1
1
  # @terrazzo/plugin-js
2
2
 
3
- ## 2.0.0-alpha.2
4
-
5
- ### Patch Changes
6
-
7
- - [#568](https://github.com/terrazzoapp/terrazzo/pull/568) [`67c75be`](https://github.com/terrazzoapp/terrazzo/commit/67c75be78978cece52b61cf258ccc3a875e6af48) Thanks [@drwpow](https://github.com/drwpow)! - Fix border tokens not cascading correctly across modes
8
-
9
- - Updated dependencies [[`67c75be`](https://github.com/terrazzoapp/terrazzo/commit/67c75be78978cece52b61cf258ccc3a875e6af48)]:
10
- - @terrazzo/cli@2.0.0-alpha.2
11
- - @terrazzo/token-tools@2.0.0-alpha.2
12
-
13
3
  ## 2.0.0
14
4
 
15
5
  ### Minor Changes
@@ -24,6 +14,7 @@
24
14
 
25
15
  - [#530](https://github.com/terrazzoapp/terrazzo/pull/530) [`370ed7b`](https://github.com/terrazzoapp/terrazzo/commit/370ed7b0f578a64824124145d7f4936536b37bb3) Thanks [@drwpow](https://github.com/drwpow)! - Validation moved to lint rules, which means token validation can be individually configured, and optionally extended.
26
16
  - [#553](https://github.com/terrazzoapp/terrazzo/pull/553) [`e63a627`](https://github.com/terrazzoapp/terrazzo/commit/e63a6277f61282fb608744a8348689b16f977076) Thanks [@Sidnioulz](https://github.com/Sidnioulz)! - Add support for the Token Listing format
17
+ - [#568](https://github.com/terrazzoapp/terrazzo/pull/568) [`67c75be`](https://github.com/terrazzoapp/terrazzo/commit/67c75be78978cece52b61cf258ccc3a875e6af48) Thanks [@drwpow](https://github.com/drwpow)! - Fix border tokens not cascading correctly across modes
27
18
 
28
19
  ## 0.10.3
29
20
 
package/README.md CHANGED
@@ -10,7 +10,7 @@ Requires [Node.js 20 or later](https://nodejs.org). With that installed, run:
10
10
  npm i -D @terrazzo/cli @terrazzo/plugin-js
11
11
  ```
12
12
 
13
- Add a `terrazzo.config.js` to the root of your project with:
13
+ Add a `terrazzo.config.ts` to the root of your project with:
14
14
 
15
15
  ```ts
16
16
  import { defineConfig } from "@terrazzo/cli";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/lib.ts","../src/build.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;cAEa,YAAA;cACA,aAAA;AADA,UAGI,eAAA,CAHQ;EACZ;AAEb;;;KAkBwD,EAAA,OAAA,GAAA,MAAA;EAAgB;AAGxE;AAIA;EAiBC,IAAA,CAAA,EAAA,OAAA,GAAA,MAAA;;SAjBsB,CAAA,EAAA,MAAA,EAAA;EAAM;;;;EC3Bb,IAAA,CAAA,EAAA,OAAO;EAAA;WAAG,CAAA,EAAA,CAAA,KAAA,EDoBJ,eCpBI,EAAA,IAAA,EAAA,MAAA,EAAA,GDoB8B,gBCpB9B,CAAA,OAAA,CAAA;;AAAkD,cDuB/D,WAAA,GCvB+D,uJAAA;AAmC5D,cDRH,QCQW,EDRD,MCQC,CDRM,KCQN,CAAA,OAAA,CAAA,EAAA,MAAA,CAAA;;;iBAnCR,OAAA;;ADDhB;iBCC4D;ADD5D,CAAA,CAAA,EAAa,MAAA;AACA,iBCmCG,QAAA,CDnCU;EAAA;CAAA,EAAA;EAET,aAAA,ECiC4C,gBDjC7B,CAAA,eAAA,CAAA;CAAA,CAAA,EAAA,MAAA;;;AAFnB,iBEKW,QAAA,CFLE,OAAA,CAAA,EEKiB,eFLjB,CAAA,EEKmC,MFLnC"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/lib.ts","../src/build.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;cAEa,YAAA;cACA,aAAA;AADA,UAGI,eAAA,CAHQ;EACZ;AAEb;AAqBA;AAIA;;;;AC3BA;EAmCgB,IAAA,CAAA,EAAA,OAAQ,GAAA,MAAG;;;;AChCF;;;;;sBFiBH,kCAAkC;;cAG3C,WAAA;cAIA,UAAU,OAAO;;;iBC3Bd,OAAA;;ADDhB;iBCC4D;ADD5D,CAAA,CAAA,EAAa,MAAA;AACA,iBCmCG,QAAA,CDnCU;EAAA;AAuB1B,CAvB0B,EAAA;EAET,aAAA,ECiC4C,gBDfvC,CAAA,eAAkC,CAAA;AAGxD,CAAA,CAAA,EAAa,MAAA;;;AAvBA,iBEKW,QAAA,CFLE,OAAA,CAAA,EEKiB,eFLjB,CAAA,EEKmC,MFLnC"}
package/dist/index.js CHANGED
@@ -126,11 +126,9 @@ function pluginJS(options) {
126
126
  async build({ getTransforms, outputFile }) {
127
127
  if (options?.js) {
128
128
  const js = buildJS({ getTransforms });
129
- const jsFilename = typeof options?.js === "string" ? options.js : "index.js";
130
- outputFile(jsFilename, js);
129
+ outputFile(typeof options?.js === "string" ? options.js : "index.js", js);
131
130
  const dts = buildDTS({ getTransforms });
132
- const dtsFilename = typeof options?.js === "string" ? options.js.replace(/\.js$/, ".d.ts") : "index.d.ts";
133
- outputFile(dtsFilename, dts);
131
+ outputFile(typeof options?.js === "string" ? options.js.replace(/\.js$/, ".d.ts") : "index.d.ts", dts);
134
132
  }
135
133
  }
136
134
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["TYPE_MAP: Record<Token['$type'], string>","output: string[]","tokenVals: Record<string, Record<string, string>>","transformedValue"],"sources":["../../token-tools/dist/js.js","../src/lib.ts","../src/build.ts","../src/index.ts"],"sourcesContent":["//#region src/js/index.ts\n/**\n* Convert token value to a JS string via acorn/astring.\n*/\nfunction transformJSValue(token, { mode, indent = 2, startingIndent = 0 }) {\n\tif (!(mode in token.mode)) return;\n\tconst indentStart = startingIndent > 0 ? \" \".repeat(startingIndent ?? 2) : \"\";\n\treturn JSON.stringify(token.mode[mode].$value, void 0, indent).replace(/\\n/g, `\\n${indentStart}`);\n}\n\n//#endregion\nexport { transformJSValue };\n//# sourceMappingURL=js.js.map","import type { Token, TokenNormalized, TokenTransformed } from '@terrazzo/parser';\n\nexport const FORMAT_JS_ID = 'js';\nexport const FORMAT_DTS_ID = 'd.ts';\n\nexport interface JSPluginOptions {\n /**\n * Output JS?\n * @default true\n */\n js?: boolean | string;\n /** Output JSON?\n * @default false\n */\n json?: boolean | string;\n /** Exclude token IDs from output? */\n exclude?: string[];\n /**\n * Return deeply-nested values?\n * @default: false\n */\n deep?: boolean;\n /** Override certain token values */\n transform?: (token: TokenNormalized, mode: string) => TokenTransformed['value'];\n}\n\nexport const FILE_HEADER = `/** ------------------------------------------\n * Autogenerated by ⛋ Terrazzo. DO NOT EDIT!\n * ------------------------------------------- */`;\n\nexport const TYPE_MAP: Record<Token['$type'], string> = {\n boolean: 'BooleanTokenNormalized',\n border: 'BorderTokenNormalized',\n color: 'ColorTokenNormalized',\n cubicBezier: 'CubicBezierTokenNormalized',\n dimension: 'DimensionTokenNormalized',\n duration: 'DurationTokenNormalized',\n fontFamily: 'FontFamilyTokenNormalized',\n fontWeight: 'FontWeightTokenNormalized',\n gradient: 'GradientTokenNormalized',\n link: 'LinkTokenNormalized',\n number: 'NumberTokenNormalized',\n shadow: 'ShadowTokenNormalized',\n string: 'StringTokenNormalized',\n strokeStyle: 'StrokeStyleTokenNormalized',\n typography: 'TypographyTokenNormalized',\n transition: 'TransitionTokenNormalized',\n};\n","import type { BuildHookOptions } from '@terrazzo/parser';\nimport { FILE_HEADER, FORMAT_DTS_ID, FORMAT_JS_ID, TYPE_MAP } from './lib.js';\n\nexport function buildJS({ getTransforms }: { getTransforms: BuildHookOptions['getTransforms'] }): string {\n const output: string[] = [FILE_HEADER, ''];\n\n // gather vals\n const tokenVals: Record<string, Record<string, string>> = {};\n for (const token of getTransforms({ format: FORMAT_JS_ID, id: '*' })) {\n if (!tokenVals[token.token.id]) {\n tokenVals[token.token.id] = {};\n }\n tokenVals[token.token.id]![token.mode] = token.value as string;\n }\n\n // body\n output.push('export const tokens = {');\n for (const [id, tokenValue] of Object.entries(tokenVals)) {\n output.push(` \"${id}\": {`);\n for (const [mode, modeValue] of Object.entries(tokenValue)) {\n output.push(` \"${mode}\": ${modeValue},`);\n }\n output.push(' },');\n }\n output.push('};', '');\n\n // footer\n output.push(\n `/** Get individual token */\nexport function token(tokenID, modeName = \".\") {\n return tokens[tokenID]?.[modeName];\n}`,\n '',\n );\n\n return output.join('\\n');\n}\n\nexport function buildDTS({ getTransforms }: { getTransforms: BuildHookOptions['getTransforms'] }): string {\n const output: string[] = [FILE_HEADER, ''];\n\n const importDeps = new Set<string>();\n const types = getTransforms({ format: FORMAT_DTS_ID, id: '*', mode: '.' }).map((t) => {\n importDeps.add(TYPE_MAP[t.token.$type]); // collect only necessary types\n if (t.type === 'MULTI_VALUE') {\n const description = t.value.description ? ` /** ${t.value.description} */\\n` : '';\n return `${description} \"${t.token.id}\": ${t.value.value};`;\n }\n return `\"${t.token.id}\": ${t.value};`;\n });\n\n output.push(\n 'import type {',\n ...[...importDeps].sort((a, b) => a.localeCompare(b)).map((dep) => ` ${dep},`),\n '} from \"@terrazzo/parser\";',\n '',\n 'export declare const tokens: {',\n ...types,\n '};',\n '',\n `export declare function token<K extends keyof typeof tokens>(tokenID: K, modeName?: never): (typeof tokens)[K][\".\"];\nexport declare function token<K extends keyof typeof tokens, M extends keyof (typeof tokens)[K]>(tokenID: K, modeName: M): (typeof tokens)[K][M];`,\n '',\n );\n\n return output.join('\\n');\n}\n","import type { Plugin } from '@terrazzo/parser';\nimport { transformJSValue } from '@terrazzo/token-tools/js';\nimport { buildDTS, buildJS } from './build.js';\nimport { FORMAT_DTS_ID, FORMAT_JS_ID, type JSPluginOptions, TYPE_MAP } from './lib.js';\n\nexport * from './build.js';\nexport * from './lib.js';\n\nexport default function pluginJS(options?: JSPluginOptions): Plugin {\n const customTransform = options?.transform;\n\n return {\n name: '@terrazzo/plugin-js',\n async transform({ tokens, getTransforms, setTransform }) {\n // skip work if another .js plugin has already run\n const jsTokens = getTransforms({ format: FORMAT_JS_ID, id: '*', mode: '.' });\n if (jsTokens.length) {\n return;\n }\n\n for (const [id, token] of Object.entries(tokens)) {\n // .d.ts (only default \".\" mode needed)\n setTransform(id, {\n format: FORMAT_DTS_ID,\n value: {\n description: token.$description ? String(token.$description) : '',\n value: `Record<\"${Object.keys(token.mode).join('\" | \"')}\", ${TYPE_MAP[token.$type]}[\"$value\"]>`,\n },\n mode: '.',\n });\n\n // .js (all modes)\n for (const mode of Object.keys(token.mode)) {\n if (customTransform) {\n const transformedValue = customTransform(token, mode);\n if (transformedValue !== undefined && transformedValue !== null) {\n setTransform(id, {\n format: FORMAT_JS_ID,\n value: transformedValue,\n mode,\n meta: { 'token-listing': { name: `tokens.${id}` } },\n });\n continue;\n }\n }\n const transformedValue = transformJSValue(token, { mode, startingIndent: 4 });\n if (transformedValue !== undefined) {\n setTransform(id, {\n format: FORMAT_JS_ID,\n value: transformedValue,\n mode,\n meta: { 'token-listing': { name: `tokens.${id}` } },\n });\n }\n }\n }\n },\n async build({ getTransforms, outputFile }) {\n // if (options?.json) {\n // const contents = buildJSON({ getTransforms });\n // outputFile(typeof options?.json === 'string' ? options.json : 'index.json', contents);\n // }\n if (options?.js) {\n const js = buildJS({ getTransforms });\n const jsFilename = typeof options?.js === 'string' ? options.js : 'index.js';\n outputFile(jsFilename, js);\n\n const dts = buildDTS({ getTransforms });\n const dtsFilename = typeof options?.js === 'string' ? options.js.replace(/\\.js$/, '.d.ts') : 'index.d.ts';\n outputFile(dtsFilename, dts);\n }\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["TYPE_MAP: Record<Token['$type'], string>","output: string[]","tokenVals: Record<string, Record<string, string>>","transformedValue"],"sources":["../../token-tools/dist/js.js","../src/lib.ts","../src/build.ts","../src/index.ts"],"sourcesContent":["//#region src/js/index.ts\n/**\n* Convert token value to a JS string via acorn/astring.\n*/\nfunction transformJSValue(token, { mode, indent = 2, startingIndent = 0 }) {\n\tif (!(mode in token.mode)) return;\n\tconst indentStart = startingIndent > 0 ? \" \".repeat(startingIndent ?? 2) : \"\";\n\treturn JSON.stringify(token.mode[mode].$value, void 0, indent).replace(/\\n/g, `\\n${indentStart}`);\n}\n\n//#endregion\nexport { transformJSValue };\n//# sourceMappingURL=js.js.map","import type { Token, TokenNormalized, TokenTransformed } from '@terrazzo/parser';\n\nexport const FORMAT_JS_ID = 'js';\nexport const FORMAT_DTS_ID = 'd.ts';\n\nexport interface JSPluginOptions {\n /**\n * Output JS?\n * @default true\n */\n js?: boolean | string;\n /** Output JSON?\n * @default false\n */\n json?: boolean | string;\n /** Exclude token IDs from output? */\n exclude?: string[];\n /**\n * Return deeply-nested values?\n * @default: false\n */\n deep?: boolean;\n /** Override certain token values */\n transform?: (token: TokenNormalized, mode: string) => TokenTransformed['value'];\n}\n\nexport const FILE_HEADER = `/** ------------------------------------------\n * Autogenerated by ⛋ Terrazzo. DO NOT EDIT!\n * ------------------------------------------- */`;\n\nexport const TYPE_MAP: Record<Token['$type'], string> = {\n boolean: 'BooleanTokenNormalized',\n border: 'BorderTokenNormalized',\n color: 'ColorTokenNormalized',\n cubicBezier: 'CubicBezierTokenNormalized',\n dimension: 'DimensionTokenNormalized',\n duration: 'DurationTokenNormalized',\n fontFamily: 'FontFamilyTokenNormalized',\n fontWeight: 'FontWeightTokenNormalized',\n gradient: 'GradientTokenNormalized',\n link: 'LinkTokenNormalized',\n number: 'NumberTokenNormalized',\n shadow: 'ShadowTokenNormalized',\n string: 'StringTokenNormalized',\n strokeStyle: 'StrokeStyleTokenNormalized',\n typography: 'TypographyTokenNormalized',\n transition: 'TransitionTokenNormalized',\n};\n","import type { BuildHookOptions } from '@terrazzo/parser';\nimport { FILE_HEADER, FORMAT_DTS_ID, FORMAT_JS_ID, TYPE_MAP } from './lib.js';\n\nexport function buildJS({ getTransforms }: { getTransforms: BuildHookOptions['getTransforms'] }): string {\n const output: string[] = [FILE_HEADER, ''];\n\n // gather vals\n const tokenVals: Record<string, Record<string, string>> = {};\n for (const token of getTransforms({ format: FORMAT_JS_ID, id: '*' })) {\n if (!tokenVals[token.token.id]) {\n tokenVals[token.token.id] = {};\n }\n tokenVals[token.token.id]![token.mode] = token.value as string;\n }\n\n // body\n output.push('export const tokens = {');\n for (const [id, tokenValue] of Object.entries(tokenVals)) {\n output.push(` \"${id}\": {`);\n for (const [mode, modeValue] of Object.entries(tokenValue)) {\n output.push(` \"${mode}\": ${modeValue},`);\n }\n output.push(' },');\n }\n output.push('};', '');\n\n // footer\n output.push(\n `/** Get individual token */\nexport function token(tokenID, modeName = \".\") {\n return tokens[tokenID]?.[modeName];\n}`,\n '',\n );\n\n return output.join('\\n');\n}\n\nexport function buildDTS({ getTransforms }: { getTransforms: BuildHookOptions['getTransforms'] }): string {\n const output: string[] = [FILE_HEADER, ''];\n\n const importDeps = new Set<string>();\n const types = getTransforms({ format: FORMAT_DTS_ID, id: '*', mode: '.' }).map((t) => {\n importDeps.add(TYPE_MAP[t.token.$type]); // collect only necessary types\n if (t.type === 'MULTI_VALUE') {\n const description = t.value.description ? ` /** ${t.value.description} */\\n` : '';\n return `${description} \"${t.token.id}\": ${t.value.value};`;\n }\n return `\"${t.token.id}\": ${t.value};`;\n });\n\n output.push(\n 'import type {',\n ...[...importDeps].sort((a, b) => a.localeCompare(b)).map((dep) => ` ${dep},`),\n '} from \"@terrazzo/parser\";',\n '',\n 'export declare const tokens: {',\n ...types,\n '};',\n '',\n `export declare function token<K extends keyof typeof tokens>(tokenID: K, modeName?: never): (typeof tokens)[K][\".\"];\nexport declare function token<K extends keyof typeof tokens, M extends keyof (typeof tokens)[K]>(tokenID: K, modeName: M): (typeof tokens)[K][M];`,\n '',\n );\n\n return output.join('\\n');\n}\n","import type { Plugin } from '@terrazzo/parser';\nimport { transformJSValue } from '@terrazzo/token-tools/js';\nimport { buildDTS, buildJS } from './build.js';\nimport { FORMAT_DTS_ID, FORMAT_JS_ID, type JSPluginOptions, TYPE_MAP } from './lib.js';\n\nexport * from './build.js';\nexport * from './lib.js';\n\nexport default function pluginJS(options?: JSPluginOptions): Plugin {\n const customTransform = options?.transform;\n\n return {\n name: '@terrazzo/plugin-js',\n async transform({ tokens, getTransforms, setTransform }) {\n // skip work if another .js plugin has already run\n const jsTokens = getTransforms({ format: FORMAT_JS_ID, id: '*', mode: '.' });\n if (jsTokens.length) {\n return;\n }\n\n for (const [id, token] of Object.entries(tokens)) {\n // .d.ts (only default \".\" mode needed)\n setTransform(id, {\n format: FORMAT_DTS_ID,\n value: {\n description: token.$description ? String(token.$description) : '',\n value: `Record<\"${Object.keys(token.mode).join('\" | \"')}\", ${TYPE_MAP[token.$type]}[\"$value\"]>`,\n },\n mode: '.',\n });\n\n // .js (all modes)\n for (const mode of Object.keys(token.mode)) {\n if (customTransform) {\n const transformedValue = customTransform(token, mode);\n if (transformedValue !== undefined && transformedValue !== null) {\n setTransform(id, {\n format: FORMAT_JS_ID,\n value: transformedValue,\n mode,\n meta: { 'token-listing': { name: `tokens.${id}` } },\n });\n continue;\n }\n }\n const transformedValue = transformJSValue(token, { mode, startingIndent: 4 });\n if (transformedValue !== undefined) {\n setTransform(id, {\n format: FORMAT_JS_ID,\n value: transformedValue,\n mode,\n meta: { 'token-listing': { name: `tokens.${id}` } },\n });\n }\n }\n }\n },\n async build({ getTransforms, outputFile }) {\n // if (options?.json) {\n // const contents = buildJSON({ getTransforms });\n // outputFile(typeof options?.json === 'string' ? options.json : 'index.json', contents);\n // }\n if (options?.js) {\n const js = buildJS({ getTransforms });\n const jsFilename = typeof options?.js === 'string' ? options.js : 'index.js';\n outputFile(jsFilename, js);\n\n const dts = buildDTS({ getTransforms });\n const dtsFilename = typeof options?.js === 'string' ? options.js.replace(/\\.js$/, '.d.ts') : 'index.d.ts';\n outputFile(dtsFilename, dts);\n }\n },\n };\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@terrazzo/plugin-js",
3
- "version": "2.0.0-alpha.2",
3
+ "version": "2.0.0-alpha.3",
4
4
  "description": "Generate JS, TS, and JSON from your DTCG design tokens JSON.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -21,22 +21,22 @@
21
21
  ".": "./dist/index.js",
22
22
  "./package.json": "./package.json"
23
23
  },
24
- "homepage": "https://terrazzo.app/docs/cli/integrations/js",
24
+ "homepage": "https://terrazzo.app/docs/integrations/js",
25
25
  "repository": {
26
26
  "type": "git",
27
27
  "url": "https://github.com/terrazzoapp/terrazzo.git",
28
28
  "directory": "./packages/plugin-js/"
29
29
  },
30
30
  "peerDependencies": {
31
- "@terrazzo/cli": "^2.0.0-alpha.2"
31
+ "@terrazzo/cli": "^2.0.0-alpha.3"
32
32
  },
33
33
  "dependencies": {
34
- "@terrazzo/token-tools": "^2.0.0-alpha.2"
34
+ "@terrazzo/token-tools": "^2.0.0-alpha.3"
35
35
  },
36
36
  "devDependencies": {
37
37
  "dtcg-examples": "^0.3.4",
38
- "@terrazzo/cli": "^2.0.0-alpha.2",
39
- "@terrazzo/parser": "^2.0.0-alpha.2"
38
+ "@terrazzo/cli": "^2.0.0-alpha.3",
39
+ "@terrazzo/parser": "^2.0.0-alpha.3"
40
40
  },
41
41
  "scripts": {
42
42
  "build": "rolldown -c && attw --profile esm-only --pack .",