@jskit-ai/shell-web 0.1.216 → 0.1.218

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/shell-web",
3
- "version": "0.1.216",
3
+ "version": "0.1.218",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "test": "node --test"
@@ -31,7 +31,7 @@
31
31
  "@mdi/js": "^7.4.47"
32
32
  },
33
33
  "peerDependencies": {
34
- "@jskit-ai/kernel": "0.1.212",
34
+ "@jskit-ai/kernel": "0.1.214",
35
35
  "pinia": "^4.0.3",
36
36
  "vue": "^3.5.43",
37
37
  "vue-router": "^5.3.1",
@@ -65,8 +65,13 @@
65
65
  "include": [
66
66
  "@jskit-ai/shell-web/client/placement",
67
67
  "@jskit-ai/shell-web/client/error",
68
+ "@jskit-ai/shell-web/client/asyncModuleRecovery",
69
+ "@jskit-ai/shell-web/client/requestRecovery",
70
+ "@jskit-ai/shell-web/client/bootstrap",
71
+ "@jskit-ai/shell-web/client/navigation/linkResolver",
68
72
  "@jskit-ai/shell-web/client/navigation/usePaths",
69
- "@jskit-ai/shell-web/client/navigation/useSurfaceRouteContext"
73
+ "@jskit-ai/shell-web/client/navigation/useSurfaceRouteContext",
74
+ "@jskit-ai/shell-web/client/composables/useShellLayoutState"
70
75
  ],
71
76
  "exclude": [
72
77
  "@jskit-ai/shell-web/client"
@@ -1,8 +1,10 @@
1
1
  import assert from "node:assert/strict";
2
2
  import path from "node:path";
3
+ import os from "node:os";
3
4
  import test from "node:test";
4
- import { readFile } from "node:fs/promises";
5
+ import { mkdtemp, readFile, rm, symlink, writeFile } from "node:fs/promises";
5
6
  import { fileURLToPath } from "node:url";
7
+ import { optimizeDeps, resolveConfig } from "vite";
6
8
  import packageJson from "../package.json" with { type: "json" };
7
9
 
8
10
  const packageMetadata = packageJson.jskit;
@@ -409,17 +411,44 @@ test("shell-web packageMetadata pre-optimizes package subpaths reached through d
409
411
  "@jskit-ai/shell-web/client/error"
410
412
  ]);
411
413
 
412
- assert.deepEqual(packageMetadata?.metadata?.client?.optimizeDeps?.include, [
413
- "@jskit-ai/shell-web/client/placement",
414
- "@jskit-ai/shell-web/client/error",
415
- "@jskit-ai/shell-web/client/navigation/usePaths",
416
- "@jskit-ai/shell-web/client/navigation/useSurfaceRouteContext"
417
- ]);
418
414
  assert.deepEqual(packageMetadata?.metadata?.client?.optimizeDeps?.exclude, [
419
415
  "@jskit-ai/shell-web/client"
420
416
  ]);
421
417
  });
422
418
 
419
+ test("all public shell JavaScript helpers are ready in a cold dependency scan", async () => {
420
+ // The provider loads application-owned /src modules. It and Vue components stay source.
421
+ const sourceEntries = new Set(["./client", "./client/providers/ShellWebClientProvider"]);
422
+ const helpers = Object.entries(packageJson.exports)
423
+ .filter(([entry, target]) => entry.startsWith("./client/") && target.endsWith(".js") && !sourceEntries.has(entry))
424
+ .map(([entry]) => `${packageJson.name}${entry.slice(1)}`)
425
+ .sort();
426
+ const optimization = packageMetadata.metadata.client.optimizeDeps;
427
+ assert.deepEqual([...optimization.include].sort(), helpers,
428
+ "Every exported JavaScript helper needs prebundling beneath the excluded client entry.");
429
+
430
+ const root = await mkdtemp(path.join(os.tmpdir(), "shell-cold-scan-"));
431
+ try {
432
+ await writeFile(path.join(root, "package.json"), JSON.stringify({ name: "shell-cold-scan", type: "module" }));
433
+ await symlink(path.resolve(PACKAGE_DIR, "../../node_modules"), path.join(root, "node_modules"), "dir");
434
+ const config = await resolveConfig({
435
+ root,
436
+ configFile: false,
437
+ cacheDir: path.join(root, "cache"),
438
+ logLevel: "silent",
439
+ optimizeDeps: { ...optimization, noDiscovery: true }
440
+ }, "serve");
441
+ const metadata = await optimizeDeps(config, true);
442
+ for (const helper of helpers) {
443
+ assert.ok(metadata.optimized[helper], `${helper} must be prepared before page loading.`);
444
+ }
445
+ assert.equal(metadata.optimized[`${packageJson.name}/client`], undefined);
446
+ assert.equal(metadata.optimized[`${packageJson.name}/client/providers/ShellWebClientProvider`], undefined);
447
+ } finally {
448
+ await rm(root, { recursive: true, force: true });
449
+ }
450
+ });
451
+
423
452
  test("shell-web metadata advertises adaptive shell outlets and pattern-backed links", () => {
424
453
  assert.equal(packageMetadata?.mutations, undefined);
425
454
  assert.equal(Object.hasOwn(packageMetadata?.metadata?.apiSummary || {}, "containerTokens"), false);