From 53cbdc63cffb76e2b6910788bc015637f2da5c92 Mon Sep 17 00:00:00 2001 From: imeepos <1037483576@qq.com> Date: Sat, 4 May 2019 22:53:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=A8=A1=E6=9D=BF=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=9B=91=E6=8E=A7=E5=8F=8A=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + WX20190504-205634@2x.png | Bin 0 -> 99124 bytes .../template/admin/welcome/index.tsx | 24 +++++++- package.json | 3 +- packages/nger-compiler-preact/lib/task.ts | 6 +- packages/nger-compiler/lib/index.ts | 9 ++- .../lib/transformer_factorys/component.ts | 55 ++++++++++++++++++ .../lib/transformer_factorys/controller.ts | 8 +-- .../lib/platform/change_detector_ref.ts | 30 +++------- .../lib/platform/component_factory.ts | 39 +++++++------ .../nger-core/lib/platform/component_ref.ts | 2 +- .../nger-core/lib/platform/platform_core.ts | 4 +- .../lib/component-factory-strategy.ts | 2 +- .../nger-platform-browser/lib/application.tsx | 23 +++----- packages/nger-platform-browser/lib/index.tsx | 6 +- packages/nger-platform-browser/lib/render.ts | 52 +++++++++++++++++ readme.md | 3 + 17 files changed, 196 insertions(+), 71 deletions(-) create mode 100644 WX20190504-205634@2x.png create mode 100644 packages/nger-compiler/lib/transformer_factorys/component.ts create mode 100644 packages/nger-platform-browser/lib/render.ts diff --git a/.gitignore b/.gitignore index 0f55cff..4732888 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ /hooks /platforms /cloud +/**/package.json \ No newline at end of file diff --git a/WX20190504-205634@2x.png b/WX20190504-205634@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e71154ca0ae969588c523d3b0b44c1460c8824ed GIT binary patch literal 99124 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 MhM{`1nnT?G0*bpoCIA2c literal 0 HcmV?d00001 diff --git a/addon/nger-demo/template/admin/welcome/index.tsx b/addon/nger-demo/template/admin/welcome/index.tsx index 04f496c..7f4d925 100644 --- a/addon/nger-demo/template/admin/welcome/index.tsx +++ b/addon/nger-demo/template/admin/welcome/index.tsx @@ -1,4 +1,4 @@ -import { Page } from 'nger-core'; +import { Page, Input, ChangeDetectorRef } from 'nger-core'; @Page({ path: '/admin/welcome', styleUrls: [ @@ -6,7 +6,27 @@ import { Page } from 'nger-core'; ] }) export class NgerDemoAdminWelcomePage { + + @Input() + title: string = `小明title`; + + @Input() + classStr: string = `items` + + constructor(change: ChangeDetectorRef) { + let i = 0; + setInterval(() => { + i = i + 1; + this.title += i; + this.classStr += i; + change.next({ title: this.title, classStr: this.classStr }); + }, 1000) + } render() { - return
NgerDemoAdminWelcomePage
+ return
+
+ {"title"} +
+
} } diff --git a/package.json b/package.json index 6b2121b..e4fc0db 100644 --- a/package.json +++ b/package.json @@ -163,7 +163,8 @@ "docker": "docker-compose up -d", "start": "npm run cli start koa", "build": "npm run cli build", - "platformBrowserBuild": "ts-node -r tsconfig-paths/register packages/nger-cli/lib/bin.ts build prod -n nger-platform-browser", + "build:platform:browser": "ts-node -r tsconfig-paths/register packages/nger-cli/lib/bin.ts build prod -n nger-platform-browser", + "build:nger:core": "ts-node -r tsconfig-paths/register packages/nger-cli/lib/bin.ts build prod -n nger-core", "dev": "ts-node -r tsconfig-paths/register packages/nger-cli/lib/bin.ts dev", "admin:build": "ts-node -r tsconfig-paths/register packages/nger-cli/lib/bin.ts build admin", "admin:dev": "ts-node -r tsconfig-paths/register packages/nger-cli/lib/bin.ts build admin --watch", diff --git a/packages/nger-compiler-preact/lib/task.ts b/packages/nger-compiler-preact/lib/task.ts index 620549f..898e91f 100644 --- a/packages/nger-compiler-preact/lib/task.ts +++ b/packages/nger-compiler-preact/lib/task.ts @@ -3,7 +3,8 @@ import { NgerCompilerBabel, NgerCompilerNgMetadata, metadataCache, - hasHandlerFileCache + hasHandlerFileCache, + componentRenderTransformerFactory } from 'nger-compiler' import { Injector } from 'nger-di' import { relative, extname, join } from 'path'; @@ -26,7 +27,8 @@ export const preactTask: Task = async (file: string, opt: string, injector: Inje const code = babel.compile(file, { transformers: { before: [ - await componentTransformerFactory(file, injector) + await componentTransformerFactory(file, injector), + componentRenderTransformerFactory ] } }); diff --git a/packages/nger-compiler/lib/index.ts b/packages/nger-compiler/lib/index.ts index c4a5f18..866c99a 100644 --- a/packages/nger-compiler/lib/index.ts +++ b/packages/nger-compiler/lib/index.ts @@ -9,7 +9,9 @@ import { NgerCompilerRollup } from './ts/rollup' import { NgerCompilerNgTemplate } from './html/ng' import { NgerCompilerCid } from './helper/cid' import { NgerCompilerNgMetadata } from './helper/ng_metadata' -import { controllerPropertyTransformerFactory, hasPropertyMetadata } from './transformer_factorys/controller' +import { controllerPropertyTransformerFactory, hasMetadata } from './transformer_factorys/controller' +import { componentRenderTransformerFactory } from './transformer_factorys/component' + import { WATCH_TASK, Task } from './tokens/watch_task' import { NgerCompilerBootstrap, metadataCache, hasHandlerFileCache, templateCache } from './bootstrap' import { NgModuleBootstrap } from 'nger-core' @@ -27,10 +29,11 @@ export { controllerPropertyTransformerFactory, WATCH_TASK, Task, - hasPropertyMetadata, + hasMetadata, metadataCache, hasHandlerFileCache, - templateCache + templateCache, + componentRenderTransformerFactory } const provides: StaticProvider[] = [ ...styleProviders, diff --git a/packages/nger-compiler/lib/transformer_factorys/component.ts b/packages/nger-compiler/lib/transformer_factorys/component.ts new file mode 100644 index 0000000..ec985cb --- /dev/null +++ b/packages/nger-compiler/lib/transformer_factorys/component.ts @@ -0,0 +1,55 @@ +import ts, { TransformationContext, Transformer } from 'typescript' +import {hasMetadata} from './controller'; +export const componentRenderTransformerFactory = (context: TransformationContext): Transformer => { + return (node: ts.SourceFile): ts.SourceFile => { + node.statements = ts.createNodeArray( + node.statements.map((node: ts.Statement) => { + if (ts.isImportDeclaration(node)) { + return node; + } else if (ts.isClassDeclaration(node)) { + if(hasMetadata(node.decorators,['Page','Component'])){ + return ts.createClassDeclaration( + node.decorators, + node.modifiers, + node.name, + node.typeParameters, + node.heritageClauses, + node.members.map(member => { + if (ts.isMethodDeclaration(member)) { + if(ts.isIdentifier(member.name)){ + if(member.name.text === 'render'){ + if(member.parameters.length===0){ + return ts.createMethod( + member.decorators, + member.modifiers, + member.asteriskToken, + member.name, + member.questionToken, + member.typeParameters, + ts.createNodeArray([ + ts.createParameter(undefined,undefined,undefined,'h') + ]), + member.type, + member.body + ) + } + } + } + } + return member; + }).filter(node => !!node) + ) + } + return node; + } else { + return node; + } + }) + ) + return node; + } +} + +function needReplaceRender(){ + +} \ No newline at end of file diff --git a/packages/nger-compiler/lib/transformer_factorys/controller.ts b/packages/nger-compiler/lib/transformer_factorys/controller.ts index 2cae9e0..27f07c4 100644 --- a/packages/nger-compiler/lib/transformer_factorys/controller.ts +++ b/packages/nger-compiler/lib/transformer_factorys/controller.ts @@ -14,7 +14,7 @@ export const controllerPropertyTransformerFactory = (context: TransformationCont node.heritageClauses, node.members.map(member => { if (ts.isMethodDeclaration(member)) { - const needReplace = hasPropertyMetadata(member.decorators); + const needReplace = hasMetadata(member.decorators); if (needReplace) { return ts.createProperty( member.decorators, @@ -26,7 +26,7 @@ export const controllerPropertyTransformerFactory = (context: TransformationCont ) } } else if (ts.isPropertyDeclaration(member)) { - const needReplace = hasPropertyMetadata(member.decorators); + const needReplace = hasMetadata(member.decorators); if (needReplace) return member; } else if (ts.isConstructorDeclaration(member)) { } }).filter(node => !!node) @@ -39,7 +39,7 @@ export const controllerPropertyTransformerFactory = (context: TransformationCont return node; } } -export function hasPropertyMetadata(nodes: ts.NodeArray, decorators: string[] = ['Get', 'Post']) { +export function hasMetadata(nodes: ts.NodeArray, decorators: string[] = ['Get', 'Post']) { const item = nodes && nodes.find(node => { if (ts.isDecorator(node)) { if (ts.isCallExpression(node.expression)) { @@ -52,4 +52,4 @@ export function hasPropertyMetadata(nodes: ts.NodeArray, decorator return false; }) return !!item; -} +} \ No newline at end of file diff --git a/packages/nger-core/lib/platform/change_detector_ref.ts b/packages/nger-core/lib/platform/change_detector_ref.ts index a07763a..7c473a4 100644 --- a/packages/nger-core/lib/platform/change_detector_ref.ts +++ b/packages/nger-core/lib/platform/change_detector_ref.ts @@ -3,12 +3,8 @@ import { Injector } from 'nger-di' import { NgModuleRef } from './ng_module_ref' import { ComponentRef } from './component_ref' import { ComponentFactory } from './component_factory' -export abstract class ChangeDetectorRef { - abstract markForCheck(): void; - abstract detach(): void; - abstract detectChanges(): void; - abstract checkNoChanges(): void; - abstract reattach(): void; +export abstract class ChangeDetectorRef { + abstract next(that: Partial): void; } export abstract class ViewRef extends ChangeDetectorRef { abstract destroy(): void; @@ -61,24 +57,12 @@ export abstract class ViewContainerRef { abstract remove(index?: number): void; abstract detach(index?: number): ViewRef | null; } -import { Subject } from 'rxjs' -export class DefaultChangeDetectorRef extends ChangeDetectorRef { - constructor(public subject: Subject) { +import { BehaviorSubject } from 'rxjs' +export class DefaultChangeDetectorRef extends ChangeDetectorRef { + constructor(public subject: BehaviorSubject) { super(); } - markForCheck(): void { - this.subject.next(); - } - detach(): void { - this.subject.next(); - } - detectChanges(): void { - this.subject.next(); - } - checkNoChanges(): void { - this.subject.next(); - } - reattach(): void { - this.subject.next(); + next(that: Partial): void { + this.subject.next(that); } } \ No newline at end of file diff --git a/packages/nger-core/lib/platform/component_factory.ts b/packages/nger-core/lib/platform/component_factory.ts index 6f38e90..d152932 100644 --- a/packages/nger-core/lib/platform/component_factory.ts +++ b/packages/nger-core/lib/platform/component_factory.ts @@ -7,17 +7,10 @@ import { ComponentClassAst, ComponentOptions } from '../decorators/component'; import { ChangeDetectorRef, DefaultChangeDetectorRef } from './change_detector_ref'; import { InputMetadataKey, InputPropertyAst } from '../decorators/input'; -import { Subject } from 'rxjs'; +import { BehaviorSubject } from 'rxjs'; import { handlerTypeContextToParams } from './createStaticProvider' -// 这个是编译后的模板文件 -export const ComponentTemplateToken = new InjectionToken(`ComponentTemplateToken`); -// 这个是编译后的样式文件 -export const ComponentStyleToken = new InjectionToken(`ComponentStyleToken`); -// 这个是编译后的json文件 -export const ComponentPropToken = new InjectionToken(`ComponentPropToken`); -// 这个是样式挂载文件 -export const StyleRef = new InjectionToken(`StyleRef`); - +export type Render = (injector: Injector) => (type: any, props: any, ...children: any[]) => T; +export const RENDER = new InjectionToken(`RENDER`) export interface ComponentCreator { (_context: TypeContext): any; } @@ -86,7 +79,6 @@ export class ComponentFactory { injector: Injector, ngModule?: NgModuleRef ): ComponentRef { - const { target } = this._context; // 新建一个 // Component,Directive,Pipe每次取都要创建 // Page/Controller单例 @@ -95,7 +87,7 @@ export class ComponentFactory { // const customElementRegistry = injector.get(CustomElementRegistry); // customElementRegistry.define(this) // 这个是数据监控器 - const $ngOnChange = new Subject(); + const $ngOnChange = new BehaviorSubject({}); const changeDetector = new DefaultChangeDetectorRef($ngOnChange) const currentInjector = injector.create([{ provide: this.componentType, @@ -104,13 +96,15 @@ export class ComponentFactory { const that = this; const proxy = new Proxy(instance as any, { set(target: any, p: PropertyKey, value: any, receiver: any) { - target[p] = value; // 判断是否是@Input const input = that.inputs.map(it => it.propName === p); if (input) { // 这里应该有数据拦截之类的东西,先todo吧 - changeDetector.markForCheck(); + $ngOnChange.next({ + [`${p as string}`]: value + }); } + target[p] = value; return true; } }); @@ -125,13 +119,24 @@ export class ComponentFactory { provide: ChangeDetectorRef, useValue: changeDetector, deps: [] - }], target.name); - let instance = currentInjector.get(target) as C; + }], this.componentType.name); + // 是一个proxy 外部赋值会触发更新,内部赋值需要手动更新 + let instance = currentInjector.get(this.componentType) as C; + const init = {}; + this.inputs.map(input=>{ + init[input.templateName] = instance[input.propName] + }); + $ngOnChange.next(init); // 解析一些属性并赋值 const parserVisitor = currentInjector.get(ParserVisitor); this._context.injector = currentInjector; parserVisitor.parse(instance, this._context); // 设置代理 - return new ComponentRef(currentInjector, instance, changeDetector, target, $ngOnChange); + const ref = new ComponentRef(currentInjector, instance, changeDetector, this.componentType as any, $ngOnChange); + ref.injector.setStatic([{ + provide: ComponentRef, + useValue: ref + }]) + return ref; } } diff --git a/packages/nger-core/lib/platform/component_ref.ts b/packages/nger-core/lib/platform/component_ref.ts index 0720885..4e8f137 100644 --- a/packages/nger-core/lib/platform/component_ref.ts +++ b/packages/nger-core/lib/platform/component_ref.ts @@ -1,6 +1,6 @@ import { Injector, Type } from 'nger-di' import { ChangeDetectorRef } from './change_detector_ref'; -import { Component, ComponentOptions } from '../decorators/component' +import { Component } from '../decorators/component' // 这个是真实的组件 P代表react中的Props,S代表State // 这个是为了更好的融合react/preact才加上的 import { Subject } from 'rxjs' diff --git a/packages/nger-core/lib/platform/platform_core.ts b/packages/nger-core/lib/platform/platform_core.ts index 3554e7f..0a663c0 100644 --- a/packages/nger-core/lib/platform/platform_core.ts +++ b/packages/nger-core/lib/platform/platform_core.ts @@ -14,8 +14,8 @@ import { ApplicationRef } from './application_ref' import { ComponentCreator } from './component_factory' import { PLATFORM_INITIALIZER } from './application_tokens' import { NGER_CONFIG, INgerConfig } from '../sdk/nger-config' -import { Subject } from 'rxjs' -export const topSubject = new Subject(); +import { BehaviorSubject } from 'rxjs' +export const topSubject = new BehaviorSubject({}); export const platformCore = createPlatformFactory(null, 'core', [{ provide: APP_INITIALIZER, useValue: () => { }, diff --git a/packages/nger-dom/lib/component-factory-strategy.ts b/packages/nger-dom/lib/component-factory-strategy.ts index 7f52a02..67adc71 100755 --- a/packages/nger-dom/lib/component-factory-strategy.ts +++ b/packages/nger-dom/lib/component-factory-strategy.ts @@ -223,6 +223,6 @@ export class ComponentNgElementStrategy implements NgElementStrategy { return; } this.callNgOnChanges(); - this.componentRef!.changeDetectorRef.detectChanges(); + // this.componentRef!.changeDetectorRef.detectChanges(); } } diff --git a/packages/nger-platform-browser/lib/application.tsx b/packages/nger-platform-browser/lib/application.tsx index b225b07..bbdf20c 100644 --- a/packages/nger-platform-browser/lib/application.tsx +++ b/packages/nger-platform-browser/lib/application.tsx @@ -1,5 +1,5 @@ // 负责挂载到dom 如果是小程序 可设为空 -import { ApplicationRef, ComponentFactory, ComponentRef, ElementRef, ComponentFactoryResolver, ComponentMetadataKey } from 'nger-core' +import { ApplicationRef, ComponentFactory, ComponentRef, RENDER,ElementRef, ComponentFactoryResolver, ComponentMetadataKey } from 'nger-core' import { Injector, Type, InjectFlags } from 'nger-di' const { render, h } = require('preact'); export function ngerRender(injector: Injector) { @@ -20,16 +20,15 @@ export function ngerCreateElement(injector: Injector) { const resolver = injector.get(ComponentFactoryResolver) const factory = resolver.resolveComponentFactory(tag) const ref = factory.create(injector); - if (ref) { } + if (ref) { + (ref.instance as any).render(ngerCreateElement(ref.injector)) + } } } } -(window as any).h = (injector: Injector) => (tag, attr, ...children) => { - if (typeof tag === 'string') { - } else { - } -}; +(window as any).h = h; + export class BrowserApplicationRef extends ApplicationRef { root = document.getElementById('app') as HTMLDivElement; constructor(injector: Injector) { @@ -52,13 +51,9 @@ export class BrowserApplicationRef extends ApplicationRef { //这里渲染preact if (ref.instance.render) { const tpl = ref.instance.render.bind(ref.instance); - const res = tpl() - render(res, parent.nativeElement) - // 更新试图,后面有可能会自己实现 - ref.$ngOnChange && ref.$ngOnChange.subscribe(() => { - const res = tpl() - render(res, parent.nativeElement, parent.nativeElement.lastElementChild) - }); + const h = ref.injector.get(RENDER) + const element = tpl(h(ref.injector)); + parent.nativeElement.appendChild(element) super.attachView(ref, injector); const nowTime = new Date().getTime(); const totalTime = nowTime - (window as any).nger.startTime diff --git a/packages/nger-platform-browser/lib/index.tsx b/packages/nger-platform-browser/lib/index.tsx index ce1aa27..070aa53 100644 --- a/packages/nger-platform-browser/lib/index.tsx +++ b/packages/nger-platform-browser/lib/index.tsx @@ -1,11 +1,15 @@ -import { createPlatformFactory, ApplicationRef, Http, platformCore, CustomElementRegistry, History, NgModuleBootstrap } from 'nger-core' +import { createPlatformFactory, RENDER,ApplicationRef, Http, platformCore, CustomElementRegistry, History, NgModuleBootstrap } from 'nger-core' import { Injector } from 'nger-di' import 'document-register-element'; import { createBrowserHistory } from 'history'; import { BrowserApplicationRef } from './application' import { NgerPlatformBrowser } from './bootstrap' import axios from 'axios' +import {render} from './render' export default createPlatformFactory(platformCore, 'browser', [{ + provide: RENDER, + useValue: render, +},{ provide: Http, useValue: axios }, { diff --git a/packages/nger-platform-browser/lib/render.ts b/packages/nger-platform-browser/lib/render.ts new file mode 100644 index 0000000..d6ac26f --- /dev/null +++ b/packages/nger-platform-browser/lib/render.ts @@ -0,0 +1,52 @@ +import { Injector } from 'nger-di' +import { ComponentFactoryResolver, ComponentRef, ComponentFactory } from 'nger-core'; +import { pluck, distinctUntilChanged } from 'rxjs/operators' +export function render(injector: Injector) { + return (tag: any, props: any, ...children: any[]) => { + if (typeof tag === 'string') { + const factory = injector.get(ComponentFactory) + const ref = injector.get(ComponentRef) + const element = document.createElement(tag) + const onChange = ref.$ngOnChange; + if (props) { + Object.keys(props).map(key => { + const attribute = document.createAttribute(key); + const val = props[key]; + console.log({ key, val }) + // 检查是否在 input里 + let input = factory.inputs.find(input => input.propName === val) + if (input) { + // 在input里 + if (onChange) { + onChange.pipe( + pluck(val), + distinctUntilChanged() + ).subscribe(res => attribute.value = res) + } + } else { + attribute.value = val; + } + element.setAttributeNode(attribute) + }) + } + if (children) { + children.map((child) => { + if (typeof child === 'string') { + console.log(child) + const childElement = document.createTextNode(child) + element.append(childElement) + } else { + element.append(child) + } + }) + } + if(onChange) onChange.subscribe(res=>console.log(res)) + return element; + } else { + const resolver = injector.get(ComponentFactoryResolver) + const factory = resolver.resolveComponentFactory(tag); + const ref = factory.create(injector); + (ref.instance as any).render(render(ref.injector)) + } + } +} \ No newline at end of file diff --git a/readme.md b/readme.md index 2c7e281..8153b66 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,8 @@

Vue logo

+ +项目开发中,api频繁变动中! + ## Nger > nger, 用ng的人!I am a nger!