From 655456c02b5ae3fb6711b57c443a045f7034a276 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20J=C3=A4gle?= Date: Thu, 31 Mar 2022 17:11:24 +0200 Subject: [PATCH 1/6] WIP: Geographies API swager --- packages/mds-geography-api/spec/spec.yaml | 140 ++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 packages/mds-geography-api/spec/spec.yaml diff --git a/packages/mds-geography-api/spec/spec.yaml b/packages/mds-geography-api/spec/spec.yaml new file mode 100644 index 000000000..09adee91e --- /dev/null +++ b/packages/mds-geography-api/spec/spec.yaml @@ -0,0 +1,140 @@ +--- +# yamllint disable rule:line-length +openapi: 3.0.3 +info: + title: MDS Geography API + description: This specification contains a collection of RESTful APIs used to read Geographies (descriptions of geographical information, e.g. multi-polygons, currently represented via GeoJSON). + version: "1.0" + contact: + url: https://github.com/openmobilityfoundation/mobility-data-specification/tree/main/geography + +paths: + /geographies: + get: + operationId: getGeographies + description: Get list of geographies + tags: + - Geography + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/GeographiesReadResult" + + /geographies/{geographyId}: + get: + operationId: getGeography + description: Get a single geography + parameters: + - $ref: "#/components/schemas/uuid" + tags: + - Geography + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/GeographiesReadResult" +components: + schemas: + geography: + type: object + title: The geography object schema + additionalProperties: false + required: + - name + - geography_id + - geography_json + - published_date + properties: + name: + $ref: '#/components/schemas/string' + description: Name of geography + description: + $ref: '#/components/schemas/string' + description: Description of geography + geography_id: + $ref: '#/components/schemas/uuid' + description: Unique ID of geography + geography_json: + $ref: https://geojson.org/schema/FeatureCollection.json + description: The GeoJSON FeatureCollection that defines the geographical coordinates + effective_date: + $ref: '#/components/schemas/nullable_timestamp' + description: The date at which a Geography is considered 'live'. Must be at or after published_date. + published_date: + $ref: '#/components/schemas/timestamp' + description: Timestamp at which the geography was published i.e. made immutable + retire_date: + $ref: '#/components/schemas/nullable_timestamp' + description: Time that the geography is slated to retire. Once the retire date is passed, new policies can no longer reference it and old policies referencing it should be updated. Retired geographies should continue to be returned in the geographies list. Must be after effective_date. + prev_geographies: + $ref: '#/components/schemas/nullable_uuid_array' + description: Unique IDs of prior geographies replaced by this one + uniqueItems: true + string: + type: string + description: A length-limited string type + maxLength: 255 + default: '' + example: + - ABC123 + pattern: ^(.*)$ + timestamp: + type: number + description: Integer milliseconds since Unix epoch + multipleOf: 1 + minimum: 1514764800000 + uuid: + type: string + description: A UUID used to uniquely identifty an object + default: '' + example: + - 3c9604d6-b5ee-11e8-96f8-529269fb1459 + pattern: ^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$ + version: + type: string + description: The version of MDS this data represents + example: + - 1.2.0 + pattern: ^1\.2\.[0-9]+$ + uuid_array: + type: array + description: Array of UUID + items: + $id: '#/components/schemas/uuid_array/items' + $ref: '#/components/schemas/uuid' + nullable_timestamp: + nullable: true + type: number + description: Integer milliseconds since Unix epoch + multipleOf: 1 + minimum: 1514764800000 + nullable_uuid_array: + nullable: true + type: array + description: Array of UUID + items: + $ref: '#/components/schemas/uuid' + GeographiesReadResult: + type: object + additionalProperties: false + required: + - version + - data + properties: + data: + type: object + properties: + geographies: + type: array + title: The array of policy objects in this payload + items: + $ref: '#/components/schemas/geography' + version: + $id: '#/properties/version' + $ref: '#/components/schemas/version' + description: The version of MDS that the geographies represents From 5ed31bbce37901bcbd76bdc15a517425ee0dda34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20J=C3=A4gle?= Date: Fri, 1 Apr 2022 08:52:55 +0200 Subject: [PATCH 2/6] WIP: Add basic geography examples --- packages/mds-geography-api/spec/spec.yaml | 404 +++++++++++++++++++--- 1 file changed, 355 insertions(+), 49 deletions(-) diff --git a/packages/mds-geography-api/spec/spec.yaml b/packages/mds-geography-api/spec/spec.yaml index 09adee91e..66e2c34ae 100644 --- a/packages/mds-geography-api/spec/spec.yaml +++ b/packages/mds-geography-api/spec/spec.yaml @@ -1,80 +1,235 @@ ---- -# yamllint disable rule:line-length openapi: 3.0.3 info: title: MDS Geography API - description: This specification contains a collection of RESTful APIs used to read Geographies (descriptions of geographical information, e.g. multi-polygons, currently represented via GeoJSON). - version: "1.0" + description: >- + This specification contains a collection of RESTful APIs used to read + Geographies (descriptions of geographical information, e.g. multi-polygons, + currently represented via GeoJSON). + version: '1.0' contact: - url: https://github.com/openmobilityfoundation/mobility-data-specification/tree/main/geography - + url: >- + https://github.com/openmobilityfoundation/mobility-data-specification/tree/main/geography paths: /geographies: get: operationId: getGeographies - description: Get list of geographies - tags: - - Geography + description: Retrieve a list of geographies + parameters: + - $ref: '#/components/parameters/summary' + - $ref: '#/components/parameters/get_published' + - $ref: '#/components/parameters/get_unpublished' responses: - "200": + '200': description: OK content: application/json: schema: - $ref: "#/components/schemas/GeographiesReadResult" + $ref: '#/components/schemas/GeographiesReadResult' + examples: + Unfiltered: + description: >- + With no filters applied, all geographies are being returned. + Remark: On the real API, items may be filtered due to permissions defined in the scope of the JWT token + value: + version: "1.0" + data: + geographies: + - geography_id: 10000000-0000-0000-0000-000000000001 + name: Forum Romanum + published_date: 1514764800000 + geography_json: + type: FeatureCollection + features: + - type: Feature + geometry: + type: Polygon + coordinates: + - - - 12.487029433250427 + - 41.89096085158265 + - - 12.487362027168274 + - 41.89164371307738 + - - 12.485902905464172 + - 41.89229462103982 + - - 12.485275268554686 + - 41.89152790667126 + - - 12.487029433250427 + - 41.89096085158265 + - geography_id: 10000000-0000-0000-0000-000000000002 + geography_json: + type: FeatureCollection + name: Around Roma Termini + description: Public space next to Roma Termini central station + published_date: 1514764800000 + effective_date: 2147480047000 + features: + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.508792877197266 + - 41.89844397625825 + - - 12.50943660736084 + - 41.8988272930826 + - - 12.507033348083496 + - 41.90272421685849 + - - 12.502999305725098 + - 41.90483228960837 + - - 12.50089645385742 + - 41.90342691550862 + - - 12.508792877197266 + - 41.89844397625825 + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.500553131103516 + - 41.90352273745264 + - - 12.497978210449217 + - 41.90195762769289 + - - 12.501025199890137 + - 41.90026471068203 + - - 12.503213882446289 + - 41.90179792045829 + - - 12.500553131103516 + - 41.90352273745264 + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.497935295104979 + - 41.90186180340007 + - - 12.495017051696776 + - 41.89981751756279 + - - 12.506303787231445 + - 41.894323175085376 + - - 12.5079345703125 + - 41.895856527512976 + - - 12.497935295104979 + - 41.90186180340007 + - geography_id: 10000000-0000-0000-0000-000000000003 + name: Historic Rome + description: Draft – unpublished + geography_json: + type: FeatureCollection + features: + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.49746322631836 + - 41.91134771078812 + - - 12.491283416748047 + - 41.9112199638231 + - - 12.487506866455078 + - 41.9085372185006 + - - 12.472572326660156 + - 41.89167166631636 + - - 12.479610443115234 + - 41.888476931243254 + - - 12.475318908691406 + - 41.883365022797314 + - - 12.500381469726562 + - 41.86700416724044 + - - 12.531967163085938 + - 41.90023276842022 + - - 12.49746322631836 + - 41.91134771078812 + Summary: + description: >- + with `summary=true` requested, the GeoJSON descriptions are ommitted reducing the payload drastically + value: + version: "1.0" + data: + geographies: + - geography_id: 10000000-0000-0000-0000-000000000001 + name: Forum Romanum + published_date: 1514764800000 + - geography_id: 10000000-0000-0000-0000-000000000002 + name: Around Roma Termini + description: Public space next to Roma Termini central station + published_date: 1514764800000 + effective_date: 2147480047000 + - geography_id: 10000000-0000-0000-0000-000000000003 + name: Historic Rome + description: Draft – unpublished /geographies/{geographyId}: get: operationId: getGeography - description: Get a single geography + description: Retrieve a single geography parameters: - - $ref: "#/components/schemas/uuid" - tags: - - Geography + - $ref: '#/components/parameters/geographyId' responses: - "200": + '200': description: OK content: application/json: schema: - $ref: "#/components/schemas/GeographiesReadResult" + $ref: '#/components/schemas/GeographiesReadResult' + examples: + ForumRomanum: + $ref: '#/components/examples/ForumRomanumResponse' + AroundRomaTermini: + $ref: '#/components/examples/AroundRomaTerminiResponse' + HistoricRome: + $ref: '#/components/examples/HistoricRomeResponse' components: schemas: geography: type: object - title: The geography object schema + title: Geography + description: > + A geography describes a named, two-dimensional area. + + In the context of the mobility data specification, this area is used to + create segments within an agency's boundary. A geography does not + necessarily have to be described by a closed polygon: It can be any + two-dimensional shape: in fact, a geography may also be a polygon line + or a shap composed of multiple polygons. additionalProperties: false required: - - name - geography_id - geography_json - - published_date properties: + geography_id: + allOf: + - $ref: '#/components/schemas/uuid' + - description: Unique ID of geography name: - $ref: '#/components/schemas/string' - description: Name of geography + allOf: + - $ref: '#/components/schemas/string' + - description: Name of geography description: - $ref: '#/components/schemas/string' - description: Description of geography - geography_id: - $ref: '#/components/schemas/uuid' - description: Unique ID of geography - geography_json: - $ref: https://geojson.org/schema/FeatureCollection.json - description: The GeoJSON FeatureCollection that defines the geographical coordinates + allOf: + - $ref: '#/components/schemas/string' + - description: Description of geography effective_date: - $ref: '#/components/schemas/nullable_timestamp' - description: The date at which a Geography is considered 'live'. Must be at or after published_date. + allOf: + - $ref: '#/components/schemas/nullable_timestamp' + - description: >- + The date at which a Geography is considered 'live'. Must be at + or after published_date. published_date: - $ref: '#/components/schemas/timestamp' - description: Timestamp at which the geography was published i.e. made immutable - retire_date: - $ref: '#/components/schemas/nullable_timestamp' - description: Time that the geography is slated to retire. Once the retire date is passed, new policies can no longer reference it and old policies referencing it should be updated. Retired geographies should continue to be returned in the geographies list. Must be after effective_date. + allOf: + - $ref: '#/components/schemas/timestamp' + - description: >- + Timestamp at which the geography was published i.e. made + immutable prev_geographies: - $ref: '#/components/schemas/nullable_uuid_array' - description: Unique IDs of prior geographies replaced by this one - uniqueItems: true + allOf: + - $ref: '#/components/schemas/nullable_uuid_array' + - description: Unique IDs of prior geographies replaced by this one + - uniqueItems: true + geography_json: + allOf: + - $ref: https://geojson.org/schema/FeatureCollection.json + - description: >- + The GeoJSON FeatureCollection that defines the geographical + coordinates string: type: string description: A length-limited string type @@ -101,12 +256,6 @@ components: example: - 1.2.0 pattern: ^1\.2\.[0-9]+$ - uuid_array: - type: array - description: Array of UUID - items: - $id: '#/components/schemas/uuid_array/items' - $ref: '#/components/schemas/uuid' nullable_timestamp: nullable: true type: number @@ -131,10 +280,167 @@ components: properties: geographies: type: array - title: The array of policy objects in this payload items: $ref: '#/components/schemas/geography' version: - $id: '#/properties/version' $ref: '#/components/schemas/version' - description: The version of MDS that the geographies represents + parameters: + geographyId: + name: geographyId + in: path + required: true + schema: + $ref: '#/components/schemas/uuid' + summary: + name: summary + in: query + description: > + Excludes the geometry (the GeoJSON) from the result. + + Since the JSON representation of the are can be quite huge, this + parameter can be useful when only a list of geographies is necesssary + which is visualized in a second step. + schema: + type: boolean + get_published: + name: get_published + in: query + description: > + Restricts geographies to the ones that have been explicitly published. + + Remark: This parameter is only effective if the permission expressed as + scope within the JWT-token matches the parameter value. + schema: + type: boolean + get_unpublished: + name: get_unpublished + in: query + description: > + Restricts geographies to the ones that have not yet been published. + + Remark: This parameter is only effective if the permission expressed as + scope within the JWT-token matches the parameter value. + schema: + type: boolean + examples: + ForumRomanumResponse: + value: + version: "1.0" + data: + geographies: + - geography_id: 10000000-0000-0000-0000-000000000001 + name: Forum Romanum + published_date: 1514764800000 + geography_json: + type: FeatureCollection + features: + - type: Feature + geometry: + type: Polygon + coordinates: + - - - 12.487029433250427 + - 41.89096085158265 + - - 12.487362027168274 + - 41.89164371307738 + - - 12.485902905464172 + - 41.89229462103982 + - - 12.485275268554686 + - 41.89152790667126 + - - 12.487029433250427 + - 41.89096085158265 + AroundRomaTerminiResponse: + value: + version: "1.0" + data: + geographies: + - geography_id: 10000000-0000-0000-0000-000000000002 + geography_json: + type: FeatureCollection + name: Around Roma Termini + description: Public space next to Roma Termini central station + published_date: 1514764800000 + effective_date: 2147480047000 + features: + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.508792877197266 + - 41.89844397625825 + - - 12.50943660736084 + - 41.8988272930826 + - - 12.507033348083496 + - 41.90272421685849 + - - 12.502999305725098 + - 41.90483228960837 + - - 12.50089645385742 + - 41.90342691550862 + - - 12.508792877197266 + - 41.89844397625825 + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.500553131103516 + - 41.90352273745264 + - - 12.497978210449217 + - 41.90195762769289 + - - 12.501025199890137 + - 41.90026471068203 + - - 12.503213882446289 + - 41.90179792045829 + - - 12.500553131103516 + - 41.90352273745264 + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.497935295104979 + - 41.90186180340007 + - - 12.495017051696776 + - 41.89981751756279 + - - 12.506303787231445 + - 41.894323175085376 + - - 12.5079345703125 + - 41.895856527512976 + - - 12.497935295104979 + - 41.90186180340007 + HistoricRomeResponse: + value: + version: "1.0" + data: + geographies: + - geography_id: 10000000-0000-0000-0000-000000000003 + name: Historic Rome + description: Draft – unpublished + geography_json: + type: FeatureCollection + features: + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.49746322631836 + - 41.91134771078812 + - - 12.491283416748047 + - 41.9112199638231 + - - 12.487506866455078 + - 41.9085372185006 + - - 12.472572326660156 + - 41.89167166631636 + - - 12.479610443115234 + - 41.888476931243254 + - - 12.475318908691406 + - 41.883365022797314 + - - 12.500381469726562 + - 41.86700416724044 + - - 12.531967163085938 + - 41.90023276842022 + - - 12.49746322631836 + - 41.91134771078812 + Y2K38: + value: 2147480047000 \ No newline at end of file From 6e8326b9c43f09671962b918364fafe709c5d322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20J=C3=A4gle?= Date: Fri, 1 Apr 2022 16:43:39 +0200 Subject: [PATCH 3/6] WIP: Initial geographies swagger spec --- packages/mds-geography-api/package.json | 6 +- packages/mds-geography-api/spec/spec.yaml | 235 ++++----- pnpm-lock.yaml | 594 +++++++++++++++++++++- 3 files changed, 690 insertions(+), 145 deletions(-) diff --git a/packages/mds-geography-api/package.json b/packages/mds-geography-api/package.json index 07e362add..019fbceac 100644 --- a/packages/mds-geography-api/package.json +++ b/packages/mds-geography-api/package.json @@ -9,6 +9,7 @@ "_build": "tsc --build tsconfig.build.json", "_test": "PATH_PREFIX=/geography jest --runInBand", "build": "pnpm _build", + "mock": "prism mock spec/spec.yaml -p 7011", "start": "PATH_PREFIX=/geography pnpm watch server", "test": "pnpm _test", "ts-node": "pnpm build && ts-node -r ../../dotenv-flow.js", @@ -27,9 +28,10 @@ "express": "4.17.1" }, "devDependencies": { - "@mds-core/mds-test-data": "workspace:0.4.29" + "@mds-core/mds-test-data": "workspace:0.4.29", + "@stoplight/prism-cli": "4.8.0" }, "publishConfig": { "main": "dist/index.js" } -} +} \ No newline at end of file diff --git a/packages/mds-geography-api/spec/spec.yaml b/packages/mds-geography-api/spec/spec.yaml index 66e2c34ae..9856afe77 100644 --- a/packages/mds-geography-api/spec/spec.yaml +++ b/packages/mds-geography-api/spec/spec.yaml @@ -30,121 +30,14 @@ paths: description: >- With no filters applied, all geographies are being returned. Remark: On the real API, items may be filtered due to permissions defined in the scope of the JWT token - value: - version: "1.0" - data: - geographies: - - geography_id: 10000000-0000-0000-0000-000000000001 - name: Forum Romanum - published_date: 1514764800000 - geography_json: - type: FeatureCollection - features: - - type: Feature - geometry: - type: Polygon - coordinates: - - - - 12.487029433250427 - - 41.89096085158265 - - - 12.487362027168274 - - 41.89164371307738 - - - 12.485902905464172 - - 41.89229462103982 - - - 12.485275268554686 - - 41.89152790667126 - - - 12.487029433250427 - - 41.89096085158265 - - geography_id: 10000000-0000-0000-0000-000000000002 - geography_json: - type: FeatureCollection - name: Around Roma Termini - description: Public space next to Roma Termini central station - published_date: 1514764800000 - effective_date: 2147480047000 - features: - - type: Feature - properties: {} - geometry: - type: Polygon - coordinates: - - - - 12.508792877197266 - - 41.89844397625825 - - - 12.50943660736084 - - 41.8988272930826 - - - 12.507033348083496 - - 41.90272421685849 - - - 12.502999305725098 - - 41.90483228960837 - - - 12.50089645385742 - - 41.90342691550862 - - - 12.508792877197266 - - 41.89844397625825 - - type: Feature - properties: {} - geometry: - type: Polygon - coordinates: - - - - 12.500553131103516 - - 41.90352273745264 - - - 12.497978210449217 - - 41.90195762769289 - - - 12.501025199890137 - - 41.90026471068203 - - - 12.503213882446289 - - 41.90179792045829 - - - 12.500553131103516 - - 41.90352273745264 - - type: Feature - properties: {} - geometry: - type: Polygon - coordinates: - - - - 12.497935295104979 - - 41.90186180340007 - - - 12.495017051696776 - - 41.89981751756279 - - - 12.506303787231445 - - 41.894323175085376 - - - 12.5079345703125 - - 41.895856527512976 - - - 12.497935295104979 - - 41.90186180340007 - - geography_id: 10000000-0000-0000-0000-000000000003 - name: Historic Rome - description: Draft – unpublished - geography_json: - type: FeatureCollection - features: - - type: Feature - properties: {} - geometry: - type: Polygon - coordinates: - - - - 12.49746322631836 - - 41.91134771078812 - - - 12.491283416748047 - - 41.9112199638231 - - - 12.487506866455078 - - 41.9085372185006 - - - 12.472572326660156 - - 41.89167166631636 - - - 12.479610443115234 - - 41.888476931243254 - - - 12.475318908691406 - - 41.883365022797314 - - - 12.500381469726562 - - 41.86700416724044 - - - 12.531967163085938 - - 41.90023276842022 - - - 12.49746322631836 - - 41.91134771078812 + $ref: '#/components/examples/UnfilteredResponse' Summary: description: >- with `summary=true` requested, the GeoJSON descriptions are ommitted reducing the payload drastically value: version: "1.0" data: - geographies: + geographies: - geography_id: 10000000-0000-0000-0000-000000000001 name: Forum Romanum published_date: 1514764800000 @@ -254,8 +147,8 @@ components: type: string description: The version of MDS this data represents example: - - 1.2.0 - pattern: ^1\.2\.[0-9]+$ + - 1.0.0 + pattern: ^1\.0(\.[0-9]+)?$ nullable_timestamp: nullable: true type: number @@ -295,7 +188,7 @@ components: name: summary in: query description: > - Excludes the geometry (the GeoJSON) from the result. + Excludes the geometry (the GeoJSON) from the result. Since the JSON representation of the are can be quite huge, this parameter can be useful when only a list of geographies is necesssary @@ -327,7 +220,7 @@ components: value: version: "1.0" data: - geographies: + geographies: - geography_id: 10000000-0000-0000-0000-000000000001 name: Forum Romanum published_date: 1514764800000 @@ -335,6 +228,7 @@ components: type: FeatureCollection features: - type: Feature + properties: {} geometry: type: Polygon coordinates: @@ -352,7 +246,7 @@ components: value: version: "1.0" data: - geographies: + geographies: - geography_id: 10000000-0000-0000-0000-000000000002 geography_json: type: FeatureCollection @@ -412,7 +306,7 @@ components: value: version: "1.0" data: - geographies: + geographies: - geography_id: 10000000-0000-0000-0000-000000000003 name: Historic Rome description: Draft – unpublished @@ -442,5 +336,116 @@ components: - 41.90023276842022 - - 12.49746322631836 - 41.91134771078812 + UnfilteredResponse: + value: + version: '1.0' + data: + geographies: + - geography_id: 10000000-0000-0000-0000-000000000001 + name: Forum Romanum + published_date: 1514764800000 + geography_json: + type: FeatureCollection + features: + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.487029433250427 + - 41.89096085158265 + - - 12.487362027168274 + - 41.89164371307738 + - - 12.485902905464172 + - 41.89229462103982 + - - 12.485275268554686 + - 41.89152790667126 + - - 12.487029433250427 + - 41.89096085158265 + - geography_id: 10000000-0000-0000-0000-000000000002 + geography_json: + type: FeatureCollection + name: Around Roma Termini + description: Public space next to Roma Termini central station + published_date: 1514764800000 + effective_date: 2147480047000 + features: + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.508792877197266 + - 41.89844397625825 + - - 12.50943660736084 + - 41.8988272930826 + - - 12.507033348083496 + - 41.90272421685849 + - - 12.502999305725098 + - 41.90483228960837 + - - 12.50089645385742 + - 41.90342691550862 + - - 12.508792877197266 + - 41.89844397625825 + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.500553131103516 + - 41.90352273745264 + - - 12.497978210449217 + - 41.90195762769289 + - - 12.501025199890137 + - 41.90026471068203 + - - 12.503213882446289 + - 41.90179792045829 + - - 12.500553131103516 + - 41.90352273745264 + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.497935295104979 + - 41.90186180340007 + - - 12.495017051696776 + - 41.89981751756279 + - - 12.506303787231445 + - 41.894323175085376 + - - 12.5079345703125 + - 41.895856527512976 + - - 12.497935295104979 + - 41.90186180340007 + - geography_id: 10000000-0000-0000-0000-000000000003 + name: Historic Rome + description: Draft – unpublished + geography_json: + type: FeatureCollection + features: + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.49746322631836 + - 41.91134771078812 + - - 12.491283416748047 + - 41.9112199638231 + - - 12.487506866455078 + - 41.9085372185006 + - - 12.472572326660156 + - 41.89167166631636 + - - 12.479610443115234 + - 41.888476931243254 + - - 12.475318908691406 + - 41.883365022797314 + - - 12.500381469726562 + - 41.86700416724044 + - - 12.531967163085938 + - 41.90023276842022 + - - 12.49746322631836 + - 41.91134771078812 + Y2K38: value: 2147480047000 \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a47fc665c..8ec73683a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1007,6 +1007,7 @@ importers: '@mds-core/mds-test-data': workspace:0.4.29 '@mds-core/mds-types': workspace:0.9.2 '@mds-core/mds-utils': workspace:0.5.1 + '@stoplight/prism-cli': 4.8.0 '@types/express': 4.17.13 express: 4.17.1 dependencies: @@ -1022,6 +1023,7 @@ importers: express: 4.17.1 devDependencies: '@mds-core/mds-test-data': link:../mds-test-data + '@stoplight/prism-cli': 4.8.0 packages/mds-geography-author-api: specifiers: @@ -2130,6 +2132,11 @@ packages: - supports-color dev: true + /@faker-js/faker/6.0.0: + resolution: {integrity: sha512-10zLCKhp3YEmBuko71ivcMoIZcCLXgQVck6aNswX+AWwaek/L8S3yz9i8m3tHigRkcF6F2vI+qtdtyySHK+bGA==} + engines: {node: '>=14.0.0', npm: '>=7.0.0'} + dev: true + /@humanwhocodes/config-array/0.9.5: resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} engines: {node: '>=10.10.0'} @@ -2405,7 +2412,6 @@ packages: /@jsdevtools/ono/7.1.3: resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - dev: false /@lacuna-tech/rpc_ts/2.1.2-alpha.14: resolution: {integrity: sha512-BMO3WfaXgFiavsAteyAIcoHEmmcA0PqiBiSQxGGKxI9auywiJUYAYAsDOPF3Ta0n3qG+KN6FJiN6kSrdBVGxCQ==} @@ -2546,6 +2552,190 @@ packages: /@sqltools/formatter/1.2.3: resolution: {integrity: sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg==} + /@stoplight/http-spec/4.3.1: + resolution: {integrity: sha512-uuZPdmU30fQnBcR/H8IDqB0wMSDRw8ue8LH7gQGNOkxpXxHVGHi4oFx3hFrPr61fIMBiFXBnuw06Da+qe7LsXQ==} + engines: {node: '>=10'} + dependencies: + '@stoplight/json': 3.18.0 + '@stoplight/types': 12.5.0 + '@types/swagger-schema-official': 2.0.22 + '@types/to-json-schema': 0.2.1 + '@types/type-is': 1.6.3 + '@types/urijs': 1.19.19 + json-schema: 0.4.0 + json-schema-generator: 2.0.6 + lodash: 4.17.21 + openapi3-ts: 2.0.2 + postman-collection: 4.1.2 + type-is: 1.6.18 + urijs: 1.19.10 + dev: true + + /@stoplight/json-schema-merge-allof/0.7.8: + resolution: {integrity: sha512-JTDt6GYpCWQSb7+UW1P91IAp/pcLWis0mmEzWVFcLsrNgtUYK7JLtYYz0ZPSR4QVL0fJ0YQejM+MPq5iNDFO4g==} + dependencies: + compute-lcm: 1.1.2 + json-schema-compare: 0.2.2 + lodash: 4.17.21 + dev: true + + /@stoplight/json-schema-ref-parser/9.2.1: + resolution: {integrity: sha512-iKWeomA0HHDcbG0G8yVzQFs9y5vtF/GtjEDSuhofdHcPxXMhnTUh8d9NdbhXPCVhwIRmdvzP3jMv2A3747hyWg==} + dependencies: + '@jsdevtools/ono': 7.1.3 + '@stoplight/path': 1.3.2 + '@stoplight/yaml': 4.2.2 + abort-controller: 3.0.0 + call-me-maybe: 1.0.1 + fastestsmallesttextencoderdecoder: 1.0.22 + isomorphic-fetch: 3.0.0 + transitivePeerDependencies: + - encoding + dev: true + + /@stoplight/json-schema-sampler/0.2.2: + resolution: {integrity: sha512-QP4ZwXh3dEn5wHZs2361kdf4BmaKiiP+pxIImAuVTLmulv9sBTB+ETG7Y5z9u4DOUQu2GNxfUY10iSwuBQMXrg==} + dependencies: + '@types/json-schema': 7.0.10 + json-pointer: 0.6.2 + dev: true + + /@stoplight/json/3.18.0: + resolution: {integrity: sha512-JeaOaee2dKOxz3gZKMfx+KxUi5pH7AU/TRgqnSEkQ+3FQhNgx6XYPZwvcfcsVOiHUa2tYIP3kRl30BgYWtSOow==} + engines: {node: '>=8.3.0'} + dependencies: + '@stoplight/ordered-object-literal': 1.0.2 + '@stoplight/types': 12.5.0 + jsonc-parser: 2.2.1 + lodash: 4.17.21 + safe-stable-stringify: 1.1.1 + dev: true + + /@stoplight/ordered-object-literal/1.0.2: + resolution: {integrity: sha512-0ZMS/9sNU3kVo/6RF3eAv7MK9DY8WLjiVJB/tVyfF2lhr2R4kqh534jZ0PlrFB9CRXrdndzn1DbX6ihKZXft2w==} + engines: {node: '>=8'} + dev: true + + /@stoplight/path/1.3.2: + resolution: {integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==} + engines: {node: '>=8'} + dev: true + + /@stoplight/prism-cli/4.8.0: + resolution: {integrity: sha512-R2Qn+yX/GI13o19vW3y8doqtnTzE1rNNNrO5vspkCD9t1sSu33og2ZJaq/xSc2GshdtE2EWjj4YF7F1Xwr9PPQ==} + engines: {node: '>=12'} + hasBin: true + dependencies: + '@stoplight/http-spec': 4.3.1 + '@stoplight/json': 3.18.0 + '@stoplight/json-schema-ref-parser': 9.2.1 + '@stoplight/prism-core': 4.8.0 + '@stoplight/prism-http': 4.8.0 + '@stoplight/prism-http-server': 4.8.0 + '@stoplight/types': 12.5.0 + chalk: 4.1.2 + chokidar: 3.5.3 + fp-ts: 2.11.9 + json-schema-faker: 0.5.0-rcv.40 + lodash: 4.17.21 + node-fetch: 2.6.7 + pino: 6.13.3 + signale: 1.4.0 + split2: 3.2.2 + tslib: 2.3.1 + uri-template-lite: 20.5.0 + urijs: 1.19.10 + yargs: 16.2.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@stoplight/prism-core/4.8.0: + resolution: {integrity: sha512-RWEwJnr3yeCt1xd4G/uQ2SfLj2cYVTlYNKoxICZaI/qrpCSAdJXm6TOcggHBQMesrGUAQdhNFfRfg81w5jCXSw==} + engines: {node: '>=12'} + dependencies: + fp-ts: 2.11.9 + lodash: 4.17.21 + pino: 6.13.3 + tslib: 2.3.1 + dev: true + + /@stoplight/prism-http-server/4.8.0: + resolution: {integrity: sha512-QWO/RaUSFIAJ6x7PU/KBXH2XDo/a1kGzYYGnEF4bJY7uk1L434uOpideFUZjNOprVgG3ctMJO5/PdaRRqHYN+g==} + engines: {node: '>=12'} + dependencies: + '@stoplight/prism-core': 4.8.0 + '@stoplight/prism-http': 4.8.0 + '@stoplight/types': 12.5.0 + fast-xml-parser: 3.21.1 + fp-ts: 2.11.9 + io-ts: 2.2.16_fp-ts@2.11.9 + lodash: 4.17.21 + micri: 4.5.0 + node-fetch: 2.6.7 + parse-prefer-header: 1.0.0 + tslib: 2.3.1 + type-is: 1.6.18 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@stoplight/prism-http/4.8.0: + resolution: {integrity: sha512-J6LRvfP/BYy3Jms1cEDvAj8BZIGSLaagQjw7S+E/ZrrNdnc2BVgGmidvK+/+hwBeHHhUL/zhzw7DO9wVcV+YQw==} + engines: {node: '>=12'} + dependencies: + '@stoplight/json': 3.18.0 + '@stoplight/json-schema-merge-allof': 0.7.8 + '@stoplight/json-schema-sampler': 0.2.2 + '@stoplight/prism-core': 4.8.0 + '@stoplight/types': 12.5.0 + '@stoplight/yaml': 4.2.2 + abstract-logging: 2.0.1 + accepts: 1.3.8 + ajv: 8.6.3 + ajv-formats: 2.1.1 + caseless: 0.12.0 + content-type: 1.0.4 + faker: 5.5.3 + fp-ts: 2.11.9 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.0 + json-schema-faker: 0.5.0-rcv.40 + lodash: 4.17.21 + node-fetch: 2.6.7 + pino: 6.13.3 + tslib: 2.3.1 + type-is: 1.6.18 + uri-template-lite: 20.5.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@stoplight/types/12.5.0: + resolution: {integrity: sha512-dwqYcDrGmEyUv5TWrDam5TGOxU72ufyQ7hnOIIDdmW5ezOwZaBFoR5XQ9AsH49w7wgvOqB2Bmo799pJPWnpCbg==} + engines: {node: '>=8'} + dependencies: + '@types/json-schema': 7.0.10 + utility-types: 3.10.0 + dev: true + + /@stoplight/yaml-ast-parser/0.0.48: + resolution: {integrity: sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg==} + dev: true + + /@stoplight/yaml/4.2.2: + resolution: {integrity: sha512-N086FU8pmSpjc5TvMBjmlTniZVh3OXzmEh6SYljSLiuv6aMxgjyjf13YrAlUqgu0b4b6pQ5zmkjrfo9i0SiLsw==} + engines: {node: '>=10.8'} + dependencies: + '@stoplight/ordered-object-literal': 1.0.2 + '@stoplight/types': 12.5.0 + '@stoplight/yaml-ast-parser': 0.0.48 + tslib: 2.3.1 + dev: true + /@swc/cli/0.1.55_@swc+core@1.2.151: resolution: {integrity: sha512-akkLuRexFq8XTi6JNZ27mXD4wcKXLDSLj4g7YMU+/upFM8IeD1IEp1Mxtre7MzCZn+QOQgPF8N8IReJoHuSn3g==} engines: {node: '>= 12.13'} @@ -2723,6 +2913,11 @@ packages: engines: {node: '>= 6'} dev: true + /@tootallnate/once/2.0.0: + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + dev: true + /@tsconfig/node10/1.0.8: resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==} dev: true @@ -3019,7 +3214,6 @@ packages: /@types/node/17.0.23: resolution: {integrity: sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==} - dev: false /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -3117,16 +3311,36 @@ packages: '@types/superagent': 4.1.15 dev: true + /@types/swagger-schema-official/2.0.22: + resolution: {integrity: sha512-7yQiX6MWSFSvc/1wW5smJMZTZ4fHOd+hqLr3qr/HONDxHEa2bnYAsOcGBOEqFIjd4yetwMOdEDdeW+udRAQnHA==} + dev: true + /@types/tapable/1.0.8: resolution: {integrity: sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==} dev: true + /@types/to-json-schema/0.2.1: + resolution: {integrity: sha512-DlvjodmdSrih054SrUqgS3bIZ93allrfbzjFUFmUhAtC60O+B/doLfgB8stafkEFyrU/zXWtPlX/V1H94iKv/A==} + dependencies: + '@types/json-schema': 7.0.10 + dev: true + + /@types/type-is/1.6.3: + resolution: {integrity: sha512-PNs5wHaNcBgCQG5nAeeZ7OvosrEsI9O4W2jAOO9BCCg4ux9ZZvH2+0iSCOIDBiKuQsiNS8CBlmfX9f5YBQ22cA==} + dependencies: + '@types/node': 17.0.23 + dev: true + /@types/uglify-js/3.13.1: resolution: {integrity: sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==} dependencies: source-map: 0.6.1 dev: true + /@types/urijs/1.19.19: + resolution: {integrity: sha512-FDJNkyhmKLw7uEvTxx5tSXfPeQpO0iy73Ry+PmYZJvQy0QIWX8a7kJ4kLWRf+EbTPJEPDSgPXHaM7pzr5lmvCg==} + dev: true + /@types/uuid/8.3.1: resolution: {integrity: sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==} dev: false @@ -3452,13 +3666,23 @@ packages: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true + /abort-controller/3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: true + + /abstract-logging/2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + dev: true + /accepts/1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - dev: false /acorn-globals/6.0.0: resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} @@ -3517,7 +3741,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.3 + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -3545,7 +3769,6 @@ packages: optional: true dependencies: ajv: 8.6.3 - dev: false /ajv-keywords/3.5.2_ajv@6.12.6: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} @@ -3580,7 +3803,6 @@ packages: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: false /amdefine/1.0.1: resolution: {integrity: sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=} @@ -3809,7 +4031,6 @@ packages: /atomic-sleep/1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} - dev: false /await-lock/2.1.0: resolution: {integrity: sha512-t7Zm5YGgEEc/3eYAicF32m/TNvL+XOeYZy9CvBUeJY/szM7frLolFylhrlZNWV/ohWhcUXygrBGjYmoQdxF4CQ==} @@ -3977,6 +4198,10 @@ packages: inherits: 2.0.4 readable-stream: 3.6.0 + /bluebird/3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + /body-parser/1.19.0: resolution: {integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==} engines: {node: '>= 0.8'} @@ -4159,7 +4384,6 @@ packages: /call-me-maybe/1.0.1: resolution: {integrity: sha1-JtII6onje1y95gJQoV8DHBak1ms=} - dev: false /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -4235,6 +4459,11 @@ packages: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true + /charset/1.0.1: + resolution: {integrity: sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==} + engines: {node: '>=4.0.0'} + dev: true + /chokidar/3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -4485,6 +4714,23 @@ packages: vary: 1.1.2 dev: false + /compute-gcd/1.2.1: + resolution: {integrity: sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==} + dependencies: + validate.io-array: 1.0.6 + validate.io-function: 1.0.2 + validate.io-integer-array: 1.0.0 + dev: true + + /compute-lcm/1.1.2: + resolution: {integrity: sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==} + dependencies: + compute-gcd: 1.2.1 + validate.io-array: 1.0.6 + validate.io-function: 1.0.2 + validate.io-integer-array: 1.0.0 + dev: true + /concat-map/0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} @@ -4524,7 +4770,6 @@ packages: /content-type/1.0.4: resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} engines: {node: '>= 0.6'} - dev: false /convert-source-map/1.8.0: resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} @@ -5633,6 +5878,11 @@ packages: through: 2.3.8 dev: false + /event-target-shim/5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: true + /events/1.1.1: resolution: {integrity: sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=} engines: {node: '>=0.4.x'} @@ -5769,6 +6019,10 @@ packages: engines: {'0': node >=0.6.0} dev: true + /faker/5.5.3: + resolution: {integrity: sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==} + dev: true + /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -5798,7 +6052,6 @@ packages: /fast-redact/3.1.1: resolution: {integrity: sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A==} engines: {node: '>=6'} - dev: false /fast-safe-stringify/2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} @@ -5807,14 +6060,24 @@ packages: resolution: {integrity: sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==} dev: false + /fast-xml-parser/3.21.1: + resolution: {integrity: sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: true + /fastest-levenshtein/1.0.12: resolution: {integrity: sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==} dev: true + /fastestsmallesttextencoderdecoder/1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + dev: true + /fastify-warning/0.2.0: resolution: {integrity: sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw==} deprecated: This module renamed to process-warning - dev: false /fastq/1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} @@ -5828,6 +6091,13 @@ packages: bser: 2.1.1 dev: true + /figures/2.0.0: + resolution: {integrity: sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + /figures/3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -5849,6 +6119,11 @@ packages: flat-cache: 3.0.4 dev: true + /file-type/3.9.0: + resolution: {integrity: sha1-JXoHg4TR24CHvESdEH1SpSZyuek=} + engines: {node: '>=0.10.0'} + dev: true + /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -5950,7 +6225,6 @@ packages: /flatstr/1.0.12: resolution: {integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==} - dev: false /flatted/2.0.2: resolution: {integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==} @@ -5960,6 +6234,10 @@ packages: resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} dev: true + /foreach/2.0.5: + resolution: {integrity: sha1-C+4AUBiusmDQo6865ljdATbsG5k=} + dev: true + /foreground-child/2.0.0: resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} engines: {node: '>=8.0.0'} @@ -5989,6 +6267,10 @@ packages: combined-stream: 1.0.8 mime-types: 2.1.35 + /format-util/1.0.5: + resolution: {integrity: sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==} + dev: true + /formidable/1.2.6: resolution: {integrity: sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==} deprecated: 'Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau' @@ -5999,6 +6281,10 @@ packages: engines: {node: '>= 0.6'} dev: false + /fp-ts/2.11.9: + resolution: {integrity: sha512-GhYlNKkCOfdjp71ocdtyaQGoqCswEoWDJLRr+2jClnBBq2dnSOtd6QxmJdALq8UhfqCyZZ0f0lxadU4OhwY9nw==} + dev: true + /fresh/0.5.2: resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} engines: {node: '>= 0.6'} @@ -6309,6 +6595,10 @@ packages: uglify-js: 3.15.3 dev: true + /handler-agent/0.2.0: + resolution: {integrity: sha512-cUduQxa5p3TFtGmb55mrRbkk/3EJCsLSeFrCIuTakQHQlYVWXeW2L9IUQUHyoHLI4UgpBNaN2JrZ0He1jPu+vg==} + dev: true + /har-schema/2.0.0: resolution: {integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=} engines: {node: '>=4'} @@ -6436,6 +6726,21 @@ packages: - supports-color dev: true + /http-proxy-agent/5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /http-reasons/0.1.0: + resolution: {integrity: sha1-qVPKZwB4Zp3eFCzomUAbnW6F07Q=} + dev: true + /http-signature/1.2.0: resolution: {integrity: sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=} engines: {node: '>=0.8', npm: '>=1.3.7'} @@ -6453,7 +6758,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.3 + debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true @@ -6479,6 +6784,13 @@ packages: dependencies: safer-buffer: 2.1.2 + /iconv-lite/0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + /ieee754/1.1.13: resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} dev: false @@ -6612,6 +6924,14 @@ packages: engines: {node: '>= 0.10'} dev: true + /io-ts/2.2.16_fp-ts@2.11.9: + resolution: {integrity: sha512-y5TTSa6VP6le0hhmIyN0dqEXkrZeJLeC5KApJq6VLci3UEKF80lZ+KuoUs02RhBxNWlrqSNxzfI7otLX1Euv8Q==} + peerDependencies: + fp-ts: ^2.5.0 + dependencies: + fp-ts: 2.11.9 + dev: true + /ioredis/4.27.10: resolution: {integrity: sha512-BtV2mEoZlhnW0EyxuK49V5iutLeZeJAYi/+Fuc4Q6DpDjq0cGMLODdS/+Kb5CHpT7v3YT6SK0vgJF6y0Ls4+Bg==} engines: {node: '>=6'} @@ -6890,6 +7210,15 @@ packages: - encoding dev: false + /isomorphic-fetch/3.0.0: + resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} + dependencies: + node-fetch: 2.6.7 + whatwg-fetch: 3.6.2 + transitivePeerDependencies: + - encoding + dev: true + /isstream/0.1.2: resolution: {integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=} dev: true @@ -7555,13 +7884,57 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true + /json-pointer/0.6.2: + resolution: {integrity: sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==} + dependencies: + foreach: 2.0.5 + dev: true + + /json-promise/1.1.8: + resolution: {integrity: sha1-e3QSBCLRbdtEmqMXBAP8aa1BZAI=} + dependencies: + bluebird: 3.7.2 + dev: true + + /json-schema-compare/0.2.2: + resolution: {integrity: sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==} + dependencies: + lodash: 4.17.21 + dev: true + + /json-schema-faker/0.5.0-rcv.40: + resolution: {integrity: sha512-BczZvu03jKrGh3ovCWrHusiX6MwiaKK2WZeyomKBNA8Nm/n7aBYz0mub1CnONB6cgxOZTNxx4afNmLblbUmZbA==} + hasBin: true + dependencies: + json-schema-ref-parser: 6.1.0 + jsonpath-plus: 5.1.0 + dev: true + + /json-schema-generator/2.0.6: + resolution: {integrity: sha512-WyWDTK3jnv/OBI43uWw7pTGoDQ62PfccySZCHTBsOfS6D9QhsQr+95Wcwq5lqjzkiDQkTNkWzXEqHOhswfufmw==} + hasBin: true + dependencies: + json-promise: 1.1.8 + mkdirp: 0.5.5 + optimist: 0.6.1 + pretty-data: 0.40.0 + request: 2.88.2 + dev: true + + /json-schema-ref-parser/6.1.0: + resolution: {integrity: sha512-pXe9H1m6IgIpXmE5JSb8epilNTGsmTb2iPohAXpOdhqGFbQjNeHHsZxU+C8w6T81GZxSPFLeUoqDJmzxx5IGuw==} + dependencies: + call-me-maybe: 1.0.1 + js-yaml: 3.14.1 + ono: 4.0.11 + dev: true + /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true /json-schema-traverse/1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: false /json-schema/0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} @@ -7599,6 +7972,10 @@ packages: dependencies: minimist: 1.2.6 + /jsonc-parser/2.2.1: + resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==} + dev: true + /jsonc-parser/3.0.0: resolution: {integrity: sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==} dev: true @@ -7622,6 +7999,11 @@ packages: engines: {'0': node >= 0.2.0} dev: false + /jsonpath-plus/5.1.0: + resolution: {integrity: sha512-890w2Pjtj0iswAxalRlt2kHthi6HKrXEfZcn+ZNZptv7F3rUGIeDuZo+C+h4vXBHLEsVjJrHeCm35nYeZLzSBQ==} + engines: {node: '>=10.0.0'} + dev: true + /jsonwebtoken/8.5.1: resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} engines: {node: '>=4', npm: '>=1.4.28'} @@ -7768,6 +8150,11 @@ packages: supports-color: 8.1.1 dev: true + /liquid-json/0.3.1: + resolution: {integrity: sha1-kVWhgTbYprJhXl8W+aJEira1Duo=} + engines: {node: '>=4'} + dev: true + /listr2/3.14.0_enquirer@2.3.6: resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} engines: {node: '>=10.0.0'} @@ -7788,6 +8175,16 @@ packages: wrap-ansi: 7.0.0 dev: true + /load-json-file/4.0.0: + resolution: {integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs=} + engines: {node: '>=4'} + dependencies: + graceful-fs: 4.2.9 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + dev: true + /load-yaml-file/0.2.0: resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} engines: {node: '>=6'} @@ -7825,6 +8222,10 @@ packages: p-locate: 5.0.0 dev: true + /lodash.camelcase/4.3.0: + resolution: {integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY=} + dev: true + /lodash.defaults/4.2.0: resolution: {integrity: sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=} dev: false @@ -8061,7 +8462,6 @@ packages: /media-typer/0.3.0: resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} engines: {node: '>= 0.6'} - dev: false /meow/6.1.1: resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} @@ -8097,6 +8497,13 @@ packages: resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=} engines: {node: '>= 0.6'} + /micri/4.5.0: + resolution: {integrity: sha512-HcfgPyvXUHZXnA6OopIHg1c1lcyakoBPmgxiZGIiguvERDn7Kx3a3oar867IiLS3bTtfhnNwQ7Kgi/dNf5xctg==} + engines: {node: '>= 12.0.0'} + dependencies: + handler-agent: 0.2.0 + dev: true + /micromatch/4.0.4: resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} engines: {node: '>=8.6'} @@ -8109,6 +8516,12 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + /mime-format/2.0.1: + resolution: {integrity: sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg==} + dependencies: + charset: 1.0.1 + dev: true + /mime-types/2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -8161,6 +8574,10 @@ packages: kind-of: 6.0.3 dev: true + /minimist/0.0.10: + resolution: {integrity: sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=} + dev: true + /minimist/1.2.6: resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} @@ -8292,7 +8709,6 @@ packages: /negotiator/0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} - dev: false /neo-async/2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -8331,7 +8747,6 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 - dev: false /node-forge/1.3.0: resolution: {integrity: sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==} @@ -8590,11 +9005,30 @@ packages: mimic-fn: 2.1.0 dev: true + /ono/4.0.11: + resolution: {integrity: sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g==} + dependencies: + format-util: 1.0.5 + dev: true + + /openapi3-ts/2.0.2: + resolution: {integrity: sha512-TxhYBMoqx9frXyOgnRHufjQfPXomTIHYKhSKJ6jHfj13kS8OEIhvmE8CTuQyKtjjWttAjX5DPxM1vmalEpo8Qw==} + dependencies: + yaml: 1.10.2 + dev: true + /opentracing/0.14.7: resolution: {integrity: sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q==} engines: {node: '>=0.10'} dev: false + /optimist/0.6.1: + resolution: {integrity: sha1-2j6nRob6IaGaERwybpDrFaAZZoY=} + dependencies: + minimist: 0.0.10 + wordwrap: 0.0.3 + dev: true + /optionator/0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} @@ -8767,6 +9201,14 @@ packages: callsites: 3.1.0 dev: true + /parse-json/4.0.0: + resolution: {integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: true + /parse-json/5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -8777,6 +9219,12 @@ packages: lines-and-columns: 1.2.4 dev: true + /parse-prefer-header/1.0.0: + resolution: {integrity: sha1-da63N2a7ZTHd4GPuAjh26tSWSPc=} + dependencies: + lodash.camelcase: 4.3.0 + dev: true + /parse5-htmlparser2-tree-adapter/6.0.1: resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} dependencies: @@ -8897,6 +9345,11 @@ packages: engines: {node: '>=8.6'} dev: true + /pify/3.0.0: + resolution: {integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=} + engines: {node: '>=4'} + dev: true + /pify/4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -8933,7 +9386,6 @@ packages: /pino-std-serializers/3.2.0: resolution: {integrity: sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==} - dev: false /pino/6.13.3: resolution: {integrity: sha512-tJy6qVgkh9MwNgqX1/oYi3ehfl2Y9H0uHyEEMsBe74KinESIjdMrMQDWpcZPpPicg3VV35d/GLQZmo4QgU2Xkg==} @@ -8946,13 +9398,20 @@ packages: pino-std-serializers: 3.2.0 quick-format-unescaped: 4.0.4 sonic-boom: 1.4.1 - dev: false /pirates/4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} dev: true + /pkg-conf/2.1.0: + resolution: {integrity: sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=} + engines: {node: '>=4'} + dependencies: + find-up: 2.1.0 + load-json-file: 4.0.0 + dev: true + /pkg-dir/4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} @@ -9009,6 +9468,30 @@ packages: dependencies: xtend: 4.0.2 + /postman-collection/4.1.2: + resolution: {integrity: sha512-nRYgzeo2VwQZZXF8YUMUvG8wKXPmjQ+BZPMXix+tNRWBHWAdqa191AwBL80LQxvHzECYp8Lp1JXMpg4OMXHLnw==} + engines: {node: '>=10'} + dependencies: + '@faker-js/faker': 6.0.0 + file-type: 3.9.0 + http-reasons: 0.1.0 + iconv-lite: 0.6.3 + liquid-json: 0.3.1 + lodash: 4.17.21 + mime-format: 2.0.1 + mime-types: 2.1.35 + postman-url-encoder: 3.0.5 + semver: 7.3.5 + uuid: 8.3.2 + dev: true + + /postman-url-encoder/3.0.5: + resolution: {integrity: sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA==} + engines: {node: '>=10'} + dependencies: + punycode: 2.1.1 + dev: true + /prebuild-install/7.0.1: resolution: {integrity: sha512-QBSab31WqkyxpnMWQxubYAHR5S9B2+r81ucocew34Fkl98FhvKIF50jIJnNOBmAZfyNV7vE5T6gd3hTVWgY6tg==} engines: {node: '>=10'} @@ -9092,6 +9575,10 @@ packages: hasBin: true dev: true + /pretty-data/0.40.0: + resolution: {integrity: sha1-Vyqo6iNGdGerlLa1Jmpv2cj93XI=} + dev: true + /pretty-format/27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -9255,7 +9742,6 @@ packages: /quick-format-unescaped/4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} - dev: false /quick-lru/4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} @@ -9480,7 +9966,6 @@ packages: /require-from-string/2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - dev: false /require-main-filename/2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} @@ -9602,6 +10087,10 @@ packages: /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /safe-stable-stringify/1.1.1: + resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==} + dev: true + /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -9776,6 +10265,15 @@ packages: /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + /signale/1.4.0: + resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} + engines: {node: '>=6'} + dependencies: + chalk: 2.4.2 + figures: 2.0.0 + pkg-conf: 2.1.0 + dev: true + /simple-concat/1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} dev: false @@ -9852,7 +10350,6 @@ packages: dependencies: atomic-sleep: 1.0.0 flatstr: 1.0.12 - dev: false /sonic-boom/2.6.0: resolution: {integrity: sha512-6xYZFRmDEtxGqfOKcDQ4cPLrNa0SPEDI+wlzDAHowXE6YV42NeXqg9mP2KkiM8JVu3lHfZ2iQKYlGOz+kTpphg==} @@ -9977,7 +10474,6 @@ packages: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: readable-stream: 3.6.0 - dev: false /split2/4.1.0: resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==} @@ -10210,6 +10706,10 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true + /strnum/1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + dev: true + /superagent/6.1.0: resolution: {integrity: sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==} engines: {node: '>= 7.0.0'} @@ -10470,7 +10970,6 @@ packages: /tr46/0.0.3: resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} - dev: false /tr46/2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} @@ -10677,7 +11176,6 @@ packages: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - dev: false /typedarray-to-buffer/3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} @@ -10873,6 +11371,14 @@ packages: dependencies: punycode: 2.1.1 + /uri-template-lite/20.5.0: + resolution: {integrity: sha512-RL6Pnz0DO4XH9WZhZTX6u0SP6afNM9z+u7lXYHO+RkVGzpNcgKc1Y2tcAX/KVIEi2ctfzf+iLcofkwKoYiGH4Q==} + dev: true + + /urijs/1.19.10: + resolution: {integrity: sha512-EzauQlgKuJgsXOqoMrCiePBf4At5jVqRhXykF3Wfb8ZsOBMxPcfiVBcsHXug4Aepb/ICm2PIgqAUGMelgdrWEg==} + dev: true + /url-parse-lax/3.0.0: resolution: {integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=} engines: {node: '>=4'} @@ -10899,6 +11405,11 @@ packages: /util-deprecate/1.0.2: resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} + /utility-types/3.10.0: + resolution: {integrity: sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==} + engines: {node: '>= 4'} + dev: true + /utils-merge/1.0.1: resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} engines: {node: '>= 0.4.0'} @@ -10943,6 +11454,31 @@ packages: spdx-expression-parse: 3.0.1 dev: true + /validate.io-array/1.0.6: + resolution: {integrity: sha1-W1osr9j4uFq7L4hroVPy2Tond00=} + dev: true + + /validate.io-function/1.0.2: + resolution: {integrity: sha1-NDoZgC7TsZaCaceA5VjpNBHAutc=} + dev: true + + /validate.io-integer-array/1.0.0: + resolution: {integrity: sha1-LKveAzKTpry+Bj/q/pHq9GsToIk=} + dependencies: + validate.io-array: 1.0.6 + validate.io-integer: 1.0.5 + dev: true + + /validate.io-integer/1.0.5: + resolution: {integrity: sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg=} + dependencies: + validate.io-number: 1.0.3 + dev: true + + /validate.io-number/1.0.3: + resolution: {integrity: sha1-9j/+2iSL8opnqNSODjtGGhZluvg=} + dev: true + /vary/1.1.2: resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=} engines: {node: '>= 0.8'} @@ -11000,7 +11536,6 @@ packages: /webidl-conversions/3.0.1: resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} - dev: false /webidl-conversions/5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} @@ -11109,7 +11644,6 @@ packages: /whatwg-fetch/3.6.2: resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} - dev: false /whatwg-mimetype/2.3.0: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} @@ -11120,7 +11654,6 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: false /whatwg-url/8.7.0: resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} @@ -11196,6 +11729,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /wordwrap/0.0.3: + resolution: {integrity: sha1-o9XabNXAvAAI03I0u68b7WMFkQc=} + engines: {node: '>=0.4.0'} + dev: true + /wordwrap/1.0.0: resolution: {integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=} dev: true From 691d83ad7b37aab1cdac2f2812b8ded0b218bf20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20J=C3=A4gle?= Date: Fri, 1 Apr 2022 16:38:21 +0200 Subject: [PATCH 4/6] WIP: Geographies mock server --- packages/mds-geography-api/spec/README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 packages/mds-geography-api/spec/README.md diff --git a/packages/mds-geography-api/spec/README.md b/packages/mds-geography-api/spec/README.md new file mode 100644 index 000000000..1794cbd72 --- /dev/null +++ b/packages/mds-geography-api/spec/README.md @@ -0,0 +1,17 @@ +# API specification + +The MDS geography API provides an OMF compliant implementation of [`/geographies` in version 1.0](https://github.com/openmobilityfoundation/mobility-data-specification/tree/release-1.0.0/policy#geographies) + +_Remark: After 1.0, `/geographies` has been moved to an own specification with a slightly different format. This is not supported by the current implementation_ + +## Mocking + +This package features [Primsm](https://github.com/stoplightio/prism) to provide a mocking server based on the examples included in the specification. +Run it with `pnpm mock` + +Plase see the [mocking documentation](https://github.com/stoplightio/prism/blob/master/docs/guides/01-mocking.md#response-generation) for instructions how to retrieve a dedicated example, e. g. + +```bash +curl http://localhost:7011/geographies/10000000-0000-0000-0000-000000000001 \ +-H "Prefer: example=HistoricRome" +``` \ No newline at end of file From 32f0a1ba8bbde60d0dd3c31e4615351ab1665a04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20J=C3=A4gle?= Date: Sat, 9 Apr 2022 23:18:25 +0200 Subject: [PATCH 5/6] Add errors to geography API swagger --- packages/mds-geography-api/spec/spec.yaml | 208 +++++++++++++++++++++- 1 file changed, 204 insertions(+), 4 deletions(-) diff --git a/packages/mds-geography-api/spec/spec.yaml b/packages/mds-geography-api/spec/spec.yaml index 9856afe77..a95fb985c 100644 --- a/packages/mds-geography-api/spec/spec.yaml +++ b/packages/mds-geography-api/spec/spec.yaml @@ -30,7 +30,151 @@ paths: description: >- With no filters applied, all geographies are being returned. Remark: On the real API, items may be filtered due to permissions defined in the scope of the JWT token - $ref: '#/components/examples/UnfilteredResponse' + value: + version: '1.0' + data: + geographies: + - geography_id: 10000000-0000-0000-0000-000000000001 + name: Forum Romanum + published_date: 1514764800000 + geography_json: + type: FeatureCollection + features: + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.487029433250427 + - 41.89096085158265 + - - 12.487362027168274 + - 41.89164371307738 + - - 12.485902905464172 + - 41.89229462103982 + - - 12.485275268554686 + - 41.89152790667126 + - - 12.487029433250427 + - 41.89096085158265 + - geography_id: 10000000-0000-0000-0000-000000000002 + geography_json: + type: FeatureCollection + name: Around Roma Termini + description: Public space next to Roma Termini central station + published_date: 1514764800000 + effective_date: 2147480047000 + features: + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.508792877197266 + - 41.89844397625825 + - - 12.50943660736084 + - 41.8988272930826 + - - 12.507033348083496 + - 41.90272421685849 + - - 12.502999305725098 + - 41.90483228960837 + - - 12.50089645385742 + - 41.90342691550862 + - - 12.508792877197266 + - 41.89844397625825 + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.500553131103516 + - 41.90352273745264 + - - 12.497978210449217 + - 41.90195762769289 + - - 12.501025199890137 + - 41.90026471068203 + - - 12.503213882446289 + - 41.90179792045829 + - - 12.500553131103516 + - 41.90352273745264 + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.497935295104979 + - 41.90186180340007 + - - 12.495017051696776 + - 41.89981751756279 + - - 12.506303787231445 + - 41.894323175085376 + - - 12.5079345703125 + - 41.895856527512976 + - - 12.497935295104979 + - 41.90186180340007 + - geography_id: 10000000-0000-0000-0000-000000000003 + name: Historic Rome + description: Draft – unpublished + geography_json: + type: FeatureCollection + features: + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.49746322631836 + - 41.91134771078812 + - - 12.491283416748047 + - 41.9112199638231 + - - 12.487506866455078 + - 41.9085372185006 + - - 12.472572326660156 + - 41.89167166631636 + - - 12.479610443115234 + - 41.888476931243254 + - - 12.475318908691406 + - 41.883365022797314 + - - 12.500381469726562 + - 41.86700416724044 + - - 12.531967163085938 + - 41.90023276842022 + - - 12.49746322631836 + - 41.91134771078812 + Unpublished: + description: >- + Represents the results with query parameter get_unpublished=true, get_published=false + value: + version: '1.0' + data: + geographies: + - geography_id: 10000000-0000-0000-0000-000000000003 + name: Historic Rome + description: Draft – unpublished + geography_json: + type: FeatureCollection + features: + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - - - 12.49746322631836 + - 41.91134771078812 + - - 12.491283416748047 + - 41.9112199638231 + - - 12.487506866455078 + - 41.9085372185006 + - - 12.472572326660156 + - 41.89167166631636 + - - 12.479610443115234 + - 41.888476931243254 + - - 12.475318908691406 + - 41.883365022797314 + - - 12.500381469726562 + - 41.86700416724044 + - - 12.531967163085938 + - 41.90023276842022 + - - 12.49746322631836 + - 41.91134771078812 Summary: description: >- with `summary=true` requested, the GeoJSON descriptions are ommitted reducing the payload drastically @@ -49,6 +193,10 @@ paths: - geography_id: 10000000-0000-0000-0000-000000000003 name: Historic Rome description: Draft – unpublished + '403': + $ref: '#/components/responses/403' + '500': + $ref: '#/components/responses/500' /geographies/{geographyId}: get: @@ -70,6 +218,23 @@ paths: $ref: '#/components/examples/AroundRomaTerminiResponse' HistoricRome: $ref: '#/components/examples/HistoricRomeResponse' + '403': + $ref: '#/components/responses/403' + '404': + description: Geography not found + content: + application/json: + schema: + type: object + properties: + error: + $ref: '#/components/schemas/Error' + example: + error: + name: 'NotFoundError' + reason: 'A geography with the given ID does not exist' + '500': + $ref: '#/components/responses/500' components: schemas: geography: @@ -177,6 +342,17 @@ components: $ref: '#/components/schemas/geography' version: $ref: '#/components/schemas/version' + Error: + type: object + additionalProperties: true + required: + - name + - reason + properties: + name: + type: string + reaon: + type: string parameters: geographyId: name: geographyId @@ -446,6 +622,30 @@ components: - 41.90023276842022 - - 12.49746322631836 - 41.91134771078812 - - Y2K38: - value: 2147480047000 \ No newline at end of file + responses: + '403': + description: Insufficient Permissions Error + content: + application/json: + schema: + type: object + properties: + error: + $ref: '#/components/schemas/Error' + example: + error: + name: 'InsufficientPermissionsError' + reason: 'No valid scope supplied in token' + '500': + description: Other Server Error + content: + application/json: + schema: + type: object + properties: + error: + $ref: '#/components/schemas/Error' + example: + error: + name: 'ServerError' + reason: 'Error Getting Geography' From 71db375745f71afb21ba9eff4917f6cc84c8a6d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20J=C3=A4gle?= Date: Sat, 9 Apr 2022 23:27:18 +0200 Subject: [PATCH 6/6] Update package.json comma matters --- packages/mds-geography-api/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mds-geography-api/package.json b/packages/mds-geography-api/package.json index b7f91462f..a41fdbd53 100644 --- a/packages/mds-geography-api/package.json +++ b/packages/mds-geography-api/package.json @@ -28,10 +28,10 @@ "express": "4.17.1" }, "devDependencies": { - "@mds-core/mds-test-data": "workspace:0.4.32" + "@mds-core/mds-test-data": "workspace:0.4.32", "@stoplight/prism-cli": "4.8.0" }, "publishConfig": { "main": "dist/index.js" } -} \ No newline at end of file +}