@useavalon/avalon 0.1.10 → 0.1.12
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/README.md +54 -54
- package/dist/mod.js +1 -0
- package/dist/src/build/integration-bundler-plugin.js +1 -0
- package/dist/src/build/integration-config.js +1 -0
- package/dist/src/build/integration-detection-plugin.js +1 -0
- package/dist/src/build/integration-resolver-plugin.js +1 -0
- package/dist/src/build/island-manifest.js +1 -0
- package/dist/src/build/island-types-generator.js +5 -0
- package/dist/src/build/mdx-island-transform.js +2 -0
- package/dist/src/build/mdx-plugin.js +1 -0
- package/dist/src/build/page-island-transform.js +3 -0
- package/dist/src/build/prop-extractors/index.js +1 -0
- package/dist/src/build/prop-extractors/lit.js +1 -0
- package/dist/src/build/prop-extractors/qwik.js +1 -0
- package/dist/src/build/prop-extractors/solid.js +1 -0
- package/dist/src/build/prop-extractors/svelte.js +1 -0
- package/dist/src/build/prop-extractors/vue.js +1 -0
- package/dist/src/build/sidecar-file-manager.js +1 -0
- package/dist/src/build/sidecar-renderer.js +6 -0
- package/dist/src/client/adapters/index.js +1 -0
- package/dist/src/client/components.js +1 -0
- package/dist/src/client/css-hmr-handler.js +1 -0
- package/dist/src/client/framework-adapter.js +13 -0
- package/dist/src/client/hmr-coordinator.js +1 -0
- package/dist/src/client/hmr-error-overlay.js +214 -0
- package/dist/src/client/main.js +39 -0
- package/{src → dist/src}/client/types/framework-runtime.d.ts +68 -68
- package/{src → dist/src}/client/types/vite-hmr.d.ts +46 -46
- package/dist/src/client/types/vite-virtual-modules.d.ts +70 -0
- package/dist/src/components/Image.js +1 -0
- package/dist/src/components/IslandErrorBoundary.js +1 -0
- package/dist/src/components/LayoutDataErrorBoundary.js +1 -0
- package/dist/src/components/LayoutErrorBoundary.js +1 -0
- package/dist/src/components/PersistentIsland.js +1 -0
- package/dist/src/components/StreamingErrorBoundary.js +1 -0
- package/dist/src/components/StreamingLayout.js +29 -0
- package/dist/src/core/components/component-analyzer.js +1 -0
- package/dist/src/core/components/component-detection.js +5 -0
- package/dist/src/core/components/enhanced-framework-detector.js +1 -0
- package/dist/src/core/components/framework-registry.js +1 -0
- package/dist/src/core/content/mdx-processor.js +1 -0
- package/dist/src/core/integrations/index.js +1 -0
- package/dist/src/core/integrations/loader.js +1 -0
- package/dist/src/core/integrations/registry.js +1 -0
- package/dist/src/core/islands/island-persistence.js +1 -0
- package/dist/src/core/islands/island-state-serializer.js +1 -0
- package/dist/src/core/islands/persistent-island-context.js +1 -0
- package/dist/src/core/islands/use-persistent-state.js +1 -0
- package/dist/src/core/layout/enhanced-layout-resolver.js +1 -0
- package/dist/src/core/layout/layout-cache-manager.js +1 -0
- package/dist/src/core/layout/layout-composer.js +1 -0
- package/dist/src/core/layout/layout-data-loader.js +1 -0
- package/dist/src/core/layout/layout-discovery.js +1 -0
- package/dist/src/core/layout/layout-matcher.js +1 -0
- package/dist/src/core/layout/layout-types.js +1 -0
- package/dist/src/core/modules/framework-module-resolver.js +1 -0
- package/dist/src/islands/component-analysis.js +1 -0
- package/dist/src/islands/css-utils.js +17 -0
- package/dist/src/islands/discovery/index.js +1 -0
- package/dist/src/islands/discovery/registry.js +1 -0
- package/dist/src/islands/discovery/resolver.js +2 -0
- package/dist/src/islands/discovery/scanner.js +1 -0
- package/dist/src/islands/discovery/types.js +1 -0
- package/dist/src/islands/discovery/validator.js +18 -0
- package/dist/src/islands/discovery/watcher.js +1 -0
- package/dist/src/islands/framework-detection.js +1 -0
- package/dist/src/islands/integration-loader.js +1 -0
- package/dist/src/islands/island.js +1 -0
- package/dist/src/islands/render-cache.js +1 -0
- package/dist/src/islands/types.js +1 -0
- package/dist/src/islands/universal-css-collector.js +5 -0
- package/dist/src/islands/universal-head-collector.js +2 -0
- package/{src → dist/src}/layout-system.d.ts +592 -592
- package/dist/src/layout-system.js +1 -0
- package/dist/src/middleware/discovery.js +1 -0
- package/dist/src/middleware/executor.js +1 -0
- package/dist/src/middleware/index.js +1 -0
- package/dist/src/middleware/types.js +1 -0
- package/dist/src/nitro/build-config.js +1 -0
- package/dist/src/nitro/config.js +1 -0
- package/dist/src/nitro/error-handler.js +198 -0
- package/dist/src/nitro/index.js +1 -0
- package/dist/src/nitro/island-manifest.js +2 -0
- package/dist/src/nitro/middleware-adapter.js +1 -0
- package/dist/src/nitro/renderer.js +183 -0
- package/dist/src/nitro/route-discovery.js +1 -0
- package/dist/src/nitro/types.js +1 -0
- package/dist/src/render/collect-css.js +3 -0
- package/{src/render/error-pages.ts → dist/src/render/error-pages.js} +7 -38
- package/dist/src/render/isolated-ssr-renderer.js +1 -0
- package/dist/src/render/ssr.js +90 -0
- package/dist/src/schemas/api.js +1 -0
- package/dist/src/schemas/core.js +1 -0
- package/dist/src/schemas/index.js +1 -0
- package/dist/src/schemas/layout.js +1 -0
- package/dist/src/schemas/routing/index.js +1 -0
- package/dist/src/schemas/routing.js +1 -0
- package/dist/src/types/as-island.js +1 -0
- package/{src → dist/src}/types/image.d.ts +106 -106
- package/{src → dist/src}/types/index.d.ts +22 -22
- package/{src → dist/src}/types/island-jsx.d.ts +33 -33
- package/{src → dist/src}/types/island-prop.d.ts +20 -20
- package/dist/src/types/layout.js +1 -0
- package/{src → dist/src}/types/mdx.d.ts +6 -6
- package/dist/src/types/routing.js +1 -0
- package/dist/src/types/types.js +1 -0
- package/{src → dist/src}/types/urlpattern.d.ts +49 -49
- package/{src → dist/src}/types/vite-env.d.ts +11 -11
- package/dist/src/utils/dev-logger.js +12 -0
- package/dist/src/utils/fs.js +1 -0
- package/dist/src/vite-plugin/auto-discover.js +1 -0
- package/dist/src/vite-plugin/config.js +1 -0
- package/dist/src/vite-plugin/errors.js +1 -0
- package/dist/src/vite-plugin/image-optimization.js +45 -0
- package/dist/src/vite-plugin/integration-activator.js +1 -0
- package/dist/src/vite-plugin/island-sidecar-plugin.js +1 -0
- package/dist/src/vite-plugin/module-discovery.js +1 -0
- package/dist/src/vite-plugin/nitro-integration.js +42 -0
- package/dist/src/vite-plugin/plugin.js +1 -0
- package/dist/src/vite-plugin/types.js +1 -0
- package/dist/src/vite-plugin/validation.js +2 -0
- package/package.json +57 -26
- package/mod.ts +0 -302
- package/src/build/integration-bundler-plugin.ts +0 -116
- package/src/build/integration-config.ts +0 -168
- package/src/build/integration-detection-plugin.ts +0 -117
- package/src/build/integration-resolver-plugin.ts +0 -90
- package/src/build/island-manifest.ts +0 -269
- package/src/build/island-types-generator.ts +0 -476
- package/src/build/mdx-island-transform.ts +0 -464
- package/src/build/mdx-plugin.ts +0 -98
- package/src/build/page-island-transform.ts +0 -598
- package/src/build/prop-extractors/index.ts +0 -21
- package/src/build/prop-extractors/lit.ts +0 -140
- package/src/build/prop-extractors/qwik.ts +0 -16
- package/src/build/prop-extractors/solid.ts +0 -125
- package/src/build/prop-extractors/svelte.ts +0 -194
- package/src/build/prop-extractors/vue.ts +0 -111
- package/src/build/sidecar-file-manager.ts +0 -104
- package/src/build/sidecar-renderer.ts +0 -30
- package/src/client/adapters/index.js +0 -12
- package/src/client/adapters/index.ts +0 -13
- package/src/client/adapters/lit-adapter.js +0 -467
- package/src/client/adapters/lit-adapter.ts +0 -654
- package/src/client/adapters/preact-adapter.js +0 -223
- package/src/client/adapters/preact-adapter.ts +0 -331
- package/src/client/adapters/qwik-adapter.js +0 -259
- package/src/client/adapters/qwik-adapter.ts +0 -345
- package/src/client/adapters/react-adapter.js +0 -220
- package/src/client/adapters/react-adapter.ts +0 -353
- package/src/client/adapters/solid-adapter.js +0 -295
- package/src/client/adapters/solid-adapter.ts +0 -451
- package/src/client/adapters/svelte-adapter.js +0 -368
- package/src/client/adapters/svelte-adapter.ts +0 -524
- package/src/client/adapters/vue-adapter.js +0 -278
- package/src/client/adapters/vue-adapter.ts +0 -467
- package/src/client/components.js +0 -23
- package/src/client/components.ts +0 -35
- package/src/client/css-hmr-handler.js +0 -263
- package/src/client/css-hmr-handler.ts +0 -344
- package/src/client/framework-adapter.js +0 -283
- package/src/client/framework-adapter.ts +0 -462
- package/src/client/hmr-coordinator.js +0 -274
- package/src/client/hmr-coordinator.ts +0 -396
- package/src/client/hmr-error-overlay.js +0 -533
- package/src/client/main.js +0 -816
- package/src/client/types/vite-virtual-modules.d.ts +0 -60
- package/src/components/Image.tsx +0 -123
- package/src/components/IslandErrorBoundary.tsx +0 -145
- package/src/components/LayoutDataErrorBoundary.tsx +0 -141
- package/src/components/LayoutErrorBoundary.tsx +0 -127
- package/src/components/PersistentIsland.tsx +0 -52
- package/src/components/StreamingErrorBoundary.tsx +0 -233
- package/src/components/StreamingLayout.tsx +0 -538
- package/src/core/components/component-analyzer.ts +0 -192
- package/src/core/components/component-detection.ts +0 -508
- package/src/core/components/enhanced-framework-detector.ts +0 -500
- package/src/core/components/framework-registry.ts +0 -563
- package/src/core/content/mdx-processor.ts +0 -46
- package/src/core/integrations/index.ts +0 -19
- package/src/core/integrations/loader.ts +0 -125
- package/src/core/integrations/registry.ts +0 -175
- package/src/core/islands/island-persistence.ts +0 -325
- package/src/core/islands/island-state-serializer.ts +0 -258
- package/src/core/islands/persistent-island-context.tsx +0 -80
- package/src/core/islands/use-persistent-state.ts +0 -68
- package/src/core/layout/enhanced-layout-resolver.ts +0 -322
- package/src/core/layout/layout-cache-manager.ts +0 -485
- package/src/core/layout/layout-composer.ts +0 -357
- package/src/core/layout/layout-data-loader.ts +0 -516
- package/src/core/layout/layout-discovery.ts +0 -243
- package/src/core/layout/layout-matcher.ts +0 -299
- package/src/core/layout/layout-types.ts +0 -110
- package/src/core/modules/framework-module-resolver.ts +0 -273
- package/src/islands/component-analysis.ts +0 -213
- package/src/islands/css-utils.ts +0 -565
- package/src/islands/discovery/index.ts +0 -80
- package/src/islands/discovery/registry.ts +0 -340
- package/src/islands/discovery/resolver.ts +0 -477
- package/src/islands/discovery/scanner.ts +0 -386
- package/src/islands/discovery/types.ts +0 -117
- package/src/islands/discovery/validator.ts +0 -544
- package/src/islands/discovery/watcher.ts +0 -368
- package/src/islands/framework-detection.ts +0 -428
- package/src/islands/integration-loader.ts +0 -490
- package/src/islands/island.tsx +0 -565
- package/src/islands/render-cache.ts +0 -550
- package/src/islands/types.ts +0 -80
- package/src/islands/universal-css-collector.ts +0 -157
- package/src/islands/universal-head-collector.ts +0 -137
- package/src/layout-system.ts +0 -218
- package/src/middleware/discovery.ts +0 -268
- package/src/middleware/executor.ts +0 -315
- package/src/middleware/index.ts +0 -76
- package/src/middleware/types.ts +0 -99
- package/src/nitro/build-config.ts +0 -576
- package/src/nitro/config.ts +0 -483
- package/src/nitro/error-handler.ts +0 -636
- package/src/nitro/index.ts +0 -173
- package/src/nitro/island-manifest.ts +0 -584
- package/src/nitro/middleware-adapter.ts +0 -260
- package/src/nitro/renderer.ts +0 -1471
- package/src/nitro/route-discovery.ts +0 -439
- package/src/nitro/types.ts +0 -321
- package/src/render/collect-css.ts +0 -198
- package/src/render/isolated-ssr-renderer.ts +0 -654
- package/src/render/ssr.ts +0 -1030
- package/src/schemas/api.ts +0 -30
- package/src/schemas/core.ts +0 -64
- package/src/schemas/index.ts +0 -212
- package/src/schemas/layout.ts +0 -279
- package/src/schemas/routing/index.ts +0 -38
- package/src/schemas/routing.ts +0 -376
- package/src/types/as-island.ts +0 -20
- package/src/types/layout.ts +0 -285
- package/src/types/routing.ts +0 -555
- package/src/types/types.ts +0 -5
- package/src/utils/dev-logger.ts +0 -299
- package/src/utils/fs.ts +0 -151
- package/src/vite-plugin/auto-discover.ts +0 -551
- package/src/vite-plugin/config.ts +0 -266
- package/src/vite-plugin/errors.ts +0 -127
- package/src/vite-plugin/image-optimization.ts +0 -156
- package/src/vite-plugin/integration-activator.ts +0 -126
- package/src/vite-plugin/island-sidecar-plugin.ts +0 -176
- package/src/vite-plugin/module-discovery.ts +0 -189
- package/src/vite-plugin/nitro-integration.ts +0 -1354
- package/src/vite-plugin/plugin.ts +0 -401
- package/src/vite-plugin/types.ts +0 -327
- package/src/vite-plugin/validation.ts +0 -228
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Island Registry
|
|
3
|
-
*
|
|
4
|
-
* Central registry for all discovered islands with resolution capabilities.
|
|
5
|
-
* Handles registration, resolution by name/namespace, and collision detection.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type {
|
|
9
|
-
DiscoveredIsland,
|
|
10
|
-
IslandDirectory,
|
|
11
|
-
IslandCollision,
|
|
12
|
-
IslandDiscoveryConfig,
|
|
13
|
-
} from "./types.ts";
|
|
14
|
-
import {
|
|
15
|
-
discoverIslandDirectories,
|
|
16
|
-
discoverIslandsInDirectory,
|
|
17
|
-
getQualifiedIslandName,
|
|
18
|
-
parseQualifiedIslandName,
|
|
19
|
-
} from "./scanner.ts";
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Central registry for all discovered islands.
|
|
23
|
-
* Provides registration, resolution, and collision detection capabilities.
|
|
24
|
-
*/
|
|
25
|
-
export class IslandRegistry {
|
|
26
|
-
/** All discovered islands indexed by qualified name */
|
|
27
|
-
private _islands: Map<string, DiscoveredIsland> = new Map();
|
|
28
|
-
|
|
29
|
-
/** All discovered island directories */
|
|
30
|
-
private _directories: IslandDirectory[] = [];
|
|
31
|
-
|
|
32
|
-
/** Index of islands by name (for fast lookup) */
|
|
33
|
-
private _byName: Map<string, DiscoveredIsland[]> = new Map();
|
|
34
|
-
|
|
35
|
-
/** Detected collisions */
|
|
36
|
-
private _collisions: IslandCollision[] = [];
|
|
37
|
-
|
|
38
|
-
/** Project root directory */
|
|
39
|
-
private _projectRoot: string;
|
|
40
|
-
|
|
41
|
-
/** Discovery configuration */
|
|
42
|
-
private _config: IslandDiscoveryConfig;
|
|
43
|
-
|
|
44
|
-
constructor(projectRoot: string, config: IslandDiscoveryConfig = {}) {
|
|
45
|
-
this._projectRoot = projectRoot;
|
|
46
|
-
this._config = config;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Get all discovered islands as a Map.
|
|
51
|
-
*/
|
|
52
|
-
get islands(): Map<string, DiscoveredIsland> {
|
|
53
|
-
return new Map(this._islands);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Get all discovered island directories.
|
|
58
|
-
*/
|
|
59
|
-
get directories(): IslandDirectory[] {
|
|
60
|
-
return [...this._directories];
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Get all detected collisions.
|
|
65
|
-
*/
|
|
66
|
-
get collisions(): IslandCollision[] {
|
|
67
|
-
return [...this._collisions];
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Get the number of registered islands.
|
|
72
|
-
*/
|
|
73
|
-
get size(): number {
|
|
74
|
-
return this._islands.size;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Register a discovered island in the registry.
|
|
79
|
-
* Updates the name index and detects collisions.
|
|
80
|
-
*
|
|
81
|
-
* @param island - The island to register
|
|
82
|
-
*/
|
|
83
|
-
register(island: DiscoveredIsland): void {
|
|
84
|
-
const qualifiedName = getQualifiedIslandName(island);
|
|
85
|
-
|
|
86
|
-
// Add to main registry
|
|
87
|
-
this._islands.set(qualifiedName, island);
|
|
88
|
-
|
|
89
|
-
// Update name index
|
|
90
|
-
const existing = this._byName.get(island.name) || [];
|
|
91
|
-
existing.push(island);
|
|
92
|
-
this._byName.set(island.name, existing);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Resolve an island by name with optional namespace.
|
|
97
|
-
*
|
|
98
|
-
* Resolution priority:
|
|
99
|
-
* 1. Exact qualified name match (namespace/name)
|
|
100
|
-
* 2. Default islands directory (highest priority for unqualified names)
|
|
101
|
-
* 3. First match in alphabetical order by namespace
|
|
102
|
-
*
|
|
103
|
-
* @param name - Component name or qualified name (namespace/name)
|
|
104
|
-
* @param namespace - Optional namespace to narrow search
|
|
105
|
-
* @returns The resolved island or null if not found
|
|
106
|
-
*/
|
|
107
|
-
resolve(name: string, namespace?: string): DiscoveredIsland | null {
|
|
108
|
-
// If namespace is provided, try exact match first
|
|
109
|
-
if (namespace !== undefined) {
|
|
110
|
-
const qualifiedName = namespace === "" ? name : `${namespace}/${name}`;
|
|
111
|
-
const exact = this._islands.get(qualifiedName);
|
|
112
|
-
if (exact) return exact;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// Check if name is already a qualified name
|
|
116
|
-
if (name.includes("/")) {
|
|
117
|
-
const exact = this._islands.get(name);
|
|
118
|
-
if (exact) return exact;
|
|
119
|
-
|
|
120
|
-
// Parse and try to resolve
|
|
121
|
-
const { namespace: parsedNs, name: parsedName } = parseQualifiedIslandName(name);
|
|
122
|
-
const qualifiedName = parsedNs === "" ? parsedName : `${parsedNs}/${parsedName}`;
|
|
123
|
-
return this._islands.get(qualifiedName) || null;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Find all islands with this name
|
|
127
|
-
const matches = this._byName.get(name);
|
|
128
|
-
if (!matches || matches.length === 0) {
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
// If only one match, return it
|
|
133
|
-
if (matches.length === 1) {
|
|
134
|
-
return matches[0];
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// Multiple matches - prioritize default directory
|
|
138
|
-
const defaultMatch = matches.find(island => island.directory.isDefault);
|
|
139
|
-
if (defaultMatch) {
|
|
140
|
-
return defaultMatch;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Return first match (alphabetically by namespace due to sorting)
|
|
144
|
-
return matches[0];
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Find all islands matching a name.
|
|
149
|
-
* Useful for collision detection and disambiguation.
|
|
150
|
-
*
|
|
151
|
-
* @param name - Component name to search for
|
|
152
|
-
* @returns Array of all islands with this name
|
|
153
|
-
*/
|
|
154
|
-
findByName(name: string): DiscoveredIsland[] {
|
|
155
|
-
return this._byName.get(name) || [];
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Get the qualified name for an island.
|
|
160
|
-
*
|
|
161
|
-
* @param island - The island to get the qualified name for
|
|
162
|
-
* @returns The qualified name (namespace/name or just name for default)
|
|
163
|
-
*/
|
|
164
|
-
getQualifiedName(island: DiscoveredIsland): string {
|
|
165
|
-
return getQualifiedIslandName(island);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Check if an island with the given name or qualified name exists.
|
|
170
|
-
*
|
|
171
|
-
* @param nameOrQualified - Component name or qualified name
|
|
172
|
-
* @returns True if the island exists
|
|
173
|
-
*/
|
|
174
|
-
has(nameOrQualified: string): boolean {
|
|
175
|
-
// Check qualified name first
|
|
176
|
-
if (this._islands.has(nameOrQualified)) {
|
|
177
|
-
return true;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// Check by name
|
|
181
|
-
return this._byName.has(nameOrQualified);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Detect naming collisions across all registered islands.
|
|
186
|
-
* A collision occurs when multiple islands share the same component name.
|
|
187
|
-
*
|
|
188
|
-
* @returns Array of detected collisions
|
|
189
|
-
*/
|
|
190
|
-
detectCollisions(): IslandCollision[] {
|
|
191
|
-
const collisions: IslandCollision[] = [];
|
|
192
|
-
|
|
193
|
-
for (const [name, islands] of this._byName) {
|
|
194
|
-
if (islands.length > 1) {
|
|
195
|
-
// Determine resolution strategy
|
|
196
|
-
const hasDefault = islands.some(island => island.directory.isDefault);
|
|
197
|
-
const resolution: "namespace" | "priority" = hasDefault ? "priority" : "namespace";
|
|
198
|
-
|
|
199
|
-
collisions.push({
|
|
200
|
-
name,
|
|
201
|
-
islands: [...islands],
|
|
202
|
-
resolution,
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
this._collisions = collisions;
|
|
208
|
-
return collisions;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Clear the registry and rebuild from filesystem.
|
|
213
|
-
* Discovers all island directories and their components.
|
|
214
|
-
*/
|
|
215
|
-
async rebuild(): Promise<void> {
|
|
216
|
-
// Clear existing data
|
|
217
|
-
this._islands.clear();
|
|
218
|
-
this._byName.clear();
|
|
219
|
-
this._directories = [];
|
|
220
|
-
this._collisions = [];
|
|
221
|
-
|
|
222
|
-
// Discover directories
|
|
223
|
-
this._directories = await discoverIslandDirectories(
|
|
224
|
-
this._projectRoot,
|
|
225
|
-
this._config
|
|
226
|
-
);
|
|
227
|
-
|
|
228
|
-
// Discover and register islands from each directory
|
|
229
|
-
for (const directory of this._directories) {
|
|
230
|
-
const islands = await discoverIslandsInDirectory(
|
|
231
|
-
directory,
|
|
232
|
-
this._projectRoot
|
|
233
|
-
);
|
|
234
|
-
|
|
235
|
-
for (const island of islands) {
|
|
236
|
-
this.register(island);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// Detect collisions
|
|
241
|
-
this.detectCollisions();
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* Get all islands as an array.
|
|
246
|
-
*
|
|
247
|
-
* @returns Array of all registered islands
|
|
248
|
-
*/
|
|
249
|
-
getAllIslands(): DiscoveredIsland[] {
|
|
250
|
-
return Array.from(this._islands.values());
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* Get islands from a specific directory.
|
|
255
|
-
*
|
|
256
|
-
* @param directory - The directory to get islands from
|
|
257
|
-
* @returns Array of islands in the directory
|
|
258
|
-
*/
|
|
259
|
-
getIslandsInDirectory(directory: IslandDirectory): DiscoveredIsland[] {
|
|
260
|
-
return this.getAllIslands().filter(
|
|
261
|
-
island => island.directory.path === directory.path
|
|
262
|
-
);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
/**
|
|
266
|
-
* Get islands by namespace.
|
|
267
|
-
*
|
|
268
|
-
* @param namespace - The namespace to filter by (empty string for default)
|
|
269
|
-
* @returns Array of islands in the namespace
|
|
270
|
-
*/
|
|
271
|
-
getIslandsByNamespace(namespace: string): DiscoveredIsland[] {
|
|
272
|
-
return this.getAllIslands().filter(
|
|
273
|
-
island => island.namespace === namespace
|
|
274
|
-
);
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Remove an island from the registry.
|
|
279
|
-
*
|
|
280
|
-
* @param qualifiedName - The qualified name of the island to remove
|
|
281
|
-
* @returns True if the island was removed
|
|
282
|
-
*/
|
|
283
|
-
unregister(qualifiedName: string): boolean {
|
|
284
|
-
const island = this._islands.get(qualifiedName);
|
|
285
|
-
if (!island) {
|
|
286
|
-
return false;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
// Remove from main registry
|
|
290
|
-
this._islands.delete(qualifiedName);
|
|
291
|
-
|
|
292
|
-
// Remove from name index
|
|
293
|
-
const byName = this._byName.get(island.name);
|
|
294
|
-
if (byName) {
|
|
295
|
-
const filtered = byName.filter(i =>
|
|
296
|
-
getQualifiedIslandName(i) !== qualifiedName
|
|
297
|
-
);
|
|
298
|
-
if (filtered.length === 0) {
|
|
299
|
-
this._byName.delete(island.name);
|
|
300
|
-
} else {
|
|
301
|
-
this._byName.set(island.name, filtered);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
return true;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
/**
|
|
309
|
-
* Create a snapshot of the registry state.
|
|
310
|
-
* Useful for debugging and testing.
|
|
311
|
-
*/
|
|
312
|
-
toJSON(): {
|
|
313
|
-
islands: Record<string, DiscoveredIsland>;
|
|
314
|
-
directories: IslandDirectory[];
|
|
315
|
-
collisions: IslandCollision[];
|
|
316
|
-
} {
|
|
317
|
-
return {
|
|
318
|
-
islands: Object.fromEntries(this._islands),
|
|
319
|
-
directories: this._directories,
|
|
320
|
-
collisions: this._collisions,
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
/**
|
|
326
|
-
* Create and initialize an island registry.
|
|
327
|
-
* Convenience function that creates a registry and rebuilds it.
|
|
328
|
-
*
|
|
329
|
-
* @param projectRoot - The root directory of the project
|
|
330
|
-
* @param config - Optional configuration for discovery
|
|
331
|
-
* @returns Initialized island registry
|
|
332
|
-
*/
|
|
333
|
-
export async function createIslandRegistry(
|
|
334
|
-
projectRoot: string,
|
|
335
|
-
config: IslandDiscoveryConfig = {}
|
|
336
|
-
): Promise<IslandRegistry> {
|
|
337
|
-
const registry = new IslandRegistry(projectRoot, config);
|
|
338
|
-
await registry.rebuild();
|
|
339
|
-
return registry;
|
|
340
|
-
}
|