Skip to content

Instantly share code, notes, and snippets.

// InjectionToken is a solution when choosing a provider token for non-class dependencies
// In this case we are redistering the reducers for this particular module
export const EVENTS_REDUCER_TOKEN = new InjectionToken<ActionReducerMap<fromEvents.State>>('Events');
// Map of our reducers
export function getReducers(): ActionReducerMap<fromEvents.State> {
return {
events: fromEvents.eventsReducer
};
}
// The original AngularJs application
const ngModule = angular.module('admin', [
// We are leaving all the old module untouched
'ng1.modules',
// We can downgrade Components, Directives, Services, etc.
// And use them in the AngularJs app
'ng2.modules'
]);
@NgModule({
export interface RegisterEffects { ngRegisterEffects(): void; }
export const EFFECTS_CLASS = new InjectionToken<RegisterEffects[]>('EFFECTS_CLASS');
export function EffectsProvider<T extends RegisterEffects>(
effectsClass: Type<T>): ClassProvider {
return {
multi: true,
provide: EFFECTS_CLASS,
useClass: effectsClass
export const selectFeatureA = fromFeatureA.selectFeatureA;
export const selectFeatureB = fromFeatureB.selectFeatureB;
export const selectCombinedFeature = createSelector(selectFeatureA, selectFeatureB,
(a, b) => a.find((x) => x.id === b.id)
);
const path = require('path');
const AngularCompilerPlugin = require('@ngtools/webpack').AngularCompilerPlugin;
module.exports = (env, argv) => {
const config = {
plugins: [
// See: https://www.npmjs.com/package/@ngtools/webpack
new AngularCompilerPlugin({
// We wanted to have separate tsconfig for AOT compilation
{
"compilerOptions": {
"baseUrl": "./",
"target": "es5",
"module": "esnext",
"lib": ["es2018", "dom"],
"moduleResolution": "node",
"typeRoots": ["node_modules/@types"]
},
"exclude": ["app/main.aot.ts"]
{
"compilerOptions": {
"baseUrl": "./",
"target": "es5",
"module": "esnext",
"lib": ["es2018", "dom"],
"moduleResolution": "node",
"typeRoots": ["node_modules/@types"]
}
}
if (ON_DEVELOPMENT) {
// We are loading version of app which uses JIT
require('./app.module');
}
else {
// Here we want to load a special entry file for AOT
require('./main.aot');
}
import { platformBrowser } from '@angular/platform-browser';
// This file will be available during the compilation
import { AppModuleNgFactory } from './app.module.ngfactory';
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);
// MUST BE IN THIS ORDER!
import 'core-js/es7/reflect';
import 'zone.js/dist/zone';
import { enableProdMode, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { UpgradeModule } from '@angular/upgrade/static';
import * as angular from 'angular';