@tamagui/generate-themes 1.39.5 → 1.39.7

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.
@@ -68,17 +68,24 @@ async function generateThemes(inputFile) {
68
68
  import_module.default.prototype.require = ogRequire;
69
69
  }
70
70
  }
71
+ const dedupedTokens = /* @__PURE__ */ new Map();
71
72
  function generatedThemesToTypescript(themes) {
72
- const deduped = /* @__PURE__ */ new Map();
73
- const dedupedToNames = /* @__PURE__ */ new Map();
73
+ const dedupedThemes = /* @__PURE__ */ new Map();
74
+ const dedupedThemeToNames = /* @__PURE__ */ new Map();
74
75
  for (const name in themes) {
75
76
  const theme = themes[name];
77
+ for (const [key2, value] of Object.entries(theme)) {
78
+ const uniqueKey = `${name}_${key2}`;
79
+ if (!dedupedTokens.has(value)) {
80
+ dedupedTokens.set(value, uniqueKey);
81
+ }
82
+ }
76
83
  const key = JSON.stringify(theme);
77
- if (deduped.has(key)) {
78
- dedupedToNames.set(key, [...dedupedToNames.get(key), name]);
84
+ if (dedupedThemes.has(key)) {
85
+ dedupedThemeToNames.set(key, [...dedupedThemeToNames.get(key), name]);
79
86
  } else {
80
- deduped.set(key, theme);
81
- dedupedToNames.set(key, [name]);
87
+ dedupedThemes.set(key, theme);
88
+ dedupedThemeToNames.set(key, [name]);
82
89
  }
83
90
  }
84
91
  const baseTypeString = `type Theme = {
@@ -89,9 +96,14 @@ ${Object.entries(themes.light || themes[Object.keys(themes)[0]]).map(([k]) => {
89
96
  }`;
90
97
  let themesString = `${baseTypeString}
91
98
  `;
92
- deduped.forEach((theme) => {
99
+ dedupedTokens.forEach((names, value) => {
100
+ themesString += `const ${names} = '${value}'
101
+ `;
102
+ });
103
+ themesString += "\n";
104
+ dedupedThemes.forEach((theme) => {
93
105
  const key = JSON.stringify(theme);
94
- const [baseName, ...restNames] = dedupedToNames.get(key);
106
+ const [baseName, ...restNames] = dedupedThemeToNames.get(key);
95
107
  const baseTheme = `export const ${baseName} = ${objectToJsString(theme)} as Theme`;
96
108
  themesString += `
97
109
  ${baseTheme}`;
@@ -109,7 +121,10 @@ ${baseTheme}`;
109
121
  function objectToJsString(obj, indent = 4) {
110
122
  const whitespace = new Array(indent).fill(" ").join("");
111
123
  return `{
112
- ${Object.entries(obj).map(([k, v]) => `${whitespace}${k}: '${v}'`).join(",\n")}
124
+ ${Object.entries(obj).map(([k, v]) => {
125
+ const variableName = dedupedTokens.get(v);
126
+ return `${whitespace}${k}: ${variableName}`;
127
+ }).join(",\n")}
113
128
  }`;
114
129
  }
115
130
  function createThemeIntercept(createThemeExport, themeBuilderInterceptOpts) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/generate-themes.ts"],
4
- "mappings": "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",
5
- "names": ["Module", "target"]
4
+ "mappings": "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",
5
+ "names": ["Module", "key", "target"]
6
6
  }
@@ -35,6 +35,7 @@ var import_path = require("path");
35
35
  var fs = __toESM(require("fs-extra"));
36
36
  async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
37
37
  const { generated, state } = generatedOutput;
38
+ const tamaguiDotDirExists = await fs.pathExists(tamaguiDotDir);
38
39
  const themeBuilderStatePath = (0, import_path.join)(tamaguiDotDir, `theme-builder.json`);
39
40
  if (process.env.DEBUG === "tamagui") {
40
41
  console.log(`Generated themes:`, JSON.stringify({ generated, state }, null, 2));
@@ -42,7 +43,7 @@ async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
42
43
  }
43
44
  await Promise.all([
44
45
  fs.writeFile(outPath, generated),
45
- state ? fs.writeFile(themeBuilderStatePath, JSON.stringify(state)) : null
46
+ state && tamaguiDotDirExists ? fs.writeFile(themeBuilderStatePath, JSON.stringify(state)) : null
46
47
  ]);
47
48
  }
48
49
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/write-generate-themes.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAqB;AAErB,SAAoB;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,QAAM,EAAE,WAAW,MAAM,IAAI;AAC7B,QAAM,4BAAwB,kBAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,EAAE,WAAW,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9E,YAAQ,IAAI,qBAAqB,EAAE,SAAS,sBAAsB,CAAC;AAAA,EACrE;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB,GAAG,UAAU,SAAS,SAAS;AAAA,IAC/B,QAAQ,GAAG,UAAU,uBAAuB,KAAK,UAAU,KAAK,CAAC,IAAI;AAAA,EACvE,CAAC;AACH;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAqB;AAErB,SAAoB;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,QAAM,EAAE,WAAW,MAAM,IAAI;AAC7B,QAAM,sBAAsB,MAAM,GAAG,WAAW,aAAa;AAC7D,QAAM,4BAAwB,kBAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,EAAE,WAAW,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9E,YAAQ,IAAI,qBAAqB,EAAE,SAAS,sBAAsB,CAAC;AAAA,EACrE;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB,GAAG,UAAU,SAAS,SAAS;AAAA,IAC/B,SAAS,sBACL,GAAG,UAAU,uBAAuB,KAAK,UAAU,KAAK,CAAC,IACzD;AAAA,EACN,CAAC;AACH;",
5
5
  "names": []
6
6
  }
@@ -35,17 +35,24 @@ async function generateThemes(inputFile) {
35
35
  Module.prototype.require = ogRequire;
36
36
  }
37
37
  }
38
+ const dedupedTokens = /* @__PURE__ */ new Map();
38
39
  function generatedThemesToTypescript(themes) {
39
- const deduped = /* @__PURE__ */ new Map();
40
- const dedupedToNames = /* @__PURE__ */ new Map();
40
+ const dedupedThemes = /* @__PURE__ */ new Map();
41
+ const dedupedThemeToNames = /* @__PURE__ */ new Map();
41
42
  for (const name in themes) {
42
43
  const theme = themes[name];
44
+ for (const [key2, value] of Object.entries(theme)) {
45
+ const uniqueKey = `${name}_${key2}`;
46
+ if (!dedupedTokens.has(value)) {
47
+ dedupedTokens.set(value, uniqueKey);
48
+ }
49
+ }
43
50
  const key = JSON.stringify(theme);
44
- if (deduped.has(key)) {
45
- dedupedToNames.set(key, [...dedupedToNames.get(key), name]);
51
+ if (dedupedThemes.has(key)) {
52
+ dedupedThemeToNames.set(key, [...dedupedThemeToNames.get(key), name]);
46
53
  } else {
47
- deduped.set(key, theme);
48
- dedupedToNames.set(key, [name]);
54
+ dedupedThemes.set(key, theme);
55
+ dedupedThemeToNames.set(key, [name]);
49
56
  }
50
57
  }
51
58
  const baseTypeString = `type Theme = {
@@ -56,9 +63,14 @@ ${Object.entries(themes.light || themes[Object.keys(themes)[0]]).map(([k]) => {
56
63
  }`;
57
64
  let themesString = `${baseTypeString}
58
65
  `;
59
- deduped.forEach((theme) => {
66
+ dedupedTokens.forEach((names, value) => {
67
+ themesString += `const ${names} = '${value}'
68
+ `;
69
+ });
70
+ themesString += "\n";
71
+ dedupedThemes.forEach((theme) => {
60
72
  const key = JSON.stringify(theme);
61
- const [baseName, ...restNames] = dedupedToNames.get(key);
73
+ const [baseName, ...restNames] = dedupedThemeToNames.get(key);
62
74
  const baseTheme = `export const ${baseName} = ${objectToJsString(theme)} as Theme`;
63
75
  themesString += `
64
76
  ${baseTheme}`;
@@ -76,7 +88,10 @@ ${baseTheme}`;
76
88
  function objectToJsString(obj, indent = 4) {
77
89
  const whitespace = new Array(indent).fill(" ").join("");
78
90
  return `{
79
- ${Object.entries(obj).map(([k, v]) => `${whitespace}${k}: '${v}'`).join(",\n")}
91
+ ${Object.entries(obj).map(([k, v]) => {
92
+ const variableName = dedupedTokens.get(v);
93
+ return `${whitespace}${k}: ${variableName}`;
94
+ }).join(",\n")}
80
95
  }`;
81
96
  }
82
97
  function createThemeIntercept(createThemeExport, themeBuilderInterceptOpts) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/generate-themes.ts"],
4
- "mappings": "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",
5
- "names": ["target"]
4
+ "mappings": "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",
5
+ "names": ["key", "target"]
6
6
  }
@@ -35,17 +35,24 @@ async function generateThemes(inputFile) {
35
35
  Module.prototype.require = ogRequire;
36
36
  }
37
37
  }
38
+ const dedupedTokens = /* @__PURE__ */ new Map();
38
39
  function generatedThemesToTypescript(themes) {
39
- const deduped = /* @__PURE__ */ new Map();
40
- const dedupedToNames = /* @__PURE__ */ new Map();
40
+ const dedupedThemes = /* @__PURE__ */ new Map();
41
+ const dedupedThemeToNames = /* @__PURE__ */ new Map();
41
42
  for (const name in themes) {
42
43
  const theme = themes[name];
44
+ for (const [key2, value] of Object.entries(theme)) {
45
+ const uniqueKey = `${name}_${key2}`;
46
+ if (!dedupedTokens.has(value)) {
47
+ dedupedTokens.set(value, uniqueKey);
48
+ }
49
+ }
43
50
  const key = JSON.stringify(theme);
44
- if (deduped.has(key)) {
45
- dedupedToNames.set(key, [...dedupedToNames.get(key), name]);
51
+ if (dedupedThemes.has(key)) {
52
+ dedupedThemeToNames.set(key, [...dedupedThemeToNames.get(key), name]);
46
53
  } else {
47
- deduped.set(key, theme);
48
- dedupedToNames.set(key, [name]);
54
+ dedupedThemes.set(key, theme);
55
+ dedupedThemeToNames.set(key, [name]);
49
56
  }
50
57
  }
51
58
  const baseTypeString = `type Theme = {
@@ -56,9 +63,14 @@ ${Object.entries(themes.light || themes[Object.keys(themes)[0]]).map(([k]) => {
56
63
  }`;
57
64
  let themesString = `${baseTypeString}
58
65
  `;
59
- deduped.forEach((theme) => {
66
+ dedupedTokens.forEach((names, value) => {
67
+ themesString += `const ${names} = '${value}'
68
+ `;
69
+ });
70
+ themesString += "\n";
71
+ dedupedThemes.forEach((theme) => {
60
72
  const key = JSON.stringify(theme);
61
- const [baseName, ...restNames] = dedupedToNames.get(key);
73
+ const [baseName, ...restNames] = dedupedThemeToNames.get(key);
62
74
  const baseTheme = `export const ${baseName} = ${objectToJsString(theme)} as Theme`;
63
75
  themesString += `
64
76
  ${baseTheme}`;
@@ -76,7 +88,10 @@ ${baseTheme}`;
76
88
  function objectToJsString(obj, indent = 4) {
77
89
  const whitespace = new Array(indent).fill(" ").join("");
78
90
  return `{
79
- ${Object.entries(obj).map(([k, v]) => `${whitespace}${k}: '${v}'`).join(",\n")}
91
+ ${Object.entries(obj).map(([k, v]) => {
92
+ const variableName = dedupedTokens.get(v);
93
+ return `${whitespace}${k}: ${variableName}`;
94
+ }).join(",\n")}
80
95
  }`;
81
96
  }
82
97
  function createThemeIntercept(createThemeExport, themeBuilderInterceptOpts) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/generate-themes.ts"],
4
- "mappings": "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",
5
- "names": ["target"]
4
+ "mappings": "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",
5
+ "names": ["key", "target"]
6
6
  }
@@ -2,6 +2,7 @@ import { join } from "path";
2
2
  import * as fs from "fs-extra";
3
3
  async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
4
4
  const { generated, state } = generatedOutput;
5
+ const tamaguiDotDirExists = await fs.pathExists(tamaguiDotDir);
5
6
  const themeBuilderStatePath = join(tamaguiDotDir, `theme-builder.json`);
6
7
  if (process.env.DEBUG === "tamagui") {
7
8
  console.log(`Generated themes:`, JSON.stringify({ generated, state }, null, 2));
@@ -9,7 +10,7 @@ async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
9
10
  }
10
11
  await Promise.all([
11
12
  fs.writeFile(outPath, generated),
12
- state ? fs.writeFile(themeBuilderStatePath, JSON.stringify(state)) : null
13
+ state && tamaguiDotDirExists ? fs.writeFile(themeBuilderStatePath, JSON.stringify(state)) : null
13
14
  ]);
14
15
  }
15
16
  export {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/write-generate-themes.ts"],
4
- "mappings": "AAAA,SAAS,YAAY;AAErB,YAAY,QAAQ;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,QAAM,EAAE,WAAW,MAAM,IAAI;AAC7B,QAAM,wBAAwB,KAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,EAAE,WAAW,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9E,YAAQ,IAAI,qBAAqB,EAAE,SAAS,sBAAsB,CAAC;AAAA,EACrE;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB,GAAG,UAAU,SAAS,SAAS;AAAA,IAC/B,QAAQ,GAAG,UAAU,uBAAuB,KAAK,UAAU,KAAK,CAAC,IAAI;AAAA,EACvE,CAAC;AACH;",
4
+ "mappings": "AAAA,SAAS,YAAY;AAErB,YAAY,QAAQ;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,QAAM,EAAE,WAAW,MAAM,IAAI;AAC7B,QAAM,sBAAsB,MAAM,GAAG,WAAW,aAAa;AAC7D,QAAM,wBAAwB,KAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,EAAE,WAAW,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9E,YAAQ,IAAI,qBAAqB,EAAE,SAAS,sBAAsB,CAAC;AAAA,EACrE;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB,GAAG,UAAU,SAAS,SAAS;AAAA,IAC/B,SAAS,sBACL,GAAG,UAAU,uBAAuB,KAAK,UAAU,KAAK,CAAC,IACzD;AAAA,EACN,CAAC;AACH;",
5
5
  "names": []
6
6
  }
@@ -2,6 +2,7 @@ import { join } from "path";
2
2
  import * as fs from "fs-extra";
3
3
  async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
4
4
  const { generated, state } = generatedOutput;
5
+ const tamaguiDotDirExists = await fs.pathExists(tamaguiDotDir);
5
6
  const themeBuilderStatePath = join(tamaguiDotDir, `theme-builder.json`);
6
7
  if (process.env.DEBUG === "tamagui") {
7
8
  console.log(`Generated themes:`, JSON.stringify({ generated, state }, null, 2));
@@ -9,7 +10,7 @@ async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
9
10
  }
10
11
  await Promise.all([
11
12
  fs.writeFile(outPath, generated),
12
- state ? fs.writeFile(themeBuilderStatePath, JSON.stringify(state)) : null
13
+ state && tamaguiDotDirExists ? fs.writeFile(themeBuilderStatePath, JSON.stringify(state)) : null
13
14
  ]);
14
15
  }
15
16
  export {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/write-generate-themes.ts"],
4
- "mappings": "AAAA,SAAS,YAAY;AAErB,YAAY,QAAQ;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,QAAM,EAAE,WAAW,MAAM,IAAI;AAC7B,QAAM,wBAAwB,KAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,EAAE,WAAW,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9E,YAAQ,IAAI,qBAAqB,EAAE,SAAS,sBAAsB,CAAC;AAAA,EACrE;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB,GAAG,UAAU,SAAS,SAAS;AAAA,IAC/B,QAAQ,GAAG,UAAU,uBAAuB,KAAK,UAAU,KAAK,CAAC,IAAI;AAAA,EACvE,CAAC;AACH;",
4
+ "mappings": "AAAA,SAAS,YAAY;AAErB,YAAY,QAAQ;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,QAAM,EAAE,WAAW,MAAM,IAAI;AAC7B,QAAM,sBAAsB,MAAM,GAAG,WAAW,aAAa;AAC7D,QAAM,wBAAwB,KAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,EAAE,WAAW,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9E,YAAQ,IAAI,qBAAqB,EAAE,SAAS,sBAAsB,CAAC;AAAA,EACrE;AAEA,QAAM,QAAQ,IAAI;AAAA,IAChB,GAAG,UAAU,SAAS,SAAS;AAAA,IAC/B,SAAS,sBACL,GAAG,UAAU,uBAAuB,KAAK,UAAU,KAAK,CAAC,IACzD;AAAA,EACN,CAAC;AACH;",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/generate-themes",
3
- "version": "1.39.5",
3
+ "version": "1.39.7",
4
4
  "source": "src/index.ts",
5
5
  "types": "./types/index.d.ts",
6
6
  "main": "dist/cjs",
@@ -28,12 +28,12 @@
28
28
  "clean:build": "tamagui-build clean:build"
29
29
  },
30
30
  "dependencies": {
31
- "@tamagui/create-theme": "1.39.5",
32
- "@tamagui/types": "1.39.5",
31
+ "@tamagui/create-theme": "1.39.7",
32
+ "@tamagui/types": "1.39.7",
33
33
  "esbuild-register": "^3.4.2",
34
34
  "fs-extra": "^11.1.0"
35
35
  },
36
36
  "devDependencies": {
37
- "@tamagui/build": "1.39.5"
37
+ "@tamagui/build": "1.39.7"
38
38
  }
39
39
  }
@@ -49,18 +49,32 @@ export async function generateThemes(inputFile: string) {
49
49
  }
50
50
  }
51
51
 
52
+ /**
53
+ * value -> name of variable
54
+ */
55
+ const dedupedTokens = new Map<string, string>()
56
+
52
57
  function generatedThemesToTypescript(themes: Record<string, any>) {
53
- const deduped = new Map<string, Object>()
54
- const dedupedToNames = new Map<string, string[]>()
58
+ const dedupedThemes = new Map<string, Object>()
59
+ const dedupedThemeToNames = new Map<string, string[]>()
55
60
 
56
61
  for (const name in themes) {
57
- const theme = themes[name]
62
+ const theme: Record<string, string> = themes[name]
63
+
64
+ // go through all tokens in current theme and add the new values to dedupedTokens map
65
+ for (const [key, value] of Object.entries(theme)) {
66
+ const uniqueKey = `${name}_${key}`
67
+ if (!dedupedTokens.has(value)) {
68
+ dedupedTokens.set(value, uniqueKey)
69
+ }
70
+ }
71
+
58
72
  const key = JSON.stringify(theme)
59
- if (deduped.has(key)) {
60
- dedupedToNames.set(key, [...dedupedToNames.get(key)!, name])
73
+ if (dedupedThemes.has(key)) {
74
+ dedupedThemeToNames.set(key, [...dedupedThemeToNames.get(key)!, name])
61
75
  } else {
62
- deduped.set(key, theme)
63
- dedupedToNames.set(key, [name])
76
+ dedupedThemes.set(key, theme)
77
+ dedupedThemeToNames.set(key, [name])
64
78
  }
65
79
  }
66
80
 
@@ -74,9 +88,16 @@ ${Object.entries(themes.light || themes[Object.keys(themes)[0]])
74
88
 
75
89
  let themesString = `${baseTypeString}\n`
76
90
 
77
- deduped.forEach((theme) => {
91
+ // add all token variables
92
+
93
+ dedupedTokens.forEach((names, value) => {
94
+ themesString += `const ${names} = '${value}'\n`
95
+ })
96
+ themesString += '\n'
97
+
98
+ dedupedThemes.forEach((theme) => {
78
99
  const key = JSON.stringify(theme)
79
- const [baseName, ...restNames] = dedupedToNames.get(key)!
100
+ const [baseName, ...restNames] = dedupedThemeToNames.get(key)!
80
101
  const baseTheme = `export const ${baseName} = ${objectToJsString(theme)} as Theme`
81
102
  themesString += `\n${baseTheme}`
82
103
 
@@ -95,7 +116,10 @@ function objectToJsString(obj: Object, indent = 4) {
95
116
  const whitespace = new Array(indent).fill(' ').join('')
96
117
  return `{
97
118
  ${Object.entries(obj)
98
- .map(([k, v]) => `${whitespace}${k}: '${v}'`)
119
+ .map(([k, v]) => {
120
+ const variableName = dedupedTokens.get(v)
121
+ return `${whitespace}${k}: ${variableName}`
122
+ })
99
123
  .join(',\n')}
100
124
  }`
101
125
  }
@@ -10,6 +10,7 @@ export async function writeGeneratedThemes(
10
10
  generatedOutput: Awaited<ReturnType<typeof generateThemes>>
11
11
  ) {
12
12
  const { generated, state } = generatedOutput
13
+ const tamaguiDotDirExists = await fs.pathExists(tamaguiDotDir)
13
14
  const themeBuilderStatePath = join(tamaguiDotDir, `theme-builder.json`)
14
15
 
15
16
  if (process.env.DEBUG === 'tamagui') {
@@ -21,6 +22,8 @@ export async function writeGeneratedThemes(
21
22
 
22
23
  await Promise.all([
23
24
  fs.writeFile(outPath, generated),
24
- state ? fs.writeFile(themeBuilderStatePath, JSON.stringify(state)) : null,
25
+ state && tamaguiDotDirExists
26
+ ? fs.writeFile(themeBuilderStatePath, JSON.stringify(state))
27
+ : null,
25
28
  ])
26
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"write-generate-themes.d.ts","sourceRoot":"","sources":["../src/write-generate-themes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,iBAgB5D"}
1
+ {"version":3,"file":"write-generate-themes.d.ts","sourceRoot":"","sources":["../src/write-generate-themes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,iBAmB5D"}