@platformatic/nest 2.72.0 → 3.0.0-alpha.1

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/config.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  * and run json-schema-to-typescript to regenerate this file.
6
6
  */
7
7
 
8
- export interface PlatformaticNestJSStackable {
8
+ export interface PlatformaticNestJSConfig {
9
9
  $schema?: string;
10
10
  logger?: {
11
11
  level: (
package/index.js CHANGED
@@ -1,312 +1,31 @@
1
- import {
2
- BaseStackable,
3
- cleanBasePath,
4
- ensureTrailingSlash,
5
- errors,
6
- getServerUrl,
7
- importFile,
8
- resolvePackage,
9
- schemaOptions,
10
- transformConfig
11
- } from '@platformatic/basic'
12
- import { ConfigManager } from '@platformatic/config'
13
- import { features } from '@platformatic/utils'
14
- import getPort from 'get-port'
15
- import inject from 'light-my-request'
16
- import { readFile } from 'node:fs/promises'
17
- import { dirname, resolve } from 'node:path'
18
- import { pinoHttp } from 'pino-http'
19
- import { satisfies } from 'semver'
20
- import { packageJson, schema } from './lib/schema.js'
21
-
22
- const supportedVersions = '^11.0.0'
23
-
24
- export class NestStackable extends BaseStackable {
25
- #basePath
26
- #nestjsCore
27
- #nestjsCli
28
- #isFastify
29
- #app
30
- #server
31
- #dispatcher
32
-
33
- constructor (options, root, configManager) {
34
- super('nest', packageJson.version, options, root, configManager)
35
- }
36
-
37
- async init () {
38
- const config = this.configManager.current
39
-
40
- this.#isFastify = config.nest.adapter === 'fastify'
41
- this.#nestjsCore = resolve(resolvePackage(this.root, '@nestjs/core'))
42
- // As @nest/cli is not exporting any file, we assume it's in the same folder of @nestjs/core.
43
- this.#nestjsCli = resolve(this.#nestjsCore, '../../cli/bin/nest.js')
44
-
45
- const nestPackage = JSON.parse(await readFile(resolve(dirname(this.#nestjsCore), 'package.json'), 'utf-8'))
46
-
47
- if (!this.isProduction && !satisfies(nestPackage.version, supportedVersions)) {
48
- throw new errors.UnsupportedVersion('@nestjs/core', nestPackage.version, supportedVersions)
49
- }
50
-
51
- this.#basePath = config.application?.basePath
52
- ? ensureTrailingSlash(cleanBasePath(config.application?.basePath))
53
- : undefined
54
-
55
- this.registerGlobals({ basePath: this.#basePath })
56
-
57
- this.subprocessForceClose = true
58
- }
59
-
60
- async start ({ listen }) {
61
- // Make this idempotent
62
- if (this.url) {
63
- return this.url
64
- }
65
-
66
- const config = this.configManager.current
67
- const command = config.application.commands[this.isProduction ? 'production' : 'development']
68
-
69
- // In development mode, we use the Nest CLI in a children thread - Using build then start would result in a bad DX
70
- this.on('config', config => {
71
- this.#basePath = config.basePath
72
- })
73
-
74
- if (command || !this.isProduction) {
75
- await this.startWithCommand(command || `node ${this.#nestjsCli} start --watch --preserveWatchOutput`)
76
- } else {
77
- return this.#startProduction(listen)
78
- }
79
- }
80
-
81
- async stop () {
82
- if (this.childManager) {
83
- return this.stopCommand()
84
- }
85
-
86
- if (this.#isFastify) {
87
- return this.#server.close()
88
- }
89
-
90
- /* c8 ignore next 3 */
91
- if (!this.#server?.listening) {
92
- return
93
- }
94
-
95
- return new Promise((resolve, reject) => {
96
- this.#server.close(error => {
97
- /* c8 ignore next 3 */
98
- if (error) {
99
- return reject(error)
100
- }
101
-
102
- resolve()
103
- })
104
- })
105
- }
106
-
107
- async build () {
108
- if (!this.#nestjsCore) {
109
- await this.init()
110
- }
111
-
112
- const config = this.configManager.current
113
- this.#basePath = config.application?.basePath ? cleanBasePath(config.application?.basePath) : ''
114
-
115
- return this.buildWithCommand(config.application.commands.build ?? `node ${this.#nestjsCli} build`, this.#basePath)
116
- }
117
-
118
- async inject (injectParams, onInject) {
119
- let res
120
-
121
- if (this.#isFastify) {
122
- res = await this.#server.inject(injectParams, onInject)
123
- } else {
124
- res = await inject(this.#dispatcher, injectParams, onInject)
125
- }
126
-
127
- /* c8 ignore next 3 */
128
- if (onInject) {
129
- return
130
- }
131
-
132
- // Since inject might be called from the main thread directly via ITC, let's clean it up
133
- const { statusCode, headers, body, payload, rawPayload } = res
134
- return { statusCode, headers, body, payload, rawPayload }
135
- }
136
-
137
- getMeta () {
138
- const hasBasePath = this.basePath || this.#basePath
139
-
140
- return {
141
- composer: {
142
- tcp: typeof this.url !== 'undefined',
143
- url: this.url,
144
- prefix: this.basePath ?? this.#basePath,
145
- wantsAbsoluteUrls: !!hasBasePath,
146
- needsRootTrailingSlash: false
147
- }
148
- }
149
- }
150
-
151
- /* c8 ignore next 5 */
152
- async getWatchConfig () {
153
- return {
154
- enabled: false
155
- }
156
- }
157
-
158
- async getChildManagerContext (basePath) {
159
- const context = await super.getChildManagerContext(basePath)
160
-
161
- // In development mode we need to choose the random port in advance as the Nest CLI will start a new process
162
- // every time the code changes and thus we need to ensure that the port is always the same.
163
- if (!this.isProduction && (context.port === true || context.port === 0)) {
164
- context.port = await getPort()
165
- }
166
-
167
- return context
168
- }
169
-
170
- async #startProduction (listen) {
171
- // Listen if entrypoint
172
- if (this.#app && listen) {
173
- await this.#listen()
174
- return this.url
175
- }
176
-
177
- const outputDirectory = this.configManager.current.application.outputDirectory
178
- const { path, name } = this.configManager.current.nest.appModule
179
- this.verifyOutputDirectory(resolve(this.root, outputDirectory))
180
-
181
- // Import all the necessary modules
182
- const { NestFactory } = await importFile(this.#nestjsCore)
183
- const Adapter = await this.#importAdapter()
184
- const appModuleExport = await importFile(resolve(this.root, `${outputDirectory}/${path}.js`))
185
- const appModule = appModuleExport[name]
186
- const setup = await this.#importSetup()
187
-
188
- // Create the server
189
- if (this.#isFastify) {
190
- this.#app = await NestFactory.create(appModule, new Adapter({ loggerInstance: this.logger }))
191
-
192
- setup?.(this.#app)
193
- await this.#app.init()
194
-
195
- this.#server = this.#app.getInstance()
196
- } else {
197
- this.#app = await NestFactory.create(appModule, new Adapter())
198
-
199
- const instance = this.#app.getInstance()
200
- instance.disable('x-powered-by')
201
- instance.use(pinoHttp({ logger: this.logger }))
202
-
203
- setup?.(this.#app)
204
- await this.#app.init()
205
-
206
- this.#server = this.#app.getHttpServer()
207
- this.#dispatcher = this.#server.listeners('request')[0]
208
- }
209
-
210
- if (listen) {
211
- await this.#listen()
212
- }
213
-
214
- await this._collectMetrics()
215
- return this.url
216
- }
217
-
218
- async #listen () {
219
- const serverOptions = this.serverConfig
220
- const listenOptions = { host: serverOptions?.hostname || '127.0.0.1', port: serverOptions?.port || 0 }
221
-
222
- if (this.isProduction && features.node.reusePort) {
223
- listenOptions.reusePort = true
224
- }
225
-
226
- await this.#app.listen(listenOptions)
227
- this.url = getServerUrl(this.#isFastify ? this.#server.server : this.#server)
228
-
229
- return this.url
230
- }
231
-
232
- async #importAdapter () {
233
- let adapter
234
- const toImport = `@nestjs/platform-${this.configManager.current.nest.adapter}`
235
-
236
- this.logger.debug(`Using NestJS adapter ${toImport}.`)
237
-
238
- try {
239
- adapter = await importFile(resolvePackage(this.root, toImport))
240
- return adapter[this.#isFastify ? 'FastifyAdapter' : 'ExpressAdapter']
241
- } catch (e) {
242
- throw new Error(`Cannot import the NestJS adapter. Please add ${toImport} to the dependencies and try again.`)
243
- }
244
- }
245
-
246
- async #importSetup () {
247
- const config = this.configManager.current
248
-
249
- if (!config.nest.setup.path) {
250
- return undefined
251
- }
252
-
253
- let setupModule
254
- let setup
255
-
256
- try {
257
- setupModule = await importFile(
258
- resolve(this.root, `${config.application.outputDirectory}/${config.nest.setup.path}.js`)
259
- )
260
- } catch (e) {
261
- throw new Error(`Cannot import the NestJS setup file: ${e.message}.`)
262
- }
263
-
264
- // This is for improved compatibility
265
- if (config.nest.setup.name) {
266
- setup = setupModule[config.setup.name]
267
- } else {
268
- setup = setupModule.default
269
-
270
- if (setup && typeof setup !== 'function' && typeof setup.default === 'function') {
271
- setup = setup.default
272
- }
273
- }
274
-
275
- if (typeof setup !== 'function') {
276
- const name = config.setup.name ? ` named ${config.setup.name}` : ''
277
- throw new Error(`The NestJS setup file must export a function named ${name}, but got ${typeof setup}.`)
278
- }
279
-
280
- return setup
281
- }
1
+ import { transform as basicTransform, resolve, validationOptions } from '@platformatic/basic'
2
+ import { kMetadata, loadConfiguration as utilsLoadConfiguration } from '@platformatic/utils'
3
+ import { schema } from './lib/schema.js'
4
+ import { NestStackable } from './lib/stackable.js'
5
+
6
+ /* c8 ignore next 5 */
7
+ export async function transform (config, schema, options) {
8
+ config = await basicTransform(config, schema, options)
9
+ config.watch = { enabled: false }
10
+ return config
282
11
  }
283
12
 
284
- export async function buildStackable (opts) {
285
- const root = opts.context.directory
13
+ export async function loadConfiguration (configOrRoot, sourceOrConfig, context) {
14
+ const { root, source } = await resolve(configOrRoot, sourceOrConfig, 'application')
286
15
 
287
- const configManager = new ConfigManager({
288
- schema,
289
- source: opts.config ?? {},
290
- schemaOptions,
291
- transformConfig,
292
- dirname: root,
293
- context: opts.context
16
+ return utilsLoadConfiguration(source, context?.schema ?? schema, {
17
+ validationOptions,
18
+ transform,
19
+ replaceEnv: true,
20
+ root,
21
+ ...context
294
22
  })
295
- await configManager.parseAndValidate()
296
-
297
- return new NestStackable(opts, root, configManager)
298
23
  }
299
24
 
300
- export { schema, schemaComponents } from './lib/schema.js'
301
-
302
- export default {
303
- configType: 'nest',
304
- configManagerConfig: {
305
- schemaOptions,
306
- transformConfig
307
- },
308
- buildStackable,
309
- schema,
310
- version: packageJson.version,
311
- modulesToLoad: []
25
+ export async function create (configOrRoot, sourceOrConfig, context) {
26
+ const config = await loadConfiguration(configOrRoot, sourceOrConfig, context)
27
+ return new NestStackable(config[kMetadata].root, config, context)
312
28
  }
29
+
30
+ export { packageJson, schema, schemaComponents, version } from './lib/schema.js'
31
+ export * from './lib/stackable.js'
package/lib/schema.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { schemaComponents as basicSchemaComponents } from '@platformatic/basic'
2
2
  import { schemaComponents as utilsSchemaComponents } from '@platformatic/utils'
3
3
  import { readFileSync } from 'node:fs'
4
+ import { resolve } from 'node:path'
4
5
 
5
- export const packageJson = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8'))
6
-
6
+ export const packageJson = JSON.parse(readFileSync(resolve(import.meta.dirname, '../package.json'), 'utf8'))
7
7
  export const version = packageJson.version
8
8
 
9
9
  const nest = {
@@ -49,12 +49,12 @@ const nest = {
49
49
  additionalProperties: false
50
50
  }
51
51
 
52
- export const schemaComponents = { node: nest }
52
+ export const schemaComponents = { nest }
53
53
 
54
54
  export const schema = {
55
55
  $id: `https://schemas.platformatic.dev/@platformatic/nest/${version}.json`,
56
56
  $schema: 'http://json-schema.org/draft-07/schema#',
57
- title: 'Platformatic NestJS Stackable',
57
+ title: 'Platformatic NestJS Config',
58
58
  type: 'object',
59
59
  properties: {
60
60
  $schema: {
@@ -0,0 +1,281 @@
1
+ import {
2
+ BaseStackable,
3
+ cleanBasePath,
4
+ ensureTrailingSlash,
5
+ errors,
6
+ getServerUrl,
7
+ importFile,
8
+ resolvePackage
9
+ } from '@platformatic/basic'
10
+ import { features } from '@platformatic/utils'
11
+ import getPort from 'get-port'
12
+ import inject from 'light-my-request'
13
+ import { readFile } from 'node:fs/promises'
14
+ import { dirname, resolve } from 'node:path'
15
+ import { pinoHttp } from 'pino-http'
16
+ import { satisfies } from 'semver'
17
+ import { version } from './schema.js'
18
+
19
+ const supportedVersions = '^11.0.0'
20
+
21
+ export class NestStackable extends BaseStackable {
22
+ #basePath
23
+ #nestjsCore
24
+ #nestjsCli
25
+ #isFastify
26
+ #app
27
+ #server
28
+ #dispatcher
29
+
30
+ constructor (root, config, context) {
31
+ super('nest', version, root, config, context)
32
+ }
33
+
34
+ async init () {
35
+ await super.init()
36
+
37
+ const config = this.config
38
+
39
+ this.#isFastify = config.nest.adapter === 'fastify'
40
+ this.#nestjsCore = resolve(resolvePackage(this.root, '@nestjs/core'))
41
+ // As @nest/cli is not exporting any file, we assume it's in the same folder of @nestjs/core.
42
+ this.#nestjsCli = resolve(this.#nestjsCore, '../../cli/bin/nest.js')
43
+
44
+ const nestPackage = JSON.parse(await readFile(resolve(dirname(this.#nestjsCore), 'package.json'), 'utf-8'))
45
+
46
+ if (!this.isProduction && !satisfies(nestPackage.version, supportedVersions)) {
47
+ throw new errors.UnsupportedVersion('@nestjs/core', nestPackage.version, supportedVersions)
48
+ }
49
+
50
+ this.#basePath = config.application?.basePath
51
+ ? ensureTrailingSlash(cleanBasePath(config.application?.basePath))
52
+ : undefined
53
+
54
+ this.registerGlobals({ basePath: this.#basePath })
55
+
56
+ this.subprocessForceClose = true
57
+ }
58
+
59
+ async start ({ listen }) {
60
+ // Make this idempotent
61
+ if (this.url) {
62
+ return this.url
63
+ }
64
+
65
+ const config = this.config
66
+ const command = config.application.commands[this.isProduction ? 'production' : 'development']
67
+
68
+ // In development mode, we use the Nest CLI in a children thread - Using build then start would result in a bad DX
69
+ this.on('config', config => {
70
+ this.#basePath = config.basePath
71
+ })
72
+
73
+ if (command || !this.isProduction) {
74
+ await this.startWithCommand(command || `node ${this.#nestjsCli} start --watch --preserveWatchOutput`)
75
+ } else {
76
+ return this.#startProduction(listen)
77
+ }
78
+ }
79
+
80
+ async stop () {
81
+ if (this.childManager) {
82
+ return this.stopCommand()
83
+ }
84
+
85
+ if (this.#isFastify) {
86
+ return this.#server.close()
87
+ }
88
+
89
+ /* c8 ignore next 3 */
90
+ if (!this.#server?.listening) {
91
+ return
92
+ }
93
+
94
+ return new Promise((resolve, reject) => {
95
+ this.#server.close(error => {
96
+ /* c8 ignore next 3 */
97
+ if (error) {
98
+ return reject(error)
99
+ }
100
+
101
+ resolve()
102
+ })
103
+ })
104
+ }
105
+
106
+ async build () {
107
+ if (!this.#nestjsCore) {
108
+ await this.init()
109
+ }
110
+
111
+ const config = this.config
112
+ this.#basePath = config.application?.basePath ? cleanBasePath(config.application?.basePath) : ''
113
+
114
+ return this.buildWithCommand(config.application.commands.build ?? `node ${this.#nestjsCli} build`, this.#basePath)
115
+ }
116
+
117
+ async inject (injectParams, onInject) {
118
+ let res
119
+
120
+ if (this.#isFastify) {
121
+ res = await this.#server.inject(injectParams, onInject)
122
+ } else {
123
+ res = await inject(this.#dispatcher, injectParams, onInject)
124
+ }
125
+
126
+ /* c8 ignore next 3 */
127
+ if (onInject) {
128
+ return
129
+ }
130
+
131
+ // Since inject might be called from the main thread directly via ITC, let's clean it up
132
+ const { statusCode, headers, body, payload, rawPayload } = res
133
+ return { statusCode, headers, body, payload, rawPayload }
134
+ }
135
+
136
+ getMeta () {
137
+ const hasBasePath = this.basePath || this.#basePath
138
+
139
+ return {
140
+ composer: {
141
+ tcp: typeof this.url !== 'undefined',
142
+ url: this.url,
143
+ prefix: this.basePath ?? this.#basePath,
144
+ wantsAbsoluteUrls: !!hasBasePath,
145
+ needsRootTrailingSlash: false
146
+ }
147
+ }
148
+ }
149
+
150
+ /* c8 ignore next 5 */
151
+ async getWatchConfig () {
152
+ return {
153
+ enabled: false
154
+ }
155
+ }
156
+
157
+ async getChildManagerContext (basePath) {
158
+ const context = await super.getChildManagerContext(basePath)
159
+
160
+ // In development mode we need to choose the random port in advance as the Nest CLI will start a new process
161
+ // every time the code changes and thus we need to ensure that the port is always the same.
162
+ if (!this.isProduction && (context.port === true || context.port === 0)) {
163
+ context.port = await getPort()
164
+ }
165
+
166
+ return context
167
+ }
168
+
169
+ async #startProduction (listen) {
170
+ // Listen if entrypoint
171
+ if (this.#app && listen) {
172
+ await this.#listen()
173
+ return this.url
174
+ }
175
+
176
+ const outputDirectory = this.config.application.outputDirectory
177
+ const { path, name } = this.config.nest.appModule
178
+ this.verifyOutputDirectory(resolve(this.root, outputDirectory))
179
+
180
+ // Import all the necessary modules
181
+ const { NestFactory } = await importFile(this.#nestjsCore)
182
+ const Adapter = await this.#importAdapter()
183
+ const appModuleExport = await importFile(resolve(this.root, `${outputDirectory}/${path}.js`))
184
+ const appModule = appModuleExport[name]
185
+ const setup = await this.#importSetup()
186
+
187
+ // Create the server
188
+ if (this.#isFastify) {
189
+ this.#app = await NestFactory.create(appModule, new Adapter({ loggerInstance: this.logger }))
190
+
191
+ setup?.(this.#app)
192
+ await this.#app.init()
193
+
194
+ this.#server = this.#app.getInstance()
195
+ } else {
196
+ this.#app = await NestFactory.create(appModule, new Adapter())
197
+
198
+ const instance = this.#app.getInstance()
199
+ instance.disable('x-powered-by')
200
+ instance.use(pinoHttp({ logger: this.logger }))
201
+
202
+ setup?.(this.#app)
203
+ await this.#app.init()
204
+
205
+ this.#server = this.#app.getHttpServer()
206
+ this.#dispatcher = this.#server.listeners('request')[0]
207
+ }
208
+
209
+ if (listen) {
210
+ await this.#listen()
211
+ }
212
+
213
+ await this._collectMetrics()
214
+ return this.url
215
+ }
216
+
217
+ async #listen () {
218
+ const serverOptions = this.serverConfig
219
+ const listenOptions = { host: serverOptions?.hostname || '127.0.0.1', port: serverOptions?.port || 0 }
220
+
221
+ if (this.isProduction && features.node.reusePort) {
222
+ listenOptions.reusePort = true
223
+ }
224
+
225
+ await this.#app.listen(listenOptions)
226
+ this.url = getServerUrl(this.#isFastify ? this.#server.server : this.#server)
227
+
228
+ return this.url
229
+ }
230
+
231
+ async #importAdapter () {
232
+ let adapter
233
+ const toImport = `@nestjs/platform-${this.config.nest.adapter}`
234
+
235
+ this.logger.debug(`Using NestJS adapter ${toImport}.`)
236
+
237
+ try {
238
+ adapter = await importFile(resolvePackage(this.root, toImport))
239
+ return adapter[this.#isFastify ? 'FastifyAdapter' : 'ExpressAdapter']
240
+ } catch (e) {
241
+ throw new Error(`Cannot import the NestJS adapter. Please add ${toImport} to the dependencies and try again.`)
242
+ }
243
+ }
244
+
245
+ async #importSetup () {
246
+ const config = this.config
247
+
248
+ if (!config.nest.setup.path) {
249
+ return undefined
250
+ }
251
+
252
+ let setupModule
253
+ let setup
254
+
255
+ try {
256
+ setupModule = await importFile(
257
+ resolve(this.root, `${config.application.outputDirectory}/${config.nest.setup.path}.js`)
258
+ )
259
+ } catch (e) {
260
+ throw new Error(`Cannot import the NestJS setup file: ${e.message}.`)
261
+ }
262
+
263
+ // This is for improved compatibility
264
+ if (config.nest.setup.name) {
265
+ setup = setupModule[config.setup.name]
266
+ } else {
267
+ setup = setupModule.default
268
+
269
+ if (setup && typeof setup !== 'function' && typeof setup.default === 'function') {
270
+ setup = setup.default
271
+ }
272
+ }
273
+
274
+ if (typeof setup !== 'function') {
275
+ const name = config.setup.name ? ` named ${config.setup.name}` : ''
276
+ throw new Error(`The NestJS setup file must export a function named ${name}, but got ${typeof setup}.`)
277
+ }
278
+
279
+ return setup
280
+ }
281
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platformatic/nest",
3
- "version": "2.72.0",
3
+ "version": "3.0.0-alpha.1",
4
4
  "description": "Platformatic Nest.js Stackable",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -18,10 +18,9 @@
18
18
  "get-port": "^7.1.0",
19
19
  "light-my-request": "^6.0.0",
20
20
  "pino-http": "^10.2.0",
21
- "@platformatic/basic": "2.72.0",
22
- "@platformatic/config": "2.72.0",
23
- "@platformatic/generators": "2.72.0",
24
- "@platformatic/utils": "2.72.0"
21
+ "@platformatic/basic": "3.0.0-alpha.1",
22
+ "@platformatic/utils": "3.0.0-alpha.1",
23
+ "@platformatic/generators": "3.0.0-alpha.1"
25
24
  },
26
25
  "devDependencies": {
27
26
  "@nestjs/cli": "^11.0.7",
@@ -34,12 +33,12 @@
34
33
  "neostandard": "^0.12.0",
35
34
  "tsx": "^4.19.0",
36
35
  "typescript": "^5.5.4",
37
- "@platformatic/service": "2.72.0",
38
- "@platformatic/composer": "2.72.0"
36
+ "@platformatic/composer": "3.0.0-alpha.1",
37
+ "@platformatic/service": "3.0.0-alpha.1"
39
38
  },
40
39
  "scripts": {
41
- "test": "pnpm run lint && borp --concurrency=1 --no-timeout",
42
- "coverage": "pnpm run lint && borp -C -X test -X test/fixtures --concurrency=1 --no-timeout",
40
+ "test": "pnpm run lint && borp --concurrency=1 --timeout 1200000",
41
+ "coverage": "pnpm run lint && borp -C -X test -X test/fixtures --concurrency=1 --timeout 1200000",
43
42
  "gen-schema": "node lib/schema.js > schema.json",
44
43
  "gen-types": "json2ts > config.d.ts < schema.json",
45
44
  "build": "pnpm run gen-schema && pnpm run gen-types",
package/schema.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
- "$id": "https://schemas.platformatic.dev/@platformatic/nest/2.72.0.json",
2
+ "$id": "https://schemas.platformatic.dev/@platformatic/nest/3.0.0-alpha.1.json",
3
3
  "$schema": "http://json-schema.org/draft-07/schema#",
4
- "title": "Platformatic NestJS Stackable",
4
+ "title": "Platformatic NestJS Config",
5
5
  "type": "object",
6
6
  "properties": {
7
7
  "$schema": {