@omniviewdev/vite-plugin 0.4.1 → 0.5.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/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/index.ts
2
- import path from "node:path";
2
+ import path3 from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
 
5
5
  // src/sharedPackages.ts
@@ -55,16 +55,346 @@ function safeFilename(packageName) {
55
55
  return result;
56
56
  }
57
57
 
58
+ // src/workspace.ts
59
+ import { realpathSync, statSync } from "node:fs";
60
+ import path from "node:path";
61
+ function workspaceViteRoots(raw) {
62
+ if (raw === void 0) {
63
+ return void 0;
64
+ }
65
+ const roots = JSON.parse(raw);
66
+ if (!Array.isArray(roots) || roots.length === 0) {
67
+ throw new Error("OMNIVIEW_VITE_ALLOWED_ROOTS must be a nonempty JSON array");
68
+ }
69
+ return [...new Set(roots.map((root) => {
70
+ if (typeof root !== "string" || !path.isAbsolute(root) || root.includes("*") || root.includes("\0") || path.parse(root).root === root) {
71
+ throw new Error("Vite workspace roots must be explicit absolute repository directories");
72
+ }
73
+ const canonical = realpathSync(root);
74
+ if (canonical !== path.resolve(root) || !statSync(canonical).isDirectory()) {
75
+ throw new Error("Vite workspace roots must be canonical repository directories");
76
+ }
77
+ return canonical;
78
+ }))];
79
+ }
80
+ function workspaceVitePort(raw) {
81
+ if (raw === void 0) {
82
+ return void 0;
83
+ }
84
+ if (!/^[0-9]+$/.test(raw)) {
85
+ throw new Error("Owned Vite port must be an integer");
86
+ }
87
+ const port = Number(raw);
88
+ if (port < 1 || port > 65535) {
89
+ throw new Error("Owned Vite port is outside 1..65535");
90
+ }
91
+ return port;
92
+ }
93
+ function workspaceViteCacheDirectory(raw) {
94
+ if (raw === void 0) {
95
+ return void 0;
96
+ }
97
+ if (!path.isAbsolute(raw) || raw.includes("\0") || path.parse(raw).root === raw) {
98
+ throw new Error("Managed Vite cache must be an explicit absolute directory");
99
+ }
100
+ const canonical = realpathSync(raw);
101
+ if (canonical !== path.resolve(raw) || !statSync(canonical).isDirectory()) {
102
+ throw new Error("Managed Vite cache must be an existing canonical owned directory");
103
+ }
104
+ return canonical;
105
+ }
106
+
107
+ // src/feedback.ts
108
+ import { execFileSync } from "node:child_process";
109
+ import {
110
+ closeSync,
111
+ constants,
112
+ fstatSync,
113
+ lstatSync,
114
+ openSync,
115
+ readSync,
116
+ realpathSync as realpathSync2,
117
+ statSync as statSync2,
118
+ watch
119
+ } from "node:fs";
120
+ import path2 from "node:path";
121
+ var navigationTypes = { update: true, "full-reload": true, prune: true };
122
+ var maximumStateBytes = 64 * 1024;
123
+ var maximumStateSize = BigInt(maximumStateBytes);
124
+ function feedbackContext(raw) {
125
+ const value = JSON.parse(raw);
126
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
127
+ throw new Error("OMNIVIEW_VITE_FEEDBACK must be an explicit managed feedback context");
128
+ }
129
+ const context = value;
130
+ if (context.schemaVersion !== 1 || typeof context.workspaceID !== "string" || !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(context.workspaceID) || typeof context.generation !== "string" || !context.generation || context.generation.includes("\0") || typeof context.workspaceRoot !== "string" || !path2.isAbsolute(context.workspaceRoot) || context.workspaceRoot.includes("\0") || path2.parse(context.workspaceRoot).root === context.workspaceRoot || typeof context.file !== "string" || !path2.isAbsolute(context.file) || context.file.includes("\0") || path2.resolve(context.file) !== context.file) {
131
+ throw new Error("Managed Vite feedback requires versioned, explicit workspace and file ownership");
132
+ }
133
+ if (realpathSync2(context.workspaceRoot) !== context.workspaceRoot || !statSync2(context.workspaceRoot).isDirectory()) {
134
+ throw new Error("Managed Vite feedback workspace must be an existing canonical directory");
135
+ }
136
+ let authority;
137
+ if (context.authority !== void 0) {
138
+ if (!context.authority || typeof context.authority !== "object" || Array.isArray(context.authority)) {
139
+ throw new Error("Managed Vite feedback authority must be explicit supervisor ownership");
140
+ }
141
+ const value2 = context.authority;
142
+ if (typeof value2.executable !== "string" || !path2.isAbsolute(value2.executable) || value2.executable.includes("\0") || path2.resolve(value2.executable) !== value2.executable || realpathSync2(value2.executable) !== value2.executable || !lstatSync(value2.executable).isFile() || !value2.identity || typeof value2.identity !== "object" || Array.isArray(value2.identity)) {
143
+ throw new Error("Managed Vite feedback authority requires its exact canonical supervisor executable");
144
+ }
145
+ const identity = value2.identity;
146
+ if (typeof identity.volume !== "string" || !/^[0-9]+$/.test(identity.volume) || typeof identity.fileID !== "string" || !/^[0-9a-f]{32}$/.test(identity.fileID)) {
147
+ throw new Error("Managed Vite feedback authority requires the full stable file identity");
148
+ }
149
+ authority = {
150
+ executable: value2.executable,
151
+ identity: { volume: identity.volume, fileID: identity.fileID }
152
+ };
153
+ }
154
+ return {
155
+ schemaVersion: 1,
156
+ workspaceID: context.workspaceID,
157
+ generation: context.generation,
158
+ workspaceRoot: context.workspaceRoot,
159
+ file: context.file,
160
+ authority
161
+ };
162
+ }
163
+ function readViteFeedbackAuthority(raw) {
164
+ try {
165
+ const context = feedbackContext(raw);
166
+ if (!context.authority) {
167
+ return true;
168
+ }
169
+ const output = execFileSync(context.authority.executable, ["vite-feedback-read", "--context", raw], {
170
+ encoding: "utf8",
171
+ shell: false,
172
+ windowsHide: true,
173
+ timeout: 2e3,
174
+ maxBuffer: 1024,
175
+ stdio: ["ignore", "pipe", "pipe"]
176
+ });
177
+ const result = JSON.parse(output);
178
+ if (!result || typeof result !== "object" || Array.isArray(result) || Object.keys(result).length !== 1) {
179
+ return true;
180
+ }
181
+ return result.held !== false;
182
+ } catch {
183
+ return true;
184
+ }
185
+ }
186
+ function privateFeedbackFile(stat) {
187
+ const owner = process.getuid?.();
188
+ return stat.isFile() && owner !== void 0 && stat.uid === BigInt(owner) && (stat.mode & 0o777n) === 0o600n;
189
+ }
190
+ function retainUnixFeedbackAuthority(context) {
191
+ const bytes = Buffer.alloc(maximumStateBytes + 1);
192
+ let identity;
193
+ function readHeld(captureIdentity = false) {
194
+ let descriptor;
195
+ try {
196
+ descriptor = openSync(context.file, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
197
+ const stat = fstatSync(descriptor, { bigint: true });
198
+ if (!privateFeedbackFile(stat) || realpathSync2(context.file) !== context.file) {
199
+ return true;
200
+ }
201
+ if (captureIdentity) {
202
+ identity = stat;
203
+ }
204
+ if (!identity || stat.dev !== identity.dev || stat.ino !== identity.ino) {
205
+ return true;
206
+ }
207
+ const linked = lstatSync(context.file, { bigint: true });
208
+ if (!privateFeedbackFile(linked) || linked.dev !== identity.dev || linked.ino !== identity.ino || stat.size < 1n || stat.size > maximumStateSize) {
209
+ return true;
210
+ }
211
+ const length = readSync(descriptor, bytes, 0, bytes.length, 0);
212
+ if (BigInt(length) !== stat.size) {
213
+ return true;
214
+ }
215
+ const state = JSON.parse(bytes.toString("utf8", 0, length));
216
+ if (!state || typeof state !== "object" || Array.isArray(state)) {
217
+ return true;
218
+ }
219
+ const value = state;
220
+ const after = lstatSync(context.file, { bigint: true });
221
+ return !privateFeedbackFile(after) || after.dev !== identity.dev || after.ino !== identity.ino || value.schemaVersion !== context.schemaVersion || value.workspaceID !== context.workspaceID || value.generation !== context.generation || value.workspaceRoot !== context.workspaceRoot || typeof value.held !== "boolean" || value.held;
222
+ } catch {
223
+ return true;
224
+ } finally {
225
+ if (descriptor !== void 0) {
226
+ closeSync(descriptor);
227
+ }
228
+ }
229
+ }
230
+ return { initiallyHeld: readHeld(true), readHeld };
231
+ }
232
+ function feedbackAuthorityReader(context, raw) {
233
+ if (process.platform !== "win32") {
234
+ return retainUnixFeedbackAuthority(context);
235
+ }
236
+ return {
237
+ initiallyHeld: readViteFeedbackAuthority(raw),
238
+ readHeld: () => readViteFeedbackAuthority(raw)
239
+ };
240
+ }
241
+ function attachManagedViteFeedback(server, raw = process.env.OMNIVIEW_VITE_FEEDBACK) {
242
+ if (raw === void 0) {
243
+ return;
244
+ }
245
+ const context = feedbackContext(raw);
246
+ if (process.platform === "win32" && !context.authority) {
247
+ throw new Error("Managed Vite feedback on Windows requires its supervisor file authority");
248
+ }
249
+ const httpServer = server.httpServer;
250
+ const hmr = typeof server.config.server.hmr === "object" ? server.config.server.hmr : void 0;
251
+ if (!httpServer || Boolean(hmr?.server && hmr.server !== httpServer) || Boolean(hmr?.port && hmr.port !== server.config.server.port)) {
252
+ throw new Error("Managed Vite feedback requires HMR on its owned HTTP listener");
253
+ }
254
+ const authority = feedbackAuthorityReader(context, raw);
255
+ let closed = false;
256
+ let watchFailed = false;
257
+ let watcher;
258
+ let held = authority.initiallyHeld;
259
+ const pendingPings = /* @__PURE__ */ new Set();
260
+ function readHeld() {
261
+ return closed || watchFailed || authority.readHeld();
262
+ }
263
+ const originalWebSocketSend = server.ws.send;
264
+ function reloadConnectedConsumers() {
265
+ if (server.ws.clients.size > 0) {
266
+ originalWebSocketSend.call(server.ws, { type: "full-reload", path: "*" });
267
+ }
268
+ }
269
+ function releasePendingHTTPPings() {
270
+ for (const response of pendingPings) {
271
+ held = readHeld();
272
+ if (held) {
273
+ return "held";
274
+ }
275
+ pendingPings.delete(response);
276
+ response.writeHead(204).end();
277
+ }
278
+ return "released";
279
+ }
280
+ function refreshReadinessAndReleaseConsumers() {
281
+ const previouslyHeld = held;
282
+ held = readHeld();
283
+ if (held) {
284
+ return "held";
285
+ }
286
+ if (!previouslyHeld) {
287
+ return "ready";
288
+ }
289
+ held = readHeld();
290
+ if (held) {
291
+ return "held";
292
+ }
293
+ reloadConnectedConsumers();
294
+ return releasePendingHTTPPings();
295
+ }
296
+ const environments = server.environments;
297
+ const channels = /* @__PURE__ */ new Set([server.ws]);
298
+ for (const environment of Object.values(environments ?? {})) {
299
+ channels.add(environment.hot);
300
+ }
301
+ for (const channel of channels) {
302
+ const original = channel.send;
303
+ channel.send = function(payload, data) {
304
+ if (payload && typeof payload === "object" && "type" in payload && typeof payload.type === "string" && navigationTypes[payload.type]) {
305
+ if (refreshReadinessAndReleaseConsumers() !== "ready" || server.ws.clients.size === 0) {
306
+ return;
307
+ }
308
+ }
309
+ original.call(this, payload, data);
310
+ };
311
+ }
312
+ server.middlewares.use((request, response, next) => {
313
+ if (request.headers.accept !== "text/x-vite-ping") {
314
+ next();
315
+ return;
316
+ }
317
+ if (refreshReadinessAndReleaseConsumers() !== "held") {
318
+ response.writeHead(204).end();
319
+ return;
320
+ }
321
+ pendingPings.add(response);
322
+ response.once("close", () => pendingPings.delete(response));
323
+ });
324
+ const upgradeHandlers = /* @__PURE__ */ new Map();
325
+ for (const listener of httpServer.rawListeners("upgrade")) {
326
+ const original = listener;
327
+ const gated = function(request, socket, head) {
328
+ if (request.headers["sec-websocket-protocol"] === "vite-ping") {
329
+ if (refreshReadinessAndReleaseConsumers() === "held") {
330
+ socket.destroy();
331
+ return;
332
+ }
333
+ }
334
+ original.call(this, request, socket, head);
335
+ };
336
+ upgradeHandlers.set(original, gated);
337
+ httpServer.off("upgrade", original);
338
+ httpServer.on("upgrade", gated);
339
+ }
340
+ const originalClose = server.close;
341
+ function cleanup() {
342
+ if (closed) {
343
+ return;
344
+ }
345
+ closed = true;
346
+ watcher?.close();
347
+ for (const response of pendingPings) {
348
+ response.destroy();
349
+ }
350
+ pendingPings.clear();
351
+ for (const [original, gated] of upgradeHandlers) {
352
+ httpServer.off("upgrade", gated);
353
+ httpServer.on("upgrade", original);
354
+ }
355
+ httpServer.off("close", cleanup);
356
+ server.close = originalClose;
357
+ }
358
+ server.close = async function() {
359
+ cleanup();
360
+ await originalClose.call(this);
361
+ };
362
+ httpServer.once("close", cleanup);
363
+ try {
364
+ watcher = watch(context.file, { persistent: false }, () => {
365
+ refreshReadinessAndReleaseConsumers();
366
+ });
367
+ watcher.on("error", () => {
368
+ watchFailed = true;
369
+ held = true;
370
+ });
371
+ refreshReadinessAndReleaseConsumers();
372
+ } catch {
373
+ watchFailed = true;
374
+ held = true;
375
+ }
376
+ }
377
+ function managedViteFeedback() {
378
+ return {
379
+ name: "omniview-managed-vite-feedback",
380
+ apply: "serve",
381
+ enforce: "pre",
382
+ configureServer(server) {
383
+ attachManagedViteFeedback(server);
384
+ }
385
+ };
386
+ }
387
+
58
388
  // src/index.ts
59
- var __dirname = path.dirname(fileURLToPath(import.meta.url));
389
+ var moduleDirectory = typeof __dirname === "string" ? __dirname : path3.dirname(fileURLToPath(import.meta.url));
60
390
  function getShimsDir() {
61
- const packageRoot = path.resolve(__dirname, "..");
62
- return path.join(packageRoot, "shims");
391
+ const packageRoot = path3.resolve(moduleDirectory, "..");
392
+ return path3.join(packageRoot, "shims");
63
393
  }
64
394
  function buildShimMap(shimsDir) {
65
395
  const map = /* @__PURE__ */ new Map();
66
396
  for (const pkg of SHARED_PACKAGES) {
67
- const shimFile = path.join(shimsDir, `${safeFilename(pkg)}.mjs`);
397
+ const shimFile = path3.join(shimsDir, `${safeFilename(pkg)}.mjs`);
68
398
  map.set(pkg, shimFile);
69
399
  }
70
400
  return map;
@@ -75,7 +405,7 @@ function omniviewExternals(options = {}) {
75
405
  const shimMap = buildShimMap(shimsDir);
76
406
  if (options.additionalShared) {
77
407
  for (const pkg of options.additionalShared) {
78
- const shimFile = path.join(shimsDir, `${safeFilename(pkg)}.mjs`);
408
+ const shimFile = path3.join(shimsDir, `${safeFilename(pkg)}.mjs`);
79
409
  shimMap.set(pkg, shimFile);
80
410
  }
81
411
  }
@@ -85,8 +415,55 @@ function omniviewExternals(options = {}) {
85
415
  enforce: "pre",
86
416
  // Run before other plugins (especially @vitejs/plugin-react)
87
417
  config(config, { command }) {
418
+ const cache = workspaceViteCacheDirectory(process.env.OMNIVIEW_VITE_CACHE_DIRECTORY);
419
+ if (cache) {
420
+ if (config.cacheDir && path3.resolve(config.root ?? process.cwd(), config.cacheDir) !== cache) {
421
+ throw new Error("Plugin Vite cache conflicts with its owned workspace cache");
422
+ }
423
+ config.cacheDir = cache;
424
+ }
425
+ const output = process.env.OMNIVIEW_BUILD_OUTPUT_DIRECTORY;
426
+ if (command === "build" && output) {
427
+ const root = path3.resolve(config.root ?? process.cwd());
428
+ const configured = config.build?.outDir && path3.resolve(root, config.build.outDir);
429
+ if (configured && configured !== path3.join(root, "dist") && configured !== path3.resolve(output)) {
430
+ throw new Error("Plugin distribution path conflicts with controlled workspace output");
431
+ }
432
+ config.build = { ...config.build, outDir: output };
433
+ }
88
434
  if (command === "serve") {
435
+ const roots = workspaceViteRoots(process.env.OMNIVIEW_VITE_ALLOWED_ROOTS);
436
+ const ownedPort = workspaceVitePort(process.env.OMNIVIEW_VITE_PORT);
437
+ if (roots) {
438
+ if (!ownedPort) {
439
+ throw new Error("Managed plugin Vite requires its owned OMNIVIEW_VITE_PORT");
440
+ }
441
+ config.server = config.server ?? {};
442
+ if (config.server.port !== void 0 && config.server.port !== ownedPort) {
443
+ throw new Error("Plugin Vite port conflicts with its owned workspace lease");
444
+ }
445
+ if (config.server.hmr === false || typeof config.server.hmr === "object" && (config.server.hmr.clientPort !== void 0 && config.server.hmr.clientPort !== ownedPort || config.server.hmr.port !== void 0 && config.server.hmr.port !== ownedPort || config.server.hmr.host !== void 0 && config.server.hmr.host !== "127.0.0.1" || config.server.hmr.protocol !== void 0 && config.server.hmr.protocol !== "ws")) {
446
+ throw new Error("Plugin Vite HMR conflicts with its owned loopback endpoint");
447
+ }
448
+ config.server.port = ownedPort;
449
+ config.server.strictPort = true;
450
+ config.server.fs = {
451
+ ...config.server.fs,
452
+ strict: true,
453
+ allow: [.../* @__PURE__ */ new Set([...config.server.fs?.allow ?? [config.root ?? process.cwd()], ...roots, shimsDir])]
454
+ };
455
+ config.server.hmr = {
456
+ ...typeof config.server.hmr === "object" ? config.server.hmr : {},
457
+ host: "127.0.0.1",
458
+ protocol: "ws",
459
+ clientPort: ownedPort
460
+ };
461
+ }
89
462
  config.optimizeDeps = config.optimizeDeps ?? {};
463
+ config.optimizeDeps.exclude = [.../* @__PURE__ */ new Set([...config.optimizeDeps.exclude ?? [], ...allPackages])];
464
+ if (roots) {
465
+ config.optimizeDeps.force = true;
466
+ }
90
467
  config.optimizeDeps.esbuildOptions = config.optimizeDeps.esbuildOptions ?? {};
91
468
  config.optimizeDeps.esbuildOptions.plugins = [
92
469
  ...config.optimizeDeps.esbuildOptions.plugins ?? [],
@@ -116,21 +493,41 @@ function omniviewExternals(options = {}) {
116
493
  } else if (typeof existing === "function") {
117
494
  const originalFn = existing;
118
495
  config.build.rollupOptions.external = (source, importer, isResolved) => {
119
- if (sharedSet.has(source)) return true;
496
+ if (sharedSet.has(source)) {
497
+ return true;
498
+ }
120
499
  return originalFn(source, importer, isResolved);
121
500
  };
122
501
  } else if (existing === void 0 || existing === null) {
123
502
  config.build.rollupOptions.external = [...allPackages];
124
503
  } else {
125
504
  config.build.rollupOptions.external = (source) => {
126
- if (sharedSet.has(source)) return true;
127
- if (typeof existing === "string") return source === existing;
128
- if (existing instanceof RegExp) return existing.test(source);
505
+ if (sharedSet.has(source)) {
506
+ return true;
507
+ }
508
+ if (typeof existing === "string") {
509
+ return source === existing;
510
+ }
511
+ if (existing instanceof RegExp) {
512
+ return existing.test(source);
513
+ }
129
514
  return false;
130
515
  };
131
516
  }
132
517
  }
133
518
  },
519
+ configResolved(config) {
520
+ if (config.command !== "serve" || !config.optimizeDeps.include) {
521
+ return;
522
+ }
523
+ config.optimizeDeps.include = config.optimizeDeps.include.filter((dependency) => {
524
+ const target = dependency.slice(dependency.lastIndexOf(">") + 1).trim();
525
+ return !sharedSet.has(target);
526
+ });
527
+ },
528
+ configureServer(server) {
529
+ attachManagedViteFeedback(server);
530
+ },
134
531
  resolveId(source) {
135
532
  if (sharedSet.has(source)) {
136
533
  const shimPath = shimMap.get(source);
@@ -146,6 +543,7 @@ var index_default = omniviewExternals;
146
543
  export {
147
544
  SHARED_PACKAGES,
148
545
  index_default as default,
546
+ managedViteFeedback,
149
547
  omniviewExternals,
150
548
  safeFilename
151
549
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omniviewdev/vite-plugin",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "Vite plugin for Omniview plugin development. Redirects shared dependency imports to the host app's singleton instances via window.__OMNIVIEW_SHARED__.",
5
5
  "license": "AGPL-3.0-only",
6
6
  "author": "Omniview",
@@ -19,8 +19,10 @@
19
19
  "shims"
20
20
  ],
21
21
  "scripts": {
22
- "build": "tsup src/index.ts --format esm,cjs --dts --clean",
22
+ "build": "pnpm run generate-shims && pnpm run check-shims && node ../../scripts/build-tsup.mjs src/index.ts --format esm,cjs --dts --clean",
23
+ "check-shims": "tsx scripts/check-shim-exports.ts",
23
24
  "generate-shims": "tsx scripts/generate-shims.ts",
25
+ "test": "tsx --test scripts/*.test.ts",
24
26
  "prepublishOnly": "pnpm run build"
25
27
  },
26
28
  "repository": {
@@ -18,6 +18,8 @@ export const AspectRatio = mod.AspectRatio;
18
18
  export const Autocomplete = mod.Autocomplete;
19
19
  export const Avatar = mod.Avatar;
20
20
  export const AvatarGroup = mod.AvatarGroup;
21
+ export const BUILT_IN_THEMES = mod.BUILT_IN_THEMES;
22
+ export const BUILT_IN_THEME_IDS = mod.BUILT_IN_THEME_IDS;
21
23
  export const BUILT_IN_THEME_MODES = mod.BUILT_IN_THEME_MODES;
22
24
  export const Badge = mod.Badge;
23
25
  export const Banner = mod.Banner;
@@ -120,6 +122,7 @@ export const TextArea = mod.TextArea;
120
122
  export const TextField = mod.TextField;
121
123
  export const ThemeProvider = mod.ThemeProvider;
122
124
  export const ThemeSwitcher = mod.ThemeSwitcher;
125
+ export const ThemeValidationError = mod.ThemeValidationError;
123
126
  export const TimeColumns = mod.TimeColumns;
124
127
  export const TimePicker = mod.TimePicker;
125
128
  export const Timeline = mod.Timeline;
@@ -134,10 +137,12 @@ export const Underline = mod.Underline;
134
137
  export const buildSections = mod.buildSections;
135
138
  export const computeTabSegments = mod.computeTabSegments;
136
139
  export const createThemeRegistry = mod.createThemeRegistry;
140
+ export const createThemeRootApplier = mod.createThemeRootApplier;
137
141
  export const fileTypeLabel = mod.fileTypeLabel;
138
142
  export const formatBytes = mod.formatBytes;
139
143
  export const formatDate = mod.formatDate;
140
144
  export const getDaysInMonth = mod.getDaysInMonth;
145
+ export const isBuiltInThemeId = mod.isBuiltInThemeId;
141
146
  export const isLeapYear = mod.isLeapYear;
142
147
  export const statusToColor = mod.statusToColor;
143
148
  export const themeRegistry = mod.themeRegistry;
@@ -171,5 +176,6 @@ export const useTreeConfig = mod.useTreeConfig;
171
176
  export const useTreeItem = mod.useTreeItem;
172
177
  export const useTreeStoreContext = mod.useTreeStoreContext;
173
178
  export const validateSections = mod.validateSections;
179
+ export const validateThemeDefinition = mod.validateThemeDefinition;
174
180
 
175
181
  export default mod.default !== undefined ? mod.default : mod;
@@ -17,8 +17,6 @@ export const ErrorTypes = mod.ErrorTypes;
17
17
  export const ExtensionPointRegistry = mod.ExtensionPointRegistry;
18
18
  export const ExtensionPointStore = mod.ExtensionPointStore;
19
19
  export const ExtensionProvider = mod.ExtensionProvider;
20
- export const WatchState = mod.WatchState;
21
- export const SyncPolicy = mod.SyncPolicy;
22
20
  export const Link = mod.Link;
23
21
  export const OperationsContext = mod.OperationsContext;
24
22
  export const OperationsProvider = mod.OperationsProvider;
@@ -31,13 +29,20 @@ export const RightDrawerContext = mod.RightDrawerContext;
31
29
  export const SettingsContext = mod.SettingsContext;
32
30
  export const SettingsProvider = mod.SettingsProvider;
33
31
  export const SnackbarProvider = mod.SnackbarProvider;
32
+ export const WatchState = mod.WatchState;
34
33
  export const actionToSnackbar = mod.actionToSnackbar;
34
+ export const applyBatch = mod.applyBatch;
35
35
  export const connectionListQueryKey = mod.connectionListQueryKey;
36
36
  export const createErrorHandler = mod.createErrorHandler;
37
37
  export const defaultState = mod.defaultState;
38
+ export const formatGroup = mod.formatGroup;
39
+ export const graphChangedEvent = mod.graphChangedEvent;
38
40
  export const isCancelledError = mod.isCancelledError;
39
41
  export const parseAppError = mod.parseAppError;
42
+ export const parseResourceKey = mod.parseResourceKey;
43
+ export const relationshipLabel = mod.relationshipLabel;
40
44
  export const showAppError = mod.showAppError;
45
+ export const toRelatedResources = mod.toRelatedResources;
41
46
  export const useActiveSyncs = mod.useActiveSyncs;
42
47
  export const useBottomDrawer = mod.useBottomDrawer;
43
48
  export const useConfirmationModal = mod.useConfirmationModal;
@@ -45,13 +50,13 @@ export const useConnection = mod.useConnection;
45
50
  export const useConnectionNamespaces = mod.useConnectionNamespaces;
46
51
  export const useConnectionStatus = mod.useConnectionStatus;
47
52
  export const useConnections = mod.useConnections;
53
+ export const useDependencyTree = mod.useDependencyTree;
48
54
  export const useEditorSchemas = mod.useEditorSchemas;
55
+ export const useEventBatcher = mod.useEventBatcher;
49
56
  export const useExec = mod.useExec;
50
57
  export const useExecuteAction = mod.useExecuteAction;
51
58
  export const useExtensionPoint = mod.useExtensionPoint;
52
- export const useExtensionPointComponents = mod.useExtensionPointComponents;
53
59
  export const useExtensionRegistry = mod.useExtensionRegistry;
54
- export const useWatchState = mod.useWatchState;
55
60
  export const useLogs = mod.useLogs;
56
61
  export const useMetricProviders = mod.useMetricProviders;
57
62
  export const useMetricProvidersForResource = mod.useMetricProvidersForResource;
@@ -62,10 +67,13 @@ export const usePluginData = mod.usePluginData;
62
67
  export const usePluginRouter = mod.usePluginRouter;
63
68
  export const usePluginSettings = mod.usePluginSettings;
64
69
  export const usePortForwardSessions = mod.usePortForwardSessions;
70
+ export const useRefetchOnGraphChange = mod.useRefetchOnGraphChange;
71
+ export const useRelatedResources = mod.useRelatedResources;
65
72
  export const useResolvedPluginId = mod.useResolvedPluginId;
66
73
  export const useResource = mod.useResource;
67
74
  export const useResourceActions = mod.useResourceActions;
68
75
  export const useResourceAreaComponent = mod.useResourceAreaComponent;
76
+ export const useResourceGraph = mod.useResourceGraph;
69
77
  export const useResourceGroups = mod.useResourceGroups;
70
78
  export const useResourceMetrics = mod.useResourceMetrics;
71
79
  export const useResourceMutations = mod.useResourceMutations;
@@ -78,5 +86,8 @@ export const useRightDrawer = mod.useRightDrawer;
78
86
  export const useSettings = mod.useSettings;
79
87
  export const useSnackbar = mod.useSnackbar;
80
88
  export const useStreamAction = mod.useStreamAction;
89
+ export const useWatchState = mod.useWatchState;
90
+ export const SyncPolicy = mod.SyncPolicy;
91
+ export const useExtensionPointComponents = mod.useExtensionPointComponents;
81
92
 
82
93
  export default mod.default !== undefined ? mod.default : mod;
@@ -10,14 +10,18 @@ if (!mod) {
10
10
  );
11
11
  }
12
12
 
13
+ export const DataClient = mod.DataClient;
13
14
  export const DevServerManager = mod.DevServerManager;
14
15
  export const DiagnosticsClient = mod.DiagnosticsClient;
15
16
  export const ExecClient = mod.ExecClient;
17
+ export const GetInstanceInfo = mod.GetInstanceInfo;
16
18
  export const GetOperatingSystem = mod.GetOperatingSystem;
19
+ export const GraphClient = mod.GraphClient;
17
20
  export const LogsClient = mod.LogsClient;
18
21
  export const MetricClient = mod.MetricClient;
19
22
  export const NetworkerClient = mod.NetworkerClient;
20
23
  export const OpenFileSelectionDialog = mod.OpenFileSelectionDialog;
24
+ export const PluginLogManager = mod.PluginLogManager;
21
25
  export const PluginManager = mod.PluginManager;
22
26
  export const ResourceClient = mod.ResourceClient;
23
27
  export const SaveFileDialog = mod.SaveFileDialog;