@loutrejs/cli
v0.10.1
Published
Loutre Applicationを検査・可視化・buildするDeveloper CLIです。Application DefinitionからGraphを読み取り、validation、runtime compatibility check、deployment artifact、OpenAPI documentを生成できます。
Readme
@loutrejs/cli
Loutre Applicationを検査・可視化・buildするDeveloper CLIです。Application DefinitionからGraphを読み取り、validation、runtime compatibility check、deployment artifact、OpenAPI documentを生成できます。
Install
npm install --save-dev @loutrejs/cliCommands
| Command | Description |
| --------- | ------------------------------------------------------- |
| graphql | SDLからserver / clientの型生成、watch、検証、互換性比較 |
| check | Application Graphをvalidation |
| doctor | runtime capabilityとの互換性を確認 |
| graph | modules / DI / http / executions / runtimeを表示 |
| dev | ApplicationをDevTools付きで起動 |
| explain | Graph上のtargetを説明 |
| build | Application bundleとdeployment entryを生成 |
| openapi | OpenAPI 3.2 documentを生成 |
Usage
npm exec loutre -- check --entry src/app.ts
npm exec loutre -- doctor --entry src/app.ts
npm exec loutre -- doctor --runtime electron --entry src/app.ts
npm exec loutre -- graph di --entry src/app.ts
npm exec loutre -- graph http --entry src/app.ts --format mermaid
npm exec loutre -- explain GreetingService --entry src/app.tsdoctorで--runtimeを省略した場合は、CLIを実行しているruntimeを使用します。別runtimeとの互換性を確認する場合は--runtimeで明示します。
Graph outputはtext、json、mermaidに対応しています。
DevTools
ApplicationへDevtoolsModule()を追加し、loutre devから普段のApplication commandを起動します。CLIはApplication ModelからGraphを構築し、子Application processへlocal DevTools channelを渡します。
import { defineModule } from '@loutrejs/loutre'
import { DevtoolsModule } from '@loutrejs/loutre/devtools'
const AppModule = defineModule({
imports: [DevtoolsModule()],
})npm exec loutre -- dev --entry src/app.ts -- npm run devDev serverは既定で127.0.0.1:25136にlistenします。BrowserやAgent向けControl Planeはws://127.0.0.1:25136/__loutre/client、Application runtime channelはws://127.0.0.1:25136/__loutre/appです。Graph更新、Runtime Trace、Replay、Provider Playgroundは同じstructured command/event protocolを利用します。Browser UIはControl Planeのclientの1つであり、Application Modelやruntime instanceをremote serverへ送る必要はありません。
listen先はloopbackに固定し、HostとBrowser Originを検証します。native clientはloopback接続ならOriginなしでControl Planeへ接続できます。Application channelはBrowser channelと分離し、loopbackかつBrowser Originを持たないruntime接続だけを受け付けます。Browser用tokenやhandshake endpointはありません。追加のBrowser originは--originで明示します。
npm exec loutre -- dev --entry src/app.ts \
--port 25137 \
--origin https://preview.example.com \
-- npm run devsource変更時はApplication Graphを再構築し、Browserへpushします。watch対象はApplication Definitionのbundle dependencyから絞り込み、.git、.loutre、.next、coverage、dist、node_modulesは既定で除外します。追加除外は--ignoreで指定できます。
Build
npm exec loutre -- build src/app.ts --out-dir dist/loutreaws-lambda、cloudflare-workersではdeployment entryも生成できます。
npm exec loutre -- build src/app.ts --runtime aws-lambdaOpenAPI
Application DefinitionまたはHTTP Contractをdefault exportするentryからOpenAPIを生成できます。
npm exec loutre -- openapi --entry src/api.ts --output openapi.jsonContract-firstでschemaだけ先に定義する場合、Applicationやimplementationは不要です。Application entryから生成する場合も同じcommandを使えます。
API titleとversionはpackage.jsonから読み取られ、--title / --api-versionで上書きできます。
Documentation
License
GraphQL
loutre graphql generate --config graphql.config.ts
loutre graphql generate --config graphql.config.ts --check
loutre graphql generate --config graphql.config.ts --watchApplicationを起動せず、共有SDLからserverの型・Typed Field Builder・Static Schemaと、指定されたclient targetののOperation型を生成します。serverではdomain mappingとcontext型を指定でき、clientでは選択fieldの結果とvariablesを型付けします。設定と契約共有の手順はGraphQLの型生成を参照してください。
