From 88429f0b2be94cbc84e201333b472da83ff19af0 Mon Sep 17 00:00:00 2001 From: Archie Cowan Date: Wed, 31 May 2023 23:17:43 +0000 Subject: [PATCH 01/13] feat: metadata schemas --- backend/backend/handlers/auth/__init__.py | 2 - .../backend/handlers/metadataschema/schema.py | 172 ++ backend/makefile | 3 + .../tests/handlers/metadata/test_schema.py | 368 +++++ infra/lib/api-builder.ts | 23 + .../constructs/location-service-construct.ts | 107 ++ infra/lib/infra-stack.ts | 6 + .../lambdaBuilder/metadataSchemaFunctions.ts | 33 + infra/lib/storage-builder.ts | 23 +- web/package.json | 5 + web/public/index.html | 11 + web/src/FedAuth/VAMSAuth.tsx | 24 + .../interactive/MapLocationSelector.tsx | 101 ++ .../components/single/ControlledMetadata.tsx | 328 ++++ web/src/layout/Navigation.js | 9 +- web/src/pages/AssetUpload.tsx | 4 +- web/src/pages/MetadataSchema.tsx | 619 +++++++ web/src/routes.js | 11 + web/yarn.lock | 1468 ++++++++++++++++- 19 files changed, 3299 insertions(+), 18 deletions(-) create mode 100644 backend/backend/handlers/metadataschema/schema.py create mode 100644 backend/tests/handlers/metadata/test_schema.py create mode 100644 infra/lib/constructs/location-service-construct.ts create mode 100644 infra/lib/lambdaBuilder/metadataSchemaFunctions.ts create mode 100644 web/src/components/interactive/MapLocationSelector.tsx create mode 100644 web/src/components/single/ControlledMetadata.tsx create mode 100644 web/src/pages/MetadataSchema.tsx diff --git a/backend/backend/handlers/auth/__init__.py b/backend/backend/handlers/auth/__init__.py index e1566007..4ef9df29 100644 --- a/backend/backend/handlers/auth/__init__.py +++ b/backend/backend/handlers/auth/__init__.py @@ -8,14 +8,12 @@ dynamodb = boto3.resource('dynamodb') dynamodb_client = boto3.client('dynamodb') -asset_database = None db_database = None # TODO maybe this should be part of a class constructor instead try: - asset_database = os.environ["ASSET_STORAGE_TABLE_NAME"] db_database = os.environ["DATABASE_STORAGE_TABLE_NAME"] except: print("Failed Loading Environment Variables") diff --git a/backend/backend/handlers/metadataschema/schema.py b/backend/backend/handlers/metadataschema/schema.py new file mode 100644 index 00000000..63d50e22 --- /dev/null +++ b/backend/backend/handlers/metadataschema/schema.py @@ -0,0 +1,172 @@ +# Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 + +import json +import boto3 +import os +import traceback +from backend.logging.logger import safeLogger +from backend.common.dynamodb import to_update_expr +from boto3.dynamodb.conditions import Key, Attr +from aws_lambda_powertools.utilities.typing import LambdaContext +from aws_lambda_powertools.utilities.data_classes import APIGatewayProxyEvent +from decimal import Decimal + +logger = safeLogger(service=__name__, child=True, level="INFO") + +class DecimalEncoder(json.JSONEncoder): + def default(self, o): + if isinstance(o, Decimal): + if o % 1 > 0: + return float(o) + else: + return int(o) + return super(DecimalEncoder, self).default(o) + +class ValidationError(Exception): + def __init__(self, code: int, resp: object): + self.code = code + self.resp = resp + + +# Dynamodb Schema: +# Partition key: databaseId +# Sort key: field name +# Each partition contains the schema for a single VAMS database +# Each field in the schema is a dictionary with the following keys: +# - field: the name of the field +# - datatype: string, the datatype of the field +# - required: boolean, whether the field is required +# - dependsOn: array, other fields that this field depends on and must be filled out first +# - + + +class MetadataSchema: + + def __init__(self, table_name: str, dynamodb=None): + self.attrs = "field,datatype,required,dependsOn".split(",") + self.keys_attrs = {f"#{f}": f for f in self.attrs} + + self.table_name = table_name + self.dynamodb = dynamodb or boto3.resource('dynamodb') + self.table = self.dynamodb.Table(table_name) + + @staticmethod + def from_env(): + return MetadataSchema(os.environ["METADATA_SCHEMA_STORAGE_TABLE_NAME"]) + + def get_schema(self, databaseId: str, field: str): + resp = self.table.get_item(Key={"databaseId": databaseId, "field": field}) + if "Item" in resp: + return resp["Item"] + else: + return None + + def update_schema(self, databaseId: str, field: str, schema: dict): + # if the keys are in the schema dict, remove them + if 'field' in schema: del schema['field'] + if 'databaseId' in schema: del schema['databaseId'] + keys_map, values_map, expr = to_update_expr(schema) + resp = self.table.update_item( + Key={ + "databaseId": databaseId, + "field": field + }, + UpdateExpression=expr, + ExpressionAttributeNames=keys_map, + ExpressionAttributeValues=values_map, + ) + return resp + + def delete_schema(self, databaseId: str, field: str): + resp = self.table.delete_item( + Key={ + "databaseId": databaseId, + "field": field + } + ) + return resp + + def get_all_schemas(self, databaseId: str): + resp = self.table.query( + KeyConditionExpression=Key("databaseId").eq(databaseId) + ) + return resp["Items"] + + +def get_request_to_claims(event: APIGatewayProxyEvent): + from backend.handlers.auth import request_to_claims + return request_to_claims(event) + +# databaseId is part of pathParameters +def lambda_handler(event: APIGatewayProxyEvent, context: LambdaContext, + claims_fn=get_request_to_claims, + metadata_schema_fn=MetadataSchema.from_env): + + logger.info("event: ", event) + print("event", event) + + response = { + 'statusCode': 200, + 'body': { + "requestid": event['requestContext']['requestId'], + }, + 'headers': { + 'Content-Type': 'application/json', + 'Access-Control-Allow-Credentials': True, + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Headers': 'Content-Type', + 'Access-Control-Allow-Methods': 'OPTIONS,POST,GET' + } + } + + try: + + claims_and_roles = claims_fn(event) + + if "super-admin" not in claims_and_roles['roles']: + raise ValidationError(403, "Not Authorized") + + if "databaseId" not in event["pathParameters"]: + raise ValidationError(400, "Missing databaseId in path") + + schema = metadata_schema_fn() + databaseId = event["pathParameters"]["databaseId"] + method = event['requestContext']['http']['method'] + + # list + if method == "GET": + resp = schema.get_all_schemas(databaseId) + print("resp", resp) + response['body']['schemas'] = resp + + # create/update + if method == "POST" or method == "PUT": + body = json.loads(event["body"]) + schema.update_schema(databaseId, body["field"], body) + + # delete + if method == "DELETE": + if "field" not in event['pathParameters']: + raise ValidationError(400, "Missing field in path on delete request") + + schema.delete_schema(databaseId, event['pathParameters']['field']) + + response['body'] = json.dumps(response['body'], cls=DecimalEncoder) + return response + except ValidationError as e: + response['statusCode'] = e.code + response['body'] = json.dumps({ + "error": e.resp, + "requestid": event['requestContext']['requestId'], + }) + return response + except Exception as e: + logger.warning(traceback.format_exc(), event) + response['statusCode'] = 500 + response['body'] = json.dumps({ + "error": str(e), + "requestid": event['requestContext']['requestId'], + "stacktrace": traceback.format_exc() + }) + return response diff --git a/backend/makefile b/backend/makefile index 006fbae5..f3856d49 100644 --- a/backend/makefile +++ b/backend/makefile @@ -2,6 +2,9 @@ lint: poetry run flake8 +test: + poetry run ptw --runner 'py.test -vv' + typecheck: poetry run mypy . diff --git a/backend/tests/handlers/metadata/test_schema.py b/backend/tests/handlers/metadata/test_schema.py new file mode 100644 index 00000000..4f692247 --- /dev/null +++ b/backend/tests/handlers/metadata/test_schema.py @@ -0,0 +1,368 @@ +# Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +from decimal import Decimal +import json +import unittest +from unittest.mock import Mock, call + +from backend.handlers.metadataschema.schema import MetadataSchema +import pytest +from boto3.dynamodb.conditions import Key, Attr + +from backend.handlers.metadataschema.schema import APIGatewayProxyEvent + +def test_get_schema(): + mock_ddb = Mock() + mock_ddb.Table = Mock(return_value=mock_ddb) + mock_ddb.get_item = Mock(return_value={'Item': {'schema': '{}'}}) + + metadataSchema = MetadataSchema(table_name="tablename", dynamodb=mock_ddb) + + metadataSchema.get_schema("databaseId123", "schemaId123") + assert mock_ddb.get_item.call_args == call(Key={'databaseId': 'databaseId123', 'field': 'schemaId123'}) + + +def test_get_schema_not_found(): + mock_ddb = Mock() + mock_ddb.Table = Mock(return_value=mock_ddb) + mock_ddb.get_item = Mock(return_value={'Item': None}) + + metadataSchema = MetadataSchema(table_name="tablename", dynamodb=mock_ddb) + + metadataSchema.get_schema("databaseId123", "schemaId123") + assert mock_ddb.get_item.call_args == call(Key={'databaseId': 'databaseId123', 'field': 'schemaId123'}) + + +def test_get_schema_error(): + mock_ddb = Mock() + mock_ddb.Table = Mock(return_value=mock_ddb) + mock_ddb.get_item = Mock(side_effect=Exception("error")) + + metadataSchema = MetadataSchema(table_name="tablename", dynamodb=mock_ddb) + + with pytest.raises(Exception): + metadataSchema.get_schema("databaseId123", "schemaId123") + + +def test_get_schemas(): + mock_ddb = Mock() + mock_ddb.Table = Mock(return_value=mock_ddb) + mock_ddb.query = Mock(return_value={'Items': [{'schema': '{}'}], 'Count': 1}) + + metadataSchema = MetadataSchema(table_name="tablename", dynamodb=mock_ddb) + + metadataSchema.get_all_schemas("databaseId123") + assert mock_ddb.query.call_args == call( + KeyConditionExpression=Key("databaseId").eq("databaseId123"), + ) + + +def test_get_schemas_not_found(): + mock_ddb = Mock() + mock_ddb.Table = Mock(return_value=mock_ddb) + mock_ddb.query = Mock(return_value={'Items': [], 'Count': 0}) + + metadataSchema = MetadataSchema(table_name="tablename", dynamodb=mock_ddb) + + metadataSchema.get_all_schemas("databaseId123") + assert mock_ddb.query.call_args == call( + KeyConditionExpression=Key("databaseId").eq("databaseId123"), + ) + + +def test_get_schemas_error(): + mock_ddb = Mock() + mock_ddb.Table = Mock(return_value=mock_ddb) + mock_ddb.query = Mock(side_effect=Exception("error")) + + metadataSchema = MetadataSchema(table_name="tablename", dynamodb=mock_ddb) + + with pytest.raises(Exception): + metadataSchema.get_all_schemas("databaseId123") + + +def test_update_schema(): + mock_ddb = Mock() + mock_ddb.Table = Mock(return_value=mock_ddb) + mock_ddb.update_item = Mock() + + metadataSchema = MetadataSchema(table_name="tablename", dynamodb=mock_ddb) + + metadataSchema.update_schema("databaseId123", "schemaId123", { + "field": "schemaId123", + "databaseId": "databaseId123", + "datatype": "string", + "required": True, + "dependsOn": ["schemaId122"], + }) + + print(mock_ddb.update_item.call_args) + assert mock_ddb.update_item.call_args == call( + Key={'databaseId': 'databaseId123', 'field': 'schemaId123'}, + UpdateExpression='SET #f0 = :v0, #f1 = :v1, #f2 = :v2', + ExpressionAttributeNames={'#f0': 'datatype', '#f1': 'required', '#f2': 'dependsOn'}, + ExpressionAttributeValues={':v0': 'string', ':v1': True, ':v2': ['schemaId122']} + ) + + +def test_update_schema_error(): + mock_ddb = Mock() + mock_ddb.Table = Mock(return_value=mock_ddb) + mock_ddb.update_item = Mock(side_effect=Exception("error")) + + metadataSchema = MetadataSchema(table_name="tablename", dynamodb=mock_ddb) + + with pytest.raises(Exception): + metadataSchema.update_schema("databaseId123", "schemaId123", { + "field": "schemaId123", + "datatype": "string", + "required": True, + "dependsOn": ["schemaId122"], + }) + + +def test_delete_schema(): + mock_ddb = Mock() + mock_ddb.Table = Mock(return_value=mock_ddb) + mock_ddb.delete_item = Mock() + + metadataSchema = MetadataSchema(table_name="tablename", dynamodb=mock_ddb) + + metadataSchema.delete_schema("databaseId123", "schemaId123") + + assert mock_ddb.delete_item.call_args == call(Key={'databaseId': 'databaseId123', 'field': 'schemaId123'}) + + +def test_delete_schema_error(): + mock_ddb = Mock() + mock_ddb.Table = Mock(return_value=mock_ddb) + mock_ddb.delete_item = Mock(side_effect=Exception("error")) + + metadataSchema = MetadataSchema(table_name="tablename", dynamodb=mock_ddb) + + with pytest.raises(Exception): + metadataSchema.delete_schema("databaseId123", "schemaId123") + + +def test_lambda_handler_not_super_admin(): + from backend.handlers.metadataschema.schema import lambda_handler + from backend.handlers.metadataschema.schema import APIGatewayProxyEvent + mock_claims = Mock(return_value={'roles': []}) + mock_metadata_schema = Mock() + + event = APIGatewayProxyEvent({ + "httpMethod": "GET", + "path": "/metadataschema", + "queryStringParameters": {}, + "pathParameters": { + "databaseId": "databaseId123", + }, + "requestContext": { + "requestId": "woohoo!=", + } + }) + context = {} + + response = lambda_handler(event, context, claims_fn=mock_claims, metadata_schema_fn=mock_metadata_schema) + + assert response['statusCode'] == 403 + response_body = json.loads(response['body']) + assert response_body['error'] == 'Not Authorized' + assert response_body['requestid'] == 'woohoo!=' + + +def test_lambda_handler_missing_databaseId(): + from backend.handlers.metadataschema.schema import lambda_handler + from backend.handlers.metadataschema.schema import APIGatewayProxyEvent + mock_claims = Mock(return_value={'roles': ['super-admin']}) + mock_metadata_schema = Mock() + + event = APIGatewayProxyEvent({ + "httpMethod": "GET", + "path": "/metadataschema", + "queryStringParameters": {}, + "pathParameters": {}, + "requestContext": { + "requestId": "woohoo!=", + } + }) + context = {} + + response = lambda_handler(event, context, claims_fn=mock_claims, metadata_schema_fn=mock_metadata_schema) + + assert response['statusCode'] == 400 + response_body = json.loads(response['body']) + assert response_body['error'] == 'Missing databaseId in path' + assert response_body['requestid'] == 'woohoo!=' + +def test_lambda_handler_get(): + from backend.handlers.metadataschema.schema import lambda_handler + from backend.handlers.metadataschema.schema import APIGatewayProxyEvent + mock_claims = Mock(return_value={'roles': ['super-admin']}) + mock_metadata_schema = Mock() + metadata_schema_factory = Mock(return_value=mock_metadata_schema) + values = [ + { "field": "schemaId123", "datatype": "string", "required": True, "dependsOn": ["schemaId122"]}, + { "field": "schemaId122", "datatype": "string", "required": True, }, + ] + mock_metadata_schema.get_all_schemas = Mock(return_value=values) + + event = APIGatewayProxyEvent({ + "httpMethod": "GET", + "path": "/metadataschema", + "queryStringParameters": {}, + "pathParameters": { + "databaseId": "databaseId123", + }, + "requestContext": { + "requestId": "woohoo!=", + "http": { + "method": "GET", + } + } + }) + context = {} + + response = lambda_handler(event, context, claims_fn=mock_claims, metadata_schema_fn=metadata_schema_factory) + + assert response['statusCode'] == 200 + response_body = json.loads(response['body']) + assert response_body['requestid'] == 'woohoo!=' + assert response_body['schemas'] == values + +def create_event(method): + + return APIGatewayProxyEvent({ + "httpMethod": method, + "path": "/metadataschema", + "queryStringParameters": {}, + "pathParameters": { + "databaseId": "databaseId123", + }, + "requestContext": { + "requestId": "woohoo!=", + "http": { + "method": method, + } + }, + "body": json.dumps({ + "field": "schemaId123", + "datatype": "string", + "required": True, + "sequenceNumber": 1.0, + "dependsOn": ["schemaId122"], + }), + }) + + +def create_delete_event(): + + return APIGatewayProxyEvent({ + "httpMethod": "DELETE", + "path": "/metadataschema", + "queryStringParameters": {}, + "pathParameters": { + "databaseId": "databaseId123", + "field": "schemaId123", + }, + "requestContext": { + "requestId": "woohoo!=", + "http": { + "method": "DELETE", + } + }, + }) + +def test_lambda_handler_post(): + + event = create_event("POST") + + response, mock_metadata_schema = _invoke_lambda_handler_harness(event) + + assert response['statusCode'] == 200 + response_body = json.loads(response['body']) + assert response_body['requestid'] == 'woohoo!=' + + mock_metadata_schema.update_schema.assert_called_once_with("databaseId123", "schemaId123", { + "field": "schemaId123", + "datatype": "string", + "required": True, + "sequenceNumber": 1.0, + "dependsOn": ["schemaId122"], + }) + +def test_lambda_handler_put(): + event = create_event("PUT") + + response, mock_metadata_schema = _invoke_lambda_handler_harness(event) + + assert response['statusCode'] == 200 + response_body = json.loads(response['body']) + assert response_body['requestid'] == 'woohoo!=' + + mock_metadata_schema.update_schema.assert_called_once_with("databaseId123", "schemaId123", { + "field": "schemaId123", + "datatype": "string", + "required": True, + "sequenceNumber": 1.0, + "dependsOn": ["schemaId122"], + }) + +def test_lambda_handler_delete(): + + # delete events have no body + event = create_delete_event() + response, mock_metadata_schema = _invoke_lambda_handler_harness(event) + + assert response['statusCode'] == 200 + response_body = json.loads(response['body']) + assert response_body['requestid'] == 'woohoo!=' + + mock_metadata_schema.delete_schema.assert_called_once_with("databaseId123", "schemaId123") + + +def test_lambda_handler_get_schema_with_decimal_response(): + from backend.handlers.metadataschema.schema import lambda_handler + from backend.handlers.metadataschema.schema import APIGatewayProxyEvent + mock_claims = Mock(return_value={'roles': ['super-admin']}) + mock_metadata_schema = Mock() + metadata_schema_factory = Mock(return_value=mock_metadata_schema) + values = [ + { "field": "schemaId123", "datatype": "string", "sequenceNumber": Decimal(5.0), "required": True, "dependsOn": ["schemaId122"]}, + { "field": "schemaId122", "datatype": "string", "sequenceNumber": Decimal(10.0), "required": True, }, + ] + mock_metadata_schema.get_all_schemas = Mock(return_value=values) + + event = APIGatewayProxyEvent({ + "httpMethod": "GET", + "path": "/metadataschema", + "queryStringParameters": {}, + "pathParameters": { + "databaseId": "databaseId123", + }, + "requestContext": { + "requestId": "woohoo!=", + "http": { + "method": "GET", + } + } + }) + context = {} + + response = lambda_handler(event, context, claims_fn=mock_claims, metadata_schema_fn=metadata_schema_factory) + + assert response['statusCode'] == 200 + response_body = json.loads(response['body']) + assert response_body['requestid'] == 'woohoo!=' + assert response_body['schemas'] == values + +def _invoke_lambda_handler_harness(event,): + from backend.handlers.metadataschema.schema import lambda_handler + mock_claims = Mock(return_value={'roles': ['super-admin']}) + mock_metadata_schema = Mock() + metadata_schema_factory = Mock(return_value=mock_metadata_schema) + + context = {} + + response = lambda_handler(event, context, claims_fn=mock_claims, metadata_schema_fn=metadata_schema_factory) + return response, mock_metadata_schema diff --git a/infra/lib/api-builder.ts b/infra/lib/api-builder.ts index 1f5717f3..8779aabe 100644 --- a/infra/lib/api-builder.ts +++ b/infra/lib/api-builder.ts @@ -39,6 +39,8 @@ import { buildPipelineService, } from "./lambdaBuilder/pipelineFunctions"; +import { buildMetadataSchemaService } from "./lambdaBuilder/metadataSchemaFunctions"; + import { buildMetadataFunctions } from "./lambdaBuilder/metadataFunctions"; import { buildUploadAssetWorkflow } from "./uploadAssetWorkflowBuilder"; import { buildAuthFunctions } from "./lambdaBuilder/authFunctions"; @@ -332,6 +334,27 @@ export function apiBuilder( api: api.apiGatewayV2, }); } + + const metadataSchemaFunctions = buildMetadataSchemaService(scope, storageResources); + + const metadataSchemaMethods = [ + apigwv2.HttpMethod.GET, + apigwv2.HttpMethod.POST, + apigwv2.HttpMethod.PUT, + ]; + for (let i = 0; i < metadataSchemaMethods.length; i++) { + attachFunctionToApi(scope, metadataSchemaFunctions, { + routePath: "/metadataschema/{databaseId}", + method: methods[i], + api: api.apiGatewayV2, + }); + } + attachFunctionToApi(scope, metadataSchemaFunctions, { + routePath: "/metadataschema/{databaseId}/{field}", + method: apigwv2.HttpMethod.DELETE, + api: api.apiGatewayV2, + }); + const uploadAssetWorkflowStateMachine = buildUploadAssetWorkflow( scope, uploadAssetFunction, diff --git a/infra/lib/constructs/location-service-construct.ts b/infra/lib/constructs/location-service-construct.ts new file mode 100644 index 00000000..6ec64e0c --- /dev/null +++ b/infra/lib/constructs/location-service-construct.ts @@ -0,0 +1,107 @@ +/* + * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import * as iam from "aws-cdk-lib/aws-iam"; +import { CfnOutput, aws_location } from "aws-cdk-lib"; + +import { Construct } from "constructs"; + +interface LocatioServiceConstructProps { + role: iam.Role; +} + +export class LocationServiceConstruct extends Construct { + map: aws_location.CfnMap; + + constructor(scope: Construct, id: string, { role }: LocatioServiceConstructProps) { + super(scope, id); + + // const ssmLocationServiceArn = new ssm.StringParameter(this, "ssmLocationServiceArn", { + // parameterName: `/${props.region}/location-service/arn`, + // stringValue: props.role.roleArn, + // type: ssm.ParameterType.STRING, + // allowedPattern: ".*", + // description: "Location Service Arn", + // }); + + // const location = new loc.PlaceIndex(scope, "PlaceIndex", { + // // placeIndexName: 'MyPlaceIndex', // optional, defaults to a generated name + // // dataSource: location.DataSource.HERE, // optional, defaults to Esri + // }); + + // location.grant(role); + // location.grantSearch(role); + + const cfnMap = new aws_location.CfnMap(scope, "MyCfnMapRaster", { + configuration: { + style: "RasterEsriImagery", + }, + mapName: "vams-map-raster", + }); + const cfnMap_streets = new aws_location.CfnMap(scope, "MyCfnMapStreets", { + configuration: { + style: "VectorEsriStreets", + }, + mapName: "vams-map-streets", + }); + + role.addToPolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: [ + "geo:GetMapTile", + "geo:GetMapSprites", + "geo:GetMapGlyphs", + "geo:GetMapStyleDescriptor", + ], + resources: [cfnMap.attrArn, cfnMap_streets.attrArn], + }) + ); + + const cfnIndex = new aws_location.CfnPlaceIndex(scope, "MyCfnPlaceIndex", { + dataSource: "Esri", + indexName: "vams-index", + }); + + role.addToPolicy( + new iam.PolicyStatement({ + effect: iam.Effect.ALLOW, + actions: [ + "geo:SearchPlaceIndexForPosition", + "geo:SearchPlaceIndexForText", + "geo:SearchPlaceIndexForSuggestions", + "geo:GetPlace", + ], + resources: [cfnIndex.attrArn], + }) + ); + + // make cfn outputs + + // new CfnOutput(this, "LocationServiceArn", { + // value: location.placeIndexArn, + // description: "Location Service Arn", + // exportName: "LocationServiceArn", + // }); + // new CfnOutput(this, "LocationServiceIndexName", { + // value: location.placeIndexName, + // description: "Location Service Index Name", + // exportName: "LocationServiceIndexName", + // }); + // new CfnOutput(this, "LocationServiceIndexArn", { + // value: location.placeIndexArn, + // description: "Location Service Index Arn", + // exportName: "LocationServiceIndexArn", + // }); + new CfnOutput(this, "MapArn", { + value: cfnMap.attrArn, + description: "Map Arn", + exportName: "MapArn", + }); + + this.map = cfnMap; + // this.location = location; + } +} diff --git a/infra/lib/infra-stack.ts b/infra/lib/infra-stack.ts index 50357b8d..85519bf6 100644 --- a/infra/lib/infra-stack.ts +++ b/infra/lib/infra-stack.ts @@ -23,6 +23,7 @@ import { Construct } from "constructs"; import { NagSuppressions } from "cdk-nag"; import { CustomCognitoConfigConstruct } from "./constructs/custom-cognito-config-construct"; import { samlEnabled, samlSettings } from "./saml-config"; +import { LocationServiceConstruct } from "./constructs/location-service-construct"; interface EnvProps { prod: boolean; //ToDo: replace with env @@ -157,6 +158,10 @@ export class VAMS extends cdk.Stack { // wafScope: WAFScope.REGIONAL, // }); + const location = new LocationServiceConstruct(this, "LocationService", { + role: cognitoResources.authenticatedRole, + }); + const amplifyConfigProps: AmplifyConfigLambdaConstructProps = { ...props, api: api.apiGatewayV2, @@ -199,6 +204,7 @@ export class VAMS extends cdk.Stack { }); } + cdk.Tags.of(this).add("vams:stackname", props.stackName); this.node.findAll().forEach((item) => { diff --git a/infra/lib/lambdaBuilder/metadataSchemaFunctions.ts b/infra/lib/lambdaBuilder/metadataSchemaFunctions.ts new file mode 100644 index 00000000..e9f6e9f8 --- /dev/null +++ b/infra/lib/lambdaBuilder/metadataSchemaFunctions.ts @@ -0,0 +1,33 @@ +/* + * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import * as lambda from "aws-cdk-lib/aws-lambda"; +import * as path from "path"; +import { Construct } from "constructs"; +import { Duration } from "aws-cdk-lib"; +import { storageResources } from "../storage-builder"; + +export function buildMetadataSchemaService( + scope: Construct, + storageResources: storageResources +): lambda.Function { + const name = "metadataschema"; + const fn = new lambda.DockerImageFunction(scope, name, { + code: lambda.DockerImageCode.fromImageAsset(path.join(__dirname, `../../../backend/`), { + cmd: [`backend.handlers.metadataschema.schema.lambda_handler`], + }), + timeout: Duration.minutes(15), + memorySize: 512, + environment: { + DATABASE_STORAGE_TABLE_NAME: storageResources.dynamo.databaseStorageTable.tableName, + METADATA_SCHEMA_STORAGE_TABLE_NAME: + storageResources.dynamo.metadataSchemaStorageTable.tableName, + }, + }); + storageResources.dynamo.databaseStorageTable.grantReadData(fn); + storageResources.dynamo.metadataSchemaStorageTable.grantReadWriteData(fn); + + return fn; +} diff --git a/infra/lib/storage-builder.ts b/infra/lib/storage-builder.ts index 644095f2..8c6dcb7d 100644 --- a/infra/lib/storage-builder.ts +++ b/infra/lib/storage-builder.ts @@ -29,6 +29,7 @@ export interface storageResources { workflowExecutionStorageTable: dynamodb.Table; metadataStorageTable: dynamodb.Table; authEntitiesStorageTable: dynamodb.Table; + metadataSchemaStorageTable: dynamodb.Table; }; } export function storageResourcesBuilder( @@ -83,7 +84,12 @@ export function storageResourcesBuilder( { allowedOrigins: ["*"], allowedHeaders: ["*"], - allowedMethods: [s3.HttpMethods.GET, s3.HttpMethods.PUT, s3.HttpMethods.POST], + allowedMethods: [ + s3.HttpMethods.GET, + s3.HttpMethods.PUT, + s3.HttpMethods.POST, + s3.HttpMethods.HEAD, + ], exposedHeaders: ["ETag"], }, ], @@ -199,6 +205,19 @@ export function storageResourcesBuilder( }, }); + const metadataSchemaStorageTable = new dynamodb.Table(scope, "MetadataSchemaStorageTable", { + ...dynamodbDefaultProps, + + partitionKey: { + name: "databaseId", + type: dynamodb.AttributeType.STRING, + }, + sortKey: { + name: "field", + type: dynamodb.AttributeType.STRING, + }, + }); + const authEntitiesTable = new dynamodb.Table(scope, "AuthEntitiesTable", { ...dynamodbDefaultProps, partitionKey: { @@ -210,6 +229,7 @@ export function storageResourcesBuilder( type: dynamodb.AttributeType.STRING, }, }); + return { s3: { assetBucket: assetBucket, @@ -227,6 +247,7 @@ export function storageResourcesBuilder( workflowExecutionStorageTable: workflowExecutionStorageTable, metadataStorageTable: metadataStorageTable, authEntitiesStorageTable: authEntitiesTable, + metadataSchemaStorageTable: metadataSchemaStorageTable, }, }; } diff --git a/web/package.json b/web/package.json index 6cc8a67d..c7278d8f 100644 --- a/web/package.json +++ b/web/package.json @@ -8,9 +8,11 @@ }, "dependencies": { "@aws-amplify/ui-react": "^2.1.5", + "@aws-sdk/client-s3": "^3.338.0", "@cloudscape-design/collection-hooks": "^1.0.19", "@cloudscape-design/components": "^3.0.196", "@cloudscape-design/design-tokens": "^3.0.8", + "@maplibre/maplibre-gl-geocoder": "^1.5.0", "@types/styled-components": "^5.1.21", "arraybuffer-to-buffer": "^0.0.7", "aws-amplify": "4.3.39", @@ -22,7 +24,10 @@ "dompurify": "^2.3.6", "fcs": "^0.1.2", "loader-utils": "^3.2.0", + "maplibre-gl": "^3.0.0", + "maplibre-gl-js-amplify": "^3.0.5", "online-3d-viewer": "^0.8.21", + "papaparse": "^5.4.1", "patch-package": "^6.4.7", "postinstall-postinstall": "^2.1.0", "prop-types": "^15.8.1", diff --git a/web/public/index.html b/web/public/index.html index ed3251ab..d6dd7dbd 100644 --- a/web/public/index.html +++ b/web/public/index.html @@ -14,6 +14,17 @@ + void) { }, ], }, + geo: { + AmazonLocationService: { + maps: { + items: { + "vams-map-raster": { // REQUIRED - Amazon Location Service Map resource name + style: "RasterEsriImagery", // REQUIRED - String representing the style of map resource + }, + "vams-map-streets": { + style: "VectorEsriStreets" + } + }, + default: "vams-map-raster", // REQUIRED - Amazon Location Service Map resource name to set as default + }, + search_indices: { + items: ["vams-index"], // REQUIRED - Amazon Location Service Place Index name + default: "vams-index", // REQUIRED - Amazon Location Service Place Index name to set as default + }, + // geofenceCollections: { + // items: ["XXXXXXXXX", "XXXXXXXXX"], // REQUIRED - Amazon Location Service Geofence Collection name + // default: "XXXXXXXXX", // REQUIRED - Amazon Location Service Geofence Collection name to set as default + // }, + region: config.region, // REQUIRED - Amazon Location Service Region + }, + } }); setAmpInit(true); diff --git a/web/src/components/interactive/MapLocationSelector.tsx b/web/src/components/interactive/MapLocationSelector.tsx new file mode 100644 index 00000000..64fc33c6 --- /dev/null +++ b/web/src/components/interactive/MapLocationSelector.tsx @@ -0,0 +1,101 @@ +import Modal from "@cloudscape-design/components/modal"; +import { createMap } from "maplibre-gl-js-amplify"; +import "maplibre-gl/dist/maplibre-gl.css"; + +import { createAmplifyGeocoder } from "maplibre-gl-js-amplify"; +import "@maplibre/maplibre-gl-geocoder/dist/maplibre-gl-geocoder.css"; + +import { useEffect, useRef, useState } from "react"; +import { Button } from "@cloudscape-design/components"; +import { LngLat, LngLatLike } from "maplibre-gl"; +import { Geo } from "aws-amplify"; + +async function initializeMap( + elem: string, + setValue: (l: [number, number], zoom: number) => void, + init: LngLatLike | null, + zoom: number +) { + const map = await createMap({ + container: elem, // An HTML Element or HTML element ID to render the map in https://maplibre.org/maplibre-gl-js-docs/api/map/ + // center: [-123.1187, 49.2819], // [Longitude, Latitude] + center: init ?? [-95.37019986475366, 29.767650706163337], // Houston + zoom, + }); + // map.on("click", function (e) { + // // The event object (e) contains information like the + // // coordinates of the point on the map that was clicked. + // // console.log("A click event has occurred at " + e.lngLat, e.point, e.target.getZoom()); + // setValue(e.lngLat.toArray(), e.target.getZoom()); + // }); + map.on("moveend", function (e) { + setValue(e.target.getCenter().toArray(), e.target.getZoom()); + }); + map.on("zoomend", function (e) { + setValue(e.target.getCenter().toArray(), e.target.getZoom()); + }); + + // map.addControl(createAmplifyGeocoder()); + // console.log("available maps", Geo.getAvailableMaps()); + + // const searchOptionsWithSearchAreaConstraints = { + // countries: ["USA"], // Alpha-3 country codes + // maxResults: 25, // 50 is the max and the default + // searchIndexName: string, // the string name of the search index + // } + + // Geo.searchByText('Amazon Go Stores', searchOptionsWithBiasPosition) +} + +// initializeMap(); + +interface MapLocationSelectorModalProps { + location: [number, number] | null; + setLocation: (loc: [number, number], zoom: number) => void; + initialZoom: number; +} + +export default function MapLocationSelectorModal({ + location, + setLocation, + initialZoom, +}: MapLocationSelectorModalProps) { + const [open, setOpen] = useState(false); + + const location1 = LngLat.convert(location ?? [-95.37019986475366, 29.767650706163337]); + + useEffect(() => { + console.log("map state", open); + if (!open) return; + + console.log("initmap"); + initializeMap("themap", setLocation, location1, initialZoom).then((x) => { + console.log("map initialized", location, initialZoom); + }); + }, [open]); + + const ll = (location && LngLat.convert(location1)) || null; + + return ( + (open && ( + { + setOpen(false); + }} + header="Select a Location" + > +
+ Loading Map... +
+ Selected Location: {ll && `${ll.lng}, ${ll.lat}, ${initialZoom}`} +
+ )) || ( + <> + {ll && `${ll.lng}, ${ll.lat}`} + + + ) + ); +} diff --git a/web/src/components/single/ControlledMetadata.tsx b/web/src/components/single/ControlledMetadata.tsx new file mode 100644 index 00000000..9b4c4203 --- /dev/null +++ b/web/src/components/single/ControlledMetadata.tsx @@ -0,0 +1,328 @@ +import { useEffect, useState } from "react"; +import { SchemaContextData } from "../../pages/MetadataSchema"; +import { API, Storage } from "aws-amplify"; +import Papa, { ParseRemoteConfig } from "papaparse"; +import { Grid, Input, Select } from "@cloudscape-design/components"; +import MapLocationSelectorModal from "../interactive/MapLocationSelector"; +import React from "react"; + +interface Metadata { + [k: string]: string; +} + +interface ControlledMetadataProps { + assetId: string; + databaseId: string; + initialState?: Metadata; + store?: (databaseId: string, assetId: string, record: Metadata) => Promise; +} + +interface TableRow { + idx: number; + name: string; + value: string; + type: string; + dependsOn: string[]; +} + +interface EditCompProps { + item: TableRow; + schema: SchemaContextData; + controlledLists: any; + controlData: any; + setValue: (row: string | undefined) => void; + currentValue: string; + metadata: Metadata; +} + +function EditComp({ + item, + setValue, + controlledLists, + currentValue, + metadata, + schema, + controlData, +}: EditCompProps) { + if (item.type === "string") { + return ( + { + setValue(event.detail.value); + }} + /> + ); + } + if (item.type === "controlled-list" && item.dependsOn.length === 0) { + return ( + setValue(e.detail.selectedOption.value)} + /> + ); + } + if (item.type === "location") { + console.log("location current value", currentValue); + + let loc: [number, number] | null; + let zoom = 5; + + if (!currentValue) { + const schemaItem = schema.schemas.find((x) => x.field === item.name); + if (schemaItem) { + const controlDataItem = controlData.find((x: any) => + schemaItem.dependsOn.every((y: string) => x[y] === metadata[y]) + ); + if (controlDataItem) { + loc = [ + controlDataItem[schemaItem.longitudeField], + controlDataItem[schemaItem.latitudeField], + ]; + zoom = controlDataItem[schemaItem.zoomLevelField]; + } else { + loc = null; + } + // schemaItem.latitudeField + // schemaItem.longitudeField + // schemaItem.zoomLevelField + } else { + loc = null; + } + } else { + try { + const parsed: any = JSON.parse(currentValue); + loc = parsed.loc; + zoom = parsed.zoom; + } catch { + loc = null; + } + } + + console.log("location parsed value", loc, zoom, schema); + return ( + { + setValue(JSON.stringify({ loc, zoom })); + }} + /> + ); + } + return null; +} + +export default function ControlledMetadata({ databaseId, assetId }: ControlledMetadataProps) { + const [schema, setSchema] = useState(null); + const [controlledLists, setControlledLists] = useState(null); + const [rawControlData, setRawControlData] = useState([]); + const [metadata, setMetadata] = useState(); + const [items, setItems] = useState([]); + + console.log("schema", schema); + console.log("items", items); + console.log("controlledLists", controlledLists); + + const metaToTableRow = (meta: Metadata, schema: SchemaContextData) => { + schema.schemas.sort((a, b) => { + if (a.sequenceNumber === undefined) { + return 1; + } + if (b.sequenceNumber === undefined) { + return -1; + } + return a.sequenceNumber - b.sequenceNumber; + }); + + return schema.schemas + .map((x) => x.field) + .map((key, idx): TableRow => { + return { + idx: idx, + name: key, + value: meta[key], + dependsOn: schema.schemas.find((x) => x.field === key)?.dependsOn || [], + type: schema.schemas.find((x) => x.field === key)?.dataType || "string", + }; + }); + }; + + const tableRowToMeta = (rows: TableRow[]): Metadata => { + const result: Metadata = {}; + rows.forEach((row) => { + if (row && row.name && row.value) { + result[row.name] = row.value; + } + }); + return result; + }; + + // given the databaseId, retrieve the metadata schema for the database + + useEffect(() => { + if (schema !== null) { + return; + } + API.get("api", `metadataschema/${databaseId}`, {}).then((data: SchemaContextData) => { + setSchema(data); + const start: Metadata = {}; + const meta = data.schemas.reduce((acc, x) => { + acc[x.field] = ""; + return acc; + }, start); + setMetadata(meta); + setItems(metaToTableRow(meta, data)); + }); + }, [setSchema, schema, databaseId]); + + useEffect(() => { + if (schema === null) return; + if (controlledLists !== null) return; + + const hashCode = (x: string) => { + let hash = 0; + for (let i = 0; i < x.length; i++) { + hash = (hash << 5) - hash + x.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + return hash; + }; + + const config: ParseRemoteConfig = { + download: true, + header: true, + complete: (results: any) => { + const lists = schema.schemas + .filter((field) => field.dataType === "controlled-list") + .map((field) => { + const deps = field.dependsOn ? field.dependsOn : []; + const def: { [k: number]: any } = {}; + return { + field: field.field, + columns: [field.field, ...deps], + data: def, + }; + }); + + for (const result of results.data) { + for (const list of lists) { + const item = list.columns.reduce((acc: any, column: string) => { + acc[column] = result[column]; + return acc; + }, {}); + const hash = hashCode(JSON.stringify(item)); + list.data[hash] = item; + } + } + const listsSorted = lists.map((x) => { + return { + ...x, + data: Object.values(x.data).sort((a, b) => { + if (JSON.stringify(a) < JSON.stringify(b)) return -1; + if (JSON.stringify(a) > JSON.stringify(b)) return 1; + return 0; + }), + }; + }); + const byField: { [k: string]: any } = {}; + console.log("listsSorted", listsSorted); + setControlledLists( + listsSorted.reduce((acc, x) => { + acc[x.field] = x; + return acc; + }, byField) + ); + setRawControlData(results.data); + }, + }; + Storage.get(`metadataschema/${databaseId}/controlledlist.csv`).then((url: string) => { + // note: config has a callback with a side effect that calls setControlledLists + Papa.parse(url, config); + }); + }, [controlledLists, databaseId, schema]); + + if (!metadata || !controlledLists || !schema) { + return

Loading...

; + } + + return ( + + {items.map((row) => { + return ( + +
{row.name}
+
+ { + if (value !== undefined) { + console.log("items", items); + const next: TableRow[] = [...items]; + next[row.idx].value = value; + + const resetDeps = (name: string) => { + for(const item of next) { + if (item.dependsOn.includes(name)) { + item.value = ""; + resetDeps(item.name); + } + } + }; + + resetDeps(row.name); + + setItems(next); + setMetadata(tableRowToMeta(next)); + } else { + console.log("undefined value", row); + } + }} + /> +
+
+ ); + })} +
+ ); +} diff --git a/web/src/layout/Navigation.js b/web/src/layout/Navigation.js index 85a18ec5..91f029d9 100644 --- a/web/src/layout/Navigation.js +++ b/web/src/layout/Navigation.js @@ -56,7 +56,14 @@ let navItems = [ type: "section", role: "super-admin", text: "Admin", - items: [{ type: "link", text: "Fine Grained Access Controls", href: "/auth/constraints" }], + items: [ + { type: "link", text: "Fine Grained Access Controls", href: "/auth/constraints" }, + { + type: "link", + text: "Metadata Schema", + href: "/metadataschema/create", + }, + ], }, { type: "divider", diff --git a/web/src/pages/AssetUpload.tsx b/web/src/pages/AssetUpload.tsx index dd8cbb9e..ad7215d3 100644 --- a/web/src/pages/AssetUpload.tsx +++ b/web/src/pages/AssetUpload.tsx @@ -44,6 +44,7 @@ import { import { DisplayKV, FileUpload } from "./AssetUpload/components"; import ProgressScreen from "./AssetUpload/ProgressScreen"; import onSubmit from "./AssetUpload/onSubmit"; +import ControlledMetadata from "../components/single/ControlledMetadata"; // eslint-disable-next-line @typescript-eslint/no-array-constructor const objectFileFormats = new Array().concat(cadFileFormats, modelFileFormats, columnarFileFormats); @@ -342,8 +343,7 @@ const UploadForm = () => { content: ( Asset Metadata}> - { diff --git a/web/src/pages/MetadataSchema.tsx b/web/src/pages/MetadataSchema.tsx new file mode 100644 index 00000000..1735964a --- /dev/null +++ b/web/src/pages/MetadataSchema.tsx @@ -0,0 +1,619 @@ +/* + * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { + Box, + Button, + Checkbox, + FileUpload, + Form, + FormField, + Grid, + Header, + Input, + Modal, + Multiselect, + MultiselectProps, + Select, + SelectProps, + SpaceBetween, + Table, + TextContent, + Textarea, +} from "@cloudscape-design/components"; +import { Optional } from "@cloudscape-design/components/internal/types"; +import { createContext, useContext, useEffect, useState } from "react"; +import { generateUUID } from "../common/utils/utils"; + +import Amplify, { API, Storage, APIClass, Auth } from "aws-amplify"; +import { PutObjectCommand, HeadObjectCommand, S3Client } from "@aws-sdk/client-s3"; + +import ListDefinition from "../components/list/list-definitions/types/ListDefinition"; +import ColumnDefinition from "../components/list/list-definitions/types/ColumnDefinition"; +import ListPageNoDatabase from "./ListPageNoDatabase"; +import { NonCancelableEventHandler } from "@cloudscape-design/components/internal/events"; +import DatabaseSelector from "../components/selectors/DatabaseSelector"; +import { useNavigate, useParams } from "react-router"; +import DatabaseSelectorWithModal from "../components/selectors/DatabaseSelectorWithModal"; + +export interface SchemaContextData { + schemas: MetadataSchemaFields[]; + databaseId: string | null; +} + +const SchemaContext = createContext({ schemas: [], databaseId: null }); + +interface CreateMetadataFieldProps { + open: boolean; + setOpen: (open: boolean) => void; + setReload: (reload: boolean) => void; + initState: any; +} + +export interface MetadataSchemaFields { + id: string; + field: string; + dataType: string; + required: boolean; + databaseId: string; + sequenceNumber: number; + dependsOn: string[]; + // location fields + useCenterPosition: boolean; + latitudeField: string; + longitudeField: string; + zoomLevelField: string; +} + +interface DatatypeSelectProps { + value: string; + onChange: NonCancelableEventHandler; + disabled: boolean; +} +function DatatypeSelect({ value, onChange, disabled }: DatatypeSelectProps) { + const options: SelectProps.Option[] = [ + { value: "string", label: "Text" }, + { value: "number", label: "Number" }, + { value: "boolean", label: "Boolean" }, + { value: "date", label: "Date" }, + { value: "location", label: "Location" }, + { value: "controlled-list", label: "Controlled List" }, + ]; + return ( + { + setFormState({ + ...formState, + latitudeField: detail.value, + }); + }} + /> + + + { + setFormState({ + ...formState, + longitudeField: detail.value, + }); + }} + /> + + + { + setFormState({ + ...formState, + zoomLevelField: detail.value, + }); + }} + /> + + + ); +} + +function CreateMetadataField({ open, setOpen, setReload, initState }: CreateMetadataFieldProps) { + const createOrUpdate = (initState && "Update") || "Create"; + + const [inProgress, setInProgress] = useState(false); + const { databaseId } = useContext(SchemaContext); + const [formState, setFormState] = useState({ + id: generateUUID(), + required: false, + dataType: "string", + ...initState, + }); + + return ( + { + setOpen(false); + }} + size="medium" + header={`${createOrUpdate} Metadata Field`} + footer={ + + + + + + + + } + > +
+ + { + setFormState({ + ...formState, + field: detail.value, + }); + }} + /> + + + { + if (detail.selectedOption.value) { + setFormState({ + ...formState, + dataType: detail.selectedOption.value, + }); + } + }} + /> + + + + { + setFormState({ + ...formState, + sequenceNumber: Number.parseInt(detail.value), + }); + }} + /> + + {/* + + { + const selectedOption = detail.selectedOption; + console.log("selectedOption", selectedOption); + if (selectedOption && selectedOption.value) { + setFormState({ + ...formState, + databaseId: selectedOption.value, + }); + } + }} + /> + + */} + +
+ ); +} + +// In order to validate set of fields, wrap the list page in a +// context provider and set the list from the fetch all each time +// it is called so that it can be validated and leveraged in the +// create field form. + +export const MetadataSchemaListDefinition = new ListDefinition({ + pluralName: "fields", + pluralNameTitleCase: "Fields", + visibleColumns: ["field", "dataType", "required"], + filterColumns: [{ name: "field", placeholder: "Field" }], + elementId: "id", + deleteFunction: async (item: any): Promise<[boolean, string]> => { + try { + console.log("delete item", item); + const response: any = await API.del( + "api", + `metadataschema/${item.databaseId}/${item.field}`, + {} + ); + return [true, response.message]; + } catch (error: any) { + console.log(error); + return [false, error?.message]; + } + }, + columnDefinitions: [ + new ColumnDefinition({ + id: "field", + header: "Field", + cellWrapper: (props: any) => { + return <>{props.children}; + }, + sortingField: "field", + }), + // sequenceNumber + new ColumnDefinition({ + id: "sequenceNumber", + header: "Sequence Number", + cellWrapper: (props: any) => <>{props.children ? props.children : ""}, + sortingField: "sequenceNumber", + }), + new ColumnDefinition({ + id: "dataType", + header: "Data Type", + cellWrapper: (props: any) => <>{props.children}, + sortingField: "dataType", + }), + new ColumnDefinition({ + id: "required", + header: "Required", + cellWrapper: (props: any) => <>{props.children}, + sortingField: "required", + }), + ], +}); + +class ProgressCallbackArgs { + loaded!: number; + total!: number; +} + +async function uploadAssetToS3( + file: File, + key: string, + metadata: { [k: string]: string }, + progressCallback: (progress: ProgressCallbackArgs) => void +) { + console.log("upload", key, file); + return Storage.put(key, file, { metadata, progressCallback }); +} + +function ControlledListFileUpload() { + const { databaseId } = useParams(); + const [file, setFile] = useState([]); + + const schemaKey = `metadataschema/${databaseId}/controlledlist.csv`; + + useEffect(() => { + Storage.get(schemaKey).then((x) => { + console.log("x", x); + }); + Auth.currentCredentials().then((x) => { + const client = new S3Client({ + credentials: { + accessKeyId: x.accessKeyId, + secretAccessKey: x.secretAccessKey, + }, + region: "us-east-1", + }); + const cmd = new HeadObjectCommand({ + Bucket: "vams-dev-us-east-1-assetbucket1d025086-1jo3lq4rgcv4x", + Key: schemaKey, + }); + client.send(cmd).then((resp) => { + console.log(resp); + }); + }); + }, [schemaKey]); + + // form that takes a single file upload and places the file in s3 using Storage.put. + // the file is then uploaded to the database's s3 bucket. + + return ( +
+ + (e ? "Choose files" : "Choose file"), + dropzoneText: (e) => (e ? "Drop files to upload" : "Drop file to upload"), + removeFileAriaLabel: (e) => `Remove file ${e + 1}`, + limitShowFewer: "Show fewer files", + limitShowMore: "Show more files", + errorIconAriaLabel: "Error", + }} + onChange={({ detail }) => { + setFile(detail.value); + uploadAssetToS3( + detail.value[0], + schemaKey, + {}, + (progress: ProgressCallbackArgs) => { + console.log("progress", progress); + } + ).then((result: any) => { + console.log("result", result); + }); + console.log("file upload", detail); + }} + /> + +
+ ); +} + +export default function MetadataSchema() { + const { databaseId } = useParams(); + const navigate = useNavigate(); + const [databaseSelectModelOpen, setDatabaseSelectModelOpen] = useState( + databaseId === undefined + ); + + const [schemas, setSchemas] = useState([]); + async function fetchAll(api = API) { + const resp = await api.get("api", `metadataschema/${databaseId}`, {}); + if (resp.schemas) { + // sort resp.schemas wrt sequenceNumber + // undefined values go last + resp.schemas.sort((a: any, b: any) => { + if (a.sequenceNumber === undefined) { + return 1; + } + if (b.sequenceNumber === undefined) { + return -1; + } + return a.sequenceNumber - b.sequenceNumber; + }); + setSchemas(resp.schemas); + return resp.schemas; + } else { + return false; + } + } + + if (!databaseId) { + return ( + { + const id = event?.detail?.selectedOption?.value; + navigate(`/metadataschema/${id}/create`); + }} + /> + ); + } + + return ( + + + +
+ +

Controlled List Dataset Upload

+
+ +
+
+
+ +
+ ); +} diff --git a/web/src/routes.js b/web/src/routes.js index f291829e..32923b08 100644 --- a/web/src/routes.js +++ b/web/src/routes.js @@ -17,6 +17,7 @@ import ViewPipeline from "./components/single/ViewPipeline"; import Workflows from "./pages/Workflows"; import CreateUpdateWorkflow from "./components/createupdate/CreateUpdateWorkflow"; import Constraints from "./pages/auth/Constraints"; +import MetadataSchema from "./pages/MetadataSchema"; const routeTable = [ { path: "/", Page: LandingPage, active: "/" }, @@ -69,6 +70,16 @@ const routeTable = [ Page: Constraints, active: "/auth/constraints", }, + { + path: "/metadataschema/create", + Page: MetadataSchema, + active: "/metadataschema", + }, + { + path: "/metadataschema/:databaseId/create", + Page: MetadataSchema, + active: "/metadataschema", + }, ]; export const AppRoutes = (props) => { diff --git a/web/yarn.lock b/web/yarn.lock index a07fefad..15bdf196 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -248,6 +248,15 @@ "@aws-sdk/types" "^3.1.0" tslib "^1.11.1" +"@aws-crypto/crc32@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + "@aws-crypto/crc32@^1.0.0": version "1.2.2" resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-1.2.2.tgz" @@ -257,6 +266,15 @@ "@aws-sdk/types" "^3.1.0" tslib "^1.11.1" +"@aws-crypto/crc32c@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz#016c92da559ef638a84a245eecb75c3e97cb664f" + integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + "@aws-crypto/ie11-detection@^1.0.0": version "1.0.0" resolved "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-1.0.0.tgz" @@ -271,6 +289,26 @@ dependencies: tslib "^1.11.1" +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha1-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz#f9083c00782b24714f528b1a1fef2174002266a3" + integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + "@aws-crypto/sha256-browser@2.0.0": version "2.0.0" resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz" @@ -285,6 +323,20 @@ "@aws-sdk/util-utf8-browser" "^3.0.0" tslib "^1.11.1" +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + "@aws-crypto/sha256-browser@^1.0.0": version "1.2.2" resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-1.2.2.tgz" @@ -316,6 +368,15 @@ "@aws-sdk/types" "^3.1.0" tslib "^1.11.1" +"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + "@aws-crypto/sha256-js@^1.0.0", "@aws-crypto/sha256-js@^1.2.2": version "1.2.2" resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz" @@ -339,6 +400,13 @@ dependencies: tslib "^1.11.1" +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + "@aws-crypto/util@^1.2.2": version "1.2.2" resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-1.2.2.tgz" @@ -357,6 +425,15 @@ "@aws-sdk/util-utf8-browser" "^3.0.0" tslib "^1.11.1" +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + "@aws-sdk/abort-controller@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.186.0.tgz" @@ -365,6 +442,14 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/abort-controller@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.338.0.tgz#955203aab957906479aaca978e23a3131db068cf" + integrity sha512-/yLI32+HwFNBRJ39jMXw+/cn3AnlCuJpQd7Ax4887g32Dgte5eyrfY8sJUOL6902BUmAq4oSRI5QeBXNplO0Xw== + dependencies: + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/abort-controller@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.6.1.tgz" @@ -381,6 +466,13 @@ "@aws-sdk/util-base64-browser" "3.6.1" tslib "^1.8.0" +"@aws-sdk/chunked-blob-reader@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.310.0.tgz#2ada1b024a2745c2fe7e869606fab781325f981e" + integrity sha512-CrJS3exo4mWaLnWxfCH+w88Ou0IcAZSIkk4QbmxiHl/5Dq705OLoxf4385MVyExpqpeVJYOYQ2WaD8i/pQZ2fg== + dependencies: + tslib "^2.5.0" + "@aws-sdk/chunked-blob-reader@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.6.1.tgz" @@ -904,6 +996,106 @@ fast-xml-parser "^3.16.0" tslib "^2.0.0" +"@aws-sdk/client-s3@^3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.338.0.tgz#414814daf0c21ae649088cc82b42a2f737c5ab3b" + integrity sha512-qnQlEyUXypg8QlH21JBJcDitXmaZXwde2YO5Ic3mUSu5zMtsOCmV/C5EVSlTz1OPqngmezF7WcqepYrm7ZfEag== + dependencies: + "@aws-crypto/sha1-browser" "3.0.0" + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.338.0" + "@aws-sdk/config-resolver" "3.338.0" + "@aws-sdk/credential-provider-node" "3.338.0" + "@aws-sdk/eventstream-serde-browser" "3.338.0" + "@aws-sdk/eventstream-serde-config-resolver" "3.338.0" + "@aws-sdk/eventstream-serde-node" "3.338.0" + "@aws-sdk/fetch-http-handler" "3.338.0" + "@aws-sdk/hash-blob-browser" "3.338.0" + "@aws-sdk/hash-node" "3.338.0" + "@aws-sdk/hash-stream-node" "3.338.0" + "@aws-sdk/invalid-dependency" "3.338.0" + "@aws-sdk/md5-js" "3.338.0" + "@aws-sdk/middleware-bucket-endpoint" "3.338.0" + "@aws-sdk/middleware-content-length" "3.338.0" + "@aws-sdk/middleware-endpoint" "3.338.0" + "@aws-sdk/middleware-expect-continue" "3.338.0" + "@aws-sdk/middleware-flexible-checksums" "3.338.0" + "@aws-sdk/middleware-host-header" "3.338.0" + "@aws-sdk/middleware-location-constraint" "3.338.0" + "@aws-sdk/middleware-logger" "3.338.0" + "@aws-sdk/middleware-recursion-detection" "3.338.0" + "@aws-sdk/middleware-retry" "3.338.0" + "@aws-sdk/middleware-sdk-s3" "3.338.0" + "@aws-sdk/middleware-serde" "3.338.0" + "@aws-sdk/middleware-signing" "3.338.0" + "@aws-sdk/middleware-ssec" "3.338.0" + "@aws-sdk/middleware-stack" "3.338.0" + "@aws-sdk/middleware-user-agent" "3.338.0" + "@aws-sdk/node-config-provider" "3.338.0" + "@aws-sdk/node-http-handler" "3.338.0" + "@aws-sdk/signature-v4-multi-region" "3.338.0" + "@aws-sdk/smithy-client" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/url-parser" "3.338.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-body-length-browser" "3.310.0" + "@aws-sdk/util-body-length-node" "3.310.0" + "@aws-sdk/util-defaults-mode-browser" "3.338.0" + "@aws-sdk/util-defaults-mode-node" "3.338.0" + "@aws-sdk/util-endpoints" "3.338.0" + "@aws-sdk/util-retry" "3.338.0" + "@aws-sdk/util-stream-browser" "3.338.0" + "@aws-sdk/util-stream-node" "3.338.0" + "@aws-sdk/util-user-agent-browser" "3.338.0" + "@aws-sdk/util-user-agent-node" "3.338.0" + "@aws-sdk/util-utf8" "3.310.0" + "@aws-sdk/util-waiter" "3.338.0" + "@aws-sdk/xml-builder" "3.310.0" + "@smithy/protocol-http" "^1.0.1" + "@smithy/types" "^1.0.0" + fast-xml-parser "4.1.2" + tslib "^2.5.0" + +"@aws-sdk/client-sso-oidc@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.338.0.tgz#ba3115962fc8c5ccec8c2c984063641a1b1ed283" + integrity sha512-mny5Q3LWKTcMMFS8WxeOCTinl193z7vS3b+eQz09K4jb1Lq04Bpjw25cySgBnhMGZ7QHQiYBscNLyu/TfOKiHA== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/config-resolver" "3.338.0" + "@aws-sdk/fetch-http-handler" "3.338.0" + "@aws-sdk/hash-node" "3.338.0" + "@aws-sdk/invalid-dependency" "3.338.0" + "@aws-sdk/middleware-content-length" "3.338.0" + "@aws-sdk/middleware-endpoint" "3.338.0" + "@aws-sdk/middleware-host-header" "3.338.0" + "@aws-sdk/middleware-logger" "3.338.0" + "@aws-sdk/middleware-recursion-detection" "3.338.0" + "@aws-sdk/middleware-retry" "3.338.0" + "@aws-sdk/middleware-serde" "3.338.0" + "@aws-sdk/middleware-stack" "3.338.0" + "@aws-sdk/middleware-user-agent" "3.338.0" + "@aws-sdk/node-config-provider" "3.338.0" + "@aws-sdk/node-http-handler" "3.338.0" + "@aws-sdk/smithy-client" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/url-parser" "3.338.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-body-length-browser" "3.310.0" + "@aws-sdk/util-body-length-node" "3.310.0" + "@aws-sdk/util-defaults-mode-browser" "3.338.0" + "@aws-sdk/util-defaults-mode-node" "3.338.0" + "@aws-sdk/util-endpoints" "3.338.0" + "@aws-sdk/util-retry" "3.338.0" + "@aws-sdk/util-user-agent-browser" "3.338.0" + "@aws-sdk/util-user-agent-node" "3.338.0" + "@aws-sdk/util-utf8" "3.310.0" + "@smithy/protocol-http" "^1.0.1" + "@smithy/types" "^1.0.0" + tslib "^2.5.0" + "@aws-sdk/client-sso@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.186.0.tgz" @@ -941,6 +1133,45 @@ "@aws-sdk/util-utf8-node" "3.186.0" tslib "^2.3.1" +"@aws-sdk/client-sso@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.338.0.tgz#a65301eafb61f308589f17b9769e2e62d7f022dd" + integrity sha512-EglKsGlVph65PuFPKq1nGlxsY99XM2xHJaB1uX0bQEC94qrmS/M4a5kno5tiUnTWO1K+K4JBQiOxdGJs0GUS+w== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/config-resolver" "3.338.0" + "@aws-sdk/fetch-http-handler" "3.338.0" + "@aws-sdk/hash-node" "3.338.0" + "@aws-sdk/invalid-dependency" "3.338.0" + "@aws-sdk/middleware-content-length" "3.338.0" + "@aws-sdk/middleware-endpoint" "3.338.0" + "@aws-sdk/middleware-host-header" "3.338.0" + "@aws-sdk/middleware-logger" "3.338.0" + "@aws-sdk/middleware-recursion-detection" "3.338.0" + "@aws-sdk/middleware-retry" "3.338.0" + "@aws-sdk/middleware-serde" "3.338.0" + "@aws-sdk/middleware-stack" "3.338.0" + "@aws-sdk/middleware-user-agent" "3.338.0" + "@aws-sdk/node-config-provider" "3.338.0" + "@aws-sdk/node-http-handler" "3.338.0" + "@aws-sdk/smithy-client" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/url-parser" "3.338.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-body-length-browser" "3.310.0" + "@aws-sdk/util-body-length-node" "3.310.0" + "@aws-sdk/util-defaults-mode-browser" "3.338.0" + "@aws-sdk/util-defaults-mode-node" "3.338.0" + "@aws-sdk/util-endpoints" "3.338.0" + "@aws-sdk/util-retry" "3.338.0" + "@aws-sdk/util-user-agent-browser" "3.338.0" + "@aws-sdk/util-user-agent-node" "3.338.0" + "@aws-sdk/util-utf8" "3.310.0" + "@smithy/protocol-http" "^1.0.1" + "@smithy/types" "^1.0.0" + tslib "^2.5.0" + "@aws-sdk/client-sts@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.186.0.tgz" @@ -983,6 +1214,49 @@ fast-xml-parser "3.19.0" tslib "^2.3.1" +"@aws-sdk/client-sts@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.338.0.tgz#8e2d27b5cdf6af59c8144f8c0dc4602bd607f210" + integrity sha512-FBHy/G7BAPX0CdEeeGYpoAnKXVCSIIkESLU2wF6x880z+U2IqiL48Fzoa5qoLaLPQaK/30P7ytznkqm4vd1OFw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/config-resolver" "3.338.0" + "@aws-sdk/credential-provider-node" "3.338.0" + "@aws-sdk/fetch-http-handler" "3.338.0" + "@aws-sdk/hash-node" "3.338.0" + "@aws-sdk/invalid-dependency" "3.338.0" + "@aws-sdk/middleware-content-length" "3.338.0" + "@aws-sdk/middleware-endpoint" "3.338.0" + "@aws-sdk/middleware-host-header" "3.338.0" + "@aws-sdk/middleware-logger" "3.338.0" + "@aws-sdk/middleware-recursion-detection" "3.338.0" + "@aws-sdk/middleware-retry" "3.338.0" + "@aws-sdk/middleware-sdk-sts" "3.338.0" + "@aws-sdk/middleware-serde" "3.338.0" + "@aws-sdk/middleware-signing" "3.338.0" + "@aws-sdk/middleware-stack" "3.338.0" + "@aws-sdk/middleware-user-agent" "3.338.0" + "@aws-sdk/node-config-provider" "3.338.0" + "@aws-sdk/node-http-handler" "3.338.0" + "@aws-sdk/smithy-client" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/url-parser" "3.338.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-body-length-browser" "3.310.0" + "@aws-sdk/util-body-length-node" "3.310.0" + "@aws-sdk/util-defaults-mode-browser" "3.338.0" + "@aws-sdk/util-defaults-mode-node" "3.338.0" + "@aws-sdk/util-endpoints" "3.338.0" + "@aws-sdk/util-retry" "3.338.0" + "@aws-sdk/util-user-agent-browser" "3.338.0" + "@aws-sdk/util-user-agent-node" "3.338.0" + "@aws-sdk/util-utf8" "3.310.0" + "@smithy/protocol-http" "^1.0.1" + "@smithy/types" "^1.0.0" + fast-xml-parser "4.1.2" + tslib "^2.5.0" + "@aws-sdk/client-textract@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/client-textract/-/client-textract-3.6.1.tgz" @@ -1069,6 +1343,16 @@ "@aws-sdk/util-middleware" "3.186.0" tslib "^2.3.1" +"@aws-sdk/config-resolver@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.338.0.tgz#fa698ff05bdabc3af42f571ac3a7e895b2a91f6a" + integrity sha512-rB9WUaMfTB74Hd2mOiyPFR7Q1viT+w6SaDSR9SA1P8EeIg5H13FNdIKb736Z8/6QJhDj7whdyk1CTGV+DmXOOg== + dependencies: + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-config-provider" "3.310.0" + "@aws-sdk/util-middleware" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/config-resolver@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.6.1.tgz" @@ -1097,6 +1381,15 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/credential-provider-env@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.338.0.tgz#97d83054e36ce4adb5293b85a66d532d2e412182" + integrity sha512-j14vApy80tpk87C3x3uBf1caQsuR8RdQ8iOW830H/AOhsa88XaZIB/NQSX7exaIKZa2RU0Vv2wIlGAA8ko7J6g== + dependencies: + "@aws-sdk/property-provider" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/credential-provider-env@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.6.1.tgz" @@ -1117,6 +1410,17 @@ "@aws-sdk/url-parser" "3.186.0" tslib "^2.3.1" +"@aws-sdk/credential-provider-imds@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.338.0.tgz#4202049ee596c86f57e0464905c61482be2439c0" + integrity sha512-qsqeywYfJevg5pgUUUBmm7pK1bckVrl091PZB2IliFdQVnDvI5GFLf4B0oZqjaLAzPG1gVtxRvqIve+tnP/+xA== + dependencies: + "@aws-sdk/node-config-provider" "3.338.0" + "@aws-sdk/property-provider" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/url-parser" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/credential-provider-imds@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.6.1.tgz" @@ -1140,6 +1444,21 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/credential-provider-ini@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.338.0.tgz#f21ba58225c1088dc57d7241b3cbc35f3b38cdd8" + integrity sha512-UhgYgymT9sJiRm0peqP5EvtR4dXiS2Q2AuFgDUjBvDz8JaZlqafsIS4cfyGwTHV/xY6cdiMu5rCTe8hTyXsukQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.338.0" + "@aws-sdk/credential-provider-imds" "3.338.0" + "@aws-sdk/credential-provider-process" "3.338.0" + "@aws-sdk/credential-provider-sso" "3.338.0" + "@aws-sdk/credential-provider-web-identity" "3.338.0" + "@aws-sdk/property-provider" "3.338.0" + "@aws-sdk/shared-ini-file-loader" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/credential-provider-ini@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.6.1.tgz" @@ -1166,6 +1485,22 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/credential-provider-node@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.338.0.tgz#3a5414f77a744112a01f285896d5720ef86d62b8" + integrity sha512-nZjaMRxJqX0EXMV9LA5IbRQI1pDGGZiPYX2KDfZ1Y9Gc1Y/vIZhHKOHGb1uKMAonlR076CsXlev4/tjC8SGGuw== + dependencies: + "@aws-sdk/credential-provider-env" "3.338.0" + "@aws-sdk/credential-provider-imds" "3.338.0" + "@aws-sdk/credential-provider-ini" "3.338.0" + "@aws-sdk/credential-provider-process" "3.338.0" + "@aws-sdk/credential-provider-sso" "3.338.0" + "@aws-sdk/credential-provider-web-identity" "3.338.0" + "@aws-sdk/property-provider" "3.338.0" + "@aws-sdk/shared-ini-file-loader" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/credential-provider-node@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.6.1.tgz" @@ -1190,6 +1525,16 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/credential-provider-process@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.338.0.tgz#32eb4a9655f481f24986f9fb9d87a549d5515163" + integrity sha512-5I1EgJxFFEg8xel2kInMpkdBKajUut0hR2fBajqCmK7Pflu8s0I2NKDots9a3YJagNrFJq38+EzoDcUvRrd2dg== + dependencies: + "@aws-sdk/property-provider" "3.338.0" + "@aws-sdk/shared-ini-file-loader" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/credential-provider-process@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.6.1.tgz" @@ -1212,6 +1557,18 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/credential-provider-sso@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.338.0.tgz#55b827f2678dd2ac53b2fb134416a482e810a5a2" + integrity sha512-fpzYHK17iF/uFkrm4cLg/utDVKSBTWNjAiNlE3GF6CaixBCwc0QBLKHk2nG4d1ZZeMVCbIUMS7eoqfR0LYc/yw== + dependencies: + "@aws-sdk/client-sso" "3.338.0" + "@aws-sdk/property-provider" "3.338.0" + "@aws-sdk/shared-ini-file-loader" "3.338.0" + "@aws-sdk/token-providers" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/credential-provider-web-identity@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.186.0.tgz" @@ -1221,6 +1578,15 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/credential-provider-web-identity@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.338.0.tgz#b71bb648f59440760b5c364d3f7269f2c8f1d42a" + integrity sha512-kjT/P18jM1icwjYwr8wfY//T8lv2s81ms7OC7vgiSqckmQOxpVkdsep9d44ymSUXwopmotFP7M9gGnEHS6HwAA== + dependencies: + "@aws-sdk/property-provider" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/eventstream-codec@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.186.0.tgz" @@ -1231,6 +1597,16 @@ "@aws-sdk/util-hex-encoding" "3.186.0" tslib "^2.3.1" +"@aws-sdk/eventstream-codec@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-codec/-/eventstream-codec-3.338.0.tgz#50faa87d23be815660b68818a869162307c6046f" + integrity sha512-D9nxnkuY6ArIr+b2Gfc0YExWgNbzgfLIljgcBawL9P4vkkE0uZgPM0fF0Paug2DpkuSluHS6PCLaM/nLbBiLAQ== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-hex-encoding" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/eventstream-handler-node@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.186.0.tgz" @@ -1259,6 +1635,15 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/eventstream-serde-browser@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.338.0.tgz#2c6336a665e0b305667ef59d67bf413bec423ac9" + integrity sha512-SRaFPJpCPOghZ9vuStSBzwvVqEX0DSVQl4j1vq/9mHUj1a4Xn0qH29eLBxsyB5NOQNb46RMdd8UTNgNSnCI74w== + dependencies: + "@aws-sdk/eventstream-serde-universal" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/eventstream-serde-browser@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.6.1.tgz" @@ -1277,6 +1662,14 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/eventstream-serde-config-resolver@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.338.0.tgz#bba80f5e4d1ad8821a2c6caf6d8b67deb1a07d0d" + integrity sha512-utid/nDd6IoPXWwz/mCnAwWWNgntK53feRLsztyWg7GHJabXli/kXo6U/3+Mn7Q2RS4eAASpqhYXXrVni5SgTA== + dependencies: + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/eventstream-serde-config-resolver@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.6.1.tgz" @@ -1294,6 +1687,15 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/eventstream-serde-node@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.338.0.tgz#7b585ff1df667b6762cda9e221e40ff02ae0e60b" + integrity sha512-Fwnrgaa6rs/0HMD3NVk1FcxZqgtG5xZz9qIlSLt5JFIG/rpBTrMREi+KIhLHvd3/4ZhkdLjX7y+ml8K6atSveA== + dependencies: + "@aws-sdk/eventstream-serde-universal" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/eventstream-serde-node@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.6.1.tgz" @@ -1313,6 +1715,15 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/eventstream-serde-universal@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.338.0.tgz#f68d183d0dfd2405e832b54122efb1e08087d5ec" + integrity sha512-uuHu1nksdPPevuSUkq5aOo7j1Zb6IRSuQ0fV0zuolg2i1B2wAQjrkWH9EcvGzOe0/yWEQF3ohggczuovn4yCzQ== + dependencies: + "@aws-sdk/eventstream-codec" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/eventstream-serde-universal@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.6.1.tgz" @@ -1333,6 +1744,17 @@ "@aws-sdk/util-base64-browser" "3.186.0" tslib "^2.3.1" +"@aws-sdk/fetch-http-handler@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.338.0.tgz#7d27c3ffbb791f6d7f7508fbbc5826e4df279b93" + integrity sha512-NOIQmeSa51J2nFAzl99IjxwQkq27cdNJzF59jQWzpUCGbxXfMD4WWy2NHubabSFuJ4FJU2eyoQHUNUFc6/uxXA== + dependencies: + "@aws-sdk/protocol-http" "3.338.0" + "@aws-sdk/querystring-builder" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-base64" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/fetch-http-handler@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.6.1.tgz" @@ -1344,6 +1766,15 @@ "@aws-sdk/util-base64-browser" "3.6.1" tslib "^1.8.0" +"@aws-sdk/hash-blob-browser@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.338.0.tgz#0ff4ddccc7f5ad3b562afd3ea70c5cc66d4aaa3c" + integrity sha512-otfZZe/QA3Y0L4yDU8I7mL2oy/cSzaMzTugX4ouz9kk3mW8Ef5OQCJsWwtJz8jgM4UZr6OHcdrQGe19L7pVTiQ== + dependencies: + "@aws-sdk/chunked-blob-reader" "3.310.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/hash-blob-browser@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.6.1.tgz" @@ -1363,6 +1794,16 @@ "@aws-sdk/util-buffer-from" "3.186.0" tslib "^2.3.1" +"@aws-sdk/hash-node@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.338.0.tgz#f7ab49ac7c09e0f80b2abeca2180d6010140fef1" + integrity sha512-udveX3ZRO1oUbyBTQH0LJ8Ika7uk0pHuXrqapdi66GGRJB50IhmOg372zUEwZjDB7DZYXfGTCuAj2OoEalgpBA== + dependencies: + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-buffer-from" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/hash-node@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.6.1.tgz" @@ -1372,6 +1813,15 @@ "@aws-sdk/util-buffer-from" "3.6.1" tslib "^1.8.0" +"@aws-sdk/hash-stream-node@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-stream-node/-/hash-stream-node-3.338.0.tgz#bee68f8c173a97366fc3f16039b323e8bbf91f7a" + integrity sha512-0rDWfosbOyCS358AuGlsB98uHo5AcB0s/T3UjZgpTHzdON2NkgX8BfYyz+TVviwGz0HVlXlf+OAJe+rbPtsbNA== + dependencies: + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/hash-stream-node@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.6.1.tgz" @@ -1388,6 +1838,14 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/invalid-dependency@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.338.0.tgz#0f0a2a14474c936066e0e2404fd76a9d2d14a92b" + integrity sha512-m6r1fTTGSl0V6l8Z+Ii4Ei8VFpDmu0AT6A59ZhJaMZgxf925ywuCPydyDW9ZqTLE0e7CgxhEHEsH1+HzpVuHTw== + dependencies: + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/invalid-dependency@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.6.1.tgz" @@ -1403,6 +1861,13 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/is-array-buffer@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz#f87a79f1b858c88744f07e8d8d0a791df204017e" + integrity sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ== + dependencies: + tslib "^2.5.0" + "@aws-sdk/is-array-buffer@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.6.1.tgz" @@ -1410,6 +1875,15 @@ dependencies: tslib "^1.8.0" +"@aws-sdk/md5-js@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/md5-js/-/md5-js-3.338.0.tgz#fbadecc01a9485363e76ed60029d7fad51480ddc" + integrity sha512-ixOI49fgbPBbag+H55k6d0bmHSG+RqXPbXHwlnaM9Fkgqc+GrR+jGEyQO9XQqETmKhTam3qkOLBGNeqSLiTOWw== + dependencies: + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/md5-js@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.6.1.tgz" @@ -1429,6 +1903,17 @@ "@aws-sdk/types" "3.6.1" tslib "^1.8.0" +"@aws-sdk/middleware-bucket-endpoint@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.338.0.tgz#a6206e1e2981db3b6a058c07cf67ddaa8c91d92b" + integrity sha512-6eftaAt2yLd1sPSp12/HaYlCwOPXYZc8jPoE2gHb5CW1aMof6DfiZdYs+nOuX/mRpuWgBCtmsA1LtC+VlL8EIg== + dependencies: + "@aws-sdk/protocol-http" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-arn-parser" "3.310.0" + "@aws-sdk/util-config-provider" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/middleware-bucket-endpoint@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.6.1.tgz" @@ -1448,6 +1933,15 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/middleware-content-length@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.338.0.tgz#027e2f4a5cb7d5afa3cd992191a84634c78e3df7" + integrity sha512-m2C+yJaNmbA3ocBp/7ImUUuimymV5JsFdV7yAibpbYMX22g3q83nieOF9x0I66J0+h+/bcriz/T1ZJAPANLz/g== + dependencies: + "@aws-sdk/protocol-http" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/middleware-content-length@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.6.1.tgz" @@ -1457,6 +1951,17 @@ "@aws-sdk/types" "3.6.1" tslib "^1.8.0" +"@aws-sdk/middleware-endpoint@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.338.0.tgz#5cde32cc018aaef97f634edef7cc5c0d64c3c1b6" + integrity sha512-bzL9Q8lFidg2NTjGVGDKI6yPG/XiPS+VIAMHJeihQmcv1alIy+N3IL4bEN15Fg+cwaGm+P3BevcLIHmcCOVb4w== + dependencies: + "@aws-sdk/middleware-serde" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/url-parser" "3.338.0" + "@aws-sdk/util-middleware" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/middleware-eventstream@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.186.0.tgz" @@ -1466,6 +1971,15 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/middleware-expect-continue@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.338.0.tgz#584fd90ba87489cf7d3df18d13a759ea9b27d96e" + integrity sha512-a5VJEzAIeY6cvK1GBq9FJAgbh8N1axLypbL3gQuJwsRSwzkUxLKifZcXv2sCar/fn4NTrZwf5CwLVtZuGceFpg== + dependencies: + "@aws-sdk/protocol-http" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/middleware-expect-continue@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.6.1.tgz" @@ -1476,6 +1990,19 @@ "@aws-sdk/types" "3.6.1" tslib "^1.8.0" +"@aws-sdk/middleware-flexible-checksums@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.338.0.tgz#0f46f0461d8068c15a2f8263c862172f42cdf72f" + integrity sha512-J1Hk6Ea8fkKmiI07mCS/A81W+tO3ZSZ/Dxdm41ljy76vli/sBQZ38W7ISoYB2PkBOsmIt1xZI4sG/16G/f8TAg== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-crypto/crc32c" "3.0.0" + "@aws-sdk/is-array-buffer" "3.310.0" + "@aws-sdk/protocol-http" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/middleware-header-default@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-header-default/-/middleware-header-default-3.6.1.tgz" @@ -1494,6 +2021,15 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/middleware-host-header@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.338.0.tgz#0c872f85b3995e6e124536600fa0b9b7d9187a20" + integrity sha512-k3C7oppkrqeKrAJt9XIl45SdELtnph9BF0QypjyRfT5MNEDnMMsQkc6xy3ZMqG5dWQq6B2l8C+JL7pOvkSQP3w== + dependencies: + "@aws-sdk/protocol-http" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/middleware-host-header@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.6.1.tgz" @@ -1503,6 +2039,14 @@ "@aws-sdk/types" "3.6.1" tslib "^1.8.0" +"@aws-sdk/middleware-location-constraint@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.338.0.tgz#b74e9701de3bd8f540e1ebb19db58176fedf5122" + integrity sha512-+ozf/PCTvmbSYvFGviZCoYjw2ft6qywHPnDVqS4e49mLQUI4EAWGUfODDVRgIUEvZcpMlEe5Xbt5hV755McuKQ== + dependencies: + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/middleware-location-constraint@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.6.1.tgz" @@ -1519,6 +2063,14 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/middleware-logger@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.338.0.tgz#d8bcb19c9b362ed8b6612635f6404875c022b595" + integrity sha512-btj9U0Xovq/UAu3Ur4lAfF7Q3DvvwJ/0UUWsI6GgSzzqSOFgKCz7hCP2GZIT8aXEA5hJOpBOEMkNMjWPNa91Hg== + dependencies: + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/middleware-logger@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.6.1.tgz" @@ -1536,6 +2088,15 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/middleware-recursion-detection@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.338.0.tgz#2b9746c626a8a58a891af5964b418743d55ffb2d" + integrity sha512-fu5KwiHHSqC8KTQH6xdJ9+dua4gQcXSFLE5fVsergqd0uVdsmhiI+IDfW6QNwF/lmCqnoKDkpeasuB98eG2tow== + dependencies: + "@aws-sdk/protocol-http" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/middleware-retry@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.186.0.tgz" @@ -1548,6 +2109,19 @@ tslib "^2.3.1" uuid "^8.3.2" +"@aws-sdk/middleware-retry@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.338.0.tgz#11aab11993cb1cf3654b0c73df854cd5a9204e12" + integrity sha512-nw1oPFkB7TdDG4Vlz2Td47ft/2Gmx1bA18QfE9K1mMWZ4nnoAL8xnHbowlTfHo62+BbFCAPu53PzDUCncBL0iw== + dependencies: + "@aws-sdk/protocol-http" "3.338.0" + "@aws-sdk/service-error-classification" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-middleware" "3.338.0" + "@aws-sdk/util-retry" "3.338.0" + tslib "^2.5.0" + uuid "^8.3.2" + "@aws-sdk/middleware-retry@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.6.1.tgz" @@ -1560,6 +2134,16 @@ tslib "^1.8.0" uuid "^3.0.0" +"@aws-sdk/middleware-sdk-s3@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.338.0.tgz#986071b1f00c0e6c2902fd33d43b8111a81d6d6c" + integrity sha512-bgz6/S+PtJ+72+hCqUSoh1PispcU1GIHZvJTOyHp+NBOKvxbNZzDHNpXtLPcbh/XgzWeeVAa0hzy7fWg8BY9tw== + dependencies: + "@aws-sdk/protocol-http" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-arn-parser" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/middleware-sdk-s3@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.6.1.tgz" @@ -1582,6 +2166,15 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/middleware-sdk-sts@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.338.0.tgz#671e1bba42806a42a8cb88f20d29655ac0bdd29d" + integrity sha512-aZ8eFVaot8oYQri1wOesrA3gLizeAHtlA/ELlqxoGDJtO011J4/hTHTn0iJGbktaCvc1L3TF6mgOsgXpudYqMg== + dependencies: + "@aws-sdk/middleware-signing" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/middleware-serde@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.186.0.tgz" @@ -1590,6 +2183,14 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/middleware-serde@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.338.0.tgz#d4fb684a39465615e52d99ca346b8f82e7e96101" + integrity sha512-AabRLrE6sk9tqQlQ7z3kn4gTHNN7Anjk/AM0ZEu96WcWjedcpgM1vVpKTBE7vjnxcTRNq0CEM3GLtQqaZ7/HjQ== + dependencies: + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/middleware-serde@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.6.1.tgz" @@ -1610,6 +2211,18 @@ "@aws-sdk/util-middleware" "3.186.0" tslib "^2.3.1" +"@aws-sdk/middleware-signing@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.338.0.tgz#c1877ada8e9f7c0afa459b5b36cebf85a1a97ffa" + integrity sha512-AprhhShMF75mOx80SABujLwrU/w2uHQIvWd6aF3BsE5JRI3uQZRqspfjFCaK52HNLQPj3sCQUw1GeiZJ8GyWCw== + dependencies: + "@aws-sdk/property-provider" "3.338.0" + "@aws-sdk/protocol-http" "3.338.0" + "@aws-sdk/signature-v4" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-middleware" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/middleware-signing@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.6.1.tgz" @@ -1620,6 +2233,14 @@ "@aws-sdk/types" "3.6.1" tslib "^1.8.0" +"@aws-sdk/middleware-ssec@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.338.0.tgz#c18697cfac8abda449a9e72d38adfc0086f1bfc4" + integrity sha512-ou2Xb8d56defib/DuwI/5gouBJzbeOp82eiV5opD33LfXIsQT0zatscd7UU1MtLKADaTthis9BA1VtNKq9Zmig== + dependencies: + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/middleware-ssec@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.6.1.tgz" @@ -1635,6 +2256,13 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/middleware-stack@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.338.0.tgz#ab923fc8ebeb5dc23874b357101a575daa1ada21" + integrity sha512-9zXyiklX9AK9ZIXuIPzWzz2vevBEcnBs9UNIxiHl4NBZ8d8oyTvaES1PtFuwL6f7ANSZ9EGVQ2rdTTnMNxMI1A== + dependencies: + tslib "^2.5.0" + "@aws-sdk/middleware-stack@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.6.1.tgz" @@ -1651,6 +2279,16 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/middleware-user-agent@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.338.0.tgz#25de08397fde96bbea0fa7dc7209ca95869aff64" + integrity sha512-DMqODOsDMFMPcDw2Ya6a0i34AhaBDRpp3vJ+FK3zPxUIsv6iHA+XqEcXLOxROLLoydoyxus7k2U+EWibLZrFbQ== + dependencies: + "@aws-sdk/protocol-http" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-endpoints" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/middleware-user-agent@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.6.1.tgz" @@ -1670,6 +2308,16 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/node-config-provider@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.338.0.tgz#930546e2d5494e51d8c645c6d364e8c4a2ae033c" + integrity sha512-YO7yWg3ipnUI5u6D+Zn2NUpjj5krwc8zNWeY79ULVIp9g7faqGX3xMSjeRSrpZ83s5jg1dOm/+bB0gw7mCrRCw== + dependencies: + "@aws-sdk/property-provider" "3.338.0" + "@aws-sdk/shared-ini-file-loader" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/node-config-provider@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.6.1.tgz" @@ -1691,6 +2339,17 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/node-http-handler@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.338.0.tgz#3a7332ca68a08f72311ec99d64e7c5a0fcff1e64" + integrity sha512-V1BLzCruiv45tJ0vXjiamY8LncIsUFsXYJGDupomFYhWRN8L1MUB9f2vdKn5X3wXn/yKrluwTmNaryrIqd9akA== + dependencies: + "@aws-sdk/abort-controller" "3.338.0" + "@aws-sdk/protocol-http" "3.338.0" + "@aws-sdk/querystring-builder" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/node-http-handler@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.6.1.tgz" @@ -1710,6 +2369,14 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/property-provider@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.338.0.tgz#88b6f6be61d09f26277c1982bfd10f499870393d" + integrity sha512-mC+ZJ738ipif6ZkH59gcipozYj1FOfpXr9pGVCA2hJGLDdaBwI2Jfpb2qCqbsTNtoCjBuIy+sQHGmUHyclgYHg== + dependencies: + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/property-provider@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.6.1.tgz" @@ -1726,6 +2393,14 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/protocol-http@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.338.0.tgz#0d3e20881dfb5a00daa246e79a2c0da0a088489b" + integrity sha512-JX03Q2gshdzOWtA/07kdpk0hqeOrOfwuF8TB97g66VCcIopYQkCeNH1zzkWu+RsGxfSlzQ7up+ZM6sclYXyB1A== + dependencies: + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/protocol-http@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.6.1.tgz" @@ -1743,6 +2418,15 @@ "@aws-sdk/util-uri-escape" "3.186.0" tslib "^2.3.1" +"@aws-sdk/querystring-builder@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.338.0.tgz#2f8668d3bfb1cf9c49876116a07902b17025da8f" + integrity sha512-IB3YhO93Htwt2SxJx4VWsN57Rt1KEsvZ6PbneO4bcS96E04BlfBujYMZ+QxEM3EJxorhpkwbI2QnI12IjD8FhA== + dependencies: + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-uri-escape" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/querystring-builder@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.6.1.tgz" @@ -1760,6 +2444,14 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/querystring-parser@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.338.0.tgz#6b376b0b05b773d8ce8271a1d80593d1af94234c" + integrity sha512-vtI8Gqx4yj0BZlWonRMgLz68sHt5H48HN+ClnY+fDDB/8KLnCuwZ3TGKmYIbYbshL9wjJz0A9aLzuC6nPQ5JKw== + dependencies: + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/querystring-parser@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.6.1.tgz" @@ -1786,6 +2478,11 @@ resolved "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.186.0.tgz" integrity sha512-DRl3ORk4tF+jmH5uvftlfaq0IeKKpt0UPAOAFQ/JFWe+TjOcQd/K+VC0iiIG97YFp3aeFmH1JbEgsNxd+8fdxw== +"@aws-sdk/service-error-classification@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.338.0.tgz#67d009b177fb03133fdfacbcd98b054dd34efbf0" + integrity sha512-BJFr2mx/N3NbycGTlMMGRBc0tGcHXHEbMPy1H2RbejzL23zh27MchaL1WAK9SvwVMKS29hSDbhkuVR2ABRjerA== + "@aws-sdk/service-error-classification@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.6.1.tgz" @@ -1799,6 +2496,14 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/shared-ini-file-loader@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.338.0.tgz#c443df5fea13fe42785c2dc93bec312aa32d803d" + integrity sha512-MA1Sp97LFlOXcUaXgo47j86IsPRWYq1V/JqR+uu0zofZw4Xlt7Y6F+mmnDHvuuMy6R2ltzjXSwgrrW3k0bxFPA== + dependencies: + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/shared-ini-file-loader@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.6.1.tgz" @@ -1806,6 +2511,16 @@ dependencies: tslib "^1.8.0" +"@aws-sdk/signature-v4-multi-region@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.338.0.tgz#175072cd151a6977edafafdfbe4f88c4e9eb9b87" + integrity sha512-mo61z1PiJ8GcLXLUcp9s4WqBd+hy+R0ymH2ohrLE4aw8H0FEq44zvTBXmI9GjycXGStdCpeU9+S2FkXxYPuy4w== + dependencies: + "@aws-sdk/protocol-http" "3.338.0" + "@aws-sdk/signature-v4" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/signature-v4@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.186.0.tgz" @@ -1818,6 +2533,19 @@ "@aws-sdk/util-uri-escape" "3.186.0" tslib "^2.3.1" +"@aws-sdk/signature-v4@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.338.0.tgz#3d5402ee10027958c5271b390c0966683d681a53" + integrity sha512-EwKTe/8Iwab/v0eo27w7DRYlqp9wEZEhuRfOMwTikUVH6iuTnW6AXjcIUfcRYBRbx2zqnRSiMAZkjN6ZFYm0bQ== + dependencies: + "@aws-sdk/is-array-buffer" "3.310.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-hex-encoding" "3.310.0" + "@aws-sdk/util-middleware" "3.338.0" + "@aws-sdk/util-uri-escape" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/signature-v4@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.6.1.tgz" @@ -1838,6 +2566,15 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/smithy-client@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.338.0.tgz#fc391b1fd57e1c002cae2bc93db6e931312a6a59" + integrity sha512-IpFLdLG8GwaiFdqVXf+WyU47Hfa2BMIupAU6iSkE2ZO0lBdg+efn/BBwis5WbBNTDCaaU0xH9y68SmnqqtD7pA== + dependencies: + "@aws-sdk/middleware-stack" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/smithy-client@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.6.1.tgz" @@ -1847,11 +2584,29 @@ "@aws-sdk/types" "3.6.1" tslib "^1.8.0" +"@aws-sdk/token-providers@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.338.0.tgz#7df35becb85bb689e0de51a0cad27f7978f3fb8a" + integrity sha512-wuiEGcWiMeq5N68M489i2iGYcCad9p1btNEOFgus+JO3DRSA6HZXizLI1wqfbUm5Ei8512AvUKB6N8PMzahQsg== + dependencies: + "@aws-sdk/client-sso-oidc" "3.338.0" + "@aws-sdk/property-provider" "3.338.0" + "@aws-sdk/shared-ini-file-loader" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/types@3.186.0", "@aws-sdk/types@^3.110.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.186.0.tgz" integrity sha512-NatmSU37U+XauMFJCdFI6nougC20JUFZar+ump5wVv0i54H+2Refg1YbFDxSs0FY28TSB9jfhWIpfFBmXgL5MQ== +"@aws-sdk/types@3.338.0", "@aws-sdk/types@^3.222.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.338.0.tgz#2b14c063f3be09d2465fe23fd2554ce2287fbeca" + integrity sha512-hrNK15o+EObLrl9oWOyxJN2dwjgbdBMGolLEVP/wR/+M9ojHgk/x1kMsCVcV82a8Vgdtqx1TyOC3UugUPT0+NA== + dependencies: + tslib "^2.5.0" + "@aws-sdk/types@3.6.1", "@aws-sdk/types@^3.1.0": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.6.1.tgz" @@ -1881,6 +2636,15 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/url-parser@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.338.0.tgz#ef7bee904d55dc2a55a819028dec63d7e4c1128f" + integrity sha512-x8a5swfZ6iWJZEA8rm99OKQ1A6xhWPP1taQUzoPavGCzPAOqyc8cd0FcXYMxvtXb3FeBhGaI8tiGKvelJro0+A== + dependencies: + "@aws-sdk/querystring-parser" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/url-parser@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.6.1.tgz" @@ -1890,6 +2654,13 @@ "@aws-sdk/types" "3.6.1" tslib "^1.8.0" +"@aws-sdk/util-arn-parser@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz#861ff8810851be52a320ec9e4786f15b5fc74fba" + integrity sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA== + dependencies: + tslib "^2.5.0" + "@aws-sdk/util-arn-parser@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.6.1.tgz" @@ -1927,6 +2698,14 @@ "@aws-sdk/util-buffer-from" "3.6.1" tslib "^1.8.0" +"@aws-sdk/util-base64@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz#d0fd49aff358c5a6e771d0001c63b1f97acbe34c" + integrity sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg== + dependencies: + "@aws-sdk/util-buffer-from" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/util-body-length-browser@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.186.0.tgz" @@ -1934,6 +2713,13 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/util-body-length-browser@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz#3fca9d2f73c058edf1907e4a1d99a392fdd23eca" + integrity sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g== + dependencies: + tslib "^2.5.0" + "@aws-sdk/util-body-length-browser@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.6.1.tgz" @@ -1948,6 +2734,13 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/util-body-length-node@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz#4846ae72834ab0636f29f89fc1878520f6543fed" + integrity sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ== + dependencies: + tslib "^2.5.0" + "@aws-sdk/util-body-length-node@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.6.1.tgz" @@ -1963,6 +2756,14 @@ "@aws-sdk/is-array-buffer" "3.186.0" tslib "^2.3.1" +"@aws-sdk/util-buffer-from@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz#7a72cb965984d3c6a7e256ae6cf1621f52e54a57" + integrity sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw== + dependencies: + "@aws-sdk/is-array-buffer" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/util-buffer-from@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.6.1.tgz" @@ -1978,6 +2779,13 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/util-config-provider@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz#ff21f73d4774cfd7bd16ae56f905828600dda95f" + integrity sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg== + dependencies: + tslib "^2.5.0" + "@aws-sdk/util-create-request@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/util-create-request/-/util-create-request-3.6.1.tgz" @@ -1998,6 +2806,16 @@ bowser "^2.11.0" tslib "^2.3.1" +"@aws-sdk/util-defaults-mode-browser@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.338.0.tgz#6cdeec6c5f702a61cc4ce79471789162d0b39c4b" + integrity sha512-Zfr5c7JKMJTfb7z+hgd0ioU5iw+wId6Cppc5V1HpZuS2YY4Mn3aJIixzyzhIoCzbmk/yIkf96981epM9eo3/TA== + dependencies: + "@aws-sdk/property-provider" "3.338.0" + "@aws-sdk/types" "3.338.0" + bowser "^2.11.0" + tslib "^2.5.0" + "@aws-sdk/util-defaults-mode-node@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.186.0.tgz" @@ -2010,6 +2828,26 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/util-defaults-mode-node@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.338.0.tgz#cb87b039f90d124e70a53769ae1ebbce6d253f3c" + integrity sha512-DFM3BSpSetshZTgTjueCkAYZWS0tn5zl7SjkSpFhWQZ8Tt/Df3/DEjcPvxzmC/5vgYSUXNsqcI7lLAJk9aGZAA== + dependencies: + "@aws-sdk/config-resolver" "3.338.0" + "@aws-sdk/credential-provider-imds" "3.338.0" + "@aws-sdk/node-config-provider" "3.338.0" + "@aws-sdk/property-provider" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + +"@aws-sdk/util-endpoints@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.338.0.tgz#f54c09b06daa8dd1bd96e479ebda3b21492631ea" + integrity sha512-0gBQcohbNcBsBR7oyaD0Dg2m6qOmfp0G1iN/NM23gwAr2H3ni8tUXfs1HsZzxikOwUr6dSLASokc30vQXBF44A== + dependencies: + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/util-format-url@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.6.1.tgz" @@ -2026,6 +2864,13 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/util-hex-encoding@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz#19294c78986c90ae33f04491487863dc1d33bd87" + integrity sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA== + dependencies: + tslib "^2.5.0" + "@aws-sdk/util-hex-encoding@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.6.1.tgz" @@ -2047,6 +2892,43 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/util-middleware@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-middleware/-/util-middleware-3.338.0.tgz#3b405eba916285a7764885376e0d16f973efdf98" + integrity sha512-oQuAmhi16HWEqVa+Nq4VD4Ymet9vS+uiW92reaagQrW2QFjAgJW9A6pU0PcIHF9sWY1iDKeNdV5b9odQ45PDJA== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/util-retry@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-retry/-/util-retry-3.338.0.tgz#c71c8a52033a619896296c532246f67703ef9ef9" + integrity sha512-diR6M3gJgSgBg/87L2e8iF8urG+LOW9ZGWxhntYpYX4uhiIjwNgUPUa993553C8GIOZDHez5X9ExU4asYGQ71Q== + dependencies: + "@aws-sdk/service-error-classification" "3.338.0" + tslib "^2.5.0" + +"@aws-sdk/util-stream-browser@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-stream-browser/-/util-stream-browser-3.338.0.tgz#10dd0661e4fac568f101837cf9593c8288600bf8" + integrity sha512-s44/cmeXOPNjYWXjns5j73ABnshgzwcQ1v7fat76P72XEvphqDJRaxiHeX1+LxgP1FRyySKYlE5Z32jVSAt7lA== + dependencies: + "@aws-sdk/fetch-http-handler" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-base64" "3.310.0" + "@aws-sdk/util-hex-encoding" "3.310.0" + "@aws-sdk/util-utf8" "3.310.0" + tslib "^2.5.0" + +"@aws-sdk/util-stream-node@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-stream-node/-/util-stream-node-3.338.0.tgz#5522c46c53288a4c5dea88ff9936be04f13b45a9" + integrity sha512-ioj8Ps6a/napPG3vQ4MpbX8YGQSPbBFG7fBSkMwKL5dxm8DD18F0ERKNwglm9I8h2n8yuOwCWF9PSMgcNaDoFA== + dependencies: + "@aws-sdk/node-http-handler" "3.338.0" + "@aws-sdk/types" "3.338.0" + "@aws-sdk/util-buffer-from" "3.310.0" + tslib "^2.5.0" + "@aws-sdk/util-uri-escape@3.186.0": version "3.186.0" resolved "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.186.0.tgz" @@ -2054,6 +2936,13 @@ dependencies: tslib "^2.3.1" +"@aws-sdk/util-uri-escape@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz#9f942f09a715d8278875013a416295746b6085ba" + integrity sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q== + dependencies: + tslib "^2.5.0" + "@aws-sdk/util-uri-escape@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.6.1.tgz" @@ -2070,6 +2959,15 @@ bowser "^2.11.0" tslib "^2.3.1" +"@aws-sdk/util-user-agent-browser@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.338.0.tgz#51d78d6fa7a071211260814aaa86bc24c7f7765c" + integrity sha512-3e8D+SOtOQEtRtksOEF7EC26xPkuY6YK6biLgdtvR9JspK96rHk5eX1HEJeBJJqbxhyPaxpIw+OhWhnsrUS3hA== + dependencies: + "@aws-sdk/types" "3.338.0" + bowser "^2.11.0" + tslib "^2.5.0" + "@aws-sdk/util-user-agent-browser@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.6.1.tgz" @@ -2088,6 +2986,15 @@ "@aws-sdk/types" "3.186.0" tslib "^2.3.1" +"@aws-sdk/util-user-agent-node@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.338.0.tgz#e321e70da741356b348f4f0921a8bc94ad18320d" + integrity sha512-rc+bC5KM9h25urRc+MXuViJkJ+qYG2NlCRw6xm2lSIvHFJTUjH1ZMO3mqNDYkGnQRbj0mmrVe+N77TJZGf3Q2Q== + dependencies: + "@aws-sdk/node-config-provider" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/util-user-agent-node@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.6.1.tgz" @@ -2141,6 +3048,23 @@ "@aws-sdk/util-buffer-from" "3.6.1" tslib "^1.8.0" +"@aws-sdk/util-utf8@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz#4a7b9dcebb88e830d3811aeb21e9a6df4273afb4" + integrity sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA== + dependencies: + "@aws-sdk/util-buffer-from" "3.310.0" + tslib "^2.5.0" + +"@aws-sdk/util-waiter@3.338.0": + version "3.338.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.338.0.tgz#a7f2906fbd624a114e329f1517c8f3e2e9b76bc6" + integrity sha512-15yWYJo/M4VDpZjlXgQDM4Du8UjX33eIVPJDrOmn/u+UrD6QUXoBuLXKns0uAMUTPFacBGZ0NwMywxieq0g11Q== + dependencies: + "@aws-sdk/abort-controller" "3.338.0" + "@aws-sdk/types" "3.338.0" + tslib "^2.5.0" + "@aws-sdk/util-waiter@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.6.1.tgz" @@ -2150,6 +3074,13 @@ "@aws-sdk/types" "3.6.1" tslib "^1.8.0" +"@aws-sdk/xml-builder@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz#f0236f2103b438d16117e0939a6305ad69b7ff76" + integrity sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw== + dependencies: + tslib "^2.5.0" + "@aws-sdk/xml-builder@3.6.1": version "3.6.1" resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.6.1.tgz" @@ -3865,7 +4796,42 @@ resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@mapbox/geojson-rewind@^0.5.0": +"@mapbox/extent@0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@mapbox/extent/-/extent-0.4.0.tgz#3e591f32e1f0c3981c864239f7b0ac06e610f8a9" + integrity sha512-MSoKw3qPceGuupn04sdaJrFeLKvcSETVLZCGS8JA9x6zXQL3FWiKaIXYIZEDXd5jpXpWlRxinCZIN49yRy0C9A== + +"@mapbox/geojson-area@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz#18d7814aa36bf23fbbcc379f8e26a22927debf10" + integrity sha512-bBqqFn1kIbLBfn7Yq1PzzwVkPYQr9lVUeT8Dhd0NL5n76PBuXzOcuLV7GOSbEB1ia8qWxH4COCvFpziEu/yReA== + dependencies: + wgs84 "0.0.0" + +"@mapbox/geojson-coords@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-coords/-/geojson-coords-0.0.2.tgz#f73d5744c832de0f05c48899f16a4288cefb2606" + integrity sha512-YuVzpseee/P1T5BWyeVVPppyfmuXYHFwZHmybkqaMfu4BWlOf2cmMGKj2Rr92MwfSTOCSUA0PAsVGRG8akY0rg== + dependencies: + "@mapbox/geojson-normalize" "0.0.1" + geojson-flatten "^1.0.4" + +"@mapbox/geojson-extent@^1.0.0", "@mapbox/geojson-extent@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-extent/-/geojson-extent-1.0.1.tgz#bd99a6b66ba98e63a29511c9cd1bbd1df4c1e203" + integrity sha512-hh8LEO3djT4fqfr8sSC6wKt+p0TMiu+KOLMBUiFOyj+zGq7+IXwQGl0ppCVDkyzCewyd9LoGe9zAvDxXrLfhLw== + dependencies: + "@mapbox/extent" "0.4.0" + "@mapbox/geojson-coords" "0.0.2" + rw "~0.1.4" + traverse "~0.6.6" + +"@mapbox/geojson-normalize@0.0.1", "@mapbox/geojson-normalize@^0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-normalize/-/geojson-normalize-0.0.1.tgz#1da1e6b3a7add3ad29909b30f438f60581b7cd80" + integrity sha512-82V7YHcle8lhgIGqEWwtXYN5cy0QM/OHq3ypGhQTbvHR57DF0vMHMjjVSQKFfVXBe/yWCBZTyOuzvK7DFFnx5Q== + +"@mapbox/geojson-rewind@^0.5.0", "@mapbox/geojson-rewind@^0.5.2": version "0.5.2" resolved "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz" integrity sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA== @@ -3878,11 +4844,37 @@ resolved "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz" integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw== -"@mapbox/jsonlint-lines-primitives@^2.0.2": +"@mapbox/jsonlint-lines-primitives@^2.0.2", "@mapbox/jsonlint-lines-primitives@~2.0.2": version "2.0.2" resolved "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz" integrity sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ== +"@mapbox/mapbox-gl-draw@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-draw/-/mapbox-gl-draw-1.3.0.tgz#7a30fb99488cb47a32c25e99c3c62413b04bbaed" + integrity sha512-B+KWK+dAgzLHMNyKVuuMRfjeSlQ77MhNLdfpQQpbp3pkhnrdmydDe3ixto1Ua78hktNut0WTrAaD8gYu4PVcjA== + dependencies: + "@mapbox/geojson-area" "^0.2.2" + "@mapbox/geojson-extent" "^1.0.0" + "@mapbox/geojson-normalize" "^0.0.1" + "@mapbox/point-geometry" "^0.1.0" + hat "0.0.3" + lodash.isequal "^4.5.0" + xtend "^4.0.2" + +"@mapbox/mapbox-gl-draw@^1.3.0": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-draw/-/mapbox-gl-draw-1.4.1.tgz#96dcec4d3957150de854423ac15856fde43d1452" + integrity sha512-g6F49KZagF9269/IoF6vZJeail6qtoc5mVF3eVRikNT7UFnY0QASfe2y53mgE99s6GrHdpV+PZuFxaL71hkMhg== + dependencies: + "@mapbox/geojson-area" "^0.2.2" + "@mapbox/geojson-extent" "^1.0.1" + "@mapbox/geojson-normalize" "^0.0.1" + "@mapbox/point-geometry" "^0.1.0" + hat "0.0.3" + lodash.isequal "^4.5.0" + xtend "^4.0.2" + "@mapbox/mapbox-gl-supported@^1.5.0": version "1.5.0" resolved "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz" @@ -3898,11 +4890,21 @@ resolved "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz" integrity sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw== +"@mapbox/tiny-sdf@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz#9a1d33e5018093e88f6a4df2343e886056287282" + integrity sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA== + "@mapbox/unitbezier@^0.0.0": version "0.0.0" resolved "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz" integrity sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA== +"@mapbox/unitbezier@^0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz#d32deb66c7177e9e9dfc3bbd697083e2e657ff01" + integrity sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw== + "@mapbox/vector-tile@^1.3.1": version "1.3.1" resolved "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz" @@ -3925,6 +4927,30 @@ suggestions-list "^0.0.2" xtend "^4.0.1" +"@maplibre/maplibre-gl-geocoder@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@maplibre/maplibre-gl-geocoder/-/maplibre-gl-geocoder-1.5.0.tgz#6b413525b361b4759df0fd17429e12b78f03b3a4" + integrity sha512-PsAbV7WFIOu5QYZne95FiXoV7AV1/6ULMjQxgInhZ5DdB0hDLjciQPegnyDgkzI8JfeqoUMZVS/MglZnSZYhyQ== + dependencies: + lodash.debounce "^4.0.6" + subtag "^0.5.0" + suggestions-list "^0.0.2" + xtend "^4.0.1" + +"@maplibre/maplibre-gl-style-spec@^19.2.0": + version "19.2.0" + resolved "https://registry.yarnpkg.com/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-19.2.0.tgz#332f0befb290ddf9be602ba8d2fb2dd5d366764a" + integrity sha512-RQcFaiOqSSqxCHpcQw9tPvMK4fK36Czzm0GNgRum0Q+AcLchtYSshRDz8+0gfQqb1gxGBMXayJc+t/xmFeXSdg== + dependencies: + "@mapbox/jsonlint-lines-primitives" "~2.0.2" + "@mapbox/point-geometry" "^0.1.0" + "@mapbox/unitbezier" "^0.0.1" + "@types/mapbox__point-geometry" "^0.1.2" + json-stringify-pretty-compact "^3.0.0" + minimist "^1.2.8" + rw "^1.3.3" + sort-object "^3.0.3" + "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" resolved "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz" @@ -4382,6 +5408,21 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@smithy/protocol-http@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-1.0.1.tgz#62fd73d73db285fd8e9a2287ed2904ac66e0d43f" + integrity sha512-9OrEn0WfOVtBNYJUjUAn9AOiJ4lzERCJJ/JeZs8E6yajTGxBaFRxUnNBHiNqoDJVg076hY36UmEnPx7xXrvUSg== + dependencies: + "@smithy/types" "^1.0.0" + tslib "^2.5.0" + +"@smithy/types@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-1.0.0.tgz#87ab6131fe5e19cbd4d383ffb94d2b806d027d38" + integrity sha512-kc1m5wPBHQCTixwuaOh9vnak/iJm21DrSf9UK6yDE5S3mQQ4u11pqAUiKWnlrZnYkeLfAI9UEHj9OaMT1v5Umg== + dependencies: + tslib "^2.5.0" + "@surma/rollup-plugin-off-main-thread@^2.2.3": version "2.2.3" resolved "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz" @@ -4577,6 +5618,33 @@ resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== +"@turf/along@^6.0.1", "@turf/along@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/along/-/along-6.5.0.tgz#ab12eec58a14de60fe243a62d31a474f415c8fef" + integrity sha512-LLyWQ0AARqJCmMcIEAXF4GEu8usmd4Kbz3qk1Oy5HoRNpZX47+i5exQtmIWKdqJ1MMhW26fCTXgpsEs5zgJ5gw== + dependencies: + "@turf/bearing" "^6.5.0" + "@turf/destination" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/bbox@*": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-6.5.0.tgz#bec30a744019eae420dac9ea46fb75caa44d8dc5" + integrity sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/bearing@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/bearing/-/bearing-6.5.0.tgz#462a053c6c644434bdb636b39f8f43fb0cd857b0" + integrity sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/boolean-clockwise@6.5.0": version "6.5.0" resolved "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-6.5.0.tgz" @@ -4585,7 +5653,31 @@ "@turf/helpers" "^6.5.0" "@turf/invariant" "^6.5.0" -"@turf/helpers@^6.5.0": +"@turf/circle@^6.0.1", "@turf/circle@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/circle/-/circle-6.5.0.tgz#dc017d8c0131d1d212b7c06f76510c22bbeb093c" + integrity sha512-oU1+Kq9DgRnoSbWFHKnnUdTmtcRUMmHoV9DjTXu9vOLNV5OWtAAh1VZ+mzsioGGzoDNT/V5igbFOkMfBQc0B6A== + dependencies: + "@turf/destination" "^6.5.0" + "@turf/helpers" "^6.5.0" + +"@turf/destination@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/destination/-/destination-6.5.0.tgz#30a84702f9677d076130e0440d3223ae503fdae1" + integrity sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/distance@^6.0.1", "@turf/distance@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/distance/-/distance-6.5.0.tgz#21f04d5f86e864d54e2abde16f35c15b4f36149a" + integrity sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/helpers@6.x", "@turf/helpers@^6.1.4", "@turf/helpers@^6.5.0": version "6.5.0" resolved "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz" integrity sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw== @@ -4597,6 +5689,64 @@ dependencies: "@turf/helpers" "^6.5.0" +"@turf/length@^6.0.2", "@turf/length@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/length/-/length-6.5.0.tgz#ff4e9072d5f997e1c32a1311d214d184463f83fa" + integrity sha512-5pL5/pnw52fck3oRsHDcSGrj9HibvtlrZ0QNy2OcW8qBFDNgZ4jtl6U7eATVoyWPKBHszW3dWETW+iLV7UARig== + dependencies: + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/line-intersect@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-intersect/-/line-intersect-6.5.0.tgz#dea48348b30c093715d2195d2dd7524aee4cf020" + integrity sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/line-segment" "^6.5.0" + "@turf/meta" "^6.5.0" + geojson-rbush "3.x" + +"@turf/line-segment@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-segment/-/line-segment-6.5.0.tgz#ee73f3ffcb7c956203b64ed966d96af380a4dd65" + integrity sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/line-slice@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-slice/-/line-slice-6.5.0.tgz#7b6e0c8e8e93fdb4e65c3b9a123a2ec93a21bdb0" + integrity sha512-vDqJxve9tBHhOaVVFXqVjF5qDzGtKWviyjbyi2QnSnxyFAmLlLnBfMX8TLQCAf2GxHibB95RO5FBE6I2KVPRuw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/nearest-point-on-line" "^6.5.0" + +"@turf/meta@6.x", "@turf/meta@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-6.5.0.tgz#b725c3653c9f432133eaa04d3421f7e51e0418ca" + integrity sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA== + dependencies: + "@turf/helpers" "^6.5.0" + +"@turf/nearest-point-on-line@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz#8e1cd2cdc0b5acaf4c8d8b3b33bb008d3cb99e7b" + integrity sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg== + dependencies: + "@turf/bearing" "^6.5.0" + "@turf/destination" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/line-intersect" "^6.5.0" + "@turf/meta" "^6.5.0" + "@types/aria-query@^4.2.0": version "4.2.2" resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz" @@ -4715,11 +5865,16 @@ "@types/qs" "*" "@types/serve-static" "*" -"@types/geojson@*": +"@types/geojson@*", "@types/geojson@^7946.0.10": version "7946.0.10" resolved "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz" integrity sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA== +"@types/geojson@7946.0.8": + version "7946.0.8" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca" + integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA== + "@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": version "4.1.6" resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz" @@ -4791,6 +5946,20 @@ dependencies: "@types/geojson" "*" +"@types/mapbox__point-geometry@*", "@types/mapbox__point-geometry@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz#488a9b76e8457d6792ea2504cdd4ecdd9860a27e" + integrity sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA== + +"@types/mapbox__vector-tile@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz#8fa1379dbaead1e1b639b8d96cfd174404c379d6" + integrity sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g== + dependencies: + "@types/geojson" "*" + "@types/mapbox__point-geometry" "*" + "@types/pbf" "*" + "@types/mime@*": version "3.0.1" resolved "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz" @@ -4823,6 +5992,11 @@ resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/pbf@*", "@types/pbf@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/pbf/-/pbf-3.0.2.tgz#8d291ad68b4b8c533e96c174a2e3e6399a59ed61" + integrity sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ== + "@types/prettier@^2.1.5": version "2.7.2" resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz" @@ -5444,6 +6618,11 @@ aria-query@^5.0.0, aria-query@^5.1.3: dependencies: deep-equal "^2.0.5" +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + array-buffer-byte-length@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" @@ -5545,6 +6724,11 @@ assert@^2.0.0: object-is "^1.0.1" util "^0.12.0" +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== + ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" @@ -5993,6 +7177,21 @@ bytes@3.1.2: resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +bytewise-core@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42" + integrity sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA== + dependencies: + typewise-core "^1.2" + +bytewise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/bytewise/-/bytewise-1.1.0.tgz#1d13cbff717ae7158094aa881b35d081b387253e" + integrity sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ== + dependencies: + bytewise-core "^1.2.2" + typewise "^1.0.3" + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" @@ -6792,6 +7991,11 @@ date-fns@^2.25.0: resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== +debounce@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" + integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== + debug@2.6.9, debug@^2.6.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" @@ -7133,7 +8337,7 @@ duplexer@^0.1.2: resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== -earcut@^2.2.2: +earcut@^2.2.2, earcut@^2.2.4: version "2.2.4" resolved "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz" integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== @@ -7705,6 +8909,21 @@ express@^4.17.3: utils-merge "1.0.1" vary "~1.1.2" +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + fast-base64-decode@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz" @@ -7741,6 +8960,13 @@ fast-xml-parser@3.19.0: resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz" integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg== +fast-xml-parser@4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz#5a98c18238d28a57bbdfa9fe4cda01211fff8f4a" + integrity sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg== + dependencies: + strnum "^1.0.5" + fast-xml-parser@^3.16.0: version "3.21.1" resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz" @@ -8014,6 +9240,22 @@ gensync@^1.0.0-beta.2: resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +geojson-flatten@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/geojson-flatten/-/geojson-flatten-1.1.1.tgz#601aae07ba6406281ebca683573dcda69eba04c7" + integrity sha512-k/6BCd0qAt7vdqdM1LkLfAy72EsLDy0laNwX0x2h49vfYCiQkRc4PSra8DNEdJ10EKRpwEvDXMb0dBknTJuWpQ== + +geojson-rbush@3.x: + version "3.2.0" + resolved "https://registry.yarnpkg.com/geojson-rbush/-/geojson-rbush-3.2.0.tgz#8b543cf0d56f99b78faf1da52bb66acad6dfc290" + integrity sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w== + dependencies: + "@turf/bbox" "*" + "@turf/helpers" "6.x" + "@turf/meta" "6.x" + "@types/geojson" "7946.0.8" + rbush "^3.0.1" + geojson-vt@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz" @@ -8061,7 +9303,12 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -gl-matrix@^3.2.1: +get-value@^2.0.2, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + +gl-matrix@^3.2.1, gl-matrix@^3.4.3: version "3.4.3" resolved "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz" integrity sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA== @@ -8262,6 +9509,11 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hat@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/hat/-/hat-0.0.3.tgz#bb014a9e64b3788aed8005917413d4ff3d502d8a" + integrity sha512-zpImx2GoKXy42fVDSEad2BPKuSQdLcqsCYa48K3zHSzM/ugWuYjLDr8IXxpVuL7uCLHw56eaiLxCRthhOzf5ug== + he@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" @@ -8654,6 +9906,18 @@ is-docker@^2.0.0, is-docker@^2.1.1: resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" @@ -8748,6 +10012,13 @@ is-plain-obj@^3.0.0: resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" @@ -8860,6 +10131,11 @@ isexe@^2.0.0: resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + isomorphic-unfetch@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz" @@ -9591,6 +10867,11 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stringify-pretty-compact@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz#f71ef9d82ef16483a407869556588e91b681d9ab" + integrity sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA== + json5@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" @@ -9635,6 +10916,11 @@ kdbush@^3.0.0: resolved "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz" integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew== +kdbush@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-4.0.2.tgz#2f7b7246328b4657dd122b6c7f025fbc2c868e39" + integrity sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA== + kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" @@ -9754,6 +11040,11 @@ lodash.debounce@^4.0.6, lodash.debounce@^4.0.8: resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" @@ -9853,6 +11144,18 @@ map-obj@^4.0.0, map-obj@^4.1.0: resolved "https://registry.npmjs.org/empty-npm-package/-/empty-npm-package-1.0.0.tgz" integrity sha512-q4Mq/+XO7UNDdMiPpR/LIBIW1Zl4V0Z6UT9aKGqIAnBCtCb3lvZJM1KbDbdzdC8fKflwflModfjR29Nt0EpcwA== +maplibre-gl-draw-circle@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/maplibre-gl-draw-circle/-/maplibre-gl-draw-circle-0.1.1.tgz#2b3ff6433c0b82dfc63b3ea555d8074492150180" + integrity sha512-CGdPcoTj9nWHn0Pa37tCoIyVKnN3AozWZjF2C64jnoWw1yzV4tOsUm+VWPbRRotJVKFQoEKHL8/5EjuS1FNiXQ== + dependencies: + "@mapbox/mapbox-gl-draw" "1.3.0" + "@turf/along" "^6.0.1" + "@turf/circle" "^6.0.1" + "@turf/distance" "^6.0.1" + "@turf/helpers" "^6.1.4" + "@turf/length" "^6.0.2" + maplibre-gl-js-amplify@1.5.0: version "1.5.0" resolved "https://registry.npmjs.org/maplibre-gl-js-amplify/-/maplibre-gl-js-amplify-1.5.0.tgz" @@ -9860,6 +11163,22 @@ maplibre-gl-js-amplify@1.5.0: dependencies: "@maplibre/maplibre-gl-geocoder" "^1.3.0" +maplibre-gl-js-amplify@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/maplibre-gl-js-amplify/-/maplibre-gl-js-amplify-3.0.5.tgz#7da977589cf3633bb753ab6f19637c0e9477ba4b" + integrity sha512-U5h4+mnx4zMJExAeOjLdwr070g7oy3AITBumBQUUocvXYU/UbmZT147Lp0b29GLkr9WHzxPBzf1Kb8zwChy1ww== + dependencies: + "@mapbox/mapbox-gl-draw" "^1.3.0" + "@maplibre/maplibre-gl-geocoder" "^1.5.0" + "@turf/along" "^6.5.0" + "@turf/circle" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/length" "^6.5.0" + "@turf/line-slice" "^6.5.0" + debounce "^1.2.1" + maplibre-gl-draw-circle "^0.1.1" + maplibre-gl@1.15.3: version "1.15.3" resolved "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-1.15.3.tgz" @@ -9889,6 +11208,36 @@ maplibre-gl@1.15.3: tinyqueue "^2.0.3" vt-pbf "^3.1.1" +maplibre-gl@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-3.0.0.tgz#1add307c822644d40e8612a9022a59b9e2c21a82" + integrity sha512-Yvtd36FJQWYymVNRG0Wv4uJfhvlVRR9GZQEBtMbubdH5NUOKqxt8A/OKVtzGPM+MVedTicg56pVxlRq643Hjuw== + dependencies: + "@mapbox/geojson-rewind" "^0.5.2" + "@mapbox/jsonlint-lines-primitives" "^2.0.2" + "@mapbox/point-geometry" "^0.1.0" + "@mapbox/tiny-sdf" "^2.0.6" + "@mapbox/unitbezier" "^0.0.1" + "@mapbox/vector-tile" "^1.3.1" + "@mapbox/whoots-js" "^3.1.0" + "@maplibre/maplibre-gl-style-spec" "^19.2.0" + "@types/geojson" "^7946.0.10" + "@types/mapbox__point-geometry" "^0.1.2" + "@types/mapbox__vector-tile" "^1.3.0" + "@types/pbf" "^3.0.2" + earcut "^2.2.4" + geojson-vt "^3.2.1" + gl-matrix "^3.4.3" + global-prefix "^3.0.0" + kdbush "^4.0.2" + murmurhash-js "^1.0.0" + pbf "^3.2.1" + potpack "^2.0.0" + quickselect "^2.0.0" + supercluster "^8.0.1" + tinyqueue "^2.0.3" + vt-pbf "^3.1.3" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" @@ -10019,7 +11368,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -10428,9 +11777,9 @@ pako@2.0.4: resolved "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz" integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg== -papaparse@^5.3.1: +papaparse@^5.3.1, papaparse@^5.4.1: version "5.4.1" - resolved "https://registry.npmjs.org/papaparse/-/papaparse-5.4.1.tgz" + resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.4.1.tgz#f45c0f871853578bd3a30f92d96fdcfb6ebea127" integrity sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw== param-case@^3.0.4: @@ -11163,6 +12512,11 @@ potpack@^1.0.1: resolved "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz" integrity sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ== +potpack@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/potpack/-/potpack-2.0.0.tgz#61f4dd2dc4b3d5e996e3698c0ec9426d0e169104" + integrity sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -11380,6 +12734,13 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" +rbush@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/rbush/-/rbush-3.0.1.tgz#5fafa8a79b3b9afdfe5008403a720cc1de882ecf" + integrity sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w== + dependencies: + quickselect "^2.0.0" + react-app-polyfill@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz" @@ -11997,6 +13358,11 @@ rw@^1.3.3: resolved "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz" integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== +rw@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/rw/-/rw-0.1.4.tgz#4903cbd80248ae0ede685bf58fd236a7a9b29a3e" + integrity sha512-vSj3D96kMcjNyqPcp65wBRIDImGSrUuMxngNNxvw8MQaO+aQ6llzRPH7XcJy5zrpb3wU++045+Uz/IDIM684iw== + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" @@ -12199,6 +13565,16 @@ set-blocking@^2.0.0: resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" @@ -12294,6 +13670,28 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" +sort-asc@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/sort-asc/-/sort-asc-0.2.0.tgz#00a49e947bc25d510bfde2cbb8dffda9f50eb2fc" + integrity sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA== + +sort-desc@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/sort-desc/-/sort-desc-0.2.0.tgz#280c1bdafc6577887cedbad1ed2e41c037976646" + integrity sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w== + +sort-object@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/sort-object/-/sort-object-3.0.3.tgz#945727165f244af9dc596ad4c7605a8dee80c269" + integrity sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ== + dependencies: + bytewise "^1.1.0" + get-value "^2.0.2" + is-extendable "^0.1.1" + sort-asc "^0.2.0" + sort-desc "^0.2.0" + union-value "^1.0.1" + source-list-map@^2.0.0, source-list-map@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" @@ -12392,6 +13790,13 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" +split-string@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" @@ -12578,7 +13983,7 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strnum@^1.0.4: +strnum@^1.0.4, strnum@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz" integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== @@ -12660,6 +14065,13 @@ supercluster@^7.1.0: dependencies: kdbush "^3.0.0" +supercluster@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-8.0.1.tgz#9946ba123538e9e9ab15de472531f604e7372df5" + integrity sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ== + dependencies: + kdbush "^4.0.2" + supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -12931,6 +14343,11 @@ tr46@~0.0.3: resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +traverse@~0.6.6: + version "0.6.7" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe" + integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg== + trim-newlines@^4.0.2: version "4.1.1" resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz" @@ -13060,6 +14477,18 @@ typescript@4.4.4: resolved "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz" integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== +typewise-core@^1.2, typewise-core@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" + integrity sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg== + +typewise@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typewise/-/typewise-1.0.3.tgz#1067936540af97937cc5dcf9922486e9fa284651" + integrity sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ== + dependencies: + typewise-core "^1.2.0" + ulid@2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/ulid/-/ulid-2.3.0.tgz" @@ -13103,6 +14532,16 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +union-value@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + unique-string@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" @@ -13291,7 +14730,7 @@ vary@~1.1.2: resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vt-pbf@^3.1.1: +vt-pbf@^3.1.1, vt-pbf@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz" integrity sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA== @@ -13491,6 +14930,11 @@ weekstart@^1.1.0: resolved "https://registry.npmjs.org/weekstart/-/weekstart-1.1.0.tgz" integrity sha512-ZO3I7c7J9nwGN1PZKZeBYAsuwWEsCOZi5T68cQoVNYrzrpp5Br0Bgi0OF4l8kH/Ez7nKfxa5mSsXjsgris3+qg== +wgs84@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/wgs84/-/wgs84-0.0.0.tgz#34fdc555917b6e57cf2a282ed043710c049cdc76" + integrity sha512-ANHlY4Rb5kHw40D0NJ6moaVfOCMrp9Gpd1R/AIQYg2ko4/jzcJ+TVXYYF6kXJqQwITvEZP4yEthjM7U6rYlljQ== + whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz" @@ -13826,7 +15270,7 @@ xstate@^4.30.6: resolved "https://registry.npmjs.org/xstate/-/xstate-4.37.1.tgz" integrity sha512-MuB7s01nV5vG2CzaBg2msXLGz7JuS+x/NBkQuZAwgEYCnWA8iQMiRz2VGxD3pcFjZAOih3fOgDD3kDaFInEx+g== -xtend@^4.0.0, xtend@^4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2: version "4.0.2" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== From dbc895aea1d442d5fc7d4aadeb4ee5bfa7e12937 Mon Sep 17 00:00:00 2001 From: Archie Cowan Date: Thu, 1 Jun 2023 14:32:36 +0000 Subject: [PATCH 02/13] next batch of updates --- web/src/FedAuth/VAMSAuth.tsx | 25 +++---- .../interactive/MapLocationSelector.tsx | 6 +- .../components/single/ControlledMetadata.tsx | 67 +++++++++++++++++-- web/src/pages/AssetUpload.tsx | 3 +- web/src/pages/MetadataSchema.tsx | 13 +++- 5 files changed, 94 insertions(+), 20 deletions(-) diff --git a/web/src/FedAuth/VAMSAuth.tsx b/web/src/FedAuth/VAMSAuth.tsx index 666ac86a..1b68f233 100644 --- a/web/src/FedAuth/VAMSAuth.tsx +++ b/web/src/FedAuth/VAMSAuth.tsx @@ -113,27 +113,28 @@ function configureAmplify(config: Config, setAmpInit: (x: boolean) => void) { geo: { AmazonLocationService: { maps: { - items: { - "vams-map-raster": { // REQUIRED - Amazon Location Service Map resource name - style: "RasterEsriImagery", // REQUIRED - String representing the style of map resource + items: { + "vams-map-raster": { + // REQUIRED - Amazon Location Service Map resource name + style: "RasterEsriImagery", // REQUIRED - String representing the style of map resource + }, + "vams-map-streets": { + style: "VectorEsriStreets", + }, }, - "vams-map-streets": { - style: "VectorEsriStreets" - } - }, - default: "vams-map-raster", // REQUIRED - Amazon Location Service Map resource name to set as default + default: "vams-map-raster", // REQUIRED - Amazon Location Service Map resource name to set as default }, search_indices: { - items: ["vams-index"], // REQUIRED - Amazon Location Service Place Index name - default: "vams-index", // REQUIRED - Amazon Location Service Place Index name to set as default + items: ["vams-index"], // REQUIRED - Amazon Location Service Place Index name + default: "vams-index", // REQUIRED - Amazon Location Service Place Index name to set as default }, // geofenceCollections: { // items: ["XXXXXXXXX", "XXXXXXXXX"], // REQUIRED - Amazon Location Service Geofence Collection name // default: "XXXXXXXXX", // REQUIRED - Amazon Location Service Geofence Collection name to set as default // }, region: config.region, // REQUIRED - Amazon Location Service Region - }, - } + }, + }, }); setAmpInit(true); diff --git a/web/src/components/interactive/MapLocationSelector.tsx b/web/src/components/interactive/MapLocationSelector.tsx index 64fc33c6..4f5030a1 100644 --- a/web/src/components/interactive/MapLocationSelector.tsx +++ b/web/src/components/interactive/MapLocationSelector.tsx @@ -53,12 +53,14 @@ interface MapLocationSelectorModalProps { location: [number, number] | null; setLocation: (loc: [number, number], zoom: number) => void; initialZoom: number; + disabled: boolean; } export default function MapLocationSelectorModal({ location, setLocation, initialZoom, + disabled, }: MapLocationSelectorModalProps) { const [open, setOpen] = useState(false); @@ -94,7 +96,9 @@ export default function MapLocationSelectorModal({ )) || ( <> {ll && `${ll.lng}, ${ll.lat}`} - + ) ); diff --git a/web/src/components/single/ControlledMetadata.tsx b/web/src/components/single/ControlledMetadata.tsx index 9b4c4203..fc2e3eca 100644 --- a/web/src/components/single/ControlledMetadata.tsx +++ b/web/src/components/single/ControlledMetadata.tsx @@ -2,7 +2,7 @@ import { useEffect, useState } from "react"; import { SchemaContextData } from "../../pages/MetadataSchema"; import { API, Storage } from "aws-amplify"; import Papa, { ParseRemoteConfig } from "papaparse"; -import { Grid, Input, Select } from "@cloudscape-design/components"; +import { Checkbox, DatePicker, Grid, Input, Select, Textarea } from "@cloudscape-design/components"; import MapLocationSelectorModal from "../interactive/MapLocationSelector"; import React from "react"; @@ -44,18 +44,30 @@ function EditComp({ schema, controlData, }: EditCompProps) { + const disabled = !item.dependsOn.every((x: string) => metadata[x] && metadata[x] !== ""); + if (item.type === "string") { return ( { setValue(event.detail.value); }} /> ); } + + if (item.type === "textarea") { + return ( + + + + , + "container":
+ + + +
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; diff --git a/web/src/components/metadata/cities.metadata.test.csv b/web/src/components/metadata/cities.metadata.test.csv new file mode 100644 index 00000000..fc132dad --- /dev/null +++ b/web/src/components/metadata/cities.metadata.test.csv @@ -0,0 +1,499 @@ +id,name,state_id,state_code,state_name,country_id,country_code,country_name,latitude,longitude,wikiDataId +63085,"Washington Gardens",3751,02,"Saint Andrew",108,JM,Jamaica,18.02174000,-76.84020000,Q1651059 +81809,"Brgy. Mabilo New Washington",1336,ANT,Antique,174,PH,Philippines,11.67778000,122.40750000,Q31511059 +83813,"New Washington",1336,ANT,Antique,174,PH,Philippines,11.65080000,122.43220000,Q626992 +51763,Washington,2336,ENG,England,232,GB,"United Kingdom",54.90000000,-1.51667000,Q1018448 +128552,"Washington County",1456,AL,Alabama,233,US,"United States",31.40760000,-88.20788000,Q501157 +128553,"Washington County",1444,AR,Arkansas,233,US,"United States",35.97907000,-94.21558000,Q61148 +128577,"Washington County",1450,CO,Colorado,233,US,"United States",39.97106000,-103.20125000,Q312487 +128545,Washington,1435,CT,Connecticut,233,US,"United States",41.63148000,-73.31067000,Q2446223 +128587,"Washington D.C.",1437,DC,"District of Columbia",233,US,"United States",38.89511000,-77.03637000,Q61 +128554,"Washington County",1436,FL,Florida,233,US,"United States",30.61059000,-85.66533000,Q263418 +128584,"Washington Park",1436,FL,Florida,233,US,"United States",26.13259000,-80.18116000,Q1850315 +128539,Washington,1455,GA,Georgia,233,US,"United States",33.73679000,-82.73931000,Q166186 +128555,"Washington County",1455,GA,Georgia,233,US,"United States",32.96954000,-82.79590000,Q498286 +128579,"Washington County",1460,ID,Idaho,233,US,"United States",44.45243000,-116.78477000,Q486040 +128546,Washington,1425,IL,Illinois,233,US,"United States",40.70365000,-89.40731000,Q575163 +128556,"Washington County",1425,IL,Illinois,233,US,"United States",38.35217000,-89.41045000,Q486486 +128585,"Washington Park",1425,IL,Illinois,233,US,"United States",38.63505000,-90.09289000,Q2185623 +128538,Washington,1440,IN,Indiana,233,US,"United States",38.65922000,-87.17279000,Q1999182 +128557,"Washington County",1440,IN,Indiana,233,US,"United States",38.59998000,-86.10531000,Q304671 +128542,Washington,1459,IA,Iowa,233,US,"United States",41.29918000,-91.69294000,Q989456 +128568,"Washington County",1459,IA,Iowa,233,US,"United States",41.33559000,-91.71787000,Q386189 +128537,Washington,1406,KS,Kansas,233,US,"United States",39.81806000,-97.05086000,Q2184036 +128558,"Washington County",1406,KS,Kansas,233,US,"United States",39.78420000,-97.08754000,Q373886 +122406,"Mount Washington",1419,KY,Kentucky,233,US,"United States",38.05006000,-85.54579000,Q2667318 +128559,"Washington County",1419,KY,Kentucky,233,US,"United States",37.75338000,-85.17475000,Q502929 +128583,"Washington Parish",1457,LA,Louisiana,233,US,"United States",30.85334000,-90.04052000,Q506907 +128547,Washington,1453,ME,Maine,233,US,"United States",44.27369000,-69.36727000,Q3448011 +128569,"Washington County",1453,ME,Maine,233,US,"United States",44.96946000,-67.60906000,Q507256 +116761,"Fort Washington",1401,MD,Maryland,233,US,"United States",38.70734000,-77.02303000,Q754010 +128560,"Washington County",1401,MD,Maryland,233,US,"United States",39.60367000,-77.81398000,Q511164 +128570,"Washington County",1420,MN,Minnesota,233,US,"United States",45.03873000,-92.88396000,Q485408 +128562,"Washington County",1430,MS,Mississippi,233,US,"United States",33.28370000,-90.94745000,Q484643 +128540,Washington,1451,MO,Missouri,233,US,"United States",38.55811000,-91.01209000,Q761885 +128561,"Washington County",1451,MO,Missouri,233,US,"United States",37.96168000,-90.87742000,Q496486 +128571,"Washington County",1408,NE,Nebraska,233,US,"United States",41.53104000,-96.22203000,Q495979 +128548,Washington,1417,NJ,"New Jersey",233,US,"United States",40.75843000,-74.97934000,Q1088831 +124539,"Port Washington",1452,NY,"New York",233,US,"United States",40.82566000,-73.69819000,Q1399190 +124541,"Port Washington North",1452,NY,"New York",233,US,"United States",40.84482000,-73.70180000,Q3449237 +128572,"Washington County",1452,NY,"New York",233,US,"United States",43.31370000,-73.43076000,Q56149 +128581,"Washington Heights",1452,NY,"New York",233,US,"United States",40.85010000,-73.93541000,Q1370292 +128582,"Washington Mills",1452,NY,"New York",233,US,"United States",43.05007000,-75.27294000,Q6166496 +128588,Washingtonville,1452,NY,"New York",233,US,"United States",41.42787000,-74.16598000,Q3451795 +128541,Washington,1447,NC,"North Carolina",233,US,"United States",35.54655000,-77.05217000,Q1026008 +128563,"Washington County",1447,NC,"North Carolina",233,US,"United States",35.83887000,-76.56868000,Q507587 +141793,"Washington County",4851,OH,Ohio,233,US,"United States",39.45532000,-81.49525000,Q489571 +141794,"Washington Court House",4851,OH,Ohio,233,US,"United States",39.53645000,-83.43908000,Q2203766 +128564,"Washington County",1421,OK,Oklahoma,233,US,"United States",36.71524000,-95.90437000,Q489486 +128580,"Washington County",1415,OR,Oregon,233,US,"United States",45.56007000,-123.09849000,Q484538 +115770,"East Washington",1422,PA,Pennsylvania,233,US,"United States",40.17368000,-80.23756000,Q1131763 +116762,"Fort Washington",1422,PA,Pennsylvania,233,US,"United States",40.14178000,-75.20906000,Q1133576 +128549,Washington,1422,PA,Pennsylvania,233,US,"United States",40.17396000,-80.24617000,Q594697 +128573,"Washington County",1422,PA,Pennsylvania,233,US,"United States",40.18940000,-80.24824000,Q497200 +128574,"Washington County",1461,RI,"Rhode Island",233,US,"United States",41.39649000,-71.61966000,Q54258 +128565,"Washington County",1454,TN,Tennessee,233,US,"United States",36.29330000,-82.49743000,Q495037 +128566,"Washington County",1407,TX,Texas,233,US,"United States",30.21453000,-96.40344000,Q156444 +128551,Washington,1414,UT,Utah,233,US,"United States",37.13054000,-113.50829000,Q482386 +128578,"Washington County",1414,UT,Utah,233,US,"United States",37.28036000,-113.50494000,Q27240 +128586,"Washington Terrace",1414,UT,Utah,233,US,"United States",41.17272000,-111.97661000,Q483256 +128550,Washington,1409,VT,Vermont,233,US,"United States",44.10562000,-72.43260000,Q2349496 +128575,"Washington County",1409,VT,Vermont,233,US,"United States",44.27342000,-72.61490000,Q505380 +128543,Washington,1427,VA,Virginia,233,US,"United States",38.71345000,-78.15944000,Q1373453 +128567,"Washington County",1427,VA,Virginia,233,US,"United States",36.72448000,-81.95966000,Q510915 +110979,Aberdeen,1462,WA,Washington,233,US,"United States",46.97537000,-123.81572000,Q233808 +111027,"Adams County",1462,WA,Washington,233,US,"United States",46.98338000,-118.56050000,Q156273 +111063,Ahtanum,1462,WA,Washington,233,US,"United States",46.55957000,-120.62201000,Q1510200 +111072,"Airway Heights",1462,WA,Washington,233,US,"United States",47.64461000,-117.59327000,Q1502110 +111138,Alderton,1462,WA,Washington,233,US,"United States",47.16955000,-122.22928000,Q4713761 +111139,"Alderwood Manor",1462,WA,Washington,233,US,"United States",47.82204000,-122.28207000,Q1515783 +111164,Algona,1462,WA,Washington,233,US,"United States",47.27899000,-122.25206000,Q514836 +111205,Allyn,1462,WA,Washington,233,US,"United States",47.38565000,-122.82764000,Q3473472 +111266,Amboy,1462,WA,Washington,233,US,"United States",45.91011000,-122.44649000,Q1515830 +111278,"Ames Lake",1462,WA,Washington,233,US,"United States",47.63288000,-121.96623000,Q1508298 +111297,Anacortes,1462,WA,Washington,233,US,"United States",48.51260000,-122.61267000,Q483595 +111470,Arlington,1462,WA,Washington,233,US,"United States",48.19871000,-122.12514000,Q1055866 +111474,"Arlington Heights",1462,WA,Washington,233,US,"United States",48.20205000,-122.06208000,Q1509600 +111501,Artondale,1462,WA,Washington,233,US,"United States",47.29954000,-122.62069000,Q1508649 +111550,Asotin,1462,WA,Washington,233,US,"United States",46.33933000,-117.04821000,Q168884 +111551,"Asotin County",1462,WA,Washington,233,US,"United States",46.19186000,-117.20307000,Q156295 +111632,Auburn,1462,WA,Washington,233,US,"United States",47.30732000,-122.22845000,Q661595 +111654,"Ault Field",1462,WA,Washington,233,US,"United States",48.33812000,-122.67441000,Q1512908 +111735,"Bainbridge Island",1462,WA,Washington,233,US,"United States",47.62621000,-122.52124000,Q803903 +111795,"Bangor Trident Base",1462,WA,Washington,233,US,"United States",47.72274000,-122.71446000,Q2042744 +111813,Barberton,1462,WA,Washington,233,US,"United States",45.69317000,-122.59899000,Q1508146 +111879,"Basin City",1462,WA,Washington,233,US,"United States",46.59403000,-119.15223000,Q1512951 +111907,"Battle Ground",1462,WA,Washington,233,US,"United States",45.78095000,-122.53343000,Q810999 +112055,Belfair,1462,WA,Washington,233,US,"United States",47.45065000,-122.82737000,Q3473233 +112117,Bellevue,1462,WA,Washington,233,US,"United States",47.61038000,-122.20068000,Q214164 +112120,Bellingham,1462,WA,Washington,233,US,"United States",48.75955000,-122.48822000,Q430267 +112198,"Benton City",1462,WA,Washington,233,US,"United States",46.26319000,-119.48780000,Q1504090 +112207,"Benton County",1462,WA,Washington,233,US,"United States",46.23978000,-119.51120000,Q156216 +112282,Bethel,1462,WA,Washington,233,US,"United States",47.49398000,-122.63125000,Q3473652 +112326,"Big Lake",1462,WA,Washington,233,US,"United States",48.40288000,-122.24127000,Q1509489 +112353,"Birch Bay",1462,WA,Washington,233,US,"United States",48.91789000,-122.74462000,Q1508497 +112374,"Black Diamond",1462,WA,Washington,233,US,"United States",47.30871000,-122.00317000,Q1191152 +112404,Blaine,1462,WA,Washington,233,US,"United States",48.99372000,-122.74712000,Q1144380 +112547,"Bonney Lake",1462,WA,Washington,233,US,"United States",47.17705000,-122.18651000,Q657810 +112595,Bothell,1462,WA,Washington,233,US,"United States",47.76232000,-122.20540000,Q303046 +112596,"Bothell East",1462,WA,Washington,233,US,"United States",47.80631000,-122.18427000,Q5732721 +112597,"Bothell West",1462,WA,Washington,233,US,"United States",47.80527000,-122.24064000,Q5732724 +112607,"Boulevard Park",1462,WA,Washington,233,US,"United States",47.48927000,-122.31512000,Q5732835 +112723,Bremerton,1462,WA,Washington,233,US,"United States",47.56732000,-122.63264000,Q695417 +112744,Brewster,1462,WA,Washington,233,US,"United States",48.09598000,-119.78062000,Q1506880 +112768,Bridgeport,1462,WA,Washington,233,US,"United States",48.00820000,-119.67116000,Q2266356 +112782,Brier,1462,WA,Washington,233,US,"United States",47.78454000,-122.27429000,Q1515537 +112922,"Browns Point",1462,WA,Washington,233,US,"United States",47.30038000,-122.44124000,Q4976674 +112955,"Brush Prairie",1462,WA,Washington,233,US,"United States",45.73289000,-122.54649000,Q1502728 +112964,Bryant,1462,WA,Washington,233,US,"United States",48.23899000,-122.15792000,Q4980536 +112967,"Bryn Mawr-Skyway",1462,WA,Washington,233,US,"United States",47.49430000,-122.24092000,Q1508150 +112988,Buckley,1462,WA,Washington,233,US,"United States",47.16316000,-122.02678000,Q1363158 +113039,"Bunk Foss",1462,WA,Washington,233,US,"United States",47.96171000,-122.09441000,Q5735636 +113048,Burbank,1462,WA,Washington,233,US,"United States",46.19986000,-119.01306000,Q1505383 +113052,Burien,1462,WA,Washington,233,US,"United States",47.47038000,-122.34679000,Q984825 +113064,Burley,1462,WA,Washington,233,US,"United States",47.41787000,-122.63097000,Q3473799 +113076,Burlington,1462,WA,Washington,233,US,"United States",48.47566000,-122.32544000,Q1144352 +113240,Camano,1462,WA,Washington,233,US,"United States",48.17399000,-122.52821000,Q995020 +113243,Camas,1462,WA,Washington,233,US,"United States",45.58706000,-122.39954000,Q1507709 +113338,Canterwood,1462,WA,Washington,233,US,"United States",47.37510000,-122.58930000,Q2417199 +113424,Carnation,1462,WA,Washington,233,US,"United States",47.64788000,-121.91401000,Q1191413 +113476,Carson,1462,WA,Washington,233,US,"United States",45.72539000,-121.81924000,Q390526 +113517,"Cascade Valley",1462,WA,Washington,233,US,"United States",47.13459000,-119.32808000,Q1502511 +113522,Cashmere,1462,WA,Washington,233,US,"United States",47.52235000,-120.46980000,Q1207471 +113550,"Castle Rock",1462,WA,Washington,233,US,"United States",46.27511000,-122.90761000,Q1023555 +113569,Cathcart,1462,WA,Washington,233,US,"United States",47.84788000,-122.09929000,Q1508281 +113571,Cathlamet,1462,WA,Washington,233,US,"United States",46.20317000,-123.38318000,Q168854 +113679,"Central Park",1462,WA,Washington,233,US,"United States",46.97343000,-123.69239000,Q1504159 +113687,Centralia,1462,WA,Washington,233,US,"United States",46.71621000,-122.95430000,Q868700 +113825,Chehalis,1462,WA,Washington,233,US,"United States",46.66205000,-122.96402000,Q249441 +113826,Chelan,1462,WA,Washington,233,US,"United States",47.84097000,-120.01646000,Q1207462 +113827,"Chelan County",1462,WA,Washington,233,US,"United States",47.86910000,-120.61891000,Q493236 +113840,Cheney,1462,WA,Washington,233,US,"United States",47.48739000,-117.57576000,Q1065488 +113924,Chewelah,1462,WA,Washington,233,US,"United States",48.27629000,-117.71552000,Q1515809 +113944,Chico,1462,WA,Washington,233,US,"United States",47.61148000,-122.71042000,Q3473664 +114083,"City of Sammamish",1462,WA,Washington,233,US,"United States",47.60444000,-122.03768000,Q13188841 +114097,"Clallam County",1462,WA,Washington,233,US,"United States",48.11044000,-123.93432000,Q156306 +114131,"Clark County",1462,WA,Washington,233,US,"United States",45.77927000,-122.48259000,Q156287 +114150,Clarkston,1462,WA,Washington,233,US,"United States",46.41629000,-117.04557000,Q980878 +114151,"Clarkston Heights-Vineland",1462,WA,Washington,233,US,"United States",46.38742000,-117.08300000,Q27276 +114207,"Cle Elum",1462,WA,Washington,233,US,"United States",47.19540000,-120.93925000,Q1065481 +114212,"Clear Lake",1462,WA,Washington,233,US,"United States",48.46427000,-122.23404000,Q1515610 +114221,Clearview,1462,WA,Washington,233,US,"United States",47.83371000,-122.12596000,Q5130904 +114321,"Clyde Hill",1462,WA,Washington,233,US,"United States",47.63177000,-122.21790000,Q1505600 +114409,Colfax,1462,WA,Washington,233,US,"United States",46.88017000,-117.36435000,Q1509984 +114415,"College Place",1462,WA,Washington,233,US,"United States",46.04930000,-118.38830000,Q1516159 +114484,"Columbia County",1462,WA,Washington,233,US,"United States",46.29755000,-117.90788000,Q156253 +114506,Colville,1462,WA,Washington,233,US,"United States",48.54657000,-117.90554000,Q2601326 +114561,Connell,1462,WA,Washington,233,US,"United States",46.66347000,-118.86111000,Q1505746 +114685,Cosmopolis,1462,WA,Washington,233,US,"United States",46.95537000,-123.77378000,Q1516226 +114694,"Cottage Lake",1462,WA,Washington,233,US,"United States",47.74427000,-122.07735000,Q1502643 +114710,"Coulee Dam",1462,WA,Washington,233,US,"United States",47.96543000,-118.97613000,Q1507868 +114720,"Country Homes",1462,WA,Washington,233,US,"United States",47.74850000,-117.40439000,Q1510510 +114727,Coupeville,1462,WA,Washington,233,US,"United States",48.21982000,-122.68628000,Q1513976 +114741,Covington,1462,WA,Washington,233,US,"United States",47.35818000,-122.12216000,Q1074503 +114749,"Cowlitz County",1462,WA,Washington,233,US,"United States",46.19329000,-122.68078000,Q156276 +114828,Crocker,1462,WA,Washington,233,US,"United States",47.08091000,-122.10383000,Q953296 +115000,Dallesport,1462,WA,Washington,233,US,"United States",45.61734000,-121.17952000,Q1508422 +115054,Darrington,1462,WA,Washington,233,US,"United States",48.25539000,-121.60151000,Q1507497 +115060,Davenport,1462,WA,Washington,233,US,"United States",47.65405000,-118.14997000,Q1515095 +115101,Dayton,1462,WA,Washington,233,US,"United States",46.32375000,-117.97244000,Q925426 +115179,"Deer Park",1462,WA,Washington,233,US,"United States",47.95434000,-117.47689000,Q1515762 +115272,"Des Moines",1462,WA,Washington,233,US,"United States",47.40177000,-122.32429000,Q163325 +115279,"Desert Aire",1462,WA,Washington,233,US,"United States",46.67930000,-119.91727000,Q2785000 +115354,Dishman,1462,WA,Washington,233,US,"United States",47.66007000,-117.27596000,Q1513007 +115389,"Dollar Corner",1462,WA,Washington,233,US,"United States",45.78012000,-122.60010000,Q1504680 +115436,"Douglas County",1462,WA,Washington,233,US,"United States",47.73607000,-119.69172000,Q156220 +115489,DuPont,1462,WA,Washington,233,US,"United States",47.09676000,-122.63124000,Q128112 +115582,Duvall,1462,WA,Washington,233,US,"United States",47.74232000,-121.98568000,Q1362720 +115691,"East Hill-Meridian",1462,WA,Washington,233,US,"United States",47.41052000,-122.17369000,Q1515580 +115738,"East Port Orchard",1462,WA,Washington,233,US,"United States",47.52343000,-122.62430000,Q1503774 +115745,"East Renton Highlands",1462,WA,Washington,233,US,"United States",47.48482000,-122.11234000,Q1508714 +115771,"East Wenatchee",1462,WA,Washington,233,US,"United States",47.41568000,-120.29313000,Q988279 +115772,"East Wenatchee Bench",1462,WA,Washington,233,US,"United States",47.42568000,-120.28118000,Q1515111 +115777,Eastgate,1462,WA,Washington,233,US,"United States",47.57266000,-122.14578000,Q1508690 +115784,Eastmont,1462,WA,Washington,233,US,"United States",47.89740000,-122.18154000,Q5816770 +115809,Eatonville,1462,WA,Washington,233,US,"United States",46.86733000,-122.26650000,Q1515430 +115864,Edgewood,1462,WA,Washington,233,US,"United States",47.25010000,-122.29373000,Q1508050 +115878,Edmonds,1462,WA,Washington,233,US,"United States",47.81065000,-122.37736000,Q1055845 +115960,"Electric City",1462,WA,Washington,233,US,"United States",47.93237000,-119.03808000,Q1506981 +115989,"Elk Plain",1462,WA,Washington,233,US,"United States",47.05316000,-122.39762000,Q1515942 +116018,Ellensburg,1462,WA,Washington,233,US,"United States",46.99651000,-120.54785000,Q868684 +116046,Elma,1462,WA,Washington,233,US,"United States",47.00343000,-123.40877000,Q610930 +116123,Enetai,1462,WA,Washington,233,US,"United States",47.58482000,-122.59875000,Q16080913 +116152,Entiat,1462,WA,Washington,233,US,"United States",47.67596000,-120.20841000,Q1502048 +116153,Enumclaw,1462,WA,Washington,233,US,"United States",47.20427000,-121.99150000,Q1513207 +116156,Ephrata,1462,WA,Washington,233,US,"United States",47.31764000,-119.55365000,Q1507694 +116171,"Erlands Point-Kitsap Lake",1462,WA,Washington,233,US,"United States",47.59719000,-122.70225000,Q1914933 +116189,Esperance,1462,WA,Washington,233,US,"United States",47.78899000,-122.35541000,Q1509659 +116260,Everett,1462,WA,Washington,233,US,"United States",47.97898000,-122.20208000,Q392599 +116267,Everson,1462,WA,Washington,233,US,"United States",48.92012000,-122.34266000,Q1502658 +116297,"Fairchild Air Force Base",1462,WA,Washington,233,US,"United States",47.61879000,-117.64826000,Q1513045 +116363,Fairwood,1462,WA,Washington,233,US,"United States",47.44843000,-122.15734000,Q1515735 +116371,"Fall City",1462,WA,Washington,233,US,"United States",47.56732000,-121.88873000,Q1514432 +116465,"Federal Way",1462,WA,Washington,233,US,"United States",47.32232000,-122.31262000,Q821112 +116467,Felida,1462,WA,Washington,233,US,"United States",45.70956000,-122.70732000,Q1509896 +116484,"Fern Prairie",1462,WA,Washington,233,US,"United States",45.63651000,-122.39870000,Q5859071 +116490,Ferndale,1462,WA,Washington,233,US,"United States",48.84650000,-122.59101000,Q1502426 +116498,"Ferry County",1462,WA,Washington,233,US,"United States",48.47007000,-118.51649000,Q493228 +116504,Fife,1462,WA,Washington,233,US,"United States",47.23927000,-122.35707000,Q1510211 +116505,"Fife Heights",1462,WA,Washington,233,US,"United States",47.25899000,-122.34568000,Q13634345 +116517,Finley,1462,WA,Washington,233,US,"United States",46.15402000,-119.03390000,Q248754 +116519,Fircrest,1462,WA,Washington,233,US,"United States",47.23954000,-122.51596000,Q1505832 +116538,"Five Corners",1462,WA,Washington,233,US,"United States",45.68456000,-122.57510000,Q1504803 +116617,"Fobes Hill",1462,WA,Washington,233,US,"United States",47.94899000,-122.11985000,Q3475108 +116641,"Fords Prairie",1462,WA,Washington,233,US,"United States",46.73510000,-122.98902000,Q1503498 +116675,Forks,1462,WA,Washington,233,US,"United States",47.95036000,-124.38549000,Q226013 +116802,"Fox Island",1462,WA,Washington,233,US,"United States",47.25149000,-122.62902000,Q1239624 +116865,"Franklin County",1462,WA,Washington,233,US,"United States",46.53477000,-118.89889000,Q118716 +116893,Frederickson,1462,WA,Washington,233,US,"United States",47.09621000,-122.35873000,Q1502544 +116907,Freeland,1462,WA,Washington,233,US,"United States",48.00954000,-122.52598000,Q1508227 +116943,"Friday Harbor",1462,WA,Washington,233,US,"United States",48.53427000,-123.01712000,Q968711 +117087,"Garfield County",1462,WA,Washington,233,US,"United States",46.43156000,-117.54519000,Q695782 +117099,Garrett,1462,WA,Washington,233,US,"United States",46.05208000,-118.40275000,Q1503935 +117145,Geneva,1462,WA,Washington,233,US,"United States",48.74567000,-122.40183000,Q580628 +117199,"Gig Harbor",1462,WA,Washington,233,US,"United States",47.32926000,-122.58013000,Q1011748 +117258,Gleed,1462,WA,Washington,233,US,"United States",46.65818000,-120.61340000,Q1503439 +117339,"Gold Bar",1462,WA,Washington,233,US,"United States",47.85677000,-121.69706000,Q1506914 +117360,Goldendale,1462,WA,Washington,233,US,"United States",45.82068000,-120.82173000,Q999955 +117436,Graham,1462,WA,Washington,233,US,"United States",47.05288000,-122.29428000,Q195843 +117454,"Grand Coulee",1462,WA,Washington,233,US,"United States",47.94154000,-119.00335000,Q1508192 +117469,"Grand Mound",1462,WA,Washington,233,US,"United States",46.78788000,-123.01125000,Q1515664 +117481,Grandview,1462,WA,Washington,233,US,"United States",46.25097000,-119.90170000,Q1074513 +117489,Granger,1462,WA,Washington,233,US,"United States",46.34207000,-120.18727000,Q1503906 +117498,"Granite Falls",1462,WA,Washington,233,US,"United States",48.08399000,-121.96874000,Q1506731 +117521,"Grant County",1462,WA,Washington,233,US,"United States",47.20566000,-119.45177000,Q281681 +117558,"Grays Harbor County",1462,WA,Washington,233,US,"United States",47.14445000,-123.82847000,Q493222 +117980,Hansville,1462,WA,Washington,233,US,"United States",47.91870000,-122.55431000,Q3475424 +118203,"Hazel Dell",1462,WA,Washington,233,US,"United States",45.67151000,-122.66288000,Q3478045 +118399,Highland,1462,WA,Washington,233,US,"United States",46.13152000,-119.11418000,Q248752 +118498,Hobart,1462,WA,Washington,233,US,"United States",47.42177000,-121.97289000,Q1508550 +118504,Hockinson,1462,WA,Washington,233,US,"United States",45.73789000,-122.48704000,Q1509120 +118585,Home,1462,WA,Washington,233,US,"United States",47.27482000,-122.76375000,Q5887905 +118660,Hoquiam,1462,WA,Washington,233,US,"United States",46.98092000,-123.88933000,Q990621 +118927,Indianola,1462,WA,Washington,233,US,"United States",47.74704000,-122.52569000,Q1503701 +118938,"Inglewood-Finn Hill",1462,WA,Washington,233,US,"United States",47.72049000,-122.23167000,Q1508424 +119024,"Island County",1462,WA,Washington,233,US,"United States",48.20820000,-122.66922000,Q493243 +119036,Issaquah,1462,WA,Washington,233,US,"United States",47.53010000,-122.03262000,Q40251 +119198,"Jefferson County",1462,WA,Washington,233,US,"United States",47.77655000,-123.57431000,Q384737 +119287,"Joint Base Lewis McChord",1462,WA,Washington,233,US,"United States",47.10787000,-122.57694000,Q3505731 +119359,Kalama,1462,WA,Washington,233,US,"United States",46.00845000,-122.84455000,Q1516195 +119432,Kelso,1462,WA,Washington,233,US,"United States",46.14678000,-122.90844000,Q868654 +119463,Kenmore,1462,WA,Washington,233,US,"United States",47.75732000,-122.24401000,Q588640 +119475,Kennewick,1462,WA,Washington,233,US,"United States",46.21125000,-119.13723000,Q844033 +119487,Kent,1462,WA,Washington,233,US,"United States",47.38093000,-122.23484000,Q844008 +119527,"Kettle Falls",1462,WA,Washington,233,US,"United States",48.61074000,-118.05582000,Q1508096 +119538,"Key Center",1462,WA,Washington,233,US,"United States",47.34065000,-122.74541000,Q6398025 +119582,"King County",1462,WA,Washington,233,US,"United States",47.49084000,-121.83583000,Q108861 +119614,Kingsgate,1462,WA,Washington,233,US,"United States",47.72704000,-122.17957000,Q1510581 +119630,Kingston,1462,WA,Washington,233,US,"United States",47.79850000,-122.49806000,Q1511364 +119652,Kirkland,1462,WA,Washington,233,US,"United States",47.68149000,-122.20874000,Q936768 +119660,"Kitsap County",1462,WA,Washington,233,US,"United States",47.63983000,-122.64900000,Q484159 +119664,Kittitas,1462,WA,Washington,233,US,"United States",46.98318000,-120.41701000,Q1023547 +119665,"Kittitas County",1462,WA,Washington,233,US,"United States",47.12417000,-120.67972000,Q111540 +119669,Klahanie,1462,WA,Washington,233,US,"United States",47.43121000,-122.43652000,Q3474821 +119673,"Klickitat County",1462,WA,Washington,233,US,"United States",45.87378000,-120.78926000,Q820502 +119738,"La Center",1462,WA,Washington,233,US,"United States",45.86234000,-122.67038000,Q1506592 +119812,Lacey,1462,WA,Washington,233,US,"United States",47.03426000,-122.82319000,Q970086 +119912,"Lake Forest Park",1462,WA,Washington,233,US,"United States",47.75676000,-122.28096000,Q1514977 +119938,"Lake Marcel-Stillwater",1462,WA,Washington,233,US,"United States",47.69263000,-121.91513000,Q1509701 +119948,"Lake Morton-Berrydale",1462,WA,Washington,233,US,"United States",47.33251000,-122.10286000,Q1508433 +119978,"Lake Shore",1462,WA,Washington,233,US,"United States",45.69067000,-122.69093000,Q1508272 +119980,"Lake Stevens",1462,WA,Washington,233,US,"United States",48.01510000,-122.06374000,Q1507935 +119981,"Lake Stickney",1462,WA,Washington,233,US,"United States",47.87655000,-122.26214000,Q1503863 +120018,"Lakeland North",1462,WA,Washington,233,US,"United States",47.33343000,-122.27695000,Q1503763 +120019,"Lakeland South",1462,WA,Washington,233,US,"United States",47.27843000,-122.28326000,Q1514910 +120052,Lakewood,1462,WA,Washington,233,US,"United States",47.17176000,-122.51846000,Q983791 +120114,Langley,1462,WA,Washington,233,US,"United States",48.04009000,-122.40626000,Q1011590 +120140,"Larch Way",1462,WA,Washington,233,US,"United States",47.84290000,-122.25275000,Q483982 +120268,"Lea Hill",1462,WA,Washington,233,US,"United States",47.32621000,-122.18151000,Q1510245 +120281,Leavenworth,1462,WA,Washington,233,US,"United States",47.59623000,-120.66148000,Q1025813 +120417,"Lewis County",1462,WA,Washington,233,US,"United States",46.57773000,-122.39241000,Q483950 +120437,Lewisville,1462,WA,Washington,233,US,"United States",45.80984000,-122.52315000,Q1503144 +120475,"Liberty Lake",1462,WA,Washington,233,US,"United States",47.67591000,-117.11821000,Q916956 +120537,"Lincoln County",1462,WA,Washington,233,US,"United States",47.57619000,-118.41879000,Q484150 +120673,Lochsloy,1462,WA,Washington,233,US,"United States",48.05149000,-122.03208000,Q1503733 +120692,Lofall,1462,WA,Washington,233,US,"United States",47.81204000,-122.65821000,Q16108520 +120739,"Long Beach",1462,WA,Washington,233,US,"United States",46.35232000,-124.05432000,Q1008919 +120752,Longbranch,1462,WA,Washington,233,US,"United States",47.20898000,-122.75680000,Q5978718 +120758,Longview,1462,WA,Washington,233,US,"United States",46.13817000,-122.93817000,Q983801 +120759,"Longview Heights",1462,WA,Washington,233,US,"United States",46.18039000,-122.95706000,Q1503669 +120919,Lynden,1462,WA,Washington,233,US,"United States",48.94650000,-122.45211000,Q1507840 +120931,Lynnwood,1462,WA,Washington,233,US,"United States",47.82093000,-122.31513000,Q852607 +120951,Mabton,1462,WA,Washington,233,US,"United States",46.21485000,-119.99671000,Q1514937 +120957,Machias,1462,WA,Washington,233,US,"United States",47.98149000,-122.04596000,Q964649 +121069,Maltby,1462,WA,Washington,233,US,"United States",47.80510000,-122.11318000,Q1508441 +121102,Manchester,1462,WA,Washington,233,US,"United States",47.55566000,-122.54507000,Q1502741 +121151,Manson,1462,WA,Washington,233,US,"United States",47.88486000,-120.15841000,Q5991830 +121168,"Maple Heights-Lake Desire",1462,WA,Washington,233,US,"United States",47.44413000,-122.09736000,Q282443 +121173,"Maple Valley",1462,WA,Washington,233,US,"United States",47.39272000,-122.04641000,Q988204 +121180,Maplewood,1462,WA,Washington,233,US,"United States",47.40176000,-122.55707000,Q6754097 +121219,Marietta,1462,WA,Washington,233,US,"United States",48.78705000,-122.58045000,Q1186711 +121220,Marietta-Alderwood,1462,WA,Washington,233,US,"United States",48.78965000,-122.55369000,Q1508396 +121333,"Martha Lake",1462,WA,Washington,233,US,"United States",47.85093000,-122.23930000,Q588153 +121361,Marysville,1462,WA,Washington,233,US,"United States",48.05176000,-122.17708000,Q970001 +121382,"Mason County",1462,WA,Washington,233,US,"United States",47.35048000,-123.18309000,Q111904 +121409,Mattawa,1462,WA,Washington,233,US,"United States",46.73791000,-119.90282000,Q1505535 +121468,"McChord Air Force Base",1462,WA,Washington,233,US,"United States",47.13397000,-122.49157000,Q3261090 +121470,McCleary,1462,WA,Washington,233,US,"United States",47.05315000,-123.26543000,Q771582 +121538,McMillin,1462,WA,Washington,233,US,"United States",47.13982000,-122.23651000,Q2409406 +121553,Mead,1462,WA,Washington,233,US,"United States",47.76739000,-117.35494000,Q6008135 +121559,"Meadow Glade",1462,WA,Washington,233,US,"United States",45.75845000,-122.56038000,Q1512965 +121568,Meadowdale,1462,WA,Washington,233,US,"United States",47.85287000,-122.33347000,Q6803319 +121600,"Medical Lake",1462,WA,Washington,233,US,"United States",47.57294000,-117.68216000,Q1506243 +121606,Medina,1462,WA,Washington,233,US,"United States",47.62093000,-122.22762000,Q1506847 +121682,"Mercer Island",1462,WA,Washington,233,US,"United States",47.57065000,-122.22207000,Q954095 +121801,Midland,1462,WA,Washington,233,US,"United States",47.16704000,-122.40484000,Q1508513 +121863,"Mill Creek",1462,WA,Washington,233,US,"United States",47.86010000,-122.20430000,Q1508016 +121864,"Mill Creek East",1462,WA,Washington,233,US,"United States",47.83602000,-122.18766000,Q1508016 +121867,"Mill Plain",1462,WA,Washington,233,US,"United States",45.64290000,-122.49398000,Q1505203 +121907,Millwood,1462,WA,Washington,233,US,"United States",47.68128000,-117.28271000,Q1505556 +121921,Milton,1462,WA,Washington,233,US,"United States",47.24816000,-122.31290000,Q1516205 +121952,Minnehaha,1462,WA,Washington,233,US,"United States",45.65901000,-122.64871000,Q1503381 +121975,Mirrormont,1462,WA,Washington,233,US,"United States",47.46232000,-121.99567000,Q1512767 +122065,Monroe,1462,WA,Washington,233,US,"United States",47.85538000,-121.97096000,Q1055861 +122083,"Monroe North",1462,WA,Washington,233,US,"United States",47.88225000,-121.98729000,Q932966 +122124,Montesano,1462,WA,Washington,233,US,"United States",46.98121000,-123.60266000,Q987133 +122295,Morton,1462,WA,Washington,233,US,"United States",46.55844000,-122.27510000,Q1023524 +122302,"Moses Lake",1462,WA,Washington,233,US,"United States",47.13014000,-119.27808000,Q1065526 +122303,"Moses Lake North",1462,WA,Washington,233,US,"United States",47.19433000,-119.31719000,Q1503090 +122403,"Mount Vernon",1462,WA,Washington,233,US,"United States",48.42122000,-122.33405000,Q866311 +122405,"Mount Vista",1462,WA,Washington,233,US,"United States",45.73428000,-122.63288000,Q1515157 +122439,"Mountlake Terrace",1462,WA,Washington,233,US,"United States",47.78815000,-122.30874000,Q1507087 +122450,Mukilteo,1462,WA,Washington,233,US,"United States",47.94454000,-122.30458000,Q1507307 +122549,Napavine,1462,WA,Washington,233,US,"United States",46.57455000,-122.90818000,Q1510290 +122605,"Navy Yard City",1462,WA,Washington,233,US,"United States",47.55343000,-122.66458000,Q1510771 +122823,Newcastle,1462,WA,Washington,233,US,"United States",47.53899000,-122.15568000,Q1502408 +122852,Newport,1462,WA,Washington,233,US,"United States",48.17963000,-117.04326000,Q1514137 +122936,Nooksack,1462,WA,Washington,233,US,"United States",48.92762000,-122.32155000,Q1501955 +122952,"Normandy Park",1462,WA,Washington,233,US,"United States",47.43621000,-122.34068000,Q1502377 +122985,"North Bend",1462,WA,Washington,233,US,"United States",47.49566000,-121.78678000,Q301889 +123011,"North Creek",1462,WA,Washington,233,US,"United States",47.81954000,-122.17624000,Q1510602 +123028,"North Fort Lewis",1462,WA,Washington,233,US,"United States",47.12131000,-122.59452000,Q2448931 +123090,"North Puyallup",1462,WA,Washington,233,US,"United States",47.20677000,-122.28234000,Q1625652 +123132,"North Yelm",1462,WA,Washington,233,US,"United States",46.96315000,-122.60290000,Q1502791 +123242,"Oak Harbor",1462,WA,Washington,233,US,"United States",48.29316000,-122.64322000,Q990977 +123332,"Ocean Park",1462,WA,Washington,233,US,"United States",46.49177000,-124.05208000,Q1503888 +123336,"Ocean Shores",1462,WA,Washington,233,US,"United States",46.97370000,-124.15629000,Q423697 +123393,Okanogan,1462,WA,Washington,233,US,"United States",48.36126000,-119.58339000,Q1511988 +123394,"Okanogan County",1462,WA,Washington,233,US,"United States",48.54885000,-119.74079000,Q483958 +123459,Olympia,1462,WA,Washington,233,US,"United States",47.03787000,-122.90070000,Q42735 +123464,Omak,1462,WA,Washington,233,US,"United States",48.41099000,-119.52755000,Q1509671 +123499,Opportunity,1462,WA,Washington,233,US,"United States",47.64995000,-117.23991000,Q1510586 +123539,Orchards,1462,WA,Washington,233,US,"United States",45.66651000,-122.56093000,Q949185 +123579,Oroville,1462,WA,Washington,233,US,"United States",48.93905000,-119.43562000,Q1017586 +123582,Orting,1462,WA,Washington,233,US,"United States",47.09788000,-122.20428000,Q1515932 +123627,Othello,1462,WA,Washington,233,US,"United States",46.82597000,-119.17529000,Q1510263 +123629,"Otis Orchards-East Farms",1462,WA,Washington,233,US,"United States",47.70988000,-117.07975000,Q1513089 +123707,Pacific,1462,WA,Washington,233,US,"United States",47.26455000,-122.25012000,Q1506861 +123709,"Pacific County",1462,WA,Washington,233,US,"United States",46.55128000,-123.77886000,Q483990 +123792,Palouse,1462,WA,Washington,233,US,"United States",46.91017000,-117.07573000,Q1501870 +123872,Parkland,1462,WA,Washington,233,US,"United States",47.15538000,-122.43401000,Q210565 +123883,Parkwood,1462,WA,Washington,233,US,"United States",47.53315000,-122.61014000,Q1502856 +123901,Pasco,1462,WA,Washington,233,US,"United States",46.23958000,-119.10057000,Q844016 +123955,"Peaceful Valley",1462,WA,Washington,233,US,"United States",48.93815000,-122.14733000,Q1503286 +124013,"Pend Oreille County",1462,WA,Washington,233,US,"United States",48.53230000,-117.27397000,Q485301 +124160,"Picnic Point",1462,WA,Washington,233,US,"United States",47.88111000,-122.32840000,Q494776 +124161,"Picnic Point-North Lynnwood",1462,WA,Washington,233,US,"United States",47.86278000,-122.29497000,Q1503678 +124175,"Pierce County",1462,WA,Washington,233,US,"United States",47.03764000,-122.13735000,Q156459 +124433,"Point Roberts",1462,WA,Washington,233,US,"United States",48.98538000,-123.07797000,Q1203794 +124456,Pomeroy,1462,WA,Washington,233,US,"United States",46.47487000,-117.60269000,Q1148057 +124493,"Port Angeles",1462,WA,Washington,233,US,"United States",48.11815000,-123.43074000,Q852584 +124494,"Port Angeles East",1462,WA,Washington,233,US,"United States",48.10667000,-123.37172000,Q1504974 +124508,"Port Hadlock-Irondale",1462,WA,Washington,233,US,"United States",48.03273000,-122.78529000,Q1508181 +124518,"Port Ludlow",1462,WA,Washington,233,US,"United States",47.92537000,-122.68349000,Q1514660 +124525,"Port Orchard",1462,WA,Washington,233,US,"United States",47.54037000,-122.63625000,Q935482 +124537,"Port Townsend",1462,WA,Washington,233,US,"United States",48.11704000,-122.76045000,Q1001828 +124603,Poulsbo,1462,WA,Washington,233,US,"United States",47.73593000,-122.64654000,Q1509552 +124629,"Prairie Heights",1462,WA,Washington,233,US,"United States",47.14933000,-122.10530000,Q2257106 +124630,"Prairie Ridge",1462,WA,Washington,233,US,"United States",47.13760000,-122.14873000,Q1508577 +124714,Prosser,1462,WA,Washington,233,US,"United States",46.20680000,-119.76892000,Q543792 +124744,Pullman,1462,WA,Washington,233,US,"United States",46.73127000,-117.17962000,Q983540 +124757,Purdy,1462,WA,Washington,233,US,"United States",47.38899000,-122.62541000,Q597332 +124771,Puyallup,1462,WA,Washington,233,US,"United States",47.18538000,-122.29290000,Q179336 +124800,Quincy,1462,WA,Washington,233,US,"United States",47.23430000,-119.85255000,Q1514833 +124827,Rainier,1462,WA,Washington,233,US,"United States",46.88815000,-122.68846000,Q1502285 +124909,Ravensdale,1462,WA,Washington,233,US,"United States",47.35232000,-121.98373000,Q1503082 +124920,Raymond,1462,WA,Washington,233,US,"United States",46.68649000,-123.73294000,Q1510374 +124979,Redmond,1462,WA,Washington,233,US,"United States",47.67399000,-122.12151000,Q223718 +125026,Renton,1462,WA,Washington,233,US,"United States",47.48288000,-122.21707000,Q679952 +125032,Republic,1462,WA,Washington,233,US,"United States",48.64822000,-118.73781000,Q1006641 +125072,Richland,1462,WA,Washington,233,US,"United States",46.28569000,-119.28446000,Q693638 +125121,Ridgefield,1462,WA,Washington,233,US,"United States",45.81511000,-122.74260000,Q1505990 +125174,Ritzville,1462,WA,Washington,233,US,"United States",47.12755000,-118.37999000,Q1512748 +125191,Riverbend,1462,WA,Washington,233,US,"United States",47.46649000,-121.75039000,Q1502634 +125213,Riverton,1462,WA,Washington,233,US,"United States",47.48427000,-122.29457000,Q280560 +125270,Rochester,1462,WA,Washington,233,US,"United States",46.82177000,-123.09625000,Q1505161 +125339,"Rocky Point",1462,WA,Washington,233,US,"United States",47.59287000,-122.66848000,Q3459765 +125420,Rosedale,1462,WA,Washington,233,US,"United States",47.33149000,-122.65235000,Q2267331 +125488,"Royal City",1462,WA,Washington,233,US,"United States",46.90097000,-119.63059000,Q2601009 +125765,"Salmon Creek",1462,WA,Washington,233,US,"United States",45.71067000,-122.64899000,Q1510736 +125778,Sammamish,1462,WA,Washington,233,US,"United States",47.64177000,-122.08040000,Q988209 +125823,"San Juan County",1462,WA,Washington,233,US,"United States",48.53116000,-123.02490000,Q484146 +126077,Seabeck,1462,WA,Washington,233,US,"United States",47.63954000,-122.82849000,Q5404291 +126076,SeaTac,1462,WA,Washington,233,US,"United States",47.44846000,-122.29217000,Q985072 +126104,Seattle,1462,WA,Washington,233,US,"United States",47.60621000,-122.33207000,Q5083 +126122,Sedro-Woolley,1462,WA,Washington,233,US,"United States",48.50389000,-122.23611000,Q1502468 +126129,Selah,1462,WA,Washington,233,US,"United States",46.65402000,-120.53007000,Q947107 +126164,Sequim,1462,WA,Washington,233,US,"United States",48.07963000,-123.10234000,Q1514115 +126299,Shelton,1462,WA,Washington,233,US,"United States",47.21509000,-123.10071000,Q983986 +126368,Shoreline,1462,WA,Washington,233,US,"United States",47.75565000,-122.34152000,Q983657 +126424,"Silver Firs",1462,WA,Washington,233,US,"United States",47.86602000,-122.15510000,Q2668965 +126439,Silverdale,1462,WA,Washington,233,US,"United States",47.64454000,-122.69487000,Q1515408 +126464,"Sisco Heights",1462,WA,Washington,233,US,"United States",48.11538000,-122.09708000,Q2671451 +126474,"Skagit County",1462,WA,Washington,233,US,"United States",48.48215000,-121.80227000,Q113892 +126476,"Skamania County",1462,WA,Washington,233,US,"United States",46.02276000,-121.91510000,Q304791 +126533,"Smokey Point",1462,WA,Washington,233,US,"United States",48.15232000,-122.18264000,Q1511504 +126542,Snohomish,1462,WA,Washington,233,US,"United States",47.91288000,-122.09818000,Q1505974 +126543,"Snohomish County",1462,WA,Washington,233,US,"United States",48.04602000,-121.72218000,Q110403 +126544,Snoqualmie,1462,WA,Washington,233,US,"United States",47.52871000,-121.82539000,Q1000951 +126553,"Soap Lake",1462,WA,Washington,233,US,"United States",47.38931000,-119.49059000,Q592056 +126625,"South Bend",1462,WA,Washington,233,US,"United States",46.66315000,-123.80461000,Q1017572 +126673,"South Hill",1462,WA,Washington,233,US,"United States",47.14121000,-122.27012000,Q1503540 +126746,"South Wenatchee",1462,WA,Washington,233,US,"United States",47.39012000,-120.28958000,Q1029806 +126793,Southworth,1462,WA,Washington,233,US,"United States",47.51204000,-122.50180000,Q7571501 +126796,Spanaway,1462,WA,Washington,233,US,"United States",47.10399000,-122.43457000,Q1515461 +126842,Spokane,1462,WA,Washington,233,US,"United States",47.65966000,-117.42908000,Q187805 +126843,"Spokane County",1462,WA,Washington,233,US,"United States",47.62064000,-117.40401000,Q485276 +126844,"Spokane Valley",1462,WA,Washington,233,US,"United States",47.67323000,-117.23937000,Q988065 +126974,Stanwood,1462,WA,Washington,233,US,"United States",48.24121000,-122.37071000,Q2601028 +127017,Steilacoom,1462,WA,Washington,233,US,"United States",47.16982000,-122.60263000,Q1507851 +127042,"Stevens County",1462,WA,Washington,233,US,"United States",48.39906000,-117.85514000,Q483954 +127045,Stevenson,1462,WA,Washington,233,US,"United States",45.69567000,-121.88452000,Q514457 +127162,"Sudden Valley",1462,WA,Washington,233,US,"United States",48.72289000,-122.34655000,Q1508156 +127198,Sultan,1462,WA,Washington,233,US,"United States",47.86260000,-121.81651000,Q1505643 +127199,Sumas,1462,WA,Washington,233,US,"United States",49.00012000,-122.26488000,Q1510124 +127215,Summit,1462,WA,Washington,233,US,"United States",47.16177000,-122.35707000,Q1504136 +127220,"Summit View",1462,WA,Washington,233,US,"United States",47.13632000,-122.35202000,Q2646550 +127223,Sumner,1462,WA,Washington,233,US,"United States",47.20316000,-122.24040000,Q1510183 +127260,Sunnyside,1462,WA,Washington,233,US,"United States",46.32374000,-120.00865000,Q1044814 +127263,Sunnyslope,1462,WA,Washington,233,US,"United States",47.47290000,-120.33674000,Q1092968 +127284,Suquamish,1462,WA,Washington,233,US,"United States",47.73121000,-122.55236000,Q1514714 +127369,Tacoma,1462,WA,Washington,233,US,"United States",47.25288000,-122.44429000,Q199797 +127416,Tanglewilde,1462,WA,Washington,233,US,"United States",47.05150000,-122.78241000,Q504312 +127417,"Tanglewilde-Thompson Place",1462,WA,Washington,233,US,"United States",47.05116000,-122.78081000,Q1508606 +127418,Tanner,1462,WA,Washington,233,US,"United States",47.47538000,-121.74622000,Q1512564 +127509,Tenino,1462,WA,Washington,233,US,"United States",46.85677000,-122.85291000,Q604958 +127518,"Terrace Heights",1462,WA,Washington,233,US,"United States",46.60624000,-120.43979000,Q1508479 +127613,"Three Lakes",1462,WA,Washington,233,US,"United States",47.94482000,-122.01152000,Q1504354 +127631,"Thurston County",1462,WA,Washington,233,US,"United States",46.92950000,-122.83208000,Q113773 +127639,Tieton,1462,WA,Washington,233,US,"United States",46.70207000,-120.75535000,Q1506078 +127717,Tonasket,1462,WA,Washington,233,US,"United States",48.70515000,-119.43950000,Q1506311 +127734,Toppenish,1462,WA,Washington,233,US,"United States",46.37735000,-120.30867000,Q986202 +127760,"Town and Country",1462,WA,Washington,233,US,"United States",47.72739000,-117.42161000,Q1504059 +127773,Tracyton,1462,WA,Washington,233,US,"United States",47.60898000,-122.65514000,Q1505215 +127811,Trentwood,1462,WA,Washington,233,US,"United States",47.69656000,-117.21076000,Q1503104 +127879,Tukwila,1462,WA,Washington,233,US,"United States",47.47399000,-122.26096000,Q1510339 +127880,Tulalip,1462,WA,Washington,233,US,"United States",48.06843000,-122.29181000,Q1516298 +127881,"Tulalip Bay",1462,WA,Washington,233,US,"United States",48.03732000,-122.31014000,Q1516298 +127890,Tumwater,1462,WA,Washington,233,US,"United States",47.00732000,-122.90931000,Q1507493 +128004,"Union Gap",1462,WA,Washington,233,US,"United States",46.55735000,-120.47506000,Q1512710 +128007,"Union Hill-Novelty Hill",1462,WA,Washington,233,US,"United States",47.67887000,-122.02833000,Q1514861 +128036,"University Place",1462,WA,Washington,233,US,"United States",47.23565000,-122.55040000,Q1514808 +128144,Vancouver,1462,WA,Washington,233,US,"United States",45.63873000,-122.66149000,Q234053 +128157,Vashon,1462,WA,Washington,233,US,"United States",47.44732000,-122.45985000,Q1505272 +128167,Venersborg,1462,WA,Washington,233,US,"United States",45.77373000,-122.42454000,Q597247 +128178,Veradale,1462,WA,Washington,233,US,"United States",47.64995000,-117.20738000,Q1504247 +128332,"Wahkiakum County",1462,WA,Washington,233,US,"United States",46.29125000,-123.43316000,Q484015 +128354,Waitsburg,1462,WA,Washington,233,US,"United States",46.27042000,-118.15329000,Q1506464 +128393,"Walla Walla",1462,WA,Washington,233,US,"United States",46.06458000,-118.34302000,Q222338 +128394,"Walla Walla County",1462,WA,Washington,233,US,"United States",46.22980000,-118.47845000,Q485305 +128395,"Walla Walla East",1462,WA,Washington,233,US,"United States",46.05184000,-118.30403000,Q1502554 +128404,Waller,1462,WA,Washington,233,US,"United States",47.20066000,-122.36929000,Q1502819 +128420,"Walnut Grove",1462,WA,Washington,233,US,"United States",45.66789000,-122.59899000,Q1503462 +128453,Wapato,1462,WA,Washington,233,US,"United States",46.44763000,-120.42034000,Q1507767 +128460,Warden,1462,WA,Washington,233,US,"United States",46.96764000,-119.03973000,Q1510860 +128467,"Warm Beach",1462,WA,Washington,233,US,"United States",48.17065000,-122.36460000,Q1505252 +128591,Washougal,1462,WA,Washington,233,US,"United States",45.58262000,-122.35342000,Q986371 +128629,Waterville,1462,WA,Washington,233,US,"United States",47.64708000,-120.07118000,Q168848 +128653,Wauna,1462,WA,Washington,233,US,"United States",47.37899000,-122.64263000,Q6166578 +128797,Wenatchee,1462,WA,Washington,233,US,"United States",47.42346000,-120.31035000,Q958596 +128847,"West Clarkston-Highland",1462,WA,Washington,233,US,"United States",46.40287000,-117.06395000,Q27271 +128910,"West Lake Sammamish",1462,WA,Washington,233,US,"United States",47.57760000,-122.10123000,Q1502687 +128911,"West Lake Stevens",1462,WA,Washington,233,US,"United States",47.99343000,-122.10180000,Q1502959 +128923,"West Longview",1462,WA,Washington,233,US,"United States",46.16789000,-122.99900000,Q1503112 +128951,"West Pasco",1462,WA,Washington,233,US,"United States",46.24541000,-119.18279000,Q1504992 +128968,"West Richland",1462,WA,Washington,233,US,"United States",46.30430000,-119.36141000,Q917589 +128981,"West Side Highway",1462,WA,Washington,233,US,"United States",46.18399000,-122.91715000,Q1503595 +128996,"West Valley",1462,WA,Washington,233,US,"United States",46.59207000,-120.60507000,Q1504315 +129003,"West Wenatchee",1462,WA,Washington,233,US,"United States",47.44374000,-120.35341000,Q1093576 +129073,Westport,1462,WA,Washington,233,US,"United States",46.89009000,-124.10406000,Q1007612 +129105,"Whatcom County",1462,WA,Washington,233,US,"United States",48.82975000,-121.87283000,Q156623 +129129,"White Center",1462,WA,Washington,233,US,"United States",47.51732000,-122.35485000,Q1511304 +129159,"White Salmon",1462,WA,Washington,233,US,"United States",45.72762000,-121.48646000,Q1019847 +129204,"Whitman County",1462,WA,Washington,233,US,"United States",46.90117000,-117.52299000,Q484153 +129234,"Wilderness Rim",1462,WA,Washington,233,US,"United States",47.44697000,-121.76857000,Q8001154 +129403,Winlock,1462,WA,Washington,233,US,"United States",46.49122000,-122.93790000,Q1502266 +129480,Wollochet,1462,WA,Washington,233,US,"United States",47.26871000,-122.58402000,Q6168166 +129523,Woodinville,1462,WA,Washington,233,US,"United States",47.75427000,-122.16346000,Q986378 +129527,Woodland,1462,WA,Washington,233,US,"United States",45.90456000,-122.74399000,Q1191430 +129550,"Woods Creek",1462,WA,Washington,233,US,"United States",47.87871000,-121.89846000,Q1503566 +129579,Woodway,1462,WA,Washington,233,US,"United States",47.79621000,-122.38291000,Q1506485 +129647,Yacolt,1462,WA,Washington,233,US,"United States",45.86595000,-122.40621000,Q1502151 +129650,Yakima,1462,WA,Washington,233,US,"United States",46.60207000,-120.50590000,Q499203 +129651,"Yakima County",1462,WA,Washington,233,US,"United States",46.45685000,-120.73870000,Q156629 +129669,"Yarrow Point",1462,WA,Washington,233,US,"United States",47.64621000,-122.21735000,Q1507131 +129681,Yelm,1462,WA,Washington,233,US,"United States",46.94204000,-122.60596000,Q1510424 +129754,Zillah,1462,WA,Washington,233,US,"United States",46.40207000,-120.26200000,Q781706 +128544,Washington,1429,WV,"West Virginia",233,US,"United States",39.26119000,-81.67180000,Q2914511 +124540,"Port Washington",1441,WI,Wisconsin,233,US,"United States",43.38722000,-87.87564000,Q1016131 +128576,"Washington County",1441,WI,Wisconsin,233,US,"United States",43.36847000,-88.23078000,Q501559 diff --git a/web/src/pages/MetadataSchema.tsx b/web/src/pages/MetadataSchema.tsx index 1e725628..49068c4c 100644 --- a/web/src/pages/MetadataSchema.tsx +++ b/web/src/pages/MetadataSchema.tsx @@ -53,7 +53,8 @@ type DataTypes = | "boolean" | "date" | "location" - | "controlled-list"; + | "controlled-list" + | "inline-controlled-list"; export interface MetadataSchemaFields { id: string; field: string; @@ -63,10 +64,13 @@ export interface MetadataSchemaFields { sequenceNumber: number; dependsOn: string[]; // location fields - useCenterPosition: boolean; - latitudeField: string; - longitudeField: string; - zoomLevelField: string; + useCenterPosition?: boolean; + latitudeField?: string; + longitudeField?: string; + zoomLevelField?: string; + + // inline controlled list fields + inlineControlledListValues?: string; } interface DatatypeSelectProps { @@ -83,6 +87,7 @@ function DatatypeSelect({ value, onChange, disabled }: DatatypeSelectProps) { { value: "date", label: "Date" }, { value: "location", label: "Location" }, { value: "controlled-list", label: "Controlled List" }, + { value: "inline-controlled-list", label: "Inline Controlled List" }, ]; return ( { + setFormState({ + ...formState, + inlineControlledListValues: detail.value, + }); + }} + /> + + + ); +} + function LocationSpecificFields({ formState, setFormState }: LocationSpecificFieldsProps) { if (formState.dataType !== "location") { return null; @@ -156,7 +188,7 @@ function LocationSpecificFields({ formState, setFormState }: LocationSpecificFie constraintText="Use the center point of the map as the initial position." > { setFormState({ ...formState, @@ -190,7 +222,7 @@ function LocationSpecificFields({ formState, setFormState }: LocationSpecificFie errorText={validateField(formState.latitudeField)} > { setFormState({ ...formState, @@ -205,7 +237,7 @@ function LocationSpecificFields({ formState, setFormState }: LocationSpecificFie errorText={validateField(formState.longitudeField)} > { setFormState({ ...formState, @@ -220,7 +252,7 @@ function LocationSpecificFields({ formState, setFormState }: LocationSpecificFie errorText={validateField(formState.zoomLevelField)} > { setFormState({ ...formState, @@ -336,6 +368,7 @@ function CreateMetadataField({ open, setOpen, setReload, initState }: CreateMeta /> + Date: Wed, 7 Jun 2023 03:15:47 +0000 Subject: [PATCH 08/13] fix missing copyright headers --- web/src/components/metadata/CSVControlData.tsx | 4 ++++ web/src/components/metadata/ControlledMetadata.tsx | 4 ++++ web/src/components/metadata/EditComp.tsx | 4 ++++ web/src/pages/auth/CreateConstraint.tsx | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/web/src/components/metadata/CSVControlData.tsx b/web/src/components/metadata/CSVControlData.tsx index 3937d96f..b3fd1594 100644 --- a/web/src/components/metadata/CSVControlData.tsx +++ b/web/src/components/metadata/CSVControlData.tsx @@ -1,3 +1,7 @@ +/* + * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ import { SchemaContextData } from "../../pages/MetadataSchema"; import Papa, { ParseRemoteConfig, ParseResult } from "papaparse"; import React from "react"; diff --git a/web/src/components/metadata/ControlledMetadata.tsx b/web/src/components/metadata/ControlledMetadata.tsx index d0ae47f2..5a3285ea 100644 --- a/web/src/components/metadata/ControlledMetadata.tsx +++ b/web/src/components/metadata/ControlledMetadata.tsx @@ -1,3 +1,7 @@ +/* + * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ import { useEffect, useState } from "react"; import { SchemaContextData } from "../../pages/MetadataSchema"; import { API, Storage } from "aws-amplify"; diff --git a/web/src/components/metadata/EditComp.tsx b/web/src/components/metadata/EditComp.tsx index a9ee81d6..118986f6 100644 --- a/web/src/components/metadata/EditComp.tsx +++ b/web/src/components/metadata/EditComp.tsx @@ -1,3 +1,7 @@ +/* + * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ import { SchemaContextData } from "../../pages/MetadataSchema"; import { Checkbox, DatePicker, Input, Select, Textarea } from "@cloudscape-design/components"; import { MapLocationSelectorModal2 } from "./MapLocationSelector"; diff --git a/web/src/pages/auth/CreateConstraint.tsx b/web/src/pages/auth/CreateConstraint.tsx index f64e389b..df07d1bd 100644 --- a/web/src/pages/auth/CreateConstraint.tsx +++ b/web/src/pages/auth/CreateConstraint.tsx @@ -1,3 +1,7 @@ +/* + * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ import { Box, Button, From 762fb8761db5b341d1e584d3f78dabb1236a082e Mon Sep 17 00:00:00 2001 From: Archie Cowan Date: Wed, 7 Jun 2023 03:18:07 +0000 Subject: [PATCH 09/13] fix missing copyright headers --- web/src/components/metadata/EditComp.test.tsx | 4 ++++ web/src/components/metadata/MapLocationSelector.tsx | 4 ++++ web/src/setupTests.ts | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/web/src/components/metadata/EditComp.test.tsx b/web/src/components/metadata/EditComp.test.tsx index 39bba958..ce86b178 100644 --- a/web/src/components/metadata/EditComp.test.tsx +++ b/web/src/components/metadata/EditComp.test.tsx @@ -1,3 +1,7 @@ +/* + * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ import { render } from "@testing-library/react"; import { SchemaContextData } from "../../pages/MetadataSchema"; import { EditComp } from "./EditComp"; diff --git a/web/src/components/metadata/MapLocationSelector.tsx b/web/src/components/metadata/MapLocationSelector.tsx index 454949da..4fbca683 100644 --- a/web/src/components/metadata/MapLocationSelector.tsx +++ b/web/src/components/metadata/MapLocationSelector.tsx @@ -1,3 +1,7 @@ +/* + * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ import Modal from "@cloudscape-design/components/modal"; import "maplibre-gl/dist/maplibre-gl.css"; diff --git a/web/src/setupTests.ts b/web/src/setupTests.ts index fe4fbaf6..e1634f31 100644 --- a/web/src/setupTests.ts +++ b/web/src/setupTests.ts @@ -1,3 +1,7 @@ +/* + * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ jest.mock("maplibre-gl/dist/maplibre-gl", () => ({ GeolocateControl: jest.fn(), Map: jest.fn(() => ({ From 458124f0c5f57ed0e186b1c7bf30aec67644aaae Mon Sep 17 00:00:00 2001 From: Archie Cowan Date: Wed, 7 Jun 2023 14:20:28 +0000 Subject: [PATCH 10/13] prettier --- infra/lib/infra-stack.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/infra/lib/infra-stack.ts b/infra/lib/infra-stack.ts index 85519bf6..57ca6c8c 100644 --- a/infra/lib/infra-stack.ts +++ b/infra/lib/infra-stack.ts @@ -204,7 +204,6 @@ export class VAMS extends cdk.Stack { }); } - cdk.Tags.of(this).add("vams:stackname", props.stackName); this.node.findAll().forEach((item) => { From 47499a0e489da15ce510c25b427b3a9fd2288697 Mon Sep 17 00:00:00 2001 From: Archie Cowan Date: Fri, 9 Jun 2023 20:30:49 +0000 Subject: [PATCH 11/13] enable non-super-admin users to access the schema --- backend/backend/handlers/metadataschema/schema.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/backend/backend/handlers/metadataschema/schema.py b/backend/backend/handlers/metadataschema/schema.py index 63d50e22..21fdc45b 100644 --- a/backend/backend/handlers/metadataschema/schema.py +++ b/backend/backend/handlers/metadataschema/schema.py @@ -124,9 +124,6 @@ def lambda_handler(event: APIGatewayProxyEvent, context: LambdaContext, claims_and_roles = claims_fn(event) - if "super-admin" not in claims_and_roles['roles']: - raise ValidationError(403, "Not Authorized") - if "databaseId" not in event["pathParameters"]: raise ValidationError(400, "Missing databaseId in path") @@ -139,6 +136,11 @@ def lambda_handler(event: APIGatewayProxyEvent, context: LambdaContext, resp = schema.get_all_schemas(databaseId) print("resp", resp) response['body']['schemas'] = resp + response['body'] = json.dumps(response['body'], cls=DecimalEncoder) + return response + + if "super-admin" not in claims_and_roles['roles']: + raise ValidationError(403, "Not Authorized") # create/update if method == "POST" or method == "PUT": From 8456e112ec8089afcf77d4a6aea494f4e689faea Mon Sep 17 00:00:00 2001 From: Archie Cowan Date: Tue, 13 Jun 2023 00:58:28 +0000 Subject: [PATCH 12/13] fix: flake8 feedback --- .../tests/handlers/metadata/test_schema.py | 138 +++++++++--------- 1 file changed, 73 insertions(+), 65 deletions(-) diff --git a/backend/tests/handlers/metadata/test_schema.py b/backend/tests/handlers/metadata/test_schema.py index 2481dc0f..4b686f09 100644 --- a/backend/tests/handlers/metadata/test_schema.py +++ b/backend/tests/handlers/metadata/test_schema.py @@ -2,15 +2,15 @@ # SPDX-License-Identifier: Apache-2.0 from decimal import Decimal import json -import unittest from unittest.mock import Mock, call from backend.handlers.metadataschema.schema import MetadataSchema import pytest -from boto3.dynamodb.conditions import Key, Attr +from boto3.dynamodb.conditions import Key from backend.handlers.metadataschema.schema import APIGatewayProxyEvent + def test_get_schema(): mock_ddb = Mock() mock_ddb.Table = Mock(return_value=mock_ddb) @@ -31,7 +31,8 @@ def test_get_schema_not_found(): result = metadataSchema.get_schema("databaseId123", "schemaId123") assert mock_ddb.get_item.call_args == call(Key={'databaseId': 'databaseId123', 'field': 'schemaId123'}) - assert None == result + assert result is None + def test_get_schema_not_found2(): mock_ddb = Mock() @@ -42,7 +43,7 @@ def test_get_schema_not_found2(): result = metadataSchema.get_schema("databaseId123", "schemaId123") assert mock_ddb.get_item.call_args == call(Key={'databaseId': 'databaseId123', 'field': 'schemaId123'}) - assert None == result + assert result is None def test_get_schema_error(): @@ -163,16 +164,16 @@ def test_lambda_handler_not_super_admin(): mock_metadata_schema = Mock() event = APIGatewayProxyEvent({ - "httpMethod": "GET", - "path": "/metadataschema", - "queryStringParameters": {}, - "pathParameters": { + "httpMethod": "GET", + "path": "/metadataschema", + "queryStringParameters": {}, + "pathParameters": { "databaseId": "databaseId123", - }, - "requestContext": { - "requestId": "woohoo!=", - } - }) + }, + "requestContext": { + "requestId": "woohoo!=", + } + }) context = {} response = lambda_handler(event, context, claims_fn=mock_claims, metadata_schema_fn=mock_metadata_schema) @@ -190,14 +191,14 @@ def test_lambda_handler_missing_databaseId(): mock_metadata_schema = Mock() event = APIGatewayProxyEvent({ - "httpMethod": "GET", - "path": "/metadataschema", - "queryStringParameters": {}, - "pathParameters": {}, - "requestContext": { + "httpMethod": "GET", + "path": "/metadataschema", + "queryStringParameters": {}, + "pathParameters": {}, + "requestContext": { "requestId": "woohoo!=", - } - }) + } + }) context = {} response = lambda_handler(event, context, claims_fn=mock_claims, metadata_schema_fn=mock_metadata_schema) @@ -207,6 +208,7 @@ def test_lambda_handler_missing_databaseId(): assert response_body['error'] == 'Missing databaseId in path' assert response_body['requestid'] == 'woohoo!=' + def test_lambda_handler_get(): from backend.handlers.metadataschema.schema import lambda_handler from backend.handlers.metadataschema.schema import APIGatewayProxyEvent @@ -214,25 +216,25 @@ def test_lambda_handler_get(): mock_metadata_schema = Mock() metadata_schema_factory = Mock(return_value=mock_metadata_schema) values = [ - { "field": "schemaId123", "datatype": "string", "required": True, "dependsOn": ["schemaId122"]}, - { "field": "schemaId122", "datatype": "string", "required": True, }, + {"field": "schemaId123", "datatype": "string", "required": True, "dependsOn": ["schemaId122"]}, + {"field": "schemaId122", "datatype": "string", "required": True, }, ] mock_metadata_schema.get_all_schemas = Mock(return_value=values) - + event = APIGatewayProxyEvent({ - "httpMethod": "GET", - "path": "/metadataschema", - "queryStringParameters": {}, - "pathParameters": { + "httpMethod": "GET", + "path": "/metadataschema", + "queryStringParameters": {}, + "pathParameters": { "databaseId": "databaseId123", - }, - "requestContext": { - "requestId": "woohoo!=", - "http": { - "method": "GET", - } + }, + "requestContext": { + "requestId": "woohoo!=", + "http": { + "method": "GET", } - }) + } + }) context = {} response = lambda_handler(event, context, claims_fn=mock_claims, metadata_schema_fn=metadata_schema_factory) @@ -242,6 +244,7 @@ def test_lambda_handler_get(): assert response_body['requestid'] == 'woohoo!=' assert response_body['schemas'] == values + def create_event(method): return APIGatewayProxyEvent({ @@ -265,29 +268,30 @@ def create_event(method): "dependsOn": ["schemaId122"], }), }) - + def create_delete_event(): return APIGatewayProxyEvent({ - "httpMethod": "DELETE", - "path": "/metadataschema", - "queryStringParameters": {}, - "pathParameters": { + "httpMethod": "DELETE", + "path": "/metadataschema", + "queryStringParameters": {}, + "pathParameters": { "databaseId": "databaseId123", "field": "schemaId123", - }, - "requestContext": { - "requestId": "woohoo!=", - "http": { - "method": "DELETE", - } - }, - }) + }, + "requestContext": { + "requestId": "woohoo!=", + "http": { + "method": "DELETE", + } + }, + }) + def test_lambda_handler_post(): - event = create_event("POST") + event = create_event("POST") response, mock_metadata_schema = _invoke_lambda_handler_harness(event) @@ -297,14 +301,15 @@ def test_lambda_handler_post(): mock_metadata_schema.update_schema.assert_called_once_with("databaseId123", "schemaId123", { "field": "schemaId123", - "datatype": "string", + "datatype": "string", "required": True, "sequenceNumber": 1.0, "dependsOn": ["schemaId122"], }) + def test_lambda_handler_put(): - event = create_event("PUT") + event = create_event("PUT") response, mock_metadata_schema = _invoke_lambda_handler_harness(event) @@ -314,12 +319,13 @@ def test_lambda_handler_put(): mock_metadata_schema.update_schema.assert_called_once_with("databaseId123", "schemaId123", { "field": "schemaId123", - "datatype": "string", + "datatype": "string", "required": True, "sequenceNumber": 1.0, "dependsOn": ["schemaId122"], }) + def test_lambda_handler_delete(): # delete events have no body @@ -340,25 +346,26 @@ def test_lambda_handler_get_schema_with_decimal_response(): mock_metadata_schema = Mock() metadata_schema_factory = Mock(return_value=mock_metadata_schema) values = [ - { "field": "schemaId123", "datatype": "string", "sequenceNumber": Decimal(5.0), "required": True, "dependsOn": ["schemaId122"]}, - { "field": "schemaId122", "datatype": "string", "sequenceNumber": Decimal(10.0), "required": True, }, + {"field": "schemaId123", "datatype": "string", "sequenceNumber": Decimal( + 5.0), "required": True, "dependsOn": ["schemaId122"]}, + {"field": "schemaId122", "datatype": "string", "sequenceNumber": Decimal(10.0), "required": True, }, ] mock_metadata_schema.get_all_schemas = Mock(return_value=values) - + event = APIGatewayProxyEvent({ - "httpMethod": "GET", - "path": "/metadataschema", - "queryStringParameters": {}, - "pathParameters": { + "httpMethod": "GET", + "path": "/metadataschema", + "queryStringParameters": {}, + "pathParameters": { "databaseId": "databaseId123", - }, - "requestContext": { - "requestId": "woohoo!=", - "http": { - "method": "GET", - } + }, + "requestContext": { + "requestId": "woohoo!=", + "http": { + "method": "GET", } - }) + } + }) context = {} response = lambda_handler(event, context, claims_fn=mock_claims, metadata_schema_fn=metadata_schema_factory) @@ -368,6 +375,7 @@ def test_lambda_handler_get_schema_with_decimal_response(): assert response_body['requestid'] == 'woohoo!=' assert response_body['schemas'] == values + def _invoke_lambda_handler_harness(event,): from backend.handlers.metadataschema.schema import lambda_handler mock_claims = Mock(return_value={'roles': ['super-admin']}) From f1a8ca89fbde9ef03ebaf8a0b550be054e589901 Mon Sep 17 00:00:00 2001 From: Archie Cowan Date: Tue, 13 Jun 2023 17:26:01 +0000 Subject: [PATCH 13/13] unit test fix --- backend/tests/handlers/metadata/test_schema.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/backend/tests/handlers/metadata/test_schema.py b/backend/tests/handlers/metadata/test_schema.py index 4b686f09..3ae38448 100644 --- a/backend/tests/handlers/metadata/test_schema.py +++ b/backend/tests/handlers/metadata/test_schema.py @@ -158,10 +158,17 @@ def test_delete_schema_error(): def test_lambda_handler_not_super_admin(): + """All users can get schemas""" from backend.handlers.metadataschema.schema import lambda_handler from backend.handlers.metadataschema.schema import APIGatewayProxyEvent mock_claims = Mock(return_value={'roles': []}) mock_metadata_schema = Mock() + metadata_schema_factory = Mock(return_value=mock_metadata_schema) + values = [ + {"field": "schemaId123", "datatype": "string", "required": True, "dependsOn": ["schemaId122"]}, + {"field": "schemaId122", "datatype": "string", "required": True, }, + ] + mock_metadata_schema.get_all_schemas = Mock(return_value=values) event = APIGatewayProxyEvent({ "httpMethod": "GET", @@ -172,15 +179,17 @@ def test_lambda_handler_not_super_admin(): }, "requestContext": { "requestId": "woohoo!=", + "http": { + "method": "GET", + } } }) context = {} - response = lambda_handler(event, context, claims_fn=mock_claims, metadata_schema_fn=mock_metadata_schema) + response = lambda_handler(event, context, claims_fn=mock_claims, metadata_schema_fn=metadata_schema_factory) - assert response['statusCode'] == 403 + assert response['statusCode'] == 200 response_body = json.loads(response['body']) - assert response_body['error'] == 'Not Authorized' assert response_body['requestid'] == 'woohoo!='