@yanqirenshi/ihub.srv 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -0
- package/LICENSE +21 -0
- package/README.md +242 -3
- package/bin/ihub-srv.mjs +367 -0
- package/package.json +57 -6
- package/src/app.mjs +147 -0
- package/src/github.mjs +111 -0
- package/src/guard.mjs +32 -0
- package/src/index.mjs +5 -0
- package/src/schemas/deployment/edges.schema.json +71 -0
- package/src/schemas/deployment/nodes.schema.json +102 -0
- package/src/schemas/er/attributes.schema.json +56 -0
- package/src/schemas/er/entities.schema.json +165 -0
- package/src/schemas/er/identifiers.schema.json +56 -0
- package/src/schemas/er/relationships.schema.json +118 -0
- package/src/schemas/er/schemas.schema.json +56 -0
- package/src/schemas/local/account_menus.schema.json +11 -0
- package/src/schemas/overview/edges.schema.json +32 -0
- package/src/schemas/overview/nodes.schema.json +39 -0
- package/src/schemas/sitemap/edges.schema.json +63 -0
- package/src/schemas/sitemap/nodes.schema.json +121 -0
- package/src/schemas/systemic_design/sections.schema.json +27 -0
- package/src/schemas/tm/attributes.schema.json +52 -0
- package/src/schemas/tm/entities.schema.json +212 -0
- package/src/schemas/tm/identifiers.schema.json +52 -0
- package/src/schemas/tm/relationships.schema.json +166 -0
- package/src/schemas/wbs/projects.schema.json +26 -0
- package/src/schemas/wbs/wbs.schema.json +28 -0
- package/src/schemas/wbs/workpackages.schema.json +28 -0
- package/src/serve.mjs +14 -0
- package/src/services/DataService.mjs +309 -0
- package/src/stores/FileStore.mjs +71 -0
- package/src/tools/convert-legacy-data.mjs +103 -0
- package/src/tools/migrate-er-hierarchical.mjs +212 -0
- package/src/validation/index.mjs +188 -0
- package/src/validation/rules.mjs +59 -0
- package/src/watcher.mjs +33 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# 更新履歴 (@yanqirenshi/ihub.srv)
|
|
2
|
+
|
|
3
|
+
`@yanqirenshi/ihub.core` と同じ版にそろえて出します。
|
|
4
|
+
版は [semver](https://semver.org/lang/ja/) で付けます。0.x の間は、API・データのフォーマット・CLI を変えるときに、minor を上げます。
|
|
5
|
+
(リポジトリ全体の更新履歴は、[ルートの CHANGELOG.md](https://github.com/yanqirenshi/iHub/blob/main/CHANGELOG.md) にあります)
|
|
6
|
+
|
|
7
|
+
## 0.1.0 (2026-11)
|
|
8
|
+
|
|
9
|
+
iHub の API サーバー (`server/`) を、npm のパッケージにした、最初の版です。
|
|
10
|
+
iHub をフォルダごとコピーして使っていたアプリは、[コピー版からの移行](https://github.com/yanqirenshi/iHub/blob/main/docs/src/content/migrate.md) を見てください。
|
|
11
|
+
|
|
12
|
+
### 切り出し
|
|
13
|
+
|
|
14
|
+
- 公開する名前: `createApp`・`serve`・`registerGithub`・`createValidation`・`validateData`・`validateDataDir`・`COLLECTIONS`。
|
|
15
|
+
- スキーマ (`src/schemas/`) と、整合性のルールを、パッケージに入れた。
|
|
16
|
+
|
|
17
|
+
### `createApp`
|
|
18
|
+
|
|
19
|
+
- `app_name`: ログと、書き込んだ画面の id を送るヘッダー名 (`X-{app_name}-Client`) の名前。(既定 `iHub`)
|
|
20
|
+
- `extensions`: アプリ固有のドメインを足す。`schemas_dir` (追加のスキーマ)・`rules` (追加の整合性ルール)・`routes` (追加のルート)。
|
|
21
|
+
- `github`: GitHub の OAuth の設定。(省略すると、環境変数 `GITHUB_OAUTH_CLIENT_ID`・`GITHUB_OAUTH_CLIENT_SECRET`)
|
|
22
|
+
|
|
23
|
+
### CLI `ihub-srv`
|
|
24
|
+
|
|
25
|
+
- `ihub-srv [--data <dir>] [--static <dir>] [--port <n>] [--app-name <name>]`: 起動する。作業フォルダの `.env.local` を、環境変数として読む。
|
|
26
|
+
- `ihub-srv check <dir>... [--schemas <dir>]`: データのフォルダを、スキーマとルールで検証する。
|
|
27
|
+
- `ihub-srv init [dir]`: 雛形から `data/` を作る。
|
|
28
|
+
- `ihub-srv init --app [dir] [--force | --skip-existing | --only <path>]`: 雛形から、アプリのファイル (`src/`・`public/` など) を作る。
|
|
29
|
+
- `ihub-srv convert-legacy <src/data> <data> [--force]`: 古い形式のデータを、`data/` の JSON に変換する。
|
|
30
|
+
- `ihub-srv migrate-er <data>`: ER のデータを、フラット形式から階層形式に変換する。
|
|
31
|
+
|
|
32
|
+
### データのフォーマット
|
|
33
|
+
|
|
34
|
+
- ER のエンティティに、テーブルの色 `color: { base, inner }` (どちらも任意) を足した。(`@yanqirenshi/model.er` 0.2.0 のスキーマ)
|
|
35
|
+
- `ihub-srv migrate-er` が、フラット形式の TABLE・COLUMN の、写し先の決まっていない項目 (`color` など) を、そのまま entity (COLUMN は identifiers / attributes) に写す。
|
|
36
|
+
|
|
37
|
+
### GitHub の OAuth
|
|
38
|
+
|
|
39
|
+
- OAuth App の Web アプリケーションフロー。(`GET /api/github/token`・`GET /api/github/oauth/login`・`GET /api/github/oauth/callback`・`DELETE /api/github/token`)
|
|
40
|
+
- コードとトークンの交換は、サーバーで行う。トークンは、メモリにだけ持つ。
|
|
41
|
+
- 設定が無いときは、`configured: false` を返すだけで、ほかは変わらない。
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Satoshi Iwasaki (yanqirenshi@gmail.com)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,242 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
# @yanqirenshi/ihub.srv
|
|
2
|
+
|
|
3
|
+
iHub の API サーバーです。
|
|
4
|
+
`data/` の JSON を、スキーマとルールで検証しながら読み書きします。
|
|
5
|
+
iHub の画面 (`@yanqirenshi/ihub.core`) は、起動時にこの API サーバーから全データを読み込み、編集した内容を API サーバーへ保存します。
|
|
6
|
+
|
|
7
|
+
親の issue: [#65](https://github.com/yanqirenshi/iHub/issues/65)
|
|
8
|
+
|
|
9
|
+
## 構成
|
|
10
|
+
|
|
11
|
+
| | | |
|
|
12
|
+
|---|------------|---------------------------------------------------------------------|
|
|
13
|
+
| - | bin/ihub-srv.mjs | CLI (起動・check・init・convert-legacy・migrate-er) |
|
|
14
|
+
| - | src/index.mjs | 公開するもの (createApp・serve・validateData・validateDataDir・COLLECTIONS) |
|
|
15
|
+
| - | src/app.mjs | API のルート (createApp) |
|
|
16
|
+
| - | src/serve.mjs | 127.0.0.1 で待ち受ける |
|
|
17
|
+
| - | src/guard.mjs | ほかのサイトからの要求を断る (Host・Origin・Content-Type の確認) |
|
|
18
|
+
| - | src/watcher.mjs | data/ の変更を見張る (エディタや git での変更を、画面へ知らせるため) |
|
|
19
|
+
| d | src/services | 読み書きの手順 (検証・採番・競合の検出) |
|
|
20
|
+
| d | src/stores | data/ の JSON ファイルの読み書き |
|
|
21
|
+
| d | src/schemas | コレクションごとの JSON Schema ({domain}/{collection}.schema.json) |
|
|
22
|
+
| d | src/validation | スキーマと、コレクションをまたぐルール (id の重複・参照の整合性) による検証 |
|
|
23
|
+
| d | src/tools | `convert-legacy`・`migrate-er` の変換 (古い形式のデータを、新しい形式に変換する) |
|
|
24
|
+
| d | test | テスト |
|
|
25
|
+
|
|
26
|
+
## CLI
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
ihub-srv [--data <dir>] [--static <dir>] [--port <n>] [--app-name <name>]
|
|
30
|
+
ihub-srv check <dir>... [--schemas <dir>]
|
|
31
|
+
ihub-srv init [dir]
|
|
32
|
+
ihub-srv init --app [dir] [--force | --skip-existing | --only <path>...]
|
|
33
|
+
ihub-srv convert-legacy <古い src/data のフォルダ> <data のフォルダ> [--force]
|
|
34
|
+
ihub-srv migrate-er <data のフォルダ>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 起動
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
ihub-srv --data data
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
| オプション | 内容 | 既定 |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| `--data <dir>` | データのフォルダ | `data` |
|
|
46
|
+
| `--static <dir>` | ビルドした画面のフォルダ。指定すると、API と画面を一緒に出す | 無し (API だけ) |
|
|
47
|
+
| `--port <n>` | 待ち受けるポート | 環境変数 `IHUB_API_PORT`、無ければ 4000 |
|
|
48
|
+
| `--app-name <name>` | `createApp` の `app_name`。画面の設定の `app.name` と同じ名前にする | `iHub` |
|
|
49
|
+
|
|
50
|
+
127.0.0.1 で待ち受けます。
|
|
51
|
+
作業フォルダの `.env.local` があれば、環境変数として読み込みます。(すでにある環境変数は上書きしません)
|
|
52
|
+
`data` のフォルダの JSON の変更も見張り、エディタや git で変えたときも画面へ知らせます。
|
|
53
|
+
|
|
54
|
+
### check
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
ihub-srv check data
|
|
58
|
+
ihub-srv check data packages/ihub.core/examples/data
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
指定したデータのフォルダを、スキーマとルールで検証します。
|
|
62
|
+
問題があれば、場所と理由を表示して、1 で終わります。
|
|
63
|
+
`--schemas` には、アプリが足したスキーマのフォルダ (`createApp` の `extensions.schemas_dir`) を指定します。
|
|
64
|
+
|
|
65
|
+
### init
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
ihub-srv init data
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
雛形 (`@yanqirenshi/ihub.core` の `examples/data`) から、データのフォルダを作ります。
|
|
72
|
+
フォルダに同じ名前のファイルがあるときは、何も書かずに 1 で終わります。
|
|
73
|
+
|
|
74
|
+
### init --app
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
ihub-srv init --app [dir]
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
雛形 (`@yanqirenshi/ihub.core` の `examples/app`) から、アプリのファイル (`src/index.js`・`src/Router.js`・`src/config/`・`src/operators/`・`src/wbs/`・`src/setupProxy.js`・`public/`・`.gitignore`・`.env.local.template` など) を作ります。
|
|
81
|
+
`dir` の既定は、作業フォルダです。
|
|
82
|
+
|
|
83
|
+
| オプション | 内容 |
|
|
84
|
+
|---|---|
|
|
85
|
+
| (なし) | 同じ名前のファイルがあるときは、何も書かずに 1 で終わります。 |
|
|
86
|
+
| `--force` | 上書きします。 |
|
|
87
|
+
| `--skip-existing` | すでにあるファイルはそのままにして、無いものだけを作ります。 |
|
|
88
|
+
| `--only <path>` | 雛形のうち、`path` (ファイル、またはフォルダ。例: `src/index.js`) だけを、上書きして作ります。何度でも指定できます。`package.json` は変えません。 |
|
|
89
|
+
|
|
90
|
+
`package.json` があるときは、足りない項目 (`dependencies`・`scripts`・`overrides`・`eslintConfig`・`browserslist`) だけを足します。(すでにある項目は変えません。`--only` のときは、触りません) 無いときは、雛形から作ります。
|
|
91
|
+
作ったあとは、`npm install` を実行してください。
|
|
92
|
+
|
|
93
|
+
### convert-legacy
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
ihub-srv convert-legacy src/data data
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
データが `src/data/*.js` だったころ ([#21](https://github.com/yanqirenshi/iHub/pull/21) より前) の iHub をコピーしたアプリのデータを、`data/` の JSON に変換します。
|
|
100
|
+
|
|
101
|
+
- 書き出し先に同じ名前のファイルがあるときは、何も書かずに 1 で終わります。(上書きするときは `--force` を付けます)
|
|
102
|
+
- `src/data/` の `ACCOUNT_MENUS.js`・`ICONS.js`・`OPERATOR_ITEMS.js` は変換しません。`src/config/` に移します。
|
|
103
|
+
- ER は、階層形式にして書きます。
|
|
104
|
+
|
|
105
|
+
### migrate-er
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
ihub-srv migrate-er data
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
`data/er/` を、フラット形式 (`columns.json`・`column_instances.json`・`ports.json` がある形) から、階層形式 (`identifiers.json`・`attributes.json` など。`@yanqirenshi/model.er` のレコード) に変換します。
|
|
112
|
+
変換したデータを検査して (問題があれば、何も書かずに 1 で終わります)、書き換えます。
|
|
113
|
+
変換済みのときは、止まります。
|
|
114
|
+
|
|
115
|
+
フラット形式の項目のうち、階層形式に写し先が決まっていないもの (TABLE の `color` など、アプリが足した項目) は、そのまま entity (COLUMN は identifiers / attributes) に写します。
|
|
116
|
+
|
|
117
|
+
## createApp
|
|
118
|
+
|
|
119
|
+
```js
|
|
120
|
+
import { createApp, serve } from '@yanqirenshi/ihub.srv';
|
|
121
|
+
|
|
122
|
+
const app = createApp({
|
|
123
|
+
data_dir: 'data',
|
|
124
|
+
static_dir: 'build', // 省略すると、API だけ
|
|
125
|
+
watch: true,
|
|
126
|
+
app_name: 'iHub',
|
|
127
|
+
extensions: {
|
|
128
|
+
schemas_dir: 'server/schemas',
|
|
129
|
+
rules: { mydomain: (data)=> [] },
|
|
130
|
+
routes: (app)=> {},
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
serve(app, { port: 4000, app_name: 'iHub' });
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
| 引数 | 内容 | 既定 |
|
|
138
|
+
|---|---|---|
|
|
139
|
+
| `data_dir` | データのフォルダ | (必須) |
|
|
140
|
+
| `static_dir` | ビルドした画面のフォルダ。指定したときだけ配信する | `null` |
|
|
141
|
+
| `watch` | `data_dir` の変更を見張って、画面へ知らせるか | `false` |
|
|
142
|
+
| `app_name` | ログの名前と、書き込んだ画面の id を送るヘッダー名 (`X-{app_name}-Client`) | `iHub` |
|
|
143
|
+
| `extensions.schemas_dir` | アプリが足すスキーマのフォルダ (`{domain}/{collection}.schema.json`)。パッケージのスキーマと同じ名前のコレクションは足せない | 無し |
|
|
144
|
+
| `extensions.rules` | アプリが足す整合性ルール。`{ ドメイン: (そのドメインのコレクション)=> エラーのメッセージの配列 }`。パッケージのルールと同じドメインのときは、両方を検査する | 無し |
|
|
145
|
+
| `github` | GitHub の OAuth の設定 `{ client_id, client_secret }`。省略すると、環境変数 `GITHUB_OAUTH_CLIENT_ID`・`GITHUB_OAUTH_CLIENT_SECRET` から読む。どちらも無いときは、`/api/github/token` が `configured: false` を返すだけ | 環境変数 |
|
|
146
|
+
| `extensions.routes` | 追加のルート。`(app)=> {}` で Hono のアプリを受け取る。`/api/{domain}/{collection}` より先に登録する | 無し |
|
|
147
|
+
|
|
148
|
+
`app_name` が `iHub` のときは `X-iHub-Client`、`iwo Studio` のときは `X-iwo-Studio-Client` です。
|
|
149
|
+
英数字とハイフン以外の文字は `-` にします。
|
|
150
|
+
ヘッダー名の規則は、`x-{app_name の英数字とハイフン以外を - にして、小文字にしたもの}-client` です。
|
|
151
|
+
画面 (`@yanqirenshi/ihub.core`) は、設定の `app.name` から、同じ規則でヘッダー名を作ります。(`packages/ihub.core/src/config.js` の `clientHeaderName`。規則を変えるときは、両方を合わせてください)
|
|
152
|
+
|
|
153
|
+
コレクションの一覧 (`COLLECTIONS`) は、パッケージの `src/schemas/` と `extensions.schemas_dir` の両方から作ります。
|
|
154
|
+
|
|
155
|
+
## API
|
|
156
|
+
|
|
157
|
+
| メソッド | パス | 内容 |
|
|
158
|
+
|---|---|---|
|
|
159
|
+
| GET | /api/data | 全データと、コレクションごとの ETag |
|
|
160
|
+
| GET | /api/events | 変更の通知 (Server-Sent Events) |
|
|
161
|
+
| GET | /api/{domain}/{collection} | コレクション |
|
|
162
|
+
| PUT | /api/{domain}/{collection} | コレクション全体を書き換える (If-Match が必要) |
|
|
163
|
+
| PATCH | /api/{domain}/{collection} | オブジェクトのコレクションを、JSON Merge Patch で書き換える |
|
|
164
|
+
| POST | /api/{domain}/{collection} | レコードを追加する (id が無ければ振る) |
|
|
165
|
+
| PATCH | /api/{domain}/{collection}/{id} | レコードを、JSON Merge Patch で書き換える |
|
|
166
|
+
| DELETE | /api/{domain}/{collection}/{id} | レコードを削除する (参照されていれば 409) |
|
|
167
|
+
|
|
168
|
+
- 書き込む前に、ドメインのデータ全体をスキーマとルールで検証します。合わないときは 400 で理由を返します。
|
|
169
|
+
- If-Match に ETag を指定すると、読み込んだあとにほかで変更されていたときは 412 を返します。
|
|
170
|
+
- 書き込みは 1 つずつ順に行い、一時ファイルに書いてから置き換えます。
|
|
171
|
+
- 書き込むときに `X-{app_name}-Client` ヘッダー (既定は X-iHub-Client) で画面 (タブ) の id を送ると、変更の通知にその id が付きます。
|
|
172
|
+
|
|
173
|
+
## GitHub の OAuth
|
|
174
|
+
|
|
175
|
+
GitHub の OAuth App (Web アプリケーションフロー) で、画面が GitHub に接続するためのトークンを得ます。
|
|
176
|
+
コードとトークンの交換は、client secret を画面に出さないため、API サーバーが行います。
|
|
177
|
+
トークンは、API サーバーのメモリにだけ持ちます。(ファイルには書きません。API サーバーを起動し直したら、認証し直します)
|
|
178
|
+
|
|
179
|
+
| メソッド | パス | 内容 |
|
|
180
|
+
|---|---|---|
|
|
181
|
+
| GET | /api/github/token | `{ configured, token }`。configured は OAuth App が設定されているか、token は OAuth で得たトークン (無ければ null) |
|
|
182
|
+
| GET | /api/github/oauth/login | GitHub の認可画面へ送り出す。`return_to` に、認証のあとに戻る画面のパス (この画面の中のパスだけ) を指定する |
|
|
183
|
+
| GET | /api/github/oauth/callback | GitHub から戻ってくる。コードをトークンに替えて、`return_to` へ戻す |
|
|
184
|
+
| DELETE | /api/github/token | OAuth のトークンを捨てる (接続を切る) |
|
|
185
|
+
|
|
186
|
+
- OAuth App の Client ID と Client secret は、`createApp` の `github` か、環境変数 `GITHUB_OAUTH_CLIENT_ID`・`GITHUB_OAUTH_CLIENT_SECRET` で渡します。どちらも無いときは、`configured: false` を返すだけで、ほかは変わりません。
|
|
187
|
+
- OAuth App の Authorization callback URL は、画面を開く URL の `/api/github/oauth/callback` にします。(例: 開発サーバーなら `http://localhost:3000/api/github/oauth/callback`、`ihub-srv --static` なら `http://localhost:4000/api/github/oauth/callback`)
|
|
188
|
+
- 求める権限は `repo`・`project`・`read:org` です。
|
|
189
|
+
- `/api/{domain}/{collection}` より先に登録するので、`/api/github/token` がコレクションと見なされることはありません。
|
|
190
|
+
- `/api/github/token` が、トークンを画面に返せるのは、API サーバーが、`guard` (`Host`・`Origin` の確認) で、このパソコンの中からの要求だけを受け付けているためです。この確認を外して公開しないでください。
|
|
191
|
+
- callback URL は、要求の `Host` から、`http://` 固定で作ります。`https` の後ろ (リバースプロキシなど) に置く構成は、想定していません。
|
|
192
|
+
|
|
193
|
+
## 変更の通知
|
|
194
|
+
|
|
195
|
+
GET /api/events に接続すると、次の通知が届きます。
|
|
196
|
+
|
|
197
|
+
| 通知 | 内容 |
|
|
198
|
+
|---|---|
|
|
199
|
+
| ready | 接続したときに送る。全コレクションの ETag |
|
|
200
|
+
| changed | コレクションが変わった。(name・etag・client) API での書き込みのほか、エディタや git でファイルを変えたときも送る |
|
|
201
|
+
| invalid | ファイルが変わったが、フォーマットやルールに合っていない。(name・errors) |
|
|
202
|
+
|
|
203
|
+
画面は、changed を受けたら、そのコレクションを読み直します。
|
|
204
|
+
|
|
205
|
+
## id の振り方
|
|
206
|
+
|
|
207
|
+
コレクションの最大の id + 1 から、ドメインの中で使われていない id まで進めます。
|
|
208
|
+
コレクションが空のときは、スキーマの x-id-start から振ります。(無ければ 1)
|
|
209
|
+
|
|
210
|
+
## 個人の設定
|
|
211
|
+
|
|
212
|
+
domain が local のコレクション (例: local/account_menus) は、個人の設定です。
|
|
213
|
+
data/local/ に保存し、git では共有しません。
|
|
214
|
+
ファイルが無いときは、スキーマの default を返します。
|
|
215
|
+
|
|
216
|
+
## テスト
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
npm test -w @yanqirenshi/ihub.srv
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
iHub のリポジトリのルートで `npm run test:data` を実行すると、`data/` と雛形のデータの検証 (`ihub-srv check`) に続けて、このテストも動きます。
|
|
223
|
+
|
|
224
|
+
## コレクションを追加するとき
|
|
225
|
+
|
|
226
|
+
パッケージのコレクション (iHub 本体のもの) を足すとき:
|
|
227
|
+
|
|
228
|
+
1. `src/schemas/{domain}/{collection}.schema.json` を作ります。
|
|
229
|
+
2. `data/{domain}/{collection}.json` と、雛形のデータ (`packages/ihub.core/examples/data/{domain}/{collection}.json`) を作ります。
|
|
230
|
+
3. コレクションをまたぐ検査が必要なときは、`src/validation/rules.mjs` に書きます。
|
|
231
|
+
|
|
232
|
+
アプリ固有のコレクションを足すとき:
|
|
233
|
+
|
|
234
|
+
1. `extensions.schemas_dir` のフォルダに、`{domain}/{collection}.schema.json` を作ります。
|
|
235
|
+
2. `data/{domain}/{collection}.json` を作ります。
|
|
236
|
+
3. コレクションをまたぐ検査が必要なときは、`extensions.rules` に書きます。
|
|
237
|
+
4. `ihub-srv check data --schemas <extensions.schemas_dir のフォルダ>` で確かめます。
|
|
238
|
+
|
|
239
|
+
## 古い形式のデータを変換するとき
|
|
240
|
+
|
|
241
|
+
`ihub-srv convert-legacy` (データが `src/data/*.js` のとき) と、`ihub-srv migrate-er` (ER がフラット形式のとき) で変換できます。
|
|
242
|
+
コピー版のアプリを、パッケージを使う形に移す手順全体は、マニュアルの「コピー版からの移行」を見てください。
|