1.2.43 • Published 1 month ago

mycena-store v1.2.43

Weekly downloads
-
License
MIT
Repository
github
Last release
1 month 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 month ago

1.2.41

2 months ago

1.2.42

2 months ago

1.2.40

3 months ago

1.2.34

3 months ago

1.2.35

3 months ago

1.2.33

3 months ago

1.2.38

3 months ago

1.2.39

3 months ago

1.2.36

3 months ago

1.2.37

3 months ago

1.2.32

3 months ago

1.2.31

3 months ago

1.2.27

3 months ago

1.2.28

3 months ago

1.2.25

3 months ago

1.2.26

3 months ago

1.2.29

3 months ago

1.2.30

3 months ago

1.2.24-beta.17

4 months ago

1.2.24-beta.16

5 months ago

1.2.24-beta.15

5 months ago

1.2.24-beta.9

5 months ago

1.2.24-beta.8

5 months ago

1.2.24-beta.7

5 months ago

1.2.24-beta.6

5 months ago

1.2.24-beta.5

5 months ago

1.2.24-beta.4

5 months ago

1.2.24-beta.3

5 months ago

1.2.24-beta.14

5 months ago

1.2.24-beta.13

5 months ago

1.2.24-beta.12

5 months ago

1.2.24-beta.11

5 months ago

1.2.24-beta.10

5 months ago

1.2.24-beta.2

5 months ago

1.2.24-beta.1

5 months ago

1.2.23-beta.16

5 months ago

1.2.23-beta.17

5 months ago

1.2.23-beta.18

5 months ago

1.2.23-beta.19

5 months ago

1.2.23-beta.12

5 months ago

1.2.23-beta.13

5 months ago

1.2.23-beta.14

5 months ago

1.2.23-beta.15

5 months ago

1.2.23-beta.10

5 months ago

1.2.23-beta.11

5 months ago

1.2.23-beta.20

5 months ago

1.2.23

7 months ago

1.2.24

5 months ago

1.2.22-beta.30

7 months ago

1.2.22-beta.31

7 months ago

1.2.22-beta.23

8 months ago

1.2.22-beta.24

8 months ago

1.2.22-beta.25

7 months ago

1.2.22-beta.26

7 months ago

1.2.22-beta.27

7 months ago

1.2.22-beta.28

7 months ago

1.2.22-beta.29

7 months ago

1.2.23-beta.1

7 months ago

1.2.23-beta.2

7 months ago

1.2.23-beta.3

7 months ago

1.2.23-beta.4

7 months ago

1.2.23-beta.5

7 months ago

1.2.23-beta.6

7 months ago

1.2.23-beta.7

7 months ago

1.2.23-beta.8

7 months ago

1.2.23-beta.9

5 months ago

1.2.22-beta.20

8 months ago

1.2.22-beta.21

8 months ago

1.2.22-beta.22

8 months ago

1.2.22-beta.17

8 months ago

1.2.22-beta.18

8 months ago

1.2.22-beta.19

8 months ago

1.2.22-beta.1

9 months ago

1.2.22-beta.3

9 months ago

1.2.22-beta.2

9 months ago

1.2.22-beta.5

9 months ago

1.2.22-beta.4

9 months ago

1.2.22-beta.7

9 months ago

1.2.22-beta.6

9 months ago

1.2.22-beta.8

9 months ago

1.2.21

10 months ago

1.2.22-beta.10

9 months ago

1.2.22-beta.11

9 months ago

1.2.22-beta.12

9 months ago

1.2.22-beta.13

9 months ago

1.2.22-beta.14

9 months ago

1.2.22-beta.15

9 months ago

1.2.22-beta.16

9 months ago

1.2.20-beta.34

1 year ago

1.2.20-beta.33

1 year ago

1.2.20-beta.36

1 year ago

1.2.20-beta.35

1 year ago

1.2.20-beta.38

1 year ago

1.2.20-beta.37

1 year ago

1.2.20-beta.39

1 year ago

1.2.20-beta.30

1 year ago

1.2.20-beta.32

1 year ago

1.2.20-beta.31

1 year ago

1.2.20-beta.23

1 year ago

1.2.20-beta.22

1 year ago

1.2.20-beta.25

1 year ago

1.2.20-beta.24

1 year ago

1.2.20-beta.27

1 year ago

1.2.20-beta.26

1 year ago

1.2.20-beta.29

1 year ago

1.2.20-beta.28

1 year ago

1.2.20-beta.21

1 year ago

1.2.20-beta.20

1 year ago

1.2.20-beta.11

1 year ago

1.2.20-beta.14

1 year ago

1.2.20-beta.13

1 year ago

1.2.20-beta.16

1 year ago

1.2.20-beta.15

1 year ago

1.2.20-beta.18

1 year ago

1.2.20-beta.17

1 year ago

1.2.20-beta.10

1 year ago

1.2.20-beta.19

1 year ago

1.2.20-beta.56

1 year ago

1.2.20-beta.55

1 year ago

1.2.18

1 year ago

1.2.20-beta.57

1 year ago

1.2.19

1 year ago

1.2.20-beta.50

1 year ago

1.2.20-beta.52

1 year ago

1.2.20-beta.51

1 year ago

1.2.20-beta.54

1 year ago

1.2.20-beta.53

1 year ago

1.2.20-beta.45

1 year ago

1.2.20-beta.44

1 year ago

1.2.20-beta.47

1 year ago

1.2.20-beta.46

1 year ago

1.2.20-beta.49

1 year ago

1.2.20-beta.48

1 year ago

1.2.20-beta.41

1 year ago

1.2.20-beta.40

1 year ago

1.2.20-beta.43

1 year ago

1.2.20-beta.42

1 year ago

1.2.20-beta.9

1 year ago

1.2.20-beta.8

1 year ago

1.2.20-beta.3

1 year ago

1.2.12

1 year ago

1.2.20-beta.2

1 year ago

1.2.13

1 year ago

1.2.20-beta.1

1 year ago

1.2.20-beta.7

1 year ago

1.2.16

1 year ago

1.2.20-beta.6

1 year ago

1.2.17

1 year ago

1.2.20-beta.5

1 year ago

1.2.14

1 year ago

1.2.20-beta.4

1 year ago

1.2.15

1 year ago

1.2.0

1 year ago

1.2.8-beta.31

1 year ago

1.2.8-beta.32

1 year ago

1.2.8-beta.30

1 year ago

1.2.8

1 year ago

1.2.7

1 year ago

1.2.6

1 year ago

1.2.5

1 year ago

1.2.4

1 year ago

1.2.3

1 year ago

1.2.2

1 year ago

1.2.1

1 year ago

1.2.8-beta.35

1 year ago

1.2.8-beta.36

1 year ago

1.2.8-beta.33

1 year ago

1.2.8-beta.34

1 year ago

1.2.8-beta.39

1 year ago

1.2.8-beta.37

1 year ago

1.2.8-beta.38

1 year ago

1.2.0-beta.34

1 year ago

1.2.8-beta.43

1 year ago

1.2.0-beta.33

1 year ago

1.2.8-beta.40

1 year ago

1.2.8-beta.41

1 year ago

1.2.0-beta.30

1 year ago

1.2.0-beta.32

1 year ago

1.2.0-beta.31

1 year ago

1.2.8-beta.46

1 year ago

1.2.8-beta.47

1 year ago

1.2.10

1 year ago

1.2.8-beta.44

1 year ago

1.2.11

1 year ago

1.2.8-beta.45

1 year ago

1.2.8-beta.48

1 year ago

1.2.8-beta.49

1 year ago

1.2.3-beta.9

1 year ago

1.2.8-beta.50

1 year ago

1.2.3-beta.7

1 year ago

1.2.3-beta.8

1 year ago

1.2.8-beta.53

1 year ago

1.2.3-beta.5

1 year ago

1.2.8-beta.54

1 year ago

1.2.3-beta.6

1 year ago

1.2.8-beta.51

1 year ago

1.2.3-beta.3

1 year ago

1.2.8-beta.52

1 year ago

1.2.3-beta.4

1 year ago

1.2.3-beta.1

1 year ago

1.2.3-beta.2

1 year ago

1.2.3-beta.0

1 year ago

1.2.8-beta.57

1 year ago

1.2.8-beta.58

1 year ago

1.2.8-beta.55

1 year ago

1.2.8-beta.56

1 year ago

1.2.8-beta.59

1 year ago

1.2.8-beta.60

1 year ago

1.2.8-beta.61

1 year ago

1.2.8-beta.64

1 year ago

1.2.8-beta.65

1 year ago

1.2.8-beta.62

1 year ago

1.2.8-beta.63

1 year ago

1.2.9

1 year ago

1.2.8-beta.68

1 year ago

1.2.8-beta.69

1 year ago

1.2.8-beta.66

1 year ago

1.2.8-beta.67

1 year ago

1.2.8-beta.71

1 year ago

1.2.8-beta.8

1 year ago

1.2.0-beta.9

1 year ago

1.2.8-beta.72

1 year ago

1.2.8-beta.9

1 year ago

1.2.0-beta.8

1 year ago

1.2.8-beta.70

1 year ago

1.2.8-beta.75

1 year ago

1.2.8-beta.76

1 year ago

1.2.8-beta.73

1 year ago

1.2.8-beta.74

1 year ago

1.2.4-beta.1

1 year ago

1.2.8-beta.1

1 year ago

1.2.4-beta.0

1 year ago

1.2.3-beta.20

1 year ago

1.2.8-beta.2

1 year ago

1.2.3-beta.21

1 year ago

1.2.8-beta.3

1 year ago

1.2.4-beta.2

1 year ago

1.2.3-beta.22

1 year ago

1.2.8-beta.4

1 year ago

1.2.3-beta.23

1 year ago

1.2.8-beta.5

1 year ago

1.2.3-beta.24

1 year ago

1.2.8-beta.6

1 year ago

1.2.3-beta.25

1 year ago

1.2.8-beta.7

1 year ago

1.2.0-beta.1

1 year ago

1.2.0-beta.0

1 year ago

1.2.8-beta.77

1 year ago

1.2.0-beta.3

1 year ago

1.2.8-beta.78

1 year ago

1.2.0-beta.2

1 year ago

1.2.0-beta.5

1 year ago

1.2.0-beta.4

1 year ago

1.2.0-beta.7

1 year ago

1.2.0-beta.6

1 year ago

1.2.3-beta.10

1 year ago

1.2.3-beta.11

1 year ago

1.2.3-beta.12

1 year ago

1.2.3-beta.13

1 year ago

1.2.3-beta.14

1 year ago

1.2.3-beta.15

1 year ago

1.2.3-beta.16

1 year ago

1.2.3-beta.17

1 year ago

1.2.3-beta.18

1 year ago

1.2.3-beta.19

1 year ago

1.2.0-beta.27

1 year ago

1.2.0-beta.26

1 year ago

1.2.0-beta.29

1 year ago

1.2.0-beta.28

1 year ago

1.2.0-beta.23

1 year ago

1.2.8-beta.10

1 year ago

1.2.0-beta.22

1 year ago

1.2.0-beta.25

1 year ago

1.2.0-beta.24

1 year ago

1.2.0-beta.21

1 year ago

1.2.0-beta.20

1 year ago

1.2.8-beta.19

1 year ago

1.2.8-beta.13

1 year ago

1.2.8-beta.14

1 year ago

1.2.8-beta.12

1 year ago

1.2.8-beta.17

1 year ago

1.2.8-beta.18

1 year ago

1.2.8-beta.15

1 year ago

1.2.8-beta.16

1 year ago

1.2.0-beta.16

1 year ago

1.2.0-beta.15

1 year ago

1.2.0-beta.18

1 year ago

1.2.0-beta.17

1 year ago

1.2.8-beta.20

1 year ago

1.2.0-beta.12

1 year ago

1.2.8-beta.21

1 year ago

1.2.0-beta.11

1 year ago

1.2.0-beta.14

1 year ago

1.2.0-beta.13

1 year ago

1.2.0-beta.10

1 year ago

1.2.8-beta.24

1 year ago

1.2.8-beta.25

1 year ago

1.2.8-beta.22

1 year ago

1.2.8-beta.28

1 year ago

1.2.8-beta.29

1 year ago

1.2.0-beta.19

1 year ago

1.2.8-beta.26

1 year ago

1.2.8-beta.27

1 year ago

1.1.8

2 years ago

1.1.7

2 years ago

1.1.6

2 years ago

1.1.5

2 years ago

1.1.4

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.20

2 years ago

1.0.19

2 years ago

1.0.18

2 years ago

1.0.17

2 years ago

1.0.16

2 years ago

1.0.15

2 years ago

1.0.14

2 years ago

1.0.13

2 years ago

1.0.12

2 years ago

1.0.11

2 years ago

1.0.10

2 years ago

1.0.9

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago