
npm install @gapi/daemon> Automatically apply schema introspection changes from graphql API to specific folders
> The schema is introspected only when the API is successfully started
> When API changes his schema the client should know about it
> When You have multiple clients (mobile, desktop, web) you want to sync them according to your API Graphql Schema
To use daemon you need to activate it inside your @gapi/core => CoreModule configuration
``typescript`
const DEFAULT_CONFIG = {
server: {},
graphql: {},
daemon: { activated: true }
};
`typescript
import { BootstrapFramework } from '@rxdi/core';
import { AppModule } from './app/app.module';
import { CoreModule, Module } from '@gapi/core';
@Module({
imports: [
CoreModule.forRoot({
server: {},
pubsub: {},
graphql: {},
daemon: { activated: true }
}),
]
})
export class FrameworkImports {}
BootstrapFramework(AppModule, [FrameworkImports]).subscribe()
`
#### Starting daemon
`bash`
gapi daemon start
#### Stopping daemon
`bash`
gapi daemon stop
#### Cleaning daemon cache folder ~/.gapi/daemon`bash`
gapi daemon clean
#### Link project
`bash`
gapi daemon link your-link-name
#### Unlink project
`bash`
gapi daemon unlink
#### Unlink all projects
`bash`
gapi daemon unlink --all
1. Start the API
2. Execute gapi daemon link your-link-namegapi daemon link your-link-name
3. Go to client project folder
4. Execute
5. Made change to the graphql schema on the API
6. You will see that client introspection changed also without writing single line of code
If you wish to link more than one project just execute command inside other folder
`bash`
gapi daemon link your-link-name
`bash`
gapi schema introspect --collect-documents --collect-typesschema introspect
Read more about
`yml`
config:
schema:
introspectionEndpoint: http://localhost:9000/graphql
introspectionOutputFolder: ./src/server/api-introspection
Replace with the desired configuration
Gapi daemon has capability to load external plugins via IPFS network or using regular @gapi module example module can be found HERE
A simple plugin looks like regular @rxdi/@gapi module basically every module inside this architecture can be used as a daemon plugin.
`typescript
import { Module } from '@gapi/core';
import { MainService } from './services/main.service';
import { CustomControllerController } from './custom-controller/custom-controller.controller';
@Module({
providers: [MainService],
controllers: [CustomControllerController]
})
export class AppModule {}
`
You can add also plugins via IPFS https://ipfs.io/ipfs/QmY74wyqeeHYVtEkChvbQypxeZd43rk77hY8yfaU16fZQ4 this is @rxdi/deploy plugin module can be found here https://ipfs.io/ipfs/QmYtvfC5cXutnH6y7nK8eGnPcAkU75DpngR3vGDk9A9KQt
``
gapi plugin add QmY74wyqeeHYVtEkChvbQypxeZd43rk77hY8yfaU16fZQ4
Remove
```
gapi plugin remove QmY74wyqeeHYVtEkChvbQypxeZd43rk77hY8yfaU16fZQ4