16.5.17 • Published 20 days ago

morphi v16.5.17

Weekly downloads
331
License
MIT
Repository
github
Last release
20 days ago

Instalation

Global CLI

First install global tool:

npm install -g morphi

Create new Isomorphic Workspace project ( mobile, web, server + sqlite db + basic rest authentication )

morphi new:workspace myAwesomeIsomrphicApp

OR create Isomorphic Single File backend/frontend project

morphi new:simple myAwesomeIsomrphicApp

Visual Studio Code (recommended editor)

Open your project in VSCode to get the maximum of development experience.

code myAwesomeIsomrphicApp

Installation - Isomorphi Workspace

Link one version of node_modules

Once you have your app opened...

files

run:

npm install
npm run link

to install and link node_module folder for each subproject.

Build and run sub-projects with auto-reload

  • isomorphic-lib: npm run build:watch #or morphi:watch + F5 to run server
  • angular-client: npm run build:watch + open browser http:\\localhost:4200
  • ionic-client: npm run build:watch + open browser http:\\localhost:8100

Instead of npm run build:watch you can also open each sub-project in separated vscode window code <sub-project-name> and press: ctrl(cmd) + shift + b.

Installation - Isomorphi Single File

Install dependencies

Once you have your app opened... run:

npm install

Run isomorphic build

morphi build:watch

Run frontend client

npm run build:watch

Backend controllers, entities directly in the frontend

Isomorphic TypeScript Classes

The main reason why this framework has huge potential is that you can use your backend code ( usualy ExpressJS, REST controllers ) as Anguar 2+ (or any other js framework) services, to access your RESTfull backend without dealing with backend patches and unessery source code.

This will allow you to change business login very quickly, without confusion and keep no separation between your frontend/backend application.

Morphi CLI tool

Is responsible for magic behing stripping of backend code for browser version ( web app or ionic mobile app).

Regions @backend,@backendFunc

The difference between @backend and @backendFunc is that @backendFunc will replace code with 'return undefined' (it is needed for typescript compilation) and @backend will precisely delete all lines between.

HOW IT WORKS:

+ Isomorphi initilization

Initialization for backend and frontend

import { Morphi } from 'morphi';


@Morphi.init({
  controllers: [ /* Your controllers clases here */ UserController  ],
  entites: [ /* Your entites clases here */  User ],
  host: 'http://localhost:4000' // host for backend and frontend,
  //#region @backend
  config: { /* Your db config clases here */  }
  //#endregion
})

To inject providers you can use

import { Morphi } from 'morphi';

...
  providers: [  ...Morphi.Providers  ]
...

+ Isomorphi backend

Typeorm isomorphic ENTITY in NodeJS backend:

import { Morphi } from 'morphi';

@Morphi.Entity()
export class User {

    //#region @backend
    @Morphi.Orm.Column.Primary()
    //#endregion
    id: number;

    //#region @backend
    @Morphi.Orm.Column.Custom()
    //#endregion
    name: string;

    //#region @backend
    @Morphi.Orm.Column.Custom()
    //#endregion
    surname: string;

    fullName() {
      return `${this.name} ${this.surname}`
    }
    
    //#region @backend 
    password: string
    //#endregion

}

Morphi isomorphic CONTROLLER in NodeJS backend:

import { Morphi } from 'morphi'

@Morphi.Controller() 
class UserController {
		
	@Morphi.Http.GET()
	getAllUser() {
		//#region @backendFunc 
		const  repository  =  this.connection.getRepository(User) as  any;
		return  async (req, res) => {
			return await  this.repository.findAll();
		}
		//#endregion
	}	
}

After isomorphic compilation by morphi;

morphi build

or (incremental watch build)

morphi build:watch

will be generated browser version.

+ Generated borwser version

The result for browser client will be like below:

Typeorm isomorphic ENTITY in browser version:

import { Morphi } from 'morphi/browser';

@Morphi.Entity()
export class User {

    id: number;

    name: string;

    surname: string;

    fullName() {
      return `${this.name} ${this.surname}`
    }
}

Morphi isomorphic CONTROLLER in browser version:

import { Morphi } from 'morphi/browser'

@Morphi.Controller()
class UserController {
	 // 'return undefined' is for purpose on the browser side
	 // The function body will be replaced through decorate
	 // to access REST endpoint
	@Morphi.Http.GET()
	getAllUser() { 
    return undefined; 
    }	
}

Angular 2+ services

Morphi.Controller(s) you can use as Angular 2+ services. If you used Morphi.Entity your browser <-> backend REST communication will keep entity type and automaticly reproduce it.

@Component({
	selector:  'app-test',
	templateUrl:'app-test.html'
})
class  AppTestComponent  implements  OnInit {

	// Inject isomorphic class as service into component
	constructor(public users: UserController) { } 
	
	async ngOnInit() {
          const data = await this.users.getAllUsers().received;
          const users = data.body.json;
          const firstUser = users[0]
          console.log( firstUser instanceOf User ) // true
	}
}

Directly in html template

To simplify object receiving from backend you can use async pipes (available with Angular4+) and really make you MVVM amazing.

Morphi and Angular4+ lets you use backend functions in html frontend template.

app-test.html

Users:
<ul   *ngIf="users.getAllUsers().received.observable | async; else loader; let users" >

  <li  *ngFor="let user of users"> 
  		{{user.id}} {{user.fullName()}} <!-- BACKEND FUNCTION IN FRONTEND TEMPLATE ! -->
		  <br>
		<input type="name" [(NgModel)]="user.name" >
  </li>

</ul>

<ng-template #loader> loading users...  </ng-template>

Of course Angular services can be used inside Angular web and Ionic mobile apps.

RULES

1. Controlers, Entites classes names matters.

2. Each new context onlyt with diffrent host allowed

3. Each Controller or Entity only allowed to be inside one context.

16.5.16

20 days ago

16.5.17

20 days ago

16.5.15

20 days ago

16.5.14

24 days ago

16.5.13

1 month ago

16.5.12

2 months ago

16.5.11

3 months ago

16.5.10

3 months ago

16.5.9

3 months ago

16.5.8

3 months ago

16.5.7

3 months ago

16.5.6

4 months ago

16.5.5

4 months ago

16.5.4

4 months ago

16.5.3

4 months ago

16.5.2

5 months ago

16.5.1

5 months ago

16.2.10

5 months ago

16.2.8

6 months ago

16.2.7

6 months ago

16.2.6

6 months ago

16.2.5

7 months ago

16.2.9

6 months ago

16.2.4

7 months ago

13.2.8

11 months ago

13.2.9

11 months ago

13.2.6

11 months ago

13.2.7

11 months ago

16.2.3

10 months ago

16.2.1

10 months ago

13.2.10

11 months ago

16.0.7

10 months ago

13.2.12

11 months ago

13.2.11

11 months ago

16.0.2

11 months ago

16.0.6

10 months ago

16.0.5

11 months ago

16.0.4

11 months ago

16.0.3

11 months ago

13.2.4

12 months ago

13.2.5

12 months ago

13.2.2

1 year ago

13.2.3

1 year ago

13.2.1

1 year ago

13.1.39

1 year ago

13.1.40

1 year ago

13.1.41

1 year ago

13.1.32

1 year ago

13.1.33

1 year ago

13.1.34

1 year ago

13.1.35

1 year ago

13.1.37

1 year ago

13.1.38

1 year ago

13.1.7

1 year ago

13.1.8

1 year ago

13.1.5

1 year ago

13.1.6

1 year ago

13.1.4

1 year ago

13.1.1

1 year ago

13.1.2

1 year ago

13.1.28

1 year ago

13.1.29

1 year ago

13.0.48

2 years ago

13.0.42

2 years ago

13.0.44

2 years ago

13.0.45

2 years ago

13.0.47

2 years ago

13.0.40

2 years ago

13.0.41

2 years ago

13.0.39

2 years ago

13.0.31

2 years ago

13.0.33

2 years ago

13.0.34

2 years ago

13.0.36

2 years ago

13.0.37

2 years ago

13.0.38

2 years ago

13.0.30

2 years ago

13.0.10

2 years ago

13.0.11

2 years ago

13.0.12

2 years ago

13.0.13

2 years ago

13.0.14

2 years ago

13.0.15

2 years ago

13.0.16

2 years ago

13.0.17

2 years ago

13.0.20

2 years ago

13.0.21

2 years ago

13.0.22

2 years ago

13.0.23

2 years ago

13.0.27

2 years ago

13.0.8

2 years ago

13.0.5

2 years ago

13.0.2

2 years ago

13.0.3

2 years ago

13.0.28

2 years ago

13.0.29

2 years ago

13.0.1

2 years ago

4.0.52

3 years ago

4.0.51

3 years ago

4.0.54

3 years ago

4.0.53

3 years ago

4.0.50

3 years ago

4.0.43

3 years ago

4.0.42

3 years ago

4.0.49

3 years ago

4.0.44

3 years ago

4.0.39

3 years ago

4.0.27

3 years ago

4.0.26

3 years ago

4.0.29

3 years ago

4.0.28

3 years ago

4.0.23

3 years ago

4.0.34

3 years ago

4.0.33

3 years ago

4.0.19

3 years ago

4.0.21

3 years ago

4.0.20

3 years ago

4.0.22

3 years ago

4.0.18

3 years ago

4.0.16

3 years ago

4.0.17

3 years ago

4.0.14

3 years ago

4.0.13

3 years ago

4.0.12

3 years ago

4.0.11

3 years ago

4.0.10

3 years ago

4.0.9

3 years ago

4.0.7

3 years ago

4.0.8

3 years ago

4.0.6

3 years ago

4.0.5

3 years ago

4.0.4

3 years ago

4.0.3

4 years ago

4.0.2

4 years ago

4.0.1

4 years ago

3.1.14

4 years ago

3.1.13

4 years ago

3.1.12

4 years ago

3.1.11

4 years ago

3.1.9

4 years ago

3.1.5

4 years ago

3.1.4

4 years ago

3.1.3

4 years ago

3.1.2

4 years ago

3.1.1

4 years ago

3.0.17

4 years ago

3.0.16

4 years ago

3.0.15

4 years ago

3.0.12

4 years ago

3.0.10

4 years ago

3.0.11

4 years ago

3.0.8

4 years ago

3.0.6

4 years ago

3.0.4

4 years ago

3.0.3

4 years ago

3.0.2

4 years ago

3.0.1

4 years ago

2.1.1

4 years ago

2.0.64

5 years ago

2.0.63

5 years ago

2.0.61

5 years ago

2.0.59

5 years ago

2.0.58

5 years ago

2.0.56

5 years ago

2.0.55

5 years ago

2.0.54

5 years ago

2.0.52

5 years ago

2.0.51

5 years ago

2.0.50

5 years ago

2.0.45

5 years ago

2.0.44

5 years ago

2.0.43

5 years ago

2.0.42

5 years ago

2.0.41

5 years ago

2.0.40

5 years ago

2.0.39

5 years ago

2.0.32

5 years ago

2.0.31

5 years ago

2.0.30

5 years ago

2.0.29

5 years ago

2.0.28

5 years ago

2.0.27

5 years ago

2.0.26

5 years ago

2.0.25

5 years ago

2.0.24

5 years ago

2.0.23

5 years ago

2.0.21

5 years ago

2.0.20

5 years ago

2.0.19

5 years ago

2.0.18

5 years ago

2.0.17

5 years ago

2.0.16

5 years ago

2.0.15

5 years ago

2.0.14

5 years ago

2.0.13

5 years ago

2.0.12

5 years ago

2.0.11

5 years ago

2.0.10

5 years ago

2.0.9

5 years ago

2.0.8

5 years ago

2.0.6

5 years ago

2.0.5

5 years ago

2.0.4

5 years ago

2.0.3

5 years ago

2.0.2

5 years ago

2.0.1

5 years ago

1.0.78

5 years ago

1.0.77

5 years ago

1.0.76

5 years ago

1.0.75

5 years ago

1.0.74

5 years ago

1.0.73

5 years ago

1.0.70

5 years ago

1.0.69

5 years ago

1.0.68

5 years ago

1.0.67

5 years ago

1.0.66

5 years ago

1.0.65

5 years ago

1.0.64

5 years ago

1.0.63

5 years ago

1.0.62

5 years ago

1.0.61

6 years ago

1.0.60

6 years ago

1.0.59

6 years ago

1.0.58

6 years ago

1.0.57

6 years ago

1.0.56

6 years ago

1.0.55

6 years ago

1.0.54

6 years ago

1.0.53

6 years ago

1.0.52

6 years ago

1.0.51

6 years ago

1.0.50

6 years ago

1.0.49

6 years ago

1.0.48

6 years ago

1.0.47

6 years ago

1.0.46

6 years ago

1.0.45

6 years ago

1.0.44

6 years ago

1.0.43

6 years ago

1.0.42

6 years ago

1.0.41

6 years ago

1.0.40

6 years ago

1.0.39

6 years ago

1.0.38

6 years ago

1.0.37

6 years ago

1.0.36

6 years ago

1.0.35

6 years ago

1.0.33

6 years ago

1.0.32

6 years ago

1.0.31

6 years ago

1.0.30

6 years ago

1.0.29

6 years ago

1.0.28

6 years ago

1.0.27

6 years ago

1.0.26

6 years ago

1.0.24

6 years ago

1.0.23

6 years ago

1.0.22

6 years ago

1.0.20

6 years ago

1.0.18

6 years ago

1.0.16

6 years ago

1.0.14

6 years ago

1.0.13

6 years ago

1.0.12

6 years ago

1.0.11

6 years ago

1.0.10

6 years ago

1.0.9

6 years ago

1.0.7

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago

0.0.19

6 years ago

0.0.18

6 years ago

0.0.17

6 years ago

0.0.16

6 years ago

0.0.15

6 years ago

0.0.13

6 years ago

0.0.12

6 years ago

0.0.11

6 years ago

0.0.10

6 years ago

0.0.9

6 years ago

0.0.8

6 years ago

0.0.6

6 years ago

0.0.5

6 years ago

0.0.4

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago