@tamagui/generate-themes 1.43.17 → 1.44.0
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/cjs/generate-themes.js +83 -27
- package/dist/cjs/generate-themes.js.map +2 -2
- package/dist/cjs/write-generate-themes.js +2 -0
- package/dist/cjs/write-generate-themes.js.map +1 -1
- package/dist/esm/generate-themes.js +83 -27
- package/dist/esm/generate-themes.js.map +2 -2
- package/dist/esm/generate-themes.mjs +83 -27
- package/dist/esm/generate-themes.mjs.map +2 -2
- package/dist/esm/write-generate-themes.js +2 -0
- package/dist/esm/write-generate-themes.js.map +1 -1
- package/dist/esm/write-generate-themes.mjs +2 -0
- package/dist/esm/write-generate-themes.mjs.map +1 -1
- package/package.json +4 -4
- package/src/generate-themes.ts +123 -32
- package/src/write-generate-themes.ts +2 -0
- package/types/generate-themes.d.ts +1 -1
- package/types/generate-themes.d.ts.map +1 -1
- package/types/write-generate-themes.d.ts.map +1 -1
- package/dist/generate-themes.js +0 -146
- package/dist/generate-themes.js.map +0 -6
- package/dist/index.js +0 -23
- package/dist/index.js.map +0 -6
|
@@ -33,10 +33,12 @@ __export(generate_themes_exports, {
|
|
|
33
33
|
module.exports = __toCommonJS(generate_themes_exports);
|
|
34
34
|
var import_module = __toESM(require("module"));
|
|
35
35
|
var import_path = require("path");
|
|
36
|
+
const ogRequire = import_module.default.prototype.require;
|
|
36
37
|
async function generateThemes(inputFile) {
|
|
37
|
-
require("esbuild-register/dist/node").register();
|
|
38
|
+
const { unregister } = require("esbuild-register/dist/node").register();
|
|
39
|
+
const inputFilePath = inputFile[0] === "." ? (0, import_path.join)(process.cwd(), inputFile) : inputFile;
|
|
40
|
+
purgeCache(inputFilePath);
|
|
38
41
|
let promise = null;
|
|
39
|
-
const ogRequire = import_module.default.prototype.require;
|
|
40
42
|
import_module.default.prototype.require = function(id) {
|
|
41
43
|
const out = ogRequire.apply(this, arguments);
|
|
42
44
|
if (id === "@tamagui/create-theme/theme-builder" || id === "@tamagui/theme-builder") {
|
|
@@ -55,7 +57,6 @@ async function generateThemes(inputFile) {
|
|
|
55
57
|
return out;
|
|
56
58
|
};
|
|
57
59
|
try {
|
|
58
|
-
const inputFilePath = inputFile[0] === "." ? (0, import_path.join)(process.cwd(), inputFile) : inputFile;
|
|
59
60
|
const requiredThemes = require(inputFilePath);
|
|
60
61
|
const themes = requiredThemes["default"] || requiredThemes["themes"];
|
|
61
62
|
const generatedThemes = generatedThemesToTypescript(themes);
|
|
@@ -64,18 +65,25 @@ async function generateThemes(inputFile) {
|
|
|
64
65
|
generated: generatedThemes,
|
|
65
66
|
state: themeBuilder == null ? void 0 : themeBuilder.state
|
|
66
67
|
};
|
|
68
|
+
} catch (err) {
|
|
69
|
+
console.warn(` \u26A0\uFE0F Error running theme builder: ${err}`, err == null ? void 0 : err["stack"]);
|
|
67
70
|
} finally {
|
|
68
71
|
import_module.default.prototype.require = ogRequire;
|
|
72
|
+
unregister();
|
|
69
73
|
}
|
|
70
74
|
}
|
|
71
75
|
const dedupedTokens = /* @__PURE__ */ new Map();
|
|
72
76
|
function generatedThemesToTypescript(themes) {
|
|
73
77
|
const dedupedThemes = /* @__PURE__ */ new Map();
|
|
74
78
|
const dedupedThemeToNames = /* @__PURE__ */ new Map();
|
|
79
|
+
let i = 0;
|
|
75
80
|
for (const name in themes) {
|
|
81
|
+
i++;
|
|
76
82
|
const theme = themes[name];
|
|
83
|
+
let j = 0;
|
|
77
84
|
for (const [key2, value] of Object.entries(theme)) {
|
|
78
|
-
|
|
85
|
+
i++;
|
|
86
|
+
const uniqueKey = `t${i}${j}`;
|
|
79
87
|
if (!dedupedTokens.has(value)) {
|
|
80
88
|
dedupedTokens.set(value, uniqueKey);
|
|
81
89
|
}
|
|
@@ -88,44 +96,70 @@ function generatedThemesToTypescript(themes) {
|
|
|
88
96
|
dedupedThemeToNames.set(key, [name]);
|
|
89
97
|
}
|
|
90
98
|
}
|
|
99
|
+
const baseKeys = Object.entries(themes.light || themes[Object.keys(themes)[0]]);
|
|
91
100
|
const baseTypeString = `type Theme = {
|
|
92
|
-
${
|
|
101
|
+
${baseKeys.map(([k]) => {
|
|
93
102
|
return ` ${k}: string;
|
|
94
103
|
`;
|
|
95
104
|
}).join("")}
|
|
96
105
|
}`;
|
|
97
|
-
let
|
|
106
|
+
let out = `${baseTypeString}
|
|
98
107
|
`;
|
|
99
|
-
|
|
100
|
-
|
|
108
|
+
out += `
|
|
109
|
+
function t(a) {
|
|
110
|
+
let res = {}
|
|
111
|
+
for (const [ki, vi] of a) {
|
|
112
|
+
res[ks[ki]] = vs[vi]
|
|
113
|
+
}
|
|
114
|
+
return res
|
|
115
|
+
}
|
|
116
|
+
`;
|
|
117
|
+
out += `const vs = [
|
|
118
|
+
`;
|
|
119
|
+
let index = 0;
|
|
120
|
+
const valueToIndex = {};
|
|
121
|
+
dedupedTokens.forEach((name, value) => {
|
|
122
|
+
valueToIndex[value] = index;
|
|
123
|
+
index++;
|
|
124
|
+
out += ` '${value}',
|
|
101
125
|
`;
|
|
102
126
|
});
|
|
103
|
-
|
|
127
|
+
out += "]\n\n";
|
|
128
|
+
const keys = baseKeys.map(([k]) => k);
|
|
129
|
+
out += `const ks = [
|
|
130
|
+
`;
|
|
131
|
+
out += keys.map((k) => `'${k}'`).join(",\n");
|
|
132
|
+
out += `]
|
|
133
|
+
|
|
134
|
+
`;
|
|
135
|
+
let nameI = 0;
|
|
104
136
|
dedupedThemes.forEach((theme) => {
|
|
137
|
+
nameI++;
|
|
105
138
|
const key = JSON.stringify(theme);
|
|
106
|
-
const
|
|
107
|
-
const
|
|
108
|
-
|
|
139
|
+
const names = dedupedThemeToNames.get(key);
|
|
140
|
+
const name = `n${nameI}`;
|
|
141
|
+
const baseTheme = `export const ${name} = ${objectToJsString(
|
|
142
|
+
theme,
|
|
143
|
+
keys,
|
|
144
|
+
valueToIndex
|
|
145
|
+
)} as Theme`;
|
|
146
|
+
out += `
|
|
109
147
|
${baseTheme}`;
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
(name) => `export const ${name} = ${baseName} as Theme`
|
|
113
|
-
);
|
|
114
|
-
themesString += `
|
|
148
|
+
const duplicateThemes = names.map((n) => `export const ${n} = ${name} as Theme`);
|
|
149
|
+
out += `
|
|
115
150
|
|
|
116
151
|
` + duplicateThemes.join("\n");
|
|
117
|
-
}
|
|
118
152
|
});
|
|
119
|
-
return
|
|
153
|
+
return out;
|
|
120
154
|
}
|
|
121
|
-
function objectToJsString(obj,
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
}`;
|
|
155
|
+
function objectToJsString(obj, keys, valueToIndex) {
|
|
156
|
+
let arrItems = [];
|
|
157
|
+
for (const key in obj) {
|
|
158
|
+
const ki = keys.indexOf(key);
|
|
159
|
+
const vi = valueToIndex[obj[key]];
|
|
160
|
+
arrItems.push(`[${ki}, ${vi}]`);
|
|
161
|
+
}
|
|
162
|
+
return `t([${arrItems.join(",")}])`;
|
|
129
163
|
}
|
|
130
164
|
function createThemeIntercept(createThemeExport, themeBuilderInterceptOpts) {
|
|
131
165
|
return new Proxy(createThemeExport, {
|
|
@@ -156,6 +190,28 @@ function themeBuilderIntercept(themeBuilder, themeBuilderInterceptOpts) {
|
|
|
156
190
|
}
|
|
157
191
|
});
|
|
158
192
|
}
|
|
193
|
+
function purgeCache(moduleName) {
|
|
194
|
+
searchCache(moduleName, function(mod) {
|
|
195
|
+
delete require.cache[mod.id];
|
|
196
|
+
});
|
|
197
|
+
Object.keys(module.constructor._pathCache).forEach(function(cacheKey) {
|
|
198
|
+
if (cacheKey.indexOf(moduleName) > 0) {
|
|
199
|
+
delete module.constructor._pathCache[cacheKey];
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
function searchCache(moduleName, callback) {
|
|
204
|
+
let mod = require.resolve(moduleName);
|
|
205
|
+
if (mod && (mod = require.cache[mod]) !== void 0) {
|
|
206
|
+
;
|
|
207
|
+
(function traverse(mod2) {
|
|
208
|
+
mod2.children.forEach(function(child) {
|
|
209
|
+
traverse(child);
|
|
210
|
+
});
|
|
211
|
+
callback(mod2);
|
|
212
|
+
})(mod);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
159
215
|
// Annotate the CommonJS export names for ESM import in node:
|
|
160
216
|
0 && (module.exports = {
|
|
161
217
|
generateThemes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/generate-themes.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AACnB,kBAAqB;AAQrB,eAAsB,eAAe,WAAmB;AACtD,
|
|
5
|
-
"names": ["Module", "key", "target"]
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["Module", "key", "target", "mod"]
|
|
6
6
|
}
|
|
@@ -34,6 +34,8 @@ module.exports = __toCommonJS(write_generate_themes_exports);
|
|
|
34
34
|
var import_path = require("path");
|
|
35
35
|
var fs = __toESM(require("fs-extra"));
|
|
36
36
|
async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
|
|
37
|
+
if (!generatedOutput)
|
|
38
|
+
return;
|
|
37
39
|
const { generated, state } = generatedOutput;
|
|
38
40
|
const tamaguiDotDirExists = await fs.pathExists(tamaguiDotDir);
|
|
39
41
|
const themeBuilderStatePath = (0, import_path.join)(tamaguiDotDir, `theme-builder.json`);
|
|
@@ -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;AAE7B,QAAM,sBAAsB,MAAM,GAAG,WAAW,aAAa;AAC7D,QAAM,4BAAwB,kBAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,iBAAiB,MAAM,CAAC,CAAC;AAEzE,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;",
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAqB;AAErB,SAAoB;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,MAAI,CAAC;AAAiB;AAEtB,QAAM,EAAE,WAAW,MAAM,IAAI;AAE7B,QAAM,sBAAsB,MAAM,GAAG,WAAW,aAAa;AAC7D,QAAM,4BAAwB,kBAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,iBAAiB,MAAM,CAAC,CAAC;AAEzE,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
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import Module from "module";
|
|
2
2
|
import { join } from "path";
|
|
3
|
+
const ogRequire = Module.prototype.require;
|
|
3
4
|
async function generateThemes(inputFile) {
|
|
4
|
-
require("esbuild-register/dist/node").register();
|
|
5
|
+
const { unregister } = require("esbuild-register/dist/node").register();
|
|
6
|
+
const inputFilePath = inputFile[0] === "." ? join(process.cwd(), inputFile) : inputFile;
|
|
7
|
+
purgeCache(inputFilePath);
|
|
5
8
|
let promise = null;
|
|
6
|
-
const ogRequire = Module.prototype.require;
|
|
7
9
|
Module.prototype.require = function(id) {
|
|
8
10
|
const out = ogRequire.apply(this, arguments);
|
|
9
11
|
if (id === "@tamagui/create-theme/theme-builder" || id === "@tamagui/theme-builder") {
|
|
@@ -22,7 +24,6 @@ async function generateThemes(inputFile) {
|
|
|
22
24
|
return out;
|
|
23
25
|
};
|
|
24
26
|
try {
|
|
25
|
-
const inputFilePath = inputFile[0] === "." ? join(process.cwd(), inputFile) : inputFile;
|
|
26
27
|
const requiredThemes = require(inputFilePath);
|
|
27
28
|
const themes = requiredThemes["default"] || requiredThemes["themes"];
|
|
28
29
|
const generatedThemes = generatedThemesToTypescript(themes);
|
|
@@ -31,18 +32,25 @@ async function generateThemes(inputFile) {
|
|
|
31
32
|
generated: generatedThemes,
|
|
32
33
|
state: themeBuilder == null ? void 0 : themeBuilder.state
|
|
33
34
|
};
|
|
35
|
+
} catch (err) {
|
|
36
|
+
console.warn(` \u26A0\uFE0F Error running theme builder: ${err}`, err == null ? void 0 : err["stack"]);
|
|
34
37
|
} finally {
|
|
35
38
|
Module.prototype.require = ogRequire;
|
|
39
|
+
unregister();
|
|
36
40
|
}
|
|
37
41
|
}
|
|
38
42
|
const dedupedTokens = /* @__PURE__ */ new Map();
|
|
39
43
|
function generatedThemesToTypescript(themes) {
|
|
40
44
|
const dedupedThemes = /* @__PURE__ */ new Map();
|
|
41
45
|
const dedupedThemeToNames = /* @__PURE__ */ new Map();
|
|
46
|
+
let i = 0;
|
|
42
47
|
for (const name in themes) {
|
|
48
|
+
i++;
|
|
43
49
|
const theme = themes[name];
|
|
50
|
+
let j = 0;
|
|
44
51
|
for (const [key2, value] of Object.entries(theme)) {
|
|
45
|
-
|
|
52
|
+
i++;
|
|
53
|
+
const uniqueKey = `t${i}${j}`;
|
|
46
54
|
if (!dedupedTokens.has(value)) {
|
|
47
55
|
dedupedTokens.set(value, uniqueKey);
|
|
48
56
|
}
|
|
@@ -55,44 +63,70 @@ function generatedThemesToTypescript(themes) {
|
|
|
55
63
|
dedupedThemeToNames.set(key, [name]);
|
|
56
64
|
}
|
|
57
65
|
}
|
|
66
|
+
const baseKeys = Object.entries(themes.light || themes[Object.keys(themes)[0]]);
|
|
58
67
|
const baseTypeString = `type Theme = {
|
|
59
|
-
${
|
|
68
|
+
${baseKeys.map(([k]) => {
|
|
60
69
|
return ` ${k}: string;
|
|
61
70
|
`;
|
|
62
71
|
}).join("")}
|
|
63
72
|
}`;
|
|
64
|
-
let
|
|
73
|
+
let out = `${baseTypeString}
|
|
65
74
|
`;
|
|
66
|
-
|
|
67
|
-
|
|
75
|
+
out += `
|
|
76
|
+
function t(a) {
|
|
77
|
+
let res = {}
|
|
78
|
+
for (const [ki, vi] of a) {
|
|
79
|
+
res[ks[ki]] = vs[vi]
|
|
80
|
+
}
|
|
81
|
+
return res
|
|
82
|
+
}
|
|
83
|
+
`;
|
|
84
|
+
out += `const vs = [
|
|
85
|
+
`;
|
|
86
|
+
let index = 0;
|
|
87
|
+
const valueToIndex = {};
|
|
88
|
+
dedupedTokens.forEach((name, value) => {
|
|
89
|
+
valueToIndex[value] = index;
|
|
90
|
+
index++;
|
|
91
|
+
out += ` '${value}',
|
|
68
92
|
`;
|
|
69
93
|
});
|
|
70
|
-
|
|
94
|
+
out += "]\n\n";
|
|
95
|
+
const keys = baseKeys.map(([k]) => k);
|
|
96
|
+
out += `const ks = [
|
|
97
|
+
`;
|
|
98
|
+
out += keys.map((k) => `'${k}'`).join(",\n");
|
|
99
|
+
out += `]
|
|
100
|
+
|
|
101
|
+
`;
|
|
102
|
+
let nameI = 0;
|
|
71
103
|
dedupedThemes.forEach((theme) => {
|
|
104
|
+
nameI++;
|
|
72
105
|
const key = JSON.stringify(theme);
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
|
|
106
|
+
const names = dedupedThemeToNames.get(key);
|
|
107
|
+
const name = `n${nameI}`;
|
|
108
|
+
const baseTheme = `export const ${name} = ${objectToJsString(
|
|
109
|
+
theme,
|
|
110
|
+
keys,
|
|
111
|
+
valueToIndex
|
|
112
|
+
)} as Theme`;
|
|
113
|
+
out += `
|
|
76
114
|
${baseTheme}`;
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
(name) => `export const ${name} = ${baseName} as Theme`
|
|
80
|
-
);
|
|
81
|
-
themesString += `
|
|
115
|
+
const duplicateThemes = names.map((n) => `export const ${n} = ${name} as Theme`);
|
|
116
|
+
out += `
|
|
82
117
|
|
|
83
118
|
` + duplicateThemes.join("\n");
|
|
84
|
-
}
|
|
85
119
|
});
|
|
86
|
-
return
|
|
120
|
+
return out;
|
|
87
121
|
}
|
|
88
|
-
function objectToJsString(obj,
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
}`;
|
|
122
|
+
function objectToJsString(obj, keys, valueToIndex) {
|
|
123
|
+
let arrItems = [];
|
|
124
|
+
for (const key in obj) {
|
|
125
|
+
const ki = keys.indexOf(key);
|
|
126
|
+
const vi = valueToIndex[obj[key]];
|
|
127
|
+
arrItems.push(`[${ki}, ${vi}]`);
|
|
128
|
+
}
|
|
129
|
+
return `t([${arrItems.join(",")}])`;
|
|
96
130
|
}
|
|
97
131
|
function createThemeIntercept(createThemeExport, themeBuilderInterceptOpts) {
|
|
98
132
|
return new Proxy(createThemeExport, {
|
|
@@ -123,6 +157,28 @@ function themeBuilderIntercept(themeBuilder, themeBuilderInterceptOpts) {
|
|
|
123
157
|
}
|
|
124
158
|
});
|
|
125
159
|
}
|
|
160
|
+
function purgeCache(moduleName) {
|
|
161
|
+
searchCache(moduleName, function(mod) {
|
|
162
|
+
delete require.cache[mod.id];
|
|
163
|
+
});
|
|
164
|
+
Object.keys(module.constructor._pathCache).forEach(function(cacheKey) {
|
|
165
|
+
if (cacheKey.indexOf(moduleName) > 0) {
|
|
166
|
+
delete module.constructor._pathCache[cacheKey];
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function searchCache(moduleName, callback) {
|
|
171
|
+
let mod = require.resolve(moduleName);
|
|
172
|
+
if (mod && (mod = require.cache[mod]) !== void 0) {
|
|
173
|
+
;
|
|
174
|
+
(function traverse(mod2) {
|
|
175
|
+
mod2.children.forEach(function(child) {
|
|
176
|
+
traverse(child);
|
|
177
|
+
});
|
|
178
|
+
callback(mod2);
|
|
179
|
+
})(mod);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
126
182
|
export {
|
|
127
183
|
generateThemes
|
|
128
184
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/generate-themes.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAO,YAAY;AACnB,SAAS,YAAY;AAQrB,eAAsB,eAAe,WAAmB;AACtD,
|
|
5
|
-
"names": ["key", "target"]
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["key", "target", "mod"]
|
|
6
6
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import Module from "module";
|
|
2
2
|
import { join } from "path";
|
|
3
|
+
const ogRequire = Module.prototype.require;
|
|
3
4
|
async function generateThemes(inputFile) {
|
|
4
|
-
require("esbuild-register/dist/node").register();
|
|
5
|
+
const { unregister } = require("esbuild-register/dist/node").register();
|
|
6
|
+
const inputFilePath = inputFile[0] === "." ? join(process.cwd(), inputFile) : inputFile;
|
|
7
|
+
purgeCache(inputFilePath);
|
|
5
8
|
let promise = null;
|
|
6
|
-
const ogRequire = Module.prototype.require;
|
|
7
9
|
Module.prototype.require = function(id) {
|
|
8
10
|
const out = ogRequire.apply(this, arguments);
|
|
9
11
|
if (id === "@tamagui/create-theme/theme-builder" || id === "@tamagui/theme-builder") {
|
|
@@ -22,7 +24,6 @@ async function generateThemes(inputFile) {
|
|
|
22
24
|
return out;
|
|
23
25
|
};
|
|
24
26
|
try {
|
|
25
|
-
const inputFilePath = inputFile[0] === "." ? join(process.cwd(), inputFile) : inputFile;
|
|
26
27
|
const requiredThemes = require(inputFilePath);
|
|
27
28
|
const themes = requiredThemes["default"] || requiredThemes["themes"];
|
|
28
29
|
const generatedThemes = generatedThemesToTypescript(themes);
|
|
@@ -31,18 +32,25 @@ async function generateThemes(inputFile) {
|
|
|
31
32
|
generated: generatedThemes,
|
|
32
33
|
state: themeBuilder == null ? void 0 : themeBuilder.state
|
|
33
34
|
};
|
|
35
|
+
} catch (err) {
|
|
36
|
+
console.warn(` \u26A0\uFE0F Error running theme builder: ${err}`, err == null ? void 0 : err["stack"]);
|
|
34
37
|
} finally {
|
|
35
38
|
Module.prototype.require = ogRequire;
|
|
39
|
+
unregister();
|
|
36
40
|
}
|
|
37
41
|
}
|
|
38
42
|
const dedupedTokens = /* @__PURE__ */ new Map();
|
|
39
43
|
function generatedThemesToTypescript(themes) {
|
|
40
44
|
const dedupedThemes = /* @__PURE__ */ new Map();
|
|
41
45
|
const dedupedThemeToNames = /* @__PURE__ */ new Map();
|
|
46
|
+
let i = 0;
|
|
42
47
|
for (const name in themes) {
|
|
48
|
+
i++;
|
|
43
49
|
const theme = themes[name];
|
|
50
|
+
let j = 0;
|
|
44
51
|
for (const [key2, value] of Object.entries(theme)) {
|
|
45
|
-
|
|
52
|
+
i++;
|
|
53
|
+
const uniqueKey = `t${i}${j}`;
|
|
46
54
|
if (!dedupedTokens.has(value)) {
|
|
47
55
|
dedupedTokens.set(value, uniqueKey);
|
|
48
56
|
}
|
|
@@ -55,44 +63,70 @@ function generatedThemesToTypescript(themes) {
|
|
|
55
63
|
dedupedThemeToNames.set(key, [name]);
|
|
56
64
|
}
|
|
57
65
|
}
|
|
66
|
+
const baseKeys = Object.entries(themes.light || themes[Object.keys(themes)[0]]);
|
|
58
67
|
const baseTypeString = `type Theme = {
|
|
59
|
-
${
|
|
68
|
+
${baseKeys.map(([k]) => {
|
|
60
69
|
return ` ${k}: string;
|
|
61
70
|
`;
|
|
62
71
|
}).join("")}
|
|
63
72
|
}`;
|
|
64
|
-
let
|
|
73
|
+
let out = `${baseTypeString}
|
|
65
74
|
`;
|
|
66
|
-
|
|
67
|
-
|
|
75
|
+
out += `
|
|
76
|
+
function t(a) {
|
|
77
|
+
let res = {}
|
|
78
|
+
for (const [ki, vi] of a) {
|
|
79
|
+
res[ks[ki]] = vs[vi]
|
|
80
|
+
}
|
|
81
|
+
return res
|
|
82
|
+
}
|
|
83
|
+
`;
|
|
84
|
+
out += `const vs = [
|
|
85
|
+
`;
|
|
86
|
+
let index = 0;
|
|
87
|
+
const valueToIndex = {};
|
|
88
|
+
dedupedTokens.forEach((name, value) => {
|
|
89
|
+
valueToIndex[value] = index;
|
|
90
|
+
index++;
|
|
91
|
+
out += ` '${value}',
|
|
68
92
|
`;
|
|
69
93
|
});
|
|
70
|
-
|
|
94
|
+
out += "]\n\n";
|
|
95
|
+
const keys = baseKeys.map(([k]) => k);
|
|
96
|
+
out += `const ks = [
|
|
97
|
+
`;
|
|
98
|
+
out += keys.map((k) => `'${k}'`).join(",\n");
|
|
99
|
+
out += `]
|
|
100
|
+
|
|
101
|
+
`;
|
|
102
|
+
let nameI = 0;
|
|
71
103
|
dedupedThemes.forEach((theme) => {
|
|
104
|
+
nameI++;
|
|
72
105
|
const key = JSON.stringify(theme);
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
|
|
106
|
+
const names = dedupedThemeToNames.get(key);
|
|
107
|
+
const name = `n${nameI}`;
|
|
108
|
+
const baseTheme = `export const ${name} = ${objectToJsString(
|
|
109
|
+
theme,
|
|
110
|
+
keys,
|
|
111
|
+
valueToIndex
|
|
112
|
+
)} as Theme`;
|
|
113
|
+
out += `
|
|
76
114
|
${baseTheme}`;
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
(name) => `export const ${name} = ${baseName} as Theme`
|
|
80
|
-
);
|
|
81
|
-
themesString += `
|
|
115
|
+
const duplicateThemes = names.map((n) => `export const ${n} = ${name} as Theme`);
|
|
116
|
+
out += `
|
|
82
117
|
|
|
83
118
|
` + duplicateThemes.join("\n");
|
|
84
|
-
}
|
|
85
119
|
});
|
|
86
|
-
return
|
|
120
|
+
return out;
|
|
87
121
|
}
|
|
88
|
-
function objectToJsString(obj,
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
}`;
|
|
122
|
+
function objectToJsString(obj, keys, valueToIndex) {
|
|
123
|
+
let arrItems = [];
|
|
124
|
+
for (const key in obj) {
|
|
125
|
+
const ki = keys.indexOf(key);
|
|
126
|
+
const vi = valueToIndex[obj[key]];
|
|
127
|
+
arrItems.push(`[${ki}, ${vi}]`);
|
|
128
|
+
}
|
|
129
|
+
return `t([${arrItems.join(",")}])`;
|
|
96
130
|
}
|
|
97
131
|
function createThemeIntercept(createThemeExport, themeBuilderInterceptOpts) {
|
|
98
132
|
return new Proxy(createThemeExport, {
|
|
@@ -123,6 +157,28 @@ function themeBuilderIntercept(themeBuilder, themeBuilderInterceptOpts) {
|
|
|
123
157
|
}
|
|
124
158
|
});
|
|
125
159
|
}
|
|
160
|
+
function purgeCache(moduleName) {
|
|
161
|
+
searchCache(moduleName, function(mod) {
|
|
162
|
+
delete require.cache[mod.id];
|
|
163
|
+
});
|
|
164
|
+
Object.keys(module.constructor._pathCache).forEach(function(cacheKey) {
|
|
165
|
+
if (cacheKey.indexOf(moduleName) > 0) {
|
|
166
|
+
delete module.constructor._pathCache[cacheKey];
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function searchCache(moduleName, callback) {
|
|
171
|
+
let mod = require.resolve(moduleName);
|
|
172
|
+
if (mod && (mod = require.cache[mod]) !== void 0) {
|
|
173
|
+
;
|
|
174
|
+
(function traverse(mod2) {
|
|
175
|
+
mod2.children.forEach(function(child) {
|
|
176
|
+
traverse(child);
|
|
177
|
+
});
|
|
178
|
+
callback(mod2);
|
|
179
|
+
})(mod);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
126
182
|
export {
|
|
127
183
|
generateThemes
|
|
128
184
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/generate-themes.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAO,YAAY;AACnB,SAAS,YAAY;AAQrB,eAAsB,eAAe,WAAmB;AACtD,
|
|
5
|
-
"names": ["key", "target"]
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["key", "target", "mod"]
|
|
6
6
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { join } from "path";
|
|
2
2
|
import * as fs from "fs-extra";
|
|
3
3
|
async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
|
|
4
|
+
if (!generatedOutput)
|
|
5
|
+
return;
|
|
4
6
|
const { generated, state } = generatedOutput;
|
|
5
7
|
const tamaguiDotDirExists = await fs.pathExists(tamaguiDotDir);
|
|
6
8
|
const themeBuilderStatePath = join(tamaguiDotDir, `theme-builder.json`);
|
|
@@ -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;AAE7B,QAAM,sBAAsB,MAAM,GAAG,WAAW,aAAa;AAC7D,QAAM,wBAAwB,KAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,iBAAiB,MAAM,CAAC,CAAC;AAEzE,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;",
|
|
4
|
+
"mappings": "AAAA,SAAS,YAAY;AAErB,YAAY,QAAQ;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,MAAI,CAAC;AAAiB;AAEtB,QAAM,EAAE,WAAW,MAAM,IAAI;AAE7B,QAAM,sBAAsB,MAAM,GAAG,WAAW,aAAa;AAC7D,QAAM,wBAAwB,KAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,iBAAiB,MAAM,CAAC,CAAC;AAEzE,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
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { join } from "path";
|
|
2
2
|
import * as fs from "fs-extra";
|
|
3
3
|
async function writeGeneratedThemes(tamaguiDotDir, outPath, generatedOutput) {
|
|
4
|
+
if (!generatedOutput)
|
|
5
|
+
return;
|
|
4
6
|
const { generated, state } = generatedOutput;
|
|
5
7
|
const tamaguiDotDirExists = await fs.pathExists(tamaguiDotDir);
|
|
6
8
|
const themeBuilderStatePath = join(tamaguiDotDir, `theme-builder.json`);
|
|
@@ -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;AAE7B,QAAM,sBAAsB,MAAM,GAAG,WAAW,aAAa;AAC7D,QAAM,wBAAwB,KAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,iBAAiB,MAAM,CAAC,CAAC;AAEzE,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;",
|
|
4
|
+
"mappings": "AAAA,SAAS,YAAY;AAErB,YAAY,QAAQ;AAIpB,eAAsB,qBACpB,eACA,SACA,iBACA;AACA,MAAI,CAAC;AAAiB;AAEtB,QAAM,EAAE,WAAW,MAAM,IAAI;AAE7B,QAAM,sBAAsB,MAAM,GAAG,WAAW,aAAa;AAC7D,QAAM,wBAAwB,KAAK,eAAe,oBAAoB;AAEtE,MAAI,QAAQ,IAAI,UAAU,WAAW;AAEnC,YAAQ,IAAI,qBAAqB,KAAK,UAAU,iBAAiB,MAAM,CAAC,CAAC;AAEzE,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.
|
|
3
|
+
"version": "1.44.0",
|
|
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.
|
|
32
|
-
"@tamagui/types": "1.
|
|
31
|
+
"@tamagui/create-theme": "1.44.0",
|
|
32
|
+
"@tamagui/types": "1.44.0",
|
|
33
33
|
"esbuild-register": "^3.4.2",
|
|
34
34
|
"fs-extra": "^11.1.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@tamagui/build": "1.
|
|
37
|
+
"@tamagui/build": "1.44.0"
|
|
38
38
|
}
|
|
39
39
|
}
|
package/src/generate-themes.ts
CHANGED
|
@@ -7,16 +7,21 @@ type ThemeBuilderInterceptOpts = {
|
|
|
7
7
|
onComplete: (result: { themeBuilder: ThemeBuilder<any> }) => void
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
+
const ogRequire = Module.prototype.require
|
|
11
|
+
|
|
10
12
|
export async function generateThemes(inputFile: string) {
|
|
11
|
-
require('esbuild-register/dist/node').register()
|
|
13
|
+
const { unregister } = require('esbuild-register/dist/node').register()
|
|
14
|
+
|
|
15
|
+
const inputFilePath = inputFile[0] === '.' ? join(process.cwd(), inputFile) : inputFile
|
|
16
|
+
purgeCache(inputFilePath)
|
|
12
17
|
|
|
13
18
|
let promise: Promise<null | ThemeBuilder<any>> | null = null as any
|
|
14
19
|
|
|
15
|
-
const ogRequire = Module.prototype.require
|
|
16
20
|
// @ts-ignore
|
|
17
21
|
Module.prototype.require = function (id) {
|
|
18
22
|
// @ts-ignore
|
|
19
23
|
const out = ogRequire.apply(this, arguments)
|
|
24
|
+
|
|
20
25
|
if (id === '@tamagui/create-theme/theme-builder' || id === '@tamagui/theme-builder') {
|
|
21
26
|
if (!promise) {
|
|
22
27
|
let resolve: Function
|
|
@@ -34,8 +39,6 @@ export async function generateThemes(inputFile: string) {
|
|
|
34
39
|
}
|
|
35
40
|
|
|
36
41
|
try {
|
|
37
|
-
const inputFilePath =
|
|
38
|
-
inputFile[0] === '.' ? join(process.cwd(), inputFile) : inputFile
|
|
39
42
|
const requiredThemes = require(inputFilePath)
|
|
40
43
|
const themes = requiredThemes['default'] || requiredThemes['themes']
|
|
41
44
|
const generatedThemes = generatedThemesToTypescript(themes)
|
|
@@ -44,8 +47,11 @@ export async function generateThemes(inputFile: string) {
|
|
|
44
47
|
generated: generatedThemes,
|
|
45
48
|
state: themeBuilder?.state,
|
|
46
49
|
}
|
|
50
|
+
} catch (err) {
|
|
51
|
+
console.warn(` ⚠️ Error running theme builder: ${err}`, err?.['stack'])
|
|
47
52
|
} finally {
|
|
48
53
|
Module.prototype.require = ogRequire
|
|
54
|
+
unregister()
|
|
49
55
|
}
|
|
50
56
|
}
|
|
51
57
|
|
|
@@ -58,12 +64,17 @@ function generatedThemesToTypescript(themes: Record<string, any>) {
|
|
|
58
64
|
const dedupedThemes = new Map<string, Object>()
|
|
59
65
|
const dedupedThemeToNames = new Map<string, string[]>()
|
|
60
66
|
|
|
67
|
+
let i = 0
|
|
61
68
|
for (const name in themes) {
|
|
69
|
+
i++
|
|
70
|
+
|
|
62
71
|
const theme: Record<string, string> = themes[name]
|
|
63
72
|
|
|
64
73
|
// go through all tokens in current theme and add the new values to dedupedTokens map
|
|
74
|
+
let j = 0
|
|
65
75
|
for (const [key, value] of Object.entries(theme)) {
|
|
66
|
-
|
|
76
|
+
i++
|
|
77
|
+
const uniqueKey = `t${i}${j}`
|
|
67
78
|
if (!dedupedTokens.has(value)) {
|
|
68
79
|
dedupedTokens.set(value, uniqueKey)
|
|
69
80
|
}
|
|
@@ -78,50 +89,81 @@ function generatedThemesToTypescript(themes: Record<string, any>) {
|
|
|
78
89
|
}
|
|
79
90
|
}
|
|
80
91
|
|
|
92
|
+
const baseKeys = Object.entries(themes.light || themes[Object.keys(themes)[0]]) as [
|
|
93
|
+
string,
|
|
94
|
+
string
|
|
95
|
+
][]
|
|
96
|
+
|
|
81
97
|
const baseTypeString = `type Theme = {
|
|
82
|
-
${
|
|
98
|
+
${baseKeys
|
|
83
99
|
.map(([k]) => {
|
|
84
100
|
return ` ${k}: string;\n`
|
|
85
101
|
})
|
|
86
102
|
.join('')}
|
|
87
103
|
}`
|
|
88
104
|
|
|
89
|
-
let
|
|
105
|
+
let out = `${baseTypeString}\n`
|
|
90
106
|
|
|
91
|
-
// add
|
|
107
|
+
// add in the helper function to generate a theme:
|
|
108
|
+
out += `
|
|
109
|
+
function t(a) {
|
|
110
|
+
let res = {}
|
|
111
|
+
for (const [ki, vi] of a) {
|
|
112
|
+
res[ks[ki]] = vs[vi]
|
|
113
|
+
}
|
|
114
|
+
return res
|
|
115
|
+
}
|
|
116
|
+
`
|
|
92
117
|
|
|
93
|
-
|
|
94
|
-
|
|
118
|
+
// add all token variables
|
|
119
|
+
out += `const vs = [\n`
|
|
120
|
+
let index = 0
|
|
121
|
+
const valueToIndex = {}
|
|
122
|
+
dedupedTokens.forEach((name, value) => {
|
|
123
|
+
valueToIndex[value] = index
|
|
124
|
+
index++
|
|
125
|
+
out += ` '${value}',\n`
|
|
95
126
|
})
|
|
96
|
-
|
|
127
|
+
out += ']\n\n'
|
|
128
|
+
|
|
129
|
+
// add all keys array
|
|
130
|
+
const keys = baseKeys.map(([k]) => k)
|
|
131
|
+
out += `const ks = [\n`
|
|
132
|
+
out += keys.map((k) => `'${k}'`).join(',\n')
|
|
133
|
+
out += `]\n\n`
|
|
97
134
|
|
|
135
|
+
// add all themes
|
|
136
|
+
let nameI = 0
|
|
98
137
|
dedupedThemes.forEach((theme) => {
|
|
138
|
+
nameI++
|
|
99
139
|
const key = JSON.stringify(theme)
|
|
100
|
-
const
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
140
|
+
const names = dedupedThemeToNames.get(key)!
|
|
141
|
+
const name = `n${nameI}`
|
|
142
|
+
const baseTheme = `export const ${name} = ${objectToJsString(
|
|
143
|
+
theme,
|
|
144
|
+
keys,
|
|
145
|
+
valueToIndex
|
|
146
|
+
)} as Theme`
|
|
147
|
+
out += `\n${baseTheme}`
|
|
148
|
+
const duplicateThemes = names.map((n) => `export const ${n} = ${name} as Theme`)
|
|
149
|
+
out += `\n\n` + duplicateThemes.join('\n')
|
|
110
150
|
})
|
|
111
151
|
|
|
112
|
-
return
|
|
152
|
+
return out
|
|
113
153
|
}
|
|
114
154
|
|
|
115
|
-
function objectToJsString(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}`
|
|
155
|
+
function objectToJsString(
|
|
156
|
+
obj: Object,
|
|
157
|
+
keys: string[],
|
|
158
|
+
valueToIndex: Record<string, number>
|
|
159
|
+
) {
|
|
160
|
+
let arrItems: string[] = []
|
|
161
|
+
for (const key in obj) {
|
|
162
|
+
const ki = keys.indexOf(key)
|
|
163
|
+
const vi = valueToIndex[obj[key]]
|
|
164
|
+
arrItems.push(`[${ki}, ${vi}]`)
|
|
165
|
+
}
|
|
166
|
+
return `t([${arrItems.join(',')}])`
|
|
125
167
|
}
|
|
126
168
|
|
|
127
169
|
function createThemeIntercept(
|
|
@@ -161,3 +203,52 @@ function themeBuilderIntercept(
|
|
|
161
203
|
},
|
|
162
204
|
})
|
|
163
205
|
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Removes a module from the cache
|
|
209
|
+
*/
|
|
210
|
+
function purgeCache(moduleName) {
|
|
211
|
+
// Traverse the cache looking for the files
|
|
212
|
+
// loaded by the specified module name
|
|
213
|
+
searchCache(moduleName, function (mod) {
|
|
214
|
+
delete require.cache[mod.id]
|
|
215
|
+
})
|
|
216
|
+
|
|
217
|
+
// Remove cached paths to the module.
|
|
218
|
+
// Thanks to @bentael for pointing this out.
|
|
219
|
+
// @ts-ignore
|
|
220
|
+
Object.keys(module.constructor._pathCache).forEach(function (cacheKey) {
|
|
221
|
+
if (cacheKey.indexOf(moduleName) > 0) {
|
|
222
|
+
// @ts-ignore
|
|
223
|
+
delete module.constructor._pathCache[cacheKey]
|
|
224
|
+
}
|
|
225
|
+
})
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Traverses the cache to search for all the cached
|
|
230
|
+
* files of the specified module name
|
|
231
|
+
*/
|
|
232
|
+
function searchCache(moduleName, callback) {
|
|
233
|
+
// Resolve the module identified by the specified name
|
|
234
|
+
let mod = require.resolve(moduleName)
|
|
235
|
+
|
|
236
|
+
// Check if the module has been resolved and found within
|
|
237
|
+
// the cache
|
|
238
|
+
// @ts-ignore
|
|
239
|
+
if (mod && (mod = require.cache[mod]) !== undefined) {
|
|
240
|
+
// Recursively go over the results
|
|
241
|
+
;(function traverse(mod) {
|
|
242
|
+
// Go over each of the module's children and
|
|
243
|
+
// traverse them
|
|
244
|
+
// @ts-ignore
|
|
245
|
+
mod.children.forEach(function (child) {
|
|
246
|
+
traverse(child)
|
|
247
|
+
})
|
|
248
|
+
|
|
249
|
+
// Call the specified callback providing the
|
|
250
|
+
// found cached module
|
|
251
|
+
callback(mod)
|
|
252
|
+
})(mod)
|
|
253
|
+
}
|
|
254
|
+
}
|
|
@@ -9,6 +9,8 @@ export async function writeGeneratedThemes(
|
|
|
9
9
|
outPath: string,
|
|
10
10
|
generatedOutput: Awaited<ReturnType<typeof generateThemes>>
|
|
11
11
|
) {
|
|
12
|
+
if (!generatedOutput) return
|
|
13
|
+
|
|
12
14
|
const { generated, state } = generatedOutput
|
|
13
15
|
|
|
14
16
|
const tamaguiDotDirExists = await fs.pathExists(tamaguiDotDir)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-themes.d.ts","sourceRoot":"","sources":["../src/generate-themes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate-themes.d.ts","sourceRoot":"","sources":["../src/generate-themes.ts"],"names":[],"mappings":"AAWA,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM;;;eA4CrD"}
|
|
@@ -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,
|
|
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,iBAsB5D"}
|
package/dist/generate-themes.js
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from, except, desc) => {
|
|
13
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var generate_themes_exports = {};
|
|
30
|
-
__export(generate_themes_exports, {
|
|
31
|
-
generateThemes: () => generateThemes
|
|
32
|
-
});
|
|
33
|
-
module.exports = __toCommonJS(generate_themes_exports);
|
|
34
|
-
var import_module = __toESM(require("module"));
|
|
35
|
-
var import_fs_extra = __toESM(require("fs-extra"));
|
|
36
|
-
async function generateThemes(options) {
|
|
37
|
-
require("esbuild-register/dist/node").register();
|
|
38
|
-
let promise = null;
|
|
39
|
-
const ogRequire = import_module.default.prototype.require;
|
|
40
|
-
import_module.default.prototype.require = function(id) {
|
|
41
|
-
const out = ogRequire.apply(this, arguments);
|
|
42
|
-
if (id === "@tamagui/create-theme/theme-builder") {
|
|
43
|
-
if (!promise) {
|
|
44
|
-
let resolve;
|
|
45
|
-
promise = new Promise((res) => {
|
|
46
|
-
resolve = res;
|
|
47
|
-
});
|
|
48
|
-
return createThemeIntercept(out, {
|
|
49
|
-
onComplete: (result) => {
|
|
50
|
-
resolve == null ? void 0 : resolve(result.themeBuilder);
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return out;
|
|
56
|
-
};
|
|
57
|
-
const requiredThemes = require(options.inPath);
|
|
58
|
-
const themes = requiredThemes["default"] || requiredThemes["themes"];
|
|
59
|
-
const generatedThemes = generatedThemesToTypescript(themes);
|
|
60
|
-
const themeBuilder = promise ? await promise : null;
|
|
61
|
-
await Promise.all([
|
|
62
|
-
import_fs_extra.default.writeFile(options.outPath, generatedThemes),
|
|
63
|
-
(themeBuilder == null ? void 0 : themeBuilder.state) ? import_fs_extra.default.writeFile(
|
|
64
|
-
`${options.outPath}.theme-builder.json`,
|
|
65
|
-
JSON.stringify(themeBuilder == null ? void 0 : themeBuilder.state)
|
|
66
|
-
) : null
|
|
67
|
-
]);
|
|
68
|
-
}
|
|
69
|
-
function generatedThemesToTypescript(themes) {
|
|
70
|
-
const deduped = /* @__PURE__ */ new Map();
|
|
71
|
-
const dedupedToNames = /* @__PURE__ */ new Map();
|
|
72
|
-
for (const name in themes) {
|
|
73
|
-
const theme = themes[name];
|
|
74
|
-
const key = JSON.stringify(theme);
|
|
75
|
-
if (deduped.has(key)) {
|
|
76
|
-
dedupedToNames.set(key, [...dedupedToNames.get(key), name]);
|
|
77
|
-
} else {
|
|
78
|
-
deduped.set(key, theme);
|
|
79
|
-
dedupedToNames.set(key, [name]);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
const baseTypeString = `type Theme = {
|
|
83
|
-
${Object.entries(themes.light || themes[Object.keys(themes)[0]]).map(([k]) => {
|
|
84
|
-
return ` ${k}: string;
|
|
85
|
-
`;
|
|
86
|
-
}).join("")}
|
|
87
|
-
}`;
|
|
88
|
-
let themesString = `${baseTypeString}
|
|
89
|
-
`;
|
|
90
|
-
deduped.forEach((theme) => {
|
|
91
|
-
const key = JSON.stringify(theme);
|
|
92
|
-
const [baseName, ...restNames] = dedupedToNames.get(key);
|
|
93
|
-
const baseTheme = `export const ${baseName} = ${objectToJsString(theme)} as Theme`;
|
|
94
|
-
themesString += `
|
|
95
|
-
${baseTheme}`;
|
|
96
|
-
if (restNames.length) {
|
|
97
|
-
const duplicateThemes = restNames.map(
|
|
98
|
-
(name) => `export const ${name} = ${baseName} as Theme`
|
|
99
|
-
);
|
|
100
|
-
themesString += `
|
|
101
|
-
|
|
102
|
-
` + duplicateThemes.join("\n");
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
return themesString;
|
|
106
|
-
}
|
|
107
|
-
function objectToJsString(obj, indent = 4) {
|
|
108
|
-
const whitespace = new Array(indent).fill(" ").join("");
|
|
109
|
-
return `{
|
|
110
|
-
${Object.entries(obj).map(([k, v]) => `${whitespace}${k}: '${v}'`).join(",\n")}
|
|
111
|
-
}`;
|
|
112
|
-
}
|
|
113
|
-
function createThemeIntercept(createThemeExport, themeBuilderInterceptOpts) {
|
|
114
|
-
return new Proxy(createThemeExport, {
|
|
115
|
-
get(target, key) {
|
|
116
|
-
const out = Reflect.get(target, key);
|
|
117
|
-
if (key === "createThemeBuilder") {
|
|
118
|
-
return new Proxy(out, {
|
|
119
|
-
apply(target2, thisArg, argArray) {
|
|
120
|
-
const builder = Reflect.apply(target2, thisArg, argArray);
|
|
121
|
-
return themeBuilderIntercept(builder, themeBuilderInterceptOpts);
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
return out;
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
function themeBuilderIntercept(themeBuilder, themeBuilderInterceptOpts) {
|
|
130
|
-
return new Proxy(themeBuilder, {
|
|
131
|
-
get(target, key) {
|
|
132
|
-
const out = Reflect.get(target, key);
|
|
133
|
-
if (key === "build") {
|
|
134
|
-
themeBuilderInterceptOpts.onComplete({
|
|
135
|
-
themeBuilder
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
return out;
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
143
|
-
0 && (module.exports = {
|
|
144
|
-
generateThemes
|
|
145
|
-
});
|
|
146
|
-
//# sourceMappingURL=generate-themes.js.map
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/generate-themes.ts"],
|
|
4
|
-
"mappings": "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",
|
|
5
|
-
"names": ["Module", "fs", "target"]
|
|
6
|
-
}
|
package/dist/index.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __copyProps = (to, from, except, desc) => {
|
|
7
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
-
for (let key of __getOwnPropNames(from))
|
|
9
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
-
}
|
|
12
|
-
return to;
|
|
13
|
-
};
|
|
14
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
15
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
|
-
var src_exports = {};
|
|
17
|
-
module.exports = __toCommonJS(src_exports);
|
|
18
|
-
__reExport(src_exports, require("./generate-themes"), module.exports);
|
|
19
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
20
|
-
0 && (module.exports = {
|
|
21
|
-
...require("./generate-themes")
|
|
22
|
-
});
|
|
23
|
-
//# sourceMappingURL=index.js.map
|