From 457d910c0b237abe4839077184c70a0479e15684 Mon Sep 17 00:00:00 2001 From: imeepos <1037483576@qq.com> Date: Tue, 12 Nov 2019 15:23:28 +0800 Subject: [PATCH] add @nger/di @nger/decorator --- .gitignore | 5 +- packages/ims-decorator/__test__/index.ts | 3 +- packages/ims-decorator/lib/index.ts | 2 +- packages/ims-decorator/package.json | 46 ++++++------ packages/ims-decorator/tsconfig.json | 9 +++ packages/ims-decorator/yarn.lock | 13 ++++ packages/nger-core/lib/cli/command.ts | 2 - packages/nger-core/lib/cli/option.ts | 2 +- .../lib/decorators/content-children.ts | 1 - packages/nger-core/lib/decorators/host.ts | 2 +- packages/nger-core/lib/decorators/jsx.ts | 2 +- packages/nger-core/lib/decorators/output.ts | 4 +- packages/nger-core/lib/decorators/self.ts | 2 +- .../nger-core/lib/decorators/skip-self.ts | 2 +- .../lib/platform/application_init_status.ts | 70 +++++++++--------- .../nger-core/lib/platform/createPlatform.ts | 4 +- .../nger-core/lib/platform/parser_visitor.ts | 2 +- packages/nger-core/lib/sdk/nger-config.ts | 2 +- packages/nger-di/lib/index.ts | 3 +- packages/nger-di/lib/injector_ng.ts | 2 - packages/nger-di/lib/util.ts | 72 +++++++++---------- packages/nger-di/package.json | 62 ++++++++-------- packages/nger-di/tsconfig.json | 9 +++ 23 files changed, 175 insertions(+), 146 deletions(-) create mode 100644 packages/ims-decorator/tsconfig.json create mode 100644 packages/ims-decorator/yarn.lock create mode 100644 packages/nger-di/tsconfig.json diff --git a/.gitignore b/.gitignore index 4732888..e06e0cb 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,7 @@ /hooks /platforms /cloud -/**/package.json \ No newline at end of file +/**/package.json +/**/node_modules +/dist +/**/dist diff --git a/packages/ims-decorator/__test__/index.ts b/packages/ims-decorator/__test__/index.ts index 1810810..f1c2b2e 100644 --- a/packages/ims-decorator/__test__/index.ts +++ b/packages/ims-decorator/__test__/index.ts @@ -4,8 +4,7 @@ import { makeDecorator, getContext, isClassAst, - isPropertyAst, - getDesignParamTypes + isPropertyAst } from '../lib/index'; import { expect } from 'chai' class ImsDemo { } diff --git a/packages/ims-decorator/lib/index.ts b/packages/ims-decorator/lib/index.ts index 9ba8d19..9eb44fa 100644 --- a/packages/ims-decorator/lib/index.ts +++ b/packages/ims-decorator/lib/index.ts @@ -1,5 +1,5 @@ import "reflect-metadata"; -import { Injector } from 'nger-di'; +import { Injector } from '@nger/di'; export interface Type extends Function { new(...args: any[]): T; } diff --git a/packages/ims-decorator/package.json b/packages/ims-decorator/package.json index 7447215..52cbae6 100644 --- a/packages/ims-decorator/package.json +++ b/packages/ims-decorator/package.json @@ -1,23 +1,27 @@ { - "name": "ims-decorator", - "version": "1.0.6", - "description": "> TODO: description", - "author": "imeepos <1037483576@qq.com>", - "homepage": "http://meepo.com.cn", - "license": "ISC", - "main": "lib/index", - "directories": { - "lib": "lib", - "test": "__tests__" - }, - "files": [ - "lib" - ], - "scripts": { - "test": "echo \"Error: run tests from root\" && exit 1" - }, - "gitHead": "b86981067c7da7653379ae461b9427f4aea193a7", - "dependencies": { - "reflect-metadata": "*" - } + "name": "@nger/decorator", + "version": "1.0.7", + "description": "> TODO: description", + "author": "imeepos <1037483576@qq.com>", + "homepage": "http://meepo.com.cn", + "license": "ISC", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "directories": { + "lib": "lib", + "test": "__tests__" + }, + "files": [ "lib" ], + "publishConfig": { + "registry": "http://registry.npmjs.org/", + "access": "public" + }, + "scripts": { + "test": "echo \"Error: run tests from root\" && exit 1" + }, + "gitHead": "b86981067c7da7653379ae461b9427f4aea193a7", + "dependencies": { + "reflect-metadata": "*", + "@nger/di": "*" + } } diff --git a/packages/ims-decorator/tsconfig.json b/packages/ims-decorator/tsconfig.json new file mode 100644 index 0000000..518a570 --- /dev/null +++ b/packages/ims-decorator/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "include": [ + "lib" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/packages/ims-decorator/yarn.lock b/packages/ims-decorator/yarn.lock new file mode 100644 index 0000000..1e5dafe --- /dev/null +++ b/packages/ims-decorator/yarn.lock @@ -0,0 +1,13 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@nger/di@*": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@nger/di/-/di-1.0.7.tgz#bc96262a65250e8709fed853640b2f0d79b66cb6" + integrity sha512-hsE08gt/71gaemjX3/JzyaaT3x92UJHzOBtfLSK/I7nVJFVYUbB6bTNfAWqBheZmGO6fAjZR8XBSHsviqtiWfg== + +reflect-metadata@*: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== diff --git a/packages/nger-core/lib/cli/command.ts b/packages/nger-core/lib/cli/command.ts index 9b48a1d..595ac21 100644 --- a/packages/nger-core/lib/cli/command.ts +++ b/packages/nger-core/lib/cli/command.ts @@ -9,11 +9,9 @@ export interface CommandOptions { }; } export const Command = makeDecorator(CommandMetadataKey); - export interface Command { action(options: O): R; } - export function isCommandClassAst(val: ClassAst): val is ClassAst { return val.metadataKey === CommandMetadataKey; } diff --git a/packages/nger-core/lib/cli/option.ts b/packages/nger-core/lib/cli/option.ts index 2b0d88b..577e350 100644 --- a/packages/nger-core/lib/cli/option.ts +++ b/packages/nger-core/lib/cli/option.ts @@ -1,6 +1,6 @@ import { makeDecorator, PropertyContext, PropertyAst } from "ims-decorator"; export const OptionMetadataKey = 'OptionMetadataKey' -import { Options } from 'yargs' +import { Options } from 'yargs'; export interface OptionOptions extends Options { } export const Option = makeDecorator(OptionMetadataKey); export interface Option { } diff --git a/packages/nger-core/lib/decorators/content-children.ts b/packages/nger-core/lib/decorators/content-children.ts index 8d8aa59..8c58fef 100644 --- a/packages/nger-core/lib/decorators/content-children.ts +++ b/packages/nger-core/lib/decorators/content-children.ts @@ -23,4 +23,3 @@ export class ContentChildrenPropertyAst extends PropertyContext { return ast.metadataKey === ContentChildrenMetadataKey; } - diff --git a/packages/nger-core/lib/decorators/host.ts b/packages/nger-core/lib/decorators/host.ts index 1a64568..15c4c22 100644 --- a/packages/nger-core/lib/decorators/host.ts +++ b/packages/nger-core/lib/decorators/host.ts @@ -1,4 +1,4 @@ -import { makeDecorator,TypeDecorator, ConstructorContext, ConstructorAst } from 'ims-decorator'; +import { makeDecorator, TypeDecorator, ConstructorContext, ConstructorAst } from 'ims-decorator'; export const HostMetadataKey = 'HostMetadataKey'; export interface HostOptions { } export interface HostDecorator { diff --git a/packages/nger-core/lib/decorators/jsx.ts b/packages/nger-core/lib/decorators/jsx.ts index f6b9ce9..f7df540 100644 --- a/packages/nger-core/lib/decorators/jsx.ts +++ b/packages/nger-core/lib/decorators/jsx.ts @@ -23,7 +23,7 @@ declare global { interface IntrinsicElements { [elemName: string]: any; } - interface ElementClass {} + interface ElementClass { } interface ElementAttributesProperty extends NgerComponent { } interface ElementChildrenAttribute { } } diff --git a/packages/nger-core/lib/decorators/output.ts b/packages/nger-core/lib/decorators/output.ts index 1dac353..10ec6f8 100644 --- a/packages/nger-core/lib/decorators/output.ts +++ b/packages/nger-core/lib/decorators/output.ts @@ -1,5 +1,5 @@ -import { makeDecorator, ClassAst, PropertyContext, PropertyAst } from 'ims-decorator'; -import { Subject, Subscription } from 'rxjs' +import { makeDecorator, PropertyContext, PropertyAst } from 'ims-decorator'; +import { Subject, Subscription } from 'rxjs'; export const OutputMetadataKey = 'OutputMetadataKey'; export interface OutputOptions { diff --git a/packages/nger-core/lib/decorators/self.ts b/packages/nger-core/lib/decorators/self.ts index 145b0cc..b86f5f9 100644 --- a/packages/nger-core/lib/decorators/self.ts +++ b/packages/nger-core/lib/decorators/self.ts @@ -1,4 +1,4 @@ -import { makeDecorator,TypeDecorator, ConstructorContext, ConstructorAst } from 'ims-decorator'; +import { makeDecorator, TypeDecorator, ConstructorContext, ConstructorAst } from 'ims-decorator'; export const SelfMetadataKey = 'SelfMetadataKey'; export interface SelfOptions { } export interface SelfDecorator { diff --git a/packages/nger-core/lib/decorators/skip-self.ts b/packages/nger-core/lib/decorators/skip-self.ts index d3fa866..d98bbdd 100644 --- a/packages/nger-core/lib/decorators/skip-self.ts +++ b/packages/nger-core/lib/decorators/skip-self.ts @@ -1,4 +1,4 @@ -import { makeDecorator,TypeDecorator, ConstructorContext, ConstructorAst } from 'ims-decorator'; +import { makeDecorator, TypeDecorator, ConstructorContext, ConstructorAst } from 'ims-decorator'; export const SkipSelfMetadataKey = 'SkipSelfMetadataKey'; export interface SkipSelfOptions { } export interface SkipSelfDecorator { diff --git a/packages/nger-core/lib/platform/application_init_status.ts b/packages/nger-core/lib/platform/application_init_status.ts index ea38713..12a283f 100644 --- a/packages/nger-core/lib/platform/application_init_status.ts +++ b/packages/nger-core/lib/platform/application_init_status.ts @@ -9,43 +9,43 @@ import { InjectionToken } from 'nger-di'; export const APP_INITIALIZER = new InjectionToken void>>('Application Initializer'); @Injectable() export class ApplicationInitStatus { - // TODO(issue/24571): remove '!'. - private resolve !: Function; - // TODO(issue/24571): remove '!'. - private reject !: Function; - private initialized = false; - public readonly donePromise: Promise; - public readonly done = false; + // TODO(issue/24571): remove '!'. + private resolve !: Function; + // TODO(issue/24571): remove '!'. + private reject !: Function; + private initialized = false; + public readonly donePromise: Promise; + public readonly done = false; - constructor(@Inject(APP_INITIALIZER) @Optional() private appInits: (() => any)[]) { - this.donePromise = new Promise((res, rej) => { - this.resolve = res; - this.reject = rej; - }); - } - - /** @internal */ - runInitializers() { - if (this.initialized) { - return; + constructor(@Inject(APP_INITIALIZER) @Optional() private appInits: (() => any)[]) { + this.donePromise = new Promise((res, rej) => { + this.resolve = res; + this.reject = rej; + }); } - const asyncInitPromises: Promise[] = []; - const complete = () => { - (this as { done: boolean }).done = true; - this.resolve(); - }; - if (this.appInits) { - for (let i = 0; i < this.appInits.length; i++) { - const initResult = this.appInits[i](); - if (isPromise(initResult)) { - asyncInitPromises.push(initResult); + + /** @internal */ + runInitializers() { + if (this.initialized) { + return; } - } - } - Promise.all(asyncInitPromises).then(() => { complete(); }).catch(e => { this.reject(e); }); - if (asyncInitPromises.length === 0) { - complete(); + const asyncInitPromises: Promise[] = []; + const complete = () => { + (this as { done: boolean }).done = true; + this.resolve(); + }; + if (this.appInits) { + for (let i = 0; i < this.appInits.length; i++) { + const initResult = this.appInits[i](); + if (isPromise(initResult)) { + asyncInitPromises.push(initResult); + } + } + } + Promise.all(asyncInitPromises).then(() => { complete(); }).catch(e => { this.reject(e); }); + if (asyncInitPromises.length === 0) { + complete(); + } + this.initialized = true; } - this.initialized = true; - } } diff --git a/packages/nger-core/lib/platform/createPlatform.ts b/packages/nger-core/lib/platform/createPlatform.ts index 8264ac6..47261f7 100644 --- a/packages/nger-core/lib/platform/createPlatform.ts +++ b/packages/nger-core/lib/platform/createPlatform.ts @@ -1,4 +1,4 @@ -import { Injector, InjectionToken,InjectFlags } from 'nger-di' +import { Injector, InjectionToken, InjectFlags } from 'nger-di' import { PlatformRef } from './platform_ref' import { PLATFORM_INITIALIZER } from './application_tokens' let _platform: PlatformRef; @@ -15,7 +15,7 @@ export function createPlatform(injector: Injector): PlatformRef { 'There can be only one platform. Destroy the previous one to create a new one.'); } _platform = injector.get(PlatformRef); - const inits = injector.get(PLATFORM_INITIALIZER, undefined,InjectFlags.Optional) || []; + const inits = injector.get(PLATFORM_INITIALIZER, undefined, InjectFlags.Optional) || []; if (inits) inits.forEach((init: any) => init()); return _platform; } diff --git a/packages/nger-core/lib/platform/parser_visitor.ts b/packages/nger-core/lib/platform/parser_visitor.ts index fe8f9b5..d08d11b 100644 --- a/packages/nger-core/lib/platform/parser_visitor.ts +++ b/packages/nger-core/lib/platform/parser_visitor.ts @@ -2,7 +2,7 @@ import { TypeContext } from 'ims-decorator' import { Inject, InjectMetadataKey, InjectPropertyAst } from '../decorators/inject' import { EntityRepositoryMetadataKey, EntityRepositoryPropertyAst } from '../orm/index'; import { ConnectionToken } from '../tokens'; -import { Connection } from 'typeorm' +import { Connection } from 'typeorm'; import { Injector } from 'nger-di' import { Http } from '../sdk/http'; import { GetMetadataKey, GetPropertyAst } from '../http/get' diff --git a/packages/nger-core/lib/sdk/nger-config.ts b/packages/nger-core/lib/sdk/nger-config.ts index 9826bc6..4475c60 100644 --- a/packages/nger-core/lib/sdk/nger-config.ts +++ b/packages/nger-core/lib/sdk/nger-config.ts @@ -43,7 +43,7 @@ export class NgerConfig { } else { } } - + get(name: INgerConfigKey): INgerConfig[INgerConfigKey] { const config: any = this.config[name]; if (config) { diff --git a/packages/nger-di/lib/index.ts b/packages/nger-di/lib/index.ts index 75fb7b7..8eae5ec 100644 --- a/packages/nger-di/lib/index.ts +++ b/packages/nger-di/lib/index.ts @@ -1,5 +1,4 @@ -// export * from './injector'; export * from './util'; export * from './injection_token'; export * from './type'; -export { Injector, StaticInjector,IToken } from './injector_ng'; \ No newline at end of file +export { Injector, StaticInjector, IToken } from './injector_ng'; \ No newline at end of file diff --git a/packages/nger-di/lib/injector_ng.ts b/packages/nger-di/lib/injector_ng.ts index 227ab7b..6706015 100644 --- a/packages/nger-di/lib/injector_ng.ts +++ b/packages/nger-di/lib/injector_ng.ts @@ -4,8 +4,6 @@ import { InjectionToken } from './injection_token'; import { ɵɵinject } from './injector_compatibility'; import { ɵɵdefineInjectable } from './def'; import { ConstructorProvider, ExistingProvider, FactoryProvider, StaticClassProvider, StaticProvider, ValueProvider } from './type'; -// import { Inject, Optional, Self, SkipSelf } from './metadata'; - export const SOURCE = '__source'; const _THROW_IF_NOT_FOUND = Symbol.for(`_THROW_IF_NOT_FOUND`); export const THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND; diff --git a/packages/nger-di/lib/util.ts b/packages/nger-di/lib/util.ts index a6326ca..1e95f1e 100644 --- a/packages/nger-di/lib/util.ts +++ b/packages/nger-di/lib/util.ts @@ -1,51 +1,51 @@ import { Type } from './type'; export function stringify(token: any): string { - if (typeof token === 'string') { - return token; - } - if (token instanceof Array) { - return '[' + token.map(stringify).join(', ') + ']'; - } - if (token == null) { - return '' + token; - } - if (token.overriddenName) { - return `${token.overriddenName}`; - } - if (token.name) { - return `${token.name}`; - } - const res = token.toString(); - if (res == null) { - return '' + res; - } - const newLineIndex = res.indexOf('\n'); - return newLineIndex === -1 ? res : res.substring(0, newLineIndex); + if (typeof token === 'string') { + return token; + } + if (token instanceof Array) { + return '[' + token.map(stringify).join(', ') + ']'; + } + if (token == null) { + return '' + token; + } + if (token.overriddenName) { + return `${token.overriddenName}`; + } + if (token.name) { + return `${token.name}`; + } + const res = token.toString(); + if (res == null) { + return '' + res; + } + const newLineIndex = res.indexOf('\n'); + return newLineIndex === -1 ? res : res.substring(0, newLineIndex); } export function getClosureSafeProperty(objWithPropertyToExtract: T): string { - for (let key in objWithPropertyToExtract) { - if (objWithPropertyToExtract[key] === getClosureSafeProperty as any) { - return key; + for (let key in objWithPropertyToExtract) { + if (objWithPropertyToExtract[key] === getClosureSafeProperty as any) { + return key; + } } - } - throw Error('Could not find renamed property on target object.'); + throw Error('Could not find renamed property on target object.'); } export function forwardRef(forwardRefFn: ForwardRefFn): Type { - (forwardRefFn).__forward_ref__ = forwardRef; - (forwardRefFn).toString = function () { return stringify(this()); }; - return (>forwardRefFn); + (forwardRefFn).__forward_ref__ = forwardRef; + (forwardRefFn).toString = function () { return stringify(this()); }; + return (>forwardRefFn); } export interface ForwardRefFn { (): any; } const __forward_ref__ = getClosureSafeProperty({ __forward_ref__: getClosureSafeProperty }); export function resolveForwardRef(type: T): T { - const fn: any = type; - if (typeof fn === 'function' && fn.hasOwnProperty(__forward_ref__) && - fn.__forward_ref__ === forwardRef) { - return fn(); - } else { - return type; - } + const fn: any = type; + if (typeof fn === 'function' && fn.hasOwnProperty(__forward_ref__) && + fn.__forward_ref__ === forwardRef) { + return fn(); + } else { + return type; + } } diff --git a/packages/nger-di/package.json b/packages/nger-di/package.json index bc94739..efa6dde 100644 --- a/packages/nger-di/package.json +++ b/packages/nger-di/package.json @@ -1,34 +1,32 @@ { - "name": "nger-di", - "version": "1.0.6", - "description": "> TODO: description", - "author": "imeepos <1037483576@qq.com>", - "homepage": "https://github.com/meepobrother/nger#readme", - "license": "ISC", - "main": "lib/index.js", - "typings": "lib/index.d.ts", - "directories": { - "lib": "lib", - "test": "__tests__" - }, - "files": [ - "lib" - ], - "publishConfig": { - "registry": "http://registry.npmjs.org/" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/meepobrother/nger.git" - }, - "scripts": { - "test": "echo \"Error: run tests from root\" && exit 1" - }, - "bugs": { - "url": "https://github.com/meepobrother/nger/issues" - }, - "dependencies": { - "nger-logger": "*" - }, - "gitHead": "b86981067c7da7653379ae461b9427f4aea193a7" + "name": "@nger/di", + "version": "1.0.7", + "description": "> TODO: description", + "author": "imeepos <1037483576@qq.com>", + "homepage": "https://github.com/meepobrother/nger#readme", + "license": "ISC", + "main": "lib/index.js", + "typings": "lib/index.d.ts", + "private": false, + "directories": { + "lib": "lib", + "test": "__tests__" + }, + "files": [ "lib" ], + "publishConfig": { + "registry": "http://registry.npmjs.org/", + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/meepobrother/nger.git" + }, + "scripts": { + "test": "echo \"Error: run tests from root\" && exit 1" + }, + "bugs": { + "url": "https://github.com/meepobrother/nger/issues" + }, + "dependencies": {}, + "gitHead": "b86981067c7da7653379ae461b9427f4aea193a7" } diff --git a/packages/nger-di/tsconfig.json b/packages/nger-di/tsconfig.json new file mode 100644 index 0000000..518a570 --- /dev/null +++ b/packages/nger-di/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "include": [ + "lib" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file