-
Notifications
You must be signed in to change notification settings - Fork 1
Docs: Alienalias
- Introduction
- Installation
- Overview
-
Key Concepts
- Core Modules
- Metadata Factory
- Loading Strategy
- Matching Strategy
- Redirect Handler
-
Core Components
AlienaliasModule
-
Key Services
AlienaliasFactoryEntity Metadata Factory
-
Usage
- Setting Up Entity Metadata
- Plugin Registration via Factory
- Matching and Redirect Handling
- Dynamic Module Loading with Strategy
- API Reference
- Examples
- Testing
The Alienalias Angular library simplifies the management of alias-based routing, dynamic module federation, and remote module loading in browser-based and server-side Angular applications. It integrates with modern libraries like @ngrx/data, @rollthecloudinc/crud, and @angular-architects/module-federation to provide fast and dynamic route resolution.
Install the library and its dependencies via npm:
npm install alienalias @ngrx/data @rollthecloudinc/crud @rollthecloudinc/alias @angular-architects/module-federationAlienalias provides solutions for creating modular and dynamic applications using alias paths that map to remote modules. It includes tools for:
- Dynamic route creation and resolution.
- Matching alias paths loaded remotely.
- Redirect handler for routing based on alias configuration.
- Entity metadata creation for data management with custom CRUD mappings.
- Modular route federation based on dynamic entity configuration.
- Easy integration with
@ngrx/datafor efficient data management. - Server-side and browser-based fallback mechanisms for OpenSearch and IndexedDB operations.
- Dynamic alias-based redirects powered by custom handlers.
The AlienaliasModule is the entry point of the library. It automatically handles metadata registration, plugin configuration, and service injection for AlienAlias entities.
The entityMetadataFactory dynamically creates CRUD metadata mappings for the AlienAlias entities, enabling features like OpenSearch querying and IndexedDB-based caching.
The AlienaliasLoadingStrategy loads remote modules dynamically based on alias paths. It uses Angular's Router configuration to register these paths during runtime.
The AlienaliasMatchingStrategy matches alias paths based on the current Router snapshot. This strategy ensures smooth routing and alias recognition.
The AlienaliasRedirectHandler handles route redirection using alias metadata and dynamic queries. It resolves a proper alias and redirects to the associated path using query parameters.
The primary module of the library, responsible for:
- Registering middleware for route alias handling.
- Injecting dependencies such as
AliasPluginManager,EntityServices,EntityDefinitionService, andRouter. - Registering metadata and remote modules for
AlienAliasentities.
The alienaliasFactory creates instances of the AlienaliasPlugin class. These instances define the behavior and strategies for alias loading, matching, and redirect handling.
The entityMetadataFactory generates configuration for AlienAlias entities, enabling OpenSearch queries and IndexedDB-based fallback strategies.
Generate entity metadata dynamically for AlienAlias entities using entityMetadataFactory.
Example:
import { entityMetadataFactory } from './alienalias/entity-metadata';
import { AlienaliasSettings } from './models/alienalias.models';
const platformId = 'browser';
const alienaliasSettings: AlienaliasSettings = { openSearchDomain: 'your-opensearch-domain-url' };
const entityMetadata = entityMetadataFactory(platformId, alienaliasSettings);
console.log('Generated Metadata:', entityMetadata);Use the alienaliasFactory to register dynamic alias plugins based on site-specific configurations:
Example:
import { alienaliasFactory } from './alienalias/alienalias.factories';
import { Router } from '@angular/router';
import { EntityServices } from '@ngrx/data';
const plugin = alienaliasFactory('my-site', entityServices, router);
aliasPluginManager.register(plugin);Create a custom instance of AlienaliasMatchingStrategy and AlienaliasRedirectHandler for resolving aliases and handling redirects:
Example:
import { AlienaliasMatchingStrategy } from './strategies/alienalias-matching-strategy';
import { Router } from '@angular/router';
import { EntityServices } from '@ngrx/data';
constructor(private router: Router, private es: EntityServices) {}
ngOnInit() {
const matchingStrategy = new AlienaliasMatchingStrategy('my-site', this.es, this.router);
matchingStrategy.match(this.router.routerState.snapshot).subscribe(result => {
if (result) {
console.log('Alias Matched!');
}
});
}Use the AlienaliasLoadingStrategy for runtime remote module loading and routing registration:
Example:
import { AlienaliasLoadingStrategy } from './strategies/alienalias-loading-strategy';
import { Router } from '@angular/router';
import { EntityServices } from '@ngrx/data';
constructor(private router: Router, private es: EntityServices) {}
ngOnInit() {
const loadingStrategy = new AlienaliasLoadingStrategy('my-site', this.es, this.router);
loadingStrategy.load().subscribe(result => {
if (result) {
console.log('Remote Alias Modules Loaded Successfully');
}
});
}-
AlienaliasModule- Entry point module for the library.
-
AlienaliasMatchingStrategy- Matches alias paths dynamically based on
RouterStateSnapshot.
- Matches alias paths dynamically based on
-
AlienaliasLoadingStrategy- Registers routes dynamically based on alias entity definitions.
-
AlienaliasRedirectHandler- Handles route redirection based on
AlienAliasentity configurations.
- Handles route redirection based on
-
AlienAlias- Data model representing alias configurations including metadata like
path,remoteEntry, andmoduleName.
- Data model representing alias configurations including metadata like
Use the AlienaliasModule constructor to register dynamic metadata and plugins.
import { AlienaliasModule } from './alienalias/alienalias.module';
import { SITE_NAME } from '@rollthecloudinc/utils';
@NgModule({
imports: [AlienaliasModule],
})
export class AppModule {
constructor(
@Inject(SITE_NAME) siteName: string,
platformId: Object,
alienAliasSettings: AlienaliasSettings
) {
console.log('Alienalias Module Initialized');
}
}Use the AlienaliasLoadingStrategy to dynamically load and append alias routes to the Router configuration.
const loadingStrategy = new AlienaliasLoadingStrategy(siteName, entityServices, router);
loadingStrategy.load().subscribe(isLoaded => {
if (isLoaded) {
console.log('Dynamic Alias Routes Loaded');
}
});Ensure metadata maps are generated properly using factory functions.
import { entityMetadataFactory } from './alienalias/entity-metadata';
describe('Entity Metadata Factory', () => {
it('should generate metadata for AlienAlias', () => {
const platformId = 'server';
const settings = { openSearchDomain: 'https://example.com' };
const metadata = entityMetadataFactory(platformId, settings);
expect(metadata.AlienAlias.entityName).toBe('AlienAlias');
});
});Ensure routes are dynamically loaded and registered.
import { AlienaliasLoadingStrategy } from './strategies/alienalias-loading-strategy';
describe('AlienaliasLoadingStrategy', () => {
it('should dynamically load alias routes', done => {
const strategy = new AlienaliasLoadingStrategy('my-site', mockEntityServices, mockRouter);
strategy.load().subscribe(isLoaded => {
expect(isLoaded).toBe(true);
done();
});
});
});The Alienalias Angular library is a robust and flexible solution for dynamic alias management, server-side querying, remote module federation, and entity-based configuration. By leveraging its powerful tools, you can build extensible applications that integrate seamlessly with modern Angular frameworks.
For feedback, support, or contributions, feel free to contact us!