Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring...

25
Knowist Academy Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect- metadata Angular 8.1 Main Project (https://next.angular.io) Angular Universal (https://angular.io/guide/universal) Angular Protractor (http://www.protractortest.org) Angular Material (https://material.angular.io) Angular Fire (https://github.com/angular/angularfire2) Layered Projects Main Project Foundational Projects External Projects Angular 8.1 Top-Level System Model Core (+“Ivy”) Common Forms Compiler-CLI (+“Ivy”) Router Angular CLI (https://cli.angular.io) Tsickle Compiler (+“Ivy”) Platforms Benchpress Ts-api-guardian Lang-Svc vscode fsevents jasmine Bazel Animations Service-Worker @Bazel/TypeScript Main Bazel Project (www.bazel.build) Java Common/Http karma Web Browsers (e.g. Chromium + v8) Runtime Node.js (v8 JS/Wasm VM) transpiles to calls written in JavaScript written in written in Elements Angular CDK (https://github.com/angular/components/tree/master/src/cdk) Angular DevKit (Part of Angular-CLI on github) Flex-Layout (https://github.com/angular/flex-layout) Mainly C++ (with some C and x86/ARM hand-coded assembly) written in tslint ng-packagr NgRx 8 ts-node tslib domino

Transcript of Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring...

Page 1: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

Knowist Academy

Knowist Angular DiagramsExtract of diagrams from Knowist Touring Library For Angular 8.1

TypeScript

RxJS

Zone.js

reflect-metadata

Angular 8.1 Main Project (https://next.angular.io)

Angular Universal(https://angular.io/guide/universal)

Angular Protractor(http://www.protractortest.org)

Angular Material(https://material.angular.io)

Angular Fire(https://github.com/angular/angularfire2)

Lay

ered

Pro

ject

sM

ain

Pro

ject

Fou

nd

atio

nal

Pro

ject

sE

xter

nal

Pro

ject

s

Angular 8.1 Top-Level System Model

Core(+“Ivy”)

Common

Forms Compiler-CLI(+“Ivy”)

Router

An

gula

r C

LI

(htt

ps:

//cli.

angu

lar.

io)

Tsickle

Compiler(+“Ivy”)Platforms

Ben

chp

ress

Ts-api-guardian

Lang-Svc

vscodefsevents

jasm

ine

BazelAnimations

Service-Worker

@Bazel/TypeScript

Main Bazel Project(www.bazel.build)

Java

Common/Http

kar

ma

Web Browsers(e.g. Chromium + v8)

Ru

ntim

e

Node.js(v8 JS/Wasm VM)

transpilesto

calls

written inJavaScript

written inwritten in

Elements

Angular CDK(https://github.com/angular/components/tree/master/src/cdk)

An

gula

r D

evK

it(P

art

of A

ngu

lar-

CL

I on

git

hub)

Flex-Layout(https://github.com/angular/flex-layout)

Mainly C++ (with some C and x86/ARM hand-coded assembly)

written in

tslintng-packagr

NgR

x 8

ts-nodetslibdomino

Page 2: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

ii

Angular 8.1 Main Project System Model(number in box is size of /src sub-directory)

Core(703 KB)

Common(192 KB)

Compiler-CLI(-and-API)(343 KB)

Router(217KB)

Compiler(995 KB)

Platform-WebWorker-Dynamic(2KB)

Lang-Svc(123 KB)

Animations(54 KB)

Service-Worker(15 KB) Elements

Platform-Browser-Dynamic(20KB)

Platform-Browser(115 KB)

Platform-WebWorker(71 KB)

Platform-Server(35 KB)

uses

uses uses

Common/http(216 KB)

Forms(179 KB)

Page 3: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

iii

Common

NodeBrowser Jasmine

ZoneSpec

processing rules

zone.ts

core engine monkey patching (different for each environment)

Zone.js Components

Task

Zone

ZoneSpec

ZoneType

ZoneDelegate

Zone

TaskType

MicroTask MacroTask EventTask

Zone.js API

Types Values

TaskData

HasTaskState

current

typ

ed

ata

currentTask

parent

Page 4: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

ServerExternsRewriterClosureRewriterRewriter (abstract)

(rewriter.ts)Rewriter Classes (most classes are in tsickle.ts)

iv

bootstrapModule

_moduleDoBootstrap

bootstrapModulefirst calls compiler, then ..

Platform Bootstrapping

bootstrapModuleFactory

using runtime compiler

Main.ts calls:PlatformBrowserDynamic()

.bootstrapModule(AppModule);

using offline compiler(compiler-cli)

Main.ts calls:PlatformBrowser()

.bootstrapModuleFactory(AppModule);

calls

calls

calls

calls

app

code

@an

gula

r/co

re/s

rc/a

ngu

lar_

ref.

ts

Annotator

ClosureRewriter

Rewriter

ExternsWriter

Page 5: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

v

Angular Application Layer

Renderer Implementations(various – from platform-* packages)

Renderer API (api.ts)

Your Application CodeA

ngu

lar Fr am

ework

Page 6: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

ViewRef @Angular/Core Public API (Linker)

Cor

e E

xpor

ts F

or L

ink

er

TemplateRefEmbeddedViewRefSystemJsNgModule

LoaderConfiggetModuleFactoryNgModuleRefViewContainerRef

SystemJsNgModuleLoader

NgModuleFactoryLoader

NgModuleFactory

Cor

e E

xpor

tsF

or C

han

geD

etec

tionQueryListElementRefComponentRefComponentFactoryResolverComponentFactoryCompilerCompilerOptionsCompilerFactory

ModuleWithComponentFactoriesChangeDetectorRef

vi

Common API (Part 2)

NgIf

NgFor

NgPlural

NgClass

NgStyle

NgSwitch NgSwitchCase

NgPluralCase

NgTemplateOutletNgSwitchDefault

Com

mon

Typ

e E

xpor

ts

COMPILER_OPTIONS

CompilerOptions

CompilerFactory

Compiler

ModuleWithComponentFactories

ComponentRef

ComponentFactory

ComponentFactoryResolver

ElementRef

NgModuleFactory

NgModuleRef

NgModuleFactoryLoader

getModuleFactory

QueryList

SystemJsNgModuleLoader

SystemJsNgModuleLoaderConfig

TemplateRef

ViewContainerRef

EmbeddedViewRef

ViewRef

ChangeDetectorRefCore/Linker FeatureCore/ChangeDetection

Feature Exports

Cor

e/L

inke

r F

eatu

re E

xpor

ts

Com

mon

Fun

ctio

n E

xpor

ts

getLocaleXYZ

getXYZ

Page 7: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

vii

NgLocalization

CommonModule

PipeTransform

@Angular/Common API (Part 1)

Cor

eE

xpor

ts

NgLocaleLocalization

Com

mon

Typ

e E

xpor

tsU

sed

in C

omm

onM

odu

le’s

NgM

odu

le d

ecor

ator

LowerCasePipe

UpperCasePipe

SlicePipe

DecimalPipe

PercentPipe

CurrencyPipe

JsonPipe

I18nSelectPipe

I18nPluralPipe

DatePipe

COMMON_PIPES

BASE_APP_HREF

AsyncPipe

Con

stE

xpor

t

PlatformLocation

LocationChangeEvent

LocationChangeListener

LocationStrategy

PathLocationStrategy

HashLocationStrategy

Location

COMMON_DIRECTIVES

TitleCasePipe

Page 8: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

viii

HttpClientJsonpModule

Common/Http Public API

Exp

orte

d@

NgM

odu

les

HttpClientModule

HttpEventType

Exp

orte

dE

num

s

BrowserXhrHttpHeaders

HttpClientXsrfModule

HTTP_INTERCEPTORSE

xpor

ted

Con

sts

HttpClient

Exp

orte

dT

ypes

HttpEvent

JsonpClientBackend

Exp

orte

d C

lass

es

HttpXhrBackend

HttpResponseBase

HttpErrorResponse

HttpBackend

Exp

orte

dIn

terf

aces

{implements}

HttpHeaderResponse

HttpRequest

HttpResponse

HttpInterceptor

HttpParameterCodec

HttpProgressEvent

HttpDownloadProgressEvent

HttpSentEvent

HttpUserEvent

HttpHandlerHttpHeaders

HttpParams

{implements}

HttpUrlEncodingCodec

HttpXsrfTokenExtractor

XhrFactoryJsonpInterceptor

Page 9: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

ix

code

Platform

One platform / one or more applications

App 3

bootstrapModuleFactory()

BootstrapModuleFactory()App 1

BootstrapModuleFactory()App 2

<HEAD><title ..></HEAD><BODY><app1 /><p>content</p><app2 /><h1>a title</h1><app3 /></BODY>

index.html

SharedPlatform

Code

Sharing Platform Code

Platform-Browser Platform-ServerPlatform-Browser-Dynamic

platform-browser-dynamic packageplatform-browser package platform-server package

Platform-WebWorkerPlatform-WebWorker-Dynamic

platform-webworker-dynamic package platform-webworker package

{ import }

Page 10: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

x

BrowserModule

Platform-Browser Public API (browser-related)

platformBrowser Title

[disable|enable]DebugToolsBrowserTransferStateModule

HammerGestureConfig

Platform-Browser Public API (DOM)

HAMMER_GESTURE_CONFIG

EventManager

EVENT_MANAGER_PLUGINS

By

DOCUMENT

Cla

ss E

xpor

tsO

paq

ueT

oken

Exp

orts VERSION

MetaMetaDefinition

StateKey TransferState

Fu

nct

ion

Exp

orts

makeStateKey

Page 11: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

xi

DomSanitizer

Platform-Browser Public API (security)

SafeScript

SafeResourceUrlSafeHtml

SafeStyle SafeUrl

Sanitizer

Cor

eE

xpor

tsIn

terf

ace

Exp

orts

Cla

ssE

xpor

ts

SafeValue

RESOURCE_CACHE_PROVIDER

Platform-Browser-Dynamic Public API

platformBrowserDynamic

JitCompilerFactory

Page 12: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

xii

Angular Rendering

DefaultDomRenderer2

DomRendererFactory2

createRenderer()

Cor

e

Renderer2RendererFactory2

Pla

tfor

m-B

row

ser

{ returns }

getDOM()

_DOM

setDOM()

{ almost all methods use }

{ returned by }

{ sets }

ELEMENT_PROBE_PROVIDERS

WorkerDomAdapter

BrowserDomAdapter

DominoDomAdapter

setRootDomAdapter()

Pla

tfor

m-S

erve

r

{ calls }

WebWorkerRendererFactory2createRenderer()

WebWorkerRenderer2

{ implements }

MessageBasedRenderer2

{ implements }

{ implements }

{ returns }

DomAdapter

GenericBrowserDomAdapter

{instance of}

{ implements }

{uses }

Page 13: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

xiii

ClientMessageBroker

Platform-WebWorker Public API

UiArguments

FnArg

ClientMessageBrokerFactory

ON_WEB_WORKER

ServiceMessageBroker

ServiceMessageBrokerFactory

WORKER_[UI|APP]_LOCATION_PROVIDERS

bootstrapWorkerUi

WORKER_UI_STARTABLE_MESSAGING_SERVICE

WORKER_SCRIPT

WorkerAppModule

platformWorkerApp

MessageBus

MessageBusSource MessageBusSink

{ implements } { implements }

Opa

qu

e T

oken

Exp

orts

Pro

vid

erE

xpor

ts

Cla

ss E

xpor

tsF

unct

ion

Exp

orts

Inte

rfac

eE

xpor

ts

{ uses }

{ creates }

{ creates }

platformWorkerUi

SerializerTypes

ReceivedMessage

Page 14: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

xiv

MessageBus

MessageBusSource MessageBusSink

PostMessageBus

sinksource

{ implements }{ implements }

PostMessageBusSinkPostMessageBusSource

{ implements } { implements }

Message Bus Types

ClientMessageBroker ServiceMessageBroker

ServiceMessageBroker_

messageBus

ClientMessageBroker_

messageBus

{ implements } { implements }

Message Broker Types

MessageBus

Page 15: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

xv

UI main thread Web Worker

Communicating Over The Message Bus (actual)

Message Bus

channeldata

channeldata

channeldata

...

Message Bus

RENDERER 2 CHANNEL

UI main thread Web Worker

Communicating Over The Message Bus (conceptual)

EVENT 2 CHANNEL

ROUTER CHANNEL

<Custom> CHANNEL

Page 16: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

xvi

ClientMessageBroker

RunOnService()

_handleMessage()

message bus

Message Broker In Use

sinksource

sinksource

ServiceMessageBroker

_wrapWebWorkerPromise()

_handleMessage()1

2

3

4

WebWorkerRendererFactory’sconstructor initializes

_messageBroker as a ClientMessageBroker with the RENDERER_2_CHANNEL

MessageBasedRenderer2

start()

_brokerFactory

Rendering And Web Workers

WebWorkerRendererFactory2

_messageBroker: ClientMessageBroker

MessageBasedRenderer2.start()initializes broker as a ServiceMessageBrokerwith the RENDERER_2_CHANNEL

UI main thread Web Worker

Message Bus

service message broker client message broker

Page 17: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

xvii

@Angular/Platform-WebWorker-Dynamic API

platformWorkerAppDynamic

MessageBasedRenderer2

_listen()

_eventDispatcher

Event Handling And Web Workers

WebWorkerRendererFactory2

_dispatchEvent()

EventDispatcher

dispatchRenderEvent()

NOTE: _listen() calls _eventDispatcher.dispatchRenderEvent()

WebWorkerRendererFactory2’s constructor subscribes_dispatchEvent() to EVENT_2_CHANNEL source

MessageBasedRenderer2.start() initializes _eventDispatcher with the EVENT_2_CHANNEL sink

Page 18: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

xviii

PlatformState

Platform-Server Public APIE

xpor

t C

lass

platformServer

platformDynamicServerExp

ort

Fun

ctio

ns

ServerModule renderModule

ServerTransferStateModule

renderModuleFactory

PlatformConfig

Exp

ort

Con

st

BEFORE_APP_SERIALIZED INITIAL_CONFIG

Page 19: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

xix

Data

Angular Router API (part 1)

Directives

LoadChildrenCallback

Route

LoadChildrenResolveDataRoutes

RouterLink RouterLinkWithHrefRouterLinkActive RouterOutlet

CanActivate CanActivateChild

CanDeactivate<T>CanLoadResolve<T>

@Directive

Con

fig

{array of}

Inte

rfac

esC

onst

s

PRIMARY_OUTLET

Params

UrlMatchResult

RunGuardsAndResolvers

UrlMatchResult

ROUTER_CONFIGURATION

ROUTER_INITIALIZER

ROUTES

NavigationExtras

Page 20: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

xx

ErrorHandler

Angular Router API (part 2)

Exp

orts

NavigationExtras

UrlSerializer

DefaultUrlSerializer

Router

ExtraOptions

RouterModule

provideRoutes

UrlSegment

UrlTree

NgModuleActivatedRoute

ActivatedRouteSnapshot

RouterState

RouterStateSnapshot

Tree< > Tree< >

UrlSegmentGroup

UrlHandlingStrategy ParamMap

Fun

ctio

ns

convertToParamMap

OutletContext

ChildrenOutletContexts RouteReuseStrategy

DetachedRouteHandle

DetachedRouteHandle

RouterPreloader

PreloadingStrategy

NoPreloading

PreloadAllModules

Page 21: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

xxi

Angular Router API (part 3)

NavigationCancel

NavigationError

Event

NavigationEnd

NavigationStart

RoutesRecognized

{typ

e al

ias}

ChildActivationEnd

ChildActivationStart

RouteConfigLoadEnd

RouteConfigLoadStart

RouterEvent

NavigationCancel

NavigationError

NavigationEnd

NavigationStart

RoutesRecognized

GuardsCheckStart

GuardsCheckEnd

ResolveStart

ResolveEnd

ChildActivationStart

ChildActivationStart

Page 22: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

ViewRef @Angular/Core Public API (Linker)

Cor

e E

xpor

ts F

or L

ink

er

TemplateRefEmbeddedViewRefSystemJsNgModule

LoaderConfiggetModuleFactoryNgModuleRefViewContainerRef

SystemJsNgModuleLoader

NgModuleFactoryLoader

NgModuleFactoryQueryListElementRefComponentRefComponentFactoryResolverComponentFactoryCompilerCompilerOptionsCompilerFactoryModuleWith

ComponentFactoriesChangeDetectorRef

xxii

enableIvy option setin tsconfig.app.json

Compiler

Compiler-CLI

Core

Render3 Workflow

Com

pil

e ti

me

Ru

n t

ime

Generated code

Application source code inAngular Template Syntax

(unchanged format)

End user

ApplicationDeveloper

Gen

erat

ion

tim

e

Angular CLI ng new myproject --enableIvy

Page 23: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

xxiii

Render3 Private API (Part 1)

ComponentDef

ComponentType

ComponentTemplate

QUERY_READ_ELEMENT_REFQUERY_READ_TEMPLATE_REF

injectViewContainerRef

injectTemplateRef

Con

sts

QUERY_READ_FROM_NODEQUERY_READ_CONTAINER_REF

injectElementRef

inject

InjectFlags

QueryList

Fu

nct

ion

s

DirectiveDef

DirectiveDefFlags

DirectiveType

NgOnChangeFeaturePublicFeature

defineDirective

definePipe

createComponentRef

getHostElement markDirty

CssSelector

En

ums

Typ

eA

lias

esIn

terf

aces

Page 24: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

ViewRef @Angular/Core Public API (Linker)

Cor

e E

xpor

ts F

or L

ink

er

TemplateRefEmbeddedViewRefSystemJsNgModule

LoaderConfiggetModuleFactoryNgModuleRefViewContainerRef

SystemJsNgModuleLoader

NgModuleFactoryLoader

NgModuleFactoryQueryListElementRefComponentRefComponentFactoryResolverComponentFactoryCompilerCompilerOptionsCompilerFactoryModuleWith

ComponentFactoriesChangeDetectorRef

xxiv

Render3 Private API (Part 2)

b* / bind*

C / container

V / embeddedViewStart

T / text

e / elementEnds / elementStyle

cR / containerRefreshStart

cr / containerRefreshEnd

Inst

ruct

ion

s

E / elementStart

p / elementProperty

v / embeddedViewEnd t / textBinding

NC / NO_CHANGE

r / componentRefresh

a / elementAttribute k / elementClass

L / listener M / memoryP / projection

pD / projectionDef

pb* / pipeBinding*Pp / pipe

qR / queryRefreshQ / query

o* / objectLiteral*

RText RElement

RNode

Render3 Interfaces

Page 25: Knowist Angular Diagrams · Knowist Angular Diagrams Extract of diagrams from Knowist Touring Library For Angular 8.1 TypeScript RxJS Zone.js reflect-metadata Angular 8.1 Main Project

ViewRef @Angular/Core Public API (Linker)

Cor

e E

xpor

ts F

or L

ink

er

TemplateRefEmbeddedViewRefSystemJsNgModule

LoaderConfiggetModuleFactoryNgModuleRefViewContainerRef

SystemJsNgModuleLoader

NgModuleFactoryLoader

NgModuleFactory

Cor

e E

xpor

tsF

or C

han

geD

etec

tionQueryListElementRefComponentRefComponentFactoryResolverComponentFactoryCompilerCompilerOptionsCompilerFactory

ModuleWithComponentFactoriesChangeDetectorRef

xxv

LElementNode LViewNodeLTextNode

LNode

Render3 Interfaces (nodes)

LContainerNode LProjectionNode