@hanzogui/vite-plugin 2.0.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/LICENSE +21 -0
- package/dist/cjs/extensions.cjs +26 -0
- package/dist/cjs/index.cjs +18 -0
- package/dist/cjs/loadGui.cjs +82 -0
- package/dist/cjs/plugin.cjs +301 -0
- package/dist/esm/extensions.mjs +3 -0
- package/dist/esm/extensions.mjs.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/index.mjs +2 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/loadGui.mjs +44 -0
- package/dist/esm/loadGui.mjs.map +1 -0
- package/dist/esm/plugin.mjs +265 -0
- package/dist/esm/plugin.mjs.map +1 -0
- package/package.json +56 -0
- package/src/extensions.ts +12 -0
- package/src/index.ts +1 -0
- package/src/loadGui.ts +94 -0
- package/src/plugin.ts +560 -0
- package/types/extensions.d.ts +2 -0
- package/types/extensions.d.ts.map +1 -0
- package/types/index.d.ts +2 -0
- package/types/index.d.ts.map +1 -0
- package/types/loadGui.d.ts +15 -0
- package/types/loadGui.d.ts.map +1 -0
- package/types/plugin.d.ts +22 -0
- package/types/plugin.d.ts.map +1 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import * as Static from "@hanzogui/static-worker";
|
|
2
|
+
import { getPragmaOptions } from "@hanzogui/static-worker";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { normalizePath, transformWithEsbuild } from "vite";
|
|
7
|
+
import { loadGuiBuildConfig, getLoadPromise, getGuiOptions, ensureFullConfigLoaded } from "./loadGui.mjs";
|
|
8
|
+
const resolve = name => fileURLToPath(import.meta.resolve(name)),
|
|
9
|
+
CACHE_KEY = "__gui_vite_cache__",
|
|
10
|
+
CACHE_SIZE_KEY = "__gui_vite_cache_size__",
|
|
11
|
+
PENDING_KEY = "__gui_vite_pending__";
|
|
12
|
+
function getSharedCache() {
|
|
13
|
+
return globalThis[CACHE_KEY] || (globalThis[CACHE_KEY] = {}), globalThis[CACHE_KEY];
|
|
14
|
+
}
|
|
15
|
+
function getSharedCacheSize() {
|
|
16
|
+
return globalThis[CACHE_SIZE_KEY] || 0;
|
|
17
|
+
}
|
|
18
|
+
function setSharedCacheSize(size) {
|
|
19
|
+
globalThis[CACHE_SIZE_KEY] = size;
|
|
20
|
+
}
|
|
21
|
+
function clearSharedCache() {
|
|
22
|
+
globalThis[CACHE_KEY] = {}, globalThis[CACHE_SIZE_KEY] = 0;
|
|
23
|
+
}
|
|
24
|
+
function getPendingExtractions() {
|
|
25
|
+
return globalThis[PENDING_KEY] || (globalThis[PENDING_KEY] = /* @__PURE__ */new Map()), globalThis[PENDING_KEY];
|
|
26
|
+
}
|
|
27
|
+
function guiAliases(options = {}) {
|
|
28
|
+
const aliases = [];
|
|
29
|
+
if (options.svg && aliases.push({
|
|
30
|
+
find: "react-native-svg",
|
|
31
|
+
replacement: resolve("@hanzogui/react-native-svg")
|
|
32
|
+
}), options.rnwLite) {
|
|
33
|
+
const rnwl = resolve(options.rnwLite === "without-animated" ? "@hanzogui/react-native-web-lite/without-animated" : "@hanzogui/react-native-web-lite"),
|
|
34
|
+
rnwlBase = path.dirname(resolve("@hanzogui/react-native-web-lite/package.json"));
|
|
35
|
+
aliases.push({
|
|
36
|
+
// map deep RNW paths like dist/exports/StyleSheet/preprocess to rnw-lite's flat structure
|
|
37
|
+
// extracts the final path segment (e.g. "preprocess" or "createReactDOMStyle")
|
|
38
|
+
find: /^react-native(?:-web)?\/dist\/(?:exports|modules)\/.*\/([^/]+)$/,
|
|
39
|
+
replacement: `${rnwlBase}/dist/esm/$1.mjs`
|
|
40
|
+
}, {
|
|
41
|
+
find: /^react-native$/,
|
|
42
|
+
replacement: rnwl
|
|
43
|
+
}, {
|
|
44
|
+
find: /^react-native\/(Libraries\/Utilities\/codegenNativeComponent|Libraries\/Utilities\/codegenNativeCommand)$/,
|
|
45
|
+
replacement: `${rnwlBase}/$1`
|
|
46
|
+
}, {
|
|
47
|
+
find: "react-native/package.json",
|
|
48
|
+
replacement: resolve("@hanzogui/react-native-web-lite/package.json")
|
|
49
|
+
}, {
|
|
50
|
+
find: /^react-native-web$/,
|
|
51
|
+
replacement: rnwl
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return aliases;
|
|
55
|
+
}
|
|
56
|
+
function guiPlugin({
|
|
57
|
+
disableResolveConfig,
|
|
58
|
+
...guiOptionsIn
|
|
59
|
+
} = {}) {
|
|
60
|
+
let shouldExtract = !guiOptionsIn.disableExtraction,
|
|
61
|
+
watcher;
|
|
62
|
+
const enableNativeEnv = !!globalThis.__vxrnEnableNativeEnv,
|
|
63
|
+
extensions = [".web.mjs", ".web.js", ".web.jsx", ".web.ts", ".web.tsx", ".mjs", ".js", ".mts", ".ts", ".jsx", ".tsx", ".json"];
|
|
64
|
+
loadGuiBuildConfig(guiOptionsIn);
|
|
65
|
+
const ensureLoaded = async () => {
|
|
66
|
+
const promise = getLoadPromise();
|
|
67
|
+
promise && (await promise);
|
|
68
|
+
const options = getGuiOptions();
|
|
69
|
+
return options && (shouldExtract = !options.disableExtraction), options;
|
|
70
|
+
},
|
|
71
|
+
getHash = input => createHash("sha1").update(input).digest("base64"),
|
|
72
|
+
memoryCache = getSharedCache(),
|
|
73
|
+
cssMap = /* @__PURE__ */new Map();
|
|
74
|
+
let config, server;
|
|
75
|
+
const virtualExt = ".gui.css",
|
|
76
|
+
getAbsoluteVirtualFileId = filePath => filePath.startsWith(config.root) ? filePath : normalizePath(path.join(config.root, filePath));
|
|
77
|
+
function isNotClient(environment) {
|
|
78
|
+
return environment?.name && environment.name !== "client";
|
|
79
|
+
}
|
|
80
|
+
function isNative(environment) {
|
|
81
|
+
return environment?.name && (environment.name === "ios" || environment.name === "android");
|
|
82
|
+
}
|
|
83
|
+
function invalidateModule(absoluteId) {
|
|
84
|
+
if (!server) return;
|
|
85
|
+
const {
|
|
86
|
+
moduleGraph
|
|
87
|
+
} = server,
|
|
88
|
+
modules = moduleGraph.getModulesByFile(absoluteId);
|
|
89
|
+
if (modules) for (const module of modules) moduleGraph.invalidateModule(module), module.lastHMRTimestamp = module.lastInvalidationTimestamp || Date.now();
|
|
90
|
+
}
|
|
91
|
+
return [{
|
|
92
|
+
name: "hanzo-gui",
|
|
93
|
+
enforce: "pre",
|
|
94
|
+
configureServer(_server) {
|
|
95
|
+
server = _server;
|
|
96
|
+
},
|
|
97
|
+
async buildEnd() {
|
|
98
|
+
await watcher?.then(res => {
|
|
99
|
+
res?.dispose();
|
|
100
|
+
});
|
|
101
|
+
},
|
|
102
|
+
async transform(code, id) {
|
|
103
|
+
if (id.includes("expo-linear-gradient")) return transformWithEsbuild(code, id, {
|
|
104
|
+
loader: "jsx",
|
|
105
|
+
jsx: "automatic"
|
|
106
|
+
});
|
|
107
|
+
},
|
|
108
|
+
async config(_, env) {
|
|
109
|
+
const options = await ensureLoaded();
|
|
110
|
+
if (!options) throw new Error("No hanzo-gui options loaded");
|
|
111
|
+
return options.disableWatchGuiConfig || (watcher = Static.watchGuiConfig({
|
|
112
|
+
components: ["@hanzo/gui"],
|
|
113
|
+
config: "./src/gui.config.ts",
|
|
114
|
+
...options
|
|
115
|
+
}).catch(err => {
|
|
116
|
+
console.error(` [Hanzo GUI] Error watching config: ${err}`);
|
|
117
|
+
})), {
|
|
118
|
+
envPrefix: ["HANZO_GUI_"],
|
|
119
|
+
environments: {
|
|
120
|
+
client: {
|
|
121
|
+
define: {
|
|
122
|
+
"process.env.HANZO_GUI_IS_CLIENT": JSON.stringify(!0),
|
|
123
|
+
"process.env.HANZO_GUI_ENVIRONMENT": '"client"'
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
define: {
|
|
128
|
+
// reanimated support
|
|
129
|
+
_frameTimestamp: void 0,
|
|
130
|
+
_WORKLET: !1,
|
|
131
|
+
__DEV__: `${env.mode === "development"}`,
|
|
132
|
+
"process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV || env.mode),
|
|
133
|
+
"process.env.ENABLE_RSC": JSON.stringify(process.env.ENABLE_RSC || ""),
|
|
134
|
+
"process.env.ENABLE_STEPS": JSON.stringify(process.env.ENABLE_STEPS || ""),
|
|
135
|
+
"process.env.IS_STATIC": JSON.stringify(!1),
|
|
136
|
+
...(env.mode === "production" && {
|
|
137
|
+
"process.env.HANZO_GUI_OPTIMIZE_THEMES": JSON.stringify(!0)
|
|
138
|
+
})
|
|
139
|
+
},
|
|
140
|
+
resolve: disableResolveConfig || enableNativeEnv ? {} : {
|
|
141
|
+
extensions,
|
|
142
|
+
alias: {
|
|
143
|
+
...(options.platform !== "native" && {
|
|
144
|
+
"react-native/Libraries/Renderer/shims/ReactFabric": resolve("@hanzogui/proxy-worm"),
|
|
145
|
+
"react-native/Libraries/Utilities/codegenNativeComponent": resolve("@hanzogui/proxy-worm"),
|
|
146
|
+
"react-native-svg": resolve("@hanzogui/react-native-svg"),
|
|
147
|
+
...(!options?.useReactNativeWebLite && {
|
|
148
|
+
"react-native": resolve("react-native-web")
|
|
149
|
+
})
|
|
150
|
+
})
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}, {
|
|
156
|
+
name: "gui-rnw-lite",
|
|
157
|
+
config() {
|
|
158
|
+
if (enableNativeEnv) return {};
|
|
159
|
+
const options = getGuiOptions();
|
|
160
|
+
return options?.useReactNativeWebLite ? {
|
|
161
|
+
resolve: {
|
|
162
|
+
alias: guiAliases({
|
|
163
|
+
rnwLite: options.useReactNativeWebLite
|
|
164
|
+
})
|
|
165
|
+
}
|
|
166
|
+
} : {};
|
|
167
|
+
}
|
|
168
|
+
}, {
|
|
169
|
+
name: "gui-extract",
|
|
170
|
+
enforce: "pre",
|
|
171
|
+
async config(userConf) {
|
|
172
|
+
const options = await ensureLoaded();
|
|
173
|
+
userConf.optimizeDeps ||= {}, userConf.optimizeDeps.include ||= [], userConf.optimizeDeps.include.push("inline-style-prefixer"), shouldExtract && userConf.optimizeDeps.include.push("@hanzogui/core/inject-styles");
|
|
174
|
+
},
|
|
175
|
+
async configResolved(resolvedConfig) {
|
|
176
|
+
config = resolvedConfig;
|
|
177
|
+
},
|
|
178
|
+
async resolveId(source) {
|
|
179
|
+
if (!shouldExtract || isNative(this.environment) || isNotClient(this.environment)) return;
|
|
180
|
+
const [validId, query] = source.split("?");
|
|
181
|
+
if (!validId.endsWith(virtualExt)) return;
|
|
182
|
+
const absoluteId = source.startsWith(config.root) ? source : getAbsoluteVirtualFileId(validId);
|
|
183
|
+
if (cssMap.has(absoluteId)) return absoluteId + (query ? `?${query}` : "");
|
|
184
|
+
},
|
|
185
|
+
async load(id) {
|
|
186
|
+
if (!shouldExtract || getGuiOptions()?.disable || isNative(this.environment) || isNotClient(this.environment)) return;
|
|
187
|
+
const [validId] = id.split("?");
|
|
188
|
+
return cssMap.get(validId);
|
|
189
|
+
},
|
|
190
|
+
transform: {
|
|
191
|
+
order: "pre",
|
|
192
|
+
async handler(code, id) {
|
|
193
|
+
const options = await ensureLoaded();
|
|
194
|
+
if (await ensureFullConfigLoaded(), options?.disable || isNative(this.environment)) return;
|
|
195
|
+
const [validId] = id.split("?");
|
|
196
|
+
if (!validId.endsWith(".tsx")) return;
|
|
197
|
+
const {
|
|
198
|
+
shouldDisable,
|
|
199
|
+
shouldPrintDebug
|
|
200
|
+
} = await getPragmaOptions({
|
|
201
|
+
source: code,
|
|
202
|
+
path: validId
|
|
203
|
+
});
|
|
204
|
+
if (shouldPrintDebug && (console.trace(`Current file: ${id} in environment: ${this.environment?.name}, shouldDisable: ${shouldDisable}`), console.info(`
|
|
205
|
+
|
|
206
|
+
Original source:
|
|
207
|
+
${code}
|
|
208
|
+
|
|
209
|
+
`)), shouldDisable) return;
|
|
210
|
+
const isSSR = isNotClient(this.environment),
|
|
211
|
+
cacheKey = getHash(`${code}${id}`),
|
|
212
|
+
pending = getPendingExtractions(),
|
|
213
|
+
formatResult = entry => ({
|
|
214
|
+
code: !isSSR && entry.cssImport ? `${entry.js}
|
|
215
|
+
${entry.cssImport}` : entry.js,
|
|
216
|
+
map: entry.map
|
|
217
|
+
}),
|
|
218
|
+
cached = memoryCache[cacheKey];
|
|
219
|
+
if (cached) return process.env.DEBUG_HANZO_GUI_CACHE && console.info(`[gui-cache] HIT ${this.environment?.name || "unknown"} ${id.split("/").pop()} key=${cacheKey.slice(0, 8)}`), formatResult(cached);
|
|
220
|
+
const pendingExtraction = pending.get(cacheKey);
|
|
221
|
+
if (pendingExtraction) {
|
|
222
|
+
process.env.DEBUG_HANZO_GUI_CACHE && console.info(`[gui-cache] WAIT ${this.environment?.name || "unknown"} ${id.split("/").pop()} key=${cacheKey.slice(0, 8)}`);
|
|
223
|
+
const result = await pendingExtraction;
|
|
224
|
+
return result ? formatResult(result) : void 0;
|
|
225
|
+
}
|
|
226
|
+
process.env.DEBUG_HANZO_GUI_CACHE && console.info(`[gui-cache] EXTRACT ${this.environment?.name || "unknown"} ${id.split("/").pop()} key=${cacheKey.slice(0, 8)}`);
|
|
227
|
+
const extractionPromise = (async () => {
|
|
228
|
+
let extracted;
|
|
229
|
+
try {
|
|
230
|
+
extracted = await Static.extractToClassNames({
|
|
231
|
+
source: code,
|
|
232
|
+
sourcePath: validId,
|
|
233
|
+
options,
|
|
234
|
+
shouldPrintDebug
|
|
235
|
+
});
|
|
236
|
+
} catch (err) {
|
|
237
|
+
return process.env.DEBUG_HANZO_GUI_CACHE && console.info(`[gui-cache] ERROR extracting ${id.split("/").pop()}:`, err), console.error(err instanceof Error ? err.message : String(err)), null;
|
|
238
|
+
}
|
|
239
|
+
if (!extracted) return process.env.DEBUG_HANZO_GUI_CACHE && console.info(`[gui-cache] no extraction result for ${id.split("/").pop()}`), null;
|
|
240
|
+
const rootRelativeId = `${validId}${virtualExt}`,
|
|
241
|
+
absoluteId = getAbsoluteVirtualFileId(rootRelativeId);
|
|
242
|
+
let cssImport = null;
|
|
243
|
+
extracted.styles && (this.addWatchFile(rootRelativeId), server && cssMap.has(absoluteId) && invalidateModule(rootRelativeId), cssImport = `import "${rootRelativeId}";`, cssMap.set(absoluteId, extracted.styles));
|
|
244
|
+
const jsCode = extracted.js.toString(),
|
|
245
|
+
cacheEntry = {
|
|
246
|
+
js: jsCode,
|
|
247
|
+
map: extracted.map,
|
|
248
|
+
cssImport
|
|
249
|
+
},
|
|
250
|
+
newSize = getSharedCacheSize() + jsCode.length;
|
|
251
|
+
return newSize > 67108864 ? clearSharedCache() : setSharedCacheSize(newSize), memoryCache[cacheKey] = cacheEntry, process.env.DEBUG_HANZO_GUI_CACHE && console.info(`[gui-cache] WRITE key=${cacheKey.slice(0, 8)} cacheSize=${Object.keys(memoryCache).length}`), cacheEntry;
|
|
252
|
+
})();
|
|
253
|
+
pending.set(cacheKey, extractionPromise);
|
|
254
|
+
try {
|
|
255
|
+
const result = await extractionPromise;
|
|
256
|
+
return result ? formatResult(result) : void 0;
|
|
257
|
+
} finally {
|
|
258
|
+
pending.delete(cacheKey);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}];
|
|
263
|
+
}
|
|
264
|
+
export { guiAliases, guiPlugin };
|
|
265
|
+
//# sourceMappingURL=plugin.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Static","getPragmaOptions","createHash","path","fileURLToPath","normalizePath","transformWithEsbuild","loadGuiBuildConfig","getLoadPromise","getGuiOptions","ensureFullConfigLoaded","resolve","name","import","meta","CACHE_KEY","CACHE_SIZE_KEY","PENDING_KEY","getSharedCache","globalThis","getSharedCacheSize","setSharedCacheSize","size","clearSharedCache","getPendingExtractions","Map","guiAliases","options","aliases","svg","push","find","replacement","rnwLite","rnwl","rnwlBase","dirname","guiPlugin","disableResolveConfig","guiOptionsIn","shouldExtract","disableExtraction","watcher","enableNativeEnv","__vxrnEnableNativeEnv","extensions","ensureLoaded","promise","getHash","input","update","digest","memoryCache","cssMap","config","server","virtualExt","getAbsoluteVirtualFileId","filePath","startsWith","root","join","isNotClient","environment","isNative","invalidateModule","absoluteId","moduleGraph","modules","getModulesByFile","module","lastHMRTimestamp","lastInvalidationTimestamp","Date","now","enforce","configureServer","_server","buildEnd","then","res","dispose","transform","code","id","includes","loader","jsx","_","env","Error","disableWatchGuiConfig","watchGuiConfig","components","catch","err","console","error","envPrefix","environments","client","define","JSON","stringify","_frameTimestamp","_WORKLET","__DEV__","mode","process","NODE_ENV","ENABLE_RSC","ENABLE_STEPS","alias","platform","useReactNativeWebLite","userConf","optimizeDeps","include","configResolved","resolvedConfig","resolveId","source","validId","query","split","endsWith","has","load","disable","get","order","handler","shouldDisable","shouldPrintDebug","trace","info","isSSR","cacheKey","pending","formatResult","entry","cssImport","js","map","cached","DEBUG_HANZO_GUI_CACHE","pop","slice","pendingExtraction","result","extractionPromise","extracted","extractToClassNames","sourcePath","message","String","rootRelativeId","styles","addWatchFile","set","jsCode","toString","cacheEntry","newSize","length","Object","keys","delete"],"sources":["../../src/plugin.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hanzogui/vite-plugin",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"files": [
|
|
6
|
+
"src",
|
|
7
|
+
"types",
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"type": "module",
|
|
11
|
+
"main": "dist/cjs",
|
|
12
|
+
"module": "dist/esm",
|
|
13
|
+
"types": "./types/index.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
"./package.json": "./package.json",
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./types/index.d.ts",
|
|
18
|
+
"browser": "./dist/esm/index.mjs",
|
|
19
|
+
"module": "./dist/esm/index.mjs",
|
|
20
|
+
"import": "./dist/esm/index.mjs",
|
|
21
|
+
"require": "./dist/cjs/index.cjs",
|
|
22
|
+
"default": "./dist/cjs/index.cjs"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"publishConfig": {
|
|
26
|
+
"access": "public"
|
|
27
|
+
},
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "hanzo-gui-build --skip-native",
|
|
30
|
+
"watch": "hanzo-gui-build --skip-native --watch",
|
|
31
|
+
"clean": "hanzo-gui-build clean",
|
|
32
|
+
"clean:build": "hanzo-gui-build clean:build"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@hanzogui/fake-react-native": "workspace:*",
|
|
36
|
+
"@hanzogui/proxy-worm": "workspace:*",
|
|
37
|
+
"@hanzogui/react-native-svg": "workspace:*",
|
|
38
|
+
"@hanzogui/react-native-web-lite": "workspace:*",
|
|
39
|
+
"@hanzogui/static-worker": "workspace:*",
|
|
40
|
+
"@hanzogui/types": "workspace:*",
|
|
41
|
+
"esm-resolve": "^1.0.8",
|
|
42
|
+
"fs-extra": "^11.2.0",
|
|
43
|
+
"outdent": "^0.8.0",
|
|
44
|
+
"react-native-web": "^0.21.0"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@hanzogui/build": "workspace:*",
|
|
48
|
+
"vite": "^8.0.0"
|
|
49
|
+
},
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"vite": "*"
|
|
52
|
+
},
|
|
53
|
+
"hanzo-gui-build": {
|
|
54
|
+
"skipEnvToMeta": true
|
|
55
|
+
}
|
|
56
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './plugin'
|
package/src/loadGui.ts
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import * as StaticWorker from '@hanzogui/static-worker'
|
|
2
|
+
import type { GuiOptions } from '@hanzogui/types'
|
|
3
|
+
|
|
4
|
+
// use globalThis to share state across vite environments (SSR, client, etc.)
|
|
5
|
+
const LOAD_STATE_KEY = '__gui_load_state__'
|
|
6
|
+
|
|
7
|
+
type LoadState = {
|
|
8
|
+
loadPromise: Promise<GuiOptions> | null
|
|
9
|
+
loadedOptions: GuiOptions | null
|
|
10
|
+
fullConfigLoaded: boolean
|
|
11
|
+
fullConfigLoadPromise: Promise<void> | null
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function getLoadState(): LoadState {
|
|
15
|
+
if (!(globalThis as any)[LOAD_STATE_KEY]) {
|
|
16
|
+
;(globalThis as any)[LOAD_STATE_KEY] = {
|
|
17
|
+
loadPromise: null,
|
|
18
|
+
loadedOptions: null,
|
|
19
|
+
fullConfigLoaded: false,
|
|
20
|
+
fullConfigLoadPromise: null,
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return (globalThis as any)[LOAD_STATE_KEY]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function getGuiOptions(): GuiOptions | null {
|
|
27
|
+
return getLoadState().loadedOptions
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function getLoadPromise(): Promise<GuiOptions> | null {
|
|
31
|
+
return getLoadState().loadPromise
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Load just the gui.build.ts config (lightweight)
|
|
36
|
+
* This doesn't bundle the full gui config - call ensureFullConfigLoaded() for that
|
|
37
|
+
*/
|
|
38
|
+
export async function loadGuiBuildConfig(
|
|
39
|
+
optionsIn?: Partial<GuiOptions>
|
|
40
|
+
): Promise<GuiOptions> {
|
|
41
|
+
const state = getLoadState()
|
|
42
|
+
if (state.loadedOptions) return state.loadedOptions
|
|
43
|
+
if (state.loadPromise) return state.loadPromise
|
|
44
|
+
|
|
45
|
+
state.loadPromise = (async () => {
|
|
46
|
+
const options = await StaticWorker.loadGuiBuildConfig({
|
|
47
|
+
...optionsIn,
|
|
48
|
+
platform: 'web',
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
state.loadedOptions = options
|
|
52
|
+
return options
|
|
53
|
+
})()
|
|
54
|
+
|
|
55
|
+
return state.loadPromise
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Ensure the full gui config is loaded (heavy - bundles config + components)
|
|
60
|
+
* Call this lazily when transform/extraction is actually needed
|
|
61
|
+
*/
|
|
62
|
+
export async function ensureFullConfigLoaded(): Promise<void> {
|
|
63
|
+
const state = getLoadState()
|
|
64
|
+
|
|
65
|
+
if (state.fullConfigLoaded) return
|
|
66
|
+
if (state.fullConfigLoadPromise) return state.fullConfigLoadPromise
|
|
67
|
+
|
|
68
|
+
// set promise immediately to prevent race conditions
|
|
69
|
+
// (don't await loadGuiBuildConfig before setting this)
|
|
70
|
+
state.fullConfigLoadPromise = (async () => {
|
|
71
|
+
const options = await loadGuiBuildConfig()
|
|
72
|
+
|
|
73
|
+
// load full gui config in worker (asynchronous)
|
|
74
|
+
if (!options.disableWatchGuiConfig && !options.disable) {
|
|
75
|
+
await StaticWorker.loadGui({
|
|
76
|
+
components: ['@hanzo/gui'],
|
|
77
|
+
platform: 'web',
|
|
78
|
+
...options,
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
state.fullConfigLoaded = true
|
|
82
|
+
})()
|
|
83
|
+
|
|
84
|
+
return state.fullConfigLoadPromise
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export async function cleanup() {
|
|
88
|
+
await StaticWorker.destroyPool()
|
|
89
|
+
const state = getLoadState()
|
|
90
|
+
state.loadPromise = null
|
|
91
|
+
state.loadedOptions = null
|
|
92
|
+
state.fullConfigLoaded = false
|
|
93
|
+
state.fullConfigLoadPromise = null
|
|
94
|
+
}
|