From af08e838b71d63f0257bd8490e90ff0d823df5b9 Mon Sep 17 00:00:00 2001 From: Daniel O'Grady Date: Thu, 3 Sep 2026 08:00:39 +0200 Subject: [PATCH 1/2] fix: Support in GET --- lib/compile/csdl.js | 2 +- lib/compile/csdl2openapi.js | 24 +++ test/lib/compile/csdl2openapi.test.js | 8 +- .../Northwind-key-as-segment.openapi3.json | 125 ++++++++++++++ test/lib/compile/data/People.openapi3.json | 82 +++++++++ test/lib/compile/data/Products.openapi3.json | 89 ++++++++++ test/lib/compile/data/TripPin.openapi3.json | 44 +++++ .../compile/data/aggregation.openapi3.json | 14 ++ .../compile/data/annotations.openapi3.json | 65 ++++++- .../compile/data/authorization.openapi3.json | 11 ++ .../data/autoexposed-direct.openapi3.json | 14 ++ .../data/autoexposed-texts.openapi3.json | 14 ++ .../compile/data/containment.openapi3.json | 53 ++++++ test/lib/compile/data/csdl-16.1.openapi3.json | 29 ++++ .../data/custom-parameters.openapi3.json | 11 ++ .../data/description-fallback.openapi3.json | 11 ++ .../compile/data/descriptions.openapi3.json | 38 ++++ test/lib/compile/data/example.openapi3.json | 163 ++++++++++++++++++ .../data/immutable-composition.openapi3.json | 11 ++ .../compile/data/miscellaneous.openapi3.json | 41 +++++ .../compile/data/non-expandable.openapi3.json | 17 ++ ...meter-with-both-descriptions.openapi3.json | 11 ++ 22 files changed, 870 insertions(+), 7 deletions(-) diff --git a/lib/compile/csdl.js b/lib/compile/csdl.js index e223615..454b659 100644 --- a/lib/compile/csdl.js +++ b/lib/compile/csdl.js @@ -10,7 +10,7 @@ const CDS_TERMS = Object.freeze({ Authorization: ['Authorizations', 'SecuritySchemes'], Capabilities: ['BatchSupport', 'BatchSupported', 'ChangeTracking', 'CountRestrictions', 'DeleteRestrictions', 'DeepUpdateSupport', 'ExpandRestrictions', 'FilterRestrictions', 'IndexableByKey', 'InsertRestrictions', 'KeyAsSegmentSupported', 'NavigationRestrictions', 'OperationRestrictions', - 'ReadRestrictions', 'SearchRestrictions', 'SelectSupport', 'SkipSupported', 'SortRestrictions', 'TopSupported', 'UpdateRestrictions'], + 'ReadRestrictions', 'SearchRestrictions', 'SelectSupport', 'SkipSupported', 'SkipTokenSupported', 'SortRestrictions', 'TopSupported', 'UpdateRestrictions'], Core: ['AcceptableMediaTypes', 'Computed', 'ComputedDefaultValue', 'DefaultNamespace', 'Description', 'Example', 'Immutable', 'LongDescription', 'MediaType', 'OptionalParameter', 'Permissions', 'SchemaVersion'], JSON: ['Schema'], diff --git a/lib/compile/csdl2openapi.js b/lib/compile/csdl2openapi.js index 2fddefd..4deb434 100644 --- a/lib/compile/csdl2openapi.js +++ b/lib/compile/csdl2openapi.js @@ -799,6 +799,7 @@ module.exports.csdl2openapi = function ( if (collection) { optionTop(operation.parameters, target, restrictions); optionSkip(operation.parameters, target, restrictions); + optionSkiptoken(operation.parameters, target); if (csdl.$Version >= '4.0') optionSearch(operation.parameters, target, restrictions); optionFilter(operation.parameters, target, restrictions); optionCount(operation.parameters, target); @@ -1189,6 +1190,21 @@ see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-prot } } + /** + * Add parameter for query option $skiptoken + * @param {Array} parameters Array of parameters to augment + * @param {null | TargetRestrictions} target Target container child of path + */ + function optionSkiptoken(parameters, target) { + const supported = target == null || target[meta.voc.Capabilities.SkipTokenSupported] !== false; + + if (supported) { + parameters.push({ + $ref: '#/components/parameters/skiptoken' + }); + } + } + /** * Add parameter for query option $top * @param {Array} parameters Array of parameters to augment @@ -2259,6 +2275,14 @@ see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-prot minimum: 0 } }, + skiptoken: { + name: `${queryOptionPrefix}skiptoken`, + in: 'query', + description: 'Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)', + schema: { + type: 'string' + } + }, count: { name: `${queryOptionPrefix}count`, in: 'query', diff --git a/test/lib/compile/csdl2openapi.test.js b/test/lib/compile/csdl2openapi.test.js index e50aec8..652d5ba 100644 --- a/test/lib/compile/csdl2openapi.test.js +++ b/test/lib/compile/csdl2openapi.test.js @@ -554,7 +554,7 @@ describe("Edge cases", () => { const openapi = lib.csdl2openapi(csdl, {}); assert.deepStrictEqual( - openapi.paths["/sources"].get.parameters[5], + openapi.paths["/sources"].get.parameters[6], expected_sources_get_param ); }); @@ -1276,6 +1276,7 @@ describe("Edge cases", () => { parameters: [ { $ref: "#/components/parameters/top" }, { $ref: "#/components/parameters/skip" }, + { $ref: "#/components/parameters/skiptoken" }, { $ref: "#/components/parameters/search" }, { in: "query", @@ -1458,6 +1459,7 @@ describe("Edge cases", () => { parameters: [ { $ref: "#/components/parameters/top" }, { $ref: "#/components/parameters/skip" }, + { $ref: "#/components/parameters/skiptoken" }, { $ref: "#/components/parameters/search" }, { in: "query", @@ -1651,6 +1653,7 @@ see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-prot parameters: [ { $ref: "#/components/parameters/top" }, { $ref: "#/components/parameters/skip" }, + { $ref: "#/components/parameters/skiptoken" }, { $ref: "#/components/parameters/search" }, { in: "query", @@ -1834,6 +1837,7 @@ see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-prot parameters: [ { $ref: "#/components/parameters/top" }, { $ref: "#/components/parameters/skip" }, + { $ref: "#/components/parameters/skiptoken" }, { $ref: "#/components/parameters/search" }, { in: "query", @@ -2024,6 +2028,7 @@ see [Expand](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-prot parameters: [ { $ref: "#/components/parameters/top" }, { $ref: "#/components/parameters/skip" }, + { $ref: "#/components/parameters/skiptoken" }, { in: "query", name: "$search", @@ -3217,6 +3222,7 @@ describe("CAP / CS01", () => { parameters: [ { $ref: "#/components/parameters/top" }, { $ref: "#/components/parameters/skip" }, + { $ref: "#/components/parameters/skiptoken" }, { $ref: "#/components/parameters/search" }, { in: "query", diff --git a/test/lib/compile/data/Northwind-key-as-segment.openapi3.json b/test/lib/compile/data/Northwind-key-as-segment.openapi3.json index d70f87d..9c1ab8a 100644 --- a/test/lib/compile/data/Northwind-key-as-segment.openapi3.json +++ b/test/lib/compile/data/Northwind-key-as-segment.openapi3.json @@ -144,6 +144,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -427,6 +430,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -700,6 +706,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -869,6 +878,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1087,6 +1099,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1315,6 +1330,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1580,6 +1598,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1751,6 +1772,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1987,6 +2011,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2290,6 +2317,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2446,6 +2476,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2628,6 +2661,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -3052,6 +3088,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -3258,6 +3297,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -3453,6 +3495,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -3600,6 +3645,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -4013,6 +4061,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -4478,6 +4529,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -4785,6 +4839,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -5003,6 +5060,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -5495,6 +5555,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -5721,6 +5784,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -6021,6 +6087,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -6253,6 +6322,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -6628,6 +6700,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -6863,6 +6938,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -7081,6 +7159,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -7330,6 +7411,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -7595,6 +7679,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -7742,6 +7829,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -7978,6 +8068,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -8224,6 +8317,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -8493,6 +8589,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -8675,6 +8774,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -8897,6 +8999,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -9119,6 +9224,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -9424,6 +9532,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -9593,6 +9704,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -9864,6 +9978,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -13922,6 +14039,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/People.openapi3.json b/test/lib/compile/data/People.openapi3.json index df2ecbc..2d41d09 100644 --- a/test/lib/compile/data/People.openapi3.json +++ b/test/lib/compile/data/People.openapi3.json @@ -75,6 +75,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -403,6 +406,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -737,6 +743,68 @@ } } }, + "/PersonDetails({PersonID})/Photo": { + "parameters": [ + { + "description": "key: PersonID", + "in": "path", + "name": "PersonID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Retrieves photo of a single person detail.", + "tags": [ + "Person Details" + ], + "responses": { + "200": { + "description": "Retrieved photo", + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "put": { + "summary": "Changes photo of a single person detail.", + "tags": [ + "Person Details" + ], + "requestBody": { + "description": "New value for photo", + "required": true, + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, "/Suppliers": { "get": { "summary": "Retrieves a list of suppliers.", @@ -750,6 +818,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1034,6 +1105,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1787,6 +1861,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/Products.openapi3.json b/test/lib/compile/data/Products.openapi3.json index 9c2c67b..0795b81 100644 --- a/test/lib/compile/data/Products.openapi3.json +++ b/test/lib/compile/data/Products.openapi3.json @@ -78,6 +78,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -322,6 +325,69 @@ } } }, + "/Advertisements({ID})/$value": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + } + } + ], + "get": { + "summary": "Retrieves the media stream of a single advertisement.", + "tags": [ + "Advertisements" + ], + "responses": { + "200": { + "description": "Retrieved advertisement", + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "put": { + "summary": "Changes the media stream of a single advertisement.", + "tags": [ + "Advertisements" + ], + "requestBody": { + "description": "New media stream for advertisement", + "required": true, + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, "/Advertisements({ID})/FeaturedProduct": { "parameters": [ { @@ -416,6 +482,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -681,6 +750,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -841,6 +913,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1172,6 +1247,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1461,6 +1539,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2359,6 +2440,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/TripPin.openapi3.json b/test/lib/compile/data/TripPin.openapi3.json index 31bb1a5..fe228f3 100644 --- a/test/lib/compile/data/TripPin.openapi3.json +++ b/test/lib/compile/data/TripPin.openapi3.json @@ -81,6 +81,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -298,6 +301,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -636,6 +642,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -951,6 +960,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1288,6 +1300,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1393,6 +1408,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1633,6 +1651,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1925,6 +1946,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2291,6 +2315,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2655,6 +2682,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2769,6 +2799,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -3018,6 +3051,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -4535,6 +4571,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/aggregation.openapi3.json b/test/lib/compile/data/aggregation.openapi3.json index 3f3b3d5..da675b2 100644 --- a/test/lib/compile/data/aggregation.openapi3.json +++ b/test/lib/compile/data/aggregation.openapi3.json @@ -72,6 +72,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -289,6 +292,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1196,6 +1202,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/annotations.openapi3.json b/test/lib/compile/data/annotations.openapi3.json index ac36152..66646d3 100644 --- a/test/lib/compile/data/annotations.openapi3.json +++ b/test/lib/compile/data/annotations.openapi3.json @@ -69,6 +69,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -334,6 +337,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -484,7 +490,11 @@ "All Set", "Two Read Only Set" ], - "parameters": [], + "parameters": [ + { + "$ref": "#/components/parameters/skiptoken" + } + ], "responses": { "200": { "description": "Retrieved read only many", @@ -641,6 +651,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -769,7 +782,11 @@ "All Singleton", "Two Read Only Set" ], - "parameters": [], + "parameters": [ + { + "$ref": "#/components/parameters/skiptoken" + } + ], "responses": { "200": { "description": "Retrieved read only many", @@ -834,6 +851,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1088,6 +1108,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1353,6 +1376,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1439,7 +1465,11 @@ "tags": [ "Read List Only Set" ], - "parameters": [], + "parameters": [ + { + "$ref": "#/components/parameters/skiptoken" + } + ], "responses": { "200": { "description": "Retrieved read list only set", @@ -1506,6 +1536,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1641,6 +1674,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1728,7 +1764,11 @@ "Read Only Singleton", "Two Read Only Set" ], - "parameters": [], + "parameters": [ + { + "$ref": "#/components/parameters/skiptoken" + } + ], "responses": { "200": { "description": "Retrieved read only many", @@ -1793,6 +1833,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2076,7 +2119,11 @@ "tags": [ "Two Read Only Set" ], - "parameters": [], + "parameters": [ + { + "$ref": "#/components/parameters/skiptoken" + } + ], "responses": { "200": { "description": "Retrieved two read only set", @@ -2594,6 +2641,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/authorization.openapi3.json b/test/lib/compile/data/authorization.openapi3.json index d5141f4..0f109a0 100644 --- a/test/lib/compile/data/authorization.openapi3.json +++ b/test/lib/compile/data/authorization.openapi3.json @@ -69,6 +69,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -398,6 +401,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/autoexposed-direct.openapi3.json b/test/lib/compile/data/autoexposed-direct.openapi3.json index 2e8021a..05d5519 100644 --- a/test/lib/compile/data/autoexposed-direct.openapi3.json +++ b/test/lib/compile/data/autoexposed-direct.openapi3.json @@ -72,6 +72,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -375,6 +378,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -645,6 +651,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/autoexposed-texts.openapi3.json b/test/lib/compile/data/autoexposed-texts.openapi3.json index 2e0e9c3..1087481 100644 --- a/test/lib/compile/data/autoexposed-texts.openapi3.json +++ b/test/lib/compile/data/autoexposed-texts.openapi3.json @@ -69,6 +69,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -330,6 +333,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -729,6 +735,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/containment.openapi3.json b/test/lib/compile/data/containment.openapi3.json index 458a9e7..010b279 100644 --- a/test/lib/compile/data/containment.openapi3.json +++ b/test/lib/compile/data/containment.openapi3.json @@ -41,6 +41,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -303,6 +306,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -583,6 +589,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -881,6 +890,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1197,6 +1209,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1531,6 +1546,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1758,6 +1776,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2024,6 +2045,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2325,6 +2349,9 @@ "The Whole" ], "parameters": [ + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/count" } @@ -2702,6 +2729,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -3125,6 +3155,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -3389,6 +3422,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -3673,6 +3709,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -4006,6 +4045,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -4499,6 +4541,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -5410,6 +5455,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/csdl-16.1.openapi3.json b/test/lib/compile/data/csdl-16.1.openapi3.json index 9daaa5b..1ffd82e 100644 --- a/test/lib/compile/data/csdl-16.1.openapi3.json +++ b/test/lib/compile/data/csdl-16.1.openapi3.json @@ -83,6 +83,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -348,6 +351,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -507,6 +513,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -855,6 +864,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1014,6 +1026,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1540,6 +1555,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1875,6 +1893,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2523,6 +2544,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/custom-parameters.openapi3.json b/test/lib/compile/data/custom-parameters.openapi3.json index a194804..06f22bd 100644 --- a/test/lib/compile/data/custom-parameters.openapi3.json +++ b/test/lib/compile/data/custom-parameters.openapi3.json @@ -163,6 +163,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1085,6 +1088,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/description-fallback.openapi3.json b/test/lib/compile/data/description-fallback.openapi3.json index 63ec641..662a1fa 100644 --- a/test/lib/compile/data/description-fallback.openapi3.json +++ b/test/lib/compile/data/description-fallback.openapi3.json @@ -69,6 +69,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -443,6 +446,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/descriptions.openapi3.json b/test/lib/compile/data/descriptions.openapi3.json index 7bba0a5..727731a 100644 --- a/test/lib/compile/data/descriptions.openapi3.json +++ b/test/lib/compile/data/descriptions.openapi3.json @@ -247,6 +247,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -561,6 +564,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -904,6 +910,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1178,6 +1187,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1447,6 +1459,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1755,6 +1770,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2307,6 +2325,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2580,6 +2601,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2916,6 +2940,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -3189,6 +3216,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -3605,6 +3635,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/example.openapi3.json b/test/lib/compile/data/example.openapi3.json index f592216..b7bf185 100644 --- a/test/lib/compile/data/example.openapi3.json +++ b/test/lib/compile/data/example.openapi3.json @@ -87,6 +87,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -331,6 +334,69 @@ } } }, + "/Advertisements({ID})/$value": { + "parameters": [ + { + "description": "key: ID", + "in": "path", + "name": "ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "example": "01234567-89ab-cdef-0123-456789abcdef" + } + } + ], + "get": { + "summary": "Retrieves the media stream of a single advertisement.", + "tags": [ + "Advertisements" + ], + "responses": { + "200": { + "description": "Retrieved advertisement", + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "put": { + "summary": "Changes the media stream of a single advertisement.", + "tags": [ + "Advertisements" + ], + "requestBody": { + "description": "New media stream for advertisement", + "required": true, + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, "/Advertisements({ID})/FeaturedProduct": { "parameters": [ { @@ -425,6 +491,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -690,6 +759,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -890,6 +962,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1225,6 +1300,68 @@ } } }, + "/PersonDetails({PersonID})/Photo": { + "parameters": [ + { + "description": "key: PersonID", + "in": "path", + "name": "PersonID", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "get": { + "summary": "Retrieves photo of a single person detail.", + "tags": [ + "Person Details" + ], + "responses": { + "200": { + "description": "Retrieved photo", + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + }, + "put": { + "summary": "Changes photo of a single person detail.", + "tags": [ + "Person Details" + ], + "requestBody": { + "description": "New value for photo", + "required": true, + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "responses": { + "204": { + "description": "Success" + }, + "4XX": { + "$ref": "#/components/responses/error" + } + } + } + }, "/Persons": { "get": { "summary": "Retrieves a list of persons.", @@ -1238,6 +1375,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1566,6 +1706,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1897,6 +2040,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2186,6 +2332,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2541,6 +2690,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2826,6 +2978,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -4191,6 +4346,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/immutable-composition.openapi3.json b/test/lib/compile/data/immutable-composition.openapi3.json index 1444ff6..d7b71fd 100644 --- a/test/lib/compile/data/immutable-composition.openapi3.json +++ b/test/lib/compile/data/immutable-composition.openapi3.json @@ -69,6 +69,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -614,6 +617,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/miscellaneous.openapi3.json b/test/lib/compile/data/miscellaneous.openapi3.json index 54cacad..bc595de 100644 --- a/test/lib/compile/data/miscellaneous.openapi3.json +++ b/test/lib/compile/data/miscellaneous.openapi3.json @@ -93,6 +93,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -352,6 +355,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -496,6 +502,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -754,6 +763,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -865,6 +877,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1123,6 +1138,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1326,6 +1344,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1548,6 +1569,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1761,6 +1785,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2248,6 +2275,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2461,6 +2491,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -2998,6 +3031,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/non-expandable.openapi3.json b/test/lib/compile/data/non-expandable.openapi3.json index 00955a6..c25caa0 100644 --- a/test/lib/compile/data/non-expandable.openapi3.json +++ b/test/lib/compile/data/non-expandable.openapi3.json @@ -72,6 +72,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -333,6 +336,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -701,6 +707,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -1221,6 +1230,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", diff --git a/test/lib/compile/data/parameter-with-both-descriptions.openapi3.json b/test/lib/compile/data/parameter-with-both-descriptions.openapi3.json index 069c7d6..f72c8e5 100644 --- a/test/lib/compile/data/parameter-with-both-descriptions.openapi3.json +++ b/test/lib/compile/data/parameter-with-both-descriptions.openapi3.json @@ -69,6 +69,9 @@ { "$ref": "#/components/parameters/skip" }, + { + "$ref": "#/components/parameters/skiptoken" + }, { "$ref": "#/components/parameters/search" }, @@ -447,6 +450,14 @@ "minimum": 0 } }, + "skiptoken": { + "name": "$skiptoken", + "in": "query", + "description": "Paging - Skip token, see [Server-driven Paging](http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_ServerDrivenPaging)", + "schema": { + "type": "string" + } + }, "count": { "name": "$count", "in": "query", From 3119abac5c8d2fd0c9c42b7378dde5e66e43903d Mon Sep 17 00:00:00 2001 From: Daniel O'Grady Date: Thu, 3 Sep 2026 08:11:18 +0200 Subject: [PATCH 2/2] Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7be42e..4dfc671 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). ## [Unreleased] ### Added +- Emit `$skiptoken` query parameter for GET collection endpoints, enabling server-driven paging to be visible in the generated OpenAPI document ### Changed ### Deprecated ### Removed