Skip to content

Commit 2ce8b9b

Browse files
authored
merge dev to main (v1.12.3) (#1247)
2 parents 254ef39 + 8137481 commit 2ce8b9b

File tree

22 files changed

+185
-25
lines changed

22 files changed

+185
-25
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "zenstack-monorepo",
3-
"version": "1.12.2",
3+
"version": "1.12.3",
44
"description": "",
55
"scripts": {
66
"build": "pnpm -r build",

packages/ide/jetbrains/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ plugins {
99
}
1010

1111
group = "dev.zenstack"
12-
version = "1.12.2"
12+
version = "1.12.3"
1313

1414
repositories {
1515
mavenCentral()

packages/ide/jetbrains/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "jetbrains",
3-
"version": "1.12.2",
3+
"version": "1.12.3",
44
"displayName": "ZenStack JetBrains IDE Plugin",
55
"description": "ZenStack JetBrains IDE plugin",
66
"homepage": "https://zenstack.dev",

packages/language/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@zenstackhq/language",
3-
"version": "1.12.2",
3+
"version": "1.12.3",
44
"displayName": "ZenStack modeling language compiler",
55
"description": "ZenStack modeling language compiler",
66
"homepage": "https://zenstack.dev",

packages/misc/redwood/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@zenstackhq/redwood",
33
"displayName": "ZenStack RedwoodJS Integration",
4-
"version": "1.12.2",
4+
"version": "1.12.3",
55
"description": "CLI and runtime for integrating ZenStack with RedwoodJS projects.",
66
"repository": {
77
"type": "git",

packages/plugins/openapi/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@zenstackhq/openapi",
33
"displayName": "ZenStack Plugin and Runtime for OpenAPI",
4-
"version": "1.12.2",
4+
"version": "1.12.3",
55
"description": "ZenStack plugin and runtime supporting OpenAPI",
66
"main": "index.js",
77
"repository": {

packages/plugins/openapi/src/rpc-generator.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,15 @@ export class RPCOpenAPIGenerator extends OpenAPIGeneratorBase {
176176
type: 'object',
177177
required: ['data'],
178178
properties: {
179-
data: this.ref(`${modelName}CreateManyInput`),
179+
data: this.oneOf(
180+
this.ref(`${modelName}CreateManyInput`),
181+
this.array(this.ref(`${modelName}CreateManyInput`))
182+
),
183+
skipDuplicates: {
184+
type: 'boolean',
185+
description:
186+
'Do not insert records with unique fields or ID fields that already exist.',
187+
},
180188
meta: this.ref('_Meta'),
181189
},
182190
},

packages/plugins/openapi/tests/baseline/rpc-3.0.0.baseline.yaml

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3194,7 +3194,15 @@ components:
31943194
- data
31953195
properties:
31963196
data:
3197-
$ref: '#/components/schemas/UserCreateManyInput'
3197+
oneOf:
3198+
- $ref: '#/components/schemas/UserCreateManyInput'
3199+
- type: array
3200+
items:
3201+
$ref: '#/components/schemas/UserCreateManyInput'
3202+
skipDuplicates:
3203+
type: boolean
3204+
description: Do not insert records with unique fields or ID fields that already
3205+
exist.
31983206
meta:
31993207
$ref: '#/components/schemas/_Meta'
32003208
UserFindUniqueArgs:
@@ -3374,7 +3382,15 @@ components:
33743382
- data
33753383
properties:
33763384
data:
3377-
$ref: '#/components/schemas/ProfileCreateManyInput'
3385+
oneOf:
3386+
- $ref: '#/components/schemas/ProfileCreateManyInput'
3387+
- type: array
3388+
items:
3389+
$ref: '#/components/schemas/ProfileCreateManyInput'
3390+
skipDuplicates:
3391+
type: boolean
3392+
description: Do not insert records with unique fields or ID fields that already
3393+
exist.
33783394
meta:
33793395
$ref: '#/components/schemas/_Meta'
33803396
ProfileFindUniqueArgs:
@@ -3554,7 +3570,15 @@ components:
35543570
- data
35553571
properties:
35563572
data:
3557-
$ref: '#/components/schemas/Post_ItemCreateManyInput'
3573+
oneOf:
3574+
- $ref: '#/components/schemas/Post_ItemCreateManyInput'
3575+
- type: array
3576+
items:
3577+
$ref: '#/components/schemas/Post_ItemCreateManyInput'
3578+
skipDuplicates:
3579+
type: boolean
3580+
description: Do not insert records with unique fields or ID fields that already
3581+
exist.
35583582
meta:
35593583
$ref: '#/components/schemas/_Meta'
35603584
Post_ItemFindUniqueArgs:

packages/plugins/openapi/tests/baseline/rpc-3.1.0.baseline.yaml

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3248,7 +3248,15 @@ components:
32483248
- data
32493249
properties:
32503250
data:
3251-
$ref: '#/components/schemas/UserCreateManyInput'
3251+
oneOf:
3252+
- $ref: '#/components/schemas/UserCreateManyInput'
3253+
- type: array
3254+
items:
3255+
$ref: '#/components/schemas/UserCreateManyInput'
3256+
skipDuplicates:
3257+
type: boolean
3258+
description: Do not insert records with unique fields or ID fields that already
3259+
exist.
32523260
meta:
32533261
$ref: '#/components/schemas/_Meta'
32543262
UserFindUniqueArgs:
@@ -3428,7 +3436,15 @@ components:
34283436
- data
34293437
properties:
34303438
data:
3431-
$ref: '#/components/schemas/ProfileCreateManyInput'
3439+
oneOf:
3440+
- $ref: '#/components/schemas/ProfileCreateManyInput'
3441+
- type: array
3442+
items:
3443+
$ref: '#/components/schemas/ProfileCreateManyInput'
3444+
skipDuplicates:
3445+
type: boolean
3446+
description: Do not insert records with unique fields or ID fields that already
3447+
exist.
34323448
meta:
34333449
$ref: '#/components/schemas/_Meta'
34343450
ProfileFindUniqueArgs:
@@ -3608,7 +3624,15 @@ components:
36083624
- data
36093625
properties:
36103626
data:
3611-
$ref: '#/components/schemas/Post_ItemCreateManyInput'
3627+
oneOf:
3628+
- $ref: '#/components/schemas/Post_ItemCreateManyInput'
3629+
- type: array
3630+
items:
3631+
$ref: '#/components/schemas/Post_ItemCreateManyInput'
3632+
skipDuplicates:
3633+
type: boolean
3634+
description: Do not insert records with unique fields or ID fields that already
3635+
exist.
36123636
meta:
36133637
$ref: '#/components/schemas/_Meta'
36143638
Post_ItemFindUniqueArgs:

packages/plugins/openapi/tests/baseline/rpc-type-coverage-3.0.0.baseline.yaml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2017,7 +2017,15 @@ components:
20172017
- data
20182018
properties:
20192019
data:
2020-
$ref: '#/components/schemas/FooCreateManyInput'
2020+
oneOf:
2021+
- $ref: '#/components/schemas/FooCreateManyInput'
2022+
- type: array
2023+
items:
2024+
$ref: '#/components/schemas/FooCreateManyInput'
2025+
skipDuplicates:
2026+
type: boolean
2027+
description: Do not insert records with unique fields or ID fields that already
2028+
exist.
20212029
meta:
20222030
$ref: '#/components/schemas/_Meta'
20232031
FooFindUniqueArgs:

packages/plugins/openapi/tests/baseline/rpc-type-coverage-3.1.0.baseline.yaml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2049,7 +2049,15 @@ components:
20492049
- data
20502050
properties:
20512051
data:
2052-
$ref: '#/components/schemas/FooCreateManyInput'
2052+
oneOf:
2053+
- $ref: '#/components/schemas/FooCreateManyInput'
2054+
- type: array
2055+
items:
2056+
$ref: '#/components/schemas/FooCreateManyInput'
2057+
skipDuplicates:
2058+
type: boolean
2059+
description: Do not insert records with unique fields or ID fields that already
2060+
exist.
20532061
meta:
20542062
$ref: '#/components/schemas/_Meta'
20552063
FooFindUniqueArgs:

packages/plugins/swr/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@zenstackhq/swr",
33
"displayName": "ZenStack plugin for generating SWR hooks",
4-
"version": "1.12.2",
4+
"version": "1.12.3",
55
"description": "ZenStack plugin for generating SWR hooks",
66
"main": "index.js",
77
"repository": {

packages/plugins/tanstack-query/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@zenstackhq/tanstack-query",
33
"displayName": "ZenStack plugin for generating tanstack-query hooks",
4-
"version": "1.12.2",
4+
"version": "1.12.3",
55
"description": "ZenStack plugin for generating tanstack-query hooks",
66
"main": "index.js",
77
"exports": {

packages/plugins/trpc/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@zenstackhq/trpc",
33
"displayName": "ZenStack plugin for tRPC",
4-
"version": "1.12.2",
4+
"version": "1.12.3",
55
"description": "ZenStack plugin for tRPC",
66
"main": "index.js",
77
"repository": {

packages/runtime/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@zenstackhq/runtime",
33
"displayName": "ZenStack Runtime Library",
4-
"version": "1.12.2",
4+
"version": "1.12.3",
55
"description": "Runtime of ZenStack for both client-side and server-side environments.",
66
"repository": {
77
"type": "git",

packages/schema/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"publisher": "zenstack",
44
"displayName": "ZenStack Language Tools",
55
"description": "Build scalable web apps with minimum code by defining authorization and validation rules inside the data schema that closer to the database",
6-
"version": "1.12.2",
6+
"version": "1.12.3",
77
"author": {
88
"name": "ZenStack Team"
99
},

packages/schema/src/plugins/zod/transformer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ export const ${this.name}ObjectSchema: SchemaType = ${schema} as SchemaType;`;
485485
imports.push(
486486
`import { ${modelName}CreateManyInputObjectSchema } from '../objects/${modelName}CreateManyInput.schema'`
487487
);
488-
codeBody += `createMany: z.object({ data: z.union([${modelName}CreateManyInputObjectSchema, z.array(${modelName}CreateManyInputObjectSchema)]) }),`;
488+
codeBody += `createMany: z.object({ data: z.union([${modelName}CreateManyInputObjectSchema, z.array(${modelName}CreateManyInputObjectSchema)]), skipDuplicates: z.boolean().optional() }),`;
489489
operations.push(['createMany', origModelName]);
490490
}
491491

packages/sdk/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@zenstackhq/sdk",
3-
"version": "1.12.2",
3+
"version": "1.12.3",
44
"description": "ZenStack plugin development SDK",
55
"main": "index.js",
66
"scripts": {

packages/sdk/src/model-meta-generator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ function getBackLink(field: DataModelField) {
206206
}
207207

208208
function getRelationName(field: DataModelField) {
209-
const relAttr = field.attributes.find((attr) => attr.decl.ref?.name === 'relation');
209+
const relAttr = field.attributes.find((attr) => attr.decl.ref?.name === '@relation');
210210
const relName = relAttr && relAttr.args?.[0] && getLiteral<string>(relAttr.args?.[0].value);
211211
return relName;
212212
}

packages/server/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@zenstackhq/server",
3-
"version": "1.12.2",
3+
"version": "1.12.3",
44
"displayName": "ZenStack Server-side Adapters",
55
"description": "ZenStack server-side adapters",
66
"homepage": "https://zenstack.dev",

packages/testtools/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@zenstackhq/testtools",
3-
"version": "1.12.2",
3+
"version": "1.12.3",
44
"description": "ZenStack Test Tools",
55
"main": "index.js",
66
"private": true,
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import { loadSchema } from '@zenstackhq/testtools';
2+
import { randomBytes } from 'crypto';
3+
4+
describe('issue 1241', () => {
5+
it('regression', async () => {
6+
const { enhance, prisma } = await loadSchema(
7+
`
8+
model User {
9+
id String @id @default(uuid())
10+
todos Todo[]
11+
12+
@@auth
13+
@@allow('all', true)
14+
}
15+
16+
model Todo {
17+
id String @id @default(uuid())
18+
19+
user_id String
20+
user User @relation(fields: [user_id], references: [id])
21+
22+
images File[] @relation("todo_images")
23+
documents File[] @relation("todo_documents")
24+
25+
@@allow('all', true)
26+
}
27+
28+
model File {
29+
id String @id @default(uuid())
30+
s3_key String @unique
31+
label String
32+
33+
todo_image_id String?
34+
todo_image Todo? @relation("todo_images", fields: [todo_image_id], references: [id])
35+
36+
todo_document_id String?
37+
todo_document Todo? @relation("todo_documents", fields: [todo_document_id], references: [id])
38+
39+
@@allow('all', true)
40+
}
41+
`,
42+
{ logPrismaQuery: true }
43+
);
44+
45+
const user = await prisma.user.create({
46+
data: {},
47+
});
48+
await prisma.todo.create({
49+
data: {
50+
user_id: user.id,
51+
52+
images: {
53+
create: new Array(3).fill(null).map((_, i) => ({
54+
s3_key: randomBytes(8).toString('hex'),
55+
label: `img-label-${i + 1}`,
56+
})),
57+
},
58+
59+
documents: {
60+
create: new Array(3).fill(null).map((_, i) => ({
61+
s3_key: randomBytes(8).toString('hex'),
62+
label: `doc-label-${i + 1}`,
63+
})),
64+
},
65+
},
66+
});
67+
68+
const db = enhance();
69+
70+
const todo = await db.todo.findFirst({ where: {}, include: { documents: true } });
71+
await expect(
72+
db.todo.update({
73+
where: { id: todo.id },
74+
data: {
75+
documents: {
76+
update: todo.documents.map((doc: any) => {
77+
return {
78+
where: { s3_key: doc.s3_key },
79+
data: { label: 'updated' },
80+
};
81+
}),
82+
},
83+
},
84+
include: { documents: true },
85+
})
86+
).toResolveTruthy();
87+
});
88+
});

0 commit comments

Comments
 (0)