@nestledjs/api 1.0.14 → 2.0.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/package.json +3 -3
- package/src/core/files/data-access/src/lib/api-core-data-access.service.ts__tmpl__ +6 -4
- package/src/core/files/helpers/src/lib/graphql-select.ts__tmpl__ +8 -10
- package/src/prisma/files/config/prisma.config.ts__tmpl__ +5 -1
- package/src/prisma/files/src/index.ts__tmpl__ +5 -1
- package/src/prisma/files/src/lib/schemas/schema.prisma__tmpl__ +2 -5
- package/src/prisma/files/src/lib/seed/seed.ts__tmpl__ +7 -3
- package/src/prisma/generator.js +9 -6
- package/src/prisma/generator.js.map +1 -1
- package/src/setup/generator.js +5 -2
- package/src/setup/generator.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestledjs/api",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"generators": "./generators.json",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./src/index.js",
|
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
"tslib": "^2.3.0",
|
|
20
20
|
"@nx/devkit": "22.0.2",
|
|
21
21
|
"@nx/js": "22.0.2",
|
|
22
|
-
"@prisma/internals": "^
|
|
22
|
+
"@prisma/internals": "^7.3.0",
|
|
23
23
|
"pluralize": "^8.0.0",
|
|
24
24
|
"dotenv": "16.4.5",
|
|
25
25
|
"pg": "^8.13.0"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
|
-
"@nestledjs/utils": "0.
|
|
28
|
+
"@nestledjs/utils": "1.0.0"
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -2,6 +2,7 @@ import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common'
|
|
|
2
2
|
import { Prisma, PrismaClient } from '@<%= npmScope %>/api/prisma'
|
|
3
3
|
import { ConfigService } from '@<%= npmScope %>/api/config'
|
|
4
4
|
import { CorePagingInput } from './dto/core-paging.input'
|
|
5
|
+
import { PrismaPg } from '@prisma/adapter-pg'
|
|
5
6
|
|
|
6
7
|
@Injectable()
|
|
7
8
|
export class ApiCoreDataAccessService
|
|
@@ -9,10 +10,12 @@ export class ApiCoreDataAccessService
|
|
|
9
10
|
implements OnModuleInit, OnModuleDestroy
|
|
10
11
|
{
|
|
11
12
|
constructor(private readonly configService: ConfigService) {
|
|
13
|
+
// Create the PostgreSQL adapter with the connection string
|
|
14
|
+
const connectionString = `${process.env['DATABASE_URL']}?connection_limit=30`
|
|
15
|
+
const adapter = new PrismaPg({ connectionString })
|
|
16
|
+
|
|
12
17
|
const config: Prisma.PrismaClientOptions = {
|
|
13
|
-
|
|
14
|
-
db: { url: `${process.env['DATABASE_URL']}?connection_limit=30` },
|
|
15
|
-
},
|
|
18
|
+
adapter,
|
|
16
19
|
log:
|
|
17
20
|
process.env['LOG_PRISMA_QUERIES'] === 'true' ||
|
|
18
21
|
process.env['COUNT_PRISMA_QUERIES'] === 'true'
|
|
@@ -109,4 +112,3 @@ export class ApiCoreDataAccessService
|
|
|
109
112
|
}
|
|
110
113
|
}
|
|
111
114
|
}
|
|
112
|
-
|
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
import graphqlFields from 'graphql-fields'
|
|
2
|
-
import { Prisma } from '@<%= npmScope %>/api/prisma'
|
|
3
|
-
import type { DMMF } from '@prisma/client/runtime/library'
|
|
4
2
|
import { GraphQLResolveInfo } from 'graphql/type'
|
|
5
|
-
|
|
6
|
-
const dmmf = Prisma.dmmf
|
|
3
|
+
import { DATABASE_MODELS, DatabaseModel, DatabaseField } from '@<%= npmScope %>/shared/sdk'
|
|
7
4
|
|
|
8
5
|
function getNamedType(type: any): string {
|
|
9
6
|
if (type.ofType) return getNamedType(type.ofType)
|
|
10
7
|
return type.name
|
|
11
8
|
}
|
|
12
9
|
|
|
13
|
-
function getModelFromTypeName(typeName: string) {
|
|
14
|
-
return
|
|
10
|
+
function getModelFromTypeName(typeName: string): DatabaseModel | undefined {
|
|
11
|
+
return DATABASE_MODELS.find(m => m.name === typeName)
|
|
15
12
|
}
|
|
16
13
|
|
|
17
|
-
function buildSelectTree(fieldTree: any, model:
|
|
14
|
+
function buildSelectTree(fieldTree: any, model: DatabaseModel): any {
|
|
18
15
|
const result: Record<string, any> = {}
|
|
19
16
|
|
|
20
17
|
for (const key in fieldTree) {
|
|
21
|
-
const field = model.fields.find((f:
|
|
18
|
+
const field = model.fields.find((f: DatabaseField) => f.name === key)
|
|
22
19
|
if (!field) continue
|
|
23
20
|
|
|
24
21
|
if (field.relationName && typeof fieldTree[key] === 'object') {
|
|
25
|
-
const relatedModel =
|
|
22
|
+
const relatedModel = DATABASE_MODELS.find(m => m.name === field.type)
|
|
26
23
|
if (relatedModel) {
|
|
27
24
|
result[key] = {
|
|
28
25
|
select: buildSelectTree(fieldTree[key], relatedModel),
|
|
@@ -38,13 +35,14 @@ function buildSelectTree(fieldTree: any, model: any): any {
|
|
|
38
35
|
|
|
39
36
|
/**
|
|
40
37
|
* Automatically converts a GraphQL `info` object into a Prisma `select` object.
|
|
38
|
+
* Uses the generated DATABASE_MODELS for schema introspection (Prisma v7 compatible).
|
|
41
39
|
*/
|
|
42
40
|
export function createSelect(info: GraphQLResolveInfo) {
|
|
43
41
|
const returnTypeName = getNamedType(info.returnType)
|
|
44
42
|
const model = getModelFromTypeName(returnTypeName)
|
|
45
43
|
|
|
46
44
|
if (!model) {
|
|
47
|
-
throw new Error(`Model "${returnTypeName}" not found in
|
|
45
|
+
throw new Error(`Model "${returnTypeName}" not found in DATABASE_MODELS. Make sure to run the SDK generator.`)
|
|
48
46
|
}
|
|
49
47
|
|
|
50
48
|
const rawFields = graphqlFields(info)
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import 'dotenv/config'
|
|
2
2
|
import * as path from 'node:path'
|
|
3
|
-
import { defineConfig } from 'prisma/config'
|
|
3
|
+
import { defineConfig, env } from 'prisma/config'
|
|
4
4
|
|
|
5
5
|
export default defineConfig({
|
|
6
6
|
schema: path.join('libs', 'api', 'prisma', 'src', 'lib', 'schemas'),
|
|
7
7
|
migrations: {
|
|
8
|
+
path: 'libs/api/prisma/src/lib/migrations',
|
|
8
9
|
seed: 'ts-node --project libs/api/prisma/tsconfig.lib.json libs/api/prisma/src/lib/seed/seed.ts',
|
|
9
10
|
},
|
|
11
|
+
datasource: {
|
|
12
|
+
url: env('DATABASE_URL'),
|
|
13
|
+
},
|
|
10
14
|
})
|
|
11
15
|
|
|
12
16
|
|
|
@@ -1 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
// Export all types and client from Prisma v7 generated files
|
|
2
|
+
export * from './lib/prisma-generated/client'
|
|
3
|
+
|
|
4
|
+
// Explicitly export Prisma namespace for better CI compatibility
|
|
5
|
+
export { Prisma } from './lib/prisma-generated/client'
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
generator client {
|
|
2
|
-
provider
|
|
3
|
-
|
|
4
|
-
binaryTargets = ["native"]
|
|
5
|
-
output = "../prisma-generated"
|
|
2
|
+
provider = "prisma-client"
|
|
3
|
+
output = "../prisma-generated"
|
|
6
4
|
}
|
|
7
5
|
|
|
8
6
|
datasource db {
|
|
9
7
|
provider = "postgresql"
|
|
10
|
-
url = env("DATABASE_URL")
|
|
11
8
|
}
|
|
12
9
|
|
|
13
10
|
// Models (Alphabetical Order)
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import 'dotenv/config'
|
|
2
|
+
import { PrismaClient } from '../prisma-generated/client'
|
|
3
|
+
import { PrismaPg } from '@prisma/adapter-pg'
|
|
2
4
|
import { countries } from './seed-data/iso-3166-countries'
|
|
3
5
|
import { seedUsers } from './seed-data/seed-users'
|
|
4
6
|
import { hashSync } from 'bcryptjs'
|
|
5
7
|
|
|
6
|
-
const
|
|
8
|
+
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL! })
|
|
9
|
+
const prisma = new PrismaClient({ adapter })
|
|
10
|
+
|
|
7
11
|
async function main() {
|
|
8
12
|
for (const country of countries) {
|
|
9
13
|
await prisma.country.upsert({
|
|
@@ -46,7 +50,7 @@ async function main() {
|
|
|
46
50
|
console.log(`User ${user.displayName} seeded.`);
|
|
47
51
|
} catch (e) {
|
|
48
52
|
if ((e as any).code === 'P2002' && (e as any).meta?.target?.includes('displayName')) {
|
|
49
|
-
console.log(`User with displayName
|
|
53
|
+
console.log(`User with displayName "${user.displayName}" already exists. Skipping.`);
|
|
50
54
|
} else {
|
|
51
55
|
throw e;
|
|
52
56
|
}
|
package/src/prisma/generator.js
CHANGED
|
@@ -16,17 +16,20 @@ function generateLibraries(tree_1) {
|
|
|
16
16
|
tree.rename('./prisma.config.ts__tmpl__', 'prisma.config.ts');
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
// Update package.json scripts (remove deprecated prisma
|
|
19
|
+
// Update package.json scripts (remove deprecated prisma fields for v7 - now configured in prisma.config.ts)
|
|
20
20
|
(0, devkit_1.updateJson)(tree, 'package.json', (json) => {
|
|
21
|
-
var _a;
|
|
21
|
+
var _a, _b;
|
|
22
|
+
// Remove deprecated prisma.schema field (now in prisma.config.ts)
|
|
22
23
|
if ((_a = json.prisma) === null || _a === void 0 ? void 0 : _a.schema) {
|
|
23
24
|
delete json.prisma.schema;
|
|
24
25
|
}
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
// Remove deprecated prisma.seed field (now in prisma.config.ts)
|
|
27
|
+
if ((_b = json.prisma) === null || _b === void 0 ? void 0 : _b.seed) {
|
|
28
|
+
delete json.prisma.seed;
|
|
27
29
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
// Remove empty prisma object if no other properties
|
|
31
|
+
if (json.prisma && Object.keys(json.prisma).length === 0) {
|
|
32
|
+
delete json.prisma;
|
|
30
33
|
}
|
|
31
34
|
// Add GraphQL model generation script for the 'core' library
|
|
32
35
|
if (!json.scripts) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/prisma/generator.ts"],"names":[],"mappings":";;AAIA,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/prisma/generator.ts"],"names":[],"mappings":"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"}
|
package/src/setup/generator.js
CHANGED
|
@@ -61,12 +61,14 @@ function apiSetupGenerator(tree) {
|
|
|
61
61
|
'@types/nodemailer': '^6.4.7',
|
|
62
62
|
'@types/passport-jwt': '^4.0.1',
|
|
63
63
|
'@types/node': '^24.0.1',
|
|
64
|
-
'@prisma/
|
|
64
|
+
'@prisma/adapter-pg': '^7.3.0',
|
|
65
|
+
'@prisma/client': '^7.3.0',
|
|
66
|
+
'@prisma/internals': '^7.3.0',
|
|
65
67
|
autoprefixer: '10.4.21',
|
|
66
68
|
jest: '^30.0.0',
|
|
67
69
|
'jest-environment-node': '^30.0.0',
|
|
68
70
|
pg: '8.16.0',
|
|
69
|
-
prisma: '^
|
|
71
|
+
prisma: '^7.3.0',
|
|
70
72
|
'ts-node': '10.9.2',
|
|
71
73
|
yaml: '^2.4.2',
|
|
72
74
|
'ts-loader': '^9.5.2',
|
|
@@ -80,6 +82,7 @@ function apiSetupGenerator(tree) {
|
|
|
80
82
|
const packagesToBuild = [
|
|
81
83
|
'@apollo/protobufjs',
|
|
82
84
|
'@parcel/watcher',
|
|
85
|
+
'@prisma/adapter-pg',
|
|
83
86
|
'@prisma/client',
|
|
84
87
|
'@prisma/extension-optimize',
|
|
85
88
|
'@prisma/engines',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/setup/generator.ts"],"names":[],"mappings":";;AASA,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../generators/api/src/setup/generator.ts"],"names":[],"mappings":"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"}
|