Skip to content

Commit 4e80c29

Browse files
authored
merge dev to main (v2.7.0) (#1782)
2 parents be8c1c4 + 4fc4cf7 commit 4e80c29

File tree

141 files changed

+18645
-3119
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

141 files changed

+18645
-3119
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "zenstack-monorepo",
3-
"version": "2.6.2",
3+
"version": "2.7.0",
44
"description": "",
55
"scripts": {
66
"build": "pnpm -r build",

packages/ide/jetbrains/build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ plugins {
99
}
1010

1111
group = "dev.zenstack"
12-
version = "2.6.2"
12+
version = "2.7.0"
1313

1414
repositories {
1515
mavenCentral()

packages/ide/jetbrains/package.json

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

packages/language/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@zenstackhq/language",
3-
"version": "2.6.2",
3+
"version": "2.7.0",
44
"displayName": "ZenStack modeling language compiler",
55
"description": "ZenStack modeling language compiler",
66
"homepage": "https://zenstack.dev",

packages/misc/redwood/package.json

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

packages/plugins/openapi/package.json

+1-1
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": "2.6.2",
4+
"version": "2.7.0",
55
"description": "ZenStack plugin and runtime supporting OpenAPI",
66
"main": "index.js",
77
"repository": {

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

+12-4
Original file line numberDiff line numberDiff line change
@@ -409,14 +409,17 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
409409
private generateFilterParameters(model: DataModel) {
410410
const result: OAPI.ParameterObject[] = [];
411411

412+
const hasMultipleIds = model.fields.filter((f) => isIdField(f)).length > 1;
413+
412414
for (const field of model.fields) {
413415
if (isForeignKeyField(field)) {
414416
// no filtering with foreign keys because one can filter
415417
// directly on the relationship
416418
continue;
417419
}
418420

419-
if (isIdField(field)) {
421+
// For multiple ids, make each id field filterable like a regular field
422+
if (isIdField(field) && !hasMultipleIds) {
420423
// id filter
421424
result.push(this.makeFilterParameter(field, 'id', 'Id filter'));
422425
continue;
@@ -843,7 +846,9 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
843846
}
844847

845848
private generateModelEntity(model: DataModel, mode: 'read' | 'create' | 'update'): OAPI.SchemaObject {
846-
const fields = model.fields.filter((f) => !isIdField(f));
849+
const idFields = model.fields.filter((f) => isIdField(f));
850+
// For compound ids, each component is also exposed as a separate field
851+
const fields = idFields.length > 1 ? model.fields : model.fields.filter((f) => !isIdField(f));
847852

848853
const attributes: Record<string, OAPI.SchemaObject> = {};
849854
const relationships: Record<string, OAPI.ReferenceObject | OAPI.SchemaObject> = {};
@@ -869,6 +874,9 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
869874
!(isDataModel(field.$resolvedType?.decl) && field.type.array)
870875
) {
871876
required.push(field.name);
877+
} else if (mode === 'read') {
878+
// Until we support sparse fieldsets, all fields are required for read operations
879+
required.push(field.name);
872880
}
873881
}
874882
}
@@ -886,8 +894,8 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
886894

887895
if (mode === 'create') {
888896
// 'id' is required if there's no default value
889-
const idField = model.fields.find((f) => isIdField(f));
890-
if (idField && !hasAttribute(idField, '@default')) {
897+
const idFields = model.fields.filter((f) => isIdField(f));
898+
if (idFields.length && idFields.every((f) => !hasAttribute(f, '@default'))) {
891899
properties = { id: { type: 'string' }, ...properties };
892900
toplevelRequired.unshift('id');
893901
}

0 commit comments

Comments
 (0)