From 29c2a37ac3133cd0a1b6f46e53b72ba3f23c7610 Mon Sep 17 00:00:00 2001
From: imeepos <1037483576@qq.com>
Date: Sat, 4 May 2019 11:12:18 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=B6=E5=AE=9A=E7=9B=AE=E5=BD=95=E8=A7=84?=
=?UTF-8?q?=E8=8C=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
addon/nger-addon/readme.md | 1 -
addon/nger-install/admin.ts | 23 +++++++
addon/nger-install/app.ts | 23 +++++++
addon/nger-install/inc/index.ts | 6 +-
addon/nger-install/inc/install.ts | 8 +++
addon/nger-install/inc/services/install.ts | 4 ++
addon/nger-install/index.ts | 27 ++------
addon/nger-install/package.json | 15 ++++-
addon/nger-install/pc.ts | 23 +++++++
addon/nger-install/readme.md | 50 +++++++++-----
addon/nger-install/server.ts | 23 +++++++
.../nger-install/template/install/index.scss | 3 +
addon/nger-install/template/install/index.tsx | 7 +-
.../nger-install/template/minstall/index.tsx | 22 +++++++
addon/nger-starter/readme.md | 2 -
addon/nger-todo/admin.ts | 0
addon/nger-todo/app.ts | 0
addon/nger-todo/pc.ts | 0
addon/nger-todo/readme.md | 1 -
addon/nger-todo/server.ts | 0
.../template/admin/components/index.ts | 4 --
.../template/admin/task-edit/index.scss | 3 -
.../template/admin/task-edit/index.tsx | 14 ----
.../admin/task-list/index.controller.ts | 9 ---
.../template/admin/task-list/index.scss | 3 -
.../template/admin/task-list/index.tsx | 12 ----
lerna-debug.log | 19 ++++++
packages/nger-compiler-client/README.md | 10 ++-
.../nger-compiler-client/__tests__/index.ts | 7 ++
.../__tests__/nger-compiler-client.test.js | 7 --
.../nger-compiler-client/lib/bootstrap.ts | 56 ----------------
packages/nger-compiler-client/lib/index.ts | 21 +++---
packages/nger-compiler-client/lib/task.ts | 40 +++++++++++
packages/nger-compiler-native/lib/preact.ts | 57 ++++++++--------
.../nger-compiler-preact/__tests__/index.ts | 7 ++
packages/nger-compiler-preact/lib/assets.ts | 9 ---
.../nger-compiler-preact/lib/controller.ts | 10 ---
packages/nger-compiler-preact/lib/html.ts | 11 ----
packages/nger-compiler-preact/lib/index.ts | 66 +++++++------------
packages/nger-compiler-preact/lib/preact.ts | 59 +----------------
packages/nger-compiler-preact/lib/style.ts | 31 ---------
packages/nger-compiler-preact/lib/task.ts | 46 +++++++++++++
.../lib/transformer_factorys/component.ts | 62 +++++++++++++++++
.../nger-compiler-preact/lib/typescript.ts | 8 ---
.../nger-compiler-weapp/__tests__/index.ts | 7 ++
packages/nger-compiler-weapp/lib/weapp.ts | 30 ++++-----
packages/nger-compiler/lib/bootstrap.ts | 63 ++++++++++++++++++
.../nger-compiler/lib/helper/ng_metadata.ts | 4 +-
packages/nger-compiler/lib/index.ts | 35 +++++-----
.../nger-compiler/lib/tokens/watch_task.ts | 3 +
.../controller.ts | 45 ++-----------
packages/nger-compiler/lib/ts/babel.ts | 9 +--
.../nger-compiler/lib/ts/controllerBabel.ts | 38 -----------
packages/nger-compiler/lib/ts/typescript.ts | 16 ++---
packages/nger-compiler/package.json | 3 +-
packages/nger-core/lib/decorators/jsx.ts | 9 +--
packages/nger-ui/lib/components/base/index.ts | 12 ++++
.../lib/components/swiper-item/index.tsx | 7 +-
.../nger-ui/lib/components/swiper/index.tsx | 25 ++++++-
.../nger-ui/lib/components/video/index.tsx | 2 +-
.../nger-ui/lib/components/view/index.tsx | 12 +++-
packages/nger-ui/lib/directives/index.ts | 1 +
packages/nger-ui/lib/directives/ngIf.ts | 8 +++
packages/nger-ui/lib/index.ts | 3 +-
readme.md | 57 +++++++++++-----
65 files changed, 674 insertions(+), 524 deletions(-)
delete mode 100644 addon/nger-addon/readme.md
create mode 100644 addon/nger-install/admin.ts
create mode 100644 addon/nger-install/app.ts
create mode 100644 addon/nger-install/inc/install.ts
create mode 100644 addon/nger-install/inc/services/install.ts
create mode 100644 addon/nger-install/pc.ts
create mode 100644 addon/nger-install/server.ts
create mode 100644 addon/nger-install/template/install/index.scss
create mode 100644 addon/nger-install/template/minstall/index.tsx
delete mode 100644 addon/nger-starter/readme.md
delete mode 100644 addon/nger-todo/admin.ts
delete mode 100644 addon/nger-todo/app.ts
delete mode 100644 addon/nger-todo/pc.ts
delete mode 100644 addon/nger-todo/readme.md
delete mode 100644 addon/nger-todo/server.ts
delete mode 100644 addon/nger-todo/template/admin/components/index.ts
delete mode 100644 addon/nger-todo/template/admin/task-edit/index.scss
delete mode 100644 addon/nger-todo/template/admin/task-edit/index.tsx
delete mode 100644 addon/nger-todo/template/admin/task-list/index.controller.ts
delete mode 100644 addon/nger-todo/template/admin/task-list/index.scss
delete mode 100644 addon/nger-todo/template/admin/task-list/index.tsx
create mode 100644 lerna-debug.log
create mode 100644 packages/nger-compiler-client/__tests__/index.ts
delete mode 100644 packages/nger-compiler-client/__tests__/nger-compiler-client.test.js
delete mode 100644 packages/nger-compiler-client/lib/bootstrap.ts
create mode 100644 packages/nger-compiler-client/lib/task.ts
delete mode 100644 packages/nger-compiler-preact/lib/assets.ts
delete mode 100644 packages/nger-compiler-preact/lib/controller.ts
delete mode 100644 packages/nger-compiler-preact/lib/html.ts
delete mode 100644 packages/nger-compiler-preact/lib/style.ts
create mode 100644 packages/nger-compiler-preact/lib/task.ts
create mode 100644 packages/nger-compiler-preact/lib/transformer_factorys/component.ts
delete mode 100644 packages/nger-compiler-preact/lib/typescript.ts
create mode 100644 packages/nger-compiler/lib/bootstrap.ts
create mode 100644 packages/nger-compiler/lib/tokens/watch_task.ts
rename packages/nger-compiler/lib/{ts => transformer_factorys}/controller.ts (54%)
delete mode 100644 packages/nger-compiler/lib/ts/controllerBabel.ts
create mode 100644 packages/nger-ui/lib/components/base/index.ts
create mode 100644 packages/nger-ui/lib/directives/index.ts
create mode 100644 packages/nger-ui/lib/directives/ngIf.ts
diff --git a/addon/nger-addon/readme.md b/addon/nger-addon/readme.md
deleted file mode 100644
index aa9a3ee..0000000
--- a/addon/nger-addon/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-## 模块管理
diff --git a/addon/nger-install/admin.ts b/addon/nger-install/admin.ts
new file mode 100644
index 0000000..c2dcdee
--- /dev/null
+++ b/addon/nger-install/admin.ts
@@ -0,0 +1,23 @@
+import { NgModule } from 'nger-core';
+import pages, { NgerInstallPage } from './template';
+import incs from './inc';
+import { NgerInstallTypeorm } from './typeorm';
+
+@NgModule({
+ declarations: [
+ // 模板
+ ...pages,
+ // 控制器
+ ...incs
+ ],
+ providers: [],
+ bootstrap: [
+ // 默认跳转页面
+ NgerInstallPage
+ ],
+ imports: [
+ // 数据库
+ NgerInstallTypeorm
+ ]
+})
+export class NgerInstallAdminModule { }
diff --git a/addon/nger-install/app.ts b/addon/nger-install/app.ts
new file mode 100644
index 0000000..33a022d
--- /dev/null
+++ b/addon/nger-install/app.ts
@@ -0,0 +1,23 @@
+import { NgModule } from 'nger-core';
+import pages, { NgerInstallPage } from './template';
+import incs from './inc';
+import { NgerInstallTypeorm } from './typeorm';
+
+@NgModule({
+ declarations: [
+ // 模板
+ ...pages,
+ // 控制器
+ ...incs
+ ],
+ providers: [],
+ bootstrap: [
+ // 默认跳转页面
+ NgerInstallPage
+ ],
+ imports: [
+ // 数据库
+ NgerInstallTypeorm
+ ]
+})
+export class NgerInstallAppModule { }
diff --git a/addon/nger-install/inc/index.ts b/addon/nger-install/inc/index.ts
index 3804586..0c6ae15 100644
--- a/addon/nger-install/inc/index.ts
+++ b/addon/nger-install/inc/index.ts
@@ -1,3 +1,5 @@
+import { NgerInstallController } from './install'
-
-export default [];
\ No newline at end of file
+export default [
+ NgerInstallController
+];
diff --git a/addon/nger-install/inc/install.ts b/addon/nger-install/inc/install.ts
new file mode 100644
index 0000000..92f7510
--- /dev/null
+++ b/addon/nger-install/inc/install.ts
@@ -0,0 +1,8 @@
+import { Controller } from 'nger-core'
+import { NgerInstallService } from './services/install'
+@Controller({
+ path: '/'
+})
+export class NgerInstallController {
+ constructor(public service: NgerInstallService){}
+}
\ No newline at end of file
diff --git a/addon/nger-install/inc/services/install.ts b/addon/nger-install/inc/services/install.ts
new file mode 100644
index 0000000..5a5fddd
--- /dev/null
+++ b/addon/nger-install/inc/services/install.ts
@@ -0,0 +1,4 @@
+import { Injectable } from 'nger-core'
+
+@Injectable()
+export class NgerInstallService { }
\ No newline at end of file
diff --git a/addon/nger-install/index.ts b/addon/nger-install/index.ts
index 53dcce0..9a8d117 100644
--- a/addon/nger-install/index.ts
+++ b/addon/nger-install/index.ts
@@ -1,23 +1,4 @@
-import { NgModule } from 'nger-core';
-import pages, { NgerInstallPage } from './template';
-import incs from './inc';
-import { NgerInstallTypeorm } from './typeorm';
-
-@NgModule({
- declarations: [
- // 模板
- ...pages,
- // 控制器
- ...incs
- ],
- providers: [],
- bootstrap: [
- // 默认跳转页面
- NgerInstallPage
- ],
- imports: [
- // 数据库
- NgerInstallTypeorm
- ]
-})
-export class NgerInstallModule { }
+export * from './admin'
+export * from './app'
+export * from './pc'
+export * from './server'
diff --git a/addon/nger-install/package.json b/addon/nger-install/package.json
index 4b74d54..44eb143 100644
--- a/addon/nger-install/package.json
+++ b/addon/nger-install/package.json
@@ -1,3 +1,16 @@
{
- "name": "nger-install"
+ "name": "nger-install",
+ "description": "系统安装",
+ "version": "1.0",
+ "author": {
+ "email": "1037483576@qq.com",
+ "name": "nger"
+ },
+ "nger": {
+ "server": "./server",
+ "admin": "./admin",
+ "app": "./app",
+ "pc": "./pc"
+ },
+ "icon": "./icon.png"
}
\ No newline at end of file
diff --git a/addon/nger-install/pc.ts b/addon/nger-install/pc.ts
new file mode 100644
index 0000000..855bf32
--- /dev/null
+++ b/addon/nger-install/pc.ts
@@ -0,0 +1,23 @@
+import { NgModule } from 'nger-core';
+import pages, { NgerInstallPage } from './template';
+import incs from './inc';
+import { NgerInstallTypeorm } from './typeorm';
+
+@NgModule({
+ declarations: [
+ // 模板
+ ...pages,
+ // 控制器
+ ...incs
+ ],
+ providers: [],
+ bootstrap: [
+ // 默认跳转页面
+ NgerInstallPage
+ ],
+ imports: [
+ // 数据库
+ NgerInstallTypeorm
+ ]
+})
+export class NgerInstallPcModule { }
diff --git a/addon/nger-install/readme.md b/addon/nger-install/readme.md
index 3e13f79..0fcf8b2 100644
--- a/addon/nger-install/readme.md
+++ b/addon/nger-install/readme.md
@@ -3,24 +3,40 @@
## 源码
- [x] `addon`
- [x] `ims-install`
- - [ ] `inc` 控制器,服务端
- - [ ] `template` 模板
- - [ ] `typeorm` 数据库
- - [ ] `index.ts` 模块入口
- - [ ] `package.json` 插件描述
+ - [x] `inc` 控制器,服务端
+ - [x] `template` 模板
+ - [x] `typeorm` 数据库
+ - [x] `index.ts` 导出模块
+ - [x] `server.ts` 服务端
+ - [x] `pc.ts` pc端
+ - [x] `app.ts` app端
+ - [x] `admin` 管理端
+ - [x] `package.json` 模块详情
+ - [x] `name`: 模块名,
+ - [x] `description`: 模块描述
+ - [x] `version`: 模块版本号,
+ - [x] `author` 模块作者
+ - [x] `email`: 作者邮箱,
+ - [x] `name`: 作者名称
+ - [x] nger: 入口信息
+ - [x] `server`: 制定服务端入口,
+ - [x] `admin`: 制定管理端入口,
+ - [x] `app`: 制定移动端入口,
+ - [x] `pc`: 制定pc端入口
+ - [x] icon: 模块图标
## 编译后
- [x] `addon`
- [x] `ims-install`
- - [ ] `pc` pc网站
- - [ ] `admin` 管理
- - [ ] `ttapp` 字节跳动
- - [ ] `aliapp` 支付宝
- - [ ] `weapp` 微信小程序
- - [ ] `wechat` 微信浏览器
- - [ ] `h5` 手机网站
- - [ ] `ios` ios端
- - [ ] `android` 安卓端
- - [ ] `index.js` // 插件,可安装卸载更新
- - [ ] `server.js` // 可独立运行,nger start addon/ims-install/server.js -p 4200
- - [ ] `package.json` // 插件描述
+ - [x] `pc` pc网站
+ - [x] `admin` 管理
+ - [x] `ttapp` 字节跳动
+ - [x] `aliapp` 支付宝
+ - [x] `weapp` 微信小程序
+ - [x] `wechat` 微信浏览器
+ - [x] `h5` 手机网站
+ - [x] `ios` ios端
+ - [x] `android` 安卓端
+ - [x] `index.js` // 插件,可安装卸载更新
+ - [x] `server.js` // 可独立运行,nger start addon/ims-install/server.js -p 4200
+ - [x] `package.json` // 插件描述
diff --git a/addon/nger-install/server.ts b/addon/nger-install/server.ts
new file mode 100644
index 0000000..cfc9691
--- /dev/null
+++ b/addon/nger-install/server.ts
@@ -0,0 +1,23 @@
+import { NgModule } from 'nger-core';
+import pages, { NgerInstallPage } from './template';
+import incs from './inc';
+import { NgerInstallTypeorm } from './typeorm';
+
+@NgModule({
+ declarations: [
+ // 模板
+ ...pages,
+ // 控制器
+ ...incs
+ ],
+ providers: [],
+ bootstrap: [
+ // 默认跳转页面
+ NgerInstallPage
+ ],
+ imports: [
+ // 数据库
+ NgerInstallTypeorm
+ ]
+})
+export class NgerInstallServerModule { }
diff --git a/addon/nger-install/template/install/index.scss b/addon/nger-install/template/install/index.scss
new file mode 100644
index 0000000..d0eafb0
--- /dev/null
+++ b/addon/nger-install/template/install/index.scss
@@ -0,0 +1,3 @@
+h2{
+ font-size: 14px;
+}
\ No newline at end of file
diff --git a/addon/nger-install/template/install/index.tsx b/addon/nger-install/template/install/index.tsx
index 10758a0..71bff38 100644
--- a/addon/nger-install/template/install/index.tsx
+++ b/addon/nger-install/template/install/index.tsx
@@ -3,13 +3,16 @@ import { Page } from 'nger-core';
@Page({
path: '/install',
title: 'nger系统安装',
+ styleUrls: [
+ "./index.scss"
+ ],
type: ['pc']
})
export class NgerInstallPage {
-
+ title: string;
render() {
return
-
欢迎使用Nger平台
+
{this.title || '欢迎使用Nger平台'}
管理员
diff --git a/addon/nger-install/template/minstall/index.tsx b/addon/nger-install/template/minstall/index.tsx
new file mode 100644
index 0000000..c68b65b
--- /dev/null
+++ b/addon/nger-install/template/minstall/index.tsx
@@ -0,0 +1,22 @@
+import { Page } from 'nger-core';
+import { View, Swiper, SwiperItem } from 'nger-ui';
+
+@Page({
+ path: '/app/install',
+ title: 'nger系统安装',
+ type: ['app']
+})
+export class NgerInstallPage {
+ title: string;
+ show: boolean;
+ items: { title: string }[] = [];
+ render() {
+ return
+
+ {this.items.map(itme => {itme.title})}
+
+
+ }
+}
diff --git a/addon/nger-starter/readme.md b/addon/nger-starter/readme.md
deleted file mode 100644
index 3851adf..0000000
--- a/addon/nger-starter/readme.md
+++ /dev/null
@@ -1,2 +0,0 @@
-## starter 开始项目,种子项目
-
diff --git a/addon/nger-todo/admin.ts b/addon/nger-todo/admin.ts
deleted file mode 100644
index e69de29..0000000
diff --git a/addon/nger-todo/app.ts b/addon/nger-todo/app.ts
deleted file mode 100644
index e69de29..0000000
diff --git a/addon/nger-todo/pc.ts b/addon/nger-todo/pc.ts
deleted file mode 100644
index e69de29..0000000
diff --git a/addon/nger-todo/readme.md b/addon/nger-todo/readme.md
deleted file mode 100644
index 436c7e9..0000000
--- a/addon/nger-todo/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-## nger-todo
diff --git a/addon/nger-todo/server.ts b/addon/nger-todo/server.ts
deleted file mode 100644
index e69de29..0000000
diff --git a/addon/nger-todo/template/admin/components/index.ts b/addon/nger-todo/template/admin/components/index.ts
deleted file mode 100644
index ed0a5af..0000000
--- a/addon/nger-todo/template/admin/components/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { Component } from 'nger-core'
-
-@Component({})
-export class NgerToDoTabs { }
\ No newline at end of file
diff --git a/addon/nger-todo/template/admin/task-edit/index.scss b/addon/nger-todo/template/admin/task-edit/index.scss
deleted file mode 100644
index 1cb2f20..0000000
--- a/addon/nger-todo/template/admin/task-edit/index.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-.task-edit{
- display: block;
-}
\ No newline at end of file
diff --git a/addon/nger-todo/template/admin/task-edit/index.tsx b/addon/nger-todo/template/admin/task-edit/index.tsx
deleted file mode 100644
index f91796d..0000000
--- a/addon/nger-todo/template/admin/task-edit/index.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import { Page } from 'nger-core';
-
-@Page({
- path: 'task/edit',
- type: ['admin'],
- title: '编辑',
- styleUrls: ['./index.scss']
-})
-export class NgerTodoTaskEditPage {
- constructor() { }
- render() {
- return
- }
-}
diff --git a/addon/nger-todo/template/admin/task-list/index.controller.ts b/addon/nger-todo/template/admin/task-list/index.controller.ts
deleted file mode 100644
index e325987..0000000
--- a/addon/nger-todo/template/admin/task-list/index.controller.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { Controller, EventEmitter } from 'nger-core';
-import { Observable } from 'rxjs'
-@Controller()
-export class NgerTodoAdminHome {
- onEditor: EventEmitter
;
- getTasks(): Observable<{ count: number, data: T[] }> {
- return Observable.create(() => { })
- }
-}
\ No newline at end of file
diff --git a/addon/nger-todo/template/admin/task-list/index.scss b/addon/nger-todo/template/admin/task-list/index.scss
deleted file mode 100644
index c9a2a89..0000000
--- a/addon/nger-todo/template/admin/task-list/index.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-.task-list{
- display: block;
-}
\ No newline at end of file
diff --git a/addon/nger-todo/template/admin/task-list/index.tsx b/addon/nger-todo/template/admin/task-list/index.tsx
deleted file mode 100644
index 7b4af09..0000000
--- a/addon/nger-todo/template/admin/task-list/index.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import { Page } from 'nger-core';
-import { NgerTodoAdminHome } from './index.controller'
-@Page({
- path: 'task/list',
- type: ['admin'],
- title: '任务',
- styleUrls: ['./index.scss']
-})
-export class NgerTodoTaskListPage {
- constructor(public controller: NgerTodoAdminHome) { }
- render() {}
-}
diff --git a/lerna-debug.log b/lerna-debug.log
new file mode 100644
index 0000000..aaa384b
--- /dev/null
+++ b/lerna-debug.log
@@ -0,0 +1,19 @@
+0 silly argv { _: [ 'create' ],
+0 silly argv lernaVersion: '3.13.1',
+0 silly argv '$0': 'lerna',
+0 silly argv name: 'nger-compiler-client' }
+1 notice cli v3.13.1
+2 verbose rootPath /Volumes/imeepos/nger
+3 error Error: canceled
+3 error at Interface. (/usr/local/lib/node_modules/lerna/node_modules/read/lib/read.js:66:13)
+3 error at Interface.emit (events.js:189:13)
+3 error at Interface._ttyWrite (readline.js:783:16)
+3 error at ReadStream.onkeypress (readline.js:168:10)
+3 error at ReadStream.emit (events.js:189:13)
+3 error at emitKeys (internal/readline.js:424:14)
+3 error at emitKeys.next ()
+3 error at ReadStream.onData (readline.js:1022:36)
+3 error at ReadStream.emit (events.js:189:13)
+3 error at addChunk (_stream_readable.js:284:12)
+3 error at readableAddChunk (_stream_readable.js:265:11)
+3 error at ReadStream.Readable.push (_stream_readable.js:220:10)
diff --git a/packages/nger-compiler-client/README.md b/packages/nger-compiler-client/README.md
index 3f09129..d6fd714 100644
--- a/packages/nger-compiler-client/README.md
+++ b/packages/nger-compiler-client/README.md
@@ -1,3 +1,11 @@
# `nger-compiler-client`
-> 客户端编译
\ No newline at end of file
+> TODO: description
+
+## Usage
+
+```
+const ngerCompilerClient = require('nger-compiler-client');
+
+// TODO: DEMONSTRATE API
+```
diff --git a/packages/nger-compiler-client/__tests__/index.ts b/packages/nger-compiler-client/__tests__/index.ts
new file mode 100644
index 0000000..7f5d6ef
--- /dev/null
+++ b/packages/nger-compiler-client/__tests__/index.ts
@@ -0,0 +1,7 @@
+import { createPlatformFactory, NgModule } from 'nger-core'
+import ngerPlatformNode from 'nger-platform-node'
+import providers from '../lib'
+@NgModule()
+export class NgerCompilerTestModule { }
+createPlatformFactory(ngerPlatformNode, 'test', providers)([]).bootstrapModule(NgerCompilerTestModule)
+
diff --git a/packages/nger-compiler-client/__tests__/nger-compiler-client.test.js b/packages/nger-compiler-client/__tests__/nger-compiler-client.test.js
deleted file mode 100644
index f90ea0b..0000000
--- a/packages/nger-compiler-client/__tests__/nger-compiler-client.test.js
+++ /dev/null
@@ -1,7 +0,0 @@
-'use strict';
-
-const ngerCompilerClient = require('..');
-
-describe('nger-compiler-client', () => {
- it('needs tests');
-});
diff --git a/packages/nger-compiler-client/lib/bootstrap.ts b/packages/nger-compiler-client/lib/bootstrap.ts
deleted file mode 100644
index 117ffb8..0000000
--- a/packages/nger-compiler-client/lib/bootstrap.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import { NgModuleBootstrap, NgModuleRef, FileSystem, Logger } from 'nger-core';
-import chokidar from 'chokidar';
-import { join, relative, extname } from 'path'
-import { Stats } from 'fs-extra'
-import { NgerCompilerNgMetadata, NgerCompilerBabel, NgerCompilerBabelController } from 'nger-compiler'
-const root = process.cwd();
-import { NgerUtil } from 'nger-util'
-export class NgerCompilerClientBootstrap extends NgModuleBootstrap {
- constructor(
- public metadata: NgerCompilerNgMetadata,
- public fs: FileSystem,
- public util: NgerUtil,
- public babel: NgerCompilerBabel,
- public logger: Logger,
- public controller: NgerCompilerBabelController
- ) {
- super();
- }
- async run(ref: NgModuleRef) {
- await this.watchTsx();
- }
- async watchTsx() {
- // 监听ts文件变更并生成metadata.json文件
- const addon = join(root, 'addon');
- await this.util.rimraf(join(root, '.temp'));
- chokidar.watch([`${addon}/**/*.(ts|tsx)`])
- .on('add', (file, stats) => this.handlerTsxFile('add', file, stats))
- .on('change', (file, stats) => this.handlerTsxFile('change', file, stats))
- .on('error', () => { });
- }
- metadataCache: Map = new Map();
- ngModuleMetadataCache: Map = new Map();
- handlerTsxFile(opt: 'add' | 'change', file: string, stats: Stats) {
- const metadata = this.metadata.getMetadata(file);
- const relativePath = relative(root, file)
- const ext = extname(relativePath);
- const noExtPath = relativePath.replace(ext, '')
- const metadataPath = join(root, '.temp', `${noExtPath}.metadata.json`);
- this.fs.writeFileSync(metadataPath, JSON.stringify(metadata, null, 2))
- this.metadataCache.set(file, metadataPath)
- // 解析Controller成浏览器端接口
- if (metadata) {
- const config = this.metadata.getControllerConfig(metadata);
- if (config) {
- // 是controller
- const code = this.controller.compile(file);
- const controllerPath = join(root, '.temp', `${noExtPath}.js`);
- this.fs.writeFileSync(controllerPath, code)
- }
- } else {
- const code = this.babel.compile(file);
- const controllerPath = join(root, '.temp', `${noExtPath}.js`);
- this.fs.writeFileSync(controllerPath, code)
- }
- }
-}
\ No newline at end of file
diff --git a/packages/nger-compiler-client/lib/index.ts b/packages/nger-compiler-client/lib/index.ts
index ecdc5e8..9390787 100644
--- a/packages/nger-compiler-client/lib/index.ts
+++ b/packages/nger-compiler-client/lib/index.ts
@@ -1,16 +1,13 @@
-import { NgModuleBootstrap, FileSystem, Logger } from 'nger-core'
-import compilerProviders, { NgerCompilerNgMetadata, NgerCompilerBabel, NgerCompilerBabelController } from 'nger-compiler'
-import { NgerCompilerClientBootstrap } from './bootstrap'
-import { NgerUtil } from 'nger-util'
+import compilerProviders from 'nger-compiler'
+import { clientTask } from './task';
+import {
+ WATCH_TASK
+} from 'nger-compiler'
export default [
...compilerProviders,
{
- provide: NgModuleBootstrap,
- useClass: NgerCompilerClientBootstrap,
- multi: true,
- deps: [
- NgerCompilerNgMetadata, FileSystem, NgerUtil,
- NgerCompilerBabel, Logger, NgerCompilerBabelController
- ]
- },
+ provide: WATCH_TASK,
+ useValue: clientTask,
+ multi: true
+ }
]
\ No newline at end of file
diff --git a/packages/nger-compiler-client/lib/task.ts b/packages/nger-compiler-client/lib/task.ts
new file mode 100644
index 0000000..2cd2e9f
--- /dev/null
+++ b/packages/nger-compiler-client/lib/task.ts
@@ -0,0 +1,40 @@
+import {
+ Task,
+ controllerPropertyTransformerFactory,
+ NgerCompilerBabel,
+ NgerCompilerNgMetadata,
+ hasHandlerFileCache
+} from 'nger-compiler'
+import { Injector } from 'nger-di'
+import { relative, extname, join } from 'path';
+const root = process.cwd();
+import { FileSystem } from 'nger-core'
+export const clientTask: Task = (file: string, opt: string, injector: Injector) => {
+ if (file.endsWith('.ts')) {
+ const fs = injector.get(FileSystem)
+ const babel = injector.get(NgerCompilerBabel)
+ const ngMetadata = injector.get(NgerCompilerNgMetadata)
+ const metadata = ngMetadata.getMetadata(file);
+ const relativePath = relative(root, file)
+ const ext = extname(relativePath);
+ const noExtPath = relativePath.replace(ext, '')
+ // 解析Controller成浏览器端接口
+ if (metadata) {
+ const controller = ngMetadata.getControllerConfig(metadata);
+ // 服务端
+ if (controller) {
+ // 是controller
+ const code = babel.compile(file, {
+ transformers: {
+ before: [
+ controllerPropertyTransformerFactory
+ ]
+ }
+ });
+ const controllerPath = join(root, '.temp', `${noExtPath}.js`);
+ fs.writeFileSync(controllerPath, code)
+ hasHandlerFileCache.add(file)
+ }
+ }
+ }
+}
diff --git a/packages/nger-compiler-native/lib/preact.ts b/packages/nger-compiler-native/lib/preact.ts
index 47b8639..fadc337 100644
--- a/packages/nger-compiler-native/lib/preact.ts
+++ b/packages/nger-compiler-native/lib/preact.ts
@@ -1,4 +1,4 @@
-import { NgModuleBootstrap, NgModuleRef, PLATFORM_ID, NgerConfig } from 'nger-core';
+import { NgModuleBootstrap, NgModuleRef, NgerConfig } from 'nger-core';
// 将ng模板编译成preact可以执行的文件
import { NgerCompilerPreactHtml } from './html'
import { NgerCompilerPreactStyle } from './style'
@@ -9,7 +9,6 @@ import { NgerComponentConfig, NgerControllerConfig } from './types'
import { NgerCompilerPreactController } from './controller'
import { join } from 'path';
-import { watcher } from 'nger-watcher';
const root = process.cwd();
// 提供统一的外观
export class NgerCompilerPreact extends NgModuleBootstrap {
@@ -26,32 +25,32 @@ export class NgerCompilerPreact extends NgModuleBootstrap {
}
async run(ref: NgModuleRef) {
// 拿到ngModule的文件名
- const dir = join(root, 'src');
- watcher(dir, async (opt, fileName) => {
- if (fileName && (opt === 'add' || opt === 'change')) {
- // 拿到ngModuleMetadata
- const metadata = this.metadata.getMetadata(fileName);
- if (metadata) {
- // 处理component
- const component: NgerComponentConfig = this.metadata.getComponentConfig(metadata)
- if (component) {
- component.sourceRoot = fileName;
- await Promise.all([
- this.html.run(component),
- this.style.run(component),
- this.assets.run(component),
- this.ts.run(component),
- ]);
- }
- // 处理Controller
- const controller: NgerControllerConfig = this.metadata.getControllerConfig(metadata);
- if (controller) {
- // console.log(controller);
- controller.sourceRoot = fileName;
- this.controller.run(controller)
- }
- }
- }
- })
+ // const dir = join(root, 'src');
+ // watcher(dir, async (opt, fileName) => {
+ // if (fileName && (opt === 'add' || opt === 'change')) {
+ // // 拿到ngModuleMetadata
+ // const metadata = this.metadata.getMetadata(fileName);
+ // if (metadata) {
+ // // 处理component
+ // const component: NgerComponentConfig = this.metadata.getComponentConfig(metadata)
+ // if (component) {
+ // component.sourceRoot = fileName;
+ // await Promise.all([
+ // this.html.run(component),
+ // this.style.run(component),
+ // this.assets.run(component),
+ // this.ts.run(component),
+ // ]);
+ // }
+ // // 处理Controller
+ // const controller: NgerControllerConfig = this.metadata.getControllerConfig(metadata);
+ // if (controller) {
+ // // console.log(controller);
+ // controller.sourceRoot = fileName;
+ // this.controller.run(controller)
+ // }
+ // }
+ // }
+ // })
}
}
diff --git a/packages/nger-compiler-preact/__tests__/index.ts b/packages/nger-compiler-preact/__tests__/index.ts
index e69de29..7f5d6ef 100644
--- a/packages/nger-compiler-preact/__tests__/index.ts
+++ b/packages/nger-compiler-preact/__tests__/index.ts
@@ -0,0 +1,7 @@
+import { createPlatformFactory, NgModule } from 'nger-core'
+import ngerPlatformNode from 'nger-platform-node'
+import providers from '../lib'
+@NgModule()
+export class NgerCompilerTestModule { }
+createPlatformFactory(ngerPlatformNode, 'test', providers)([]).bootstrapModule(NgerCompilerTestModule)
+
diff --git a/packages/nger-compiler-preact/lib/assets.ts b/packages/nger-compiler-preact/lib/assets.ts
deleted file mode 100644
index f2c7bec..0000000
--- a/packages/nger-compiler-preact/lib/assets.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-// 将ng模板编译成preact可以执行的文件
-import { NgerComponentConfig } from './types'
-import { NgerCompilerImage } from 'nger-compiler'
-export class NgerCompilerPreactAssets {
- constructor(public image: NgerCompilerImage) { }
- async run(config: NgerComponentConfig) {
-
- }
-}
diff --git a/packages/nger-compiler-preact/lib/controller.ts b/packages/nger-compiler-preact/lib/controller.ts
deleted file mode 100644
index 3e37d96..0000000
--- a/packages/nger-compiler-preact/lib/controller.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-// 将ng模板编译成preact可以执行的文件
-import { NgerControllerConfig } from './types'
-export class NgerCompilerPreactController {
- async run(config: NgerControllerConfig) {
- // 服务端转客户端
- const sourceRoot = config.sourceRoot;
-
- console.log(config)
- }
-}
diff --git a/packages/nger-compiler-preact/lib/html.ts b/packages/nger-compiler-preact/lib/html.ts
deleted file mode 100644
index 4b767cb..0000000
--- a/packages/nger-compiler-preact/lib/html.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-// 将ng模板编译成preact可以执行的文件
-import { NgerComponentConfig } from './types'
-import { Injector } from 'nger-di';
-
-// 需要将模板转换成preact
-export class NgerCompilerPreactHtml {
- constructor(public injector: Injector) { }
- async run(config: NgerComponentConfig) {
-
- }
-}
diff --git a/packages/nger-compiler-preact/lib/index.ts b/packages/nger-compiler-preact/lib/index.ts
index 0a6bd5f..e2d62df 100644
--- a/packages/nger-compiler-preact/lib/index.ts
+++ b/packages/nger-compiler-preact/lib/index.ts
@@ -1,47 +1,25 @@
import { NgerCompilerPreact } from './preact'
-import { NgerCompilerPreactHtml } from './html'
-import { NgerCompilerPreactStyle } from './style'
-import { NgerCompilerPreactTypescript } from './typescript'
-import { NgerCompilerPreactAssets } from './assets'
-import { NgerCompilerPreactController } from './controller'
-
-import { StaticProvider, Injector } from 'nger-di';
-import { NgerCompilerNgMetadata } from 'nger-compiler'
+import { StaticProvider } from 'nger-di';
+import { NgerCompilerNgMetadata, WATCH_TASK } from 'nger-compiler'
import { NgModuleBootstrap, NgerConfig, Logger } from 'nger-core'
-import ngerCompiler, { NgerPlatformStyle } from 'nger-compiler'
-const provider: StaticProvider[] = [...ngerCompiler, {
- provide: NgModuleBootstrap,
- useClass: NgerCompilerPreact,
- deps: [
- NgerCompilerPreactHtml,
- NgerCompilerPreactStyle,
- NgerCompilerPreactAssets,
- NgerCompilerPreactTypescript,
- NgerCompilerNgMetadata,
- NgerCompilerPreactController,
- NgerConfig,
- Logger
- ],
- multi: true
-}, {
- provide: NgerCompilerPreactController,
- useClass: NgerCompilerPreactController,
- deps: []
-}, {
- provide: NgerCompilerPreactHtml,
- useClass: NgerCompilerPreactHtml,
- deps: [Injector]
-}, {
- provide: NgerCompilerPreactStyle,
- useClass: NgerCompilerPreactStyle,
- deps: [NgerPlatformStyle]
-}, {
- provide: NgerCompilerPreactTypescript,
- useClass: NgerCompilerPreactTypescript,
- deps: []
-}, {
- provide: NgerCompilerPreactAssets,
- useClass: NgerCompilerPreactAssets,
- deps: []
-}];
+import ngerCompilerClient from 'nger-compiler-client'
+import { preactTask } from './task'
+const provider: StaticProvider[] = [
+ ...ngerCompilerClient,
+ {
+ provide: WATCH_TASK,
+ useValue: preactTask,
+ multi: true
+ },
+ {
+ provide: NgModuleBootstrap,
+ useClass: NgerCompilerPreact,
+ deps: [
+ NgerCompilerNgMetadata,
+ NgerConfig,
+ Logger
+ ],
+ multi: true
+ }
+];
export default provider;
diff --git a/packages/nger-compiler-preact/lib/preact.ts b/packages/nger-compiler-preact/lib/preact.ts
index e71aaa2..324f062 100644
--- a/packages/nger-compiler-preact/lib/preact.ts
+++ b/packages/nger-compiler-preact/lib/preact.ts
@@ -1,70 +1,17 @@
-import { NgModuleBootstrap, NgModuleRef, Logger, PLATFORM_ID, NgerConfig } from 'nger-core';
+import { NgModuleBootstrap, NgModuleRef, Logger, NgerConfig } from 'nger-core';
// 将ng模板编译成preact可以执行的文件
-import { NgerCompilerPreactHtml } from './html'
-import { NgerCompilerPreactStyle } from './style'
-import { NgerCompilerPreactAssets } from './assets'
-import { NgerCompilerPreactTypescript } from './typescript'
import { NgerCompilerNgMetadata } from 'nger-compiler'
-import { NgerComponentConfig, NgerControllerConfig } from './types'
-import { NgerCompilerPreactController } from './controller'
-import chokidar from 'chokidar';
-import { Stats } from 'fs-extra'
-import { join } from 'path';
-const root = process.cwd();
// 提供统一的外观
export class NgerCompilerPreact extends NgModuleBootstrap {
constructor(
- public html: NgerCompilerPreactHtml,
- public style: NgerCompilerPreactStyle,
- public assets: NgerCompilerPreactAssets,
- public ts: NgerCompilerPreactTypescript,
public metadata: NgerCompilerNgMetadata,
- public controller: NgerCompilerPreactController,
public config: NgerConfig,
public logger: Logger
) {
super();
}
// 这里需要记录一下
- cache: Map = new Map();
+ cache: Map = new Map();
// 任务是去除无用代码
- async run(ref: NgModuleRef) {
- try {
- // 拿到ngModule的文件名
- const framework = join(root, 'framework');
- const addon = join(root, 'addon');
- const handlerFile = async (opt: string, fileName: string, stats: Stats) => {
- this.logger.info(`${opt}: ${fileName} @${stats && stats.atime}`)
- const isFile = stats && stats.isFile()
- if (fileName && !!isFile && (opt === 'add' || opt === 'change')) {
- // 拿到ngModuleMetadata
- const metadata = this.metadata.getMetadata(fileName);
- if (metadata) {
- // 不用处理component
- // const component: NgerComponentConfig = this.metadata.getComponentConfig(metadata)
- // if (component) {
- // component.sourceRoot = fileName;
- // await Promise.all([
- // this.html.run(component),
- // this.style.run(component),
- // this.assets.run(component),
- // this.ts.run(component),
- // ]);
- // }
- // 处理Controller
- const controller: NgerControllerConfig = this.metadata.getControllerConfig(metadata);
- if (controller) {
- // console.log(controller);
- controller.sourceRoot = fileName;
- this.controller.run(controller)
- }
- }
- }
- }
- chokidar.watch([addon, framework])
- .on('add', (file, stats) => handlerFile('add', file, stats))
- .on('change', (file, stats) => handlerFile('change', file, stats))
- .on('error', () => { });
- } catch (e) { }
- }
+ async run(ref: NgModuleRef) { }
}
diff --git a/packages/nger-compiler-preact/lib/style.ts b/packages/nger-compiler-preact/lib/style.ts
deleted file mode 100644
index fa962e1..0000000
--- a/packages/nger-compiler-preact/lib/style.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-// 将ng模板编译成preact可以执行的文件
-import { NgerComponentConfig } from './types'
-import { NgerPlatformStyle } from 'nger-compiler'
-import { join, dirname, extname } from 'path'
-import fs from 'fs-extra'
-
-export class NgerCompilerPreactStyle {
- constructor(public style: NgerPlatformStyle) { }
- async run(config: NgerComponentConfig) {
- try {
- let styleStr = ``;
- let { styleUrls, styles, sourceRoot } = config;
- let type: any = 'scss'
- if (styleUrls) {
- styleUrls.map(res => {
- styleStr += fs.readFileSync(join(dirname(sourceRoot), res)).toString('utf8')
- type = extname(res).replace('.', '')
- })
- }
- if (styles) {
- styles.map(res => styleStr += res)
- }
- if (styleStr.length > 0) {
- const code = await this.style.compile(styleStr, type);
- const root = dirname(sourceRoot);
- fs.ensureDirSync(`${root}/h5`)
- fs.writeFileSync(`${root}/h5/index.css`, code)
- }
- } catch (e) { }
- }
-}
diff --git a/packages/nger-compiler-preact/lib/task.ts b/packages/nger-compiler-preact/lib/task.ts
new file mode 100644
index 0000000..c29065a
--- /dev/null
+++ b/packages/nger-compiler-preact/lib/task.ts
@@ -0,0 +1,46 @@
+import {
+ Task,
+ NgerCompilerBabel,
+ NgerCompilerNgMetadata,
+ metadataCache,
+ hasHandlerFileCache
+} from 'nger-compiler'
+import { Injector } from 'nger-di'
+import { relative, extname, join } from 'path';
+const root = process.cwd();
+import { FileSystem } from 'nger-core'
+import { componentTransformerFactory } from './transformer_factorys/component'
+export const preactTask: Task = async (file: string, opt: string, injector: Injector) => {
+ if (file.endsWith('.ts') || file.endsWith('.tsx')) {
+ const metadata = metadataCache.get(file);
+ const fs = injector.get(FileSystem)
+ const babel = injector.get(NgerCompilerBabel)
+ const ngMetadata = injector.get(NgerCompilerNgMetadata)
+ const relativePath = relative(root, file)
+ const ext = extname(relativePath);
+ const noExtPath = relativePath.replace(ext, '')
+ if (metadata) {
+ if (metadata) {
+ const component = ngMetadata.getComponentConfig(metadata);
+ if (component) {
+ const code = babel.compile(file, {
+ transformers: {
+ before: [
+ await componentTransformerFactory(file, injector)
+ ]
+ }
+ });
+ const controllerPath = join(root, '.temp', `${noExtPath}.js`);
+ fs.writeFileSync(controllerPath, code)
+ hasHandlerFileCache.add(file)
+ }
+ }
+ }
+ if (hasHandlerFileCache.has(file)) {} else {
+ const code = babel.compile(file, {});
+ const controllerPath = join(root, '.temp', `${noExtPath}.js`);
+ fs.writeFileSync(controllerPath, code)
+ hasHandlerFileCache.add(file)
+ }
+ }
+}
diff --git a/packages/nger-compiler-preact/lib/transformer_factorys/component.ts b/packages/nger-compiler-preact/lib/transformer_factorys/component.ts
new file mode 100644
index 0000000..cf67ecb
--- /dev/null
+++ b/packages/nger-compiler-preact/lib/transformer_factorys/component.ts
@@ -0,0 +1,62 @@
+import ts, { TransformationContext, Transformer } from 'typescript';
+import { metadataCache, NgerCompilerNgMetadata, NgerPlatformStyle } from 'nger-compiler';
+import { Injector } from 'nger-di';
+import { FileSystem } from 'nger-core';
+import { extname, relative, join, dirname } from 'path';
+const root = process.cwd();
+export const componentTransformerFactory = async (file: string, injector: Injector) => {
+ const relativePath = relative(root, file)
+ const ext = extname(relativePath);
+ const noExtPath = relativePath.replace(ext, '')
+ const metadata = metadataCache.get(file)
+ const fs = injector.get(FileSystem);
+ const ng = injector.get(NgerCompilerNgMetadata);
+ const style = injector.get(NgerPlatformStyle);
+ let styleFile: string = ``;
+ if (metadata) {
+ const component = ng.getComponentConfig(metadata);
+ let { styles, styleUrls } = component;
+ styles = styles || ``;
+ let type: 'less' | 'sass' | 'scss' | 'stylus' | 'css' = 'css'
+ if (styleUrls && styleUrls.length > 0) {
+ styleUrls.map(url => {
+ type = extname(url).replace('.', '') as any;
+ const path = join(dirname(file), url);
+ styles += fs.readFileSync(path).toString('utf8')
+ })
+ }
+ if (styles.length > 0) {
+ const code = await style.compile(styles, type);
+ styleFile = join(root, '.temp', `${noExtPath}.css`);
+ fs.writeFileSync(styleFile, code);
+ styleFile = relative(dirname(styleFile), styleFile);
+ // 生成d.ts
+ }
+ }
+ return (context: TransformationContext): Transformer => {
+ return (node: ts.SourceFile): ts.SourceFile => {
+ if (styleFile) {
+ const styleUrl = styleFile;
+ const importStyle = ts.createImportDeclaration(
+ undefined,
+ undefined,
+ undefined,
+ ts.createStringLiteral(styleUrl)
+ );
+ node = ts.updateSourceFileNode(
+ node,
+ [
+ importStyle,
+ ...node.statements
+ ],
+ node.isDeclarationFile,
+ node.referencedFiles,
+ node.typeReferenceDirectives,
+ node.hasNoDefaultLib,
+ node.libReferenceDirectives
+ );
+ }
+ return node;
+ }
+ }
+}
diff --git a/packages/nger-compiler-preact/lib/typescript.ts b/packages/nger-compiler-preact/lib/typescript.ts
deleted file mode 100644
index ea60990..0000000
--- a/packages/nger-compiler-preact/lib/typescript.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-// 将ng模板编译成preact可以执行的文件
-import { NgerComponentConfig } from './types'
-
-export class NgerCompilerPreactTypescript {
- async run(config: NgerComponentConfig) {
-
- }
-}
diff --git a/packages/nger-compiler-weapp/__tests__/index.ts b/packages/nger-compiler-weapp/__tests__/index.ts
index e69de29..7f5d6ef 100644
--- a/packages/nger-compiler-weapp/__tests__/index.ts
+++ b/packages/nger-compiler-weapp/__tests__/index.ts
@@ -0,0 +1,7 @@
+import { createPlatformFactory, NgModule } from 'nger-core'
+import ngerPlatformNode from 'nger-platform-node'
+import providers from '../lib'
+@NgModule()
+export class NgerCompilerTestModule { }
+createPlatformFactory(ngerPlatformNode, 'test', providers)([]).bootstrapModule(NgerCompilerTestModule)
+
diff --git a/packages/nger-compiler-weapp/lib/weapp.ts b/packages/nger-compiler-weapp/lib/weapp.ts
index 1c0e9c3..f19afaf 100644
--- a/packages/nger-compiler-weapp/lib/weapp.ts
+++ b/packages/nger-compiler-weapp/lib/weapp.ts
@@ -21,20 +21,20 @@ export class NgerCompilerWeapp extends NgModuleBootstrap {
}
async run(ref: NgModuleRef) {
// 拿到ngModule的文件名
- const platform = ref.injector.get(PLATFORM_ID);
- const fileName = this.config[platform];
- console.log(`NgerCompilerPreact ${platform} ${fileName}`)
- if (fileName) {
- // 拿到ngModuleMetadata
- const metadata = this.metadata.getMetadata(fileName);
- const config: NgModuleConfig = this.metadata.getNgModuleConfig(metadata as any);
- // 拿到ngModule的配置值
- return Promise.all([
- this.html.run(config),
- this.style.run(config),
- this.assets.run(config),
- this.ts.run(config),
- ]);
- }
+ // const platform = ref.injector.get(PLATFORM_ID);
+ // const fileName = this.config[platform];
+ // console.log(`NgerCompilerPreact ${platform} ${fileName}`)
+ // if (fileName) {
+ // // 拿到ngModuleMetadata
+ // const metadata = this.metadata.getMetadata(fileName);
+ // const config: NgModuleConfig = this.metadata.getNgModuleConfig(metadata as any);
+ // // 拿到ngModule的配置值
+ // return Promise.all([
+ // this.html.run(config),
+ // this.style.run(config),
+ // this.assets.run(config),
+ // this.ts.run(config),
+ // ]);
+ // }
}
}
diff --git a/packages/nger-compiler/lib/bootstrap.ts b/packages/nger-compiler/lib/bootstrap.ts
new file mode 100644
index 0000000..ae61b7e
--- /dev/null
+++ b/packages/nger-compiler/lib/bootstrap.ts
@@ -0,0 +1,63 @@
+import { NgModuleBootstrap, NgModuleRef, FileSystem } from 'nger-core';
+import chokidar from 'chokidar';
+import { join } from 'path'
+const root = process.cwd();
+import { Injector } from 'nger-di'
+import { NgerUtil } from 'nger-util'
+import { WATCH_TASK } from './tokens/watch_task'
+import { NgerCompilerNgMetadata } from './helper/ng_metadata'
+import { relative, extname } from 'path';
+import { ModuleMetadata } from '@angular/compiler-cli'
+export let metadataCache: Map = new Map();
+export let hasHandlerFileCache: Set = new Set();
+export class NgerCompilerBootstrap extends NgModuleBootstrap {
+ constructor(
+ public util: NgerUtil,
+ ) {
+ super();
+ }
+ async run(ref: NgModuleRef) {
+ await this.watchTsx(ref.injector);
+ }
+ async watchTsx(injector: Injector) {
+ // 监听ts文件变更并生成metadata.json文件
+ const addon = join(root, 'addon');
+ await this.util.rimraf(join(root, '.temp'));
+ chokidar.watch([addon])
+ .on('add', (path) => {
+ this.runTask(injector, path, 'unlinkDir')
+ })
+ .on('addDir', (path) => {
+ this.runTask(injector, path, 'unlinkDir')
+ })
+ .on('change', (path) => {
+ this.runTask(injector, path, 'change')
+ })
+ .on('unlink', (path) => {
+ this.runTask(injector, path, 'unlink')
+ })
+ .on('unlinkDir', (path) => {
+ })
+ .on('error', () => { });
+ }
+
+ runTask(injector: Injector, path: string, opt: string) {
+ const fs = injector.get(FileSystem)
+ const stats = fs.statSync(path)
+ const isTsFile = path.endsWith('.ts') || path.endsWith('.tsx')
+ if (stats.isFile() && isTsFile && stats.size > 0) {
+ const ngMetadata = injector.get(NgerCompilerNgMetadata)
+ const metadata = ngMetadata.getMetadata(path);
+ const relativePath = relative(root, path)
+ const ext = extname(relativePath);
+ const noExtPath = relativePath.replace(ext, '')
+ const metadataPath = join(root, '.temp', `${noExtPath}.metadata.json`);
+ if (metadata) {
+ fs.writeFileSync(metadataPath, JSON.stringify(metadata, null, 2))
+ metadataCache.set(path, metadata);
+ }
+ }
+ const tasks = injector.get(WATCH_TASK);
+ tasks.map(task => task(path, opt, injector));
+ }
+}
\ No newline at end of file
diff --git a/packages/nger-compiler/lib/helper/ng_metadata.ts b/packages/nger-compiler/lib/helper/ng_metadata.ts
index 1831a3d..09a5a8c 100644
--- a/packages/nger-compiler/lib/helper/ng_metadata.ts
+++ b/packages/nger-compiler/lib/helper/ng_metadata.ts
@@ -57,13 +57,13 @@ export class NgerCompilerNgMetadata {
getComponentConfig(data: cli.ModuleMetadata) {
const { metadata } = data;
- let result: any = {};
+ let result: any;
Object.keys(metadata).map(key => {
const meta = metadata[key];
if (cli.isClassMetadata(meta)) {
const decorator = this.findDecorator(meta.decorators || [], (meta: cli.MetadataValue) => {
if (cli.isMetadataImportedSymbolReferenceExpression(meta)) {
- return meta.module === 'nger-core' && meta.name === 'Component'
+ return meta.module === 'nger-core' && (meta.name === 'Component' || meta.name === 'Page')
}
}) as cli.MetadataSymbolicCallExpression;
const args = decorator && decorator.arguments;
diff --git a/packages/nger-compiler/lib/index.ts b/packages/nger-compiler/lib/index.ts
index 8da0a87..862fdc3 100644
--- a/packages/nger-compiler/lib/index.ts
+++ b/packages/nger-compiler/lib/index.ts
@@ -3,14 +3,18 @@ import { StaticProvider } from 'nger-di'
import { NgerCompilerImage } from './assets/image'
import { NgerCompilerUglify } from './ts/uglify'
import { NgerCompilerBabel } from './ts/babel'
-import { TraverVisitor, Resolver, FileSystem, Logger } from 'nger-core'
+import { TraverVisitor, Resolver } from 'nger-core'
import { NgerCompilerTypescript } from './ts/typescript'
-import { NgerCompilerController } from './ts/controller'
import { NgerCompilerRollup } from './ts/rollup'
import { NgerCompilerNgTemplate } from './html/ng'
import { NgerCompilerCid } from './helper/cid'
import { NgerCompilerNgMetadata } from './helper/ng_metadata'
-import { NgerCompilerBabelController } from './ts/controllerBabel'
+import { controllerPropertyTransformerFactory, hasPropertyMetadata } from './transformer_factorys/controller'
+import { WATCH_TASK, Task } from './tokens/watch_task'
+import { NgerCompilerBootstrap, metadataCache, hasHandlerFileCache } from './bootstrap'
+import { controllerVisitor } from './visitors/controller'
+import { NgModuleBootstrap } from 'nger-core'
+import { NgerUtil } from 'nger-util'
export {
NgerCompilerImage,
NgerCompilerUglify,
@@ -21,25 +25,20 @@ export {
NgerCompilerCid,
NgerCompilerNgMetadata,
NgerCompilerBabel,
- NgerCompilerBabelController
+ controllerPropertyTransformerFactory,
+ WATCH_TASK,
+ Task,
+ hasPropertyMetadata,
+ metadataCache,
+ hasHandlerFileCache
}
-import { NgerUtil } from 'nger-util'
-import { controllerVisitor } from './visitors/controller'
const provides: StaticProvider[] = [
...styleProviders,
{
- provide: NgerCompilerBabelController,
- useClass: NgerCompilerBabelController,
- deps: [
- NgerCompilerController,
- TraverVisitor,
- Resolver
- ]
- },
- {
- provide: NgerCompilerController,
- useClass: NgerCompilerController,
- deps: []
+ provide: NgModuleBootstrap,
+ useClass: NgerCompilerBootstrap,
+ deps: [NgerUtil],
+ multi: true
},
{
provide: TraverVisitor,
diff --git a/packages/nger-compiler/lib/tokens/watch_task.ts b/packages/nger-compiler/lib/tokens/watch_task.ts
new file mode 100644
index 0000000..de0c32e
--- /dev/null
+++ b/packages/nger-compiler/lib/tokens/watch_task.ts
@@ -0,0 +1,3 @@
+import { InjectionToken, Injector } from 'nger-di'
+export type Task = (path: string, opt: string, injector: Injector) => any;
+export const WATCH_TASK = new InjectionToken(`WATCH_TASK`)
diff --git a/packages/nger-compiler/lib/ts/controller.ts b/packages/nger-compiler/lib/transformer_factorys/controller.ts
similarity index 54%
rename from packages/nger-compiler/lib/ts/controller.ts
rename to packages/nger-compiler/lib/transformer_factorys/controller.ts
index 728ceb5..2cae9e0 100644
--- a/packages/nger-compiler/lib/ts/controller.ts
+++ b/packages/nger-compiler/lib/transformer_factorys/controller.ts
@@ -1,15 +1,6 @@
-import { Injectable } from 'nger-core'
-import ts from 'typescript'
-import { join } from 'path'
-const root = process.cwd();
-const options = require(join(root, 'tsconfig.json')).compilerOptions;
-import { CompilerOptions, CustomTransformers, TransformationContext, Transformer } from 'typescript'
-// 遍历吧 没啥好方法
-
-// 这个是负责任Controller处理器
-const ConstructorTransformerFactory = (context: TransformationContext): Transformer => {
+import ts, { TransformationContext, Transformer } from 'typescript'
+export const controllerPropertyTransformerFactory = (context: TransformationContext): Transformer => {
return (node: ts.SourceFile): ts.SourceFile => {
- // 骚年在这里处理吧
node.statements = ts.createNodeArray(
node.statements.map((node: ts.Statement) => {
if (ts.isImportDeclaration(node)) {
@@ -23,11 +14,8 @@ const ConstructorTransformerFactory = (context: TransformationContext): Transfor
node.heritageClauses,
node.members.map(member => {
if (ts.isMethodDeclaration(member)) {
- // 先判断是否Get/Post等方法
- // 这里需要创建一个type
- const needReplace = hasControllerMetadata(member.decorators);
+ const needReplace = hasPropertyMetadata(member.decorators);
if (needReplace) {
- // ts.createTypeNode()
return ts.createProperty(
member.decorators,
member.modifiers,
@@ -38,9 +26,9 @@ const ConstructorTransformerFactory = (context: TransformationContext): Transfor
)
}
} else if (ts.isPropertyDeclaration(member)) {
- const needReplace = hasControllerMetadata(member.decorators);
+ const needReplace = hasPropertyMetadata(member.decorators);
if (needReplace) return member;
- }
+ } else if (ts.isConstructorDeclaration(member)) { }
}).filter(node => !!node)
)
} else {
@@ -51,14 +39,13 @@ const ConstructorTransformerFactory = (context: TransformationContext): Transfor
return node;
}
}
-
-function hasControllerMetadata(nodes: ts.NodeArray) {
+export function hasPropertyMetadata(nodes: ts.NodeArray, decorators: string[] = ['Get', 'Post']) {
const item = nodes && nodes.find(node => {
if (ts.isDecorator(node)) {
if (ts.isCallExpression(node.expression)) {
const expression = node.expression
if (ts.isIdentifier(expression.expression)) {
- return ['Get', 'Post'].indexOf(expression.expression.text) > -1;
+ return decorators.indexOf(expression.expression.text) > -1;
}
}
}
@@ -66,21 +53,3 @@ function hasControllerMetadata(nodes: ts.NodeArray) {
})
return !!item;
}
-const customTransformer: CustomTransformers = {
- before: [
- ConstructorTransformerFactory
- ],
- after: [],
- afterDeclarations: []
-}
-@Injectable()
-export class NgerCompilerController {
- options: CompilerOptions = options;
- compile(content: string, config: ts.TranspileOptions = {
- compilerOptions: this.options,
- transformers: customTransformer
- }): string {
- const output = ts.transpileModule(content, config)
- return output.outputText
- }
-}
\ No newline at end of file
diff --git a/packages/nger-compiler/lib/ts/babel.ts b/packages/nger-compiler/lib/ts/babel.ts
index ad91671..1521a3e 100644
--- a/packages/nger-compiler/lib/ts/babel.ts
+++ b/packages/nger-compiler/lib/ts/babel.ts
@@ -6,6 +6,7 @@ import fs from 'fs-extra';
import { Injectable } from 'nger-core';
import { NgerCompilerTypescript } from 'nger-compiler';
import { mergeVisitors } from './util'
+import ts from 'typescript';
@Injectable()
export class NgerCompilerBabel {
visitor: Visitor;
@@ -16,18 +17,18 @@ export class NgerCompilerBabel {
) {
this.visitor = mergeVisitors(this.visitors, this)
}
- getFileContent(path: string) {
+ getFileContent(path: string, config: ts.TranspileOptions = {}) {
// 如果文件或目录存在
let code = fs.readFileSync(path).toString('utf8')
if (path.endsWith('.ts') || path.endsWith('tsx')) {
- code = this.ts.compile(code)
+ code = this.ts.compile(code, config)
}
return code;
}
- compile(from: string) {
+ compile(from: string, config: ts.TranspileOptions = {}) {
// 如果已经处理过了则忽略
// 拿到文件内容
- let code = this.getFileContent(from);
+ let code = this.getFileContent(from, config);
// 解析
const ast = parse(code, {});
// 替换处理
diff --git a/packages/nger-compiler/lib/ts/controllerBabel.ts b/packages/nger-compiler/lib/ts/controllerBabel.ts
deleted file mode 100644
index c0162b5..0000000
--- a/packages/nger-compiler/lib/ts/controllerBabel.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import traverse, { Visitor } from '@babel/traverse';
-import generator from '@babel/generator';
-import { parse } from '@babel/parser';
-import { Resolver } from 'nger-core'
-import fs from 'fs-extra';
-import { Injectable } from 'nger-core';
-import { NgerCompilerController } from './controller';
-import { mergeVisitors } from './util'
-@Injectable()
-export class NgerCompilerBabelController {
- visitor: Visitor;
- constructor(
- public ts: NgerCompilerController,
- public visitors: Visitor[],
- public resolver: Resolver
- ) {
- this.visitor = mergeVisitors(this.visitors, this)
- }
- getFileContent(path: string) {
- // 如果文件或目录存在
- let code = fs.readFileSync(path).toString('utf8')
- if (path.endsWith('.ts') || path.endsWith('tsx')) {
- code = this.ts.compile(code)
- }
- return code;
- }
- compile(from: string) {
- // 如果已经处理过了则忽略
- // 拿到文件内容
- let code = this.getFileContent(from);
- // 解析
- const ast = parse(code, {});
- // 替换处理
- traverse(ast, this.visitor || {});
- code = generator(ast).code;
- return code;
- }
-}
diff --git a/packages/nger-compiler/lib/ts/typescript.ts b/packages/nger-compiler/lib/ts/typescript.ts
index a1fef85..60281f8 100644
--- a/packages/nger-compiler/lib/ts/typescript.ts
+++ b/packages/nger-compiler/lib/ts/typescript.ts
@@ -3,20 +3,16 @@ import ts from 'typescript'
import { join } from 'path'
const root = process.cwd();
const options = require(join(root, 'tsconfig.json')).compilerOptions;
-import { CompilerOptions, CustomTransformers } from 'typescript'
-const customTransformer: CustomTransformers = {
- before: [],
- after: [],
- afterDeclarations: []
-}
+import { CompilerOptions } from 'typescript'
@Injectable()
export class NgerCompilerTypescript {
options: CompilerOptions = options;
constructor() { }
- compile(content: string, config: ts.TranspileOptions = {
- compilerOptions: this.options,
- transformers: customTransformer
- }): string {
+ compile(content: string, config: ts.TranspileOptions = {}): string {
+ config = {
+ compilerOptions: this.options,
+ ...config,
+ };
const output = ts.transpileModule(content, config)
return output.outputText
}
diff --git a/packages/nger-compiler/package.json b/packages/nger-compiler/package.json
index 10f6632..5838799 100644
--- a/packages/nger-compiler/package.json
+++ b/packages/nger-compiler/package.json
@@ -5,7 +5,8 @@
"author": "imeepos <1037483576@qq.com>",
"homepage": "https://github.com/meepobrother/nger#readme",
"license": "ISC",
- "main": "lib/nger-compiler.js",
+ "main": "lib/index.js",
+ "typings": "lib/index.d.ts",
"directories": {
"lib": "lib",
"test": "__tests__"
diff --git a/packages/nger-core/lib/decorators/jsx.ts b/packages/nger-core/lib/decorators/jsx.ts
index aeab012..f6b9ce9 100644
--- a/packages/nger-core/lib/decorators/jsx.ts
+++ b/packages/nger-core/lib/decorators/jsx.ts
@@ -14,8 +14,7 @@ export interface Hyperscript {
(sel: any, data: VNodeData, children: Array): VNode;
(sel: any, data: VNodeData, children: VNode): VNode;
}
-interface NgerComponent {
-}
+interface NgerComponent { }
declare global {
export var h: Hyperscript;
namespace JSX {
@@ -24,10 +23,8 @@ declare global {
interface IntrinsicElements {
[elemName: string]: any;
}
- interface ElementClass { }
+ interface ElementClass {}
interface ElementAttributesProperty extends NgerComponent { }
- interface ElementChildrenAttribute {
- children: any;
- }
+ interface ElementChildrenAttribute { }
}
}
diff --git a/packages/nger-ui/lib/components/base/index.ts b/packages/nger-ui/lib/components/base/index.ts
new file mode 100644
index 0000000..c0d23fd
--- /dev/null
+++ b/packages/nger-ui/lib/components/base/index.ts
@@ -0,0 +1,12 @@
+import { Input } from 'nger-core'
+
+export class VoidElement {
+ @Input() className?: string;
+ @Input() style?: Partial;
+}
+
+export class Element extends VoidElement {
+ @Input() className?: string;
+ @Input() style?: Partial;
+ @Input() children?: (VoidElement | Element)[];
+}
diff --git a/packages/nger-ui/lib/components/swiper-item/index.tsx b/packages/nger-ui/lib/components/swiper-item/index.tsx
index 5af1a26..8911106 100644
--- a/packages/nger-ui/lib/components/swiper-item/index.tsx
+++ b/packages/nger-ui/lib/components/swiper-item/index.tsx
@@ -1,5 +1,8 @@
-import { Component } from 'nger-core'
+import { Component, Input } from 'nger-core'
+import { Element } from '../base'
@Component({
selector: 'nger-swiper-item'
})
-export class SwiperItem { }
+export class SwiperItem extends Element {
+ @Input() itemId?: string;
+}
diff --git a/packages/nger-ui/lib/components/swiper/index.tsx b/packages/nger-ui/lib/components/swiper/index.tsx
index 53332b7..d4090a8 100644
--- a/packages/nger-ui/lib/components/swiper/index.tsx
+++ b/packages/nger-ui/lib/components/swiper/index.tsx
@@ -1,5 +1,26 @@
-import { Component } from 'nger-core'
+import { Component, Input, Output } from 'nger-core'
+import { Element } from '../base'
+
@Component({
selector: 'nger-swiper'
})
-export class Swiper { }
+export class Swiper extends Element {
+ @Input() indicatorDots?: boolean;
+ @Input() indicatorColor?: string;
+ @Input() indicatorActiveColor?: string;
+ @Input() autoplay?: boolean;
+ @Input() current?: number;
+ @Input() interval?: number;
+ @Input() duration?: number;
+ @Input() circular?: boolean;
+ @Input() vertical?: boolean;
+ @Input() previousMargin?: string;
+ @Input() nextMargin?: string;
+ @Input() displayMultipleItems?: number;
+ @Input() skipHiddenItemLayout?: boolean;
+ @Input() easingFunction?: 'default' | 'linear' | 'easeInCubic' | 'easeOutCubic' | 'easeInOutCubic';
+
+ @Output() change?: (e: Event) => void;
+ @Output() transition?: (e: Event) => void;
+ @Output() animationfinish?: (e: Event) => void;
+}
diff --git a/packages/nger-ui/lib/components/video/index.tsx b/packages/nger-ui/lib/components/video/index.tsx
index 1a35df3..1b016c9 100644
--- a/packages/nger-ui/lib/components/video/index.tsx
+++ b/packages/nger-ui/lib/components/video/index.tsx
@@ -1,5 +1,5 @@
import { Component } from 'nger-core'
@Component({
- selector: 'nger-video'
+ selector: 'video'
})
export class Video { }
diff --git a/packages/nger-ui/lib/components/view/index.tsx b/packages/nger-ui/lib/components/view/index.tsx
index 57d63b9..a864aca 100644
--- a/packages/nger-ui/lib/components/view/index.tsx
+++ b/packages/nger-ui/lib/components/view/index.tsx
@@ -1,5 +1,11 @@
-import { Component } from 'nger-core'
+import { Component, Input } from 'nger-core'
+import { Element } from '../base'
@Component({
- selector: 'nger-view'
+ selector: 'view'
})
-export class View { }
+export class View extends Element {
+ @Input() hoverClass?: string;
+ @Input() hoverStopPropagation?: boolean;
+ @Input() hoverStartTime?: number;
+ @Input() hoverStayTime?: number;
+}
diff --git a/packages/nger-ui/lib/directives/index.ts b/packages/nger-ui/lib/directives/index.ts
new file mode 100644
index 0000000..69d9ba7
--- /dev/null
+++ b/packages/nger-ui/lib/directives/index.ts
@@ -0,0 +1 @@
+export * from './ngIf';
diff --git a/packages/nger-ui/lib/directives/ngIf.ts b/packages/nger-ui/lib/directives/ngIf.ts
new file mode 100644
index 0000000..1d13f4e
--- /dev/null
+++ b/packages/nger-ui/lib/directives/ngIf.ts
@@ -0,0 +1,8 @@
+import { Directive, Input } from 'nger-core'
+import { Element } from '../components/base'
+@Directive({
+ selector: 'ngIf'
+})
+export class NgIf extends Element {
+ @Input() condiction?: boolean;
+}
diff --git a/packages/nger-ui/lib/index.ts b/packages/nger-ui/lib/index.ts
index 4ac193e..0840e83 100644
--- a/packages/nger-ui/lib/index.ts
+++ b/packages/nger-ui/lib/index.ts
@@ -1 +1,2 @@
-export * from './components'
\ No newline at end of file
+export * from './components'
+export * from './directives'
\ No newline at end of file
diff --git a/readme.md b/readme.md
index b8c816a..a367685 100644
--- a/readme.md
+++ b/readme.md
@@ -33,21 +33,48 @@ vue、react相继都有了小程序的开发框架,作为一个nger,也该
6. npm start
## 目录规范
-- [addons 第三方插件目录](./addon)
-- [attachment 附件目录](./attachment)
-- [config 配置目录](./config)
- - [config.json 基础配置](./config/config.json)
- - [key.json 作者信息](./config/key.json)
-- [data 数据目录,缓存,日志等](./data)
-- [src 当前开发目录](./src)
- - [inc Controller存放目录](./src/inc)
- - [template 模板源码](./src/template)
- - [typeorm 数据库相关](./src/typeorm)
- - [admin.ts 后台管理入口](./src/admin.ts)
- - [app.ts 手机端管理入口](./src/app.ts)
- - [server.ts 服务端入口](./src/server.ts)
- - [package.json 模块信息](./src/package.json)
-- [template 模板打包后存放目录](./template)
+## 系统安装配置
+
+#### 源码
+- [x] `addon`
+ - [x] `ims-install`
+ - [x] `inc` 控制器,服务端
+ - [x] `template` 模板
+ - [x] `typeorm` 数据库
+ - [x] `index.ts` 导出模块
+ - [x] `server.ts` 服务端
+ - [x] `pc.ts` pc端
+ - [x] `app.ts` app端
+ - [x] `admin` 管理端
+ - [x] `package.json` 模块详情
+ - [x] `name`: 模块名,
+ - [x] `description`: 模块描述
+ - [x] `version`: 模块版本号,
+ - [x] `author` 模块作者
+ - [x] `email`: 作者邮箱,
+ - [x] `name`: 作者名称
+ - [x] nger: 入口信息
+ - [x] `server`: 制定服务端入口,
+ - [x] `admin`: 制定管理端入口,
+ - [x] `app`: 制定移动端入口,
+ - [x] `pc`: 制定pc端入口
+ - [x] icon: 模块图标
+
+#### 编译后
+- [x] `addon`
+ - [x] `ims-install`
+ - [x] `pc` pc网站
+ - [x] `admin` 管理
+ - [x] `ttapp` 字节跳动
+ - [x] `aliapp` 支付宝
+ - [x] `weapp` 微信小程序
+ - [x] `wechat` 微信浏览器
+ - [x] `h5` 手机网站
+ - [x] `ios` ios端
+ - [x] `android` 安卓端
+ - [x] `index.js` // 插件,可安装卸载更新
+ - [x] `server.js` // 可独立运行,nger start addon/ims-install/server.js -p 4200
+ - [x] `package.json` // 插件描述
## 开发文档