1.2.43 • Published 1 year ago

mycena-store v1.2.43

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

mycena-store

NPM Version NPM Downloads Node.js Version License - MIT

mycena-store 是 Redux-like 應用程式。
啟發來自於 BLoC 設計模式、 NgRx 溝通機制、Neo4j 資料結構、JHipster 關係綁定的方法...。

為什麼要用

Angular 有 NgRx,Nestjs 有 CQRS,為什麼還要再做一套呢?
因為 Angular 和 Nestjs 底層都是 Typescript,我們希望能最大化重複使用程式碼。
有了這個工具以後,在撰寫系統時要將前後端視為一體去思考設計。

架構概念

ngrx-diagram 唯一存在的 Store 是門面,有任何訊息傳遞都是以 Action 的形式通知它,用於系統內部邏輯處理的就交給 Reducer, BLoC 處理;要去系統外(Database, Other service)拿資料的話就由 Effect 處理,呼叫對應的 Service 後,等待回覆後再以 Action 形式再丟回 Store 中。
而有了 Selector 以後,可搭配 Socket, PRC...等即時的通訊方式,有任何改變 Server 端可以主動 broadcast 給所有 Client 端。

constructor_of_app 詳細說明書

如何開始使用

  • 通用設定
  1. (非必要) 可於./tsconfig.json

    {
      "compilerOptions":{
        "paths":[
          "@<PROJECT_NAME>": ["<PATH_OF_MYCENA_STORE_INSTANCE>"],
        ]
      }
    }

    (請參考連結: tsconfig_paths)

  • 如果是 Angular 使用:
  1. (必要)請到 ./angular.json 中,將 "mycena-store" 加到 allowCommonJsDependencies 下

    {
      "projects": {
        "PROJECT_NAME": {
          "architect": {
            "build": {
              "options": {
                "allowCommonJsDependencies": ["mycena-store"]
              }
            }
          }
        }
      }
    }

    (請參考連結: allowed common js dependencies)

  2. (必要)注意 ./tsconfig.json,可參考以下 Angular Example

    {
      "compilerOptions": {
        "sourceMap": true,
        "declaration": false,
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "strict": false /* Disable all strict type-checking options. */,
        /* Additional Checks */
        "noUnusedLocals": false /* Report errors on unused locals. */,
        "noUnusedParameters": false /* Report errors on unused parameters. */,
        "noImplicitReturns": false /* Report error when not all code paths in function return a value. */,
        "noFallthroughCasesInSwitch": false /* Report errors for fallthrough cases in switch statement. */,
        "allowSyntheticDefaultImports": true,
        "esModuleInterop": true,
        "importHelpers": true,
        "target": "es2021",
        "module": "esnext",
        "types": ["node"],
        "lib": ["es2017", "es2021", "dom"],
        "skipLibCheck": true,
        "skipDefaultLibCheck": true
      }
    }

    將來有時間的話要來重寫 @felangel/bloc 裡面的邏輯。
    (請參考連結: extend-observable)

  3. (必要)/src/polyfills.ts中,請加到

    import 'reflect-metadata';
    (window as any).process = {
      env: { DEBUG: undefined },
    };

    (請參考連結: reflect-metadata, process)

  4. (必要)在 ./src/main.ts 中,將 appModule 添加到 Cqrs 如下所示

    platformBrowserDynamic()
      .bootstrapModule(AppModule)
      .then((appModule) => {
        // Ensure Angular destroys itself on hot reloads.
        /**
          if (window['ngRef']) {
            window['ngRef'].destroy();
          }
          window['ngRef'] = appModule;
        */
    
        // And this line for adoption
        Cqrs.setAppModule(appModule);
      })
      .catch((err) => console.error(err));
  5. (必要)Effect 中的

    // e.g.
    import { injectable } from 'inversify';
    @injectable()
    class GroupEffect {}
    //↓ ↓ ↓ 請替換成 ↓ ↓ ↓
    import { Injectable } from '@angular/core';
    @Injectable()
    class GroupEffect {}

    以便於 Dependency-Injection 使用 angular 產生的 service

  • 如果是 Nestjs 使用
  1. (非必要) 於./tsconfig.json設置 paths 時,若是遭遇 Path Aliases 異常
    (請參考連結: path_aliases)

  2. (必要)在 ./src/main.ts 中,將 appModule 添加到 Cqrs 如下所示

    async function bootstrap() {
      const app = await NestFactory.create(AppModule);
      await app.listen(3000);
      Cqrs.setAppModule(AppModule, app);
    }
    bootstrap();
  3. (必要)Effect 中

    // e.g.
    import { injectable } from 'inversify';
    @injectable()
    class GroupEffect {}
    //↓ ↓ ↓ 請替換成 ↓ ↓ ↓
    import { Injectable } from '@nest/common';
    @Injectable()
    class GroupEffect {}

    以便於 Dependency-Injection 使用 nest 產生的 service

Example 範例

Nrwl Example
The path of /apps/api is Nestjs application. (apps/api/src/app/app.service.ts)
The path of /apps/app is Angular application. (apps/app/src/app/app.component.ts)
The path of /libs/mycena-store is instance of mycena-store. (libs/mycena-store/src/lib/mycena-store.unittest.ts)

Angular Example
Nest Example

其他

其他文件放置於專案下 ./doc
NOTE 筆記
VERSION 歷史版本
OUTLOOK 未來展望
BUG 已知待修復Bug

1.2.43

1 year ago

1.2.41

1 year ago

1.2.42

1 year ago

1.2.40

1 year ago

1.2.34

1 year ago

1.2.35

1 year ago

1.2.33

1 year ago

1.2.38

1 year ago

1.2.39

1 year ago

1.2.36

1 year ago

1.2.37

1 year ago

1.2.32

1 year ago

1.2.31

1 year ago

1.2.27

1 year ago

1.2.28

1 year ago

1.2.25

1 year ago

1.2.26

1 year ago

1.2.29

1 year ago

1.2.30

1 year ago

1.2.24-beta.17

1 year ago

1.2.24-beta.16

2 years ago

1.2.24-beta.15

2 years ago

1.2.24-beta.9

2 years ago

1.2.24-beta.8

2 years ago

1.2.24-beta.7

2 years ago

1.2.24-beta.6

2 years ago

1.2.24-beta.5

2 years ago

1.2.24-beta.4

2 years ago

1.2.24-beta.3

2 years ago

1.2.24-beta.14

2 years ago

1.2.24-beta.13

2 years ago

1.2.24-beta.12

2 years ago

1.2.24-beta.11

2 years ago

1.2.24-beta.10

2 years ago

1.2.24-beta.2

2 years ago

1.2.24-beta.1

2 years ago

1.2.23-beta.16

2 years ago

1.2.23-beta.17

2 years ago

1.2.23-beta.18

2 years ago

1.2.23-beta.19

2 years ago

1.2.23-beta.12

2 years ago

1.2.23-beta.13

2 years ago

1.2.23-beta.14

2 years ago

1.2.23-beta.15

2 years ago

1.2.23-beta.10

2 years ago

1.2.23-beta.11

2 years ago

1.2.23-beta.20

2 years ago

1.2.23

2 years ago

1.2.24

2 years ago

1.2.22-beta.30

2 years ago

1.2.22-beta.31

2 years ago

1.2.22-beta.23

2 years ago

1.2.22-beta.24

2 years ago

1.2.22-beta.25

2 years ago

1.2.22-beta.26

2 years ago

1.2.22-beta.27

2 years ago

1.2.22-beta.28

2 years ago

1.2.22-beta.29

2 years ago

1.2.23-beta.1

2 years ago

1.2.23-beta.2

2 years ago

1.2.23-beta.3

2 years ago

1.2.23-beta.4

2 years ago

1.2.23-beta.5

2 years ago

1.2.23-beta.6

2 years ago

1.2.23-beta.7

2 years ago

1.2.23-beta.8

2 years ago

1.2.23-beta.9

2 years ago

1.2.22-beta.20

2 years ago

1.2.22-beta.21

2 years ago

1.2.22-beta.22

2 years ago

1.2.22-beta.17

2 years ago

1.2.22-beta.18

2 years ago

1.2.22-beta.19

2 years ago

1.2.22-beta.1

2 years ago

1.2.22-beta.3

2 years ago

1.2.22-beta.2

2 years ago

1.2.22-beta.5

2 years ago

1.2.22-beta.4

2 years ago

1.2.22-beta.7

2 years ago

1.2.22-beta.6

2 years ago

1.2.22-beta.8

2 years ago

1.2.21

2 years ago

1.2.22-beta.10

2 years ago

1.2.22-beta.11

2 years ago

1.2.22-beta.12

2 years ago

1.2.22-beta.13

2 years ago

1.2.22-beta.14

2 years ago

1.2.22-beta.15

2 years ago

1.2.22-beta.16

2 years ago

1.2.20-beta.34

2 years ago

1.2.20-beta.33

2 years ago

1.2.20-beta.36

2 years ago

1.2.20-beta.35

2 years ago

1.2.20-beta.38

2 years ago

1.2.20-beta.37

2 years ago

1.2.20-beta.39

2 years ago

1.2.20-beta.30

2 years ago

1.2.20-beta.32

2 years ago

1.2.20-beta.31

2 years ago

1.2.20-beta.23

2 years ago

1.2.20-beta.22

2 years ago

1.2.20-beta.25

2 years ago

1.2.20-beta.24

2 years ago

1.2.20-beta.27

2 years ago

1.2.20-beta.26

2 years ago

1.2.20-beta.29

2 years ago

1.2.20-beta.28

2 years ago

1.2.20-beta.21

2 years ago

1.2.20-beta.20

2 years ago

1.2.20-beta.11

2 years ago

1.2.20-beta.14

2 years ago

1.2.20-beta.13

2 years ago

1.2.20-beta.16

2 years ago

1.2.20-beta.15

2 years ago

1.2.20-beta.18

2 years ago

1.2.20-beta.17

2 years ago

1.2.20-beta.10

2 years ago

1.2.20-beta.19

2 years ago

1.2.20-beta.56

2 years ago

1.2.20-beta.55

2 years ago

1.2.18

2 years ago

1.2.20-beta.57

2 years ago

1.2.19

2 years ago

1.2.20-beta.50

2 years ago

1.2.20-beta.52

2 years ago

1.2.20-beta.51

2 years ago

1.2.20-beta.54

2 years ago

1.2.20-beta.53

2 years ago

1.2.20-beta.45

2 years ago

1.2.20-beta.44

2 years ago

1.2.20-beta.47

2 years ago

1.2.20-beta.46

2 years ago

1.2.20-beta.49

2 years ago

1.2.20-beta.48

2 years ago

1.2.20-beta.41

2 years ago

1.2.20-beta.40

2 years ago

1.2.20-beta.43

2 years ago

1.2.20-beta.42

2 years ago

1.2.20-beta.9

2 years ago

1.2.20-beta.8

2 years ago

1.2.20-beta.3

2 years ago

1.2.12

2 years ago

1.2.20-beta.2

2 years ago

1.2.13

2 years ago

1.2.20-beta.1

2 years ago

1.2.20-beta.7

2 years ago

1.2.16

2 years ago

1.2.20-beta.6

2 years ago

1.2.17

2 years ago

1.2.20-beta.5

2 years ago

1.2.14

2 years ago

1.2.20-beta.4

2 years ago

1.2.15

2 years ago

1.2.0

2 years ago

1.2.8-beta.31

2 years ago

1.2.8-beta.32

2 years ago

1.2.8-beta.30

2 years ago

1.2.8

2 years ago

1.2.7

2 years ago

1.2.6

2 years ago

1.2.5

2 years ago

1.2.4

2 years ago

1.2.3

2 years ago

1.2.2

2 years ago

1.2.1

2 years ago

1.2.8-beta.35

2 years ago

1.2.8-beta.36

2 years ago

1.2.8-beta.33

2 years ago

1.2.8-beta.34

2 years ago

1.2.8-beta.39

2 years ago

1.2.8-beta.37

2 years ago

1.2.8-beta.38

2 years ago

1.2.0-beta.34

2 years ago

1.2.8-beta.43

2 years ago

1.2.0-beta.33

2 years ago

1.2.8-beta.40

2 years ago

1.2.8-beta.41

2 years ago

1.2.0-beta.30

2 years ago

1.2.0-beta.32

2 years ago

1.2.0-beta.31

2 years ago

1.2.8-beta.46

2 years ago

1.2.8-beta.47

2 years ago

1.2.10

2 years ago

1.2.8-beta.44

2 years ago

1.2.11

2 years ago

1.2.8-beta.45

2 years ago

1.2.8-beta.48

2 years ago

1.2.8-beta.49

2 years ago

1.2.3-beta.9

2 years ago

1.2.8-beta.50

2 years ago

1.2.3-beta.7

2 years ago

1.2.3-beta.8

2 years ago

1.2.8-beta.53

2 years ago

1.2.3-beta.5

2 years ago

1.2.8-beta.54

2 years ago

1.2.3-beta.6

2 years ago

1.2.8-beta.51

2 years ago

1.2.3-beta.3

2 years ago

1.2.8-beta.52

2 years ago

1.2.3-beta.4

2 years ago

1.2.3-beta.1

2 years ago

1.2.3-beta.2

2 years ago

1.2.3-beta.0

2 years ago

1.2.8-beta.57

2 years ago

1.2.8-beta.58

2 years ago

1.2.8-beta.55

2 years ago

1.2.8-beta.56

2 years ago

1.2.8-beta.59

2 years ago

1.2.8-beta.60

2 years ago

1.2.8-beta.61

2 years ago

1.2.8-beta.64

2 years ago

1.2.8-beta.65

2 years ago

1.2.8-beta.62

2 years ago

1.2.8-beta.63

2 years ago

1.2.9

2 years ago

1.2.8-beta.68

2 years ago

1.2.8-beta.69

2 years ago

1.2.8-beta.66

2 years ago

1.2.8-beta.67

2 years ago

1.2.8-beta.71

2 years ago

1.2.8-beta.8

2 years ago

1.2.0-beta.9

2 years ago

1.2.8-beta.72

2 years ago

1.2.8-beta.9

2 years ago

1.2.0-beta.8

2 years ago

1.2.8-beta.70

2 years ago

1.2.8-beta.75

2 years ago

1.2.8-beta.76

2 years ago

1.2.8-beta.73

2 years ago

1.2.8-beta.74

2 years ago

1.2.4-beta.1

2 years ago

1.2.8-beta.1

2 years ago

1.2.4-beta.0

2 years ago

1.2.3-beta.20

2 years ago

1.2.8-beta.2

2 years ago

1.2.3-beta.21

2 years ago

1.2.8-beta.3

2 years ago

1.2.4-beta.2

2 years ago

1.2.3-beta.22

2 years ago

1.2.8-beta.4

2 years ago

1.2.3-beta.23

2 years ago

1.2.8-beta.5

2 years ago

1.2.3-beta.24

2 years ago

1.2.8-beta.6

2 years ago

1.2.3-beta.25

2 years ago

1.2.8-beta.7

2 years ago

1.2.0-beta.1

2 years ago

1.2.0-beta.0

2 years ago

1.2.8-beta.77

2 years ago

1.2.0-beta.3

2 years ago

1.2.8-beta.78

2 years ago

1.2.0-beta.2

2 years ago

1.2.0-beta.5

2 years ago

1.2.0-beta.4

2 years ago

1.2.0-beta.7

2 years ago

1.2.0-beta.6

2 years ago

1.2.3-beta.10

2 years ago

1.2.3-beta.11

2 years ago

1.2.3-beta.12

2 years ago

1.2.3-beta.13

2 years ago

1.2.3-beta.14

2 years ago

1.2.3-beta.15

2 years ago

1.2.3-beta.16

2 years ago

1.2.3-beta.17

2 years ago

1.2.3-beta.18

2 years ago

1.2.3-beta.19

2 years ago

1.2.0-beta.27

2 years ago

1.2.0-beta.26

2 years ago

1.2.0-beta.29

2 years ago

1.2.0-beta.28

2 years ago

1.2.0-beta.23

2 years ago

1.2.8-beta.10

2 years ago

1.2.0-beta.22

2 years ago

1.2.0-beta.25

2 years ago

1.2.0-beta.24

2 years ago

1.2.0-beta.21

2 years ago

1.2.0-beta.20

2 years ago

1.2.8-beta.19

2 years ago

1.2.8-beta.13

2 years ago

1.2.8-beta.14

2 years ago

1.2.8-beta.12

2 years ago

1.2.8-beta.17

2 years ago

1.2.8-beta.18

2 years ago

1.2.8-beta.15

2 years ago

1.2.8-beta.16

2 years ago

1.2.0-beta.16

2 years ago

1.2.0-beta.15

2 years ago

1.2.0-beta.18

2 years ago

1.2.0-beta.17

2 years ago

1.2.8-beta.20

2 years ago

1.2.0-beta.12

2 years ago

1.2.8-beta.21

2 years ago

1.2.0-beta.11

2 years ago

1.2.0-beta.14

2 years ago

1.2.0-beta.13

2 years ago

1.2.0-beta.10

2 years ago

1.2.8-beta.24

2 years ago

1.2.8-beta.25

2 years ago

1.2.8-beta.22

2 years ago

1.2.8-beta.28

2 years ago

1.2.8-beta.29

2 years ago

1.2.0-beta.19

2 years ago

1.2.8-beta.26

2 years ago

1.2.8-beta.27

2 years ago

1.1.8

3 years ago

1.1.7

3 years ago

1.1.6

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.20

3 years ago

1.0.19

3 years ago

1.0.18

3 years ago

1.0.17

3 years ago

1.0.16

3 years ago

1.0.15

3 years ago

1.0.14

3 years ago

1.0.13

3 years ago

1.0.12

3 years ago

1.0.11

3 years ago

1.0.10

3 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago