From f91de51a752e13f49454fdd705465d0e5b818f40 Mon Sep 17 00:00:00 2001 From: Lucas Merrill Brown Date: Thu, 9 Dec 2021 11:07:37 -0500 Subject: [PATCH 01/12] Issue 1007 continued: Re-ordering fields for clarity (#1014) --- .../data_pipeline/score/field_names.py | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/data/data-pipeline/data_pipeline/score/field_names.py b/data/data-pipeline/data_pipeline/score/field_names.py index a71feed2..9289cecc 100644 --- a/data/data-pipeline/data_pipeline/score/field_names.py +++ b/data/data-pipeline/data_pipeline/score/field_names.py @@ -225,16 +225,12 @@ IMPENETRABLE_SURFACES_FIELD = "Percent impenetrable surface areas" READING_FIELD = "Third grade reading proficiency" LOW_READING_FIELD = "Low third grade reading proficiency" +##### # Names for individual factors being exceeded # Climate Change EXPECTED_POPULATION_LOSS_RATE_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for expected population loss rate and is low income" EXPECTED_AGRICULTURE_LOSS_RATE_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for expected agriculture loss rate and is low income" EXPECTED_BUILDING_LOSS_RATE_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for expected building loss rate and is low income" -EXTREME_HEAT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD = ( - f"At or above the {PERCENTILE}th percentile for summer days above 90F and " - f"the median house value is less than {MEDIAN_HOUSE_VALUE_PERCENTILE}th " - f"percentile and is low income" -) # Clean energy and efficiency PM25_EXPOSURE_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for PM2.5 exposure and is low income" @@ -252,17 +248,10 @@ LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD = ( ) HOUSING_BURDEN_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for housing burden and is low income" -IMPENETRABLE_SURFACES_LOW_INCOME_FIELD = ( - f"At or above the {PERCENTILE}th percentile for impenetrable surfaces and is low " - f"income" -) - # Remediation and Reduction of Legacy Pollution RMP_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for proximity to RMP sites and is low income" SUPERFUND_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for proximity to superfund sites and is low income" HAZARDOUS_WASTE_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for proximity to hazardous waste facilities and is low income" -AIR_TOXICS_CANCER_RISK_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for air toxics cancer risk and is low income" -RESPIRATORY_HAZARD_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for respiratory hazard index and is low income" # Critical Clean Water and Waste Infrastructure WASTEWATER_DISCHARGE_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for wastewater discharge and is low income" @@ -278,11 +267,6 @@ HEART_DISEASE_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for LIFE_EXPECTANCY_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for life expectancy and is low income" -HEALTHY_FOOD_LOW_INCOME_FIELD = ( - f"At or above the {PERCENTILE}th percentile for low " - f"access to healthy food and is low income" -) - # Workforce UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD = ( f"At or above the {PERCENTILE}th percentile for unemployment" @@ -309,6 +293,25 @@ MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD = ( " and has low HS education" ) +# Not currently used in a factor +EXTREME_HEAT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD = ( + f"At or above the {PERCENTILE}th percentile for summer days above 90F and " + f"the median house value is less than {MEDIAN_HOUSE_VALUE_PERCENTILE}th " + f"percentile and is low income" +) +IMPENETRABLE_SURFACES_LOW_INCOME_FIELD = ( + f"At or above the {PERCENTILE}th percentile for impenetrable surfaces and is low " + f"income" +) +AIR_TOXICS_CANCER_RISK_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for air toxics cancer risk and is low income" +RESPIRATORY_HAZARD_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for respiratory hazard index and is low income" +HEALTHY_FOOD_LOW_INCOME_FIELD = ( + f"At or above the {PERCENTILE}th percentile for low " + f"access to healthy food and is low income" +) + THRESHOLD_COUNT = "Total threshold criteria exceeded" FPL_200_SERIES = "Is low income" +# End of names for individual factors being exceeded +#### From 123fbf62546f57d572e1d390226ecdf816d8f575 Mon Sep 17 00:00:00 2001 From: Shelby Switzer Date: Thu, 9 Dec 2021 11:25:19 -0500 Subject: [PATCH 02/12] Remove "infrastucture" directory (#996) We originally used the approach in the infrastructure directory when we thought we would be using Amazon Lambda for different parts of our deployment pipeline. We have since then moved to using Github Actions and no longer need this code, and keeping it in `main` has caused confusion for onboarding new folks. This commit removes the directory (although this will still be around in version control so we can always view it or bring it back in the future if we want to). Co-authored-by: Shelby Switzer --- infrastructure/README.md | 40 - infrastructure/conditions.yml | 11 - infrastructure/environment.yml | 37 - infrastructure/functions.yml | 71 - .../detect-changes-for-worker/.eslintrc.js | 13 - .../detect-changes-for-worker/ecs.js | 187 - .../events/enrichment.json | 18 - .../events/gdal.json | 10 - .../events/ogr2ogr.json | 10 - .../events/tippecanoe.json | 24 - .../detect-changes-for-worker/gdal.js | 11 - .../detect-changes-for-worker/index.js | 130 - .../package-lock.json | 968 --- .../detect-changes-for-worker/package.json | 18 - .../functions/detect-changes-for-worker/s3.js | 72 - .../taskDefinitions/ogr2ogr.json | 25 - .../taskDefinitions/ogr2ogr_raw.json | 21 - .../detect-changes-for-worker/test.env | 19 - .../detect-changes-for-worker/util.js | 70 - infrastructure/package-lock.json | 5767 ----------------- infrastructure/package.json | 20 - infrastructure/resources-cloudfront.yml | 84 - infrastructure/resources-ecs.yml | 164 - infrastructure/resources-route53.yml | 17 - infrastructure/resources-s3.yml | 18 - infrastructure/serverless.yml | 87 - 26 files changed, 7912 deletions(-) delete mode 100644 infrastructure/README.md delete mode 100644 infrastructure/conditions.yml delete mode 100644 infrastructure/environment.yml delete mode 100644 infrastructure/functions.yml delete mode 100644 infrastructure/functions/detect-changes-for-worker/.eslintrc.js delete mode 100644 infrastructure/functions/detect-changes-for-worker/ecs.js delete mode 100644 infrastructure/functions/detect-changes-for-worker/events/enrichment.json delete mode 100644 infrastructure/functions/detect-changes-for-worker/events/gdal.json delete mode 100644 infrastructure/functions/detect-changes-for-worker/events/ogr2ogr.json delete mode 100644 infrastructure/functions/detect-changes-for-worker/events/tippecanoe.json delete mode 100644 infrastructure/functions/detect-changes-for-worker/gdal.js delete mode 100644 infrastructure/functions/detect-changes-for-worker/index.js delete mode 100644 infrastructure/functions/detect-changes-for-worker/package-lock.json delete mode 100644 infrastructure/functions/detect-changes-for-worker/package.json delete mode 100644 infrastructure/functions/detect-changes-for-worker/s3.js delete mode 100644 infrastructure/functions/detect-changes-for-worker/taskDefinitions/ogr2ogr.json delete mode 100644 infrastructure/functions/detect-changes-for-worker/taskDefinitions/ogr2ogr_raw.json delete mode 100644 infrastructure/functions/detect-changes-for-worker/test.env delete mode 100644 infrastructure/functions/detect-changes-for-worker/util.js delete mode 100644 infrastructure/package-lock.json delete mode 100644 infrastructure/package.json delete mode 100644 infrastructure/resources-cloudfront.yml delete mode 100644 infrastructure/resources-ecs.yml delete mode 100644 infrastructure/resources-route53.yml delete mode 100644 infrastructure/resources-s3.yml delete mode 100644 infrastructure/serverless.yml diff --git a/infrastructure/README.md b/infrastructure/README.md deleted file mode 100644 index d1c5d3b5..00000000 --- a/infrastructure/README.md +++ /dev/null @@ -1,40 +0,0 @@ -## create acm certificate - -This only needs to be run once for the `sit` environment. stg and prd, we're assuming some other certificate arn will be used - - npx serverless create-cert - -you'll have to grab the arn of the certificate from the log output or go into the console to get it, looks like the plugin doesn't work any more. Set CLOUDFRONT_CERTIFICATE_ARN in sit to that value - -## deploy - - sls deploy --aws-profile geoplatform --stage sit --verbose - -If it's the first time deploying, you'll have to create a dns entry that points to the cloudfront distribution. - -## testing - -The examples can be run several different ways - -### local - -The `package.json` file incluses several examples to run against the local source code. The actual -tasks will execute within AWS, so an `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` must be set in -the `test.env` file. - -```bash -$ cd ./functions/detect-changes-for-worker -$ npm run test:gdal -``` - -### lambda invoke - -The deployed lambda functions can be directly invoked with the `serverless invoke` function. - -```bash -$ cat ./functions/detect-changes-for-worker/events/gdal.json | sls invoke -s sit -f DetectChangesForWorker -``` - -New event files can be created to perform one-off data processes. - - diff --git a/infrastructure/conditions.yml b/infrastructure/conditions.yml deleted file mode 100644 index dd2796b2..00000000 --- a/infrastructure/conditions.yml +++ /dev/null @@ -1,11 +0,0 @@ -Conditions: - - ShouldOnlyCreateResourcesInSIT: - Fn::Equals: - - ${self:provider.stage} - - sit - - ShouldOnlyCreateResourcesInPRD: - Fn::Equals: - - ${self:provider.stage} - - prd diff --git a/infrastructure/environment.yml b/infrastructure/environment.yml deleted file mode 100644 index 88e204d8..00000000 --- a/infrastructure/environment.yml +++ /dev/null @@ -1,37 +0,0 @@ -sit: - DEPLOYMENT_BUCKET_PREFIX: ${self:custom.namespaceShort} - STACK_NAME_PREFIX: "${self:custom.namespaceShort}-" - DATA_BUCKET: ${self:custom.environment.DEPLOYMENT_BUCKET_PREFIX}-${self:provider.stage}-${self:service}-data - SHOULD_CREATE_SSL_CERTIFICATE: true - HOSTED_ZONE_ID_DOMAIN: Z104704314NAAG3GV4SN1 - HOSTED_ZONE_SUBDOMAIN: ${self:provider.stage}-${self:service} - HOSTED_ZONE_DOMAIN: geoplatform.info - CLOUDFRONT_CERTIFICATE_ARN: arn:aws:acm:us-east-1:998343784597:certificate/083641d4-9df6-4f89-b79d-6697f428f5b9 - GDAL_TASK_DEFINITION_NAME: ${self:provider.stage}-${self:service}-gdal - GDAL_CONTAINER_DEFINITION_NAME: ${self:provider.stage}-${self:service}-osgeo-gdal - TIPPECANOE_TASK_DEFINITION_NAME: ${self:provider.stage}-${self:service}-tippecanoe - TIPPECANOE_CONTAINER_DEFINITION_NAME: ${self:provider.stage}-${self:service}-mgiddens-tippecanoe - -stg: - DEPLOYMENT_BUCKET_PREFIX: ${self:custom.namespaceShort} - STACK_NAME_PREFIX: "${self:custom.namespaceShort}-" - DATA_BUCKET: ${self:custom.environment.DEPLOYMENT_BUCKET_PREFIX}-${self:provider.stage}-${self:service}-data - SHOULD_CREATE_SSL_CERTIFICATE: false - HOSTED_ZONE_ID_DOMAIN: TBD - HOSTED_ZONE_SUBDOMAIN: ${self:provider.stage}-${self:service} - HOSTED_ZONE_DOMAIN: TBD - CLOUDFRONT_CERTIFICATE_ARN: TBD - GDAL_CONTAINER_DEFINITION_NAME: ${self:provider.stage}-${self:service}-osgeo-gdal - TIPPECANOE_CONTAINER_DEFINITION_NAME: ${self:provider.stage}-${self:service}-tippecanoe - -prd: - DEPLOYMENT_BUCKET_PREFIX: ${self:custom.namespaceShort} - STACK_NAME_PREFIX: "${self:custom.namespaceShort}-" - DATA_BUCKET: ${self:custom.environment.DEPLOYMENT_BUCKET_PREFIX}-${self:provider.stage}-${self:service}-data - SHOULD_CREATE_SSL_CERTIFICATE: false - HOSTED_ZONE_ID_DOMAIN: TBD - HOSTED_ZONE_SUBDOMAIN: ${self:service} - HOSTED_ZONE_DOMAIN: TBD - CLOUDFRONT_CERTIFICATE_ARN: TBD - GDAL_CONTAINER_DEFINITION_NAME: ${self:provider.stage}-${self:service}-osgeo-gdal - TIPPECANOE_CONTAINER_DEFINITION_NAME: ${self:provider.stage}-${self:service}-tippecanoe diff --git a/infrastructure/functions.yml b/infrastructure/functions.yml deleted file mode 100644 index 7d90f3f7..00000000 --- a/infrastructure/functions.yml +++ /dev/null @@ -1,71 +0,0 @@ -DetectChangesForWorker: - handler: functions/detect-changes-for-worker/index.handler - name: ${self:provider.stage}-DetectChangesForWorker - description: Scans an S3 bucket (with prefix) for items that have changes recently and sends them to ECS Tasks for processing - runtime: nodejs12.x - memorySize: 512 - timeout: 900 - environment: - REGION: ${self:provider.region} - STAGE: ${self:provider.stage} - ECS_CLUSTER: !Ref ECSCluster - VPC_SUBNET_ID: - Fn::ImportValue: ${self:provider.stage}-PrivateSubnetOne - GDAL_TASK_DEFINITION: ${self:custom.environment.GDAL_TASK_DEFINITION_NAME} - GDAL_CONTAINER_DEFINITION: ${self:custom.environment.GDAL_CONTAINER_DEFINITION_NAME} - TIPPECANOE_TASK_DEFINITION: ${self:custom.environment.TIPPECANOE_TASK_DEFINITION_NAME} - TIPPECANOE_CONTAINER_DEFINITION: ${self:custom.environment.TIPPECANOE_CONTAINER_DEFINITION_NAME} - - # The ECS Tasks can be kicked of my invoking the lambda on a schedule. This can provide the - # ability to do nightly refreshed of the data. - # events: - # - schedule: - # rate: cron(*/2 * * * ? *) # Fire every 2 minutes - # input: - # action: "gdal" - # command: - # - "ogrinfo" - # - "-al" - # - "-so" - # - "-ro" - # - "/vsizip//vsicurl/https://j40-sit-justice40-data-harvester-data.s3.amazonaws.com/census/tabblock2010_01_pophu.zip" - # - schedule: - # rate: cron(0 5 * * ? *) # Scan for updated data at Midnight Eastern Time - # input: - # action: enrichment - # sourceBucketName: !Ref DataBucket - # sourceBucketPrefix: usds/custom.csv - # age: 86400 # Seconds - # censusBucketName: j40-sit-justice40-data-harvester-data - # censusBucketPrefix: census/tabblock2010_01_pophu.zip - # pre: - # - Fn::Join: ['', ["wget https://j40-sit-justice40-data-harvester-data.s3.amazonaws.com/usds/$", "{source.Key} -O /tmp/custom.csv"]] - # command: - # - "-f" - # - "GeoJSON" - # - "-sql" - # - Fn::Join: ['', ["SELECT * FROM $", "{census.Key:base} LEFT JOIN '/tmp/custom.csv'.custom ON $", "{census.Key:base}.BLOCKID10 = custom.BLOCKID10"]] - # - Fn::Join: ['', ["/vsis3/j40-sit-justice40-data-harvester-data/joined/$", "{source.Key:base}-$", "{census.Key:base}.json"]] - # - Fn::Join: ['', ["/vsizip//vsicurl/https://j40-sit-justice40-data-harvester-data.s3.amazonaws.com/census/$", "{census.Key}"]] - # - schedule: - # rate: cron(0 7 * * ? *) # Run two hours after the generating any GeoJSON - # input: - # action: tippecanoe - # pre: - # - "curl https://gp-sit-tileservice-tile-cache.s3.amazonaws.com/usds/usa.csv -o /tmp/usa.csv" - # - "curl https://gp-sit-tileservice-tile-cache.s3.amazonaws.com/usds/tristate.mbtiles -o /tmp/tristate.mbtiles" - # post: - # - "aws s3 cp /tmp/tl_2010_bg_with_data.mbtiles s3://j40-sit-justice40-data-harvester-data/output/tl_2010_bg_with_data.mbtiles" - # - "tile-join --force -pk -pC -n tl_2010_bg -e /tmp/tiles /tmp/tl_2010_bg_with_data.mbtiles" - # - "aws s3 sync /tmp/tiles s3://j40-sit-justice40-data-harvester-data/output/tiles" - # command: - # - "tile-join" - # - "--force" - # - "-pk" - # - "-n" - # - "tl_2010_bg" - # - "-o" - # - "/tmp/tl_2010_bg_with_data.mbtiles" - # - "-c" - # - "/tmp/usa.csv" - # - "/tmp/tristate.mbtiles" diff --git a/infrastructure/functions/detect-changes-for-worker/.eslintrc.js b/infrastructure/functions/detect-changes-for-worker/.eslintrc.js deleted file mode 100644 index 2bdc548a..00000000 --- a/infrastructure/functions/detect-changes-for-worker/.eslintrc.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - "env": { - "node": true, - "commonjs": true, - "es2020": true - }, - "extends": "eslint:recommended", - "parserOptions": { - "ecmaVersion": 11 - }, - "rules": { - } -}; diff --git a/infrastructure/functions/detect-changes-for-worker/ecs.js b/infrastructure/functions/detect-changes-for-worker/ecs.js deleted file mode 100644 index 1154b219..00000000 --- a/infrastructure/functions/detect-changes-for-worker/ecs.js +++ /dev/null @@ -1,187 +0,0 @@ -/** - * Load an ECS Task Definition template and apply variable substitution - */ -async function createECSTaskDefinition(options, templateName, taskVars) { - const { fs, path } = options.deps; - const { util } = options.deps.local; - - // Load the task template - const templatePath = path.join(__dirname, 'taskDefinitions', `${templateName}.json`); - const rawTaskTemplate = await fs.promises.readFile(templatePath, 'utf8'); - - // Perform variable substitution - const taskTemplate = util.applyVariableSubstitution(options, taskVars, rawTaskTemplate); - - // Parse into a JSON object and return - return JSON.parse(taskTemplate); -} - - -/** - * Takes the event parameters and performs some variable substitution for the - * SQL query based on the actual S3 items being processed. - */ - function createECSTaskVariablesFromS3Record(options, record) { - const { event } = options; - const { REGION } = options.env; - const { util } = options.deps; - - // Create substituion variables from the S3 record - const vars = util.createSubstitutionVariablesFromS3Record(options, record, 's3'); - - // Apply them to the SQL clause - const sql = util.applyVariableSubstitution(options, vars, event.sql); - - // Return the modified event record - return { - ...event, - REGION, - sql - }; -} - -/** - * Small utility function to look at a bash command line element and decide if it needs to - * be quoted and/or any characters escaped. - * - * Currently, it just takes are of double-quotes and does not do full nested escapes. - */ -function quoteAndEscape(s) { - // Escape any single quote chars using ASCII codes - // @see https://stackoverflow.com/a/42341860/332406 - // - // Throw an exception if there are double-quotes in the command itself, soo much nested - // escaping for now.... - if (s.includes('"')) { - throw new Error(`Double-quotes are not allowed in the container arguments`); - } - - // If there are any space in the string, wrap it in escaped double-quotes - if (s.includes(' ')) { - return `"${s}"`; - } - - return s; -} - -/** - * Take an array of commands and modify it with a list of pre- and post- - * command to run in the image. This is primarily used to move files in - * and out of the container ephemeral storage. - */ - function wrapContainerCommand(options, pre, command, post) { - // We will run all of the commands as a chained bash command, so merge everything - // together using '&&' chaining. - // - // We expect the pre/post arrays to be full commands, while the command array is a list - // on individual pieces of a single command. - if (!pre && !post) { - return command; - } - - const allCommands = []; - - // Pre-commands come first - allCommands.push(...(pre || [])); - - // Turn the primary array of command line arguments into a single command line string. Be sure to - // quote/escape elements with spaces and double-quotes - allCommands.push(command.map(c => quoteAndEscape(c)).join(' ')); - - // And add in the post-commands last - allCommands.push(...(post || [])); - - // Return a new array of commands with everything chained using '&&' so that execution will terminate - // as soon as any command in the chain fails. - return ['/bin/sh', '-c', allCommands.join(' && ')]; -} - -/** - * Returns the appropriate ECS Task Definition name based on the current action - */ -function getTaskDefinitionName(options, event) { - const { GDAL_TASK_DEFINITION, TIPPECANOE_TASK_DEFINITION } = options.env; - const { action } = event; - - switch (action) { - case 'gdal': - case 'ogr2ogr': - case 'enrichment': - return GDAL_TASK_DEFINITION; - case 'tippecanoe': - return TIPPECANOE_TASK_DEFINITION; - } - - throw new Error(`No Fargate Task Definition defined for ${action}`); -} - -/** - * Returns the appropriate ECS Container Definition name based on the current action - */ -function getFargateContainerDefinitionName(options, event) { - const { GDAL_CONTAINER_DEFINITION, TIPPECANOE_CONTAINER_DEFINITION } = options.env; - const { action } = event; - - switch (action) { - case 'gdal': - case 'ogr2ogr': - case 'enrichment': - return GDAL_CONTAINER_DEFINITION; - case 'tippecanoe': - return TIPPECANOE_CONTAINER_DEFINITION - } - - throw new Error(`No Fargate Container Definition Name defined for ${action}`); -} - -/** - * Executes a (known) container in Fargate with the provided command line parameters. - */ -async function executeRawCommand(options, event) { - const { ecs, logger } = options.deps; - const { env } = options; - const { ECS_CLUSTER, VPC_SUBNET_ID } = env; - - // If there are pre- or post- commands defined, wrap up the primary command - const containerCommand = wrapContainerCommand(options, event.pre, event.command, event.post); - - // Get the name of the container that we are using - const containerDefinitionName = getFargateContainerDefinitionName(options, event); - - // Create the full Task parameter object and execute - const params = { - taskDefinition: getTaskDefinitionName(options, event), - cluster: ECS_CLUSTER, - launchType: 'FARGATE', - count: 1, - networkConfiguration: { // Must be specified for tasks with `awsvpc` networking and awsvpc networking is required for FARGATE launch types - awsvpcConfiguration: { - subnets: [ - VPC_SUBNET_ID - ], - assignPublicIp: 'DISABLED', - securityGroups: [] - } - }, - overrides: { - containerOverrides: [ - { - name: containerDefinitionName, - command: containerCommand - } - ] - } - }; - - logger.info(`Executing ECS Task...`, JSON.stringify(params, null, 2)); - return await ecs.runTask(params).promise(); -} - -module.exports = { - createECSTaskDefinition, - createECSTaskVariablesFromS3Record, - executeRawCommand, - getFargateContainerDefinitionName, - getTaskDefinitionName, - wrapContainerCommand -}; \ No newline at end of file diff --git a/infrastructure/functions/detect-changes-for-worker/events/enrichment.json b/infrastructure/functions/detect-changes-for-worker/events/enrichment.json deleted file mode 100644 index 5c80db87..00000000 --- a/infrastructure/functions/detect-changes-for-worker/events/enrichment.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "action": "enrichment", - "sourceBucketName": "j40-sit-justice40-data-harvester-data", - "sourceBucketPrefix": "usds/custom.csv", - "age": 86400, - "censusBucketName": "j40-sit-justice40-data-harvester-data", - "censusBucketPrefix": "census/tabblock2010_01_pophu.zip", - "pre": [ - "wget https://j40-sit-justice40-data-harvester-data.s3.amazonaws.com/usds/${source.Key} -O /tmp/custom.csv" - ], - "command": [ - "--debug", "ON", - "-f", "GeoJSON", - "-sql", "SELECT * FROM ${census.Key:base} LEFT JOIN '/tmp/custom.csv'.custom ON ${census.Key:base}.BLOCKID10 = custom.BLOCKID10", - "/vsis3/j40-sit-justice40-data-harvester-data/joined/${source.Key:base}-${census.Key:base}.json", - "/vsizip//vsicurl/https://j40-sit-justice40-data-harvester-data.s3.amazonaws.com/census/${census.Key}" - ] -} \ No newline at end of file diff --git a/infrastructure/functions/detect-changes-for-worker/events/gdal.json b/infrastructure/functions/detect-changes-for-worker/events/gdal.json deleted file mode 100644 index af1ed576..00000000 --- a/infrastructure/functions/detect-changes-for-worker/events/gdal.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "action": "gdal", - "command": [ - "ogrinfo", - "-al", - "-so", - "-ro", - "/vsizip//vsicurl/https://j40-sit-justice40-data-harvester-data.s3.amazonaws.com/census/tabblock2010_01_pophu.zip" - ] -} \ No newline at end of file diff --git a/infrastructure/functions/detect-changes-for-worker/events/ogr2ogr.json b/infrastructure/functions/detect-changes-for-worker/events/ogr2ogr.json deleted file mode 100644 index e2551b17..00000000 --- a/infrastructure/functions/detect-changes-for-worker/events/ogr2ogr.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "action": "ogr2ogr", - "command": [ - "--debug", "ON", - "-f", - "GeoJSON", - "/vsis3/j40-sit-justice40-data-harvester-data/sources/tabblock2010_01_pophu.json", - "/vsizip//vsicurl/https://j40-sit-justice40-data-harvester-data.s3.amazonaws.com/census/tabblock2010_01_pophu.zip" - ] -} \ No newline at end of file diff --git a/infrastructure/functions/detect-changes-for-worker/events/tippecanoe.json b/infrastructure/functions/detect-changes-for-worker/events/tippecanoe.json deleted file mode 100644 index e8024c04..00000000 --- a/infrastructure/functions/detect-changes-for-worker/events/tippecanoe.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "action": "tippecanoe", - "pre": [ - "curl https://gp-sit-tileservice-tile-cache.s3.amazonaws.com/usds/usa.csv -o /tmp/usa.csv", - "curl https://gp-sit-tileservice-tile-cache.s3.amazonaws.com/usds/tristate.mbtiles -o /tmp/tristate.mbtiles" - ], - "post": [ - "aws s3 cp /tmp/tl_2010_bg_with_data.mbtiles s3://j40-sit-justice40-data-harvester-data/output/tl_2010_bg_with_data.mbtiles", - "tile-join --force -pk -pC -n tl_2010_bg -e /tmp/tiles /tmp/tl_2010_bg_with_data.mbtiles", - "aws s3 sync /tmp/tiles s3://j40-sit-justice40-data-harvester-data/output/tiles" - ], - "command": [ - "tile-join", - "--force", - "-pk", - "-n", - "tl_2010_bg", - "-o", - "/tmp/tl_2010_bg_with_data.mbtiles", - "-c", - "/tmp/usa.csv", - "/tmp/tristate.mbtiles" - ] -} \ No newline at end of file diff --git a/infrastructure/functions/detect-changes-for-worker/gdal.js b/infrastructure/functions/detect-changes-for-worker/gdal.js deleted file mode 100644 index 564fb0cb..00000000 --- a/infrastructure/functions/detect-changes-for-worker/gdal.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Create an appropriate GDAL path to an S3 object - * -function buildDestinationVSIS3Path(_options, name) { - return `/vsis3/${bucket}/${key}`; -} -*/ - -module.exports = { -// buildDestinationVSIS3Path -} \ No newline at end of file diff --git a/infrastructure/functions/detect-changes-for-worker/index.js b/infrastructure/functions/detect-changes-for-worker/index.js deleted file mode 100644 index 350a631e..00000000 --- a/infrastructure/functions/detect-changes-for-worker/index.js +++ /dev/null @@ -1,130 +0,0 @@ -// Standard modules -const fs = require('fs'); -const path = require('path'); -const { DateTime } = require('luxon'); -const logger = console; - -// AWS APIs -const AWS = require('aws-sdk'); - -// Local modules -const util = require('./util'); -const gdal = require('./gdal'); -const s3 = require('./s3'); -const ecs = require('./ecs'); - -async function handler(event) { - // Build the options for the lambda - const options = initialize(event); - - // Determine what action to take - switch (event.action) { - // Execute a raw command against the gdal container - case 'gdal': - return await ecs.executeRawCommand(options, event); - - // Assume that we're running ogr2ogr - case 'ogr2ogr': - return await ecs.executeRawCommand(options, { - ...event, - command: ['ogr2ogr', ...event.command] - }); - - case 'tippecanoe': - return await ecs.executeRawCommand(options, event); - - // Combine USDS data with external data sources - case 'enrichment': - return await enrichDataWithUSDSAttributes(options, event); - - default: - logger.warn(`Unknown action ${event.action}. Exiting`); - break; - } -} - -async function enrichDataWithUSDSAttributes(options, event) { - const { logger } = options.deps; - const { util, ecs, s3 } = options.deps.local; - - // Use the event.age to calculate the custoff for any input files - const cutoff = util.getTimestampCutoff(options); - logger.info(`Cutoff time of ${cutoff}`); - - // Scan the source S3 bucket for items that need to be processed - const { sourceBucketName, sourceBucketPrefix } = event; - const sourceS3Records = await s3.fetchUpdatedS3Objects(options, sourceBucketName, sourceBucketPrefix, cutoff); - - // If there are no input record, exit early - if (sourceS3Records.length === 0) { - logger.info(`There are no objects in s3://${sourceBucketName}/${sourceBucketPrefix} that have been modified after the cutoff date`); - return; - } - - // Scan for the census records - const { censusBucketName, censusBucketPrefix } = event; - const censusS3Records = await s3.fetchS3Objects(options, censusBucketName, censusBucketPrefix); - - // If there are no census datasets, exit early - if (censusS3Records.length === 0) { - logger.info(`There are no objects in s3://${censusBucketName}/${censusBucketPrefix}`); - return; - } - - // Create a set of substitution variables for each S3 record that will be applied to the - // action template - const censusVariables = censusS3Records.map(r => util.createSubstitutionVariablesFromS3Record(options, r, 'census')); - const sourceVariables = sourceS3Records.map(r => util.createSubstitutionVariablesFromS3Record(options, r, 'source')); - - // Kick off an ECS task for each (source, census) pair. - for ( const census of censusVariables ) { - for ( const source of sourceVariables) { - // Merge the variables together - const vars = { ...census, ...source }; - - // Let the logs know what's happening - logger.info(`Enriching ${vars['census.Key']} with ${vars['source.Key']}...`); - - // Apply the substitutions to the pre, post, and command arrays - const pre = util.applyVariableSubstitutionToArray(options, vars, event.pre); - const post = util.applyVariableSubstitutionToArray(options, vars, event.post); - const command = util.applyVariableSubstitutionToArray(options, vars, event.command); - - await ecs.executeRawCommand(options, { - ...event, - pre, - command: ['ogr2ogr', ...command], - post - }); - } - } -} - -/** - * Wrap all dependencies in an object in order to inject as appropriate. - */ -function initialize(event) { - logger.debug('event:', JSON.stringify(event, null, 2)); - return { - deps: { - DateTime, - fs, - logger, - path, - s3: new AWS.S3(), - ecs: new AWS.ECS(), - local: { - ecs, - gdal, - s3, - util - } - }, - env: process.env, - event - }; -} - -module.exports = { - handler -}; diff --git a/infrastructure/functions/detect-changes-for-worker/package-lock.json b/infrastructure/functions/detect-changes-for-worker/package-lock.json deleted file mode 100644 index c47b8543..00000000 --- a/infrastructure/functions/detect-changes-for-worker/package-lock.json +++ /dev/null @@ -1,968 +0,0 @@ -{ - "name": "detect-changes-for-worker", - "version": "0.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } - } - }, - "@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "luxon": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.27.0.tgz", - "integrity": "sha512-VKsFsPggTA0DvnxtJdiExAucKdAnwbCCNlMM5ENvHlxubqWd0xhZcdb4XgZ7QFNhaRhilXCFxHuoObP5BNA4PA==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", - "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } -} diff --git a/infrastructure/functions/detect-changes-for-worker/package.json b/infrastructure/functions/detect-changes-for-worker/package.json deleted file mode 100644 index ee4d6ae2..00000000 --- a/infrastructure/functions/detect-changes-for-worker/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "detect-changes-for-worker", - "version": "0.0.1", - "description": "", - "scripts": { - "test:gdal": "cat ./events/gdal.json | docker run --rm -v ${PWD}:/var/task --env-file ./test.env -i -e DOCKER_LAMBDA_USE_STDIN=1 lambci/lambda:nodejs12.x index.handler", - "test:tippecanoe": "cat ./events/tippecanoe.json | docker run --rm -v ${PWD}:/var/task --env-file ./test.env -i -e DOCKER_LAMBDA_USE_STDIN=1 lambci/lambda:nodejs12.x index.handler", - "test:enrichment": "cat ./events/enrichment.json | docker run --rm -v ${PWD}:/var/task --env-file ./test.env -i -e DOCKER_LAMBDA_USE_STDIN=1 lambci/lambda:nodejs12.x index.handler" - }, - "author": "Xentity", - "license": "ISC", - "dependencies": { - "luxon": "^1.27.0" - }, - "devDependencies": { - "eslint": "^7.29.0" - } -} diff --git a/infrastructure/functions/detect-changes-for-worker/s3.js b/infrastructure/functions/detect-changes-for-worker/s3.js deleted file mode 100644 index c297ae8c..00000000 --- a/infrastructure/functions/detect-changes-for-worker/s3.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Helper function to determine if we should interpret an S3 object as - * a "simple" file or a folder. - */ -function isSimpleObject(c, prefix) { - // If the object ends with a separator charater, interpret that as a folder - if (c.Key.endsWith('/')) { - return false; - } - - // If the object is more deeply nested than the prefix, then ignore, e.g. - // prefix = /foo/bar = two separators - // c.Key = /foo/bar/baz = three separators [skip] - // c.Key = /foo/bar.txt = two separators [pass] - // This doesn't give the *exact* count, but all we really care about is that - // the value is the same for the prefix and the S3 Key. - const separatorCount = c.Key.split('/').length; - const prefixSeparatorCount = prefix.split('/').length; - - return separatorCount === prefixSeparatorCount; -} - -/** - * Return all of the simple S3 objects from a prefix that have a LastModified - * date after a cutoff date. - * - * This returns objects that have recently changed for re-processing. - */ -function fetchUpdatedS3Objects (options, bucket, prefix, cutoff) { - // Define a filter function that only looks at object on a single level of the - // bucket and removes any objects with a LastModified timestamp prior to the cutoff - const threshold = cutoff.toMillis(); - const filterFunc = (c) => isSimpleObject(c, prefix) && (threshold < c.LastModified.getTime()); - - return fetchS3Objects(options, bucket, prefix, filterFunc); -} - -/** - * Basic utility function to return S3 object from a bucket that match a given prefix. An - * optional filtering function can be passed in. - */ -async function fetchS3Objects (options, bucket, prefix, filterFunc = () => true) { - const { s3 } = options.deps; - const objects = []; - - // Limit the results to items in this bucket with a specific prefix - const params = { - Bucket: bucket, - Prefix: prefix - }; - - do { - // Get all of the initial objects - const response = await s3.listObjectsV2(params).promise(); - - // Optionally, filter out objects - const contents = response.Contents.filter(filterFunc); - objects.push(...contents); - - params.ContinuationToken = response.IsTruncated - ? response.NextContinuationToken - : null; - } while (params.ContinuationToken); - - return objects; -} - -module.exports = { - isSimpleObject, - fetchS3Objects, - fetchUpdatedS3Objects -}; \ No newline at end of file diff --git a/infrastructure/functions/detect-changes-for-worker/taskDefinitions/ogr2ogr.json b/infrastructure/functions/detect-changes-for-worker/taskDefinitions/ogr2ogr.json deleted file mode 100644 index a09be1e1..00000000 --- a/infrastructure/functions/detect-changes-for-worker/taskDefinitions/ogr2ogr.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "containerDefinitions": [ - { - "name": "ECSUSDSJustice40Worker", - "image": "osgeo/gdal:alpine-small-latest", - "cpu": 1024, - "environment": [ - { - "name": "AWS_REGION", - "value": "${REGION}" - } - ], - "command": [ - "ogr2ogr", - "-f", "GeoJSON", - "-sql", "${sql}", - "${output}", - "${input}" - ], - "memory": 1024, - "essential": true - } - ], - "family": "" -} \ No newline at end of file diff --git a/infrastructure/functions/detect-changes-for-worker/taskDefinitions/ogr2ogr_raw.json b/infrastructure/functions/detect-changes-for-worker/taskDefinitions/ogr2ogr_raw.json deleted file mode 100644 index b5c174d9..00000000 --- a/infrastructure/functions/detect-changes-for-worker/taskDefinitions/ogr2ogr_raw.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "containerDefinitions": [ - { - "name": "ECSUSDSJustice40Worker", - "image": "osgeo/gdal:alpine-small-latest", - "cpu": 1024, - "environment": [ - { - "name": "AWS_REGION", - "value": "${REGION}" - } - ], - "command": [ - "ogr2ogr" - ], - "memory": 1024, - "essential": true - } - ], - "family": "" -} \ No newline at end of file diff --git a/infrastructure/functions/detect-changes-for-worker/test.env b/infrastructure/functions/detect-changes-for-worker/test.env deleted file mode 100644 index bee2ee83..00000000 --- a/infrastructure/functions/detect-changes-for-worker/test.env +++ /dev/null @@ -1,19 +0,0 @@ -REGION=us-east-1 -STAGE=sit - -# ESC Cluster name that will from the containers -ECS_CLUSTER=j40-sit-justice40-data-harvester-ECSCluster-ktXGGU9zjwkb - -# VPC Private Subnet that has a NAT GAteway -VPC_SUBNET_ID=subnet-07e68cb57322f7b1f - -# Names of the container and task names. -GDAL_TASK_DEFINITION=sit-justice40-data-harvester-gdal -GDAL_CONTAINER_DEFINITION=sit-justice40-data-harvester-osgeo-gdal -TIPPECANOE_TASK_DEFINITION=sit-justice40-data-harvester-tippecanoe -TIPPECANOE_CONTAINER_DEFINITION=sit-justice40-data-harvester-mgiddens-tippecanoe - -# AWS Credentials -AWS_ACCESS_KEY_ID= -AWS_SECRET_ACCESS_KEY= -AWS_DEFAULT_REGION=us-east-1 \ No newline at end of file diff --git a/infrastructure/functions/detect-changes-for-worker/util.js b/infrastructure/functions/detect-changes-for-worker/util.js deleted file mode 100644 index 52921467..00000000 --- a/infrastructure/functions/detect-changes-for-worker/util.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Create a luxon object representing a cutoff based on the `age` - * passed in from the event. - * - * A null or zero value for age returns the current time. - */ -function getTimestampCutoff(options) { - const { event } = options; - const { DateTime } = options.deps; - - if (!event.age) { - return DateTime.fromMillis(0); - } - - return DateTime.now().minus({ seconds: event.age }); -} - -/** - * Create a set of substitution variables from an S3 record - */ -function createSubstitutionVariablesFromS3Record(options, record, prefix) { - const { path } = options.deps; - - const fullKey = record.Key; - const baseKey = path.basename(fullKey); - const baseKeyExt = path.extname(baseKey); - const baseKeyNoExt = path.basename(baseKey, baseKeyExt); - - // Define all of the valid substitution variables - const vars = {}; - vars[`${prefix}.Key:full`] = fullKey; - vars[`${prefix}.Key`] = baseKey; - vars[`${prefix}.Key:base`] = baseKeyNoExt; - vars[`${prefix}.Key:ext`] = baseKeyExt; - - return vars; -} - -/** - * Given a collection of key/value input variables, replace - * occurences of ${key} in the input with the corresponding - * values - */ -function applyVariableSubstitution(options, vars, input) { - let result = input; - for (const [key, value] of Object.entries(vars)) { - const token = '${' + key + '}'; - - // Use the split-join-method because the tokens have special characters which - // confuses the Regular Expression constructor - // @see https://stackoverflow.com/a/17606289/332406 - result = result.split(token).join(value); - } - - return result; -} - -/** - * Generaliztion of the previsou function. - */ -function applyVariableSubstitutionToArray(options, vars, inputs) { - return (inputs || []).map(input => applyVariableSubstitution(options, vars, input)); -} - -module.exports = { - applyVariableSubstitution, - applyVariableSubstitutionToArray, - createSubstitutionVariablesFromS3Record, - getTimestampCutoff -}; \ No newline at end of file diff --git a/infrastructure/package-lock.json b/infrastructure/package-lock.json deleted file mode 100644 index 76c724fc..00000000 --- a/infrastructure/package-lock.json +++ /dev/null @@ -1,5767 +0,0 @@ -{ - "name": "infrastructure", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "2-thenable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/2-thenable/-/2-thenable-1.0.0.tgz", - "integrity": "sha512-HqiDzaLDFCXkcCO/SwoyhRwqYtINFHF7t9BDRq4x90TOKNAJpiqUt9X5lQ08bwxYzc067HUywDjGySpebHcUpw==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.47" - } - }, - "@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", - "dev": true, - "requires": { - "debug": "^4.1.1" - } - }, - "@kwsites/promise-deferred": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", - "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=", - "dev": true - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "dev": true - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "dev": true - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=", - "dev": true - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "dev": true, - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=", - "dev": true - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=", - "dev": true - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=", - "dev": true - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=", - "dev": true - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=", - "dev": true - }, - "@serverless/cli": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@serverless/cli/-/cli-1.5.2.tgz", - "integrity": "sha512-FMACx0qPD6Uj8U+7jDmAxEe1tdF9DsuY5VsG45nvZ3olC9xYJe/PMwxWsjXfK3tg1HUNywYAGCsy7p5fdXhNzw==", - "dev": true, - "requires": { - "@serverless/core": "^1.1.2", - "@serverless/template": "^1.1.3", - "@serverless/utils": "^1.2.0", - "ansi-escapes": "^4.3.1", - "chalk": "^2.4.2", - "chokidar": "^3.4.1", - "dotenv": "^8.2.0", - "figures": "^3.2.0", - "minimist": "^1.2.5", - "prettyoutput": "^1.2.0", - "strip-ansi": "^5.2.0" - }, - "dependencies": { - "@serverless/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@serverless/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-aI/cpGVUhWbJUR8QDMtPue28EU4ViG/L4/XKuZDfAN2uNQv3NRjwEFIBi/cxyfQnMTYVtMLe9wDjuwzOT4ENzA==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "lodash": "^4.17.15", - "rc": "^1.2.8", - "type": "^2.0.0", - "uuid": "^3.4.0", - "write-file-atomic": "^2.4.3" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "@serverless/component-metrics": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@serverless/component-metrics/-/component-metrics-1.0.8.tgz", - "integrity": "sha512-lOUyRopNTKJYVEU9T6stp2irwlTDsYMmUKBOUjnMcwGveuUfIJqrCOtFLtIPPj3XJlbZy5F68l4KP9rZ8Ipang==", - "dev": true, - "requires": { - "node-fetch": "^2.6.0", - "shortid": "^2.2.14" - } - }, - "@serverless/core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@serverless/core/-/core-1.1.2.tgz", - "integrity": "sha512-PY7gH+7aQ+MltcUD7SRDuQODJ9Sav9HhFJsgOiyf8IVo7XVD6FxZIsSnpMI6paSkptOB7n+0Jz03gNlEkKetQQ==", - "dev": true, - "requires": { - "fs-extra": "^7.0.1", - "js-yaml": "^3.13.1", - "package-json": "^6.3.0", - "ramda": "^0.26.1", - "semver": "^6.1.1" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@serverless/dashboard-plugin": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@serverless/dashboard-plugin/-/dashboard-plugin-5.4.1.tgz", - "integrity": "sha512-lOj6jJIzZEPfiaMi70HNWD2uFd8+hzfAArsprtDvsek2H+1JSQ8I4vCtlLOf/X0hQn3sIHI7JQizathkzXkBrg==", - "dev": true, - "requires": { - "@serverless/event-mocks": "^1.1.1", - "@serverless/platform-client": "^4.2.3", - "@serverless/utils": "^5.3.0", - "chalk": "^4.1.1", - "child-process-ext": "^2.1.1", - "chokidar": "^3.5.2", - "cli-color": "^2.0.0", - "flat": "^5.0.2", - "fs-extra": "^9.1.0", - "js-yaml": "^4.1.0", - "jszip": "^3.6.0", - "lodash": "^4.17.21", - "memoizee": "^0.4.15", - "ncjsm": "^4.2.0", - "node-dir": "^0.1.17", - "node-fetch": "^2.6.1", - "open": "^7.4.2", - "semver": "^7.3.5", - "simple-git": "^2.40.0", - "uuid": "^8.3.2", - "yamljs": "^0.3.0" - } - }, - "@serverless/event-mocks": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@serverless/event-mocks/-/event-mocks-1.1.1.tgz", - "integrity": "sha512-YAV5V/y+XIOfd+HEVeXfPWZb8C6QLruFk9tBivoX2roQLWVq145s4uxf8D0QioCueuRzkukHUS4JIj+KVoS34A==", - "dev": true, - "requires": { - "@types/lodash": "^4.14.123", - "lodash": "^4.17.11" - } - }, - "@serverless/platform-client": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@serverless/platform-client/-/platform-client-4.2.3.tgz", - "integrity": "sha512-dyELLbrf/9+O+sjuIL7ymlH8zwCOsG+tf2TjeEjXooVSvNqUoZ4ZadENjxInUV841l0ddwkihwzH/54Yw+/qkg==", - "dev": true, - "requires": { - "adm-zip": "^0.4.13", - "archiver": "^5.3.0", - "axios": "^0.21.1", - "fast-glob": "^3.2.5", - "https-proxy-agent": "^5.0.0", - "ignore": "^5.1.8", - "isomorphic-ws": "^4.0.1", - "js-yaml": "^3.13.1", - "jwt-decode": "^2.2.0", - "minimatch": "^3.0.4", - "querystring": "^0.2.1", - "run-parallel-limit": "^1.1.0", - "throat": "^5.0.0", - "traverse": "^0.6.6", - "ws": "^7.4.6" - }, - "dependencies": { - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "@serverless/platform-client-china": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/@serverless/platform-client-china/-/platform-client-china-2.1.14.tgz", - "integrity": "sha512-ciXVcYcdLlSB9ph94sX/8jmDuY85Yq0fJvwKGzndKPngjVkXs6Gw2tqj91act9nqW541Ycqb/HFh1BhgcDWP7Q==", - "dev": true, - "requires": { - "@serverless/utils-china": "^1.0.14", - "adm-zip": "^0.5.1", - "archiver": "^5.0.2", - "axios": "^0.21.1", - "dotenv": "^8.2.0", - "fast-glob": "^3.2.4", - "fs-extra": "^9.0.1", - "https-proxy-agent": "^5.0.0", - "js-yaml": "^3.14.0", - "minimatch": "^3.0.4", - "querystring": "^0.2.0", - "run-parallel-limit": "^1.0.6", - "traverse": "^0.6.6", - "urlencode": "^1.1.0", - "ws": "^7.3.1" - }, - "dependencies": { - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "@serverless/template": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@serverless/template/-/template-1.1.4.tgz", - "integrity": "sha512-LYC+RmSD4ozStdCxSHInpVWP8h+0sSa0lmPGjAb1Fw4Ppk+LCJqJTrohbhHmF2ixgaIBu6ceNtVTB4qM+2NvIA==", - "dev": true, - "requires": { - "@serverless/component-metrics": "^1.0.8", - "@serverless/core": "^1.1.2", - "graphlib": "^2.1.8", - "ramda": "^0.26.1", - "traverse": "^0.6.6" - } - }, - "@serverless/utils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@serverless/utils/-/utils-5.3.0.tgz", - "integrity": "sha512-cUt1ZYXZ/6Khe/foCucqraRpaTtejc4mICWVjQynwaPaK86/3g4Afu4pV1kEumnbet7N0PLbi+SKr8SHTf6tNQ==", - "dev": true, - "requires": { - "archive-type": "^4.0.0", - "chalk": "^4.1.1", - "ci-info": "^3.2.0", - "content-disposition": "^0.5.3", - "decompress": "^4.2.1", - "ext-name": "^5.0.0", - "file-type": "^16.5.0", - "filenamify": "^4.3.0", - "get-stream": "^6.0.1", - "got": "^11.8.2", - "inquirer": "^7.3.3", - "js-yaml": "^4.1.0", - "jwt-decode": "^3.1.2", - "lodash": "^4.17.21", - "make-dir": "^3.1.0", - "ncjsm": "^4.2.0", - "p-event": "^4.2.0", - "type": "^2.5.0", - "uuid": "^8.3.2", - "write-file-atomic": "^3.0.3" - }, - "dependencies": { - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "jwt-decode": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", - "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - } - } - }, - "@serverless/utils-china": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@serverless/utils-china/-/utils-china-1.1.2.tgz", - "integrity": "sha512-svZV9zZx2vSqR6EPstgaaLu1YHFfQ5PB2rvZAb66XuXwcPGMwAQN1c836H9L35Y/cUXLhFxv0UCpRHShJLYQSw==", - "dev": true, - "requires": { - "@tencent-sdk/capi": "^1.1.8", - "dijkstrajs": "^1.0.1", - "dot-qs": "0.2.0", - "duplexify": "^4.1.1", - "end-of-stream": "^1.4.4", - "got": "^11.8.2", - "https-proxy-agent": "^5.0.0", - "kafka-node": "^5.0.0", - "protobufjs": "^6.9.0", - "qrcode-terminal": "^0.12.0", - "socket.io-client": "^2.3.0", - "winston": "3.2.1" - } - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@tencent-sdk/capi": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@tencent-sdk/capi/-/capi-1.1.8.tgz", - "integrity": "sha512-AmyMQndtxMsM59eDeA0gGiw8T2LzNvDhx/xl+ygFXXrsw+yb/mit73ndHkiHKcRA1EpNHTyD1PN9ATxghzplfg==", - "dev": true, - "requires": { - "@types/request": "^2.48.3", - "@types/request-promise-native": "^1.0.17", - "request": "^2.88.0", - "request-promise-native": "^1.0.8" - } - }, - "@tencent-sdk/cls": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@tencent-sdk/cls/-/cls-0.2.1.tgz", - "integrity": "sha512-nSEPLAQyXf694XqoXi/OnWjfaJNPoo+JaPt81Kpy1QogOSZdEqEebgGj/ROs8kPjRa3kf+6+0s8MSQRtJBOOyQ==", - "dev": true, - "requires": { - "got": "^11.8.0" - } - }, - "@tencent-sdk/common": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@tencent-sdk/common/-/common-0.1.0.tgz", - "integrity": "sha512-WHVGulaFv/CLwSqYC5501FCMNclu7B7nH1OminksjV2HSonIvx3o3Pms4+2/2Lse/sB5RCmPiiitV7g09b4mWw==", - "dev": true, - "requires": { - "@tencent-sdk/capi": "^1.1.8", - "camelcase": "^6.2.0", - "type-fest": "^1.0.2" - }, - "dependencies": { - "type-fest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.2.1.tgz", - "integrity": "sha512-SbmIRuXhJs8KTneu77Ecylt9zuqL683tuiLYpTRil4H++eIhqCmx6ko6KAFem9dty8sOdnEiX7j4K1nRE628fQ==", - "dev": true - } - } - }, - "@tencent-sdk/faas": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@tencent-sdk/faas/-/faas-0.1.5.tgz", - "integrity": "sha512-6wEkJCm1rN9LOgH/BZHW6ajJpYZQuf1qwfW+tGTNkczW0RepWASznS6MCzWC9HX09oosVpg8sGCGtcgWQSP1Qg==", - "dev": true, - "requires": { - "@tencent-sdk/capi": "^1.1.8", - "@tencent-sdk/cls": "0.2.1", - "@tencent-sdk/common": "0.1.0", - "camelcase": "^6.2.0", - "dayjs": "^1.10.4" - } - }, - "@tokenizer/token": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.1.1.tgz", - "integrity": "sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w==", - "dev": true - }, - "@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", - "dev": true - }, - "@types/debug": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", - "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", - "dev": true - }, - "@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", - "dev": true - }, - "@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/lodash": { - "version": "4.14.170", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.170.tgz", - "integrity": "sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==", - "dev": true - }, - "@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==", - "dev": true - }, - "@types/node": { - "version": "15.12.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.4.tgz", - "integrity": "sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA==", - "dev": true - }, - "@types/readable-stream": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.10.tgz", - "integrity": "sha512-xwSXvAv9x4B9Vj88AMZnFyEVLilz1EBxKvRUhGqIF4nJpRQBSTm7jS236X4Y9Y2qPsVvaMxwrGJlNhLHEahlFQ==", - "dev": true, - "requires": { - "@types/node": "*", - "safe-buffer": "*" - } - }, - "@types/request": { - "version": "2.48.5", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.5.tgz", - "integrity": "sha512-/LO7xRVnL3DxJ1WkPGDQrp4VTV1reX9RkC85mJ+Qzykj2Bdw+mG15aAfDahc76HtknjzE16SX/Yddn6MxVbmGQ==", - "dev": true, - "requires": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" - } - }, - "@types/request-promise-native": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/@types/request-promise-native/-/request-promise-native-1.0.17.tgz", - "integrity": "sha512-05/d0WbmuwjtGMYEdHIBZ0tqMJJQ2AD9LG2F6rKNBGX1SSFR27XveajH//2N/XYtual8T9Axwl+4v7oBtPUZqg==", - "dev": true, - "requires": { - "@types/request": "*" - } - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==", - "dev": true - }, - "adm-zip": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.5.tgz", - "integrity": "sha512-IWwXKnCbirdbyXSfUDvCCrmYrOHANRZcc8NcRrvTlIApdl7PwE9oGcsYvNeJPAVY1M+70b4PxXGKIf8AEuiQ6w==", - "dev": true - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, - "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true, - "optional": true - }, - "archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", - "dev": true, - "requires": { - "file-type": "^4.2.0" - }, - "dependencies": { - "file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", - "dev": true - } - } - }, - "archiver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", - "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "async": "^3.2.0", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" - } - }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "requires": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "aws-sdk": { - "version": "2.931.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.931.0.tgz", - "integrity": "sha512-Db97/aJq8zYl8mHzY6dNO6m9S89TqN4HEUUc2aCYQCTyMb/eNrjf+uZTnutnQbJkClqHzxFcWc3aqe5VlTac/A==", - "dev": true, - "requires": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "dev": true, - "requires": { - "follow-redirects": "^1.10.0" - } - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true, - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "boxen": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", - "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.0", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, - "buffermaker": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/buffermaker/-/buffermaker-1.2.1.tgz", - "integrity": "sha512-IdnyU2jDHU65U63JuVQNTHiWjPRH0CS3aYd/WPaEwyX84rFdukhOduAVb1jwUScmb5X0JWPw8NZOrhoLMiyAHQ==", - "dev": true, - "requires": { - "long": "1.1.2" - } - }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "dev": true - }, - "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true - }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, - "cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true, - "requires": { - "traverse": ">=0.3.0 <0.4" - }, - "dependencies": { - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "dev": true - } - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "child-process-ext": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/child-process-ext/-/child-process-ext-2.1.1.tgz", - "integrity": "sha512-0UQ55f51JBkOFa+fvR76ywRzxiPwQS3Xe8oe5bZRphpv+dIMeerW5Zn5e4cUy4COJwVtJyU0R79RMnw+aCqmGA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.5", - "es5-ext": "^0.10.53", - "log": "^6.0.0", - "split2": "^3.1.1", - "stream-promise": "^3.2.0" - } - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true, - "optional": true - }, - "ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", - "dev": true - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "cli-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.0.tgz", - "integrity": "sha512-a0VZ8LeraW0jTuCkuAGMNufareGHhyZU9z8OGsW0gXd1hZGi1SRuNRXdbGkraBBKnhyUhyebFWnRbp+dIn0f0A==", - "dev": true, - "requires": { - "ansi-regex": "^2.1.1", - "d": "^1.0.1", - "es5-ext": "^0.10.51", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.14", - "timers-ext": "^0.1.7" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "optional": true - }, - "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=", - "dev": true - }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", - "dev": true - }, - "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", - "dev": true, - "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "compress-commons": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", - "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true, - "optional": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "dev": true, - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } - }, - "crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - }, - "dependencies": { - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "dayjs": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.5.tgz", - "integrity": "sha512-BUFis41ikLz+65iH6LHQCDm4YPMj5r1YFLdupPIyM4SGcXMmtiLQ7U37i+hGS8urIuqe7I/ou3IS1jVc4nbN4g==", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", - "dev": true, - "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - } - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "dev": true, - "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "dependencies": { - "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - } - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dev": true, - "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "dev": true - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "dev": true, - "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - } - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "dev": true, - "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "deferred": { - "version": "0.7.11", - "resolved": "https://registry.npmjs.org/deferred/-/deferred-0.7.11.tgz", - "integrity": "sha512-8eluCl/Blx4YOGwMapBvXRKxHXhA8ejDXYzEaK8+/gtcm8hRMhSLmXSqDmNUKNc/C8HNSmuyyp/hflhqDAvK2A==", - "dev": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.50", - "event-emitter": "^0.3.5", - "next-tick": "^1.0.0", - "timers-ext": "^0.1.7" - } - }, - "delay": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/delay/-/delay-4.4.1.tgz", - "integrity": "sha512-aL3AhqtfhOlT/3ai6sWXeqwnw63ATNpnUiN4HL7x9q+My5QtHlO3OIkasmug9LKzpheLdmUKGRKnYXYAS7FQkQ==", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true - }, - "denque": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", - "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==", - "dev": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true, - "optional": true - }, - "diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "dev": true, - "requires": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" - } - }, - "dijkstrajs": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", - "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dot-qs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dot-qs/-/dot-qs-0.2.0.tgz", - "integrity": "sha1-02UX/iS3zaYfznpQJqACSvr1pDk=", - "dev": true - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "duplexify": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", - "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", - "dev": true, - "requires": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "duration": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", - "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.46" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "dev": true, - "requires": { - "env-variable": "0.0.x" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "engine.io-client": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", - "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", - "dev": true, - "requires": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.6.2", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true - } - } - }, - "engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "env-variable": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", - "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==", - "dev": true - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - }, - "dependencies": { - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - } - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-promisify": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", - "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==", - "dev": true - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - }, - "dependencies": { - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - } - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esniff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-1.1.0.tgz", - "integrity": "sha1-xmhJIp+RRk3t4uDUAgHtar9l8qw=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.12" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "essentials": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/essentials/-/essentials-1.1.1.tgz", - "integrity": "sha512-SmaxoAdVu86XkZQM/u6TYSu96ZlFGwhvSk1l9zAkznFuQkMb9mRDS2iq/XWDow7R8OwBwdYH8nLyDKznMD+GWw==", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", - "dev": true - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true, - "optional": true - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "requires": { - "type": "^2.0.0" - } - }, - "ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dev": true, - "requires": { - "mime-db": "^1.28.0" - } - }, - "ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dev": true, - "requires": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "fecha": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", - "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==", - "dev": true - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-type": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.0.tgz", - "integrity": "sha512-OxgWA9tbL8N/WP00GD1z8O0MiwQKFyWRs1q+3FhjdvcGgKqwxcejyGWso3n4/IMU6DdwV+ARZ4A7TTnPkDcSiw==", - "dev": true, - "requires": { - "readable-web-to-node-stream": "^3.0.0", - "strtok3": "^6.0.3", - "token-types": "^2.0.0" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", - "dev": true - }, - "filenamify": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", - "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", - "dev": true, - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" - } - }, - "filesize": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.3.0.tgz", - "integrity": "sha512-ytx0ruGpDHKWVoiui6+BY/QMNngtDQ/pJaFwfBpQif0J63+E8DLdFyqS3NkKQn7vIruUEpoGD9JUJSg7Kp+I0g==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-requires": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-requires/-/find-requires-1.0.0.tgz", - "integrity": "sha512-UME7hNwBfzeISSFQcBEDemEEskpOjI/shPrpJM5PI4DSdn6hX0dmz+2dL70blZER2z8tSnTRL+2rfzlYgtbBoQ==", - "dev": true, - "requires": { - "es5-ext": "^0.10.49", - "esniff": "^1.1.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "formidable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", - "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==", - "dev": true - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "dependencies": { - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fs2": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/fs2/-/fs2-0.3.9.tgz", - "integrity": "sha512-WsOqncODWRlkjwll+73bAxVW3JPChDgaPX3DT4iTTm73UmG4VgALa7LaFblP232/DN60itkOrPZ8kaP1feksGQ==", - "dev": true, - "requires": { - "d": "^1.0.1", - "deferred": "^0.7.11", - "es5-ext": "^0.10.53", - "event-emitter": "^0.3.5", - "ignore": "^5.1.8", - "memoizee": "^0.4.14", - "type": "^2.1.0" - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "dev": true, - "optional": true - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "got": { - "version": "11.8.2", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", - "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==", - "dev": true, - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.1", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "dependencies": { - "@sindresorhus/is": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz", - "integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - } - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "requires": { - "mimic-response": "^3.1.0" - } - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "keyv": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", - "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true - }, - "normalize-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.0.1.tgz", - "integrity": "sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ==", - "dev": true - }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true - }, - "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "requires": { - "lowercase-keys": "^2.0.0" - } - } - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "inquirer-autocomplete-prompt": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.4.0.tgz", - "integrity": "sha512-qHgHyJmbULt4hI+kCmwX92MnSxDs/Yhdt4wPA30qnoa01OF6uTXV8yvH4hKXgdaTNmkZ9D01MHjqKYEuJN+ONw==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "figures": "^3.2.0", - "run-async": "^2.4.0", - "rxjs": "^6.6.2" - } - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - } - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "json-cycle": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.3.0.tgz", - "integrity": "sha512-FD/SedD78LCdSvJaOUQAXseT8oQBb5z6IVYaQaCrVUlu9zOAr1BDdKyVYQaSD/GDsAMrXpKcOyBD4LIl8nfjHw==", - "dev": true - }, - "json-refs": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-3.0.15.tgz", - "integrity": "sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw==", - "dev": true, - "requires": { - "commander": "~4.1.1", - "graphlib": "^2.1.8", - "js-yaml": "^3.13.1", - "lodash": "^4.17.15", - "native-promise-only": "^0.8.1", - "path-loader": "^1.0.10", - "slash": "^3.0.0", - "uri-js": "^4.2.2" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jszip": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", - "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", - "dev": true, - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "jwt-decode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", - "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=", - "dev": true - }, - "kafka-node": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/kafka-node/-/kafka-node-5.0.0.tgz", - "integrity": "sha512-dD2ga5gLcQhsq1yNoQdy1MU4x4z7YnXM5bcG9SdQuiNr5KKuAmXixH1Mggwdah5o7EfholFbcNDPSVA6BIfaug==", - "dev": true, - "requires": { - "async": "^2.6.2", - "binary": "~0.3.0", - "bl": "^2.2.0", - "buffer-crc32": "~0.2.5", - "buffermaker": "~1.2.0", - "debug": "^2.1.3", - "denque": "^1.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "nested-error-stacks": "^2.0.0", - "optional": "^0.1.3", - "retry": "^0.10.1", - "snappy": "^6.0.1", - "uuid": "^3.0.0" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "kuler": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "dev": true, - "requires": { - "colornames": "^1.1.1" - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "requires": { - "immediate": "~3.0.5" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", - "dev": true - }, - "log": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log/-/log-6.0.0.tgz", - "integrity": "sha512-sxChESNYJ/EcQv8C7xpmxhtTOngoXuMEqGDAkhXBEmt3MAzM3SM/TmIBOqnMEVdrOv1+VgZoYbo6U2GemQiU4g==", - "dev": true, - "requires": { - "d": "^1.0.0", - "duration": "^0.2.2", - "es5-ext": "^0.10.49", - "event-emitter": "^0.3.5", - "sprintf-kit": "^2.0.0", - "type": "^1.0.1" - }, - "dependencies": { - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - } - } - }, - "logform": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", - "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", - "dev": true, - "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "triple-beam": "^1.3.0" - } - }, - "long": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/long/-/long-1.1.2.tgz", - "integrity": "sha1-6u9ZUcp1UdlpJrgtokLbnWso+1M=", - "dev": true - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "dev": true, - "requires": { - "es5-ext": "~0.10.2" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "dev": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", - "dev": true, - "requires": { - "mime-db": "1.48.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "dev": true, - "optional": true - }, - "nanoid": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", - "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==", - "dev": true - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true, - "optional": true - }, - "native-promise-only": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", - "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=", - "dev": true - }, - "ncjsm": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ncjsm/-/ncjsm-4.2.0.tgz", - "integrity": "sha512-L2Qij4PTy7Bs4TB24zs7FLIAYJTaR5JPvSig5hIcO059LnMCNgy6MfHHNyg8s/aekPKrTqKX90gBGt3NNGvhdw==", - "dev": true, - "requires": { - "builtin-modules": "^3.2.0", - "deferred": "^0.7.11", - "es5-ext": "^0.10.53", - "es6-set": "^0.1.5", - "find-requires": "^1.0.0", - "fs2": "^0.3.9", - "type": "^2.5.0" - } - }, - "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-abi": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.0.tgz", - "integrity": "sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg==", - "dev": true, - "optional": true, - "requires": { - "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "optional": true - } - } - }, - "node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", - "dev": true, - "requires": { - "minimatch": "^3.0.2" - } - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true - }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", - "dev": true, - "optional": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "optional": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "one-time": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=", - "dev": true - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, - "optional": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz", - "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "requires": { - "p-timeout": "^3.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", - "dev": true - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-loader": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.10.tgz", - "integrity": "sha512-CMP0v6S6z8PHeJ6NFVyVJm6WyJjIwFvyz2b0n2/4bKdS/0uZa/9sKUlYZzubrn3zuDRU0zIuEDX9DZYQ2ZI8TA==", - "dev": true, - "requires": { - "native-promise-only": "^0.8.1", - "superagent": "^3.8.3" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "path2": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/path2/-/path2-0.1.0.tgz", - "integrity": "sha1-Y5golCzb2kSkGkWwdK6Ic0g7Tvo=", - "dev": true - }, - "peek-readable": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-3.1.3.tgz", - "integrity": "sha512-mpAcysyRJxmICBcBa5IXH7SZPvWkcghm6Fk8RekoS3v+BpbSzlZzuWbMx+GXrlUwESi9qHar4nVEZNMKylIHvg==", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "prebuild-install": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.0.tgz", - "integrity": "sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg==", - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "os-homedir": "^1.0.1", - "pump": "^2.0.1", - "rc": "^1.2.7", - "simple-get": "^2.7.0", - "tar-fs": "^1.13.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "optional": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "prettyoutput": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prettyoutput/-/prettyoutput-1.2.0.tgz", - "integrity": "sha512-G2gJwLzLcYS+2m6bTAe+CcDpwak9YpcvpScI0tE4WYb2O3lEZD/YywkMNpGqsSx5wttGvh2UXaKROTKKCyM2dw==", - "dev": true, - "requires": { - "colors": "1.3.x", - "commander": "2.19.x", - "lodash": "4.17.x" - } - }, - "printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise-queue": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/promise-queue/-/promise-queue-2.2.5.tgz", - "integrity": "sha1-L29ffA9tCBCelnZZx5uIqe1ek7Q=", - "dev": true - }, - "protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", - "dev": true, - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "dependencies": { - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "dev": true - } - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qrcode-terminal": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", - "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "querystring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, - "ramda": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", - "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", - "dev": true - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readable-web-to-node-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.1.tgz", - "integrity": "sha512-4zDC6CvjUyusN7V0QLsXVB7pJCD9+vtrM9bYDRv6uBQ+SKfx36rp5AFNPRgh9auKRul/a1iFZJYXcCbwRL+SaA==", - "dev": true, - "requires": { - "@types/readable-stream": "^2.3.9", - "readable-stream": "^3.6.0" - } - }, - "readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "replaceall": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/replaceall/-/replaceall-0.1.6.tgz", - "integrity": "sha1-gdgax663LX9cSUKt8ml6MiBojY4=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "resolve-alpn": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.1.2.tgz", - "integrity": "sha512-8OyfzhAtA32LVUsJSke3auIyINcwdh5l3cvYKdKO0nvsYSKuiLfTM5i78PJswFPT8y6cPW+L1v6/hE95chcpDA==", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", - "dev": true - }, - "seek-bzip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", - "dev": true, - "requires": { - "commander": "^2.8.1" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serverless": { - "version": "2.48.0", - "resolved": "https://registry.npmjs.org/serverless/-/serverless-2.48.0.tgz", - "integrity": "sha512-1CGCKr+7226psdyuGYFC54khCMUUBlLt2QPEAZtY00ZHMy8yOxvjMXAdfHAVnCdo+YH419MW3jFJhGuwVUsDyw==", - "dev": true, - "requires": { - "@serverless/cli": "^1.5.2", - "@serverless/components": "^3.12.0", - "@serverless/dashboard-plugin": "^5.4.0", - "@serverless/utils": "^5.3.0", - "ajv": "^6.12.6", - "ajv-keywords": "^3.5.2", - "archiver": "^5.3.0", - "aws-sdk": "^2.931.0", - "bluebird": "^3.7.2", - "boxen": "^5.0.1", - "cachedir": "^2.3.0", - "chalk": "^4.1.1", - "child-process-ext": "^2.1.1", - "ci-info": "^3.2.0", - "d": "^1.0.1", - "dayjs": "^1.10.5", - "decompress": "^4.2.1", - "dotenv": "^10.0.0", - "essentials": "^1.1.1", - "fastest-levenshtein": "^1.0.12", - "filesize": "^6.3.0", - "fs-extra": "^9.1.0", - "get-stdin": "^8.0.0", - "globby": "^11.0.4", - "got": "^11.8.2", - "graceful-fs": "^4.2.6", - "https-proxy-agent": "^5.0.0", - "is-docker": "^2.2.1", - "is-wsl": "^2.2.0", - "js-yaml": "^4.1.0", - "json-cycle": "^1.3.0", - "json-refs": "^3.0.15", - "lodash": "^4.17.21", - "memoizee": "^0.4.15", - "micromatch": "^4.0.4", - "ncjsm": "^4.2.0", - "node-fetch": "^2.6.1", - "object-hash": "^2.2.0", - "path2": "^0.1.0", - "promise-queue": "^2.2.5", - "replaceall": "^0.1.6", - "semver": "^7.3.5", - "tabtab": "^3.0.2", - "tar": "^6.1.0", - "timers-ext": "^0.1.7", - "type": "^2.5.0", - "untildify": "^4.0.0", - "uuid": "^8.3.2", - "yaml-ast-parser": "0.0.43" - }, - "dependencies": { - "@serverless/components": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/@serverless/components/-/components-3.12.0.tgz", - "integrity": "sha512-USK6QCREd/SjsDDhumrsORkyQYew9WvXGjSbh5GvoGNKbqZlMiNWnua/DXmpz1uf2qaXzJO0LZEtpsiDBPX59w==", - "dev": true, - "requires": { - "@serverless/platform-client": "^4.2.2", - "@serverless/platform-client-china": "^2.1.9", - "@serverless/utils": "^4.0.0", - "@tencent-sdk/faas": "^0.1.4", - "adm-zip": "^0.5.4", - "ansi-escapes": "^4.3.1", - "chalk": "^4.1.0", - "child-process-ext": "^2.1.1", - "chokidar": "^3.5.1", - "dayjs": "^1.10.4", - "dotenv": "^8.2.0", - "fastest-levenshtein": "^1.0.12", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "got": "^11.8.2", - "graphlib": "^2.1.8", - "https-proxy-agent": "^5.0.0", - "inquirer-autocomplete-prompt": "^1.3.0", - "js-yaml": "^3.14.1", - "memoizee": "^0.4.14", - "minimist": "^1.2.5", - "open": "^7.3.1", - "prettyoutput": "^1.2.0", - "ramda": "^0.27.1", - "semver": "^7.3.4", - "strip-ansi": "^6.0.0", - "tencent-serverless-http": "^1.3.1", - "traverse": "^0.6.6", - "uuid": "^8.3.2" - }, - "dependencies": { - "@serverless/utils": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@serverless/utils/-/utils-4.1.0.tgz", - "integrity": "sha512-cl5uPaGg72z0sCUpF0zsOhwYYUV72Gxc1FwFfxltO8hSvMeFDvwD7JrNE4kHcIcKRjwPGbSH0fdVPUpErZ8Mog==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "ci-info": "^3.1.1", - "inquirer": "^7.3.3", - "js-yaml": "^4.1.0", - "jwt-decode": "^3.1.2", - "lodash": "^4.17.21", - "ncjsm": "^4.1.0", - "type": "^2.5.0", - "uuid": "^8.3.2", - "write-file-atomic": "^3.0.3" - }, - "dependencies": { - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - } - } - }, - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - } - } - } - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "jwt-decode": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", - "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", - "dev": true - }, - "ramda": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz", - "integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - } - } - }, - "serverless-certificate-creator": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/serverless-certificate-creator/-/serverless-certificate-creator-1.5.3.tgz", - "integrity": "sha512-aoMjBPGoKDb//mgP5SJbsQCpGIMeXUDakT/7jLEC3m8Cd7ZHRGP0oMbbuHS1gkCehaA7K5fEVI8bcT0vGdb0Ng==", - "dev": true, - "requires": { - "aws-sdk": "^2.320.0", - "chalk": "^2.4.2", - "delay": "^4.3.0", - "mkdirp": "^1.0.4", - "semver": "^7.3.4", - "yamljs": "^0.3.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "serverless-pseudo-parameters": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/serverless-pseudo-parameters/-/serverless-pseudo-parameters-2.5.0.tgz", - "integrity": "sha512-A/O49AR8LL6jlnPSmnOTYgL1KqVgskeRla4sVDeS/r5dHFJlwOU5MgFilc7aaQP8NWAwRJANaIS9oiSE3I+VUA==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true, - "optional": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shortid": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", - "integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==", - "dev": true, - "requires": { - "nanoid": "^2.1.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "optional": true - }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "dev": true, - "optional": true, - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "simple-git": { - "version": "2.40.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.40.0.tgz", - "integrity": "sha512-7IO/eQwrN5kvS38TTu9ljhG9tx2nn0BTqZOmqpPpp51TvE44YIvLA6fETqEVA8w/SeEfPaVv6mk7Tsk9Jns+ag==", - "dev": true, - "requires": { - "@kwsites/file-exists": "^1.1.1", - "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.3.1" - } - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "snappy": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/snappy/-/snappy-6.3.5.tgz", - "integrity": "sha512-lonrUtdp1b1uDn1dbwgQbBsb5BbaiLeKq+AGwOk2No+en+VvJThwmtztwulEQsLinRF681pBqib0NUZaizKLIA==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.3.1", - "nan": "^2.14.1", - "prebuild-install": "5.3.0" - } - }, - "socket.io-client": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", - "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "socket.io-parser": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", - "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", - "dev": true, - "requires": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", - "dev": true, - "requires": { - "sort-keys": "^1.0.0" - } - }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "requires": { - "readable-stream": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sprintf-kit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sprintf-kit/-/sprintf-kit-2.0.0.tgz", - "integrity": "sha512-/0d2YTn8ZFVpIPAU230S9ZLF8WDkSSRWvh/UOLM7zzvkCchum1TtouRgyV8OfgOaYilSGU4lSSqzwBXJVlAwUw==", - "dev": true, - "requires": { - "es5-ext": "^0.10.46" - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "stream-promise": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-promise/-/stream-promise-3.2.0.tgz", - "integrity": "sha512-P+7muTGs2C8yRcgJw/PPt61q7O517tDHiwYEzMWo1GSBCcZedUMT/clz7vUNsSxFphIlJ6QUL4GexQKlfJoVtA==", - "dev": true, - "requires": { - "2-thenable": "^1.0.0", - "es5-ext": "^0.10.49", - "is-stream": "^1.1.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dev": true, - "requires": { - "is-natural-number": "^4.0.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "strtok3": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.0.8.tgz", - "integrity": "sha512-QLgv+oiXwXgCgp2PdPPa+Jpp4D9imK9e/0BsyfeFMr6QL6wMVqoVn9+OXQ9I7MZbmUzN6lmitTJ09uwS2OmGcw==", - "dev": true, - "requires": { - "@tokenizer/token": "^0.1.1", - "@types/debug": "^4.1.5", - "peek-readable": "^3.1.3" - } - }, - "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "dev": true, - "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tabtab": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-3.0.2.tgz", - "integrity": "sha512-jANKmUe0sIQc/zTALTBy186PoM/k6aPrh3A7p6AaAfF6WPSbTx1JYeGIGH162btpH+mmVEXln+UxwViZHO2Jhg==", - "dev": true, - "requires": { - "debug": "^4.0.1", - "es6-promisify": "^6.0.0", - "inquirer": "^6.0.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "untildify": "^3.0.3" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "untildify": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", - "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==", - "dev": true - } - } - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "tar-fs": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", - "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "mkdirp": "^0.5.1", - "pump": "^1.0.0", - "tar-stream": "^1.1.2" - }, - "dependencies": { - "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dev": true, - "optional": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "optional": true, - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - } - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "tencent-serverless-http": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/tencent-serverless-http/-/tencent-serverless-http-1.3.2.tgz", - "integrity": "sha512-HgIu9HuBdY0lx3jLKuicOSOrjmieklPh55x8ZmtuTnrZ5v1buAPUfLKBhTeBSz6e90ggyW+dPr5PWdz179kUkw==", - "dev": true, - "requires": { - "type-is": "^1.6.16" - } - }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dev": true, - "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "token-types": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-2.1.1.tgz", - "integrity": "sha512-wnQcqlreS6VjthyHO3Y/kpK/emflxDBNhlNUPfh7wE39KnuDdOituXomIbyI79vBtF0Ninpkh72mcuRHo+RG3Q==", - "dev": true, - "requires": { - "@tokenizer/token": "^0.1.1", - "ieee754": "^1.2.1" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", - "dev": true - }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - } - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "urlencode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/urlencode/-/urlencode-1.1.0.tgz", - "integrity": "sha1-HyuibwE8hfATP3o61v8nMK33y7c=", - "dev": true, - "requires": { - "iconv-lite": "~0.4.11" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "winston": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", - "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "dev": true, - "requires": { - "async": "^2.6.1", - "diagnostics": "^1.1.1", - "is-stream": "^1.1.0", - "logform": "^2.1.1", - "one-time": "0.0.4", - "readable-stream": "^3.1.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.3.0" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - } - } - }, - "winston-transport": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", - "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", - "dev": true, - "requires": { - "readable-stream": "^2.3.7", - "triple-beam": "^1.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz", - "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==", - "dev": true - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", - "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", - "dev": true - }, - "yamljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", - "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, - "zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - } - } - } -} diff --git a/infrastructure/package.json b/infrastructure/package.json deleted file mode 100644 index 72942365..00000000 --- a/infrastructure/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "infrastructure", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "none" - }, - "author": "", - "license": "UNLICENSED", - "devDependencies": { - "serverless": "^2.48.0", - "serverless-certificate-creator": "^1.5.3", - "serverless-pseudo-parameters": "^2.5.0" - } -} diff --git a/infrastructure/resources-cloudfront.yml b/infrastructure/resources-cloudfront.yml deleted file mode 100644 index 7166a209..00000000 --- a/infrastructure/resources-cloudfront.yml +++ /dev/null @@ -1,84 +0,0 @@ -Resources: - - S3DataBucketPolicyCDN: - Type: AWS::S3::BucketPolicy - Properties: - Bucket: - Ref: DataBucket - PolicyDocument: - Statement: - - Effect: "Allow" - Action: - - "s3:GetObject" - Resource: - Fn::Join: - - "" - - - "arn:aws:s3:::" - - Ref: DataBucket - - "/*" - Principal: "*" - - DataBucketCachePolicy: - Type: AWS::CloudFront::CachePolicy - Properties: - CachePolicyConfig: - Name: ${self:provider.stage}-${self:service}-cloudfront-cache-policy - Comment: CloudFront Cache Policy for justice40 data harvester - DefaultTTL: "86400" # one day, only if Origin does _not_ send `Cache-Control` or `Expires` headers - MaxTTL: "31536000" # one year, used to validate when origin sends `Cache-Control` or `Expires` headers - MinTTL: "1" # one second - ParametersInCacheKeyAndForwardedToOrigin: - EnableAcceptEncodingGzip: false - EnableAcceptEncodingBrotli: false - CookiesConfig: - CookieBehavior: none - HeadersConfig: - HeaderBehavior: none - QueryStringsConfig: - QueryStringBehavior: none - - DataDistribution: - Type: AWS::CloudFront::Distribution - Properties: - DistributionConfig: - Origins: - - Id: DataBucket - DomainName: - # e.g. j40-sit-justice40-data-harvester-data.s3-website-us-east-1.amazonaws.com - Fn::Join: - - "" - - - ${self:custom.namespaceShort}- - - ${self:provider.stage}- - - ${self:service}- - - data - - ".s3-website-" - - Ref: AWS::Region - - ".amazonaws.com" - CustomOriginConfig: - HTTPPort: '80' - HTTPSPort: '443' - OriginProtocolPolicy: http-only - OriginSSLProtocols: [ "TLSv1", "TLSv1.1", "TLSv1.2" ] - OriginCustomHeaders: - - HeaderName: Origin # if the `Origin` header isn't present, S3 won't send CORS headers, this forces CORS to always be included - HeaderValue: geoplatform.gov # this doesn't need to be anything specific, since Allow-Origin: * is our CORS policy, it just has to have a value - - Enabled: true - HttpVersion: http2 - Comment: CDN for justice40 data bucket - Aliases: - - ${self:custom.environment.HOSTED_ZONE_SUBDOMAIN}.${self:custom.environment.HOSTED_ZONE_DOMAIN} - PriceClass: PriceClass_All - DefaultCacheBehavior: - AllowedMethods: [HEAD, GET, OPTIONS] - CachedMethods: [HEAD, GET] - CachePolicyId: - Ref: DataBucketCachePolicy - MinTTL: '0' - DefaultTTL: '0' - TargetOriginId: DataBucket - ViewerProtocolPolicy: redirect-to-https - CustomErrorResponses: [] - ViewerCertificate: - AcmCertificateArn: ${self:custom.environment.CLOUDFRONT_CERTIFICATE_ARN} - SslSupportMethod: sni-only diff --git a/infrastructure/resources-ecs.yml b/infrastructure/resources-ecs.yml deleted file mode 100644 index d9f1d10e..00000000 --- a/infrastructure/resources-ecs.yml +++ /dev/null @@ -1,164 +0,0 @@ -Parameters: - ServiceNameOgr2Ogr: - Type: String - Default: ogr2ogr-gdal-3.6 - Description: The name of the service - -Resources: - - ECSCluster: - Type: AWS::ECS::Cluster - Properties: - Tags: - - Key: Stage - Value: ${self:provider.stage} - - Key: Namespace - Value: ${self:custom.namespace} - - Key: Name - Value: ${self:custom.namespaceShort}-${self:provider.stage}-ecs-cluster - - # Task execution role allowing access to resources. - ECSTaskExecutionRoleShared: - Type: AWS::IAM::Role - Properties: - AssumeRolePolicyDocument: - Statement: - - Effect: Allow - Principal: - Service: [ecs-tasks.amazonaws.com] - Action: ['sts:AssumeRole'] - Path: / - Policies: - - PolicyName: AmazonECSTaskExecutionRolePolicy - PolicyDocument: - Statement: - - Effect: Allow - Action: - # Allow the ECS tasks to upload logs to CloudWatch - - 'logs:CreateLogStream' - - 'logs:PutLogEvents' - - 'logs:CreateLogStream' - - 'logs:DescribeLogStreams' - Resource: '*' - - ECSTaskRoleShared: - Type: AWS::IAM::Role - Properties: - AssumeRolePolicyDocument: - Statement: - - Effect: Allow - Principal: - Service: "ecs-tasks.amazonaws.com" - Action: ['sts:AssumeRole'] - Path: / - Policies: - - PolicyName: "${self:provider.stage}-${self:service}-task-policy" - PolicyDocument: - Statement: - - Effect: Allow - Action: - - secretsmanager:GetSecretValue - Resource: "*" - - Effect: Allow - Action: - - kms:Decrypt - Resource: "*" - # EventBridge permissions. - - Effect: Allow - Action: - - events:PutEvents - Resource: - - arn:aws:events:${self:provider.region}:#{AWS::AccountId}:* - # Allow the ECS Tasks to access our specific S3 bucket - # @see https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html for Multi-Part Upload requirement - - Effect: Allow - Action: - - s3:GetBucketAcl - - s3:ListBucket - - s3:ListBucketMultipartUploads - Resource: - - arn:aws:s3:::${self:custom.environment.DATA_BUCKET} - - Effect: Allow - Action: - - s3:PutObject - - s3:PutObjectAcl - - s3:GetObject - - s3:GetObjectAcl - - s3:GetObjectVersion - - s3:GetObjectVersionAcl - - s3:DeleteObject - - s3:DeleteObjectVersion - - s3:AbortMultipartUpload - - s3:ListMultipartUploadParts - Resource: - - arn:aws:s3:::${self:custom.environment.DATA_BUCKET}/* - - TaskDefinitionOgr2Ogr: - Type: AWS::ECS::TaskDefinition - Properties: - Family: ${self:custom.environment.GDAL_TASK_DEFINITION_NAME} - Cpu: 1024 - Memory: 2048 - NetworkMode: awsvpc - RequiresCompatibilities: - - FARGATE - ExecutionRoleArn: - Fn::GetAtt: [ ECSTaskExecutionRoleShared, Arn ] - TaskRoleArn: - Fn::GetAtt: [ ECSTaskRoleShared, Arn ] - ContainerDefinitions: - - Name: ${self:custom.environment.GDAL_CONTAINER_DEFINITION_NAME} - Cpu: 1024 - Memory: 2048 - Image: osgeo/gdal:alpine-small-latest - Environment: - - Name: REGION - Value: ${self:provider.region} - - Name: STAGE - Value: ${self:provider.stage} - - Name: NODE_ENV - Value: ${self:provider.stage} - - Name: ENV_NAME - Value: ${self:provider.stage} - - LogConfiguration: - LogDriver: 'awslogs' - Options: - awslogs-group: ${self:provider.stage}-${self:service} - awslogs-region: ${self:provider.region} - awslogs-stream-prefix: ${self:service} - - TaskDefinitionTippecanoe: - Type: AWS::ECS::TaskDefinition - Properties: - Family: ${self:custom.environment.TIPPECANOE_TASK_DEFINITION_NAME} - Cpu: 1024 - Memory: 2048 - NetworkMode: awsvpc - RequiresCompatibilities: - - FARGATE - ExecutionRoleArn: - Fn::GetAtt: [ ECSTaskExecutionRoleShared, Arn ] - TaskRoleArn: - Fn::GetAtt: [ ECSTaskRoleShared, Arn ] - ContainerDefinitions: - - Name: ${self:custom.environment.TIPPECANOE_CONTAINER_DEFINITION_NAME} - Cpu: 1024 - Memory: 2048 - Image: mikegiddens/tippecanoe:latest - Environment: - - Name: REGION - Value: ${self:provider.region} - - Name: STAGE - Value: ${self:provider.stage} - - Name: NODE_ENV - Value: ${self:provider.stage} - - Name: ENV_NAME - Value: ${self:provider.stage} - - LogConfiguration: - LogDriver: 'awslogs' - Options: - awslogs-group: ${self:provider.stage}-${self:service} - awslogs-region: ${self:provider.region} - awslogs-stream-prefix: ${self:service} \ No newline at end of file diff --git a/infrastructure/resources-route53.yml b/infrastructure/resources-route53.yml deleted file mode 100644 index fd0cbee1..00000000 --- a/infrastructure/resources-route53.yml +++ /dev/null @@ -1,17 +0,0 @@ -Resources: - - ARecordDataHarvester: - Type: AWS::Route53::RecordSetGroup - Condition: ShouldOnlyCreateResourcesInSIT - DependsOn: - - DataDistribution - Properties: - HostedZoneId: ${self:custom.environment.HOSTED_ZONE_ID_DOMAIN} - RecordSets: - - Name: ${self:custom.environment.HOSTED_ZONE_SUBDOMAIN}.${self:custom.environment.HOSTED_ZONE_DOMAIN}. - Type: A - AliasTarget: - HostedZoneId: Z2FDTNDATAQYW2 # AWS global value https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-route53-aliastarget.html#cfn-route53-aliastarget-hostedzoneid - DNSName: - Fn::GetAtt: [ DataDistribution, DomainName ] - diff --git a/infrastructure/resources-s3.yml b/infrastructure/resources-s3.yml deleted file mode 100644 index ef417972..00000000 --- a/infrastructure/resources-s3.yml +++ /dev/null @@ -1,18 +0,0 @@ -Resources: - - DataBucket: - Type: AWS::S3::Bucket - Properties: - BucketName: ${self:custom.environment.DATA_BUCKET} - AccessControl: PublicRead - CorsConfiguration: - CorsRules: - - AllowedOrigins: - - "*" - AllowedMethods: - - GET - AllowedHeaders: - - Content-Length - WebsiteConfiguration: - IndexDocument: index.html - ErrorDocument: error.html diff --git a/infrastructure/serverless.yml b/infrastructure/serverless.yml deleted file mode 100644 index 3d3c810d..00000000 --- a/infrastructure/serverless.yml +++ /dev/null @@ -1,87 +0,0 @@ -service: justice40-data-harvester -configValidationMode: error - -frameworkVersion: ">=2.48.0" - -provider: - name: aws - runtime: nodejs12.x - stage: ${opt:stage, 'sit'} - region: ${opt:region, 'us-east-1'} - profile: ${self:provider.stage} - lambdaHashingVersion: "20201221" - deploymentBucket: - name: ${self:custom.environment.DEPLOYMENT_BUCKET_PREFIX}-${self:provider.stage}-${self:provider.region}-${self:service} - blockPublicAccess: true - maxPreviousDeploymentArtifacts: 5 - stackName: ${self:custom.environment.STACK_NAME_PREFIX}${self:provider.stage}-${self:service} - - iam: - role: - statements: - - Effect: "Allow" - # Condition: - # ArnEquals: - # ecs:cluster: - # Fn::GetAtt: [ ECSCluster, Arn ] - Action: "ecs:RunTask" - Resource: "*" - - Effect: "Allow" - # Condition: - # ArnEquals: - # ecs:cluster: - # Fn::GetAtt: [ ECSCluster, Arn ] - Action: - - "iam:ListInstanceProfiles" - - "iam:ListRoles" - - "iam:PassRole" - Resource: "*" - - Effect: Allow - Action: - - "s3:ListBucket" - Resource: - - Fn::Join: - - "" - - - "arn:aws:s3:::" - - Ref: DataBucket - - "/*" - - Effect: Allow - Action: - - "s3:DeleteObject" - - "s3:GetObject" - - "s3:PutObject" - - "s3:PutObjectAcl" - Resource: - - Fn::Join: - - "" - - - "arn:aws:s3:::" - - Ref: DataBucket - -plugins: - - serverless-certificate-creator - - serverless-pseudo-parameters - -custom: - environment: ${file(./environment.yml):${self:provider.stage}} - namespace: justice40 # Used to tag resources with a "Namespace". - namespaceShort: j40 # Used to prefix stack name, deployment bucket, resource "Name" tags, etc. - - customCertificate: - certificateName: ${self:provider.stage}-${self:service}.${self:custom.environment.HOSTED_ZONE_DOMAIN} - hostedZoneIds: ${self:custom.environment.HOSTED_ZONE_ID_DOMAIN} - region: ${self:provider.region} - tags: - Name: ${self:provider.stage}-${self:service}.${self:custom.environment.HOSTED_ZONE_DOMAIN} - Environment: ${self:provider.stage} - rewriteRecords: true - enabled: ${self:custom.environment.SHOULD_CREATE_SSL_CERTIFICATE} - - -functions: ${file(./functions.yml)} - -resources: - - ${file(./conditions.yml)} - - ${file(./resources-s3.yml)} - - ${file(./resources-cloudfront.yml)} - - ${file(./resources-ecs.yml)} - - ${file(./resources-route53.yml)} From 24bac56d9e21e4d7ea3251f5662beaeb3850cb3d Mon Sep 17 00:00:00 2001 From: Vim <86254807+vim-usds@users.noreply.github.com> Date: Thu, 9 Dec 2021 13:42:37 -0500 Subject: [PATCH 03/12] Methodology page update for Score L (#1010) * Add first column of Methodology score L - create a new component MethodologyFormula (MF) - MF component contain text on formula calculation - add snapshots * Add 2nd column to Methodology page - add LowIncome component - add USWDS styles on download component - add margin-top styles to global - enable all font-sizes to theme file * Add Categories to Methodology page - create CategoryCard component - create Categories component - add snapshots * Update datasets - update styling to match mock - add additional indicators - remove additional indicators - update snapshots * Add links to categories to datasets - update snapshots * Remove additional indicator test as they now N/A * ensure each DOM ID is unique for a11y - update snapshots * Add Category heading for a11y - removes ScoreSteps tests - comment out ScoreStep component - update snapshots - cypress passes all a11y * Update to methodology copy - based on PDF and spreadsheet and Living Copy -updates snapshots * Add comments around using IF, AND, ELSE constants - make indicator constant names more explicit * Update copy based on living doc - update snapshots --- .../cypress/integration/DatasetLinks.feature | 5 - .../Categories/Categories.module.scss | 8 + .../Categories/Categories.module.scss.d.ts | 12 + .../components/Categories/Categories.test.tsx | 16 + .../src/components/Categories/Categories.tsx | 43 + .../__snapshots__/Categories.test.tsx.snap | 403 ++++ client/src/components/Categories/index.tsx | 3 + .../CategoryCard/CategoryCard.module.scss | 15 + .../CategoryCard.module.scss.d.ts | 12 + .../CategoryCard/CategoryCard.test.tsx | 18 + .../components/CategoryCard/CategoryCard.tsx | 32 + .../__snapshots__/CategoryCard.test.tsx.snap | 53 + client/src/components/CategoryCard/index.tsx | 3 + .../DatasetCard/datasetCard.module.scss | 3 +- client/src/components/DatasetCard/index.tsx | 27 +- .../__snapshots__/datasetCard.test.tsx.snap | 26 +- .../DatasetCard/tests/datasetCard.test.tsx | 14 +- .../DatasetContainer/dsContainer.module.scss | 9 + .../dsContainer.module.scss.d.ts | 1 + .../src/components/DatasetContainer/index.tsx | 49 +- .../datasetContainer.test.tsx.snap | 1488 +++++++----- .../DownloadPacket/downloadPacket.module.scss | 19 +- .../LowIncome/LowIncome.module.scss | 20 + .../LowIncome/LowIncome.module.scss.d.ts | 14 + .../components/LowIncome/LowIncome.test.tsx | 16 + client/src/components/LowIncome/LowIncome.tsx | 26 + .../__snapshots__/LowIncome.test.tsx.snap | 20 + client/src/components/LowIncome/index.tsx | 3 + .../MethodologyFormula.module.scss | 12 + .../MethodologyFormula.module.scss.d.ts | 12 + .../MethodologyFormula.test.tsx | 16 + .../MethodologyFormula/MethodologyFormula.tsx | 35 + .../MethodologyFormula.test.tsx.snap | 31 + .../components/MethodologyFormula/index.tsx | 3 + .../scoreStepsList.test.tsx.snap | 125 - client/src/components/scoreStepsList.test.tsx | 28 - client/src/data/copy/methodology.tsx | 1057 ++++++--- .../__snapshots__/methodology.test.tsx.snap | 2087 +++++++++++------ client/src/pages/methodology.tsx | 29 +- client/src/styles/global.scss | 11 +- .../styles/theme/_uswds-theme-typography.scss | 8 +- 41 files changed, 4008 insertions(+), 1804 deletions(-) create mode 100644 client/src/components/Categories/Categories.module.scss create mode 100644 client/src/components/Categories/Categories.module.scss.d.ts create mode 100644 client/src/components/Categories/Categories.test.tsx create mode 100644 client/src/components/Categories/Categories.tsx create mode 100644 client/src/components/Categories/__snapshots__/Categories.test.tsx.snap create mode 100644 client/src/components/Categories/index.tsx create mode 100644 client/src/components/CategoryCard/CategoryCard.module.scss create mode 100644 client/src/components/CategoryCard/CategoryCard.module.scss.d.ts create mode 100644 client/src/components/CategoryCard/CategoryCard.test.tsx create mode 100644 client/src/components/CategoryCard/CategoryCard.tsx create mode 100644 client/src/components/CategoryCard/__snapshots__/CategoryCard.test.tsx.snap create mode 100644 client/src/components/CategoryCard/index.tsx create mode 100644 client/src/components/LowIncome/LowIncome.module.scss create mode 100644 client/src/components/LowIncome/LowIncome.module.scss.d.ts create mode 100644 client/src/components/LowIncome/LowIncome.test.tsx create mode 100644 client/src/components/LowIncome/LowIncome.tsx create mode 100644 client/src/components/LowIncome/__snapshots__/LowIncome.test.tsx.snap create mode 100644 client/src/components/LowIncome/index.tsx create mode 100644 client/src/components/MethodologyFormula/MethodologyFormula.module.scss create mode 100644 client/src/components/MethodologyFormula/MethodologyFormula.module.scss.d.ts create mode 100644 client/src/components/MethodologyFormula/MethodologyFormula.test.tsx create mode 100644 client/src/components/MethodologyFormula/MethodologyFormula.tsx create mode 100644 client/src/components/MethodologyFormula/__snapshots__/MethodologyFormula.test.tsx.snap create mode 100644 client/src/components/MethodologyFormula/index.tsx delete mode 100644 client/src/components/__snapshots__/scoreStepsList.test.tsx.snap delete mode 100644 client/src/components/scoreStepsList.test.tsx diff --git a/client/cypress/integration/DatasetLinks.feature b/client/cypress/integration/DatasetLinks.feature index 67dedf0f..29fd26ce 100644 --- a/client/cypress/integration/DatasetLinks.feature +++ b/client/cypress/integration/DatasetLinks.feature @@ -4,8 +4,3 @@ Feature: All links on the dataset cards should be functional Given I am on the "Methodology" page When I look for the "Datasets used in methodology" CTA Then All links under "Datasets used in methodology" should work - - Scenario: If I click on any link in the additional indicators dataset, they should work - Given I am on the "Methodology" page - When I look for the "Additional Indicators" CTA - Then All links under "Additional Indicators" should work diff --git a/client/src/components/Categories/Categories.module.scss b/client/src/components/Categories/Categories.module.scss new file mode 100644 index 00000000..59264719 --- /dev/null +++ b/client/src/components/Categories/Categories.module.scss @@ -0,0 +1,8 @@ +@use '../../styles/design-system.scss' as *; + +.categoriesContainer { + display: flex; + justify-content: space-between; + flex-wrap: wrap; + @include u-margin-top(4); +} diff --git a/client/src/components/Categories/Categories.module.scss.d.ts b/client/src/components/Categories/Categories.module.scss.d.ts new file mode 100644 index 00000000..1e442d50 --- /dev/null +++ b/client/src/components/Categories/Categories.module.scss.d.ts @@ -0,0 +1,12 @@ +declare namespace CategoriesNamespace { + export interface ICategoriesScss { + categoriesContainer: string; + } + } + +declare const CategoriesScssModule: CategoriesNamespace.ICategoriesScss & { + /** WARNING: Only available when `css-loader` is used without `style-loader` or `mini-css-extract-plugin` */ + locals: CategoriesNamespace.ICategoriesScss; + }; + + export = CategoriesScssModule; diff --git a/client/src/components/Categories/Categories.test.tsx b/client/src/components/Categories/Categories.test.tsx new file mode 100644 index 00000000..24a00d71 --- /dev/null +++ b/client/src/components/Categories/Categories.test.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import {render} from '@testing-library/react'; +import {LocalizedComponent} from '../../test/testHelpers'; +import Categories from './Categories'; + +describe('rendering of the Categories', () => { + const {asFragment} = render( + + + , + ); + + it('checks if component renders', () => { + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/client/src/components/Categories/Categories.tsx b/client/src/components/Categories/Categories.tsx new file mode 100644 index 00000000..11620154 --- /dev/null +++ b/client/src/components/Categories/Categories.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import {Grid} from '@trussworks/react-uswds'; + +import IndicatorCategory from '../CategoryCard'; +import J40MainGridContainer from '../J40MainGridContainer'; + +import * as METHODOLOGY_COPY from '../../data/copy/methodology'; +import * as styles from './Categories.module.scss'; + +const categories = [ + METHODOLOGY_COPY.CATEGORIES.CLIMATE_CHANGE, + METHODOLOGY_COPY.CATEGORIES.CLEAN_ENERGY, + METHODOLOGY_COPY.CATEGORIES.CLEAN_TRANSPORT, + METHODOLOGY_COPY.CATEGORIES.AFFORDABLE_HOUSING, + METHODOLOGY_COPY.CATEGORIES.LEGACY_POLLUTION, + METHODOLOGY_COPY.CATEGORIES.CLEAN_WATER, + METHODOLOGY_COPY.CATEGORIES.HEALTH_BURDENS, + METHODOLOGY_COPY.CATEGORIES.WORKFORCE_DEV, +]; + +const Categories = () => { + return ( + <> + + + + +

{METHODOLOGY_COPY.CATEGORY.HEADING}

+
+
+ +
+ + + { + categories.map((category, index) => ) + } + + + ); +}; + +export default Categories; diff --git a/client/src/components/Categories/__snapshots__/Categories.test.tsx.snap b/client/src/components/Categories/__snapshots__/Categories.test.tsx.snap new file mode 100644 index 00000000..dd5a77ef --- /dev/null +++ b/client/src/components/Categories/__snapshots__/Categories.test.tsx.snap @@ -0,0 +1,403 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`rendering of the Categories checks if component renders 1`] = ` + +
+
+
+

+ Categories +

+
+
+
+
+
+

+ Climate change +

+

+ + + + IF + + at or above 90th percentile for + + expected agriculture loss rate + + OR + + expected building loss rate + + OR + + expected population loss rate + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Clean energy and energy efficiency +

+

+ + + + IF + + at or above 90th percentile for + + energy cost burden score + + OR + + PM2.5 + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Clean transportation +

+

+ + + + IF + + at or above 90th percentile for + + diesel particulate matter + + or + + traffic proximity and volume + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Affordable and sustainable housing +

+

+ + + + IF + + at or above 90th percentile for + + lead paint + + AND + + the median home value + + is less than + 90th percentile OR at or above the 90th percentile for the + + housing cost burden + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Reduction and remediation of legacy pollution +

+

+ + + + IF + + at or above 90th percentile for + + proximity to hazardous waste facilities + + OR + + proximity to NLP sites + + OR + + proximity to RMP sites + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Critical clean water and waste infrastructure +

+

+ + + + IF + + at or above 90th percentile for + + wastewater discharge + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Health burdens +

+

+ + + + IF + + at or above 90th percentile for + + asthma + + OR + + diabetes + + OR + + heart disease + + OR + + low life expectancy + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Training and workforce development +

+

+ + + + IF + + at or above 90th percentile for + + low median income relative to area median income + + OR + at or above the 90th percentile for + + linguistic isolation + + OR + + + unemployment + + OR + for percentage individuals in households at or below 100% federal + + poverty + + level at or above 90% + +

+

+ + + + AND + + where + + the high school degree achievement rates + + for adults 25 years and older is less than 90% + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+
+`; diff --git a/client/src/components/Categories/index.tsx b/client/src/components/Categories/index.tsx new file mode 100644 index 00000000..c595e078 --- /dev/null +++ b/client/src/components/Categories/index.tsx @@ -0,0 +1,3 @@ +import Categories from './Categories'; + +export default Categories; diff --git a/client/src/components/CategoryCard/CategoryCard.module.scss b/client/src/components/CategoryCard/CategoryCard.module.scss new file mode 100644 index 00000000..5b621474 --- /dev/null +++ b/client/src/components/CategoryCard/CategoryCard.module.scss @@ -0,0 +1,15 @@ +@use '../../styles/design-system.scss' as *; + +@mixin baseCard { + @include u-padding-top(0); + @include u-padding-right(6); + @include u-padding-bottom(6); + @include u-padding-left(6); + @include u-margin-bottom(6); + max-width: 34rem; +} + +.categoryCard { + @include baseCard; + @include u-bg('blue-cool-5'); +} diff --git a/client/src/components/CategoryCard/CategoryCard.module.scss.d.ts b/client/src/components/CategoryCard/CategoryCard.module.scss.d.ts new file mode 100644 index 00000000..65f44f6c --- /dev/null +++ b/client/src/components/CategoryCard/CategoryCard.module.scss.d.ts @@ -0,0 +1,12 @@ +declare namespace IndicatorCategoryNamespace { + export interface IIndicatorCategoryScss { + categoryCard: string; + } + } + +declare const IndicatorCategoryScssModule: IndicatorCategoryNamespace.IIndicatorCategoryScss & { + /** WARNING: Only available when `css-loader` is used without `style-loader` or `mini-css-extract-plugin` */ + locals: IndicatorCategoryNamespace.IIndicatorCategoryScss; + }; + + export = IndicatorCategoryScssModule; diff --git a/client/src/components/CategoryCard/CategoryCard.test.tsx b/client/src/components/CategoryCard/CategoryCard.test.tsx new file mode 100644 index 00000000..e81da12e --- /dev/null +++ b/client/src/components/CategoryCard/CategoryCard.test.tsx @@ -0,0 +1,18 @@ +import * as React from 'react'; +import {render} from '@testing-library/react'; +import {LocalizedComponent} from '../../test/testHelpers'; +import CategoryCard from './CategoryCard'; + +import * as METHODOLOGY_COPY from '../../data/copy/methodology'; + +describe('rendering of the CategoryCard', () => { + const {asFragment} = render( + + + , + ); + + it('checks if component renders', () => { + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/client/src/components/CategoryCard/CategoryCard.tsx b/client/src/components/CategoryCard/CategoryCard.tsx new file mode 100644 index 00000000..e1bd0958 --- /dev/null +++ b/client/src/components/CategoryCard/CategoryCard.tsx @@ -0,0 +1,32 @@ +import React from 'react'; + +import * as styles from './CategoryCard.module.scss'; + +interface ICategoryInterface { + categoryInfo: { + TITLE: JSX.Element, + IF: JSX.Element, + AND: JSX.Element, + THEN: JSX.Element + } +} +const IndicatorCategory = ({categoryInfo}: ICategoryInterface) => { + return ( +
+

+ {categoryInfo.TITLE} +

+

+ {categoryInfo.IF} +

+

+ {categoryInfo.AND} +

+

+ {categoryInfo.THEN} +

+
+ ); +}; + +export default IndicatorCategory; diff --git a/client/src/components/CategoryCard/__snapshots__/CategoryCard.test.tsx.snap b/client/src/components/CategoryCard/__snapshots__/CategoryCard.test.tsx.snap new file mode 100644 index 00000000..dba3718a --- /dev/null +++ b/client/src/components/CategoryCard/__snapshots__/CategoryCard.test.tsx.snap @@ -0,0 +1,53 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`rendering of the CategoryCard checks if component renders 1`] = ` + +
+

+ Climate change +

+

+ + + + IF + + at or above 90th percentile for + + expected agriculture loss rate + + OR + + expected building loss rate + + OR + + expected population loss rate + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+`; diff --git a/client/src/components/CategoryCard/index.tsx b/client/src/components/CategoryCard/index.tsx new file mode 100644 index 00000000..3d8e779e --- /dev/null +++ b/client/src/components/CategoryCard/index.tsx @@ -0,0 +1,3 @@ +import CategoryCard from './CategoryCard'; + +export default CategoryCard; diff --git a/client/src/components/DatasetCard/datasetCard.module.scss b/client/src/components/DatasetCard/datasetCard.module.scss index 51288cc2..ca250ddc 100644 --- a/client/src/components/DatasetCard/datasetCard.module.scss +++ b/client/src/components/DatasetCard/datasetCard.module.scss @@ -1,3 +1,4 @@ +@use '../../styles/design-system.scss' as *; @import '../utils.scss'; @mixin baseCard { @@ -8,7 +9,7 @@ .datasetCard { @include baseCard; - background-color: white; + @include u-bg("gray-3"); } .datasetCardAdditional { diff --git a/client/src/components/DatasetCard/index.tsx b/client/src/components/DatasetCard/index.tsx index 69112bbc..f20223a5 100644 --- a/client/src/components/DatasetCard/index.tsx +++ b/client/src/components/DatasetCard/index.tsx @@ -5,15 +5,16 @@ import * as styles from './datasetCard.module.scss'; import * as METHODOLOGY_COPY from '../../data/copy/methodology'; interface IDatasetCardProps { - datasetCardProps: { [key:string]: string } - additionalIndicator: boolean + datasetCardProps: { + [key:string]: string + } } -const DatasetCard = ({datasetCardProps, additionalIndicator}:IDatasetCardProps) => { +const DatasetCard = ({datasetCardProps}:IDatasetCardProps) => { const intl = useIntl(); return ( -
+

{datasetCardProps.indicator}

{datasetCardProps.description} @@ -22,23 +23,23 @@ const DatasetCard = ({datasetCardProps, additionalIndicator}:IDatasetCardProps)
  • - {intl.formatMessage(METHODOLOGY_COPY.DATASET_CARD_LABELS.SOURCE)} + {intl.formatMessage(METHODOLOGY_COPY.DATASET_CARD_LABELS.RESP_PARTY)} - {datasetCardProps.dataSourceLabel} + {datasetCardProps.respPartyLabel}
  • -
  • - - {intl.formatMessage(METHODOLOGY_COPY.DATASET_CARD_LABELS.RESOLUTION)} - - {datasetCardProps.dataResolution} -
  • {intl.formatMessage(METHODOLOGY_COPY.DATASET_CARD_LABELS.DATE_RANGE)} - {datasetCardProps.dataDateRange} + {datasetCardProps.dateRange} +
  • +
  • + + {intl.formatMessage(METHODOLOGY_COPY.DATASET_CARD_LABELS.USED_IN)} + + {datasetCardProps.usedIn}
diff --git a/client/src/components/DatasetCard/tests/__snapshots__/datasetCard.test.tsx.snap b/client/src/components/DatasetCard/tests/__snapshots__/datasetCard.test.tsx.snap index eb464f92..91bd5c18 100644 --- a/client/src/components/DatasetCard/tests/__snapshots__/datasetCard.test.tsx.snap +++ b/client/src/components/DatasetCard/tests/__snapshots__/datasetCard.test.tsx.snap @@ -1,41 +1,43 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`rendering of addtional indicator dataset card checks if component renders 1`] = ``; - exports[`rendering of indicator dataset card checks if component renders 1`] = ` -
+

- Area Median Income + Low Income

- Median income of the census block group calculated as a percent - of the metropolitan area’s or state's median income. + + Percent of a block group's population in households where household income is at or below + 200% of the federal poverty level. +
diff --git a/client/src/components/DatasetCard/tests/datasetCard.test.tsx b/client/src/components/DatasetCard/tests/datasetCard.test.tsx index 8da602bb..0ad7af8f 100644 --- a/client/src/components/DatasetCard/tests/datasetCard.test.tsx +++ b/client/src/components/DatasetCard/tests/datasetCard.test.tsx @@ -8,19 +8,7 @@ import * as METHODOLOGY_COPY from '../../../data/copy/methodology'; describe('rendering of indicator dataset card', () => { const {asFragment} = render( - - , - ); - - it('checks if component renders', () => { - expect(asFragment()).toMatchSnapshot(); - }); -}); - -describe('rendering of addtional indicator dataset card', () => { - const {asFragment} = render( - - + , ); diff --git a/client/src/components/DatasetContainer/dsContainer.module.scss b/client/src/components/DatasetContainer/dsContainer.module.scss index e08ed44a..003a4f90 100644 --- a/client/src/components/DatasetContainer/dsContainer.module.scss +++ b/client/src/components/DatasetContainer/dsContainer.module.scss @@ -1,5 +1,14 @@ +@use '../../styles/design-system.scss' as *; + .datasetCardsContainer { + @include u-margin-top(4); display: flex; justify-content: space-between; flex-wrap: wrap; +} + +.returnToTop { + display: flex; + justify-content: flex-end; + @include u-margin-bottom(4); } \ No newline at end of file diff --git a/client/src/components/DatasetContainer/dsContainer.module.scss.d.ts b/client/src/components/DatasetContainer/dsContainer.module.scss.d.ts index dfd243b4..37156d1a 100644 --- a/client/src/components/DatasetContainer/dsContainer.module.scss.d.ts +++ b/client/src/components/DatasetContainer/dsContainer.module.scss.d.ts @@ -1,6 +1,7 @@ declare namespace DatasetContainerScssNamespace { export interface IDatasetContainerScss { datasetCardsContainer: string; + returnToTop: string; } } diff --git a/client/src/components/DatasetContainer/index.tsx b/client/src/components/DatasetContainer/index.tsx index 72cc3b1f..ed2117b4 100644 --- a/client/src/components/DatasetContainer/index.tsx +++ b/client/src/components/DatasetContainer/index.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import {useIntl} from 'gatsby-plugin-intl'; +import {Link, useIntl} from 'gatsby-plugin-intl'; import {Grid} from '@trussworks/react-uswds'; import DatasetCard from '../DatasetCard'; @@ -15,7 +15,7 @@ const DatasetContainer = () => { return ( <> - + @@ -25,49 +25,26 @@ const DatasetContainer = () => { - - -

{intl.formatMessage(METHODOLOGY_COPY.DATASETS.INFO)}

-
-
- -
- {METHODOLOGY_COPY.INDICATORS.map((card) => )} -
- -
-
- - - - -

{intl.formatMessage(METHODOLOGY_COPY.DATASETS.ADDITIONAL_HEADING)}

+
+ {METHODOLOGY_COPY.INDICATORS.map((card) => )} +
- - -

{intl.formatMessage(METHODOLOGY_COPY.DATASETS.ADDITIONAL_INFO)}

-
-
- -
- {METHODOLOGY_COPY.ADDITIONAL_INDICATORS.map((card) => )} +
+ + {METHODOLOGY_COPY.RETURN_TO_TOP.LINK} +
+ ); }; diff --git a/client/src/components/DatasetContainer/tests/__snapshots__/datasetContainer.test.tsx.snap b/client/src/components/DatasetContainer/tests/__snapshots__/datasetContainer.test.tsx.snap index 4a69ba62..e9ced9f2 100644 --- a/client/src/components/DatasetContainer/tests/__snapshots__/datasetContainer.test.tsx.snap +++ b/client/src/components/DatasetContainer/tests/__snapshots__/datasetContainer.test.tsx.snap @@ -3,7 +3,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are visible 1`] = `
-
-
-

- The datasets come from a variety of sources and were selected based on relevance, availability, recency, and quality. The datasets seek to identify a range of human health, environmental, climate-related, and other cumulative impacts on communities. -

-
-
-
-
-

- Area Median Income -

-
- Median income of the census block group calculated as a percent - of the metropolitan area’s or state's median income. -
- -
-
-

- Poverty -

-
- Percent of a block group's population in households where the household income is at or below 100% of the federal poverty level. -
- -
-
-

- Education, less than high school education -

-
- Percent of people ages 25 years or older in a block group whose - education level is less than a high school diploma. -
- -
-
-
-
-
-
-

- Additional Indicators -

-
-
-
-
-

- These datasets provide additional information about each community. -

+
+
+

+ Low Income +

+
+ + Percent of a block group's population in households where household income is at or below + 200% of the federal poverty level. + +
+ +
+
+

+ Expected Agriculture Loss Rate +

+
+ + Economic loss rate to agriculture resulting from natural hazards each year. + +
+ +
+
+

+ Expected Building Loss Rate +

+
+ + Economic loss rate to buildings resulting from natural hazards each year. + +
+ +
+
+

+ Expected Population Loss Rate +

+
+ + Rate relative to the population in fatalities and injuries resulting from natural hazards each + year. Population loss is defined as the Spatial Hazard Events and Losses or National Centers + for Environmental Information’s reported number of fatalities and injuries caused by the + hazard occurrence. To combine fatalities and injuries for the computation of population loss value, + an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database + classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries + and fatalities are counted as population loss. This total number of injuries and fatalities is + then divided by the population in the census tract to get a per-capita rate of population risk. + +
+ +
+
+

+ Energy burden +

+
+ Average annual energy cost ($) divided by household income. +
+ +
+
+

+ PM2.5 +

+
+ Fine inhalable particles, with diameters that are generally + 2.5 micrometers and smaller. +
+ +
+
+

+ Diesel particulate matter +

+
+ Mixture of particles that is part of diesel exhaust in the air. +
+ +
+
+

+ Traffic proximity and volume +

+
+ Count of vehicles (average annual daily traffic) at major roads + within 500 meters, divided by distance in meters (not km). +
+ +
+
+

+ Housing cost burden +

+
+ Households that are low income and spend more than 30% of their + income to housing costs. +
+ +
+
+

+ Lead paint +

+
+ Percent of housing units built pre-1960, used as an + indicator of potential lead paint exposure in homes. +
+ +
+
+

+ Median home value +

+
+ Median home value of owner-occupied housing units in the area. +
+ +
+
+

+ Proximity to hazardous waste facilities +

+
+ + Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large + Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers. + +
+ +
+
+

+ Proximity to National Priorities List (NPL) Sites +

+
+ + Count of proposed or listed NPL - also known as superfund - sites within 5 km (or nearest one + beyond 5 km), each divided by distance in kilometers. +
+ +
+
+

+ Proximity to Risk Management Plan (RMP) Sites +

+
+ + Count of RMP (potential chemical accident management plan) facilities within 5 km (or nearest + one beyond 5 km), each divided by distance in kilometers. +
+ +
+
+

+ Wastewater discharge +

+
+ Risk-Screening Environmental Indicators (RSEI) modeled Toxic Concentrations at + stream segments within 500 meters, divided by distance in kilometers (km). +
+ +
+
+

+ Asthma +

+
+ Weighted number of respondents people who answer “yes” both + to both of the following questions: “Have you ever been told by a doctor, + nurse, or other health professional that you have asthma?” and the question + “Do you still have asthma?” +
+ +
+
+

+ Diabetes +

+
+ People ages 18 years and older who report having ever been + told by a doctor, nurse, or other health professionals that they have + diabetes other than diabetes during pregnancy. +
+ +
+
+

+ Heart disease +

+
+ People ages 18 years and older who report ever having been told + by a doctor, nurse, or other health professionals that they had angina or + coronary heart disease. +
+ +
+
+

+ Low life expectancy +

+
+ Average number of years of life a person who has attained a given age can expect to live. +
+ +
+
+

+ Low median Income +

+
+ Median income of the census tract calculated as a percent of the area’s median income. +
+ +
+
+

+ Linguistic Isolation +

+
+ Households in which no one age 14 and over speaks English only or also speaks + a language other than English +
+ +
+
+

+ Unemployment +

+
+ Number of unemployed people as a percentage of the civilian labor force +
+ +
+
+

+ Poverty +

+
+ Percent of a tract's population in households where the household income is at or below 100% of the federal poverty level. +
+ +
+
+

+ High school degree achievement rate +

+
+ Percent of people ages 25 years or older in a census tract whose + education level is less than a high school diploma. +
+ +
+
-
-

- Diabetes -

-
- People ages 18 years and older who report having ever been - told by a doctor, nurse, or other health professionals that they have - diabetes other than diabetes during pregnancy. -
- -
-
-

- Asthma -

-
- Weighted number of respondents people who answer “yes” both - to both of the following questions: “Have you ever been told by a doctor, - nurse, or other health professional that you have asthma?” and the question - “Do you still have asthma?” -
- -
-
-

- Heart disease -

-
- People ages 18 years and older who report ever having been told - by a doctor, nurse, or other health professionals that they had angina or - coronary heart disease. -
- -
-
-

- Life expectancy -

-
- Estimated years of life expectancy. -
- -
-
-

- Traffic proximity and volume -

-
- Count of vehicles (average annual daily traffic) at major roads - within 500 meters, divided by distance in meters (not km). -
- -
-
-

- FEMA Risk Index Expected Annual Loss Score -

-
- Average economic loss in dollars resulting from natural - hazards each year. It is calculated for each hazard type and quantifies - loss for relevant consequence types: buildings, people, and agriculture. -
- -
-
-

- Energy burden -

-
- Average annual energy cost ($) divided by household income. -
- -
-
-

- Housing cost burden -

-
- Households that are low income and spend more than 30% of their - income to housing costs. -
- -
-
-

- Wastewater discharge -

-
- RSEI modeled Toxic Concentrations at stream segments within 500 - meters, divided by distance in kilometers (km). -
- -
-
-

- Lead paint -

-
- Percent of housing units built pre-1960, used as an - indicator of potential lead paint exposure in homes. -
- -
-
-

- Diesel particulate matter -

-
- Mixture of particles that is part of diesel exhaust in the air. -
- -
-
-

- PM2.5 -

-
- Fine inhalable particles, with diameters that are generally - 2.5 micrometers and smaller. -
- -
+ + Return to top +
diff --git a/client/src/components/DownloadPacket/downloadPacket.module.scss b/client/src/components/DownloadPacket/downloadPacket.module.scss index 2ab6fd25..b8b1fa30 100644 --- a/client/src/components/DownloadPacket/downloadPacket.module.scss +++ b/client/src/components/DownloadPacket/downloadPacket.module.scss @@ -1,4 +1,4 @@ -$primary-color: #112f4e; +@use '../../styles/design-system.scss' as *; .downloadBoxContainer { @@ -6,7 +6,7 @@ $primary-color: #112f4e; margin: auto; .downloadBox { - background-color: $primary-color; + @include u-bg('blue-80v'); border-radius: 6px 6px; .downloadBoxTextBox { @@ -15,12 +15,15 @@ $primary-color: #112f4e; flex-direction: column; .downloadBoxTitle { - font-weight: bold; - margin-bottom: 10px; + @include typeset('sans', 'xs', 3); + @include u-text('semibold'); + @include u-margin-bottom(2); } - + .downloadBoxText { - margin-bottom: 20px; + @include typeset('sans', 'xs', 3); + @include u-margin-bottom(4); + span { font-style: italic; } @@ -42,8 +45,8 @@ $primary-color: #112f4e; } .downloadBoxButton{ - background-color: white; - color: $primary-color; + @include u-bg('white'); + @include u-color('blue-80v'); display: flex; .downloadPacketText { diff --git a/client/src/components/LowIncome/LowIncome.module.scss b/client/src/components/LowIncome/LowIncome.module.scss new file mode 100644 index 00000000..cbc9868b --- /dev/null +++ b/client/src/components/LowIncome/LowIncome.module.scss @@ -0,0 +1,20 @@ +@use '../../styles/design-system.scss' as *; + +.lowIncomeContainer { + + border: 1px solid #DFE1E2; + @include u-margin-top(4); + @include u-padding-left(4); + @include u-padding-right(3); + @include u-padding-bottom(4); + + .lowIncomeTitle { + @include typeset('sans', 'xs', 3); + @include u-text('semibold'); + } + + .lowIncomeText { + @include typeset('sans', 'xs', 3); + @include u-text('light'); + } +}; \ No newline at end of file diff --git a/client/src/components/LowIncome/LowIncome.module.scss.d.ts b/client/src/components/LowIncome/LowIncome.module.scss.d.ts new file mode 100644 index 00000000..26a738e7 --- /dev/null +++ b/client/src/components/LowIncome/LowIncome.module.scss.d.ts @@ -0,0 +1,14 @@ +declare namespace LowIncomeNamespace { + export interface ILowIncomeScss { + lowIncomeContainer: string; + lowIncomeTitle: string; + lowIncomeText: string; + } + } + +declare const LowIncomeScssModule: LowIncomeNamespace.ILowIncomeScss & { + /** WARNING: Only available when `css-loader` is used without `style-loader` or `mini-css-extract-plugin` */ + locals: LowIncomeNamespace.ILowIncomeScss; + }; + + export = LowIncomeScssModule; diff --git a/client/src/components/LowIncome/LowIncome.test.tsx b/client/src/components/LowIncome/LowIncome.test.tsx new file mode 100644 index 00000000..47be349b --- /dev/null +++ b/client/src/components/LowIncome/LowIncome.test.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import {render} from '@testing-library/react'; +import {LocalizedComponent} from '../../test/testHelpers'; +import LowIncome from './LowIncome'; + +describe('rendering of the LowIncome', () => { + const {asFragment} = render( + + + , + ); + + it('checks if component renders', () => { + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/client/src/components/LowIncome/LowIncome.tsx b/client/src/components/LowIncome/LowIncome.tsx new file mode 100644 index 00000000..330460de --- /dev/null +++ b/client/src/components/LowIncome/LowIncome.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import {useIntl} from 'gatsby-plugin-intl'; + +import * as METHODOLOGY_COPY from '../../data/copy/methodology'; +import * as styles from './LowIncome.module.scss'; + +const LowIncome = () => { + const intl = useIntl(); + + return ( +
+

+ * + {' '} + {intl.formatMessage(METHODOLOGY_COPY.LOW_INCOME.HEADING)} +

+ +

+ {intl.formatMessage(METHODOLOGY_COPY.LOW_INCOME.INFO)} +

+ +
+ ); +}; + +export default LowIncome; diff --git a/client/src/components/LowIncome/__snapshots__/LowIncome.test.tsx.snap b/client/src/components/LowIncome/__snapshots__/LowIncome.test.tsx.snap new file mode 100644 index 00000000..6638d460 --- /dev/null +++ b/client/src/components/LowIncome/__snapshots__/LowIncome.test.tsx.snap @@ -0,0 +1,20 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`rendering of the LowIncome checks if component renders 1`] = ` + +
+

+ + * + + Low Income +

+

+ + At or above 65th percentile for percent of census tract population of households where household + income is at or below 200% of the federal poverty level + +

+
+
+`; diff --git a/client/src/components/LowIncome/index.tsx b/client/src/components/LowIncome/index.tsx new file mode 100644 index 00000000..a4efda8b --- /dev/null +++ b/client/src/components/LowIncome/index.tsx @@ -0,0 +1,3 @@ +import LowIncome from './LowIncome'; + +export default LowIncome; diff --git a/client/src/components/MethodologyFormula/MethodologyFormula.module.scss b/client/src/components/MethodologyFormula/MethodologyFormula.module.scss new file mode 100644 index 00000000..df189470 --- /dev/null +++ b/client/src/components/MethodologyFormula/MethodologyFormula.module.scss @@ -0,0 +1,12 @@ +@use '../../styles/design-system.scss' as *; + +.formulaContainer { + @include u-margin-top(5); + p:not(:first-child) { + font-style: italic; + + span { + @include u-text('bold'); + } + } +}; diff --git a/client/src/components/MethodologyFormula/MethodologyFormula.module.scss.d.ts b/client/src/components/MethodologyFormula/MethodologyFormula.module.scss.d.ts new file mode 100644 index 00000000..caf51699 --- /dev/null +++ b/client/src/components/MethodologyFormula/MethodologyFormula.module.scss.d.ts @@ -0,0 +1,12 @@ +declare namespace MethodologyFormulaNamespace { + export interface IMethodologyFormulaScss { + formulaContainer: string; + } + } + +declare const MethodologyFormulaScssModule: MethodologyFormulaNamespace.IMethodologyFormulaScss & { + /** WARNING: Only available when `css-loader` is used without `style-loader` or `mini-css-extract-plugin` */ + locals: MethodologyFormulaNamespace.IMethodologyFormulaScss; + }; + + export = MethodologyFormulaScssModule; diff --git a/client/src/components/MethodologyFormula/MethodologyFormula.test.tsx b/client/src/components/MethodologyFormula/MethodologyFormula.test.tsx new file mode 100644 index 00000000..ec461f3a --- /dev/null +++ b/client/src/components/MethodologyFormula/MethodologyFormula.test.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import {render} from '@testing-library/react'; +import {LocalizedComponent} from '../../test/testHelpers'; +import MethodologyFormula from './MethodologyFormula'; + +describe('rendering of the MethodologyFormula', () => { + const {asFragment} = render( + + + , + ); + + it('checks if component renders', () => { + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/client/src/components/MethodologyFormula/MethodologyFormula.tsx b/client/src/components/MethodologyFormula/MethodologyFormula.tsx new file mode 100644 index 00000000..c60f08c4 --- /dev/null +++ b/client/src/components/MethodologyFormula/MethodologyFormula.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import {useIntl} from 'gatsby-plugin-intl'; + +import * as METHODOLOGY_COPY from '../../data/copy/methodology'; +import * as styles from './MethodologyFormula.module.scss'; + +// The site shows the formula used in the methodology. The constants seen +// below aim to capture the 3 part of that formula. These are not +// reserved words. + +const MethodologyFormula = () => { + const intl = useIntl(); + + return ( +
+

+ {intl.formatMessage(METHODOLOGY_COPY.PAGE.FORMULA_INTRO)} +

+ +

+ {METHODOLOGY_COPY.FORMULA.IF} +

+ +

+ {METHODOLOGY_COPY.FORMULA.AND} +

+ +

+ {METHODOLOGY_COPY.FORMULA.THEN} +

+
+ ); +}; + +export default MethodologyFormula; diff --git a/client/src/components/MethodologyFormula/__snapshots__/MethodologyFormula.test.tsx.snap b/client/src/components/MethodologyFormula/__snapshots__/MethodologyFormula.test.tsx.snap new file mode 100644 index 00000000..17b1f85f --- /dev/null +++ b/client/src/components/MethodologyFormula/__snapshots__/MethodologyFormula.test.tsx.snap @@ -0,0 +1,31 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`rendering of the MethodologyFormula checks if component renders 1`] = ` + +
+

+ + Under the current formula, a census tract will be considered disadvantaged: + +

+

+ + IF + + it is above the threshold for one or more climate or environmental indicator +

+

+ + AND + + it is above the threshold for one or more socioeconomic indicator +

+

+ + THEN + + the community is considered disadvantaged. +

+
+
+`; diff --git a/client/src/components/MethodologyFormula/index.tsx b/client/src/components/MethodologyFormula/index.tsx new file mode 100644 index 00000000..542ad943 --- /dev/null +++ b/client/src/components/MethodologyFormula/index.tsx @@ -0,0 +1,3 @@ +import MethodologyFormula from './MethodologyFormula'; + +export default MethodologyFormula; diff --git a/client/src/components/__snapshots__/scoreStepsList.test.tsx.snap b/client/src/components/__snapshots__/scoreStepsList.test.tsx.snap deleted file mode 100644 index 9c62ef15..00000000 --- a/client/src/components/__snapshots__/scoreStepsList.test.tsx.snap +++ /dev/null @@ -1,125 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`rendering of the component should match the snapshot of the MapIntroduction component 1`] = ` - -

- Methodology -

-
-
-

- The methodology for identifying communities of focus is calculated at the census block group level. Census block geographical boundaries are determined by the U.S. Census Bureau once every ten years. This tool utilizes the census block boundaries from 2010. -

-

- The following describes the process for identifying communities of focus. -

-
-
-
    -
  1. -

    - Gather datasets -

    -

    - -

    -

    - The methodology includes the following inputs that are equally weighted. -

    -

    - Percent of Area Median Income -

    -

    - If a census block group is in a metropolitan area, this value is the median income of the census block group calculated as a percent of the metropolitan area’s median income. -

    -

    - If a census block group is not in a metropolitan area, this value is the median income of the census block group calculated as a percent of the state’s median income. -

    -

    - Percent of households below or at 100% of the federal poverty line -

    - This is the percent of households in a state with a household income - below or at 100% of the - - federal poverty line - - . This federal poverty line is calculated - based on the composition of each household (e.g., based on household size), but it does not vary geographically. -

    - The high school degree achievement rate for adults 25 years and older -

    -

    - The percent of individuals who are 25 or older who have received a high school degree. -

    -
  2. -
  3. -

    - Determine communites of focus -

    -

    - -

    -

    - Under the existing formula, a census block group will be considered a community of focus if: -

    -

    - (The median income is less than 80% of the area median income -

    - -

    - OR -

    - -

    - households living in poverty (at or below 100% of the federal poverty level) is greater than 20%) -

    - -

    - AND -

    - -

    - The high school degree achievement rate for adults 25 years and older is greater than 95% -

    -
  4. -
-
-`; diff --git a/client/src/components/scoreStepsList.test.tsx b/client/src/components/scoreStepsList.test.tsx deleted file mode 100644 index 0d48c454..00000000 --- a/client/src/components/scoreStepsList.test.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import * as React from 'react'; -import {render} from '@testing-library/react'; -import ScoreStepsList from './scoreStepsList'; -import {LocalizedComponent} from '../test/testHelpers'; - -// TODO: Move this to a location that will detect on all tests -// See ticket: #550 -beforeAll(() => { - jest.spyOn(global.console, 'error').mockImplementation((...params) => { - console.error(params); - }); -}); - -describe('rendering of the component', () => { - const {asFragment} = render( - - - , - ); - - it('should match the snapshot of the MapIntroduction component', () => { - expect(asFragment()).toMatchSnapshot(); - }); - - it('No console errors', () => { - expect(console.error).toBeCalledTimes(0); - }); -}); diff --git a/client/src/data/copy/methodology.tsx b/client/src/data/copy/methodology.tsx index 1db933d2..ee11849b 100644 --- a/client/src/data/copy/methodology.tsx +++ b/client/src/data/copy/methodology.tsx @@ -14,18 +14,68 @@ export const PAGE = defineMessages({ description: 'methodology page header text', }, DESCRIPTION: { - id: 'methodology.page.paragraph.first', - defaultMessage: 'The methodology for identifying communities of focus is currently ' + - 'in a draft, pre-decisional form that may change over time as more datasets become available.', - description: 'methodology page paragraph 1', + id: 'methodology.page.paragraph', + defaultMessage: ` + This tool identifies commmunities that are economically disadvantaged, overburdened by + certain environmental risks, and marginalized by legacies of historic underinvestment. + A community qualifies as 'disadvantaged' when a census tract is at or above a certain + threshold for a climate or environmental burden indicator and also above a certain + threshold for a socioeconomic indicator. Census tract geographical boundaries are + determined by the U.S. Census Bureau once every ten years. This tool untilizes the + census tract boundaries from 2010. + `, + description: 'methodology page paragraph', }, + FORMULA_INTRO: { + id: 'methodology.page.formula.intro', + defaultMessage: ` + Under the current formula, a census tract will be considered disadvantaged: + `, + description: 'methodology page introducing the formula', + }, + CATEGORY_TEXT: { + id: 'methodology.page.categories.title', + defaultMessage: ` + Communities will be defined as disadvantaged if they meet the qualifications under one + or more of the 8 categories of criteria below. + `, + description: 'methodology page explanation of the categories', + }, + }); +export const FORMULA = { + IF: IF, + }} + />, + AND: AND, + }} + />, + THEN: THEN, + }} + />, +}; + // Download Package export const DOWNLOAD_FILE_SIZE = '111MB'; -export const DOWNLOAD_LAST_UPDATED = '12/15/21'; -export const DOWNLOAD_LAST_UPDATED_ES = '15/12/21'; +export const DOWNLOAD_LAST_UPDATED = '12/13/21'; +export const DOWNLOAD_LAST_UPDATED_ES = '13/12/21'; export const VERSION_NUMBER = '0.1'; export const DOWNLOAD_ZIP_URL = [ @@ -37,7 +87,7 @@ export const DOWNLOAD_ZIP_URL = [ export const DOWNLOAD_PACKAGE = { TITLE: , DESCRIPTION: , +}; + + +// Indicator Categories copy constants: +export const CATEGORIES = { + CLIMATE_CHANGE: { + TITLE: , + IF: IF, + expAgrLossRate: expected agriculture loss rate, + expbuildLossRate: expected building loss rate, + expPopLossRate: expected population loss rate, + }} + />, + AND: AND, + asterisk: *, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, + CLEAN_ENERGY: { + TITLE: , + IF: IF, + energyCostBur: energy cost burden score, + pm25: PM2.5, + }} + />, + AND: AND, + asterisk: *, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, + CLEAN_TRANSPORT: { + TITLE: , + IF: IF, + dieselPM: diesel particulate matter, + traffic: traffic proximity and volume, + }} + />, + AND: AND, + asterisk: *, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, + AFFORDABLE_HOUSING: { + TITLE: , + IF: IF, + lead: lead paint, + medianHomeVal: the median home value, + houseBur: housing cost burden, + }} + />, + AND: AND, + asterisk: *, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, + LEGACY_POLLUTION: { + TITLE: , + IF: IF, + proxHaz: proximity to hazardous waste facilities, + proxNPL: proximity to NLP sites, + proxRMP: proximity to RMP sites, + }} + />, + AND: AND, + asterisk: *, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, + CLEAN_WATER: { + TITLE: , + IF: IF, + wasteWater: wastewater discharge, + }} + />, + AND: AND, + asterisk: *, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, + HEALTH_BURDENS: { + TITLE: , + IF: IF, + diabetes: diabetes, + asthma: asthma, + heart: heart disease, + life: low life expectancy, + }} + />, + AND: AND, + asterisk: *, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, + WORKFORCE_DEV: { + TITLE: , + IF: IF, + lowMedInc: low median income relative to area median income, + linIso: linguistic isolation, + unemploy: unemployment, + poverty: poverty, + }} + />, + AND: AND, + highSchool: the high school degree achievement rates, + }} + />, + THEN: THEN, + asterisk: *, + }} + />, + }, +}; + // Dataset section export const DATASETS = defineMessages({ HEADING: { @@ -97,291 +487,426 @@ export const DATASETS = defineMessages({ }); export const DATASET_CARD_LABELS = defineMessages({ - RESOLUTION: { - id: 'datasetCard.dataResolution', - defaultMessage: 'Data resolution: ', + USED_IN: { + id: 'datasetCard.used.in', + defaultMessage: 'Used in: ', description: 'label associated with explaining the card', }, - SOURCE: { - id: 'datasetCard.dataSource', - defaultMessage: 'Data source: ', + RESP_PARTY: { + id: 'datasetCard.responsible.party', + defaultMessage: 'Responsible Party: ', description: 'label associated with explaining the card', }, DATE_RANGE: { - id: 'datasetCard.dataDateRange', - defaultMessage: 'Data date range: ', + id: 'datasetCard.date.range', + defaultMessage: 'Date range: ', description: 'label associated with explaining the card', }, }); export const INDICATORS = [ { - indicator: 'Area Median Income', - description: `Median income of the census block group calculated as a percent - of the metropolitan area’s or state's median income.`, - dataResolution: `Census block group`, - dataSourceLabel: `Census's American Community Survey`, + domID: 'low-income', + indicator: 'Low Income', + description: ` + Percent of a block group's population in households where household income is at or below + 200% of the federal poverty level. + `, + usedIn: + , + respPartyLabel: + , dataSourceURL: `https://www.census.gov/programs-surveys/acs`, - dataDateRange: `2015-2019`, + dateRange: `2015-2019`, }, { - indicator: 'Poverty', - description: `Percent of a block group's population in households where the household income` + - ` is at or below 100% of the federal poverty level.`, - dataResolution: `Census block group`, - dataSourceLabel: `Census's American Community Survey`, - dataSourceURL: `https://www.census.gov/programs-surveys/acs`, - dataDateRange: `2015-2019`, - }, - { - indicator: 'Education, less than high school education', - description: `Percent of people ages 25 years or older in a block group whose - education level is less than a high school diploma.`, - dataResolution: `Census block group`, - dataSourceLabel: `Census's American Community Survey`, - dataSourceURL: `https://www.census.gov/programs-surveys/acs`, - dataDateRange: `2015-2019`, - }, -]; - -export const ADDITIONAL_INDICATORS = [ - { - indicator: 'Diabetes', - description: `People ages 18 years and older who report having ever been - told by a doctor, nurse, or other health professionals that they have - diabetes other than diabetes during pregnancy.`, - dataResolution: `Census tract`, - dataSourceLabel: `Centers for Disease Control and Prevention (CDC) PLACES`, - dataSourceURL: `https://www.cdc.gov/places/index.html`, - dataDateRange: `2016-2019`, - }, - { - indicator: 'Asthma', - description: `Weighted number of respondents people who answer “yes” both - to both of the following questions: “Have you ever been told by a doctor, - nurse, or other health professional that you have asthma?” and the question - “Do you still have asthma?”`, - dataResolution: `Census tract`, - dataSourceLabel: `Centers for Disease Control and Prevention (CDC) PLACES`, - dataSourceURL: `https://www.cdc.gov/places/index.html`, - dataDateRange: `2016-2019`, - }, - { - indicator: 'Heart disease', - description: `People ages 18 years and older who report ever having been told - by a doctor, nurse, or other health professionals that they had angina or - coronary heart disease.`, - dataResolution: `Census tract`, - dataSourceLabel: `Centers for Disease Control and Prevention (CDC) PLACES`, - dataSourceURL: `https://www.cdc.gov/places/index.html`, - dataDateRange: `2016-2019`, - }, - { - indicator: 'Life expectancy', - description: `Estimated years of life expectancy.`, - dataResolution: `Census tract`, - dataSourceLabel: `Centers for Disease Control and Prevention (CDC) - US Small-area Life Expectancy Estimates Project`, - dataSourceURL: `https://www.cdc.gov/nchs/nvss/usaleep/usaleep.html#data`, - dataDateRange: `2010-2015`, - }, - { - indicator: 'Traffic proximity and volume', - description: `Count of vehicles (average annual daily traffic) at major roads - within 500 meters, divided by distance in meters (not km).`, - dataResolution: `Census block group`, - dataSourceLabel: `Department of Transportation (DOT) traffic data as compiled by EPA's EJSCREEN`, - dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, - dataDateRange: `2017`, - }, - { - indicator: 'FEMA Risk Index Expected Annual Loss Score', - description: `Average economic loss in dollars resulting from natural - hazards each year. It is calculated for each hazard type and quantifies - loss for relevant consequence types: buildings, people, and agriculture.`, - dataResolution: `Census tract`, - dataSourceLabel: `Federal Emergency Management Agency (FEMA)`, + domID: 'exp-agr-loss-rate', + indicator: 'Expected Agriculture Loss Rate', + description: ` + Economic loss rate to agriculture resulting from natural hazards each year. + `, + usedIn: `Climate change methodology`, + respPartyLabel: `Federal Emergency Management Agency (FEMA)`, dataSourceURL: `https://hazards.fema.gov/nri/expected-annual-loss`, - dataDateRange: `2014-2017`, + dateRange: `2014-2021`, }, { + domID: 'exp-bld-loss-rate', + indicator: 'Expected Building Loss Rate', + description: ` + Economic loss rate to buildings resulting from natural hazards each year. + `, + usedIn: `Climate change methodology`, + respPartyLabel: `Federal Emergency Management Agency (FEMA)`, + dataSourceURL: `https://hazards.fema.gov/nri/expected-annual-loss`, + dateRange: `2014-2021`, + }, + { + domID: 'exp-pop-loss-rate', + indicator: 'Expected Population Loss Rate', + description: ` + Rate relative to the population in fatalities and injuries resulting from natural hazards each + year. Population loss is defined as the Spatial Hazard Events and Losses or National Centers + for Environmental Information’s reported number of fatalities and injuries caused by the + hazard occurrence. To combine fatalities and injuries for the computation of population loss value, + an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database + classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries + and fatalities are counted as population loss. This total number of injuries and fatalities is + then divided by the population in the census tract to get a per-capita rate of population risk. + `, + usedIn: `Climate change methodology`, + respPartyLabel: `Federal Emergency Management Agency (FEMA)`, + dataSourceURL: `https://hazards.fema.gov/nri/expected-annual-loss`, + dateRange: `2014-2021`, + }, + { + domID: 'energy-burden', indicator: 'Energy burden', description: `Average annual energy cost ($) divided by household income.`, - dataResolution: `Census tract`, - dataSourceLabel: `Department of Energy (DOE) LEAD Score`, + usedIn: `Clean energy and energy efficiency methodology`, + respPartyLabel: `Department of Energy (DOE) LEAD Score`, dataSourceURL: `https://www.energy.gov/eere/slsc/low-income-energy-affordability-data-lead-tool`, - dataDateRange: `2018`, - }, - { - indicator: 'Housing cost burden', - description: `Households that are low income and spend more than 30% of their - income to housing costs.`, - dataResolution: `Census tract`, - dataSourceLabel: `Department of Housing & Urban Development’s - (HUD) Comprehensive Housing Affordability Strategy dataset`, - dataSourceURL: `https://www.huduser.gov/portal/datasets/cp.html`, - dataDateRange: `2013-2017`, - }, - { - indicator: 'Wastewater discharge', - description: `RSEI modeled Toxic Concentrations at stream segments within 500 - meters, divided by distance in kilometers (km).`, - dataResolution: `Census block group`, - dataSourceLabel: `Environmental Protection Agency (EPA) Risk-Screening - Environmental Indicators (RSEI) Model as compiled by EPA's EJSCREEN`, - dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, - dataDateRange: `2020`, - }, - { - indicator: 'Lead paint', - description: `Percent of housing units built pre-1960, used as an - indicator of potential lead paint exposure in homes.`, - dataResolution: `Census block group`, - dataSourceLabel: `Census's American Community Survey`, - dataSourceURL: `https://www.census.gov/programs-surveys/acs`, - dataDateRange: `2015-2019`, - }, - { - indicator: 'Diesel particulate matter', - description: `Mixture of particles that is part of diesel exhaust in the air.`, - dataResolution: `Census block group`, - dataSourceLabel: `Environmental Protection Agency (EPA) National Air Toxics Assessment (NATA) - as compiled by EPA's EJSCREEN`, - dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, - dataDateRange: `5-year estimates, 2015-2019`, + dateRange: `2018`, }, { + domID: 'pm-25', indicator: 'PM2.5', - description: `Fine inhalable particles, with diameters that are generally + description: `Fine inhalable particles, with diameters that are generally 2.5 micrometers and smaller.`, - dataResolution: `Census block group`, - dataSourceLabel: `Environmental Protection Agency (EPA) Office of Air + usedIn: `Clean energy and energy efficiency methodology`, + respPartyLabel: `Environmental Protection Agency (EPA) Office of Air and Radiation (OAR) fusion of model and monitor data as compiled by EPA's EJSCREEN`, dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, - dataDateRange: `2017`, + dateRange: `2017`, + }, + { + domID: 'diesel-pm', + indicator: 'Diesel particulate matter', + description: `Mixture of particles that is part of diesel exhaust in the air.`, + usedIn: `Clean transportation methodology`, + respPartyLabel: `Environmental Protection Agency (EPA) National Air Toxics Assessment (NATA) + as compiled by EPA's EJSCREEN`, + dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, + dateRange: `2014`, + }, + { + domID: 'traffic-vol', + indicator: 'Traffic proximity and volume', + description: `Count of vehicles (average annual daily traffic) at major roads + within 500 meters, divided by distance in meters (not km).`, + usedIn: `Clean transportation methodology`, + respPartyLabel: `Department of Transportation (DOT) traffic data as compiled by EPA's EJSCREEN`, + dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, + dateRange: `2017`, + }, + { + domID: 'house-burden', + indicator: 'Housing cost burden', + description: `Households that are low income and spend more than 30% of their + income to housing costs.`, + usedIn: `Affordable and sustainable housing methodology`, + respPartyLabel: `Department of Housing & Urban Development’s + (HUD) Comprehensive Housing Affordability Strategy dataset`, + dataSourceURL: `https://www.huduser.gov/portal/datasets/cp.html`, + dateRange: `2014-2018`, + }, + { + domID: 'lead-paint', + indicator: 'Lead paint', + description: `Percent of housing units built pre-1960, used as an + indicator of potential lead paint exposure in homes.`, + usedIn: `Affordable and sustainable housing methodology`, + respPartyLabel: `Census's American Community Survey`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2019`, + }, + { + domID: 'median-home', + indicator: 'Median home value', + description: `Median home value of owner-occupied housing units in the area.`, + usedIn: `Affordable and sustainable housing methodology`, + respPartyLabel: `Census's American Community Survey`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2019`, + }, + { + domID: 'prox-haz', + indicator: 'Proximity to hazardous waste facilities', + description: ` + Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large + Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers. + `, + usedIn: `Reduction and remediation of legacy pollution methodology`, + respPartyLabel: ` + Environmental Protection Agency (EPA) TSDF data calculated from EPA RCRAinfo database + as compiled by EPA’s EJSCREEN`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2020`, + }, + { + domID: 'prox-npl', + indicator: 'Proximity to National Priorities List (NPL) Sites', + description: ` + Count of proposed or listed NPL - also known as superfund - sites within 5 km (or nearest one + beyond 5 km), each divided by distance in kilometers.`, + usedIn: `Reduction and remediation of legacy pollution methodology`, + respPartyLabel: `Environmental Protection Agency (EPA) CERCLIS database as compiled by EPA’s EJSCREEN`, + dataSourceURL: `https://enviro.epa.gov/facts/rcrainfo/search.html`, + dateRange: `2020`, + }, + { + domID: 'prox-rmp', + indicator: 'Proximity to Risk Management Plan (RMP) Sites', + description: ` + Count of RMP (potential chemical accident management plan) facilities within 5 km (or nearest + one beyond 5 km), each divided by distance in kilometers.`, + usedIn: `Affordable and sustainable housing methodology`, + respPartyLabel: `Environmental Protection Agency (EPA) RMP database as compiled by EPA’s EJSCREEN`, + dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, + dateRange: `2020`, + }, + { + domID: 'waste-water', + indicator: 'Wastewater discharge', + description: `Risk-Screening Environmental Indicators (RSEI) modeled Toxic Concentrations at + stream segments within 500 meters, divided by distance in kilometers (km).`, + usedIn: `Critical clean water and waste infrastructure`, + respPartyLabel: `Environmental Protection Agency (EPA) Risk-Screening + Environmental Indicators (RSEI) Model as compiled by EPA's EJSCREEN`, + dataSourceURL: `https://www.epa.gov/ejscreen/technical-documentation-ejscreen`, + dateRange: `2020`, + }, + { + domID: 'asthma', + indicator: 'Asthma', + description: `Weighted number of respondents people who answer “yes” both + to both of the following questions: “Have you ever been told by a doctor, + nurse, or other health professional that you have asthma?” and the question + “Do you still have asthma?”`, + usedIn: `Health burdens methodology`, + respPartyLabel: `Centers for Disease Control and Prevention (CDC) PLACES`, + dataSourceURL: `https://www.cdc.gov/places/index.html`, + dateRange: `2016-2019`, + }, + { + domID: 'diabetes', + indicator: 'Diabetes', + description: `People ages 18 years and older who report having ever been + told by a doctor, nurse, or other health professionals that they have + diabetes other than diabetes during pregnancy.`, + usedIn: `Health burdens methodology`, + respPartyLabel: `Centers for Disease Control and Prevention (CDC) PLACES`, + dataSourceURL: `https://www.cdc.gov/places/index.html`, + dateRange: `2016-2019`, + }, + { + domID: 'heart-disease', + indicator: 'Heart disease', + description: `People ages 18 years and older who report ever having been told + by a doctor, nurse, or other health professionals that they had angina or + coronary heart disease.`, + usedIn: `Health burdens methodology`, + respPartyLabel: `Centers for Disease Control and Prevention (CDC) PLACES`, + dataSourceURL: `https://www.cdc.gov/places/index.html`, + dateRange: `2016-2019`, + }, + { + domID: 'life-exp', + indicator: 'Low life expectancy', + description: `Average number of years of life a person who has attained a given age can expect to live.`, + usedIn: `Health burdens methodology`, + respPartyLabel: `CDC’s U.S. Small-area Life Expectancy Estimates Project (USALEEP)`, + dataSourceURL: `https://www.cdc.gov/nchs/nvss/usaleep/usaleep.html#data`, + dateRange: `2010-2015`, + }, + { + domID: 'median-income', + indicator: 'Low median Income', + description: `Median income of the census tract calculated as a percent of the area’s median income.`, + usedIn: `Training and workforce development`, + respPartyLabel: `Census's American Community Survey`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2019`, + }, + { + domID: 'ling-iso', + indicator: 'Linguistic Isolation', + description: `Households in which no one age 14 and over speaks English only or also speaks + a language other than English`, + usedIn: `Training and workforce development`, + respPartyLabel: `Census's American Community Survey`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2019`, + }, + { + domID: 'unemploy', + indicator: 'Unemployment', + description: `Number of unemployed people as a percentage of the civilian labor force`, + usedIn: `Training and workforce development`, + respPartyLabel: `Census's American Community Survey`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2019`, + }, + { + domID: 'poverty', + indicator: 'Poverty', + description: `Percent of a tract's population in households where the household income` + + ` is at or below 100% of the federal poverty level.`, + usedIn: `Training and workforce development`, + respPartyLabel: `Census's American Community Survey`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2019`, + }, + { + domID: 'high-school', + indicator: 'High school degree achievement rate', + description: `Percent of people ages 25 years or older in a census tract whose + education level is less than a high school diploma.`, + usedIn: `Training and workforce development`, + respPartyLabel: `Census's American Community Survey`, + dataSourceURL: `https://www.census.gov/programs-surveys/acs`, + dateRange: `2015-2019`, }, - ]; - -// Methodology Steps: -export const METHODOLOGY_STEPS = defineMessages({ - HEADING: { - id: 'methodology.steps.heading', - defaultMessage: `Methodology`, - description: 'heading of methodology section', - }, - DESCRIPTION_1: { - id: 'methodology.steps.description.1', - defaultMessage: 'The methodology for identifying communities of focus is'+ - ' calculated at the census block group level. Census block geographical boundaries'+ - ' are determined by the U.S. Census Bureau once every ten years. This tool utilizes'+ - ' the census block boundaries from 2010.', - description: 'first description text ', - }, - DESCRIPTION_2: { - id: 'methodology.steps.description.2', - defaultMessage: 'The following describes the process for identifying communities of focus.', - description: 'second description text', - }, - STEP_1_HEADING: { - id: 'methodology.step.1.heading', - defaultMessage: `Gather datasets`, - description: 'first step heading', - }, - STEP_1_INFO: { - id: 'methodology.step.1.info', - defaultMessage: `The methodology includes the following inputs that are equally weighted.`, - description: 'first step info', - }, - STEP_1_A_HEADING: { - id: 'methodology.step.1.a.heading', - defaultMessage: `Percent of Area Median Income`, - description: 'step 1 a heading', - }, - STEP_1_A_INFO_1: { - id: 'methodology.step.1.a.info.1', - defaultMessage: 'If a census block group is in a metropolitan area, this value is the'+ - ' median income of the census block group calculated as a percent of'+ - ' the metropolitan area’s median income.', - description: 'step 1 a info 1', - }, - STEP_1_A_INFO_2: { - id: 'methodology.step.1.a.info.2', - defaultMessage: 'If a census block group is not in a metropolitan area, this value is the'+ - ' median income of the census block group calculated as a percent of the state’s median'+ - ' income.', - description: 'step 1 a info 2', - }, - STEP_1_B_HEADING: { - id: 'methodology.step.1.b.heading', - defaultMessage: `Percent of households below or at 100% of the federal poverty line`, - description: 'step 1 b heading', - }, - STEP_1_C_HEADING: { - id: 'methodology.step.1.c.heading', - defaultMessage: `The high school degree achievement rate for adults 25 years and older`, - description: 'step 1 a heading', - }, - STEP_1_C_INFO: { - id: 'methodology.step.1.c.info', - defaultMessage: 'The percent of individuals who are 25 or older who have received a high school degree.', - description: 'step 1 c info', - }, - STEP_2_HEADING: { - id: 'methodology.step.2.heading', - defaultMessage: `Determine communites of focus`, - description: 'second step heading', - }, - STEP_2_INFO: { - id: 'methodology.step.2.info', - defaultMessage: `Under the existing formula, a census block group will be considered a community of focus if:`, - description: 'second step info', - }, -}); - -const FED_POVERTY_LINE_URL = 'https://www.census.gov/topics/income-poverty/poverty/guidance/poverty-measures.html'; - -// Copy that has links or other HTML tags in them -export const COMPLEX_METH_STEPS = { - STEP_2_B_INFO: - federal poverty line - , - }} - />, - FORMULA: - (The median income is less than 80% of the area median income -

, - or: -

- OR -

, - livingAtPovery: -

- households living in poverty (at or below 100% of the federal poverty level) is greater than 20%) -

, - and: -

- AND -

, - education: -

- The high school degree achievement rate for adults 25 years and older is greater than 95% -

, - }} +export const RETURN_TO_TOP = { + LINK: , }; + +// Methodology Steps: +// export const METHODOLOGY_STEPS = defineMessages({ +// HEADING: { +// id: 'methodology.steps.heading', +// defaultMessage: `Methodology`, +// description: 'heading of methodology section', +// }, +// DESCRIPTION_1: { +// id: 'methodology.steps.description.1', +// defaultMessage: 'The methodology for identifying communities of focus is'+ +// ' calculated at the census block group level. Census block geographical boundaries'+ +// ' are determined by the U.S. Census Bureau once every ten years. This tool utilizes'+ +// ' the census block boundaries from 2010.', +// description: 'first description text ', +// }, +// DESCRIPTION_2: { +// id: 'methodology.steps.description.2', +// defaultMessage: 'The following describes the process for identifying communities of focus.', +// description: 'second description text', +// }, +// STEP_1_HEADING: { +// id: 'methodology.step.1.heading', +// defaultMessage: `Gather datasets`, +// description: 'first step heading', +// }, +// STEP_1_INFO: { +// id: 'methodology.step.1.info', +// defaultMessage: `The methodology includes the following inputs that are equally weighted.`, +// description: 'first step info', +// }, +// STEP_1_A_HEADING: { +// id: 'methodology.step.1.a.heading', +// defaultMessage: `Percent of Area Median Income`, +// description: 'step 1 a heading', +// }, +// STEP_1_A_INFO_1: { +// id: 'methodology.step.1.a.info.1', +// defaultMessage: 'If a census block group is in a metropolitan area, this value is the'+ +// ' median income of the census block group calculated as a percent of'+ +// ' the metropolitan area’s median income.', +// description: 'step 1 a info 1', +// }, +// STEP_1_A_INFO_2: { +// id: 'methodology.step.1.a.info.2', +// defaultMessage: 'If a census block group is not in a metropolitan area, this value is the'+ +// ' median income of the census block group calculated as a percent of the state’s median'+ +// ' income.', +// description: 'step 1 a info 2', +// }, +// STEP_1_B_HEADING: { +// id: 'methodology.step.1.b.heading', +// defaultMessage: `Percent of households below or at 100% of the federal poverty line`, +// description: 'step 1 b heading', +// }, +// STEP_1_C_HEADING: { +// id: 'methodology.step.1.c.heading', +// defaultMessage: `The high school degree achievement rate for adults 25 years and older`, +// description: 'step 1 a heading', +// }, +// STEP_1_C_INFO: { +// id: 'methodology.step.1.c.info', +// defaultMessage: 'The percent of individuals who are 25 or older who have received a high school degree.', +// description: 'step 1 c info', +// }, +// STEP_2_HEADING: { +// id: 'methodology.step.2.heading', +// defaultMessage: `Determine communites of focus`, +// description: 'second step heading', +// }, +// STEP_2_INFO: { +// id: 'methodology.step.2.info', +// defaultMessage: `Under the existing formula, a census block group will be considered a community of focus if:`, +// description: 'second step info', +// }, +// }); + +// const FED_POVERTY_LINE_URL = 'https://www.census.gov/topics/income-poverty/poverty/guidance/poverty-measures.html'; + +// // Copy that has links or other HTML tags in them +// export const COMPLEX_METH_STEPS = { +// STEP_2_B_INFO: +// federal poverty line +// , +// }} +// />, +// FORMULA: +// (The median income is less than 80% of the area median income +//

, +// or: +//

+// OR +//

, +// livingAtPovery: +//

+// households living in poverty (at or below 100% of the federal poverty level) is greater than 20%) +//

, +// and: +//

+// AND +//

, +// education: +//

+// The high school degree achievement rate for adults 25 years and older is greater than 95% +//

, +// }} +// />, +// }; diff --git a/client/src/pages/__snapshots__/methodology.test.tsx.snap b/client/src/pages/__snapshots__/methodology.test.tsx.snap index 376ded09..099e00c6 100644 --- a/client/src/pages/__snapshots__/methodology.test.tsx.snap +++ b/client/src/pages/__snapshots__/methodology.test.tsx.snap @@ -317,17 +317,60 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis data-testid="grid" >

- The methodology for identifying communities of focus is currently in a draft, pre-decisional form that may change over time as more datasets become available. + + This tool identifies commmunities that are economically disadvantaged, overburdened by + certain environmental risks, and marginalized by legacies of historic underinvestment. + A community qualifies as 'disadvantaged' when a census tract is at or above a certain + threshold for a climate or environmental burden indicator and also above a certain + threshold for a socioeconomic indicator. Census tract geographical boundaries are + determined by the U.S. Census Bureau once every ten years. This tool untilizes the + census tract boundaries from 2010. + +

+
+
+

+ + Under the current formula, a census tract will be considered disadvantaged: + +

+

+ + IF + + it is above the threshold for one or more climate or environmental indicator +

+

+ + AND + + it is above the threshold for one or more socioeconomic indicator +

+

+ + THEN + + the community is considered disadvantaged. +

+
+
+

+ + Communities will be defined as disadvantaged if they meet the qualifications under one + or more of the 8 categories of criteria below. +

- The package includes draft v0.1 of the list of communities of focus (.csv and .xlsx) and information about how to use the list (.pdf). + + The package includes draft v0.1 of the list of disadvantaged communities + (.csv and .xlsx) and information (.pdf) about how to use the list. + - Last updated: 12/15/21 + Last updated: 12/13/21
@@ -372,11 +418,422 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
+
+

+ + * + + Low Income +

+

+ + At or above 65th percentile for percent of census tract population of households where household + income is at or below 200% of the federal poverty level + +

+
+
+
+

+ Categories +

+
+
+
+
+
+

+ Climate change +

+

+ + + + IF + + at or above 90th percentile for + + expected agriculture loss rate + + OR + + expected building loss rate + + OR + + expected population loss rate + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Clean energy and energy efficiency +

+

+ + + + IF + + at or above 90th percentile for + + energy cost burden score + + OR + + PM2.5 + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Clean transportation +

+

+ + + + IF + + at or above 90th percentile for + + diesel particulate matter + + or + + traffic proximity and volume + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Affordable and sustainable housing +

+

+ + + + IF + + at or above 90th percentile for + + lead paint + + AND + + the median home value + + is less than + 90th percentile OR at or above the 90th percentile for the + + housing cost burden + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Reduction and remediation of legacy pollution +

+

+ + + + IF + + at or above 90th percentile for + + proximity to hazardous waste facilities + + OR + + proximity to NLP sites + + OR + + proximity to RMP sites + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Critical clean water and waste infrastructure +

+

+ + + + IF + + at or above 90th percentile for + + wastewater discharge + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Health burdens +

+

+ + + + IF + + at or above 90th percentile for + + asthma + + OR + + diabetes + + OR + + heart disease + + OR + + low life expectancy + + + +

+

+ + AND + + is low income + + * + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+

+ Training and workforce development +

+

+ + + + IF + + at or above 90th percentile for + + low median income relative to area median income + + OR + at or above the 90th percentile for + + linguistic isolation + + OR + + + unemployment + + OR + for percentage individuals in households at or below 100% federal + + poverty + + level at or above 90% + +

+

+ + + + AND + + where + + the high school degree achievement rates + + for adults 25 years and older is less than 90% + +

+

+ + THEN + + the community is disadvantaged. +

+
+
+
-
-
-

- The datasets come from a variety of sources and were selected based on relevance, availability, recency, and quality. The datasets seek to identify a range of human health, environmental, climate-related, and other cumulative impacts on communities. -

-
-
-
-
-

- Area Median Income -

-
- Median income of the census block group calculated as a percent - of the metropolitan area’s or state's median income. -
- -
-
-

- Poverty -

-
- Percent of a block group's population in households where the household income is at or below 100% of the federal poverty level. -
- -
-
-

- Education, less than high school education -

-
- Percent of people ages 25 years or older in a block group whose - education level is less than a high school diploma. -
- -
-
- - -
-
-

- Additional Indicators -

-
-
-
-
-

- These datasets provide additional information about each community. -

+
+
+

+ Low Income +

+
+ + Percent of a block group's population in households where household income is at or below + 200% of the federal poverty level. + +
+ +
+
+

+ Expected Agriculture Loss Rate +

+
+ + Economic loss rate to agriculture resulting from natural hazards each year. + +
+ +
+
+

+ Expected Building Loss Rate +

+
+ + Economic loss rate to buildings resulting from natural hazards each year. + +
+ +
+
+

+ Expected Population Loss Rate +

+
+ + Rate relative to the population in fatalities and injuries resulting from natural hazards each + year. Population loss is defined as the Spatial Hazard Events and Losses or National Centers + for Environmental Information’s reported number of fatalities and injuries caused by the + hazard occurrence. To combine fatalities and injuries for the computation of population loss value, + an injury is counted as one-tenth (1/10) of a fatality. The NCEI Storm Events Database + classifies injuries and fatalities as direct or indirect. Both direct and indirect injuries + and fatalities are counted as population loss. This total number of injuries and fatalities is + then divided by the population in the census tract to get a per-capita rate of population risk. + +
+ +
+
+

+ Energy burden +

+
+ Average annual energy cost ($) divided by household income. +
+ +
+
+

+ PM2.5 +

+
+ Fine inhalable particles, with diameters that are generally + 2.5 micrometers and smaller. +
+ +
+
+

+ Diesel particulate matter +

+
+ Mixture of particles that is part of diesel exhaust in the air. +
+ +
+
+

+ Traffic proximity and volume +

+
+ Count of vehicles (average annual daily traffic) at major roads + within 500 meters, divided by distance in meters (not km). +
+ +
+
+

+ Housing cost burden +

+
+ Households that are low income and spend more than 30% of their + income to housing costs. +
+ +
+
+

+ Lead paint +

+
+ Percent of housing units built pre-1960, used as an + indicator of potential lead paint exposure in homes. +
+ +
+
+

+ Median home value +

+
+ Median home value of owner-occupied housing units in the area. +
+ +
+
+

+ Proximity to hazardous waste facilities +

+
+ + Count of hazardous waste facilities (Treatment, Storage, and Disposal Facilities and Large + Quantity Generators) within 5 km (or nearest beyond 5 km), each divided by distance in kilometers. + +
+ +
+
+

+ Proximity to National Priorities List (NPL) Sites +

+
+ + Count of proposed or listed NPL - also known as superfund - sites within 5 km (or nearest one + beyond 5 km), each divided by distance in kilometers. +
+ +
+
+

+ Proximity to Risk Management Plan (RMP) Sites +

+
+ + Count of RMP (potential chemical accident management plan) facilities within 5 km (or nearest + one beyond 5 km), each divided by distance in kilometers. +
+ +
+
+

+ Wastewater discharge +

+
+ Risk-Screening Environmental Indicators (RSEI) modeled Toxic Concentrations at + stream segments within 500 meters, divided by distance in kilometers (km). +
+ +
+
+

+ Asthma +

+
+ Weighted number of respondents people who answer “yes” both + to both of the following questions: “Have you ever been told by a doctor, + nurse, or other health professional that you have asthma?” and the question + “Do you still have asthma?” +
+ +
+
+

+ Diabetes +

+
+ People ages 18 years and older who report having ever been + told by a doctor, nurse, or other health professionals that they have + diabetes other than diabetes during pregnancy. +
+ +
+
+

+ Heart disease +

+
+ People ages 18 years and older who report ever having been told + by a doctor, nurse, or other health professionals that they had angina or + coronary heart disease. +
+ +
+
+

+ Low life expectancy +

+
+ Average number of years of life a person who has attained a given age can expect to live. +
+ +
+
+

+ Low median Income +

+
+ Median income of the census tract calculated as a percent of the area’s median income. +
+ +
+
+

+ Linguistic Isolation +

+
+ Households in which no one age 14 and over speaks English only or also speaks + a language other than English +
+ +
+
+

+ Unemployment +

+
+ Number of unemployed people as a percentage of the civilian labor force +
+ +
+
+

+ Poverty +

+
+ Percent of a tract's population in households where the household income is at or below 100% of the federal poverty level. +
+ +
+
+

+ High school degree achievement rate +

+
+ Percent of people ages 25 years or older in a census tract whose + education level is less than a high school diploma. +
+ +
+
-
-

- Diabetes -

-
- People ages 18 years and older who report having ever been - told by a doctor, nurse, or other health professionals that they have - diabetes other than diabetes during pregnancy. -
- -
-
-

- Asthma -

-
- Weighted number of respondents people who answer “yes” both - to both of the following questions: “Have you ever been told by a doctor, - nurse, or other health professional that you have asthma?” and the question - “Do you still have asthma?” -
- -
-
-

- Heart disease -

-
- People ages 18 years and older who report ever having been told - by a doctor, nurse, or other health professionals that they had angina or - coronary heart disease. -
- -
-
-

- Life expectancy -

-
- Estimated years of life expectancy. -
- -
-
-

- Traffic proximity and volume -

-
- Count of vehicles (average annual daily traffic) at major roads - within 500 meters, divided by distance in meters (not km). -
- -
-
-

- FEMA Risk Index Expected Annual Loss Score -

-
- Average economic loss in dollars resulting from natural - hazards each year. It is calculated for each hazard type and quantifies - loss for relevant consequence types: buildings, people, and agriculture. -
- -
-
-

- Energy burden -

-
- Average annual energy cost ($) divided by household income. -
- -
-
-

- Housing cost burden -

-
- Households that are low income and spend more than 30% of their - income to housing costs. -
- -
-
-

- Wastewater discharge -

-
- RSEI modeled Toxic Concentrations at stream segments within 500 - meters, divided by distance in kilometers (km). -
- -
-
-

- Lead paint -

-
- Percent of housing units built pre-1960, used as an - indicator of potential lead paint exposure in homes. -
- -
-
-

- Diesel particulate matter -

-
- Mixture of particles that is part of diesel exhaust in the air. -
- -
-
-

- PM2.5 -

-
- Fine inhalable particles, with diameters that are generally - 2.5 micrometers and smaller. -
- -
-
-
- -
-
-
-

- Methodology -

-
-
-

- The methodology for identifying communities of focus is calculated at the census block group level. Census block geographical boundaries are determined by the U.S. Census Bureau once every ten years. This tool utilizes the census block boundaries from 2010. -

-

- The following describes the process for identifying communities of focus. -

-
-
-
    -
  1. -

    - Gather datasets -

    -

    - -

    -

    - The methodology includes the following inputs that are equally weighted. -

    -

    - Percent of Area Median Income -

    -

    - If a census block group is in a metropolitan area, this value is the median income of the census block group calculated as a percent of the metropolitan area’s median income. -

    -

    - If a census block group is not in a metropolitan area, this value is the median income of the census block group calculated as a percent of the state’s median income. -

    -

    - Percent of households below or at 100% of the federal poverty line -

    - This is the percent of households in a state with a household income - below or at 100% of the - - federal poverty line - - . This federal poverty line is calculated - based on the composition of each household (e.g., based on household size), but it does not vary geographically. -

    - The high school degree achievement rate for adults 25 years and older -

    -

    - The percent of individuals who are 25 or older who have received a high school degree. -

    -
  2. -
  3. -

    - Determine communites of focus -

    -

    - -

    -

    - Under the existing formula, a census block group will be considered a community of focus if: -

    -

    - (The median income is less than 80% of the area median income -

    - -

    - OR -

    - -

    - households living in poverty (at or below 100% of the federal poverty level) is greater than 20%) -

    - -

    - AND -

    - -

    - The high school degree achievement rate for adults 25 years and older is greater than 95% -

    -
  4. -
+ Return to top +
diff --git a/client/src/pages/methodology.tsx b/client/src/pages/methodology.tsx index d48080ec..26cf8c1d 100644 --- a/client/src/pages/methodology.tsx +++ b/client/src/pages/methodology.tsx @@ -2,11 +2,14 @@ import * as React from 'react'; import {Grid} from '@trussworks/react-uswds'; import {useIntl} from 'gatsby-plugin-intl'; +import Categories from '../components/Categories'; import DatasetContainer from '../components/DatasetContainer'; import DownloadPacket from '../components/DownloadPacket'; import J40MainGridContainer from '../components/J40MainGridContainer'; +import MethodologyFormula from '../components/MethodologyFormula'; import Layout from '../components/layout'; -import ScoreStepsList from '../components/scoreStepsList'; +import LowIncome from '../components/LowIncome'; +// import ScoreStepsList from '../components/scoreStepsList'; import * as METHODOLOGY_COPY from '../data/copy/methodology'; @@ -14,7 +17,6 @@ interface MethodPageProps { location: Location; } -// markup const IndexPage = ({location}: MethodPageProps) => { const intl = useIntl(); @@ -25,29 +27,44 @@ const IndexPage = ({location}: MethodPageProps) => {

{intl.formatMessage(METHODOLOGY_COPY.PAGE.HEADING)}

+ {/* First column */} - +

{intl.formatMessage(METHODOLOGY_COPY.PAGE.DESCRIPTION)}

+ + {/* Formula section */} + + + {/* Category description */} +
+

+ {intl.formatMessage(METHODOLOGY_COPY.PAGE.CATEGORY_TEXT)} +

+
- + + {/* Second column */} + + + - + {/* - + */} ); }; diff --git a/client/src/styles/global.scss b/client/src/styles/global.scss index 885e6983..c5d26062 100644 --- a/client/src/styles/global.scss +++ b/client/src/styles/global.scss @@ -81,14 +81,19 @@ p.flush { @include j40-element('sm', 4, 'normal', 0); } +// 24 pixel margin-bottom +.j40-mb-3 { + @include u-margin-bottom(3) +} + // 40 pixel margin-bottom .j40-mb-5 { @include u-margin-bottom(5) } -// 24 pixel margin-bottom -.j40-mb-3 { - @include u-margin-bottom(3) +// 56 pixel margin-top +.j40-mt-7 { + @include u-margin-top(7) } .j40-footer-ceq-font { diff --git a/client/src/styles/theme/_uswds-theme-typography.scss b/client/src/styles/theme/_uswds-theme-typography.scss index f0046858..8c14dc2e 100644 --- a/client/src/styles/theme/_uswds-theme-typography.scss +++ b/client/src/styles/theme/_uswds-theme-typography.scss @@ -319,13 +319,13 @@ Or use `false` for unneeded weights. ---------------------------------------- */ -$theme-font-weight-thin: false; +$theme-font-weight-thin: 100; $theme-font-weight-light: 300; $theme-font-weight-normal: 400; -$theme-font-weight-medium: false; -$theme-font-weight-semibold: false; +$theme-font-weight-medium: 500; +$theme-font-weight-semibold: 600; $theme-font-weight-bold: 700; -$theme-font-weight-heavy: false; +$theme-font-weight-heavy: 800; // If USWDS is generating your @font-face rules, // should we generate all available weights From 7fcecaee428fe76c92024363ae34af92a7808b8d Mon Sep 17 00:00:00 2001 From: Lucas Merrill Brown Date: Fri, 10 Dec 2021 10:16:22 -0500 Subject: [PATCH 04/12] Issue 970: reverse percentiles for AMI and life expectancy (#1018) * switching to low * fixing score-etl-post * updating comments * fixing comparison * create separate field for clarity * comment fix * removing healthy food * fixing bug in score post * running black and adding comment * Update pickles and add a helpful notes to README Co-authored-by: Shelby Switzer --- data/data-pipeline/README.md | 4 +- .../data_pipeline/etl/score/constants.py | 22 ++-- .../data_pipeline/etl/score/etl_score.py | 21 ++-- .../tests/sample_data/score_data_initial.csv | 6 +- .../snapshots/downloadable_data_expected.pkl | Bin 3809 -> 3831 bytes .../tests/snapshots/score_data_expected.pkl | Bin 14202 -> 43082 bytes .../snapshots/score_transformed_expected.pkl | Bin 13825 -> 42699 bytes .../tests/snapshots/tile_data_expected.pkl | Bin 3243 -> 3267 bytes ...pare_two_score_files_for_differences.ipynb | 61 ++++++++--- .../data_pipeline/score/field_names.py | 30 ++++-- .../data_pipeline/score/score_l.py | 100 +++++++++--------- 11 files changed, 144 insertions(+), 100 deletions(-) diff --git a/data/data-pipeline/README.md b/data/data-pipeline/README.md index 716f8ce9..15c1a959 100644 --- a/data/data-pipeline/README.md +++ b/data/data-pipeline/README.md @@ -309,7 +309,7 @@ If you update the score in any way, it is necessary to create new pickles so tha It starts with the `data_pipeline/etl/score/tests/sample_data/score_data_initial.csv`, which is the first two rows of the `score/full/usa.csv`. -To update this file, run a full score generation and then update the file as follows: +To update this file, run a full score generation, then open a Python shell from the `data-pipeline` directory (e.g. `poetry run python3`), and then update the file with the following commands: ``` import pickle from pathlib import Path @@ -322,6 +322,8 @@ score_initial_df = pd.read_csv(score_csv_path, dtype={"GEOID10_TRACT": "string"} score_initial_df.to_csv(data_path / "data_pipeline" / "etl" / "score" / "tests" / "sample_data" /"score_data_initial.csv", index=False) ``` +Now you can move on to updating inidvidual pickles for the tests. Note that it is helpful to do them in this order: + We have four pickle files that correspond to expected files: - `score_data_expected.pkl`: Initial score without counties - `score_transformed_expected.pkl`: Intermediate score with `etl._extract_score` and `etl. _transform_score` applied. There's no file for this intermediate process, so we need to capture the pickle mid-process. diff --git a/data/data-pipeline/data_pipeline/etl/score/constants.py b/data/data-pipeline/data_pipeline/etl/score/constants.py index d3338a82..17b218d2 100644 --- a/data/data-pipeline/data_pipeline/etl/score/constants.py +++ b/data/data-pipeline/data_pipeline/etl/score/constants.py @@ -81,7 +81,7 @@ TILES_SCORE_COLUMNS = [ field_names.DIABETES_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.ASTHMA_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.HEART_DISEASE_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.LIFE_EXPECTANCY_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.LOW_LIFE_EXPECTANCY_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.TRAFFIC_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.FEMA_RISK_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.ENERGY_BURDEN_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, @@ -89,7 +89,7 @@ TILES_SCORE_COLUMNS = [ field_names.LEAD_PAINT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.DIESEL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.PM25_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD + field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.POVERTY_LESS_THAN_200_FPL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, @@ -115,7 +115,7 @@ TILES_SCORE_FLOAT_COLUMNS = [ field_names.DIABETES_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.ASTHMA_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.HEART_DISEASE_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.LIFE_EXPECTANCY_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.LOW_LIFE_EXPECTANCY_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.TRAFFIC_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.FEMA_RISK_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.ENERGY_BURDEN_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, @@ -123,7 +123,7 @@ TILES_SCORE_FLOAT_COLUMNS = [ field_names.LEAD_PAINT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.DIESEL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.PM25_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD + field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.POVERTY_LESS_THAN_200_FPL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, @@ -137,7 +137,6 @@ DOWNLOADABLE_SCORE_INDICATOR_COLUMNS_BASIC = [ field_names.DIABETES_FIELD, field_names.ASTHMA_FIELD, field_names.HEART_DISEASE_FIELD, - field_names.LIFE_EXPECTANCY_FIELD, field_names.TRAFFIC_FIELD, field_names.FEMA_RISK_FIELD, field_names.ENERGY_BURDEN_FIELD, @@ -149,11 +148,11 @@ DOWNLOADABLE_SCORE_INDICATOR_COLUMNS_BASIC = [ field_names.TOTAL_POP_FIELD, ] -# For every indicator above, we want to include percentile and min-max normalized variants also +# For every indicator above, we want to include percentile also. DOWNLOADABLE_SCORE_INDICATOR_COLUMNS_FULL = list( pd.core.common.flatten( [ - [p, f"{p} (percentile)"] + [p, f"{p}{field_names.PERCENTILE_FIELD_SUFFIX}"] for p in DOWNLOADABLE_SCORE_INDICATOR_COLUMNS_BASIC ] ) @@ -165,8 +164,15 @@ DOWNLOADABLE_SCORE_COLUMNS = [ field_names.COUNTY_FIELD, field_names.STATE_FIELD, field_names.SCORE_G_COMMUNITIES, + # Note: the reverse percentile fields get moved down here because + # we put the raw value in the download along with the *reversed* percentile. + # All other fields we put in f"{field_name}" and + # f"{field_name}{field_names.PERCENTILE_FIELD_SUFFIX}", which doesn't work for the + # reversed percentile fields. field_names.MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD, - field_names.MEDIAN_INCOME_AS_PERCENT_OF_STATE_FIELD + field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.LIFE_EXPECTANCY_FIELD, + field_names.LOW_LIFE_EXPECTANCY_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, *DOWNLOADABLE_SCORE_INDICATOR_COLUMNS_FULL, ] diff --git a/data/data-pipeline/data_pipeline/etl/score/etl_score.py b/data/data-pipeline/data_pipeline/etl/score/etl_score.py index 38ce2ace..ff8c6aaf 100644 --- a/data/data-pipeline/data_pipeline/etl/score/etl_score.py +++ b/data/data-pipeline/data_pipeline/etl/score/etl_score.py @@ -404,9 +404,7 @@ class ScoreETL(ExtractTransformLoad): field_names.POVERTY_LESS_THAN_150_FPL_FIELD, field_names.POVERTY_LESS_THAN_200_FPL_FIELD, field_names.AMI_FIELD, - field_names.MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD, field_names.MEDIAN_INCOME_FIELD, - field_names.LIFE_EXPECTANCY_FIELD, field_names.ENERGY_BURDEN_FIELD, field_names.FEMA_RISK_FIELD, field_names.URBAN_HEURISTIC_FIELD, @@ -439,7 +437,6 @@ class ScoreETL(ExtractTransformLoad): field_names.CENSUS_UNEMPLOYMENT_FIELD_2010, field_names.CENSUS_POVERTY_LESS_THAN_100_FPL_FIELD_2010, field_names.CENSUS_DECENNIAL_TOTAL_POPULATION_FIELD_2009, - field_names.CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009, field_names.EXTREME_HEAT_FIELD, field_names.HEALTHY_FOOD_FIELD, field_names.IMPENETRABLE_SURFACES_FIELD, @@ -468,7 +465,19 @@ class ScoreETL(ExtractTransformLoad): ReversePercentile( field_name=field_names.READING_FIELD, low_field_name=field_names.LOW_READING_FIELD, - ) + ), + ReversePercentile( + field_name=field_names.MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD, + low_field_name=field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD, + ), + ReversePercentile( + field_name=field_names.LIFE_EXPECTANCY_FIELD, + low_field_name=field_names.LOW_LIFE_EXPECTANCY_FIELD, + ), + ReversePercentile( + field_name=field_names.CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009, + low_field_name=field_names.LOW_CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009, + ), ] columns_to_keep = ( @@ -505,10 +514,6 @@ class ScoreETL(ExtractTransformLoad): max_value = df_copy[numeric_column].max(skipna=True) - logger.info( - f"For data set {numeric_column}, the min value is {min_value} and the max value is {max_value}." - ) - df_copy[f"{numeric_column}{field_names.MIN_MAX_FIELD_SUFFIX}"] = ( df_copy[numeric_column] - min_value ) / (max_value - min_value) diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv b/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv index d04ba002..c986e88d 100644 --- a/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv +++ b/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv @@ -1,3 +1,3 @@ -GEOID10_TRACT,Persistent Poverty Census Tract,Housing burden (percent),Total population,Median household income (% of state median household income),Current asthma among adults aged >=18 years,Coronary heart disease among adults aged >=18 years,Cancer (excluding skin cancer) among adults aged >=18 years,Current lack of health insurance among adults aged 18-64 years,Diagnosed diabetes among adults aged >=18 years,Physical health not good for >=14 days among adults aged >=18 years,Percent of individuals < 100% Federal Poverty Line,Percent of individuals < 150% Federal Poverty Line,Percent of individuals < 200% Federal Poverty Line,Area Median Income (State or metropolitan),Median household income (% of AMI),Median household income in the past 12 months,Life expectancy (years),Energy burden,FEMA Risk Index Expected Annual Loss Score,Urban Heuristic Flag,Air toxics cancer risk,Respiratory hazard index,Diesel particulate matter,Particulate matter (PM2.5),Ozone,Traffic proximity and volume,Proximity to Risk Management Plan (RMP) facilities,Proximity to TSDF sites,Proximity to NPL sites,Wastewater discharge,Percent pre-1960s housing (lead paint indicator),Individuals under 5 years old,Individuals over 64 years old,Linguistic isolation (percent),Percent of households in linguistic isolation,Poverty (Less than 200% of federal poverty line),Percent individuals age 25 or over with less than high school degree,Unemployed civilians (percent),Housing + Transportation Costs % Income for the Regional Typical Household,Median value ($) of owner-occupied housing units,Expected building loss rate (Natural Hazards Risk Index),Expected agricultural loss rate (Natural Hazards Risk Index),Expected population loss rate (Natural Hazards Risk Index),Housing burden (percent) (percentile),Housing burden (percent) (min-max normalized),Total population (percentile),Total population (min-max normalized),Median household income (% of state median household income) (percentile),Median household income (% of state median household income) (min-max normalized),Current asthma among adults aged >=18 years (percentile),Current asthma among adults aged >=18 years (min-max normalized),Coronary heart disease among adults aged >=18 years (percentile),Coronary heart disease among adults aged >=18 years (min-max normalized),Cancer (excluding skin cancer) among adults aged >=18 years (percentile),Cancer (excluding skin cancer) among adults aged >=18 years (min-max normalized),Current lack of health insurance among adults aged 18-64 years (percentile),Current lack of health insurance among adults aged 18-64 years (min-max normalized),Diagnosed diabetes among adults aged >=18 years (percentile),Diagnosed diabetes among adults aged >=18 years (min-max normalized),Physical health not good for >=14 days among adults aged >=18 years (percentile),Physical health not good for >=14 days among adults aged >=18 years (min-max normalized),Percent of individuals < 100% Federal Poverty Line (percentile),Percent of individuals < 100% Federal Poverty Line (min-max normalized),Percent of individuals < 150% Federal Poverty Line (percentile),Percent of individuals < 150% Federal Poverty Line (min-max normalized),Percent of individuals < 200% Federal Poverty Line (percentile),Percent of individuals < 200% Federal Poverty Line (min-max normalized),Area Median Income (State or metropolitan) (percentile),Area Median Income (State or metropolitan) (min-max normalized),Median household income (% of AMI) (percentile),Median household income (% of AMI) (min-max normalized),Median household income in the past 12 months (percentile),Median household income in the past 12 months (min-max normalized),Life expectancy (years) (percentile),Life expectancy (years) (min-max normalized),Energy burden (percentile),Energy burden (min-max normalized),FEMA Risk Index Expected Annual Loss Score (percentile),FEMA Risk Index Expected Annual Loss Score (min-max normalized),Urban Heuristic Flag (percentile),Urban Heuristic Flag (min-max normalized),Air toxics cancer risk (percentile),Air toxics cancer risk (min-max normalized),Respiratory hazard index (percentile),Respiratory hazard index (min-max normalized),Diesel particulate matter (percentile),Diesel particulate matter (min-max normalized),Particulate matter (PM2.5) (percentile),Particulate matter (PM2.5) (min-max normalized),Ozone (percentile),Ozone (min-max normalized),Traffic proximity and volume (percentile),Traffic proximity and volume (min-max normalized),Proximity to Risk Management Plan (RMP) facilities (percentile),Proximity to Risk Management Plan (RMP) facilities (min-max normalized),Proximity to TSDF sites (percentile),Proximity to TSDF sites (min-max normalized),Proximity to NPL sites (percentile),Proximity to NPL sites (min-max normalized),Wastewater discharge (percentile),Wastewater discharge (min-max normalized),Percent pre-1960s housing (lead paint indicator) (percentile),Percent pre-1960s housing (lead paint indicator) (min-max normalized),Individuals under 5 years old (percentile),Individuals under 5 years old (min-max normalized),Individuals over 64 years old (percentile),Individuals over 64 years old (min-max normalized),Linguistic isolation (percent) (percentile),Linguistic isolation (percent) (min-max normalized),Percent of households in linguistic isolation (percentile),Percent of households in linguistic isolation (min-max normalized),Poverty (Less than 200% of federal poverty line) (percentile),Poverty (Less than 200% of federal poverty line) (min-max normalized),Percent individuals age 25 or over with less than high school degree (percentile),Percent individuals age 25 or over with less than high school degree (min-max normalized),Unemployed civilians (percent) (percentile),Unemployed civilians (percent) (min-max normalized),Housing + Transportation Costs % Income for the Regional Typical Household (percentile),Housing + Transportation Costs % Income for the Regional Typical Household (min-max normalized),Median value ($) of owner-occupied housing units (percentile),Median value ($) of owner-occupied housing units (min-max normalized),Expected building loss rate (Natural Hazards Risk Index) (percentile),Expected building loss rate (Natural Hazards Risk Index) (min-max normalized),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile),Expected agricultural loss rate (Natural Hazards Risk Index) (min-max normalized),Expected population loss rate (Natural Hazards Risk Index) (percentile),Expected population loss rate (Natural Hazards Risk Index) (min-max normalized),Score A,Score B,Socioeconomic Factors,Sensitive populations,Environmental effects,Exposures,Pollution Burden,Population Characteristics,Score C,Score D,Score E,"Low AMI, Low HS graduation",Meets socioeconomic criteria,Meets burden criteria,Score F (communities),Score G (communities),Score G,Score G (percentile),Score H (communities),Score H,Score I (communities),Score I,Score I (percentile),NMTC (communities),Score K (communities),Climate Factor (Definition L),Energy Factor (Definition L),Transportation Factor (Definition L),Housing Factor (Definition L),Pollution Factor (Definition L),Water Factor (Definition L),Health Factor (Definition L),Workforce Factor (Definition L),Definition L (communities),Any Non-Workforce Factor (Definition L),Definition L (percentile),Score A (percentile),Score A (top 25th percentile),Score A (top 30th percentile),Score A (top 35th percentile),Score A (top 40th percentile),Score B (percentile),Score B (top 25th percentile),Score B (top 30th percentile),Score B (top 35th percentile),Score B (top 40th percentile),Score C (percentile),Score C (top 25th percentile),Score C (top 30th percentile),Score C (top 35th percentile),Score C (top 40th percentile),Score D (percentile),Score D (top 25th percentile),Score D (top 30th percentile),Score D (top 35th percentile),Score D (top 40th percentile),Score E (percentile),Score E (top 25th percentile),Score E (top 30th percentile),Score E (top 35th percentile),Score E (top 40th percentile) -01073001100,True,0.3555555555555555,4897.0,0.7327449738800064,11.6,8.0,6.6,15.3,18.5,15.6,0.150375939849624,0.318796992481203,0.3744360902255639,57447.0,0.6445941476491375,37030.0,70.3,0.05,37.016020762747445,1.0,51.1530304943,0.735568574566,0.63998588,10.3951975342,39.404630719,253.995131498,2.03499777769,0.708723792992,0.134193041308,1.0556674669,0.205868653936,0.0308352052277,0.185011231366,0.0,0.0,0.407205697528,0.0911016949153,0.0092071611253196,38.0,85500.0,0.0199399484122346,0.0100179814652433,0.0003727376748275,0.7759834149819756,0.2585858585858585,0.6522319452040524,0.0696873532467162,0.2579768630616088,0.1567394572745385,0.8778835393887099,0.4078947368421052,0.7543109840773348,0.2112676056338028,0.4831470520823502,0.3,0.5996548516266466,0.2028753993610224,0.9542880640681668,0.4214285714285714,0.7464709927060441,0.3172043010752688,0.6168263717723972,0.150375939849624,0.7284793525682426,0.318796992481203,0.6286362018742833,0.3744360902255639,0.2971496201383377,0.2232322025800286,0.1757741606170599,0.1364573208439614,0.159739042112665,0.1395180645004889,0.0288201562824969,0.3398058252427184,0.8503016535630522,0.1111111111111111,0.8804885569871426,0.3701602076274744,0.5990586969676596,1.0,0.9853145934585578,0.0300384933188293,0.9694864048338367,0.1696726613313424,0.7707211349008275,0.1053235274194042,0.9307172437981412,0.5130755332417333,0.2444726227893863,0.2834163202031902,0.4679683805148301,0.0081194347824311,0.9043675287131808,0.1192079731904979,0.437416985702008,0.0016327034632494,0.7570383102846576,0.0172289593763426,0.924320063066614,9.412822248180045e-06,0.4488762142875745,0.205868653936,0.1217933692736411,0.0793595720750642,0.6929577831601427,0.185011231366,0.1279192436010707,0.0,0.1287405266036409,0.0,0.665989530432065,0.407205697528,0.4562465817642003,0.0911016949153,0.0304587252654599,0.0092071611253196,0.0933347766081238,0.2372881355932203,0.1107833945360314,0.0379401628742081,0.7913088977138564,0.0640255252302748,0.6494845360824743,0.0687832451226217,0.8598534256706785,0.0093618689816499,0.5611180560981327,0.3038554467503745,0.274954028134698,0.3142234653449515,0.694403820410807,0.7281133967159299,0.716876871280889,0.2945887467398247,0.2111838590774037,0.1532200824308956,0.4113194992089544,False,True,True,True,True,1,1,True,1,True,1,1,True,True,False,False,False,False,False,False,False,False,False,False,0,0.5707151600385447,False,False,False,False,0.5743417454488632,False,False,False,False,0.420866651834208,False,False,False,False,0.5840820897465948,False,False,False,False,0.3836627861551683,False,False,False,False -01073001400,True,0.2601092896174863,1906.0,0.7136694633528574,11.0,9.4,7.2,18.4,20.4,16.6,0.2816032887975334,0.3679342240493319,0.4835560123329907,57447.0,0.6278134628440127,36066.0,71.0,0.07,47.948511946777465,1.0,54.6950518653,0.76056054321,0.9098084377,10.498270137,39.3676601307,3015.87969265,1.81382525188,3.24085850684,0.214095348703,0.365101735929,0.628839590444,0.0582371458552,0.178908709339,0.0245098039215686,0.0165289256198,0.425498426023,0.148840688108,0.1150121065375302,44.0,67800.0,0.0995560141720271,0.0108783755900761,0.0018653260326052,0.5663862883099391,0.1891703924490809,0.0873245305622835,0.0271235644860611,0.2380414312617702,0.1524802086740484,0.8045192865135969,0.3684210526315788,0.8943994283480067,0.2507042253521127,0.6245163203947635,0.33,0.7302382332717638,0.2523961661341853,0.9743093661943348,0.4666666666666666,0.8111121597389815,0.3440860215053763,0.8631193240981165,0.2816032887975334,0.7965704042494299,0.3679342240493319,0.7848791996731208,0.4835560123329907,0.2971496201383377,0.2232322025800286,0.1615528584392014,0.1326629858757091,0.1480323983644555,0.1356231464796244,0.0390929078646344,0.3567961165048544,0.9660879441830278,0.1666666666666666,0.9676082963519111,0.4794851194677746,0.5990586969676596,1.0,0.9898725863654276,0.0324014302096176,0.9773807960068304,0.1759137053158734,0.9050177328254302,0.1497290027189099,0.9346157477978174,0.5213510451938572,0.2429887631355303,0.2826912370192468,0.943152489696642,0.0964083008791804,0.8841706383311196,0.1062519253676046,0.761049040289606,0.0074660410167418,0.8677110190900331,0.027487565893985,0.8909234242304798,3.255416928678718e-06,0.8349740865171759,0.628839590444,0.5187970414355288,0.1498830619032175,0.6589707529234055,0.178908709339,0.5804662877639023,0.0245098039215686,0.5016472641091752,0.0165289256198,0.6940255749147068,0.425498426023,0.6771362346016616,0.148840688108,0.9015492846415304,0.1150121065375302,0.2296362947527941,0.288135593220339,0.050687553715134,0.0290456994515583,0.983216164001288,0.3197166420251072,0.6757017645468937,0.0746906926653988,0.9859745848181268,0.0468739884070143,0.6855809047581842,0.469949864514998,0.6007989306039736,0.5860780273742789,0.8477656416916828,0.8321713526379463,0.8373694489891917,0.5934384789891263,0.4969272521601087,0.1806062834078359,0.683912734046348,False,True,True,True,True,1,1,True,1,True,1,1,True,True,True,True,True,False,False,False,True,True,True,True,1,0.7019884365966091,False,True,True,True,0.7102898663958122,False,True,True,True,0.9565888835084873,True,True,True,True,0.6881136547126078,False,False,True,True,0.7675469437716488,True,True,True,True +GEOID10_TRACT,Persistent Poverty Census Tract,Housing burden (percent),Total population,Median household income (% of state median household income),Current asthma among adults aged >=18 years,Coronary heart disease among adults aged >=18 years,Cancer (excluding skin cancer) among adults aged >=18 years,Current lack of health insurance among adults aged 18-64 years,Diagnosed diabetes among adults aged >=18 years,Physical health not good for >=14 days among adults aged >=18 years,Percent of individuals < 100% Federal Poverty Line,Percent of individuals < 150% Federal Poverty Line,Percent of individuals < 200% Federal Poverty Line,Area Median Income (State or metropolitan),Median household income in the past 12 months,Energy burden,FEMA Risk Index Expected Annual Loss Score,Urban Heuristic Flag,Air toxics cancer risk,Respiratory hazard index,Diesel particulate matter,Particulate matter (PM2.5),Ozone,Traffic proximity and volume,Proximity to Risk Management Plan (RMP) facilities,Proximity to TSDF sites,Proximity to NPL sites,Wastewater discharge,Percent pre-1960s housing (lead paint indicator),Individuals under 5 years old,Individuals over 64 years old,Linguistic isolation (percent),Percent of households in linguistic isolation,Poverty (Less than 200% of federal poverty line),Percent individuals age 25 or over with less than high school degree,Unemployed civilians (percent),Median value ($) of owner-occupied housing units,Percent enrollment in college or graduate school,Expected building loss rate (Natural Hazards Risk Index),Expected agricultural loss rate (Natural Hazards Risk Index),Expected population loss rate (Natural Hazards Risk Index),Percent individuals age 25 or over with less than high school degree in 2009,Percentage households below 100% of federal poverty line in 2009,Unemployed civilians (percent) in 2009,Unemployed civilians (percent) in 2010,Percent of individuals < 100% Federal Poverty Line in 2010,Total population in 2009,Summer days above 90F,Percent low access to healthy food,Percent impenetrable surface areas,Third grade reading proficiency,Median household income as a percent of area median income,Life expectancy (years),Median household income as a percent of territory median income in 2009,Housing burden (percent) (percentile),Housing burden (percent) (value urban only),Housing burden (percent) (percentile urban only),Housing burden (percent) (value rural only),Housing burden (percent) (percentile rural only),Housing burden (percent) (percentile urban/rural),Housing burden (percent) (min-max normalized),Total population (percentile),Total population (value urban only),Total population (percentile urban only),Total population (value rural only),Total population (percentile rural only),Total population (percentile urban/rural),Total population (min-max normalized),Median household income (% of state median household income) (percentile),Median household income (% of state median household income) (value urban only),Median household income (% of state median household income) (percentile urban only),Median household income (% of state median household income) (value rural only),Median household income (% of state median household income) (percentile rural only),Median household income (% of state median household income) (percentile urban/rural),Median household income (% of state median household income) (min-max normalized),Current asthma among adults aged >=18 years (percentile),Current asthma among adults aged >=18 years (value urban only),Current asthma among adults aged >=18 years (percentile urban only),Current asthma among adults aged >=18 years (value rural only),Current asthma among adults aged >=18 years (percentile rural only),Current asthma among adults aged >=18 years (percentile urban/rural),Current asthma among adults aged >=18 years (min-max normalized),Coronary heart disease among adults aged >=18 years (percentile),Coronary heart disease among adults aged >=18 years (value urban only),Coronary heart disease among adults aged >=18 years (percentile urban only),Coronary heart disease among adults aged >=18 years (value rural only),Coronary heart disease among adults aged >=18 years (percentile rural only),Coronary heart disease among adults aged >=18 years (percentile urban/rural),Coronary heart disease among adults aged >=18 years (min-max normalized),Cancer (excluding skin cancer) among adults aged >=18 years (percentile),Cancer (excluding skin cancer) among adults aged >=18 years (value urban only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile urban only),Cancer (excluding skin cancer) among adults aged >=18 years (value rural only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile rural only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile urban/rural),Cancer (excluding skin cancer) among adults aged >=18 years (min-max normalized),Current lack of health insurance among adults aged 18-64 years (percentile),Current lack of health insurance among adults aged 18-64 years (value urban only),Current lack of health insurance among adults aged 18-64 years (percentile urban only),Current lack of health insurance among adults aged 18-64 years (value rural only),Current lack of health insurance among adults aged 18-64 years (percentile rural only),Current lack of health insurance among adults aged 18-64 years (percentile urban/rural),Current lack of health insurance among adults aged 18-64 years (min-max normalized),Diagnosed diabetes among adults aged >=18 years (percentile),Diagnosed diabetes among adults aged >=18 years (value urban only),Diagnosed diabetes among adults aged >=18 years (percentile urban only),Diagnosed diabetes among adults aged >=18 years (value rural only),Diagnosed diabetes among adults aged >=18 years (percentile rural only),Diagnosed diabetes among adults aged >=18 years (percentile urban/rural),Diagnosed diabetes among adults aged >=18 years (min-max normalized),Physical health not good for >=14 days among adults aged >=18 years (percentile),Physical health not good for >=14 days among adults aged >=18 years (value urban only),Physical health not good for >=14 days among adults aged >=18 years (percentile urban only),Physical health not good for >=14 days among adults aged >=18 years (value rural only),Physical health not good for >=14 days among adults aged >=18 years (percentile rural only),Physical health not good for >=14 days among adults aged >=18 years (percentile urban/rural),Physical health not good for >=14 days among adults aged >=18 years (min-max normalized),Percent of individuals < 100% Federal Poverty Line (percentile),Percent of individuals < 100% Federal Poverty Line (value urban only),Percent of individuals < 100% Federal Poverty Line (percentile urban only),Percent of individuals < 100% Federal Poverty Line (value rural only),Percent of individuals < 100% Federal Poverty Line (percentile rural only),Percent of individuals < 100% Federal Poverty Line (percentile urban/rural),Percent of individuals < 100% Federal Poverty Line (min-max normalized),Percent of individuals < 150% Federal Poverty Line (percentile),Percent of individuals < 150% Federal Poverty Line (value urban only),Percent of individuals < 150% Federal Poverty Line (percentile urban only),Percent of individuals < 150% Federal Poverty Line (value rural only),Percent of individuals < 150% Federal Poverty Line (percentile rural only),Percent of individuals < 150% Federal Poverty Line (percentile urban/rural),Percent of individuals < 150% Federal Poverty Line (min-max normalized),Percent of individuals < 200% Federal Poverty Line (percentile),Percent of individuals < 200% Federal Poverty Line (value urban only),Percent of individuals < 200% Federal Poverty Line (percentile urban only),Percent of individuals < 200% Federal Poverty Line (value rural only),Percent of individuals < 200% Federal Poverty Line (percentile rural only),Percent of individuals < 200% Federal Poverty Line (percentile urban/rural),Percent of individuals < 200% Federal Poverty Line (min-max normalized),Area Median Income (State or metropolitan) (percentile),Area Median Income (State or metropolitan) (value urban only),Area Median Income (State or metropolitan) (percentile urban only),Area Median Income (State or metropolitan) (value rural only),Area Median Income (State or metropolitan) (percentile rural only),Area Median Income (State or metropolitan) (percentile urban/rural),Area Median Income (State or metropolitan) (min-max normalized),Median household income in the past 12 months (percentile),Median household income in the past 12 months (value urban only),Median household income in the past 12 months (percentile urban only),Median household income in the past 12 months (value rural only),Median household income in the past 12 months (percentile rural only),Median household income in the past 12 months (percentile urban/rural),Median household income in the past 12 months (min-max normalized),Energy burden (percentile),Energy burden (value urban only),Energy burden (percentile urban only),Energy burden (value rural only),Energy burden (percentile rural only),Energy burden (percentile urban/rural),Energy burden (min-max normalized),FEMA Risk Index Expected Annual Loss Score (percentile),FEMA Risk Index Expected Annual Loss Score (value urban only),FEMA Risk Index Expected Annual Loss Score (percentile urban only),FEMA Risk Index Expected Annual Loss Score (value rural only),FEMA Risk Index Expected Annual Loss Score (percentile rural only),FEMA Risk Index Expected Annual Loss Score (percentile urban/rural),FEMA Risk Index Expected Annual Loss Score (min-max normalized),Urban Heuristic Flag (percentile),Urban Heuristic Flag (value urban only),Urban Heuristic Flag (percentile urban only),Urban Heuristic Flag (value rural only),Urban Heuristic Flag (percentile rural only),Urban Heuristic Flag (percentile urban/rural),Urban Heuristic Flag (min-max normalized),Air toxics cancer risk (percentile),Air toxics cancer risk (value urban only),Air toxics cancer risk (percentile urban only),Air toxics cancer risk (value rural only),Air toxics cancer risk (percentile rural only),Air toxics cancer risk (percentile urban/rural),Air toxics cancer risk (min-max normalized),Respiratory hazard index (percentile),Respiratory hazard index (value urban only),Respiratory hazard index (percentile urban only),Respiratory hazard index (value rural only),Respiratory hazard index (percentile rural only),Respiratory hazard index (percentile urban/rural),Respiratory hazard index (min-max normalized),Diesel particulate matter (percentile),Diesel particulate matter (value urban only),Diesel particulate matter (percentile urban only),Diesel particulate matter (value rural only),Diesel particulate matter (percentile rural only),Diesel particulate matter (percentile urban/rural),Diesel particulate matter (min-max normalized),Particulate matter (PM2.5) (percentile),Particulate matter (PM2.5) (value urban only),Particulate matter (PM2.5) (percentile urban only),Particulate matter (PM2.5) (value rural only),Particulate matter (PM2.5) (percentile rural only),Particulate matter (PM2.5) (percentile urban/rural),Particulate matter (PM2.5) (min-max normalized),Ozone (percentile),Ozone (value urban only),Ozone (percentile urban only),Ozone (value rural only),Ozone (percentile rural only),Ozone (percentile urban/rural),Ozone (min-max normalized),Traffic proximity and volume (percentile),Traffic proximity and volume (value urban only),Traffic proximity and volume (percentile urban only),Traffic proximity and volume (value rural only),Traffic proximity and volume (percentile rural only),Traffic proximity and volume (percentile urban/rural),Traffic proximity and volume (min-max normalized),Proximity to Risk Management Plan (RMP) facilities (percentile),Proximity to Risk Management Plan (RMP) facilities (value urban only),Proximity to Risk Management Plan (RMP) facilities (percentile urban only),Proximity to Risk Management Plan (RMP) facilities (value rural only),Proximity to Risk Management Plan (RMP) facilities (percentile rural only),Proximity to Risk Management Plan (RMP) facilities (percentile urban/rural),Proximity to Risk Management Plan (RMP) facilities (min-max normalized),Proximity to TSDF sites (percentile),Proximity to TSDF sites (value urban only),Proximity to TSDF sites (percentile urban only),Proximity to TSDF sites (value rural only),Proximity to TSDF sites (percentile rural only),Proximity to TSDF sites (percentile urban/rural),Proximity to TSDF sites (min-max normalized),Proximity to NPL sites (percentile),Proximity to NPL sites (value urban only),Proximity to NPL sites (percentile urban only),Proximity to NPL sites (value rural only),Proximity to NPL sites (percentile rural only),Proximity to NPL sites (percentile urban/rural),Proximity to NPL sites (min-max normalized),Wastewater discharge (percentile),Wastewater discharge (value urban only),Wastewater discharge (percentile urban only),Wastewater discharge (value rural only),Wastewater discharge (percentile rural only),Wastewater discharge (percentile urban/rural),Wastewater discharge (min-max normalized),Percent pre-1960s housing (lead paint indicator) (percentile),Percent pre-1960s housing (lead paint indicator) (value urban only),Percent pre-1960s housing (lead paint indicator) (percentile urban only),Percent pre-1960s housing (lead paint indicator) (value rural only),Percent pre-1960s housing (lead paint indicator) (percentile rural only),Percent pre-1960s housing (lead paint indicator) (percentile urban/rural),Percent pre-1960s housing (lead paint indicator) (min-max normalized),Individuals under 5 years old (percentile),Individuals under 5 years old (value urban only),Individuals under 5 years old (percentile urban only),Individuals under 5 years old (value rural only),Individuals under 5 years old (percentile rural only),Individuals under 5 years old (percentile urban/rural),Individuals under 5 years old (min-max normalized),Individuals over 64 years old (percentile),Individuals over 64 years old (value urban only),Individuals over 64 years old (percentile urban only),Individuals over 64 years old (value rural only),Individuals over 64 years old (percentile rural only),Individuals over 64 years old (percentile urban/rural),Individuals over 64 years old (min-max normalized),Linguistic isolation (percent) (percentile),Linguistic isolation (percent) (value urban only),Linguistic isolation (percent) (percentile urban only),Linguistic isolation (percent) (value rural only),Linguistic isolation (percent) (percentile rural only),Linguistic isolation (percent) (percentile urban/rural),Linguistic isolation (percent) (min-max normalized),Percent of households in linguistic isolation (percentile),Percent of households in linguistic isolation (value urban only),Percent of households in linguistic isolation (percentile urban only),Percent of households in linguistic isolation (value rural only),Percent of households in linguistic isolation (percentile rural only),Percent of households in linguistic isolation (percentile urban/rural),Percent of households in linguistic isolation (min-max normalized),Poverty (Less than 200% of federal poverty line) (percentile),Poverty (Less than 200% of federal poverty line) (value urban only),Poverty (Less than 200% of federal poverty line) (percentile urban only),Poverty (Less than 200% of federal poverty line) (value rural only),Poverty (Less than 200% of federal poverty line) (percentile rural only),Poverty (Less than 200% of federal poverty line) (percentile urban/rural),Poverty (Less than 200% of federal poverty line) (min-max normalized),Percent individuals age 25 or over with less than high school degree (percentile),Percent individuals age 25 or over with less than high school degree (value urban only),Percent individuals age 25 or over with less than high school degree (percentile urban only),Percent individuals age 25 or over with less than high school degree (value rural only),Percent individuals age 25 or over with less than high school degree (percentile rural only),Percent individuals age 25 or over with less than high school degree (percentile urban/rural),Percent individuals age 25 or over with less than high school degree (min-max normalized),Unemployed civilians (percent) (percentile),Unemployed civilians (percent) (value urban only),Unemployed civilians (percent) (percentile urban only),Unemployed civilians (percent) (value rural only),Unemployed civilians (percent) (percentile rural only),Unemployed civilians (percent) (percentile urban/rural),Unemployed civilians (percent) (min-max normalized),Median value ($) of owner-occupied housing units (percentile),Median value ($) of owner-occupied housing units (value urban only),Median value ($) of owner-occupied housing units (percentile urban only),Median value ($) of owner-occupied housing units (value rural only),Median value ($) of owner-occupied housing units (percentile rural only),Median value ($) of owner-occupied housing units (percentile urban/rural),Median value ($) of owner-occupied housing units (min-max normalized),Percent enrollment in college or graduate school (percentile),Percent enrollment in college or graduate school (value urban only),Percent enrollment in college or graduate school (percentile urban only),Percent enrollment in college or graduate school (value rural only),Percent enrollment in college or graduate school (percentile rural only),Percent enrollment in college or graduate school (percentile urban/rural),Percent enrollment in college or graduate school (min-max normalized),Expected building loss rate (Natural Hazards Risk Index) (percentile),Expected building loss rate (Natural Hazards Risk Index) (value urban only),Expected building loss rate (Natural Hazards Risk Index) (percentile urban only),Expected building loss rate (Natural Hazards Risk Index) (value rural only),Expected building loss rate (Natural Hazards Risk Index) (percentile rural only),Expected building loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected building loss rate (Natural Hazards Risk Index) (min-max normalized),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile),Expected agricultural loss rate (Natural Hazards Risk Index) (value urban only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile urban only),Expected agricultural loss rate (Natural Hazards Risk Index) (value rural only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile rural only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected agricultural loss rate (Natural Hazards Risk Index) (min-max normalized),Expected population loss rate (Natural Hazards Risk Index) (percentile),Expected population loss rate (Natural Hazards Risk Index) (value urban only),Expected population loss rate (Natural Hazards Risk Index) (percentile urban only),Expected population loss rate (Natural Hazards Risk Index) (value rural only),Expected population loss rate (Natural Hazards Risk Index) (percentile rural only),Expected population loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected population loss rate (Natural Hazards Risk Index) (min-max normalized),Percent individuals age 25 or over with less than high school degree in 2009 (percentile),Percent individuals age 25 or over with less than high school degree in 2009 (value urban only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile urban only),Percent individuals age 25 or over with less than high school degree in 2009 (value rural only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile rural only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile urban/rural),Percent individuals age 25 or over with less than high school degree in 2009 (min-max normalized),Percentage households below 100% of federal poverty line in 2009 (percentile),Percentage households below 100% of federal poverty line in 2009 (value urban only),Percentage households below 100% of federal poverty line in 2009 (percentile urban only),Percentage households below 100% of federal poverty line in 2009 (value rural only),Percentage households below 100% of federal poverty line in 2009 (percentile rural only),Percentage households below 100% of federal poverty line in 2009 (percentile urban/rural),Percentage households below 100% of federal poverty line in 2009 (min-max normalized),Unemployed civilians (percent) in 2009 (percentile),Unemployed civilians (percent) in 2009 (value urban only),Unemployed civilians (percent) in 2009 (percentile urban only),Unemployed civilians (percent) in 2009 (value rural only),Unemployed civilians (percent) in 2009 (percentile rural only),Unemployed civilians (percent) in 2009 (percentile urban/rural),Unemployed civilians (percent) in 2009 (min-max normalized),Unemployed civilians (percent) in 2010 (percentile),Unemployed civilians (percent) in 2010 (value urban only),Unemployed civilians (percent) in 2010 (percentile urban only),Unemployed civilians (percent) in 2010 (value rural only),Unemployed civilians (percent) in 2010 (percentile rural only),Unemployed civilians (percent) in 2010 (percentile urban/rural),Unemployed civilians (percent) in 2010 (min-max normalized),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile),Percent of individuals < 100% Federal Poverty Line in 2010 (value urban only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile urban only),Percent of individuals < 100% Federal Poverty Line in 2010 (value rural only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile rural only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile urban/rural),Percent of individuals < 100% Federal Poverty Line in 2010 (min-max normalized),Total population in 2009 (percentile),Total population in 2009 (value urban only),Total population in 2009 (percentile urban only),Total population in 2009 (value rural only),Total population in 2009 (percentile rural only),Total population in 2009 (percentile urban/rural),Total population in 2009 (min-max normalized),Summer days above 90F (percentile),Summer days above 90F (value urban only),Summer days above 90F (percentile urban only),Summer days above 90F (value rural only),Summer days above 90F (percentile rural only),Summer days above 90F (percentile urban/rural),Summer days above 90F (min-max normalized),Percent low access to healthy food (percentile),Percent low access to healthy food (value urban only),Percent low access to healthy food (percentile urban only),Percent low access to healthy food (value rural only),Percent low access to healthy food (percentile rural only),Percent low access to healthy food (percentile urban/rural),Percent low access to healthy food (min-max normalized),Percent impenetrable surface areas (percentile),Percent impenetrable surface areas (value urban only),Percent impenetrable surface areas (percentile urban only),Percent impenetrable surface areas (value rural only),Percent impenetrable surface areas (percentile rural only),Percent impenetrable surface areas (percentile urban/rural),Percent impenetrable surface areas (min-max normalized),Low third grade reading proficiency (percentile),Third grade reading proficiency (value urban only),Low third grade reading proficiency (percentile urban only),Third grade reading proficiency (value rural only),Low third grade reading proficiency (percentile rural only),Low third grade reading proficiency (percentile urban/rural),Low median household income as a percent of area median income (percentile),Median household income as a percent of area median income (value urban only),Low median household income as a percent of area median income (percentile urban only),Median household income as a percent of area median income (value rural only),Low median household income as a percent of area median income (percentile rural only),Low median household income as a percent of area median income (percentile urban/rural),Low life expectancy (percentile),Life expectancy (years) (value urban only),Low life expectancy (percentile urban only),Life expectancy (years) (value rural only),Low life expectancy (percentile rural only),Low life expectancy (percentile urban/rural),Low median household income as a percent of territory median income in 2009 (percentile),Median household income as a percent of territory median income in 2009 (value urban only),Low median household income as a percent of territory median income in 2009 (percentile urban only),Median household income as a percent of territory median income in 2009 (value rural only),Low median household income as a percent of territory median income in 2009 (percentile rural only),Low median household income as a percent of territory median income in 2009 (percentile urban/rural),Total population in 2009 (island areas) and 2019 (states and PR),Score A,Score B,Socioeconomic Factors,Sensitive populations,Environmental effects,Exposures,Pollution Burden,Population Characteristics,Score C,Score D,Score E,"Low AMI, Low HS graduation",Meets socioeconomic criteria,Meets burden criteria,Score F (communities),Score G (communities),Score G,Score G (percentile),Score H (communities),Score H,Score I (communities),Score I,Score I (percentile),NMTC (communities),Score K (communities),Total threshold criteria exceeded,Is low income,At or above the 90th percentile for expected population loss rate and is low income,At or above the 90th percentile for expected agriculture loss rate and is low income,At or above the 90th percentile for expected building loss rate and is low income,Climate Factor (Definition L),At or above the 90th percentile for PM2.5 exposure and is low income,At or above the 90th percentile for energy burden and is low income,Energy Factor (Definition L),At or above the 90th percentile for diesel particulate matter and is low income,At or above the 90th percentile for traffic proximity and is low income,Transportation Factor (Definition L),At or above the 90th percentile for lead paint and the median house value is less than 90th percentile and is low income,At or above the 90th percentile for housing burden and is low income,Housing Factor (Definition L),At or above the 90th percentile for proximity to RMP sites and is low income,At or above the 90th percentile for proximity to superfund sites and is low income,At or above the 90th percentile for proximity to hazardous waste facilities and is low income,Pollution Factor (Definition L),At or above the 90th percentile for wastewater discharge and is low income,Water Factor (Definition L),At or above the 90th percentile for diabetes and is low income,At or above the 90th percentile for asthma and is low income,At or above the 90th percentile for heart disease and is low income,At or above the 90th percentile for low life expectancy and is low income,Health Factor (Definition L),At or above the 90th percentile for households in linguistic isolation and has low HS education,At or above the 90th percentile for households at or below 100% federal poverty level and has low HS education,At or below the 90th percentile for low median household income as a percent of area median income and has low HS education,At or above the 90th percentile for unemployment and has low HS education,Unemployed civilians (percent) in 2009 (island areas) and 2010 (states and PR),Unemployed civilians (percent) in 2009 exceeds 90th percentile,Percentage households below 100% of federal poverty line in 2009 (island areas) and 2010 (states and PR),Percentage households below 100% of federal poverty line in 2009 exceeds 90th percentile,Low median household income as a percent of territory median income in 2009 exceeds 90th percentile,Workforce Factor (Definition L),Definition L (communities),Any Non-Workforce Factor (Definition L),Definition L (percentile),Score A (percentile),Score A (top 25th percentile),Score A (top 30th percentile),Score A (top 35th percentile),Score A (top 40th percentile),Score B (percentile),Score B (top 25th percentile),Score B (top 30th percentile),Score B (top 35th percentile),Score B (top 40th percentile),Score C (percentile),Score C (top 25th percentile),Score C (top 30th percentile),Score C (top 35th percentile),Score C (top 40th percentile),Score D (percentile),Score D (top 25th percentile),Score D (top 30th percentile),Score D (top 35th percentile),Score D (top 40th percentile),Score E (percentile),Score E (top 25th percentile),Score E (top 30th percentile),Score E (top 35th percentile),Score E (top 40th percentile) +01073001100,True,0.2752043596730245,4897.0,0.7327449738800064,11.2,7.2,6.7,16.6,19.3,15.1,0.150375939849624,0.318796992481203,0.3744360902255639,57447.0,37030.0,0.049,18.7674524286,1.0,51.1530304943,0.735568574566,0.63998588,10.3951975342,39.404630719,253.995131498,2.03499777769,0.708723792992,0.134193041308,1.0556674669,0.205868653936,0.0308352052277,0.185011231366,0.0,0.0,0.407205697528,0.0821917808219178,0.0092071611253196,85500.0,0.0890751899397432,0.0004047858,0.0052243632,2.8039e-06,,,,0.1536983669548511,0.3189099613330878,,62.666668,0.068036923,0.171,58.143433,0.6445941476491375,70.3,,0.6466760729305078,0.2752043596730245,0.5700318443928049,,,0.5700318443928049,0.2752043596730245,0.6512411994432508,4897.0,0.6248587667340021,,,0.6248587667340021,0.0696873532467162,0.2608335861859708,0.7327449738800064,0.2830143458759886,,,0.2830143458759886,0.1567394572745385,0.8509696039125366,11.2,0.835724928163468,,,0.835724928163468,0.3795180722891565,0.7264920810941454,7.2,0.7844637979353648,,,0.7844637979353648,0.1875,0.4789587420739856,6.7,0.5678012699989358,,,0.5678012699989358,0.303921568627451,0.6191105803406409,16.6,0.6018127638440527,,,0.6018127638440527,0.2094488188976378,0.965388552418323,19.3,0.9599666536592288,,,0.9599666536592288,0.4275862068965517,0.697012994398476,15.1,0.7279967363155841,,,0.7279967363155841,0.3440233236151603,0.62043226838371,0.150375939849624,0.6145691950863328,,,0.6145691950863328,0.150375939849624,0.7319580582099551,0.318796992481203,0.7209861695730607,,,0.7209861695730607,0.318796992481203,0.6304939233619051,0.3744360902255639,0.6277982991151962,,,0.6277982991151962,0.3744360902255639,0.305080182775983,57447.0,0.2657396925099514,,,0.2657396925099514,0.2232322025800286,0.1531195524384805,37030.0,0.1572054644434553,,,0.1572054644434553,0.1395180645004889,0.864954517474865,0.049,0.9005173954895489,,,0.9005173954895489,0.0037065052950075,0.6038301323911519,18.7674524286,0.6383816255626487,,,0.6383816255626487,0.1876745242859999,0.5972204988211937,1.0,0.5000085573944445,,,0.5000085573944445,1.0,0.9847958474680182,51.1530304943,0.9819551446670092,,,0.9819551446670092,0.0300384933188293,0.968365553602812,0.735568574566,0.962352336928608,,,0.962352336928608,0.1696726613313424,0.7632321085543794,0.63998588,0.70386920047937,,,0.70386920047937,0.1053235274194042,0.928945948563286,10.3951975342,0.914819538763832,,,0.914819538763832,0.5130755332417333,0.2507228532296667,39.404630719,0.2360646695853011,,,0.2360646695853011,0.2834163202031902,0.4608804184722397,253.995131498,0.3487028727629068,,,0.3487028727629068,0.0081194347824311,0.9022445642626452,2.03499777769,0.8805423357414318,,,0.8805423357414318,0.1192079731904979,0.4244672369292306,0.708723792992,0.2870715924264731,,,0.2870715924264731,0.0016327034632494,0.753733057661383,0.134193041308,0.7050707022289178,,,0.7050707022289178,0.0172289593763426,0.9223869977156124,1.0556674669,0.9078447963253958,,,0.9078447963253958,9.412822248180045e-06,0.4454669531492817,0.205868653936,0.4334577327353032,,,0.4334577327353032,0.205868653936,0.1202416183565086,0.0308352052277,0.108484267470127,,,0.108484267470127,0.0793595720750642,0.695774381427278,0.185011231366,0.7452494265073442,,,0.7452494265073442,0.185011231366,0.1272208772721677,0.0,0.0997988895955446,,,0.0997988895955446,0.0,0.1284712368751773,0.0,0.0986150580340329,,,0.0986150580340329,0.0,0.668247726382076,0.407205697528,0.6576848015886603,,,0.6576848015886603,0.407205697528,0.4189274017467249,0.0821917808219178,0.4443872826422471,,,0.4443872826422471,0.0821917808219178,0.0297871177547618,0.0092071611253196,0.0285699569046924,,,0.0285699569046924,0.0092071611253196,0.1124511830921203,85500.0,0.1074913548122025,,,0.1074913548122025,0.0379401628742081,0.7459685121012851,0.0890751899397432,0.6989610478672336,,,0.6989610478672336,0.0890751899397432,0.7846412062513758,0.0004047858,0.82138883658833,,,0.82138883658833,0.01597287904858,0.5120452999319701,0.0052243632,0.5028314457028648,,,0.5028314457028648,0.0095124530398832,0.6143028498159407,2.8039e-06,0.6689315237296548,,,0.6689315237296548,0.0013204531501148,,,,,,,,,,,,,,,,,,,,,,0.9349594607528132,0.1536983669548511,0.9315960352498582,,,0.9315960352498582,0.1536983669548511,0.8950599559730369,0.3189099613330878,0.8870754376621368,,,0.8870754376621368,0.3189099613330878,,,,,,,,0.7537922665342821,62.666668,0.7585193484443679,,,0.7585193484443679,0.4423529401799308,0.8019598155467721,0.068036923,0.7905320987865615,,,0.7905320987865615,0.068036923,0.4126953421856217,0.171,0.2701910981682835,,,0.2701910981682835,0.1775700879261655,0.990724418702258,58.143433,0.9890918535191758,,,0.9890918535191758,0.8209741753282674,0.6445941476491375,0.7947837521917007,,,0.7947837521917007,0.97046998263836,70.3,0.9652438793658,,,0.9652438793658,,,,,,,4897.0,0.5435875640644005,0.2799472837363994,0.3784219111378495,0.3144122923519848,0.6896597619436307,0.7261571216484003,0.7139913350801438,0.3464171017449171,0.2473388089694474,0.1547617998296523,0.3781718392172476,False,True,True,True,True,1,1,True,1,True,1,1,True,True,0,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,0.1536983669548511,False,0.3189099613330878,False,False,False,False,False,0,0.5532898204078324,False,False,False,False,0.5490856986899564,False,False,False,False,0.5480683083104825,False,False,False,False,0.5438440021080796,False,False,False,False,0.3320495668977446,False,False,False,False +01073001400,True,0.1823529411764705,1906.0,0.7136694633528574,11.1,9.1,7.3,21.4,22.4,17.4,0.2816032887975334,0.3679342240493319,0.4835560123329907,57447.0,36066.0,0.07,17.3011023381,1.0,54.6950518653,0.76056054321,0.9098084377,10.498270137,39.3676601307,3015.87969265,1.81382525188,3.24085850684,0.214095348703,0.365101735929,0.628839590444,0.0582371458552,0.178908709339,0.0245098039215686,0.0165289256198,0.425498426023,0.1742543171114599,0.1150121065375302,67800.0,0.0771549125979505,0.0008951111,0.0067284885,2.3791e-06,,,,0.0804953560371517,0.2950894905920146,,61.666668,0.087159691,0.34900002,93.77919,0.6278134628440127,71.0,,0.3421186011150532,0.1823529411764705,0.2730613650055943,,,0.2730613650055943,0.1823529411764705,0.0867961243766976,1906.0,0.0702656897319135,,,0.0702656897319135,0.0271235644860611,0.2409731608418613,0.7136694633528574,0.263412880473859,,,0.263412880473859,0.1524802086740484,0.8385794307486707,11.1,0.8242488204618823,,,0.8242488204618823,0.3734939759036144,0.9217563763541756,9.1,0.934238532761006,,,0.934238532761006,0.2391304347826086,0.6048579715089994,7.3,0.6840345524850119,,,0.6840345524850119,0.3333333333333333,0.7894025988796952,21.4,0.765821774451027,,,0.765821774451027,0.2850393700787401,0.9878088657624612,22.4,0.9854641881585016,,,0.9854641881585016,0.4988505747126436,0.8447283118655634,17.4,0.8547216999538827,,,0.8547216999538827,0.411078717201166,0.8689250707460116,0.2816032887975334,0.8593419809294734,,,0.8593419809294734,0.2816032887975334,0.8013233263612626,0.3679342240493319,0.7879907224465252,,,0.7879907224465252,0.3679342240493319,0.7892247330790578,0.4835560123329907,0.7755862898376428,,,0.7755862898376428,0.4835560123329907,0.305080182775983,57447.0,0.2657396925099514,,,0.2657396925099514,0.2232322025800286,0.1410656612748476,36066.0,0.1454103468346629,,,0.1454103468346629,0.1356231464796244,0.970802270706518,0.07,0.9745685506050604,,,0.9745685506050604,0.0052950075642965,0.5282998116553705,17.3011023381,0.565061869961834,,,0.565061869961834,0.173011023381,0.5972204988211937,1.0,0.5000085573944445,,,0.5000085573944445,1.0,0.9895233034972276,54.6950518653,0.98758774182503,,,0.98758774182503,0.0324014302096176,0.9765534529502324,0.76056054321,0.9720766991953432,,,0.9720766991953432,0.1759137053158734,0.9016362174902248,0.9098084377,0.8766135935627462,,,0.8766135935627462,0.1497290027189099,0.9329441224077584,10.498270137,0.9196283911889414,,,0.9196283911889414,0.5213510451938572,0.2492010569566841,39.3676601307,0.2346340790789065,,,0.2346340790789065,0.2826912370192468,0.941127799514774,3015.87969265,0.9280004126050854,,,0.9280004126050854,0.0964083008791804,0.8815556546533155,1.81382525188,0.8555140890882322,,,0.8555140890882322,0.1062519253676046,0.7527465845056148,3.24085850684,0.6879172801040846,,,0.6879172801040846,0.0074660410167418,0.8655558708666099,0.214095348703,0.8377272571643783,,,0.8377272571643783,0.027487565893985,0.8882148073250197,0.365101735929,0.8688263024295902,,,0.8688263024295902,3.255416928678718e-06,0.8313806570181485,0.628839590444,0.7904954291779368,,,0.7904954291779368,0.628839590444,0.5164051837137336,0.0582371458552,0.4798079227582429,,,0.4798079227582429,0.1498830619032175,0.6618964608586371,0.178908709339,0.715890026363543,,,0.715890026363543,0.178908709339,0.5796575164471435,0.0245098039215686,0.5161060212798873,,,0.5161060212798873,0.0245098039215686,0.5008648531776597,0.0165289256198,0.424872462081008,,,0.424872462081008,0.0165289256198,0.6964500479723247,0.425498426023,0.6838429143698428,,,0.6838429143698428,0.425498426023,0.751664847161572,0.1742543171114599,0.7508831498439483,,,0.7508831498439483,0.1742543171114599,0.9067171316918536,0.1150121065375302,0.9060831344539256,,,0.9060831344539256,0.1150121065375302,0.0519655139795408,67800.0,0.0554747149655904,,,0.0554747149655904,0.0290456994515583,0.6434691260334525,0.0771549125979505,0.5807502400219449,,,0.5807502400219449,0.0771549125979505,0.9166162227602904,0.0008951111,0.9302158396521918,,,0.9302158396521918,0.0353246959378835,0.5755532434271079,0.0067284885,0.5614035087719298,,,0.5614035087719298,0.0122511928214689,0.558933421571466,2.3791e-06,0.6145407246401615,,,0.6145407246401615,0.0011202645354936,,,,,,,,,,,,,,,,,,,,,,0.6917513228236646,0.0804953560371517,0.6841770738494838,,,0.6841770738494838,0.0804953560371517,0.8737301229199994,0.2950894905920146,0.8632982287353754,,,0.8632982287353754,0.2950894905920146,,,,,,,,0.7501654807214959,61.666668,0.7551581487546324,,,0.7551581487546324,0.435294116816609,0.8647617479139218,0.087159691,0.8519741908983552,,,0.8519741908983552,0.087159691,0.6268497920495212,0.34900002,0.5359536815260283,,,0.5359536815260283,0.3624091475885,0.9537899773356836,93.77919,0.9454938966323262,,,0.9454938966323262,0.8355751594025679,0.6278134628440127,0.8102169783752192,,,0.8102169783752192,0.959938777375042,71.0,0.9533526317781056,,,0.9533526317781056,,,,,,,1906.0,0.7240574475669483,0.523497018864787,0.6395630962236926,0.5859863870065047,0.8438907148737418,0.8318309921361502,0.8358508997153473,0.6127747416150986,0.5121883191018196,0.1843255189540058,0.6553216288775894,False,True,True,True,True,1,1,True,1,True,1,1,True,True,9,True,False,False,True,True,True,True,True,True,True,True,False,False,False,False,False,False,False,False,False,True,False,True,True,True,False,False,False,True,0.0804953560371517,False,0.2950894905920146,False,False,True,True,True,1,0.7460439723787516,False,True,True,True,0.7500818777292576,True,True,True,True,0.9394564656693726,True,True,True,True,0.6605181011067418,False,False,True,True,0.7347062877528682,False,True,True,True diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/downloadable_data_expected.pkl b/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/downloadable_data_expected.pkl index be501bd1db85081371ac70a95e88a85c84aba782..1aa07d41fbe2b5f75f28d4390230baa219bc5dcf 100644 GIT binary patch delta 656 zcmaDT`(2i$fo1BOjVxKr^@o?+EXsC$WzS!GUzTIlT900IXB9a7FM6%glp zZ~t-b{kDtS-`RtNAMm_!fYI`Oui5k4F5AQCZ^jSLx7Z)HFEjgk<|OMS`;J$Kj!wDt z*gpJ~!Ds7pukBX^EOct++G@W;db-AU-(&Um2NzU6*mC}s{mIG91&euK*q=QE1U|+N zX<%UHpkq0yqwL8$`_6+)!W8Gcw}*(UIe;B%tmd%RB5byb^=o?#yQA$(uD*ikKO+N` zS8@n;Qx3|pe{O%mDa(qz{;j?06DGME`|}+pmaSn!a712rszCi+`?~EMJUe9H z*)J5*I$VCl$f54>H!e|MLx*3R?oFH=^w>TpZX@H>=MU_?c$l=?#a7zC3EUyq`g)`N zsric}wyu3`ucBJ?=Dfgr`zI$9_J5jl(LN*`1diJ;{mjKWY2y?764{eku1~MpYfrl~ zk@?97`|BqjuD)C!d)@qn%z0yfYtFa)=aHxEvy*a6O5~r|+oqno z)ZTQ*UcI1q_Uc)$?5FVwtUg@z#C})x#;IzuZ|$W%>hDXy7>FO(#Rb zPpLSF{>pWh{jcJ%Z2GKQZ+5=5Pn&#w;o4ho?WcvTJ@Nh86MIdedBIGs7MpWeilwk}EemaNK6v9K+qp3;?NqCPDxJ delta 616 zcmew^`%sppfo1BojVxKr^|Pbuk~cP8u>Y5!=crO~&Yl4X9`L+zfYCdyC|s{+xoi)k zzZpL~-(r8*zRc|FnUk!S?CnAht>D`G*gl|fW7e8^ukE8NT`v>_ZMR=hc2D1o_ptq% zO;7Kr7~i#Tn16A$gMm8O0SpXk z4muCBE#`~AvFEH1vYx;1CBy&*1&6a|KtRdi7weak0m?7zpG%$Uc|Gq9ME~SKi2ehC z4hmaOe`0T*Yd@uWV&EUzbwC-r3KZ2?8ta-vsWEYkj@ZzSrFH z!fMmk_L+IBoDE;Svlq)b2t?QH&+ik;U%2#wee8iv+PAN~uum{mQ@$qu$XP+F)5LMVm~iH#5Z}@ z9sAcB!IPzTyt1FhC$Rc()f4+&)f=a($-cFp**ZOL|H>EkqKY&3KmYp1e)gu5A>pS~ z97KQRI?Mi7arp7IwmtvETl<6)k3HgFytNm&<=8HI|B3x}|L09i&!RTxuof{fDfv!T z$=p+z0TV?LJpcdz diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/score_data_expected.pkl b/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/score_data_expected.pkl index 1416ef23d5c941cef16a203dd56591770f8b0ed7..30ce72173bd800ea4e2bdcd7b6dd23e62353363a 100644 GIT binary patch literal 43082 zcmeI5cU%<5`}h%iY-oZVT|0sxMO17<5dO-P^t6{O@01v6?zlnPZA`*Cpyr8OC=(NxDjzq4Sq%wX!^1 zwq<&HZr=EGgF06!AEP4E6Z?l#TOwrgF=QrHcXR8y&87TxdaY8Ooo+JLNumFui(uh_ zyGNweOPq}@P&Bb@>#xttCGj@eImVhgy+(`MZ!*@%&C@G1YLhO*=&3g3ICxkim^GsyLnE!Am3>>C^hT4a$a&TXbCvPy=Ds?FNv6ca#DV|e5B*;p!k(Es61%=mKwvbUF3Y!W_#263 zCgTb+jI}ZhN^G7Q`>nc8rIb_cigUxYR-r1GMYX$*qJBjL6pg_7ipGj&R?hLFouMEU zZFCum_KHqaBNUyjn-EAFRh>2iS7s(-h@ww|n|neP_qSEAdw9G_k!f9B754=9w^v<2 zph=NuU0qf8glZD1vvFN`ock=3!r$ng5m*s*MG!mYZdA-8r&X!q=2nICal^miPZiET z`bXA(l$=@0{Ij`S#cx~<6|&S{AZNmc*oHqG=K^kll9ji8IC)FAA)=N$rOEu+27hb^ z?f~ut?gH)s{tVm?JODfdJPbSnJPJGpJPteoJPAAnJPrI6_#5zd;2Gdq;2*$z;5p!V z;054C;3Z%I@G|fU@G9^c@H+4Y@D}hk@D8vDSPZ-iECt>NJ^+>h9|9i%9|NBN{{sFE z{0I0H_#F5G_%HA!@D=bi@D1=kAeBt^Mj&oqN!W!4OLJ$*vPw0@5}wWyF{*`|Tk%Qa zz+Wr#QR-0Ya{{e>EMM}qwgkOyw_&L4(mj+#e>#Q*)1QuEzyC&kTEh3X@Vz;F_X=CS zjQRwGnahQkx5o#=_wFF)58ngBo(11NI|Cg-W4k~7?Ns%1NEaPA)i?VBIjBww-57tnG@;tU;D5}vnM?{y*)Cln$>LPjV<@kk-eXV z4tQ8QY zVzl~tqc0*CtwwJ?+x_|8KnRm(&E*)-5BseU<@j z+Vy8)>imhQMc%TM)R`yx1?7KQ|GlS2`nl1c7gMA%cIM#^Tc?|&x1xWqr$1|&v>z)aa=v>A0Xlg0p9W~u1JU}p@>e4L zeQON7jOv)4M5mM#pp@u#gH@;mos1aWtLBu4h&#Rom99CL()>Q!UeqEa=I%q$`uOEf zqI(IN3FlXwL3J;rEr|H`COVn%SN$LBfuqYCOq6rpKfPT08elTy+8xbmO;y}5SJ zv!~JU+wG2d_B)5Vgf5&jw)hd6duaWTHY*>S+h;ZY_xkhFt2(hbdj z-~OOXv_7uj9~UYTeO!6& z{`R+|ua{QwD@H#q@7XIg{Jzcp_dzjfC~sVhQf3?;vOHfrU%2wz{dw!p%4%w6oktc@ zc;>ff%Ck1XVlm)!3bISc>GJdk^9;cv*oAO2UjWX!T7Xxi_$=j7HuO#93F z_+j_K{?!JxK8hBde>dyQO7nI%tMQ&&A6MS+sn@W**A5}ir^A%ZMjS$?SFdZjb4wX& z-$7e`*5fha9-nj>Ex%SfzZ`YAvmj$*SMmP9m2Z0NWMT7>YP4l*n`1qGG@zH;ZZ23f zxCp5}+*;*gNuka0&j!z#39EC8QTn8@YhS&0M>Jo!^6QH0R@+_uB)U0z-M66~j-#L5 zZ+2FwSYfK?(|FXHf^!q|I`nUZz3hMlU4!?%wL|hH^jD3mWq#Yl+sBnJta`3-`I@Py=cyq@-M`i+HcG8BwQ;G<`Gr?h)NEP$IV3x4Y&NFqJyCyh%FH zK1M#h8=W?_Dn;jYCqmb4D?{A#m!y`D)KBK$L+#hk&;0I;`0*K6e)7AK#pBj5K*1;b z4c^{iCEC~h`(FZQJVZZverE_*mD`*jt$lWAwnx2(=+w<&`KsT={mGU0%+JUjzptp@ zUt^nO{FC@=zrN&|bF-&iN1bx#t=P2ufzA2XnHLME9@}>f<*jBBenvizI}Yr!(|rDGZ-2y*(n;a|cWure>z{~D@w`%kzR|uPys%U}U%2wz^Ua?88`#(B}Uaz0N*R!TY zpPQTI{5LzaW1CC;_Mq)Avii3Sye3*7zkG$hr*9JK$7b9`z6GOKCdb~hIlpdns?UE1 z>)b^bdN-f@&K>dNd9FP7eEraxyuux4ucA|ns^)%Guhi!JeO~XJ;RU(Z(dI#8oAs$F zetgE2=Uxw3+=W~>ed?EJgo6ut_1z1&xS-5c@!5m%mjy&?La zgJ9#YQ?l*4H2AD`#$*H{)ltMdvZkKYO!i{J8QT{V`=#vFa=I{?y0C zo%XLnZz4wz|MzAInr)iMeUIaENM7gaGO|JI*wx~b3^4|shcrkL~boA5L z@AU7~WG?!1L8$J-4MoV1cxvd$JGX7F|IEG^;#rh^7Zs0-AC!#Gleqrle&@u(#g8%$nz_92?B zSdo09SbRL=%5(LVt+{qQb$vPVZ~XYy7f;Js_-vqa4*;Enm@YjrjhZD=&7v z@NMTq$l;|=JzAHd_5P=753f>+xYsA^89w~*bW|yt^J5KFxR3aF&6RJ^wP44zLDx~o zCC{&3yLJuje1HDhZ@;^bd`crP5Sz;o_xk4+RPds9{C$)hdUI5Iq_{u1@?3p0XXfo$ zro4)hb3Tph)S%er`f8o5Ma$0)%tsxvPp8f4C_cV$S6pLynMk0$jWqd!;Onw9_4Bb)2XFJtrD3@Cbp zT8_9q>c%JH_B$%?l6<$i-n=P0>Oe#CHkuI9W7Y)U611X~N7W4v^3jV)f8|d)Scqy3 zZZX%R=Vf#w?qH3Cam8ql-+*6ITVFt3s#cwqbrA1QV@7_kwc$PF^J;gqPF2d#{4Y9P z-_oZ9eQ|VD%@JQdKszUg4zG6Q9y$+{em(YxFWyi0qC_)L1PYn8P z!&y}D`1PU7@6JU;g}>fL-=m6{%pP{?6&u5b2j zG(wej?OEHqXy)`U&&P*dMDluv5AT{*f_U!+5R>tdjoJ2Q~nD02=}u0pA6_2lNCs1~vgU1vUdV2jZKE^rt1z3)l+S z8b|=!0NVoF0owyR06PLZ0lk5pfj&TAU>Bet&>z?p7yt|e1_6VC-GCv$?!X?vp1@FG zFJNzAA7Eb~-0E_JA;>KZeh&vm03(6@fl_IB*1TB=AFEI&c(F2Fw7;ftf%Om<7xRDu7DhXy6#23YY^_ z12w>0;733$PzTfl4ZyL$alrAwJm3W2MBpUgWZ=iZDZr_~Pk_^a(}6R9Gl8>!vw?Gf zbAkT{{1j*e&I5i1oDcjQxB$2ixCm$hE(R_EE(Lx8Tn1bYTmf7OTm}3RxEiTZlfYBJ)4*SWzX5*-o&lZ({sGJfo&%l-UI1PM zUIG>XF9WXtuL7?DuLExYZvt-t3xT(RcYsB}V&GliJzxp26nG!_09Xbr2R;No0zL*l z0saa63-~wiAK+8qGvIUJ3*f)Nm%#r4UjbhO-vIvuTAt~mo=~Gc?!c9jcM!0Ok0@w!F z7T6Bh9@qic5!ean4eSi`0r~>F0R4dez^=dmU?4CE7!2$N3;}ir_5k(-h5~y5djtCb z`vUs`5ikrG4vYXs0{a7_fYHDKz!+dGa3C-a7!OPUCISZmlYq&mcX8~se=K$vd{}1>n&Pa1C%Ra2@a~;CkTKz;A%x z0yhA^18xLv0&WIw0e%ns0r(?uEAS?;5Lf~%2mT3s2K*n;(MK}lYFVDhw0`)P_leBN zscqgh?;Nx>&4fDLTt%~1H@DiBKY$kfyr-*iwdk|e$grv){S%1q2JQv^0^A2Y2)qY$ z*mdr->&%bMdkiGAvhWlOjhcwm7}WYalOo?(Gh8LhkmblsigVPH=J*kMclU%ExR~Y9 zeZ7gA2hh}dx`R@kNscFV{uweIp0V&wIyKKCmii4p_pi8WtZw<6p7oK5XM&h)9_LP| zPR&R#+f{Es)S%e@fdT2MgTo_JO~%$q*hr;LPpb7ql4dNa)#nkBq*`at5vf`kp7LO9 z8ly4j@Kg&T!=TM1)r5C0sg+~#&L*QrszxtU5xJUNgG#1X;+Yi2J_%%|Ql=&pxDct( zs4@wqTCT|<3GWVsCX3MNWqOjx;g`W0eIpH8EoF;Lr&r|22w9E>*DTA#Gct4pp0klj z^y?eglgJ}w)a;euNR3vbmTB_{1^z)#WGZzec9Te{-jOo3oYWHDZ54s#SUgZl=zlr8MxA5A5mJy_?18uKks=Y_&#*+k!onLF!4| zGP});Oj6|OlydB8s7tNU6WJO~CXuDlQV!`xWa5c5B3goQq^Y=3HshpHj#XwF@MIvO z4}qtfbReS1Oj3)hup~jeQjPP?PN5Jd3Iz$* z>JWJQ7~Ek7le%1`R)%L8;lz|pkZGw-K=oK-v;Im_N8%ns&8w1Aod$OXnI6x}!jqhm zYECboR+9_uz(kVgEC!Xuw|5 z5+UZELg2xJvz;2B2un{gZ*PV3G}~Z~i&CdC4@1^tl%K^Ws;gQCB^|bbQ1O(c+5n@V zcRY!6K(D|)qth0b&w@UZ3nEwpiQCZMQiXN5!h;nN6hh$KrL7*P#AAet(Wp>nD+ug2 zJkO5EB(t?7_Fk(rHJOvE(&XVZlw+T$@HncoZb|@T{aBgGfCtp}ovE&@8HZEbPa~Hb za+SCs)kMnQ2DMU;BgjOARBJUV6`cmuP>25}v4PmSY%LyLsXR1WV>0$+`T{l6j2<3U zRBylujVn!*>G3e9B4X&g)>-u-?1(;0QCYT@%5Sr*)Z)FE;uU)oLTcf7R|J7d3moiF zlQ9g`QDL-7n+#H=8D}0a1@fUnMMwMbbWku5PYLX0X(O)NI@jzB;pSSX!cDn5>k0!r zQw%vdR9B|=A{jVgiO_&(ld-L(KC00&xtva44eW*T@ZLv*dnhBM%*iFyc$}7HsBktJ zw0MlcJ3~CG<2-Dgs!-x#kV-a^z(3Jxg~u>FlqpHI98a|DB{ZbV@Q#hht=M-_8ZAc< z=3@&ygvBefNP?sXal8-CBfRM&1e}rsq^iY3nN~>;**WH;6F6>RGNMC_z;O`MMU^UQ zH1HLcGk07Ay*tsURe4xCKv){ujI|Q1BBB*&=^pA(1*{^0(rxNW7sT!G6E2gZRQu(~ z#uI9dHbVr{ zbA}_SC{Lb5I$1Y+m~+MqR=AutgQcZ^r5eM;ILsk6yde#9;%t`_+GwX#@Ps(dDMdmf zKxNEg1*_6#v9!gzq>)St#5kpnHx*(kaS4Ny5{Z>k#giH-l~O2_BCar#6XBMAG2rFd{OH)jx8^%Pxzr(6{!=2=UYtx(*7~&F@ zJZUl9C5nYo#g%5Wg6?v&S=vXu6{j$1_P$Hh^QIn3s<xCJqgcw~T+u=%DF!&B&CwhXx35GgvG40hNuHQTI8xrqt*lr(VFW8I&Kki|5?Ps+F#Q@iqJ=k> zf_H-Otr**z`uC&5 z013`Uo&a^=hzJFMUlq$Sc2u$CI*L@uIH)a0kkq9dRLtidVsQkF+XS zWrC!YF;IgV<5Pb-g?OFXN%&btj#vHcN%FWg$ez5AUnNw+c9O(OScQTm7Gk@$tG!aZ zzHLN53d(U~Q}~g`V_r7$?ECEOqO2zI6lHC1C7_x~oaP|F+mO!oo@M2BpYM9t-C9Kgt;mJW(0wj2@v_Rl+D% zC@O0dOIe&NTF69ufHT^7bD%v-Q^ix>oIv{sit$9VtDvw@$i&pMTq#LCt3-fggBTBY z5iG*%#&#@m=8<@g7ds0{@i@_6NLI*)BFb3~k)oVcfbDbM_L+Adj01gz?C14g8@`zX z9Pf4Fm*MeU7k)`0&)HSXa)Y>HmbjlZI~bpJ=9lO7Sl=YL%_VhG1;?9_j+f{0bd2L# zgreZIK`fV7&LEbm*vhw!i7a!~UV5~6qwZsOUJNJ10V2XY@eC0uA{0DnRk7UbKvk@A z-5oTMi9wJ^L2-xEQ+BK;8rgF=kFc1-d5TDKI8QlqRV>G`9L`h3sw!4Fmc#9rW1qyZ z9L`ga*WteQXKryk9w;Ww}8RV6l?Cez%@P zq!67D#|eXFS`{p|Br=S*R_z7nRe^h76BJc;5=lbDe!!a+s6 z0q*PQ3`S0jBONc#6XqDlwFq@brww8Ssd5IfRK-@lZA{3c9M{Dg^<+!xD6J;cIywoJ zlLoJsh=?iB7OsNnXGAg?sX5he?0nGIrvin%P{j9Unn zD(13)Q>xg9>dcX*bX~krk78bt;NZ&{IMI)DUJp+eBss55C>ttmAS;xvF_5J)*>!DZ z#{UH8b@FCQEThkf_i=DCW>DpH@nlVEh1zw7vec%zw*5>NRb-}9QRmI1 z0gSBFPG{u!IXR@cF`#2FF-rRA`IS0Il zg_BL`mV<^$o%J%hdGagMwKWKhT5qKxtaN#M4PjM7zFmJYc`9>lJ-nHl0ChP15-3i# zrc_=ZPlmoz6jK8giMztQ2vr!7SC5vBo746MStfSY&x}qLQNk}! z3Kh9lz?9<2n0`{rR@BJeKRQ@BD@4vz&QgG!wVoL}dP~*de7ph!IDKD|%cxS$#*1B} z6Y;93oaJsw@#0j@QXnZ_90lyNXG!s*H1NjDnc1dv?_t}7`c%b9*Xs51WK%^lkpw=v^th5vD8_}aYSjgjN&&jG^H z6!ew~9*_QV`lbnIlTR@1%kA4E8LQb@=n&l1&s#)^> z5=~)z=Oa*n*Ku7fi7oshPL3Btq?F)sDf4uIw3^sS>OiF|=Q&y_t8i~AE#+ne6NVmA zO52Z#@Ow{%Vq&j^y_nc5$8DkISr#TH_6nOTWx17!iM?`Gm9h#mF_Bo9y}M^(Vy`rB zOakKZi)!`uUp31KN|4B#X?b_ty&bHF-A$xc$#$uuRkBL=akMl$B5_pl9R9cV<5%^I zy`Y!l@&ve5$UG{850dCL0;Fi-=^sN}XB|6GE-;i81y>r%Qasev9$>~t{3iTy_)Y1Y zw<}lldwlHUBk=NN-k#$tqK_Q_G1V+5h^l5ucadZW^Ql)39LxHwI;A?$$YDhV)7_V_>ftt!|O9-n%|g?S0TZF1_cC$65jNhDR_*< zKO_yt{jDawE(Hmc=wS*EqQSG9Fosbb zDRZI#&W*YGNPV}B#?O+WudM9SJ%#O{POXOI* zfELwM{t73WD>Q2m+6_{6T8}f<3)M+D2^FqgQtS+{&J(>Fld!HtsduS(4;=B`5blAa zq&qnQp>T|$;~qemjEW@led0>oU6pEU?;nMR7!CG1m)o91y_4)7`NCKU& zx%Kf0_Xx04xH^wW)TsSL)ih(PsW{-nhdgkY8_qcv^@1}9!dtJ&#jBLDjuUY)_V!@* zair~bk@DSa%7a-E{AS^w?V1JK1ROw7}bcPK7{|6h4WKPS3f$fBNG-nK{oq-@NZL-#hc2$-Q2o4^)u^ z{Dlz1N)aT4x4vWDfbxZc@YW61joiUess1aIvQQIgWkIuhuaw3#BGnDr(u0a(XYKwwCH>B*RW~$tWtW|`w<&- z`A{RT*s2PcMDD)NgEHBl528TJk$=hNVVB^!&PsfOjzH^?SNt@2ad>W^7CI|xV%NH! zGo4&G2~TF-O~qv$>HDT6tOI)zkDB{+++{}fL$C94!q zKMH(rS^Ys&5~I7t?C%YAtcB9ZXPO3UTA;qw3-m^kpnKKsH`G&i_>16hW-F#R3qCWS zzu|L2`V#qf5mPIb6AX~l_{>Z=eG8NbiZ^XjQXqL?%ZR___n>8RK{4T^5lFb?qJ|6) zIL53}A9*+fUizvkj}%#S81sv$zLM4p6t`&edV>yFH*9i7`uQZ(+D#|1DL0|IN~K+N zs1jrguV!1eGXpD_dEW+7q@3?IkMppnPw=OBmOiV-6(!%K?`kPreq}OLIb?708 zY&_zXDDnu5otsO=?o5DvV&%72^Et4rJKmE5Ef8t&_I{^GKg2HiEL7V~gL#j?VPf1Y zgj;AQs0TcR#)hF!d(wtr(g1&@Q+^Vd!goI2mY;=SdfdI{7btyj$u@sm8|_DB;*zoi7px;Fu-rt6hxavm^Z&pUh)z6`^gep&Ep90XZDJ%V(@ z-Mv@zIS@qsoo=T6VgcmZPjOp4IJxj}7kqrOT$gvwK@>Ih>aWWSa3?D%^v3leh~Lyq zVO@I$pMUtcB~E?fFUIk)B=}gDKl>rSbG;-J{HIyPHBVe)So>X%Vt1YDZ6p{?HnxOThGTX z--Za!cQXzQi!E}bji=dPS7&ZSn!AbWINKTdNE&ehBU-rAEBvWQU(x>>#8YTq{ zTHY$&WW`DzNMZ_I;e}=5OyJ!;OuZXNm(AUp@vf1bN)Lf+&9rY7r$oguld*r_KCN1 z=fHCEf<>p@6l861Q;g7OgM@nE=~9Vd&`_6T9@{elSF5I;ZqXfugo3^t*(+1<_lwS( zni-y{MK1tOMky=q$=v_keDjHNHJy{SAS(WDr0#e(xZu~QMR-1d_?TesmDvx&PotM? z-0NX6Ureg*bs3!MrRPls7sHW+#Ywe>JQ#R>kr3cG3qCSs4T+J9prH1C-3Q<6khaS6 z-rmTEpdW15h3FlVV49R^d$eE*tm5q5+jA;m66{&?3e|v%A8_U*bD-dOMkXnmK#xbtaQT~Y5T{%`X1O#4vlfN&9$^E(q~FXcm3jtUr?0g?&gz46 zw%z3oyC-0|roVo#+(WQ2k*HB^Vu7uZyF2~gMr_C`FbtX^aiEal5_Q978kCkq`?eOn zfK*a>OUV)&UelX}|LA%FUa}_5XNUV?!ID}T_L&7Pn`Ls>ukHdPJ*DN6?&om6-jn*w_T-!^?y1Ck1r$-1=M&rf`!X}5T z&^moxq_T%tZKmHQWP9*HNJMxLHGrf}at`yRhKGiP(Y$FvAykrCNH{H=w3TE<^$j`c zNAeE|Bhdo=NREC1+*$8nl56NWdx0)oL?q!PjYtlrTunr$9X4~d9jb6P z#WZI=rY9-vD{oSZi((hWOd9KC3(1^QBOhK*^!<-Q_!2)H{%(>B(5&UTS;s4*k z{%z+x|B18eKl^6*dryiabIVbRTq#HVy94M!ycmix(nKfYWzfG)+aRs@d_+xftX`Kj zfvuJ|3l2KzP4h#Ed7DJ#_EY`B0%CY$bS_s7#pIDtUcNFCFHk^x3l%X%^rcv-`f>4E Myigg2W=eei105(D=>Px# diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/score_transformed_expected.pkl b/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/score_transformed_expected.pkl index a91b146483374e9d44e89e8dcaa7910d30675b1f..7cf90e944b7a76b621e1ba831c8e65334931a3d2 100644 GIT binary patch literal 42699 zcmeI5cU%<5`}nbS$JiuSrp}b<{Nx%f>6fLI<&Y+0-AI{U7ES-X*wpPK(^Qj}v1WQsw$@~9TUA`C z){|PbOr`V7k*Q_bq*iA#)(=-{JT31a@NTtP#bb`^UQwDF{p5> zDHE`R(zT>qqsFxvomT!uvmSLhQ^@^(&S3TdP=xnT&3AGxl z5A9=`H`lzihOycdQ$j+*;D7Ol{x1$;&&(T*U0=^Xz`u8pzkfi0zdvr5-tp6xEvy}N~bGgdjxEd;D zslPzZgbm?o18xv*fs*Cn{u~d}Z3wSZozi6fY=b|x19t#-0(SxT0Dl7R2Oa<(0v-k) z0UiY&10DyS0Gophf|*uXzgS9lCQL-=yk^p z!)2H5p)C5-B{YcsbP4_KSL)LSzITA{t>C+7=<;RM$3N6uF4(+%NDzGQ1#*7yJs|X1 z(CxFc&=EAg*VA85)jEfC(E-zavM-Cc;p>J~-y zD?+RC;5&Ed@1ZMihYqe^-Dgg-Z&5|k?zZ{mThZF4-bW@J4GjIT_}Nu_DlJtDNr_FYpNeIF6pxukmA%Lg=}pZ0t^`|yHq zLVqpp`C#)Px6sW$FI|&U>ovMHyJh~3E%(roy`O{(dRRAfd&ZrD{=SFMh^xB4^RjHO$Ibamx3P3e25(YOp%Pkp-*wEB9}&m$JEMsGgZ{a$#%7L;7K z;Wq7eCs1_aY4^$ZjzhcL+?uqcKFgTzlMVOAJ+1f@HS$qR+0f`J^7UzQaCEaVwIE!tXw^q!~2M%}%L ztol> zXZJimTll6J&3%&d&7)UaMeF0rZ{ODOgnQvu)N;+{WrL2dKw;CCj+nOfcU1S}%#7g6 zXROADQL~-~m9;sC7VY1^?a;N~MeF0r|B~|Ijk=AGqFc&i+a}IBg0}P-wxUzNa^yAe z*qrqjA6Sh)SJCL6;rkz;gJ=J4gvLA&t&b~zCBo0A_TbB?p6N++N@*cViSC%JLZ#?r z_}ISg(;g!3_!d~U=3Gjv`)GS{>)@EX4@K+amp_T_#cL*=UvUQ2zmT>t{F|HTWacle z{vA;a^;M3a<$E?P%<;K{hWD+bURiusv_7u9UPpb-qcr++5nV9ceSPq3F$!oEIN((H zeZ(D~=N619tRG&CW_&Se%XRHIJ0xxWTg?q4npJbd;*Tq#mdT#$VGy>ij|xblxe|IM0I^AhSfc~xuA zp;yt|2ZxWDt`?)=5B&e?ccvV1_g}Mq39UJQV=-Ddz1E?<)5PoJ%5(MAI3AV|q$))r zzql9VuD@@!e~c?5mn1bUMa{OIN$S)4zG(Zn^4$IHuZdqRt>#;Tepue8Z)(_mtNrhT z64Fr7tOTXZIy`K7fq1@f<+=OwcAu2HYi6HE7EvkyU9A9F$Q>`a-z{<$ z{+oFq_tv6ck%iy?uYT#cWk=AA-)_&%ZFrdWSJmT(-3KFU4sCZ7Ek6Ht)|r*&?QT`Z zdv1MPdBew^Blcc9ggl;(P_`U(2%TQNuEowR<)~9-~cPz1((l;o{_CqwaZJo4jL=aiuI zDdX3^dgqR4zHsH&mDI1fyVgl`bL_frLOLHuKUKfkP2HxLq1iu`$5&`r??0Qk6(I|` z{^NeP$XUqMM=m~M($0L0w*H=Zy!*z-R>yB;lNts3sve`@;B_mKmW%t7E5CKy_HN3< zU!Zm^{Fjt3S%Zj=?jO4H>Ji%f=e^nw(PP9tKJ@o3=u=e1opgIVRigj*l_9g7PIf6GfTC9^=?oh8b7Z5 zlbS~tPJXr*8PZ>rC3zn~UoTyLwPMdhl(o2U?Ut+7$G5|Bo39Cqeuy@9ekcF)9P#}h zSHA8=z07l55$g1^mAve`A~g2b{Wl8h{f-X5D0*3N_blQbKW}Vu=AY5M&!Am*JQAnY zIV0LWu6$s~ik=^KJcka4Pk6Pm`8jm7o$qIjr`n>rlUTmh86evZa1pdsPUT~w<=J_qQO0P1Xm#L@&B>rm)mCh zR-n0;`g^305#K*>5VA zWa;OS?5wfnxEl9F{mGSYlJVu61_wu=UPqp`+hzI?dG~92+SIlTo!6ZRS+}hmanD~8 z+dNV~S#S?^TE8Ik+cVfI zIzL+b?9iOX4IZLXH%AnxeiQd6SKgx_BX{Dy;(>pTZ=UgY!Y=~{kY~=#nQP?eb>@_yW9aQB_&^Iu#0Bd&b%_3ytcOWc9}x5gOyevcz4>dp3bCnN5m#C}Vsg!$dI zI)7|=Z+h1fwwh6c< zS|7iBrM{im6vznqbUx!2L=q2pWjcNafCr3VFWV*Kpk%@%<53o_oC^`tReXmYw<;)!EZ7A!NlyIzCmeKP*t@ zZ<#;qC$vS^c)nluX3_X@ss!bnkB{Muvn_!%yD1 zZFT);&c$Gl;_SPqWWtc4N%%a8>p$*yuKeYi?T*XVr6G-B-<`c9l10mN_5J_vlm~?K zcl*jQt^CU$q6LQ*Y&zfJ9^zhq+nC*G>bkQJ(HzB!q!T6L;~7_;tFL^`wd1MlE0ABa z$G1LzT5ffHudQ1@_lk@PRDZR6MaMPb`**Iq*!9ByIv;`$FMZm$T^U;McdG8lYGsIf zeX@b!{r68tm7%#m)K-Ogi;ve_`9?hocgz@i9d%jq{OYx9*U-*)7p(o}+xy77EaC#O zxg2q?e{MmAFX|4tkCH-ej!BOY_a|4Lt1mx4Z_hI2Rg{$Taa`9%C05s0>t!uoes*vH z>YRN#ZEhFw@r5fNTO;uLs=ddNW{P*mT>*ut?&rbVYV3H7(ptX$M4SJ}>iTWaNZr#f zzkZBzhAtjECG3&t_`sDv@=gDB;zy{>sM}+1d?aqaz49)}_bS($H)Tg1 zXhPmblY)ECp5#-CRWc?x=hTpqHLu)5 zCqFu$G5Ej(bPH`=x6S7gn)QwB_>~pKD8AW=p}%f8iwYmVK6F`LgyPywY})_q5!9pj zdj89$Cy-xI&W7hfmyv0@u`&6g#A-a_jt{|~PQGf~aT~>7C|t4hRw>#oKj+hC(QWj4 z+_9aT+{)0dQTfK>^KPSlt!7knZ~O=aA13GdWZy=kRB6|qb-0W2XMS;hNa#f*Z*chV zt{J6>_iix0ONVajSY$`qL2D2-q0d z1lSb#Ht-#w2e28iIj{w=C9o9`-$bN8ZGfJ@w!n5k0@xnd0oW1P3D_Cf1=tnn1?&d& z2KoTI1AT#hz#c$7zFGI3v&PXSK@e*yjq{0(>pcoz6OumE@tcpi8GcoBFBSO~lfyaK!myav1uyaBukyag-* z-Ui+Q76VIwcY*hSrNA=aec%INIj{ow5cmlA82AME2k=keU%ri*$)jrvpv)&SN7)&kZBx&!L~>jK{b)&tfDHUKsRHUc&VHUTyT zz72c_=mBg7Yz}MzYzb@yYz=G!^aQpAwgVEt_P`Fnj=)a9&cH6fu0StfH=sAr2iP6x z3-kl_0Qv(1fPuguU{7E$uotj5un#Z<*caFj*dI6mI1q?{p};U;I4}Yj35)_p0|x

<^d-GCj+Mdrvg6& zP6JK{egvEWoC%x-%m>Z}&H>H^&IA4*@MEA6I3M^4Z~^dB;6mUc;9{T&_!)2sa4GO} z;47=| zMWmXH?Go|a2Bl6tTDL7Pdc39npI zE63v9Ovc8k8of+KX zrp+T1_y;|asnn6!O(LcGMaa~0QcHM|6XhyHCe<|EIHj79(?53;DLv3)p$bpApqhlM zR_PVEnL2}((!f(bppS2_o))8fL@H(3YK;!J1$!!k)RVYnHk%odsL0bP<=E3ums+DI zvNf7aB1@yC9MY4>#FIlrv;^WvQ*ong#!00dugo;y2`)r`0#BjnOhl8Jq!w3UNrE9t zHO@C1g@PR@6ewJicbJxx5s*ExkTWTCy5L6Ukb12qSEEwuWon!zzCu}s!>Ct~L@rJr zA|Q~!Zq+MrqBMw7liKV&NMV!FJ31;pj7V1M#u0S?A)+Scl5#x`NtjxVy+RDp=yXI1 zHFL;hd?!ttfipUWG-z>0QOb#El`Pw2Y!;@}5_-)aED1Ib-7Bd49}dw zi7A^T(^8#)>aoU_kxEiW;vPfI6_Qh(26qOT9?vzx6L%7=ek8mS;{*MIaf53Oour}S z(FS+QtSoFpt`^svqr|-xPjVv0Yg7hmdQ)H`^Rr%KZl8I+QV!j}Rk#^m$?=KZh%A|0 ziJgh9F&Ue)3Z$AQKT% zt<|VhbQ(}Y9sZld24d^7wRm);^3ZIJ$=HYK3)Ji>dU#Y(y#XgQt~5cW$HSb8h@taZ zSEUbONAzck%Cfaoew$^b7VpaxuiT>$QVS1pMG&a8z`+hN8ACxG6~-!QlR>I96U+mq zKt5Ee=wdsbb_xdIX>NTjZNzm~%{3cCxVaXpa0~9vy3zoT6hlr9)s^YJNCr+=BE&!1 zWb9z6k7~3`E~nF11AC!7y!X-I9?A$Qb8<;F9;am)Dx6IQEgoa=&Jd64I1k&UDwKE_ zq>_y!@K1DF;V}#kWlB;l$CC&93JvKpykjGBEB9TLM#~X|`Pc#vVMCNzBtg=HINk^6 z5nl8W0#3<6Qq|(2Osk}a>>Tsa2^_aD8PPdL;5dlsqDmDt8u$pynLDn5-koUFsyr<1 zFDwmh###wh5zz{?bPu(w0#=a#={EJC3*vV83YW=Is(o{06A86OnO!^X^MmsDNf=rXE>6I^5jW`gLSiqIY-Q3 zh09?xSXv^TY77(OP`lLdhBVZHvt3STqa9Mg6XH0B6bX$0&X~mtmeXdjv<-1dBbgM4 zaY!9+D#SQ(34@ao2~MfvNsSbz6bhw?E6ijC*JWn1w5GbW@l5I@I;EC3h2ks&l4IAg zI9ZhBtTvuR8s@A{p(?iSWyUk(WCaUchTm6?rVh0R6|2H0|{<(J`!Pj`Mvp-9+N%yO5wVwSkCG&>kScH@`l^;k##2d6kb>n0?{<264a zSs}lPC}+7sigH$g9#XAgyyqiSg4chYg`O|tc+f{!j>m`o!qP%s6s>^e7HJi*iUdfv ziSebca2Z~2b`g9ekK@knHUxS68DK+P$f4p@u-zlA3RamwX=M!5pvL&r&qg6$r*;*7 zmXYICUt5wqZVj|0FXUGVm9U*8u@Y9HAc=+8uI*u~6t8ca(vO02+}Hws#Sq0cW=WU;P_rW;ON63C&|F!3vIl%E=SAH2D-*xAg6!M%+#Vj|7 zD`tuNO0$FUSvP)pUXKk(gxg$FCslB~8DW2U9#6;EuSF;d4jaUBxpM}wRK+^qHYT#n zReR~t;*Gku&3Q4L5c`V=^Tab)q=-=Pq*cXouN_sf%Js6-L?#A-A_c`APEXmXI?>3M z!+C_o9L`fjlEZn*nX6(sj^%KkB2}tlm18;Fb~*M*49np>1$iCrV|(Tn$KwHF(mXEj zC03@2Bj^SZFlRzyWo+l!Q5maXZ#xRI-5w-XlGpE5ClM(`C&Y2WV3`(0Pkfb7m?tXC z2#F^#*;haNywx#NSgv=%6qcUo#L6d89BC3Wa)sNeh&R9k?47~LiE)Je<$1y!W4{)m z?&z>VtROjO5KC38^KD~79%a8S-l!*8Qb$>3Lan`%P&t_}+%-CRvSXBMGz(>nOATj* z-t~sF)Q|pe{K910d#=&Xn}I$e^Ih4`-UWzB^JGmgu`)vWAh9x5DD0_>Rj{|cRx;5E z5-Z8;_W^KE-s~_5)51BuJi`9+Jh6$fUyD$*95#p*2ImZ7sj^JVbjZV;%O#daI_%KJ zA9YJlmO8Va8+H53^F`f$ErL|i+Jv&fX#-iIbd7;5l}WB^Gc*3jJFb&ATVfe~4!n${d#%$_lmX3}vZJb8Y*XEUL^*hoa7#NrM<$?S3^2Cyy#~+yPBIS(NM= z%h=ZzTwo+C)UGm;r8LErEoZW)vimp?AKu(?%{d3WhlP_(>6U{Ar_OpA-8}h~>Dn5E zMy>y(A*^)y?;66YhWu~+#pJ2Xwe|33ZamcC@JpaL*_z_KKAsGH*LkhE=IfVMuNrch z!K@Tr8)0s-YgS4>t{x%$|&I%D20ezD_~0TWXwRRWh-lB?;q`~ zoE0KRDrYG`j#|%*9sQ(ga6DcC{+zxq$z@b2N8`n=(SdkXR?c#_qEXDN^rFOCBC z*|Vg0Q5tyT<;ZMPy7#bc!hO!NKd|E!s+RZf@y0b7Mihti3H41E7|9BstBhnRwd`12 z(sHI>4|T?$yt!lj;x=Ynt@J<63?Hi(yfJb-{n=kwx>75<2a8s~a<8-sSVaP)+r;?W zSGWwXH#_jYXOc5edI<>e_|aEDRLF_8RkPe7K{ZR>PogP|@4N*H@H(!CC9#EH#L4ku zu#^%!E@hq$kX92rN$seVUWfkrxrKQ}AV8YN_N@?3M5q|HfP)ux-YQw8``cTZ9g#Sycn<$t`|+###a__Mad|x4Dr6p&!3Rn78Ua!? z@$`>juCtCEC>I#Yih?T*Whox+Y7a2uBYqS91pKCS&fAqM`#nDP@fLXbGH=iE5z)sE zfS78Q6GT|>_IOz2UDBNHFhXi~5LL_5H{}13-RwBIx(TdE{bx;J)sp$2 zI*Q4oP~k&nr4FypkZFEnI$nhY{~72X5JGs-Yo_2a7XOf#jQg8Ay)Fe2#{3m-GJ2$F zZN!CBQ%}>q3OnOTSQSR4_}u5D|FM2V4zlUK9h%gIy8KUy;mT zQMf4O->~@D?(~QflVVwTfL=AGO*~2B1zvQlM#%B|*s*pQw${8E7NDu}yV(=bgcsg@ z;Yb-furEp6aEA?BWHW$REW zm1GJnCc{_ZASoL4ysOJ_9MB2RKvnBk08y*Lpa;=8!;D1Eo}z z$t=2MJ=*n`qQLT6eCy(ph6c`3W!73^r5Hht{M^HGo)m5qV_uz1z+vf9s$x#l1XoR> zBc;G+Z**HOT0lSe0dVtkzs2$KwUGsHXB)IN4mGS%c7Skg~Jt zI8$|@IteGC!nI3^odMQ)qE}-Q)|DXjE*0;ABfcBLJ#dtCC&xbojxluH0|=8*k!Ze8 z?8MzwskSID;U(^qO3}N*U`o5f@``4`LrjT5lIA-_xo*m=(@%7XI0$ zS+HHuEX#HwvtYZRS@g~{j@@0|%`L%L3lE}Ny(!MkSW|}^WQwa!{XybCs?lmmO1H6Q zx;`%#pFLCSuV!hfN{w~X@tTz~dO_CFc>PAa$Rj=bm#OfMNSB^z Y$W`IxJ@sU|3akj^4<9jA4*&oF delta 2983 zcmb_edpMM78=n`$vPvaH4kMlAlw;Z4Gss~b8i(mH$uVMyan_1)thSF&Jd@2*blTWT zA+fC(hYd+4C50Tun4xj{T5N5qof*?!*SFt4`^WctpZoef_wjkJ`+2YXdOJELQp4~m zQfC)TEAXBY*k(kP*lJA1FdPp18*rHD!HKZ67esxwqKguWc##!hlInswnvz@bL}3|3 z+h8D@x0HrsAl8N>$bKUMMF`}3fiwt&Clq}nEE}D~Z>6)oz~Pj`8U^b)bk(nlxOkNX z7iR+UuSW6UgHGu_zvo;q7GV={sq98E6NsIUgjh!m5_ZHuVh!Wz);Aq zl?fTmux%vNqF7}TWD{0d7S~Te`Ng^uZ`AsLbZps}DWezuz|Xalb;g0G_ArZofj$XT zzi7e}xel;;Y*zQ(mn;a*StuIe4+3LX(vPx>qvE@L3R;{+*(akKriDY1rkd zd-EVTuX=m;@9l8?S_fEfV!^2cwpu5@n}+O~Pd%sgX5jR#w}RCNua*F$pD(Rb8RbFz z?DX-A^tlOeF?nLE=<*Ek%KLp&@z24^v#C_>{wR=BE55mLfe#DDBV8HL3~^@jkJ|Cw zkT~lsn1C>P(!-{O zUN~ca`!(auAk;o1^wOoCF0pX)>2L#WDDTlU$>8_OeYpqgtTn%0Sc4Z<-+XUmDbV{f(eBPYqG^Y6L=c#~YdS^T0^Vbz79Y z0)1To!h;TyrzlDzBLFRPQ72Bq&xZ-<3yMhf2^~heJL=Z^5hIu-ZHV1y*UFF zl~r3pnl6CW8pC{kehJ*GpisY%o&iD^-CgC5-3*W$Ya@GVeg(?=VvT(n51=6Pd+&y_ zaZu7OXyDCH!mLzFZsNi{i1m3p?zXiV-p(hTjA)wz-?mW)pYbV>?TPWz2pxv?f2akF zmk$GTqWjbE*Ihs~OH3rGb;0%>g(k^5-OywmzgVQw4V|O$KN|h^3jRa?##!4{e;S4* zyOk$PQoy2p@2FXMEl37U>M~|0!GgPBL2#M`UXI=Ckc@hGW&3@Khw(3vo~g*X{IMTC z?%tb`P92Ap{+B;4V^YDad0y)-BN^oD6oN~4j02@#m+RQVha^QCPW+WzFmAJQui8)q z!ScJV%P^*Zeqze8H!^J!l%Dw067G*$y@^xtpL6Z7x1Mf?+h~5UxQ2ZF*S-p)5!%=EI zj>==;F1x%ks=O8K$PZ-_xes9Zi?M)GA0{1i<(*~q5nFtBINVBAAqt?HTGN&LEfXG* z49+Ak8~)3m7|RWvpF9KhoU?ZAd&c10>VsObrd&|a4L)9~&#PI@`{Ka+1NRlT~MQv)*cZ~JQxcLGIf*``>Z z$B=w1OfWLLp>H5z*4e8LW-iDn*8Wxoku3UoPS|DGpEASQRDT|x4&}=pai0Kxm9qNO zxEavg^lrr;0k056~F;9drGqkaLG?S z`RRNpKAe-MmOTS+$S>N++tQ(%p16GQ(>3Vw&gi>2Hv;n1{6qG$V=!S?qTwC&6qxk8 z=Smd^q2u_i))(iVz!}%hoAoaIV-qWQ@Rv z5(Xvyjx!ImXJwvjxcC|}2{)Us&2r&4dXwZY9k0PxmDF^)uN$WA!z-dbuz|8xrD)X` z9bjRiy>P8_2y)xbnAQ|EgYTC8649%NPANGOHZKdNiwoj5DTePDVelMIDPF95gQ#6euSV)@Qm^c zkETUL#rVa9M1&J;BBEoW2^$EG;Q)*nAf0#J2zu`$ZMw>T7Fasm01e@V!n#O+{7=l5slH5kSthYMAT@ci&)kw zXn<&gIUoYb6nQx+A)d7pMn61RG!srim9!$npxdFK zXj^nAgMbEOl_l|B5?Y?< zjHHq-AZnrqov{*nuWj|=4!-boWOA!G@o?nNC&ugL;#adOTFEvU^#A3+h H$K*c&mrDQx diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/tile_data_expected.pkl b/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/tile_data_expected.pkl index a0e40c2af851270573575d03b976e24482c8c9cb..23802eeef04fb7751625cccf3aef8780e78e9cdd 100644 GIT binary patch delta 391 zcmZ22d03LAfo1BBjVvuptPG5d42+ZeS;QtUW?EzK@vur{o%=(3`PSEgJLH~1>8tiJ z{fEA4#5}hzwB@?KxZtUM8W=pYhbX^g&j1E5CigK*)cM zeLY!?MbkbAtmy^R4R4@scnhb&-mrZIw_6kJ!6#7vzuer%62vN^;FDjjkdv8~s*qYy zkeXbQn3r6+`3I*bqrEpsCO0)DGcivgBfqpbH6uSKMIkdUIX^d5A+cB?QK2BUC^sxmuE?fo1A~jVvuptc;9|42+ZeS;QtUW?Ez4f9R`5O#dT$k#+75t3;mJ2knq+ zeI0nieo28X*Y(9O>r<41bCF{?g0f9I6-#|iNU)Y1S*gmpP z1A}+=AQNo4-rH+}q&42y&zcDWFYOt?;DvoP*zz~_V5@h`gYuU^?Ysx2-@*06%rgdq z*OS#)G~w=*2fBWT+*_#o5Hv*3aj4lxpk_URxp{LROAxDsice-*szPc-L27bIVqS8k zf<|R(Vo|Z?<}aL{jLQ1HsVSL>c?uc%rNyZk`8g>HnR&_ixv2^ostWmO3XZ;>nwx95 G-5CK@WuaUE diff --git a/data/data-pipeline/data_pipeline/ipython/compare_two_score_files_for_differences.ipynb b/data/data-pipeline/data_pipeline/ipython/compare_two_score_files_for_differences.ipynb index d6aa454d..ef781baa 100644 --- a/data/data-pipeline/data_pipeline/ipython/compare_two_score_files_for_differences.ipynb +++ b/data/data-pipeline/data_pipeline/ipython/compare_two_score_files_for_differences.ipynb @@ -8,7 +8,10 @@ "outputs": [], "source": [ "import IPython\n", + "import os\n", "import pandas as pd\n", + "import pathlib\n", + "import sys\n", "\n", "module_path = os.path.abspath(os.path.join(\"../..\"))\n", "if module_path not in sys.path:\n", @@ -28,12 +31,8 @@ "outputs": [], "source": [ "# Load\n", - "path_to_score_file_1 = (\n", - " DATA_DIR / \"score\" / \"csv\" / \"full\" / \"usa1.csv\"\n", - ")\n", - "path_to_score_file_2 = (\n", - " DATA_DIR / \"score\" / \"csv\" / \"full\" / \"usa2.csv\"\n", - ")\n", + "path_to_score_file_1 = DATA_DIR / \"compare_two_score_csvs/usa (pre 970).csv\"\n", + "path_to_score_file_2 = DATA_DIR / \"compare_two_score_csvs/usa (post 970).csv\"\n", "\n", "score_1_df = pd.read_csv(\n", " path_to_score_file_1,\n", @@ -55,7 +54,7 @@ "metadata": {}, "outputs": [], "source": [ - "# List columns in one but not the other \n", + "# List columns in one but not the other\n", "score_2_df.columns.difference(score_1_df.columns)" ] }, @@ -68,11 +67,16 @@ "source": [ "# List rows in one but not the other\n", "\n", - "if len(score_2_df[ExtractTransformLoad.GEOID_TRACT_FIELD_NAME]) != len(score_1_df[ExtractTransformLoad.GEOID_TRACT_FIELD_NAME]):\n", + "if len(score_2_df[ExtractTransformLoad.GEOID_TRACT_FIELD_NAME]) != len(\n", + " score_1_df[ExtractTransformLoad.GEOID_TRACT_FIELD_NAME]\n", + "):\n", " print(\"Different lengths!\")\n", "\n", "print(\"Difference in tract IDs:\")\n", - "print(set(score_2_df[ExtractTransformLoad.GEOID_TRACT_FIELD_NAME]) ^ set(score_1_df[ExtractTransformLoad.GEOID_TRACT_FIELD_NAME]))\n" + "print(\n", + " set(score_2_df[ExtractTransformLoad.GEOID_TRACT_FIELD_NAME])\n", + " ^ set(score_1_df[ExtractTransformLoad.GEOID_TRACT_FIELD_NAME])\n", + ")" ] }, { @@ -82,8 +86,13 @@ "metadata": {}, "outputs": [], "source": [ - "# Join \n", - "merged_df = score_1_df.merge(score_2_df, how=\"outer\", on=ExtractTransformLoad.GEOID_TRACT_FIELD_NAME, suffixes=('_1', '_2'))\n", + "# Join\n", + "merged_df = score_1_df.merge(\n", + " score_2_df,\n", + " how=\"outer\",\n", + " on=ExtractTransformLoad.GEOID_TRACT_FIELD_NAME,\n", + " suffixes=(\"_1\", \"_2\"),\n", + ")\n", "merged_df" ] }, @@ -94,14 +103,32 @@ "metadata": {}, "outputs": [], "source": [ - "# Check each duplicate column: \n", + "# Check each duplicate column:\n", + "# Remove the suffix \"_1\"\n", "duplicate_columns = [x[:-2] for x in merged_df.columns if \"_1\" in x]\n", "\n", - "for duplicate_column in duplicate_columns:\n", - " print(f\"Checking duplicate column {duplicate_column}\")\n", - " if not merged_df[f\"{duplicate_column}_1\"].equals(merged_df[f\"{duplicate_column}_2\"]):\n", - " print(merged_df[f\"{duplicate_column}_1\"].compare(merged_df[f\"{duplicate_column}_2\"]))\n", - " raise ValueError(f\"Error! Different values in {duplicate_column}\")" + "columns_to_exclude_from_duplicates_check = [\n", + " \"Total threshold criteria exceeded\"\n", + "]\n", + "\n", + "columns_to_check = [column for column in duplicate_columns if column not in columns_to_exclude_from_duplicates_check]\n", + "\n", + "any_errors_found = False\n", + "for column_to_check in columns_to_check:\n", + " print(f\"Checking duplicate column {column_to_check}\")\n", + " if not merged_df[f\"{column_to_check}_1\"].equals(\n", + " merged_df[f\"{column_to_check}_2\"]\n", + " ):\n", + " print(f\"Error! Different values in {column_to_check}\")\n", + " print(\n", + " merged_df[f\"{column_to_check}_1\"].compare(\n", + " merged_df[f\"{column_to_check}_2\"]\n", + " )\n", + " )\n", + " any_errors_found = True\n", + "\n", + "if any_errors_found:\n", + " raise ValueError(f\"Error! Different values in one or more columns.\")" ] } ], diff --git a/data/data-pipeline/data_pipeline/score/field_names.py b/data/data-pipeline/data_pipeline/score/field_names.py index 9289cecc..76d11038 100644 --- a/data/data-pipeline/data_pipeline/score/field_names.py +++ b/data/data-pipeline/data_pipeline/score/field_names.py @@ -60,11 +60,15 @@ MEDIAN_INCOME_FIELD = "Median household income in the past 12 months" MEDIAN_INCOME_AS_PERCENT_OF_STATE_FIELD = ( "Median household income (% of state median household income)" ) -MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD = "Median household income (% of AMI)" PERSISTENT_POVERTY_FIELD = "Persistent Poverty Census Tract" AMI_FIELD = "Area Median Income (State or metropolitan)" - COLLEGE_ATTENDANCE_FIELD = "Percent enrollment in college or graduate school" +MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD = ( + "Median household income as a percent of area median income" +) +LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD = ( + "Low median household income as a percent of area median income" +) # Climate FEMA_RISK_FIELD = "FEMA Risk Index Expected Annual Loss Score" @@ -105,7 +109,6 @@ ENERGY_BURDEN_FIELD = "Energy burden" DIABETES_FIELD = "Diagnosed diabetes among adults aged >=18 years" ASTHMA_FIELD = "Current asthma among adults aged >=18 years" HEART_DISEASE_FIELD = "Coronary heart disease among adults aged >=18 years" -LIFE_EXPECTANCY_FIELD = "Life expectancy (years)" CANCER_FIELD = "Cancer (excluding skin cancer) among adults aged >=18 years" HEALTH_INSURANCE_FIELD = ( "Current lack of health insurance among adults aged 18-64 years" @@ -113,6 +116,8 @@ HEALTH_INSURANCE_FIELD = ( PHYS_HEALTH_NOT_GOOD_FIELD = ( "Physical health not good for >=14 days among adults aged >=18 years" ) +LIFE_EXPECTANCY_FIELD = "Life expectancy (years)" +LOW_LIFE_EXPECTANCY_FIELD = "Low life expectancy" # Other Demographics TOTAL_POP_FIELD = "Total population" @@ -130,9 +135,6 @@ OVER_64_FIELD = "Individuals over 64 years old" # Fields from 2010 decennial census (generally only loaded for the territories) CENSUS_DECENNIAL_MEDIAN_INCOME_2009 = "Median household income in 2009 ($)" -CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009 = ( - "Median household income as a percent of territory median income in 2009" -) CENSUS_DECENNIAL_POVERTY_LESS_THAN_100_FPL_FIELD_2009 = ( "Percentage households below 100% of federal poverty line in 2009" ) @@ -141,7 +143,10 @@ CENSUS_DECENNIAL_UNEMPLOYMENT_FIELD_2009 = ( "Unemployed civilians (percent) in 2009" ) CENSUS_DECENNIAL_TOTAL_POPULATION_FIELD_2009 = "Total population in 2009" - +CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009 = ( + "Median household income as a percent of territory median income in 2009" +) +LOW_CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009 = "Low median household income as a percent of territory median income in 2009" # Fields from 2010 ACS (loaded for comparison with the territories) CENSUS_UNEMPLOYMENT_FIELD_2010 = "Unemployed civilians (percent) in 2010" CENSUS_POVERTY_LESS_THAN_100_FPL_FIELD_2010 = ( @@ -265,7 +270,10 @@ ASTHMA_LOW_INCOME_FIELD = ( ) HEART_DISEASE_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for heart disease and is low income" -LIFE_EXPECTANCY_LOW_INCOME_FIELD = f"At or above the {PERCENTILE}th percentile for life expectancy and is low income" +LOW_LIFE_EXPECTANCY_LOW_INCOME_FIELD = ( + f"At or above the {PERCENTILE}th percentile " + f"for low life expectancy and is low income" +) # Workforce UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD = ( @@ -288,9 +296,9 @@ LOW_READING_LOW_HS_EDUCATION_FIELD = ( " and has low HS education" ) -MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD = ( - f"At or below the {PERCENTILE}th percentile for median income" - " and has low HS education" +LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD = ( + f"At or below the {PERCENTILE}th percentile for low median household income as a " + f"percent of area median income and has low HS education" ) # Not currently used in a factor diff --git a/data/data-pipeline/data_pipeline/score/score_l.py b/data/data-pipeline/data_pipeline/score/score_l.py index b9e46051..d11267bf 100644 --- a/data/data-pipeline/data_pipeline/score/score_l.py +++ b/data/data-pipeline/data_pipeline/score/score_l.py @@ -44,6 +44,8 @@ class ScoreL(Score): robustness over 1-year ACS. """ # Create the combined field. + # TODO: move this combined field percentile calculation to `etl_score`, + # since most other percentile logic is there. # There should only be one entry in either 2009 or 2019 fields, not one in both. # But just to be safe, we take the mean and ignore null values so if there # *were* entries in both, this result would make sense. @@ -169,7 +171,7 @@ class ScoreL(Score): def _climate_factor(self) -> bool: # In Xth percentile or above for FEMA’s Risk Index (Source: FEMA # AND - # Low income: In 60th percentile or above for percent of block group population + # Low income: In Nth percentile or above for percent of block group population # of households where household income is less than or equal to twice the federal # poverty level. Source: Census's American Community Survey] @@ -225,7 +227,7 @@ class ScoreL(Score): def _energy_factor(self) -> bool: # In Xth percentile or above for DOE’s energy cost burden score (Source: LEAD Score) # AND - # Low income: In 60th percentile or above for percent of block group population + # Low income: In Nth percentile or above for percent of block group population # of households where household income is less than or equal to twice the federal # poverty level. Source: Census's American Community Survey] @@ -268,7 +270,7 @@ class ScoreL(Score): # or # In Xth percentile or above traffic proximity and volume (Source: 2017 U.S. Department of Transportation (DOT) traffic data # AND - # Low income: In 60th percentile or above for percent of block group population + # Low income: In Nth percentile or above for percent of block group population # of households where household income is less than or equal to twice the federal # poverty level. Source: Census's American Community Survey] @@ -315,7 +317,7 @@ class ScoreL(Score): # or # In Xth percentile or above for housing cost burden (Source: HUD's Comprehensive Housing Affordability Strategy dataset # AND - # Low income: In 60th percentile or above for percent of block group population + # Low income: In Nth percentile or above for percent of block group population # of households where household income is less than or equal to twice the federal # poverty level. Source: Census's American Community Survey] @@ -363,7 +365,7 @@ class ScoreL(Score): def _pollution_factor(self) -> bool: # Proximity to Risk Management Plan sites is > X # AND - # Low income: In 60th percentile or above for percent of block group population + # Low income: In Nth percentile or above for percent of block group population # of households where household income is less than or equal to twice the federal # poverty level. Source: Census's American Community Survey] @@ -410,7 +412,7 @@ class ScoreL(Score): def _water_factor(self) -> bool: # In Xth percentile or above for wastewater discharge (Source: EPA Risk-Screening Environmental Indicators (RSEI) Model) # AND - # Low income: In 60th percentile or above for percent of block group population + # Low income: In Nth percentile or above for percent of block group population # of households where household income is less than or equal to twice the federal # poverty level. Source: Census's American Community Survey] @@ -441,7 +443,7 @@ class ScoreL(Score): # or # In Xth percentile or above for low life expectancy (Source: CDC Places) # AND - # Low income: In 60th percentile or above for percent of block group population + # Low income: In Nth percentile or above for percent of block group population # of households where household income is less than or equal to twice the federal # poverty level. Source: Census's American Community Survey] @@ -449,8 +451,7 @@ class ScoreL(Score): field_names.DIABETES_LOW_INCOME_FIELD, field_names.ASTHMA_LOW_INCOME_FIELD, field_names.HEART_DISEASE_LOW_INCOME_FIELD, - field_names.HEALTHY_FOOD_LOW_INCOME_FIELD, - field_names.LIFE_EXPECTANCY_LOW_INCOME_FIELD, + field_names.LOW_LIFE_EXPECTANCY_LOW_INCOME_FIELD, ] diabetes_threshold = ( @@ -475,24 +476,14 @@ class ScoreL(Score): >= self.ENVIRONMENTAL_BURDEN_THRESHOLD ) - healthy_food_threshold = ( + low_life_expectancy_threshold = ( self.df[ - field_names.HEALTHY_FOOD_FIELD + field_names.LOW_LIFE_EXPECTANCY_FIELD + field_names.PERCENTILE_FIELD_SUFFIX ] >= self.ENVIRONMENTAL_BURDEN_THRESHOLD ) - life_expectancy_threshold = ( - self.df[ - field_names.LIFE_EXPECTANCY_FIELD - + field_names.PERCENTILE_FIELD_SUFFIX - ] - # Note: a high life expectancy is good, so take 1 minus the threshold to invert it, - # and then look for life expenctancies lower than that (not greater than). - <= 1 - self.ENVIRONMENTAL_BURDEN_THRESHOLD - ) - self.df[field_names.DIABETES_LOW_INCOME_FIELD] = ( diabetes_threshold & self.df[field_names.FPL_200_SERIES] ) @@ -502,11 +493,8 @@ class ScoreL(Score): self.df[field_names.HEART_DISEASE_LOW_INCOME_FIELD] = ( heart_disease_threshold & self.df[field_names.FPL_200_SERIES] ) - self.df[field_names.LIFE_EXPECTANCY_LOW_INCOME_FIELD] = ( - life_expectancy_threshold & self.df[field_names.FPL_200_SERIES] - ) - self.df[field_names.HEALTHY_FOOD_LOW_INCOME_FIELD] = ( - healthy_food_threshold & self.df[field_names.FPL_200_SERIES] + self.df[field_names.LOW_LIFE_EXPECTANCY_LOW_INCOME_FIELD] = ( + low_life_expectancy_threshold & self.df[field_names.FPL_200_SERIES] ) self._increment_total_eligibility_exceeded(health_eligibility_columns) @@ -514,23 +502,25 @@ class ScoreL(Score): return self.df[health_eligibility_columns].any(axis="columns") def _workforce_factor(self) -> bool: - # Where unemployment is above X% + # Where unemployment is above Xth percentile # or - # Where median income is less than Y% of the area median income + # Where median income as a percent of area median income is above Xth percentile # or - # Where the percent of households at or below 100% of the federal poverty level is greater than Z% + # Where the percent of households at or below 100% of the federal poverty level + # is above Xth percentile # or - # Where linguistic isolation is greater than Y% + # Where linguistic isolation is above Xth percentile # AND - # Where the high school degree achievement rates for adults 25 years and older is less than 95% - # (necessary to screen out university block groups) + # Where the high school degree achievement rates for adults 25 years and older + # is less than Y% + # (necessary to screen out university tracts) # Workforce criteria for states fields. workforce_eligibility_columns = [ field_names.UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD, field_names.POVERTY_LOW_HS_EDUCATION_FIELD, field_names.LINGUISTIC_ISOLATION_LOW_HS_EDUCATION_FIELD, - field_names.MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD, + field_names.LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD, ] high_scool_achievement_rate_threshold = ( @@ -546,14 +536,12 @@ class ScoreL(Score): >= self.ENVIRONMENTAL_BURDEN_THRESHOLD ) - median_income_threshold = ( + low_median_income_threshold = ( self.df[ - field_names.MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD + field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD + field_names.PERCENTILE_FIELD_SUFFIX ] - # Note: a high median income as a % of AMI is good, so take 1 minus the threshold to invert it. - # and then look for median income lower than that (not greater than). - <= 1 - self.ENVIRONMENTAL_BURDEN_THRESHOLD + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD ) linguistic_isolation_threshold = ( @@ -581,8 +569,8 @@ class ScoreL(Score): poverty_threshold & high_scool_achievement_rate_threshold ) - self.df[field_names.MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD] = ( - median_income_threshold & high_scool_achievement_rate_threshold + self.df[field_names.LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD] = ( + low_median_income_threshold & high_scool_achievement_rate_threshold ) self.df[field_names.UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD] = ( @@ -624,23 +612,31 @@ class ScoreL(Score): threshold_cutoff_for_island_areas=self.ENVIRONMENTAL_BURDEN_THRESHOLD, ) + # Also check whether low area median income is 90th percentile or higher + # within the islands. + low_median_income_as_a_percent_of_ami_island_areas_criteria_field_name = ( + f"{field_names.LOW_CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009} exceeds " + f"{field_names.PERCENTILE}th percentile" + ) + self.df[ + low_median_income_as_a_percent_of_ami_island_areas_criteria_field_name + ] = ( + self.df[ + field_names.LOW_CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009 + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + workforce_combined_criteria_for_island_areas = ( self.df[unemployment_island_areas_criteria_field_name] | self.df[poverty_island_areas_criteria_field_name] - # Also check whether area median income is 10th percentile or lower - # within the islands. - | ( - self.df[ - field_names.CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009 - + field_names.PERCENTILE_FIELD_SUFFIX - ] - # Note: a high median income as a % of AMI is good, so take 1 minus the threshold to invert it. - # and then look for median income lower than that (not greater than). - < 1 - self.ENVIRONMENTAL_BURDEN_THRESHOLD - ) + | self.df[ + low_median_income_as_a_percent_of_ami_island_areas_criteria_field_name + ] ) & ( self.df[field_names.CENSUS_DECENNIAL_HIGH_SCHOOL_ED_FIELD_2009] - > self.LACK_OF_HIGH_SCHOOL_MINIMUM_THRESHOLD + >= self.LACK_OF_HIGH_SCHOOL_MINIMUM_THRESHOLD ) percent_of_island_tracts_highlighted = ( From ad6dbf9709cf2bea3d40c346ebb515a9cc8d02ad Mon Sep 17 00:00:00 2001 From: Saran Ahluwalia <94847739+saran-ahluwalia@users.noreply.github.com> Date: Fri, 10 Dec 2021 13:54:46 -0500 Subject: [PATCH 05/12] remove data roadmap directory from repository (#1034) Removed data roadmap --- data/data-roadmap/README.md | 153 ----------- data/data-roadmap/__init__.py | 0 ...ta_set_description_field_descriptions.yaml | 39 --- .../data_set_description_schema.yaml | 24 -- .../data_set_description_template.yaml | 94 ------- .../data_set_descriptions/PM25.yaml | 35 --- .../data_set_descriptions/__init__.py | 0 data/data-roadmap/requirements.txt | 1 - data/data-roadmap/setup.py | 21 -- .../utils_data_set_description_schema.py | 151 ----------- .../utils_data_set_description_schema_test.py | 248 ------------------ 11 files changed, 766 deletions(-) delete mode 100644 data/data-roadmap/README.md delete mode 100644 data/data-roadmap/__init__.py delete mode 100644 data/data-roadmap/data_set_description_field_descriptions.yaml delete mode 100644 data/data-roadmap/data_set_description_schema.yaml delete mode 100644 data/data-roadmap/data_set_description_template.yaml delete mode 100644 data/data-roadmap/data_set_descriptions/PM25.yaml delete mode 100644 data/data-roadmap/data_set_descriptions/__init__.py delete mode 100644 data/data-roadmap/requirements.txt delete mode 100644 data/data-roadmap/setup.py delete mode 100644 data/data-roadmap/utils/utils_data_set_description_schema.py delete mode 100644 data/data-roadmap/utils/utils_data_set_description_schema_test.py diff --git a/data/data-roadmap/README.md b/data/data-roadmap/README.md deleted file mode 100644 index 9e8f1808..00000000 --- a/data/data-roadmap/README.md +++ /dev/null @@ -1,153 +0,0 @@ -# Overview - -This document describes our "data roadmap", which serves several purposes. - -# Data roadmap goals - -The goals of the data roadmap are as follows: - -- Tracking data sets being considered for inclusion in the Climate and Economic Justice Screening Tool (CEJST), either as a data set that is included in the cumulative impacts score or a reference data set that is not included in the score - -- Prioritizing data sets, so that it's obvious to developers working on the CEJST which data sets to incorporate next into the tool - -- Gathering important details about each data set, such as its geographic resolution and the year it was last updated, so that the CEJST team can make informed decisions about what data to prioritize - -- Tracking the problem areas that each data set relates to (e.g., a certain data set may relate to the problem of pesticide exposure amongst migrant farm workers) - -- Enabling members of the public to submit ideas for problem areas or data sets to be considered for inclusion in the CEJST, with easy-to-use and accessible tools - -- Enabling members of the public to submit revisions to the information about each problem area or data set, with easy-to-use and accessible tools - -- Enabling the CEJST development team to review suggestions before incorporating them officially into the data roadmap, to filter out potential noise and spam, or consider how requests may lead to changes in software features and documentation - -# User stories - -These goals can map onto several user stories for the data roadmap, such as: - -- As a community member, I want to suggest a new idea for a dataset. -- As a community member, I want to understand what happened with my suggestion for a new dataset. -- As a community member, I want to edit the details of a dataset proposal to add more information. -- As a WHEJAC board member, I want to vote on what data sources should be prioritized next. -- As a product manager, I want to filter based on characteristics of the data. -- As a developer, I want to know what to work on next. - -# Data set descriptions - -There are lots of details that are important to track for each data set. This -information helps us prepare to integrate a data set into the tool and prioritize -between different options for data in the data roadmap. - -In order to support a process of peer review on edits and updates, these details are -tracked in one `YAML` file per data set description in the directory -[data_roadmap/data_set_descriptions](data_roadmap/data_set_descriptions). - -Each data set description includes a number of fields, some of which are required. -The schema defining these fields is written in [Yamale](https://github.com/23andMe/Yamale) -and lives at [data_roadmap/data_set_description_schema.yaml](data_roadmap/data_set_description_schema.yaml). - -Because `Yamale` does not provide a method for describing fields, we've created an -additional file that includes written descriptions of the meaning of each field in -the schema. These live in [data_roadmap/data_set_description_field_descriptions.yaml](data_roadmap/data_set_description_field_descriptions.yaml). - -In order to provide a helpful starting point for people who are ready to contribute -ideas for a new data set for consideration, there is an auto-generated data set -description template that lives at [data_roadmap/data_set_description_template.yaml](data_roadmap/data_set_description_template.yaml). - -# Steps to add a new data set description: the "easy" way - -Soon we will create a Google Form that contributors can use to submit ideas for new -data sets. The Google Form will match the schema of the data set descriptions. Please -see [this ticket](https://app.zenhub.com/workspaces/justice40-60993f6e05473d0010ec44e3/issues/usds/justice40-tool/39) -for tracking this work. - -# Steps to add a new data set description: the git-savvy way - -For those who are comfortable using `git` and `Markdown`, these are the steps to -contribute a new data set description to the data roadmap: - -1. Research and learn about the data set you're proposing for consideration. - -2. Clone the repository and learn about the [contribution guidelines for this - project](../docs/CONTRIBUTING.md). - -3. In your local version of the repository, copy the template from - `data_roadmap/data_set_description_template.yaml` into a new file that lives in - `data_roadmap/data_set_descriptions` and has the name of the data set as the name of the file. - -4. Edit this file to ensure it has all of the appropriate details about the data set. - -5. If you'd like, you can run the validations in `run_validations_and_write_template` - to ensure your contribution is valid according to the schema. These checks will also - run automatically on each commit. - -6. Create a pull request with your new data set description and submit it for peer - review. - -Thank you for contributing! - -# Tooling proposal and milestones - -There is no single tool that supports all the goals and user stories described above. -Therefore we've proposed combining a number of tools in a way that can support them all. - -We've also proposed various "milestones" that will allow us to iteratively and -sequentially build the data roadmap in a way that supports the entire vision but -starts with small and achievable steps. These milestones are proposed in order. - -This work is most accurately tracked in [this epic](https://app.zenhub.com/workspaces/justice40-60993f6e05473d0010ec44e3/issues/usds/justice40-tool/38). -We've also verbally described them below. - -## Milestone: YAML files for data sets and linter (Done) - -To start, we'll create a folder in this repository that can -house YAML files, one per data set. Each file will describe the characteristics of the data. - -The benefit of using a YAML file for this is that it's easy to subject changes to these files to peer review through the pull request process. This allows external collaborators from the open source community to submit suggested changes, which can be reviewed by the core CEJST team. - -We'll use a Python-based script to load all the files in the directory, and then run a schema validator to ensure all the files have valid entries. - -For schema validation, we propose using [Yamale](https://github.com/23andMe/Yamale). This provides a lightweight schema and validator, and [integrates nicely with GitHub actions](https://github.com/nrkno/yaml-schema-validator-github-action). - -If there's an improper format in any of the files, the schema validator will throw an error. - -As part of this milestone, we will also set this up to run automatically with each commit to any branch as part of CI/CD. - -## Milestone: Google forms integration - -To make it easy for non-engineer members of the public and advisory bodies such as the WHEJAC to submit suggestions for data sets, we will configure a Google Form that maps to the schema of the data set files. - -This will enable members of the public to fill out a simple form suggesting data without needing to understand Github or other engineering concepts. - -At first, these responses can just go into a resulting Google Sheet and be manually copied and converted into data set description files. Later, we can write a script that converts new entries in the Google Sheet automatically into data set files. This can be setup to run as a trigger on the addition of new rows to the Google Sheet. - -## Milestone: Post data in tabular format - -Add a script that runs the schema validator on all files and, if successful, posts the results in a tabular format. There are straightforward packages to post a Python dictionary / `pandas` dataframe to Google Sheets and/or Airtable. As part of this milestone, we will also set this up to run automatically with each commit to `main` as part of CI/CD. - -This will make it easier to filter the data to answer questions like, "which data sources are available at the census block group level". - -## Milestone: Tickets created for incorporating data sets - -For each data set that is being considered for inclusion soon in the tool, the project management team will create a ticket for "Incorporating \_\_\_ data set into the database", with a link to the data set detail document. This ticket will be created in the ticket tracking system used by the open source repository, which is ZenHub. This project management system will be public. - -At the initial launch, we are not planning for members of the open source community to be able to create tickets, but we would like to consider a process for members of the open source community creating tickets that can go through review by the CEJST team. - -This will help developers know what to work on next, and open source community members can also pick up tickets and work to integrate the data sets. - -## Milestone: Add problem areas - -We'll need to somehow track "problem areas" that describe problems in climate, environmental, and economic justice, even without specific proposals of data sets. For instance, a problem area may be "food insecurity", and a number of data sets can have this as their problem area. - -We can change the linter to validate that every data set description maps to one or more known problem areas. - -The benefit of this is that some non-data-focused members of the public or the WHEJAC advisory body may want to suggest we prioritize certain problem areas, with or without ideas for specific data sets that may best address that problem area. - -It is not clear at this time the best path forward for implementing these problem area descriptions. One option is to create a folder for descriptions of problem areas, which contains YAML files that get validated according to a schema. Another option would be simply to add these as an array in the description of data sets, or add labels to the tickets once data sets are tracked in GitHub tickets. - -## Milestone: Add prioritzation voting for WHEJAC and members of the public - -This milestone is currently the least well-defined. It's important that members of advisory bodies like the WHEJAC and members of the public be able to "upvote" certain data sets for inclusion in the tool. - -One potential for this is to use the [Stanford Participatory Budgeting Platform](https://pbstanford.org/). Here's an [example of voting on proposals within a limited budget](https://pbstanford.org/nyc8/knapsack). - -For instance, going into a quarterly planning cycle, the CEJST development team could estimate the amount of time (in developer-weeks) that it would take to clean, analyze, and incorporate each potential data set. For instance, incorporating some already-cleaned census data may take 1 week of a developer's time, while incorporating new asthma data from CMS that's never been publicly released could take 5 weeks. Given a "budget" of the number of developer weeks available (e.g., 2 developers for 13 weeks, or 26 developer-weeks), advisors can vote on their top priorities for inclusion in the tool within the available "budget". diff --git a/data/data-roadmap/__init__.py b/data/data-roadmap/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/data/data-roadmap/data_set_description_field_descriptions.yaml b/data/data-roadmap/data_set_description_field_descriptions.yaml deleted file mode 100644 index f2f3a552..00000000 --- a/data/data-roadmap/data_set_description_field_descriptions.yaml +++ /dev/null @@ -1,39 +0,0 @@ -# There is no method for adding field descriptions to `yamale` schemas. -# Therefore, we've created a dictionary here of fields and their descriptions. -name: A short name of the data set. -source: The URL pointing towards the data set itself or more information about the - data set. -relevance_to_environmental_justice: It's useful to spell out why this data is - relevant to EJ issues and/or can be used to identify EJ communities. -spatial_resolution: Dev team needs to know if the resolution is granular enough to be useful -public_status: Whether a dataset has already gone through public release process - (like Census data) or may need a lengthy review process (like Medicaid data). -sponsor: Whether there's a federal agency or non-governmental agency that is working - to provide and maintain this data. -subjective_rating_of_data_quality: Sometimes we don't have statistics on data - quality, but we know it is likely to be accurate or not. How much has it been - vetted by an agency; is this the de facto data set for the topic? -estimated_margin_of_error: Estimated margin of error on measurement, if known. Often - more narrow geographic measures have a higher margin of error due to a smaller sample - for each measurement. -known_data_quality_issues: It can be helpful to write out known problems. -geographic_coverage_percent: We want to think about data that is comprehensive across - America. -geographic_coverage_description: A verbal description of geographic coverage. -data_formats: Developers need to know what formats the data is available in -last_updated_date: When was the data last updated / refreshed? (In format YYYY-MM-DD. - If exact date is not known, use YYYY-01-01.) -frequency_of_updates: How often is this data updated? Is it updated on a reliable - cadence? -documentation: Link to docs. Also, is the documentation good enough? Can we get the - info we need? -data_can_go_in_cloud: Some datasets can not legally go in the cloud - -discussion: Review of other topics, such as - peer review (Overview or links out to peer review done on this dataset), - where and how data is available (e.g., Geoplatform.gov? Is it available from multiple - sources?), - risk assessment of the data (e.g. a vendor-processed version of the dataset might not - be open or good enough), - legal considerations (Legal disclaimers, assumption of risk, proprietary?), - accreditation (Is this source accredited?) diff --git a/data/data-roadmap/data_set_description_schema.yaml b/data/data-roadmap/data_set_description_schema.yaml deleted file mode 100644 index 3e12ad02..00000000 --- a/data/data-roadmap/data_set_description_schema.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# `yamale` schema for descriptions of data sets. -name: str(required=True) -source: str(required=True) -relevance_to_environmental_justice: str(required=False) -data_formats: enum('GeoJSON', 'Esri Shapefile (SHP, DBF, SHX)', 'GML', 'KML/KMZ', - 'GPX', 'CSV/XLSX', 'GDB', 'MBTILES', 'LAS', required=True) -spatial_resolution: enum('State/territory', 'County', 'Zip code', 'Census tract', - 'Census block group', 'Exact address or lat/long', 'Other', required=True) -public_status: enum('Not Released', 'Public', 'Public for certain audiences', 'Other', - required=True) -sponsor: str(required=True) -subjective_rating_of_data_quality: enum('Low Quality', 'Medium Quality', 'High - Quality', required=False) -estimated_margin_of_error: num(required=False) -known_data_quality_issues: str(required=False) -geographic_coverage_percent: num(required=False) -geographic_coverage_description: str(required=False) -last_updated_date: day(min='2001-01-01', max='2100-01-01', required=True) -frequency_of_updates: enum('Less than annually', 'Approximately annually', - 'Once very 1-6 months', - 'Daily or more frequently than daily', 'Unknown', required=True) -documentation: str(required=False) -data_can_go_in_cloud: bool(required=False) -discussion: str(required=False) diff --git a/data/data-roadmap/data_set_description_template.yaml b/data/data-roadmap/data_set_description_template.yaml deleted file mode 100644 index 7475ad04..00000000 --- a/data/data-roadmap/data_set_description_template.yaml +++ /dev/null @@ -1,94 +0,0 @@ -# Note: This template is automatically generated by the function -# `write_data_set_description_template_file` from the schema -# and field descriptions files. Do not manually edit this file. - -name: -# Description: A short name of the data set. -# Required field: True -# Field type: str - -source: -# Description: The URL pointing towards the data set itself or more information about the data set. -# Required field: True -# Field type: str - -relevance_to_environmental_justice: -# Description: It's useful to spell out why this data is relevant to EJ issues and/or can be used to identify EJ communities. -# Required field: False -# Field type: str - -data_formats: -# Description: Developers need to know what formats the data is available in -# Required field: True -# Field type: enum -# Valid choices are one of the following: ('GeoJSON', 'Esri Shapefile (SHP, DBF, SHX)', 'GML', 'KML/KMZ', 'GPX', 'CSV/XLSX', 'GDB', 'MBTILES', 'LAS') - -spatial_resolution: -# Description: Dev team needs to know if the resolution is granular enough to be useful -# Required field: True -# Field type: enum -# Valid choices are one of the following: ('State/territory', 'County', 'Zip code', 'Census tract', 'Census block group', 'Exact address or lat/long', 'Other') - -public_status: -# Description: Whether a dataset has already gone through public release process (like Census data) or may need a lengthy review process (like Medicaid data). -# Required field: True -# Field type: enum -# Valid choices are one of the following: ('Not Released', 'Public', 'Public for certain audiences', 'Other') - -sponsor: -# Description: Whether there's a federal agency or non-governmental agency that is working to provide and maintain this data. -# Required field: True -# Field type: str - -subjective_rating_of_data_quality: -# Description: Sometimes we don't have statistics on data quality, but we know it is likely to be accurate or not. How much has it been vetted by an agency; is this the de facto data set for the topic? -# Required field: False -# Field type: enum -# Valid choices are one of the following: ('Low Quality', 'Medium Quality', 'High Quality') - -estimated_margin_of_error: -# Description: Estimated margin of error on measurement, if known. Often more narrow geographic measures have a higher margin of error due to a smaller sample for each measurement. -# Required field: False -# Field type: num - -known_data_quality_issues: -# Description: It can be helpful to write out known problems. -# Required field: False -# Field type: str - -geographic_coverage_percent: -# Description: We want to think about data that is comprehensive across America. -# Required field: False -# Field type: num - -geographic_coverage_description: -# Description: A verbal description of geographic coverage. -# Required field: False -# Field type: str - -last_updated_date: -# Description: When was the data last updated / refreshed? (In format YYYY-MM-DD. If exact date is not known, use YYYY-01-01.) -# Required field: True -# Field type: day - -frequency_of_updates: -# Description: How often is this data updated? Is it updated on a reliable cadence? -# Required field: True -# Field type: enum -# Valid choices are one of the following: ('Less than annually', 'Approximately annually', 'Once very 1-6 months', 'Daily or more frequently than daily', 'Unknown') - -documentation: -# Description: Link to docs. Also, is the documentation good enough? Can we get the info we need? -# Required field: False -# Field type: str - -data_can_go_in_cloud: -# Description: Some datasets can not legally go in the cloud -# Required field: False -# Field type: bool - -discussion: -# Description: Review of other topics, such as peer review (Overview or links out to peer review done on this dataset), where and how data is available (e.g., Geoplatform.gov? Is it available from multiple sources?), risk assessment of the data (e.g. a vendor-processed version of the dataset might not be open or good enough), legal considerations (Legal disclaimers, assumption of risk, proprietary?), accreditation (Is this source accredited?) -# Required field: False -# Field type: str - diff --git a/data/data-roadmap/data_set_descriptions/PM25.yaml b/data/data-roadmap/data_set_descriptions/PM25.yaml deleted file mode 100644 index 459e7ec0..00000000 --- a/data/data-roadmap/data_set_descriptions/PM25.yaml +++ /dev/null @@ -1,35 +0,0 @@ -name: Particulate Matter 2.5 - -source: https://gaftp.epa.gov/EJSCREEN/ - -relevance_to_environmental_justice: Particulate matter has a lot of adverse impacts - on health. - -data_formats: CSV/XLSX - -spatial_resolution: Census block group - -public_status: Public - -sponsor: EPA - -subjective_rating_of_data_quality: Medium Quality - -estimated_margin_of_error: - -known_data_quality_issues: Many PM 2.5 stations are known to be pretty far apart, so - averaging them can lead to data quality loss. - -geographic_coverage_percent: - -geographic_coverage_description: - -last_updated_date: 2017-01-01 - -frequency_of_updates: Less than annually - -documentation: https://www.epa.gov/sites/production/files/2015-05/documents/ejscreen_technical_document_20150505.pdf#page=13 - -data_can_go_in_cloud: True - -discussion: diff --git a/data/data-roadmap/data_set_descriptions/__init__.py b/data/data-roadmap/data_set_descriptions/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/data/data-roadmap/requirements.txt b/data/data-roadmap/requirements.txt deleted file mode 100644 index 11814a4e..00000000 --- a/data/data-roadmap/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -yamale==3.0.8 diff --git a/data/data-roadmap/setup.py b/data/data-roadmap/setup.py deleted file mode 100644 index 01c01fc2..00000000 --- a/data/data-roadmap/setup.py +++ /dev/null @@ -1,21 +0,0 @@ -"""Setup script for `data_roadmap` package.""" -import os - -from setuptools import find_packages -from setuptools import setup - -# TODO: replace this with `poetry`. https://github.com/usds/justice40-tool/issues/57 -_PACKAGE_DIRECTORY = os.path.abspath(os.path.dirname(__file__)) - -with open(os.path.join(_PACKAGE_DIRECTORY, "requirements.txt")) as f: - requirements = f.readlines() - -setup( - name="data_roadmap", - description="Data roadmap package", - author="CEJST Development Team", - author_email="justice40open@usds.gov", - install_requires=requirements, - include_package_data=True, - packages=find_packages(), -) diff --git a/data/data-roadmap/utils/utils_data_set_description_schema.py b/data/data-roadmap/utils/utils_data_set_description_schema.py deleted file mode 100644 index f6e76068..00000000 --- a/data/data-roadmap/utils/utils_data_set_description_schema.py +++ /dev/null @@ -1,151 +0,0 @@ -import importlib_resources -import pathlib -import yamale -import yaml - -# Set directories. -DATA_ROADMAP_DIRECTORY = importlib_resources.files("data_roadmap") -UTILS_DIRECTORY = DATA_ROADMAP_DIRECTORY / "utils" -DATA_SET_DESCRIPTIONS_DIRECTORY = DATA_ROADMAP_DIRECTORY / "data_set_descriptions" - -# Set file paths. -DATA_SET_DESCRIPTION_SCHEMA_FILE_PATH = ( - DATA_ROADMAP_DIRECTORY / "data_set_description_schema.yaml" -) -DATA_SET_DESCRIPTION_FIELD_DESCRIPTIONS_FILE_PATH = ( - DATA_ROADMAP_DIRECTORY / "data_set_description_field_descriptions.yaml" -) -DATA_SET_DESCRIPTION_TEMPLATE_FILE_PATH = ( - DATA_ROADMAP_DIRECTORY / "data_set_description_template.yaml" -) - - -def load_data_set_description_schema( - file_path: pathlib.PosixPath = DATA_SET_DESCRIPTION_SCHEMA_FILE_PATH, -) -> yamale.schema.schema.Schema: - """Load from file the data set description schema.""" - schema = yamale.make_schema(path=file_path) - - return schema - - -def load_data_set_description_field_descriptions( - file_path: pathlib.PosixPath = DATA_SET_DESCRIPTION_FIELD_DESCRIPTIONS_FILE_PATH, -) -> dict: - """Load from file the descriptions of fields in the data set description.""" - # Load field descriptions. - with open(file_path, "r") as stream: - data_set_description_field_descriptions = yaml.safe_load(stream=stream) - - return data_set_description_field_descriptions - - -def validate_descriptions_for_schema( - schema: yamale.schema.schema.Schema, - field_descriptions: dict, -) -> None: - """Validate descriptions for schema. - - Checks that every field in the `yamale` schema also has a field - description in the `field_descriptions` dict. - """ - for field_name in schema.dict.keys(): - if field_name not in field_descriptions: - raise ValueError( - f"Field `{field_name}` does not have a " - f"description. Please add one to file `{DATA_SET_DESCRIPTION_FIELD_DESCRIPTIONS_FILE_PATH}`" - ) - - for field_name in field_descriptions.keys(): - if field_name not in schema.dict.keys(): - raise ValueError( - f"Field `{field_name}` has a description but is not in the " f"schema." - ) - - -def validate_all_data_set_descriptions( - data_set_description_schema: yamale.schema.schema.Schema, -) -> None: - """Validate data set descriptions. - - Validate each file in the `data_set_descriptions` directory the schema - against the provided schema. - - """ - data_set_description_file_paths_generator = DATA_SET_DESCRIPTIONS_DIRECTORY.glob( - "*.yaml" - ) - - # Validate each file - for file_path in data_set_description_file_paths_generator: - print(f"Validating {file_path}...") - - # Create a yamale Data object - data_set_description = yamale.make_data(file_path) - - # TODO: explore collecting all errors and raising them at once. - Lucas - yamale.validate(schema=data_set_description_schema, data=data_set_description) - - -def write_data_set_description_template_file( - data_set_description_schema: yamale.schema.schema.Schema, - data_set_description_field_descriptions: dict, - template_file_path: str = DATA_SET_DESCRIPTION_TEMPLATE_FILE_PATH, -) -> None: - """Write an example data set description with helpful comments.""" - template_file_lines = [] - - # Write comments at the top of the template - template_file_lines.append( - "# Note: This template is automatically generated by the function\n" - "# `write_data_set_description_template_file` from the schema\n" - "# and field descriptions files. Do not manually edit this file.\n\n" - ) - - schema_dict = data_set_description_schema.dict - for field_name, field_schema in schema_dict.items(): - template_file_lines.append(f"{field_name}: \n") - template_file_lines.append( - f"# Description: {data_set_description_field_descriptions[field_name]}\n" - ) - template_file_lines.append(f"# Required field: {field_schema.is_required}\n") - template_file_lines.append(f"# Field type: {field_schema.get_name()}\n") - if type(field_schema) is yamale.validators.validators.Enum: - template_file_lines.append( - f"# Valid choices are one of the following: {field_schema.enums}\n" - ) - - # Add an empty linebreak to separate fields. - template_file_lines.append("\n") - - with open(template_file_path, "w") as file: - file.writelines(template_file_lines) - - -def run_validations_and_write_template() -> None: - """Run validations of schema and descriptions, and write a template file.""" - # Load the schema and a separate dictionary - data_set_description_schema = load_data_set_description_schema() - data_set_description_field_descriptions = ( - load_data_set_description_field_descriptions() - ) - - validate_descriptions_for_schema( - schema=data_set_description_schema, - field_descriptions=data_set_description_field_descriptions, - ) - - # Validate all data set descriptions in the directory against schema. - validate_all_data_set_descriptions( - data_set_description_schema=data_set_description_schema - ) - - # Write an example template for data set descriptions. - write_data_set_description_template_file( - data_set_description_schema=data_set_description_schema, - data_set_description_field_descriptions=data_set_description_field_descriptions, - ) - - -if __name__ == "__main__": - run_validations_and_write_template() diff --git a/data/data-roadmap/utils/utils_data_set_description_schema_test.py b/data/data-roadmap/utils/utils_data_set_description_schema_test.py deleted file mode 100644 index 7d738bc2..00000000 --- a/data/data-roadmap/utils/utils_data_set_description_schema_test.py +++ /dev/null @@ -1,248 +0,0 @@ -import unittest -from unittest import mock - -import yamale -from data_roadmap.utils.utils_data_set_description_schema import ( - load_data_set_description_schema, - load_data_set_description_field_descriptions, - validate_descriptions_for_schema, - validate_all_data_set_descriptions, - write_data_set_description_template_file, -) - - -class UtilsDataSetDescriptionSchema(unittest.TestCase): - @mock.patch("yamale.make_schema") - def test_load_data_set_description_schema(self, make_schema_mock): - load_data_set_description_schema(file_path="mock.yaml") - - make_schema_mock.assert_called_once_with(path="mock.yaml") - - @mock.patch("yaml.safe_load") - def test_load_data_set_description_field_descriptions(self, yaml_safe_load_mock): - # Note: this isn't a great test, we could mock the actual YAML to - # make it better. - Lucas - mock_dict = { - "name": "The name of the thing.", - "age": "The age of the thing.", - "height": "The height of the thing.", - "awesome": "The awesome of the thing.", - "field": "The field of the thing.", - } - - yaml_safe_load_mock.return_value = mock_dict - - field_descriptions = load_data_set_description_field_descriptions() - - yaml_safe_load_mock.assert_called_once() - - self.assertDictEqual(field_descriptions, mock_dict) - - def test_validate_descriptions_for_schema(self): - # Test when all descriptions are present. - field_descriptions = { - "name": "The name of the thing.", - "age": "The age of the thing.", - "height": "The height of the thing.", - "awesome": "The awesome of the thing.", - "field": "The field of the thing.", - } - - schema = yamale.make_schema( - content=""" -name: str() -age: int(max=200) -height: num() -awesome: bool() -field: enum('option 1', 'option 2') -""" - ) - - # Should pass. - validate_descriptions_for_schema( - schema=schema, field_descriptions=field_descriptions - ) - - field_descriptions_missing_one = { - "name": "The name of the thing.", - "age": "The age of the thing.", - "height": "The height of the thing.", - "awesome": "The awesome of the thing.", - } - - # Should fail because of the missing field description. - with self.assertRaises(ValueError) as context_manager: - validate_descriptions_for_schema( - schema=schema, field_descriptions=field_descriptions_missing_one - ) - - # Using `assertIn` because the file path is returned in the error - # message, and it varies based on environment. - self.assertIn( - "Field `field` does not have a description. Please add one to file", - str(context_manager.exception), - ) - - field_descriptions_extra_one = { - "name": "The name of the thing.", - "age": "The age of the thing.", - "height": "The height of the thing.", - "awesome": "The awesome of the thing.", - "field": "The field of the thing.", - "extra": "Extra description.", - } - - # Should fail because of the extra field description. - with self.assertRaises(ValueError) as context_manager: - validate_descriptions_for_schema( - schema=schema, field_descriptions=field_descriptions_extra_one - ) - - # Using `assertIn` because the file path is returned in the error - # message, and it varies based on environment. - self.assertEquals( - "Field `extra` has a description but is not in the schema.", - str(context_manager.exception), - ) - - def test_validate_all_data_set_descriptions(self): - # Setup a few examples of `yamale` data *before* we mock the `make_data` - # function. - valid_data = yamale.make_data( - content=""" - name: Bill - age: 26 - height: 6.2 - awesome: True - field: option 1 - """ - ) - - invalid_data_1 = yamale.make_data( - content=""" - name: Bill - age: asdf - height: 6.2 - awesome: asdf - field: option 1 - """ - ) - - invalid_data_2 = yamale.make_data( - content=""" - age: 26 - height: 6.2 - awesome: True - field: option 1 - """ - ) - - # Mock `make_data`. - with mock.patch.object( - yamale, "make_data", return_value=None - ) as yamale_make_data_mock: - schema = yamale.make_schema( - content=""" - name: str() - age: int(max=200) - height: num() - awesome: bool() - field: enum('option 1', 'option 2') - """ - ) - - # Make the `make_data` method return valid data. - yamale_make_data_mock.return_value = valid_data - - # Should pass. - validate_all_data_set_descriptions(data_set_description_schema=schema) - - # Make some of the data invalid. - yamale_make_data_mock.return_value = invalid_data_1 - - # Should fail because of the invalid field values. - with self.assertRaises(yamale.YamaleError) as context_manager: - validate_all_data_set_descriptions(data_set_description_schema=schema) - - self.assertEqual( - str(context_manager.exception), - """Error validating data - age: 'asdf' is not a int. - awesome: 'asdf' is not a bool.""", - ) - - # Make some of the data missing. - yamale_make_data_mock.return_value = invalid_data_2 - - # Should fail because of the missing fields. - with self.assertRaises(yamale.YamaleError) as context_manager: - validate_all_data_set_descriptions(data_set_description_schema=schema) - - self.assertEqual( - str(context_manager.exception), - """Error validating data - name: Required field missing""", - ) - - @mock.patch("builtins.open", new_callable=mock.mock_open) - def test_write_data_set_description_template_file(self, builtins_writelines_mock): - schema = yamale.make_schema( - content=""" - name: str() - age: int(max=200) - height: num() - awesome: bool() - field: enum('option 1', 'option 2') - """ - ) - - data_set_description_field_descriptions = { - "name": "The name of the thing.", - "age": "The age of the thing.", - "height": "The height of the thing.", - "awesome": "The awesome of the thing.", - "field": "The field of the thing.", - } - - write_data_set_description_template_file( - data_set_description_schema=schema, - data_set_description_field_descriptions=data_set_description_field_descriptions, - template_file_path="mock_template.yaml", - ) - - call_to_writelines = builtins_writelines_mock.mock_calls[2][1][0] - - self.assertListEqual( - call_to_writelines, - [ - "# Note: This template is automatically generated by the function\n" - "# `write_data_set_description_template_file` from the schema\n" - "# and field descriptions files. Do not manually edit this file.\n\n", - "name: \n", - "# Description: The name of the thing.\n", - "# Required field: True\n", - "# Field type: str\n", - "\n", - "age: \n", - "# Description: The age of the thing.\n", - "# Required field: True\n", - "# Field type: int\n", - "\n", - "height: \n", - "# Description: The height of the thing.\n", - "# Required field: True\n", - "# Field type: num\n", - "\n", - "awesome: \n", - "# Description: The awesome of the thing.\n", - "# Required field: True\n", - "# Field type: bool\n", - "\n", - "field: \n", - "# Description: The field of the thing.\n", - "# Required field: True\n", - "# Field type: enum\n", - "# Valid choices are one of the following: ('option 1', 'option 2')\n", - "\n", - ], - ) From 83eb7b0982228c517b4650a5d38a219d18fd33a1 Mon Sep 17 00:00:00 2001 From: Shaun Verch Date: Mon, 13 Dec 2021 13:54:59 -0500 Subject: [PATCH 06/12] Silence dev only vulnerabilities (#1041) Showing obscure vulnerabilities that only exist in the dev setup creates more noise and means that they just get ignored (because they are probably low priority). Silencing them means when we get a vulnerable dependency alert we know to pay attention to it. Comes from https://github.com/dependabot/dependabot-core/issues/2521 and https://github.com/hpcc-systems/Tombolo/commit/501bbef57817a9a46498095fdbd2e1e7a6ce62fa. --- .github/dependabot.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..cda0160a --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/**" + schedule: + interval: "daily" + allow: + - dependency-type: "production" From 9709d08ca34e654aeaafb0f2d0273c2806fa27a9 Mon Sep 17 00:00:00 2001 From: Jorge Escobar <83969469+esfoobar-usds@users.noreply.github.com> Date: Mon, 13 Dec 2021 14:53:50 -0500 Subject: [PATCH 07/12] Update Side Panel Tile Data (#866) * Update Side Panel Tile Data * Update Side Panel Tile Data * Correct indicator names to match csv * Replace Score with Rate * Comment out FEMA Loss Rate to troubleshoot * Removes all "FEMA Loss Rate" array elements * Revert FEMA to Score * Remove expected loss rate * Remove RMP and NPL from BASIC array * Attempt to make shape mismatch align - update README typo * Add Score L indicators to TILE_SCORE_FLOAT_COLUMNS * removing cbg references * completes the ticket * Update side panel fields * Update index file writing to create parent dir * Updates from linting * fixing missing field_names for island territories 90th percentile fields * Update downloadable fields and fix field name * Update file fields and tests * Update ordering of fields and leave TODO * Update pickle after re-ordering of file * fixing bugs in etl_score_geo * Repeating index for diesel fix * passing tests * adding pytest.ini Co-authored-by: Vim USDS Co-authored-by: Shelby Switzer Co-authored-by: lucasmbrown-usds --- data/data-pipeline/README.md | 4 +- .../data_pipeline/etl/score/constants.py | 283 ++++++++++++------ .../data_pipeline/etl/score/etl_score_geo.py | 55 ++-- .../data_pipeline/etl/score/etl_score_post.py | 31 +- .../tests/sample_data/score_data_initial.csv | 6 +- .../snapshots/downloadable_data_expected.pkl | Bin 3831 -> 7803 bytes .../tests/snapshots/score_data_expected.pkl | Bin 43082 -> 43496 bytes .../snapshots/score_transformed_expected.pkl | Bin 42699 -> 43113 bytes .../tests/snapshots/tile_data_expected.pkl | Bin 3267 -> 3000 bytes .../data_pipeline/etl/sources/census/etl.py | 4 +- .../data_pipeline/score/field_names.py | 29 +- .../data_pipeline/score/score_l.py | 55 +++- data/data-pipeline/pytest.ini | 2 + 13 files changed, 328 insertions(+), 141 deletions(-) create mode 100644 data/data-pipeline/pytest.ini diff --git a/data/data-pipeline/README.md b/data/data-pipeline/README.md index 15c1a959..46b7f14d 100644 --- a/data/data-pipeline/README.md +++ b/data/data-pipeline/README.md @@ -159,7 +159,7 @@ We use Docker to install the necessary libraries in a container that can be run To build the docker container the first time, make sure you're in the root directory of the repository and run `docker-compose build --no-cache`. -Once completed, run `docker-compose up`. Docker will spin up 3 containers: the client container, the static server container and the data container. Once all data is generated, you can see the application using a browser and navigating to `htto://localhost:8000`. +Once completed, run `docker-compose up`. Docker will spin up 3 containers: the client container, the static server container and the data container. Once all data is generated, you can see the application using a browser and navigating to `http://localhost:8000`. If you want to run specific data tasks, you can open a terminal window, navigate to the root folder for this repository and then execute any command for the application using this format: @@ -322,7 +322,7 @@ score_initial_df = pd.read_csv(score_csv_path, dtype={"GEOID10_TRACT": "string"} score_initial_df.to_csv(data_path / "data_pipeline" / "etl" / "score" / "tests" / "sample_data" /"score_data_initial.csv", index=False) ``` -Now you can move on to updating inidvidual pickles for the tests. Note that it is helpful to do them in this order: +Now you can move on to updating individual pickles for the tests. Note that it is helpful to do them in this order: We have four pickle files that correspond to expected files: - `score_data_expected.pkl`: Initial score without counties diff --git a/data/data-pipeline/data_pipeline/etl/score/constants.py b/data/data-pipeline/data_pipeline/etl/score/constants.py index 17b218d2..8341ffbb 100644 --- a/data/data-pipeline/data_pipeline/etl/score/constants.py +++ b/data/data-pipeline/data_pipeline/etl/score/constants.py @@ -1,7 +1,6 @@ from pathlib import Path import datetime -import pandas as pd from data_pipeline.config import settings from data_pipeline.score import field_names @@ -38,6 +37,9 @@ FULL_SCORE_CSV_FULL_PLUS_COUNTIES_FILE_PATH = ( # Score Tile CSV source path DATA_SCORE_CSV_TILES_PATH = DATA_SCORE_CSV_DIR / "tiles" DATA_SCORE_CSV_TILES_FILE_PATH = DATA_SCORE_CSV_TILES_PATH / "usa.csv" +DATA_SCORE_JSON_INDEX_FILE_PATH = ( + DATA_SCORE_CSV_TILES_PATH / "tile_indexes.json" +) ## Tile path DATA_SCORE_TILES_DIR = DATA_SCORE_DIR / "tiles" @@ -60,119 +62,214 @@ SCORE_DOWNLOADABLE_ZIP_FILE_PATH = ( # Column subsets CENSUS_COUNTIES_COLUMNS = ["USPS", "GEOID", "NAME"] -TILES_SCORE_COLUMNS = [ - field_names.GEOID_TRACT_FIELD, - field_names.STATE_FIELD, - field_names.COUNTY_FIELD, - field_names.TOTAL_POP_FIELD, - field_names.SCORE_D + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.SCORE_D + field_names.TOP_25_PERCENTILE_SUFFIX, - field_names.SCORE_E + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.SCORE_E + field_names.TOP_25_PERCENTILE_SUFFIX, - field_names.SCORE_G_COMMUNITIES, - field_names.SCORE_G, - field_names.SCORE_L_COMMUNITIES, - field_names.SCORE_L + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.POVERTY_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.HIGH_SCHOOL_ED_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.LINGUISTIC_ISO_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.UNEMPLOYMENT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.HOUSING_BURDEN_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.DIABETES_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.ASTHMA_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.HEART_DISEASE_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.LOW_LIFE_EXPECTANCY_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.TRAFFIC_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.FEMA_RISK_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.ENERGY_BURDEN_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.WASTEWATER_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.LEAD_PAINT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.DIESEL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.PM25_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + +TILES_ROUND_NUM_DECIMALS = 2 +# Tiles data: full field name, tile index name +TILES_SCORE_COLUMNS = { + field_names.GEOID_TRACT_FIELD: "GTF", + field_names.STATE_FIELD: "SF", + field_names.COUNTY_FIELD: "CF", + field_names.DIABETES_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "DF_PFS", + field_names.ASTHMA_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "AF_PFS", + field_names.HEART_DISEASE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "HDF_PFS", + field_names.DIESEL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "DSF_PFS", + field_names.ENERGY_BURDEN_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "EBF_PFS", + field_names.EXPECTED_AGRICULTURE_LOSS_RATE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "EALR_PFS", + field_names.EXPECTED_BUILDING_LOSS_RATE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "EBLR_PFS", + field_names.EXPECTED_POPULATION_LOSS_RATE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "EPLR_PFS", + field_names.HOUSING_BURDEN_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "HBF_PFS", + field_names.LOW_LIFE_EXPECTANCY_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "LLEF_PFS", + field_names.LINGUISTIC_ISO_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "LIF_PFS", field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD - + field_names.PERCENTILE_FIELD_SUFFIX, + + field_names.PERCENTILE_FIELD_SUFFIX: "LMI_PFS", + field_names.MEDIAN_HOUSE_VALUE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "MHVF_PFS", + field_names.PM25_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "PM25F_PFS", + field_names.HIGH_SCHOOL_ED_FIELD: "HSEF", + field_names.POVERTY_LESS_THAN_100_FPL_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "P100_PFS", field_names.POVERTY_LESS_THAN_200_FPL_FIELD - + field_names.PERCENTILE_FIELD_SUFFIX, -] + + field_names.PERCENTILE_FIELD_SUFFIX: "P200_PFS", + field_names.LEAD_PAINT_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "LPF_PFS", + field_names.NPL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "NPL_PFS", + field_names.RMP_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "RMP_PFS", + field_names.TSDF_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "TSDF_PFS", + field_names.TOTAL_POP_FIELD: "TPF", + field_names.TRAFFIC_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "TF_PFS", + field_names.UNEMPLOYMENT_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "UF_PFS", + field_names.WASTEWATER_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "WF_PFS", + field_names.L_WATER: "L_WTR", + field_names.L_WORKFORCE: "L_WKFC", + field_names.L_CLIMATE: "L_CLT", + field_names.L_ENERGY: "L_ENY", + field_names.L_TRANSPORTATION: "L_TRN", + field_names.L_HOUSING: "L_HSG", + field_names.L_POLLUTION: "L_PLN", + field_names.L_HEALTH: "L_HLTH", + field_names.SCORE_L_COMMUNITIES: "SL_C", + field_names.SCORE_L + field_names.PERCENTILE_FIELD_SUFFIX: "SL_PFS", + field_names.EXPECTED_POPULATION_LOSS_RATE_LOW_INCOME_FIELD: "EPLRLI", + field_names.EXPECTED_AGRICULTURE_LOSS_RATE_LOW_INCOME_FIELD: "EALRLI", + field_names.EXPECTED_BUILDING_LOSS_RATE_LOW_INCOME_FIELD: "EBLRLI", + field_names.PM25_EXPOSURE_LOW_INCOME_FIELD: "PM25LI", + field_names.ENERGY_BURDEN_LOW_INCOME_FIELD: "EBLI", + field_names.DIESEL_PARTICULATE_MATTER_LOW_INCOME_FIELD: "DPMLI", + field_names.TRAFFIC_PROXIMITY_LOW_INCOME_FIELD: "TPLI", + field_names.LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD: "LPMHVLI", + field_names.HOUSING_BURDEN_LOW_INCOME_FIELD: "HBLI", + field_names.RMP_LOW_INCOME_FIELD: "RMPLI", + field_names.SUPERFUND_LOW_INCOME_FIELD: "SFLI", + field_names.HAZARDOUS_WASTE_LOW_INCOME_FIELD: "HWLI", + field_names.WASTEWATER_DISCHARGE_LOW_INCOME_FIELD: "WDLI", + field_names.DIABETES_LOW_INCOME_FIELD: "DLI", + field_names.ASTHMA_LOW_INCOME_FIELD: "ALI", + field_names.HEART_DISEASE_LOW_INCOME_FIELD: "HDLI", + field_names.LOW_LIFE_EXPECTANCY_LOW_INCOME_FIELD: "LLELI", + field_names.LINGUISTIC_ISOLATION_LOW_HS_EDUCATION_FIELD: "LILHSE", + field_names.POVERTY_LOW_HS_EDUCATION_FIELD: "PLHSE", + field_names.LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD: "LMILHSE", + field_names.UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD: "ULHSE", + field_names.FPL_200_SERIES: "FPL200S", + field_names.THRESHOLD_COUNT: "TC", + field_names.ISLAND_AREAS_UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD: "IAULHSE", + field_names.ISLAND_AREAS_POVERTY_LOW_HS_EDUCATION_FIELD: "ISPLHSE", + field_names.ISLAND_AREAS_LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD: "IALMILHSE", +} # columns to round floats to 2 decimals +# TODO refactor to use much smaller subset of fields we DON'T want to round TILES_SCORE_FLOAT_COLUMNS = [ - field_names.SCORE_D + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.SCORE_D + field_names.TOP_25_PERCENTILE_SUFFIX, - field_names.SCORE_E + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.SCORE_E + field_names.TOP_25_PERCENTILE_SUFFIX, - field_names.SCORE_L + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.POVERTY_FIELD, - field_names.HIGH_SCHOOL_ED_FIELD, - field_names.LINGUISTIC_ISO_FIELD, - field_names.UNEMPLOYMENT_FIELD, - field_names.HOUSING_BURDEN_FIELD, - field_names.POVERTY_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.HIGH_SCHOOL_ED_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.LINGUISTIC_ISO_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.UNEMPLOYMENT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.HOUSING_BURDEN_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.DIABETES_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.ASTHMA_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.HEART_DISEASE_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.LOW_LIFE_EXPECTANCY_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.TRAFFIC_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.FEMA_RISK_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.ENERGY_BURDEN_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.WASTEWATER_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.LEAD_PAINT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.DIESEL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.PM25_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.ENERGY_BURDEN_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.EXPECTED_AGRICULTURE_LOSS_RATE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.EXPECTED_BUILDING_LOSS_RATE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.EXPECTED_POPULATION_LOSS_RATE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.HOUSING_BURDEN_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.LOW_LIFE_EXPECTANCY_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.LINGUISTIC_ISO_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.MEDIAN_HOUSE_VALUE_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.PM25_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.POVERTY_LESS_THAN_100_FPL_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX, field_names.POVERTY_LESS_THAN_200_FPL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.LEAD_PAINT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.NPL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.RMP_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.TSDF_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.TRAFFIC_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.UNEMPLOYMENT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.WASTEWATER_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.SCORE_L + field_names.PERCENTILE_FIELD_SUFFIX, ] -TILES_ROUND_NUM_DECIMALS = 2 - -DOWNLOADABLE_SCORE_INDICATOR_COLUMNS_BASIC = [ - field_names.AMI_FIELD, - field_names.POVERTY_LESS_THAN_100_FPL_FIELD, - field_names.HIGH_SCHOOL_ED_FIELD, - field_names.DIABETES_FIELD, - field_names.ASTHMA_FIELD, - field_names.HEART_DISEASE_FIELD, - field_names.TRAFFIC_FIELD, - field_names.FEMA_RISK_FIELD, - field_names.ENERGY_BURDEN_FIELD, - field_names.HOUSING_BURDEN_FIELD, - field_names.WASTEWATER_FIELD, - field_names.LEAD_PAINT_FIELD, - field_names.DIESEL_FIELD, - field_names.PM25_FIELD, - field_names.TOTAL_POP_FIELD, -] - -# For every indicator above, we want to include percentile also. -DOWNLOADABLE_SCORE_INDICATOR_COLUMNS_FULL = list( - pd.core.common.flatten( - [ - [p, f"{p}{field_names.PERCENTILE_FIELD_SUFFIX}"] - for p in DOWNLOADABLE_SCORE_INDICATOR_COLUMNS_BASIC - ] - ) -) # Finally we augment with the GEOID10, county, and state DOWNLOADABLE_SCORE_COLUMNS = [ field_names.GEOID_TRACT_FIELD, field_names.COUNTY_FIELD, field_names.STATE_FIELD, - field_names.SCORE_G_COMMUNITIES, - # Note: the reverse percentile fields get moved down here because - # we put the raw value in the download along with the *reversed* percentile. - # All other fields we put in f"{field_name}" and - # f"{field_name}{field_names.PERCENTILE_FIELD_SUFFIX}", which doesn't work for the - # reversed percentile fields. + field_names.SCORE_L_COMMUNITIES, + field_names.TOTAL_POP_FIELD, + field_names.FPL_200_SERIES, + field_names.POVERTY_LESS_THAN_200_FPL_FIELD, + field_names.POVERTY_LESS_THAN_200_FPL_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.EXPECTED_AGRICULTURE_LOSS_RATE_FIELD, + field_names.EXPECTED_AGRICULTURE_LOSS_RATE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.EXPECTED_AGRICULTURE_LOSS_RATE_LOW_INCOME_FIELD, + field_names.EXPECTED_BUILDING_LOSS_RATE_FIELD, + field_names.EXPECTED_BUILDING_LOSS_RATE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.EXPECTED_BUILDING_LOSS_RATE_LOW_INCOME_FIELD, + field_names.EXPECTED_POPULATION_LOSS_RATE_FIELD, + field_names.EXPECTED_POPULATION_LOSS_RATE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.EXPECTED_POPULATION_LOSS_RATE_LOW_INCOME_FIELD, + field_names.ENERGY_BURDEN_FIELD, + field_names.ENERGY_BURDEN_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.ENERGY_BURDEN_LOW_INCOME_FIELD, + field_names.PM25_FIELD, + field_names.PM25_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.PM25_EXPOSURE_LOW_INCOME_FIELD, + field_names.DIESEL_FIELD, + field_names.DIESEL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.DIESEL_PARTICULATE_MATTER_LOW_INCOME_FIELD, + field_names.TRAFFIC_FIELD, + field_names.TRAFFIC_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.TRAFFIC_PROXIMITY_LOW_INCOME_FIELD, + field_names.HOUSING_BURDEN_FIELD, + field_names.HOUSING_BURDEN_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.HOUSING_BURDEN_LOW_INCOME_FIELD, + field_names.LEAD_PAINT_FIELD, + field_names.LEAD_PAINT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD, + field_names.MEDIAN_HOUSE_VALUE_FIELD, + field_names.MEDIAN_HOUSE_VALUE_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.TSDF_FIELD, + field_names.TSDF_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.HAZARDOUS_WASTE_LOW_INCOME_FIELD, + field_names.NPL_FIELD, + field_names.NPL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.SUPERFUND_LOW_INCOME_FIELD, + field_names.RMP_FIELD, + field_names.RMP_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.RMP_LOW_INCOME_FIELD, + field_names.WASTEWATER_FIELD, + field_names.WASTEWATER_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.WASTEWATER_DISCHARGE_LOW_INCOME_FIELD, + field_names.ASTHMA_FIELD, + field_names.ASTHMA_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.ASTHMA_LOW_INCOME_FIELD, + field_names.DIABETES_FIELD, + field_names.DIABETES_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.DIABETES_LOW_INCOME_FIELD, + field_names.HEART_DISEASE_FIELD, + field_names.HEART_DISEASE_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.HEART_DISEASE_LOW_INCOME_FIELD, + field_names.LIFE_EXPECTANCY_FIELD, + field_names.LOW_LIFE_EXPECTANCY_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.LOW_LIFE_EXPECTANCY_LOW_INCOME_FIELD, field_names.MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD, field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.LIFE_EXPECTANCY_FIELD, - field_names.LOW_LIFE_EXPECTANCY_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - *DOWNLOADABLE_SCORE_INDICATOR_COLUMNS_FULL, + field_names.LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD, + field_names.LINGUISTIC_ISO_FIELD, + field_names.LINGUISTIC_ISOLATION_LOW_HS_EDUCATION_FIELD, + field_names.UNEMPLOYMENT_FIELD, + field_names.UNEMPLOYMENT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.LINGUISTIC_ISO_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.POVERTY_LESS_THAN_100_FPL_FIELD, + field_names.POVERTY_LESS_THAN_100_FPL_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.POVERTY_LOW_HS_EDUCATION_FIELD, + field_names.HIGH_SCHOOL_ED_FIELD, + field_names.HIGH_SCHOOL_ED_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.THRESHOLD_COUNT, + field_names.UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD, + field_names.COMBINED_UNEMPLOYMENT_2010, + field_names.CENSUS_DECENNIAL_UNEMPLOYMENT_FIELD_2009, + field_names.COMBINED_POVERTY_LESS_THAN_100_FPL_FIELD_2010, + field_names.ISLAND_AREAS_UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD, + field_names.ISLAND_AREAS_POVERTY_LOW_HS_EDUCATION_FIELD, + field_names.ISLAND_AREAS_LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD, ] diff --git a/data/data-pipeline/data_pipeline/etl/score/etl_score_geo.py b/data/data-pipeline/data_pipeline/etl/score/etl_score_geo.py index edb11e68..ba728040 100644 --- a/data/data-pipeline/data_pipeline/etl/score/etl_score_geo.py +++ b/data/data-pipeline/data_pipeline/etl/score/etl_score_geo.py @@ -3,10 +3,12 @@ import pandas as pd import geopandas as gpd from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.score import constants from data_pipeline.etl.sources.census.etl_utils import ( check_census_data_source, ) from data_pipeline.etl.score.etl_utils import check_score_data_source +from data_pipeline.score import field_names from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) @@ -31,9 +33,19 @@ class GeoScoreETL(ExtractTransformLoad): self.DATA_PATH / "census" / "geojson" / "us.json" ) - self.TARGET_SCORE_NAME = "Definition L (percentile)" + # Import the shortened name for Score L percentile ("SL_PFS") that's used on the + # tiles. + self.TARGET_SCORE_SHORT_FIELD = constants.TILES_SCORE_COLUMNS[ + field_names.SCORE_L + field_names.PERCENTILE_FIELD_SUFFIX + ] self.TARGET_SCORE_RENAME_TO = "L_SCORE" + # Import the shortened name for tract ("GTF") that's used on the tiles. + self.TRACT_SHORT_FIELD = constants.TILES_SCORE_COLUMNS[ + field_names.GEOID_TRACT_FIELD + ] + self.GEOMETRY_FIELD_NAME = "geometry" + self.NUMBER_OF_BUCKETS = 10 self.geojson_usa_df: gpd.GeoDataFrame @@ -57,45 +69,52 @@ class GeoScoreETL(ExtractTransformLoad): logger.info("Reading US GeoJSON (~6 minutes)") self.geojson_usa_df = gpd.read_file( self.CENSUS_USA_GEOJSON, - dtype={"GEOID10": "string"}, - usecols=["GEOID10", "geometry"], + dtype={self.GEOID_FIELD_NAME: "string"}, + usecols=[self.GEOID_FIELD_NAME, self.GEOMETRY_FIELD_NAME], low_memory=False, ) - self.geojson_usa_df.head() logger.info("Reading score CSV") self.score_usa_df = pd.read_csv( self.TILE_SCORE_CSV, - dtype={self.GEOID_TRACT_FIELD_NAME: "string"}, + dtype={self.TRACT_SHORT_FIELD: "string"}, low_memory=False, ) def transform(self) -> None: - # rename GEOID10_TRACT to GEOID10 on score to allow merging with Census GeoJSON + # Rename GEOID10_TRACT to GEOID10 on score to allow merging with Census GeoJSON self.score_usa_df.rename( - columns={self.GEOID_TRACT_FIELD_NAME: "GEOID10"}, + columns={self.TRACT_SHORT_FIELD: self.GEOID_FIELD_NAME}, inplace=True, ) logger.info("Pruning Census GeoJSON") - fields = ["GEOID10", "geometry"] + fields = [self.GEOID_FIELD_NAME, self.GEOMETRY_FIELD_NAME] self.geojson_usa_df = self.geojson_usa_df[fields] logger.info("Merging and compressing score CSV with USA GeoJSON") self.geojson_score_usa_high = self.score_usa_df.merge( - self.geojson_usa_df, on="GEOID10", how="left" + self.geojson_usa_df, on=self.GEOID_FIELD_NAME, how="left" ) self.geojson_score_usa_high = gpd.GeoDataFrame( self.geojson_score_usa_high, crs="EPSG:4326" ) + logger.info(f"Columns: {self.geojson_score_usa_high.columns}") + usa_simplified = self.geojson_score_usa_high[ - ["GEOID10", self.TARGET_SCORE_NAME, "geometry"] + [ + self.GEOID_FIELD_NAME, + self.TARGET_SCORE_SHORT_FIELD, + self.GEOMETRY_FIELD_NAME, + ] ].reset_index(drop=True) usa_simplified.rename( - columns={self.TARGET_SCORE_NAME: self.TARGET_SCORE_RENAME_TO}, + columns={ + self.TARGET_SCORE_SHORT_FIELD: self.TARGET_SCORE_RENAME_TO + }, inplace=True, ) @@ -104,7 +123,7 @@ class GeoScoreETL(ExtractTransformLoad): usa_tracts = gpd.GeoDataFrame( usa_tracts, - columns=[self.TARGET_SCORE_RENAME_TO, "geometry"], + columns=[self.TARGET_SCORE_RENAME_TO, self.GEOMETRY_FIELD_NAME], crs="EPSG:4326", ) @@ -122,7 +141,7 @@ class GeoScoreETL(ExtractTransformLoad): self.geojson_score_usa_low = gpd.GeoDataFrame( compressed, - columns=[self.TARGET_SCORE_RENAME_TO, "geometry"], + columns=[self.TARGET_SCORE_RENAME_TO, self.GEOMETRY_FIELD_NAME], crs="EPSG:4326", ) @@ -135,7 +154,7 @@ class GeoScoreETL(ExtractTransformLoad): ) -> gpd.GeoDataFrame: # The tract identifier is the first 11 digits of the GEOID block_group_df["tract"] = block_group_df.apply( - lambda row: row["GEOID10"][0:11], axis=1 + lambda row: row[self.GEOID_FIELD_NAME][0:11], axis=1 ) state_tracts = block_group_df.dissolve(by="tract", aggfunc="mean") return state_tracts @@ -160,7 +179,7 @@ class GeoScoreETL(ExtractTransformLoad): [ self.TARGET_SCORE_RENAME_TO, f"{self.TARGET_SCORE_RENAME_TO}_bucket", - "geometry", + self.GEOMETRY_FIELD_NAME, ] ].reset_index(drop=True) state_dissolve = state_attr.dissolve( @@ -173,11 +192,13 @@ class GeoScoreETL(ExtractTransformLoad): ) -> gpd.GeoDataFrame: compressed = [] for i in range(num_buckets): - for j in range(len(state_bucketed_df["geometry"][i].geoms)): + for j in range( + len(state_bucketed_df[self.GEOMETRY_FIELD_NAME][i].geoms) + ): compressed.append( [ state_bucketed_df[self.TARGET_SCORE_RENAME_TO][i], - state_bucketed_df["geometry"][i].geoms[j], + state_bucketed_df[self.GEOMETRY_FIELD_NAME][i].geoms[j], ] ) return compressed diff --git a/data/data-pipeline/data_pipeline/etl/score/etl_score_post.py b/data/data-pipeline/data_pipeline/etl/score/etl_score_post.py index 4723296c..8f527c7a 100644 --- a/data/data-pipeline/data_pipeline/etl/score/etl_score_post.py +++ b/data/data-pipeline/data_pipeline/etl/score/etl_score_post.py @@ -1,5 +1,7 @@ from pathlib import Path +import json import pandas as pd + from data_pipeline.etl.base import ExtractTransformLoad from data_pipeline.utils import get_module_logger, zip_files from data_pipeline.score import field_names @@ -198,16 +200,37 @@ class PostScoreETL(ExtractTransformLoad): self, score_county_state_merged_df: pd.DataFrame ) -> pd.DataFrame: logger.info("Rounding Decimals") - score_tiles = score_county_state_merged_df[ - constants.TILES_SCORE_COLUMNS - ] + + # grab all the keys from tiles score columns + tiles_score_column_titles = list(constants.TILES_SCORE_COLUMNS.keys()) + + # filter the columns on full score + score_tiles = score_county_state_merged_df[tiles_score_column_titles] + + # round decimals decimals = pd.Series( [constants.TILES_ROUND_NUM_DECIMALS] * len(constants.TILES_SCORE_FLOAT_COLUMNS), index=constants.TILES_SCORE_FLOAT_COLUMNS, ) + score_tiles = score_tiles.round(decimals) - return score_tiles.round(decimals) + # create indexes + score_tiles = score_tiles.rename( + columns=constants.TILES_SCORE_COLUMNS, + inplace=False, + ) + + # write the json map to disk + inverse_tiles_columns = { + v: k for k, v in constants.TILES_SCORE_COLUMNS.items() + } # reverse dict + index_file_path = constants.DATA_SCORE_JSON_INDEX_FILE_PATH + index_file_path.parent.mkdir(parents=True, exist_ok=True) + with open(index_file_path, "w", encoding="utf-8") as fp: + json.dump(inverse_tiles_columns, fp) + + return score_tiles def _create_downloadable_data( self, score_county_state_merged_df: pd.DataFrame diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv b/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv index c986e88d..6b6ab712 100644 --- a/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv +++ b/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv @@ -1,3 +1,3 @@ -GEOID10_TRACT,Persistent Poverty Census Tract,Housing burden (percent),Total population,Median household income (% of state median household income),Current asthma among adults aged >=18 years,Coronary heart disease among adults aged >=18 years,Cancer (excluding skin cancer) among adults aged >=18 years,Current lack of health insurance among adults aged 18-64 years,Diagnosed diabetes among adults aged >=18 years,Physical health not good for >=14 days among adults aged >=18 years,Percent of individuals < 100% Federal Poverty Line,Percent of individuals < 150% Federal Poverty Line,Percent of individuals < 200% Federal Poverty Line,Area Median Income (State or metropolitan),Median household income in the past 12 months,Energy burden,FEMA Risk Index Expected Annual Loss Score,Urban Heuristic Flag,Air toxics cancer risk,Respiratory hazard index,Diesel particulate matter,Particulate matter (PM2.5),Ozone,Traffic proximity and volume,Proximity to Risk Management Plan (RMP) facilities,Proximity to TSDF sites,Proximity to NPL sites,Wastewater discharge,Percent pre-1960s housing (lead paint indicator),Individuals under 5 years old,Individuals over 64 years old,Linguistic isolation (percent),Percent of households in linguistic isolation,Poverty (Less than 200% of federal poverty line),Percent individuals age 25 or over with less than high school degree,Unemployed civilians (percent),Median value ($) of owner-occupied housing units,Percent enrollment in college or graduate school,Expected building loss rate (Natural Hazards Risk Index),Expected agricultural loss rate (Natural Hazards Risk Index),Expected population loss rate (Natural Hazards Risk Index),Percent individuals age 25 or over with less than high school degree in 2009,Percentage households below 100% of federal poverty line in 2009,Unemployed civilians (percent) in 2009,Unemployed civilians (percent) in 2010,Percent of individuals < 100% Federal Poverty Line in 2010,Total population in 2009,Summer days above 90F,Percent low access to healthy food,Percent impenetrable surface areas,Third grade reading proficiency,Median household income as a percent of area median income,Life expectancy (years),Median household income as a percent of territory median income in 2009,Housing burden (percent) (percentile),Housing burden (percent) (value urban only),Housing burden (percent) (percentile urban only),Housing burden (percent) (value rural only),Housing burden (percent) (percentile rural only),Housing burden (percent) (percentile urban/rural),Housing burden (percent) (min-max normalized),Total population (percentile),Total population (value urban only),Total population (percentile urban only),Total population (value rural only),Total population (percentile rural only),Total population (percentile urban/rural),Total population (min-max normalized),Median household income (% of state median household income) (percentile),Median household income (% of state median household income) (value urban only),Median household income (% of state median household income) (percentile urban only),Median household income (% of state median household income) (value rural only),Median household income (% of state median household income) (percentile rural only),Median household income (% of state median household income) (percentile urban/rural),Median household income (% of state median household income) (min-max normalized),Current asthma among adults aged >=18 years (percentile),Current asthma among adults aged >=18 years (value urban only),Current asthma among adults aged >=18 years (percentile urban only),Current asthma among adults aged >=18 years (value rural only),Current asthma among adults aged >=18 years (percentile rural only),Current asthma among adults aged >=18 years (percentile urban/rural),Current asthma among adults aged >=18 years (min-max normalized),Coronary heart disease among adults aged >=18 years (percentile),Coronary heart disease among adults aged >=18 years (value urban only),Coronary heart disease among adults aged >=18 years (percentile urban only),Coronary heart disease among adults aged >=18 years (value rural only),Coronary heart disease among adults aged >=18 years (percentile rural only),Coronary heart disease among adults aged >=18 years (percentile urban/rural),Coronary heart disease among adults aged >=18 years (min-max normalized),Cancer (excluding skin cancer) among adults aged >=18 years (percentile),Cancer (excluding skin cancer) among adults aged >=18 years (value urban only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile urban only),Cancer (excluding skin cancer) among adults aged >=18 years (value rural only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile rural only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile urban/rural),Cancer (excluding skin cancer) among adults aged >=18 years (min-max normalized),Current lack of health insurance among adults aged 18-64 years (percentile),Current lack of health insurance among adults aged 18-64 years (value urban only),Current lack of health insurance among adults aged 18-64 years (percentile urban only),Current lack of health insurance among adults aged 18-64 years (value rural only),Current lack of health insurance among adults aged 18-64 years (percentile rural only),Current lack of health insurance among adults aged 18-64 years (percentile urban/rural),Current lack of health insurance among adults aged 18-64 years (min-max normalized),Diagnosed diabetes among adults aged >=18 years (percentile),Diagnosed diabetes among adults aged >=18 years (value urban only),Diagnosed diabetes among adults aged >=18 years (percentile urban only),Diagnosed diabetes among adults aged >=18 years (value rural only),Diagnosed diabetes among adults aged >=18 years (percentile rural only),Diagnosed diabetes among adults aged >=18 years (percentile urban/rural),Diagnosed diabetes among adults aged >=18 years (min-max normalized),Physical health not good for >=14 days among adults aged >=18 years (percentile),Physical health not good for >=14 days among adults aged >=18 years (value urban only),Physical health not good for >=14 days among adults aged >=18 years (percentile urban only),Physical health not good for >=14 days among adults aged >=18 years (value rural only),Physical health not good for >=14 days among adults aged >=18 years (percentile rural only),Physical health not good for >=14 days among adults aged >=18 years (percentile urban/rural),Physical health not good for >=14 days among adults aged >=18 years (min-max normalized),Percent of individuals < 100% Federal Poverty Line (percentile),Percent of individuals < 100% Federal Poverty Line (value urban only),Percent of individuals < 100% Federal Poverty Line (percentile urban only),Percent of individuals < 100% Federal Poverty Line (value rural only),Percent of individuals < 100% Federal Poverty Line (percentile rural only),Percent of individuals < 100% Federal Poverty Line (percentile urban/rural),Percent of individuals < 100% Federal Poverty Line (min-max normalized),Percent of individuals < 150% Federal Poverty Line (percentile),Percent of individuals < 150% Federal Poverty Line (value urban only),Percent of individuals < 150% Federal Poverty Line (percentile urban only),Percent of individuals < 150% Federal Poverty Line (value rural only),Percent of individuals < 150% Federal Poverty Line (percentile rural only),Percent of individuals < 150% Federal Poverty Line (percentile urban/rural),Percent of individuals < 150% Federal Poverty Line (min-max normalized),Percent of individuals < 200% Federal Poverty Line (percentile),Percent of individuals < 200% Federal Poverty Line (value urban only),Percent of individuals < 200% Federal Poverty Line (percentile urban only),Percent of individuals < 200% Federal Poverty Line (value rural only),Percent of individuals < 200% Federal Poverty Line (percentile rural only),Percent of individuals < 200% Federal Poverty Line (percentile urban/rural),Percent of individuals < 200% Federal Poverty Line (min-max normalized),Area Median Income (State or metropolitan) (percentile),Area Median Income (State or metropolitan) (value urban only),Area Median Income (State or metropolitan) (percentile urban only),Area Median Income (State or metropolitan) (value rural only),Area Median Income (State or metropolitan) (percentile rural only),Area Median Income (State or metropolitan) (percentile urban/rural),Area Median Income (State or metropolitan) (min-max normalized),Median household income in the past 12 months (percentile),Median household income in the past 12 months (value urban only),Median household income in the past 12 months (percentile urban only),Median household income in the past 12 months (value rural only),Median household income in the past 12 months (percentile rural only),Median household income in the past 12 months (percentile urban/rural),Median household income in the past 12 months (min-max normalized),Energy burden (percentile),Energy burden (value urban only),Energy burden (percentile urban only),Energy burden (value rural only),Energy burden (percentile rural only),Energy burden (percentile urban/rural),Energy burden (min-max normalized),FEMA Risk Index Expected Annual Loss Score (percentile),FEMA Risk Index Expected Annual Loss Score (value urban only),FEMA Risk Index Expected Annual Loss Score (percentile urban only),FEMA Risk Index Expected Annual Loss Score (value rural only),FEMA Risk Index Expected Annual Loss Score (percentile rural only),FEMA Risk Index Expected Annual Loss Score (percentile urban/rural),FEMA Risk Index Expected Annual Loss Score (min-max normalized),Urban Heuristic Flag (percentile),Urban Heuristic Flag (value urban only),Urban Heuristic Flag (percentile urban only),Urban Heuristic Flag (value rural only),Urban Heuristic Flag (percentile rural only),Urban Heuristic Flag (percentile urban/rural),Urban Heuristic Flag (min-max normalized),Air toxics cancer risk (percentile),Air toxics cancer risk (value urban only),Air toxics cancer risk (percentile urban only),Air toxics cancer risk (value rural only),Air toxics cancer risk (percentile rural only),Air toxics cancer risk (percentile urban/rural),Air toxics cancer risk (min-max normalized),Respiratory hazard index (percentile),Respiratory hazard index (value urban only),Respiratory hazard index (percentile urban only),Respiratory hazard index (value rural only),Respiratory hazard index (percentile rural only),Respiratory hazard index (percentile urban/rural),Respiratory hazard index (min-max normalized),Diesel particulate matter (percentile),Diesel particulate matter (value urban only),Diesel particulate matter (percentile urban only),Diesel particulate matter (value rural only),Diesel particulate matter (percentile rural only),Diesel particulate matter (percentile urban/rural),Diesel particulate matter (min-max normalized),Particulate matter (PM2.5) (percentile),Particulate matter (PM2.5) (value urban only),Particulate matter (PM2.5) (percentile urban only),Particulate matter (PM2.5) (value rural only),Particulate matter (PM2.5) (percentile rural only),Particulate matter (PM2.5) (percentile urban/rural),Particulate matter (PM2.5) (min-max normalized),Ozone (percentile),Ozone (value urban only),Ozone (percentile urban only),Ozone (value rural only),Ozone (percentile rural only),Ozone (percentile urban/rural),Ozone (min-max normalized),Traffic proximity and volume (percentile),Traffic proximity and volume (value urban only),Traffic proximity and volume (percentile urban only),Traffic proximity and volume (value rural only),Traffic proximity and volume (percentile rural only),Traffic proximity and volume (percentile urban/rural),Traffic proximity and volume (min-max normalized),Proximity to Risk Management Plan (RMP) facilities (percentile),Proximity to Risk Management Plan (RMP) facilities (value urban only),Proximity to Risk Management Plan (RMP) facilities (percentile urban only),Proximity to Risk Management Plan (RMP) facilities (value rural only),Proximity to Risk Management Plan (RMP) facilities (percentile rural only),Proximity to Risk Management Plan (RMP) facilities (percentile urban/rural),Proximity to Risk Management Plan (RMP) facilities (min-max normalized),Proximity to TSDF sites (percentile),Proximity to TSDF sites (value urban only),Proximity to TSDF sites (percentile urban only),Proximity to TSDF sites (value rural only),Proximity to TSDF sites (percentile rural only),Proximity to TSDF sites (percentile urban/rural),Proximity to TSDF sites (min-max normalized),Proximity to NPL sites (percentile),Proximity to NPL sites (value urban only),Proximity to NPL sites (percentile urban only),Proximity to NPL sites (value rural only),Proximity to NPL sites (percentile rural only),Proximity to NPL sites (percentile urban/rural),Proximity to NPL sites (min-max normalized),Wastewater discharge (percentile),Wastewater discharge (value urban only),Wastewater discharge (percentile urban only),Wastewater discharge (value rural only),Wastewater discharge (percentile rural only),Wastewater discharge (percentile urban/rural),Wastewater discharge (min-max normalized),Percent pre-1960s housing (lead paint indicator) (percentile),Percent pre-1960s housing (lead paint indicator) (value urban only),Percent pre-1960s housing (lead paint indicator) (percentile urban only),Percent pre-1960s housing (lead paint indicator) (value rural only),Percent pre-1960s housing (lead paint indicator) (percentile rural only),Percent pre-1960s housing (lead paint indicator) (percentile urban/rural),Percent pre-1960s housing (lead paint indicator) (min-max normalized),Individuals under 5 years old (percentile),Individuals under 5 years old (value urban only),Individuals under 5 years old (percentile urban only),Individuals under 5 years old (value rural only),Individuals under 5 years old (percentile rural only),Individuals under 5 years old (percentile urban/rural),Individuals under 5 years old (min-max normalized),Individuals over 64 years old (percentile),Individuals over 64 years old (value urban only),Individuals over 64 years old (percentile urban only),Individuals over 64 years old (value rural only),Individuals over 64 years old (percentile rural only),Individuals over 64 years old (percentile urban/rural),Individuals over 64 years old (min-max normalized),Linguistic isolation (percent) (percentile),Linguistic isolation (percent) (value urban only),Linguistic isolation (percent) (percentile urban only),Linguistic isolation (percent) (value rural only),Linguistic isolation (percent) (percentile rural only),Linguistic isolation (percent) (percentile urban/rural),Linguistic isolation (percent) (min-max normalized),Percent of households in linguistic isolation (percentile),Percent of households in linguistic isolation (value urban only),Percent of households in linguistic isolation (percentile urban only),Percent of households in linguistic isolation (value rural only),Percent of households in linguistic isolation (percentile rural only),Percent of households in linguistic isolation (percentile urban/rural),Percent of households in linguistic isolation (min-max normalized),Poverty (Less than 200% of federal poverty line) (percentile),Poverty (Less than 200% of federal poverty line) (value urban only),Poverty (Less than 200% of federal poverty line) (percentile urban only),Poverty (Less than 200% of federal poverty line) (value rural only),Poverty (Less than 200% of federal poverty line) (percentile rural only),Poverty (Less than 200% of federal poverty line) (percentile urban/rural),Poverty (Less than 200% of federal poverty line) (min-max normalized),Percent individuals age 25 or over with less than high school degree (percentile),Percent individuals age 25 or over with less than high school degree (value urban only),Percent individuals age 25 or over with less than high school degree (percentile urban only),Percent individuals age 25 or over with less than high school degree (value rural only),Percent individuals age 25 or over with less than high school degree (percentile rural only),Percent individuals age 25 or over with less than high school degree (percentile urban/rural),Percent individuals age 25 or over with less than high school degree (min-max normalized),Unemployed civilians (percent) (percentile),Unemployed civilians (percent) (value urban only),Unemployed civilians (percent) (percentile urban only),Unemployed civilians (percent) (value rural only),Unemployed civilians (percent) (percentile rural only),Unemployed civilians (percent) (percentile urban/rural),Unemployed civilians (percent) (min-max normalized),Median value ($) of owner-occupied housing units (percentile),Median value ($) of owner-occupied housing units (value urban only),Median value ($) of owner-occupied housing units (percentile urban only),Median value ($) of owner-occupied housing units (value rural only),Median value ($) of owner-occupied housing units (percentile rural only),Median value ($) of owner-occupied housing units (percentile urban/rural),Median value ($) of owner-occupied housing units (min-max normalized),Percent enrollment in college or graduate school (percentile),Percent enrollment in college or graduate school (value urban only),Percent enrollment in college or graduate school (percentile urban only),Percent enrollment in college or graduate school (value rural only),Percent enrollment in college or graduate school (percentile rural only),Percent enrollment in college or graduate school (percentile urban/rural),Percent enrollment in college or graduate school (min-max normalized),Expected building loss rate (Natural Hazards Risk Index) (percentile),Expected building loss rate (Natural Hazards Risk Index) (value urban only),Expected building loss rate (Natural Hazards Risk Index) (percentile urban only),Expected building loss rate (Natural Hazards Risk Index) (value rural only),Expected building loss rate (Natural Hazards Risk Index) (percentile rural only),Expected building loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected building loss rate (Natural Hazards Risk Index) (min-max normalized),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile),Expected agricultural loss rate (Natural Hazards Risk Index) (value urban only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile urban only),Expected agricultural loss rate (Natural Hazards Risk Index) (value rural only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile rural only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected agricultural loss rate (Natural Hazards Risk Index) (min-max normalized),Expected population loss rate (Natural Hazards Risk Index) (percentile),Expected population loss rate (Natural Hazards Risk Index) (value urban only),Expected population loss rate (Natural Hazards Risk Index) (percentile urban only),Expected population loss rate (Natural Hazards Risk Index) (value rural only),Expected population loss rate (Natural Hazards Risk Index) (percentile rural only),Expected population loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected population loss rate (Natural Hazards Risk Index) (min-max normalized),Percent individuals age 25 or over with less than high school degree in 2009 (percentile),Percent individuals age 25 or over with less than high school degree in 2009 (value urban only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile urban only),Percent individuals age 25 or over with less than high school degree in 2009 (value rural only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile rural only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile urban/rural),Percent individuals age 25 or over with less than high school degree in 2009 (min-max normalized),Percentage households below 100% of federal poverty line in 2009 (percentile),Percentage households below 100% of federal poverty line in 2009 (value urban only),Percentage households below 100% of federal poverty line in 2009 (percentile urban only),Percentage households below 100% of federal poverty line in 2009 (value rural only),Percentage households below 100% of federal poverty line in 2009 (percentile rural only),Percentage households below 100% of federal poverty line in 2009 (percentile urban/rural),Percentage households below 100% of federal poverty line in 2009 (min-max normalized),Unemployed civilians (percent) in 2009 (percentile),Unemployed civilians (percent) in 2009 (value urban only),Unemployed civilians (percent) in 2009 (percentile urban only),Unemployed civilians (percent) in 2009 (value rural only),Unemployed civilians (percent) in 2009 (percentile rural only),Unemployed civilians (percent) in 2009 (percentile urban/rural),Unemployed civilians (percent) in 2009 (min-max normalized),Unemployed civilians (percent) in 2010 (percentile),Unemployed civilians (percent) in 2010 (value urban only),Unemployed civilians (percent) in 2010 (percentile urban only),Unemployed civilians (percent) in 2010 (value rural only),Unemployed civilians (percent) in 2010 (percentile rural only),Unemployed civilians (percent) in 2010 (percentile urban/rural),Unemployed civilians (percent) in 2010 (min-max normalized),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile),Percent of individuals < 100% Federal Poverty Line in 2010 (value urban only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile urban only),Percent of individuals < 100% Federal Poverty Line in 2010 (value rural only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile rural only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile urban/rural),Percent of individuals < 100% Federal Poverty Line in 2010 (min-max normalized),Total population in 2009 (percentile),Total population in 2009 (value urban only),Total population in 2009 (percentile urban only),Total population in 2009 (value rural only),Total population in 2009 (percentile rural only),Total population in 2009 (percentile urban/rural),Total population in 2009 (min-max normalized),Summer days above 90F (percentile),Summer days above 90F (value urban only),Summer days above 90F (percentile urban only),Summer days above 90F (value rural only),Summer days above 90F (percentile rural only),Summer days above 90F (percentile urban/rural),Summer days above 90F (min-max normalized),Percent low access to healthy food (percentile),Percent low access to healthy food (value urban only),Percent low access to healthy food (percentile urban only),Percent low access to healthy food (value rural only),Percent low access to healthy food (percentile rural only),Percent low access to healthy food (percentile urban/rural),Percent low access to healthy food (min-max normalized),Percent impenetrable surface areas (percentile),Percent impenetrable surface areas (value urban only),Percent impenetrable surface areas (percentile urban only),Percent impenetrable surface areas (value rural only),Percent impenetrable surface areas (percentile rural only),Percent impenetrable surface areas (percentile urban/rural),Percent impenetrable surface areas (min-max normalized),Low third grade reading proficiency (percentile),Third grade reading proficiency (value urban only),Low third grade reading proficiency (percentile urban only),Third grade reading proficiency (value rural only),Low third grade reading proficiency (percentile rural only),Low third grade reading proficiency (percentile urban/rural),Low median household income as a percent of area median income (percentile),Median household income as a percent of area median income (value urban only),Low median household income as a percent of area median income (percentile urban only),Median household income as a percent of area median income (value rural only),Low median household income as a percent of area median income (percentile rural only),Low median household income as a percent of area median income (percentile urban/rural),Low life expectancy (percentile),Life expectancy (years) (value urban only),Low life expectancy (percentile urban only),Life expectancy (years) (value rural only),Low life expectancy (percentile rural only),Low life expectancy (percentile urban/rural),Low median household income as a percent of territory median income in 2009 (percentile),Median household income as a percent of territory median income in 2009 (value urban only),Low median household income as a percent of territory median income in 2009 (percentile urban only),Median household income as a percent of territory median income in 2009 (value rural only),Low median household income as a percent of territory median income in 2009 (percentile rural only),Low median household income as a percent of territory median income in 2009 (percentile urban/rural),Total population in 2009 (island areas) and 2019 (states and PR),Score A,Score B,Socioeconomic Factors,Sensitive populations,Environmental effects,Exposures,Pollution Burden,Population Characteristics,Score C,Score D,Score E,"Low AMI, Low HS graduation",Meets socioeconomic criteria,Meets burden criteria,Score F (communities),Score G (communities),Score G,Score G (percentile),Score H (communities),Score H,Score I (communities),Score I,Score I (percentile),NMTC (communities),Score K (communities),Total threshold criteria exceeded,Is low income,At or above the 90th percentile for expected population loss rate and is low income,At or above the 90th percentile for expected agriculture loss rate and is low income,At or above the 90th percentile for expected building loss rate and is low income,Climate Factor (Definition L),At or above the 90th percentile for PM2.5 exposure and is low income,At or above the 90th percentile for energy burden and is low income,Energy Factor (Definition L),At or above the 90th percentile for diesel particulate matter and is low income,At or above the 90th percentile for traffic proximity and is low income,Transportation Factor (Definition L),At or above the 90th percentile for lead paint and the median house value is less than 90th percentile and is low income,At or above the 90th percentile for housing burden and is low income,Housing Factor (Definition L),At or above the 90th percentile for proximity to RMP sites and is low income,At or above the 90th percentile for proximity to superfund sites and is low income,At or above the 90th percentile for proximity to hazardous waste facilities and is low income,Pollution Factor (Definition L),At or above the 90th percentile for wastewater discharge and is low income,Water Factor (Definition L),At or above the 90th percentile for diabetes and is low income,At or above the 90th percentile for asthma and is low income,At or above the 90th percentile for heart disease and is low income,At or above the 90th percentile for low life expectancy and is low income,Health Factor (Definition L),At or above the 90th percentile for households in linguistic isolation and has low HS education,At or above the 90th percentile for households at or below 100% federal poverty level and has low HS education,At or below the 90th percentile for low median household income as a percent of area median income and has low HS education,At or above the 90th percentile for unemployment and has low HS education,Unemployed civilians (percent) in 2009 (island areas) and 2010 (states and PR),Unemployed civilians (percent) in 2009 exceeds 90th percentile,Percentage households below 100% of federal poverty line in 2009 (island areas) and 2010 (states and PR),Percentage households below 100% of federal poverty line in 2009 exceeds 90th percentile,Low median household income as a percent of territory median income in 2009 exceeds 90th percentile,Workforce Factor (Definition L),Definition L (communities),Any Non-Workforce Factor (Definition L),Definition L (percentile),Score A (percentile),Score A (top 25th percentile),Score A (top 30th percentile),Score A (top 35th percentile),Score A (top 40th percentile),Score B (percentile),Score B (top 25th percentile),Score B (top 30th percentile),Score B (top 35th percentile),Score B (top 40th percentile),Score C (percentile),Score C (top 25th percentile),Score C (top 30th percentile),Score C (top 35th percentile),Score C (top 40th percentile),Score D (percentile),Score D (top 25th percentile),Score D (top 30th percentile),Score D (top 35th percentile),Score D (top 40th percentile),Score E (percentile),Score E (top 25th percentile),Score E (top 30th percentile),Score E (top 35th percentile),Score E (top 40th percentile) -01073001100,True,0.2752043596730245,4897.0,0.7327449738800064,11.2,7.2,6.7,16.6,19.3,15.1,0.150375939849624,0.318796992481203,0.3744360902255639,57447.0,37030.0,0.049,18.7674524286,1.0,51.1530304943,0.735568574566,0.63998588,10.3951975342,39.404630719,253.995131498,2.03499777769,0.708723792992,0.134193041308,1.0556674669,0.205868653936,0.0308352052277,0.185011231366,0.0,0.0,0.407205697528,0.0821917808219178,0.0092071611253196,85500.0,0.0890751899397432,0.0004047858,0.0052243632,2.8039e-06,,,,0.1536983669548511,0.3189099613330878,,62.666668,0.068036923,0.171,58.143433,0.6445941476491375,70.3,,0.6466760729305078,0.2752043596730245,0.5700318443928049,,,0.5700318443928049,0.2752043596730245,0.6512411994432508,4897.0,0.6248587667340021,,,0.6248587667340021,0.0696873532467162,0.2608335861859708,0.7327449738800064,0.2830143458759886,,,0.2830143458759886,0.1567394572745385,0.8509696039125366,11.2,0.835724928163468,,,0.835724928163468,0.3795180722891565,0.7264920810941454,7.2,0.7844637979353648,,,0.7844637979353648,0.1875,0.4789587420739856,6.7,0.5678012699989358,,,0.5678012699989358,0.303921568627451,0.6191105803406409,16.6,0.6018127638440527,,,0.6018127638440527,0.2094488188976378,0.965388552418323,19.3,0.9599666536592288,,,0.9599666536592288,0.4275862068965517,0.697012994398476,15.1,0.7279967363155841,,,0.7279967363155841,0.3440233236151603,0.62043226838371,0.150375939849624,0.6145691950863328,,,0.6145691950863328,0.150375939849624,0.7319580582099551,0.318796992481203,0.7209861695730607,,,0.7209861695730607,0.318796992481203,0.6304939233619051,0.3744360902255639,0.6277982991151962,,,0.6277982991151962,0.3744360902255639,0.305080182775983,57447.0,0.2657396925099514,,,0.2657396925099514,0.2232322025800286,0.1531195524384805,37030.0,0.1572054644434553,,,0.1572054644434553,0.1395180645004889,0.864954517474865,0.049,0.9005173954895489,,,0.9005173954895489,0.0037065052950075,0.6038301323911519,18.7674524286,0.6383816255626487,,,0.6383816255626487,0.1876745242859999,0.5972204988211937,1.0,0.5000085573944445,,,0.5000085573944445,1.0,0.9847958474680182,51.1530304943,0.9819551446670092,,,0.9819551446670092,0.0300384933188293,0.968365553602812,0.735568574566,0.962352336928608,,,0.962352336928608,0.1696726613313424,0.7632321085543794,0.63998588,0.70386920047937,,,0.70386920047937,0.1053235274194042,0.928945948563286,10.3951975342,0.914819538763832,,,0.914819538763832,0.5130755332417333,0.2507228532296667,39.404630719,0.2360646695853011,,,0.2360646695853011,0.2834163202031902,0.4608804184722397,253.995131498,0.3487028727629068,,,0.3487028727629068,0.0081194347824311,0.9022445642626452,2.03499777769,0.8805423357414318,,,0.8805423357414318,0.1192079731904979,0.4244672369292306,0.708723792992,0.2870715924264731,,,0.2870715924264731,0.0016327034632494,0.753733057661383,0.134193041308,0.7050707022289178,,,0.7050707022289178,0.0172289593763426,0.9223869977156124,1.0556674669,0.9078447963253958,,,0.9078447963253958,9.412822248180045e-06,0.4454669531492817,0.205868653936,0.4334577327353032,,,0.4334577327353032,0.205868653936,0.1202416183565086,0.0308352052277,0.108484267470127,,,0.108484267470127,0.0793595720750642,0.695774381427278,0.185011231366,0.7452494265073442,,,0.7452494265073442,0.185011231366,0.1272208772721677,0.0,0.0997988895955446,,,0.0997988895955446,0.0,0.1284712368751773,0.0,0.0986150580340329,,,0.0986150580340329,0.0,0.668247726382076,0.407205697528,0.6576848015886603,,,0.6576848015886603,0.407205697528,0.4189274017467249,0.0821917808219178,0.4443872826422471,,,0.4443872826422471,0.0821917808219178,0.0297871177547618,0.0092071611253196,0.0285699569046924,,,0.0285699569046924,0.0092071611253196,0.1124511830921203,85500.0,0.1074913548122025,,,0.1074913548122025,0.0379401628742081,0.7459685121012851,0.0890751899397432,0.6989610478672336,,,0.6989610478672336,0.0890751899397432,0.7846412062513758,0.0004047858,0.82138883658833,,,0.82138883658833,0.01597287904858,0.5120452999319701,0.0052243632,0.5028314457028648,,,0.5028314457028648,0.0095124530398832,0.6143028498159407,2.8039e-06,0.6689315237296548,,,0.6689315237296548,0.0013204531501148,,,,,,,,,,,,,,,,,,,,,,0.9349594607528132,0.1536983669548511,0.9315960352498582,,,0.9315960352498582,0.1536983669548511,0.8950599559730369,0.3189099613330878,0.8870754376621368,,,0.8870754376621368,0.3189099613330878,,,,,,,,0.7537922665342821,62.666668,0.7585193484443679,,,0.7585193484443679,0.4423529401799308,0.8019598155467721,0.068036923,0.7905320987865615,,,0.7905320987865615,0.068036923,0.4126953421856217,0.171,0.2701910981682835,,,0.2701910981682835,0.1775700879261655,0.990724418702258,58.143433,0.9890918535191758,,,0.9890918535191758,0.8209741753282674,0.6445941476491375,0.7947837521917007,,,0.7947837521917007,0.97046998263836,70.3,0.9652438793658,,,0.9652438793658,,,,,,,4897.0,0.5435875640644005,0.2799472837363994,0.3784219111378495,0.3144122923519848,0.6896597619436307,0.7261571216484003,0.7139913350801438,0.3464171017449171,0.2473388089694474,0.1547617998296523,0.3781718392172476,False,True,True,True,True,1,1,True,1,True,1,1,True,True,0,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,0.1536983669548511,False,0.3189099613330878,False,False,False,False,False,0,0.5532898204078324,False,False,False,False,0.5490856986899564,False,False,False,False,0.5480683083104825,False,False,False,False,0.5438440021080796,False,False,False,False,0.3320495668977446,False,False,False,False -01073001400,True,0.1823529411764705,1906.0,0.7136694633528574,11.1,9.1,7.3,21.4,22.4,17.4,0.2816032887975334,0.3679342240493319,0.4835560123329907,57447.0,36066.0,0.07,17.3011023381,1.0,54.6950518653,0.76056054321,0.9098084377,10.498270137,39.3676601307,3015.87969265,1.81382525188,3.24085850684,0.214095348703,0.365101735929,0.628839590444,0.0582371458552,0.178908709339,0.0245098039215686,0.0165289256198,0.425498426023,0.1742543171114599,0.1150121065375302,67800.0,0.0771549125979505,0.0008951111,0.0067284885,2.3791e-06,,,,0.0804953560371517,0.2950894905920146,,61.666668,0.087159691,0.34900002,93.77919,0.6278134628440127,71.0,,0.3421186011150532,0.1823529411764705,0.2730613650055943,,,0.2730613650055943,0.1823529411764705,0.0867961243766976,1906.0,0.0702656897319135,,,0.0702656897319135,0.0271235644860611,0.2409731608418613,0.7136694633528574,0.263412880473859,,,0.263412880473859,0.1524802086740484,0.8385794307486707,11.1,0.8242488204618823,,,0.8242488204618823,0.3734939759036144,0.9217563763541756,9.1,0.934238532761006,,,0.934238532761006,0.2391304347826086,0.6048579715089994,7.3,0.6840345524850119,,,0.6840345524850119,0.3333333333333333,0.7894025988796952,21.4,0.765821774451027,,,0.765821774451027,0.2850393700787401,0.9878088657624612,22.4,0.9854641881585016,,,0.9854641881585016,0.4988505747126436,0.8447283118655634,17.4,0.8547216999538827,,,0.8547216999538827,0.411078717201166,0.8689250707460116,0.2816032887975334,0.8593419809294734,,,0.8593419809294734,0.2816032887975334,0.8013233263612626,0.3679342240493319,0.7879907224465252,,,0.7879907224465252,0.3679342240493319,0.7892247330790578,0.4835560123329907,0.7755862898376428,,,0.7755862898376428,0.4835560123329907,0.305080182775983,57447.0,0.2657396925099514,,,0.2657396925099514,0.2232322025800286,0.1410656612748476,36066.0,0.1454103468346629,,,0.1454103468346629,0.1356231464796244,0.970802270706518,0.07,0.9745685506050604,,,0.9745685506050604,0.0052950075642965,0.5282998116553705,17.3011023381,0.565061869961834,,,0.565061869961834,0.173011023381,0.5972204988211937,1.0,0.5000085573944445,,,0.5000085573944445,1.0,0.9895233034972276,54.6950518653,0.98758774182503,,,0.98758774182503,0.0324014302096176,0.9765534529502324,0.76056054321,0.9720766991953432,,,0.9720766991953432,0.1759137053158734,0.9016362174902248,0.9098084377,0.8766135935627462,,,0.8766135935627462,0.1497290027189099,0.9329441224077584,10.498270137,0.9196283911889414,,,0.9196283911889414,0.5213510451938572,0.2492010569566841,39.3676601307,0.2346340790789065,,,0.2346340790789065,0.2826912370192468,0.941127799514774,3015.87969265,0.9280004126050854,,,0.9280004126050854,0.0964083008791804,0.8815556546533155,1.81382525188,0.8555140890882322,,,0.8555140890882322,0.1062519253676046,0.7527465845056148,3.24085850684,0.6879172801040846,,,0.6879172801040846,0.0074660410167418,0.8655558708666099,0.214095348703,0.8377272571643783,,,0.8377272571643783,0.027487565893985,0.8882148073250197,0.365101735929,0.8688263024295902,,,0.8688263024295902,3.255416928678718e-06,0.8313806570181485,0.628839590444,0.7904954291779368,,,0.7904954291779368,0.628839590444,0.5164051837137336,0.0582371458552,0.4798079227582429,,,0.4798079227582429,0.1498830619032175,0.6618964608586371,0.178908709339,0.715890026363543,,,0.715890026363543,0.178908709339,0.5796575164471435,0.0245098039215686,0.5161060212798873,,,0.5161060212798873,0.0245098039215686,0.5008648531776597,0.0165289256198,0.424872462081008,,,0.424872462081008,0.0165289256198,0.6964500479723247,0.425498426023,0.6838429143698428,,,0.6838429143698428,0.425498426023,0.751664847161572,0.1742543171114599,0.7508831498439483,,,0.7508831498439483,0.1742543171114599,0.9067171316918536,0.1150121065375302,0.9060831344539256,,,0.9060831344539256,0.1150121065375302,0.0519655139795408,67800.0,0.0554747149655904,,,0.0554747149655904,0.0290456994515583,0.6434691260334525,0.0771549125979505,0.5807502400219449,,,0.5807502400219449,0.0771549125979505,0.9166162227602904,0.0008951111,0.9302158396521918,,,0.9302158396521918,0.0353246959378835,0.5755532434271079,0.0067284885,0.5614035087719298,,,0.5614035087719298,0.0122511928214689,0.558933421571466,2.3791e-06,0.6145407246401615,,,0.6145407246401615,0.0011202645354936,,,,,,,,,,,,,,,,,,,,,,0.6917513228236646,0.0804953560371517,0.6841770738494838,,,0.6841770738494838,0.0804953560371517,0.8737301229199994,0.2950894905920146,0.8632982287353754,,,0.8632982287353754,0.2950894905920146,,,,,,,,0.7501654807214959,61.666668,0.7551581487546324,,,0.7551581487546324,0.435294116816609,0.8647617479139218,0.087159691,0.8519741908983552,,,0.8519741908983552,0.087159691,0.6268497920495212,0.34900002,0.5359536815260283,,,0.5359536815260283,0.3624091475885,0.9537899773356836,93.77919,0.9454938966323262,,,0.9454938966323262,0.8355751594025679,0.6278134628440127,0.8102169783752192,,,0.8102169783752192,0.959938777375042,71.0,0.9533526317781056,,,0.9533526317781056,,,,,,,1906.0,0.7240574475669483,0.523497018864787,0.6395630962236926,0.5859863870065047,0.8438907148737418,0.8318309921361502,0.8358508997153473,0.6127747416150986,0.5121883191018196,0.1843255189540058,0.6553216288775894,False,True,True,True,True,1,1,True,1,True,1,1,True,True,9,True,False,False,True,True,True,True,True,True,True,True,False,False,False,False,False,False,False,False,False,True,False,True,True,True,False,False,False,True,0.0804953560371517,False,0.2950894905920146,False,False,True,True,True,1,0.7460439723787516,False,True,True,True,0.7500818777292576,True,True,True,True,0.9394564656693726,True,True,True,True,0.6605181011067418,False,False,True,True,0.7347062877528682,False,True,True,True +GEOID10_TRACT,Persistent Poverty Census Tract,Housing burden (percent),Total population,Median household income (% of state median household income),Current asthma among adults aged >=18 years,Coronary heart disease among adults aged >=18 years,Cancer (excluding skin cancer) among adults aged >=18 years,Current lack of health insurance among adults aged 18-64 years,Diagnosed diabetes among adults aged >=18 years,Physical health not good for >=14 days among adults aged >=18 years,Percent of individuals < 100% Federal Poverty Line,Percent of individuals < 150% Federal Poverty Line,Percent of individuals < 200% Federal Poverty Line,Area Median Income (State or metropolitan),Median household income in the past 12 months,Energy burden,FEMA Risk Index Expected Annual Loss Score,Urban Heuristic Flag,Air toxics cancer risk,Respiratory hazard index,Diesel particulate matter,Particulate matter (PM2.5),Ozone,Traffic proximity and volume,Proximity to Risk Management Plan (RMP) facilities,Proximity to TSDF sites,Proximity to NPL sites,Wastewater discharge,Percent pre-1960s housing (lead paint indicator),Individuals under 5 years old,Individuals over 64 years old,Linguistic isolation (percent),Percent of households in linguistic isolation,Poverty (Less than 200% of federal poverty line),Percent individuals age 25 or over with less than high school degree,Unemployed civilians (percent),Median value ($) of owner-occupied housing units,Percent enrollment in college or graduate school,Expected building loss rate (Natural Hazards Risk Index),Expected agricultural loss rate (Natural Hazards Risk Index),Expected population loss rate (Natural Hazards Risk Index),Percent individuals age 25 or over with less than high school degree in 2009,Percentage households below 100% of federal poverty line in 2009,Unemployed civilians (percent) in 2009,Unemployed civilians (percent) in 2010,Percent of individuals < 100% Federal Poverty Line in 2010,Total population in 2009,Summer days above 90F,Percent low access to healthy food,Percent impenetrable surface areas,Third grade reading proficiency,Median household income as a percent of area median income,Life expectancy (years),Median household income as a percent of territory median income in 2009,Housing burden (percent) (percentile),Housing burden (percent) (value urban only),Housing burden (percent) (percentile urban only),Housing burden (percent) (value rural only),Housing burden (percent) (percentile rural only),Housing burden (percent) (percentile urban/rural),Housing burden (percent) (min-max normalized),Total population (percentile),Total population (value urban only),Total population (percentile urban only),Total population (value rural only),Total population (percentile rural only),Total population (percentile urban/rural),Total population (min-max normalized),Median household income (% of state median household income) (percentile),Median household income (% of state median household income) (value urban only),Median household income (% of state median household income) (percentile urban only),Median household income (% of state median household income) (value rural only),Median household income (% of state median household income) (percentile rural only),Median household income (% of state median household income) (percentile urban/rural),Median household income (% of state median household income) (min-max normalized),Current asthma among adults aged >=18 years (percentile),Current asthma among adults aged >=18 years (value urban only),Current asthma among adults aged >=18 years (percentile urban only),Current asthma among adults aged >=18 years (value rural only),Current asthma among adults aged >=18 years (percentile rural only),Current asthma among adults aged >=18 years (percentile urban/rural),Current asthma among adults aged >=18 years (min-max normalized),Coronary heart disease among adults aged >=18 years (percentile),Coronary heart disease among adults aged >=18 years (value urban only),Coronary heart disease among adults aged >=18 years (percentile urban only),Coronary heart disease among adults aged >=18 years (value rural only),Coronary heart disease among adults aged >=18 years (percentile rural only),Coronary heart disease among adults aged >=18 years (percentile urban/rural),Coronary heart disease among adults aged >=18 years (min-max normalized),Cancer (excluding skin cancer) among adults aged >=18 years (percentile),Cancer (excluding skin cancer) among adults aged >=18 years (value urban only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile urban only),Cancer (excluding skin cancer) among adults aged >=18 years (value rural only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile rural only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile urban/rural),Cancer (excluding skin cancer) among adults aged >=18 years (min-max normalized),Current lack of health insurance among adults aged 18-64 years (percentile),Current lack of health insurance among adults aged 18-64 years (value urban only),Current lack of health insurance among adults aged 18-64 years (percentile urban only),Current lack of health insurance among adults aged 18-64 years (value rural only),Current lack of health insurance among adults aged 18-64 years (percentile rural only),Current lack of health insurance among adults aged 18-64 years (percentile urban/rural),Current lack of health insurance among adults aged 18-64 years (min-max normalized),Diagnosed diabetes among adults aged >=18 years (percentile),Diagnosed diabetes among adults aged >=18 years (value urban only),Diagnosed diabetes among adults aged >=18 years (percentile urban only),Diagnosed diabetes among adults aged >=18 years (value rural only),Diagnosed diabetes among adults aged >=18 years (percentile rural only),Diagnosed diabetes among adults aged >=18 years (percentile urban/rural),Diagnosed diabetes among adults aged >=18 years (min-max normalized),Physical health not good for >=14 days among adults aged >=18 years (percentile),Physical health not good for >=14 days among adults aged >=18 years (value urban only),Physical health not good for >=14 days among adults aged >=18 years (percentile urban only),Physical health not good for >=14 days among adults aged >=18 years (value rural only),Physical health not good for >=14 days among adults aged >=18 years (percentile rural only),Physical health not good for >=14 days among adults aged >=18 years (percentile urban/rural),Physical health not good for >=14 days among adults aged >=18 years (min-max normalized),Percent of individuals < 100% Federal Poverty Line (percentile),Percent of individuals < 100% Federal Poverty Line (value urban only),Percent of individuals < 100% Federal Poverty Line (percentile urban only),Percent of individuals < 100% Federal Poverty Line (value rural only),Percent of individuals < 100% Federal Poverty Line (percentile rural only),Percent of individuals < 100% Federal Poverty Line (percentile urban/rural),Percent of individuals < 100% Federal Poverty Line (min-max normalized),Percent of individuals < 150% Federal Poverty Line (percentile),Percent of individuals < 150% Federal Poverty Line (value urban only),Percent of individuals < 150% Federal Poverty Line (percentile urban only),Percent of individuals < 150% Federal Poverty Line (value rural only),Percent of individuals < 150% Federal Poverty Line (percentile rural only),Percent of individuals < 150% Federal Poverty Line (percentile urban/rural),Percent of individuals < 150% Federal Poverty Line (min-max normalized),Percent of individuals < 200% Federal Poverty Line (percentile),Percent of individuals < 200% Federal Poverty Line (value urban only),Percent of individuals < 200% Federal Poverty Line (percentile urban only),Percent of individuals < 200% Federal Poverty Line (value rural only),Percent of individuals < 200% Federal Poverty Line (percentile rural only),Percent of individuals < 200% Federal Poverty Line (percentile urban/rural),Percent of individuals < 200% Federal Poverty Line (min-max normalized),Area Median Income (State or metropolitan) (percentile),Area Median Income (State or metropolitan) (value urban only),Area Median Income (State or metropolitan) (percentile urban only),Area Median Income (State or metropolitan) (value rural only),Area Median Income (State or metropolitan) (percentile rural only),Area Median Income (State or metropolitan) (percentile urban/rural),Area Median Income (State or metropolitan) (min-max normalized),Median household income in the past 12 months (percentile),Median household income in the past 12 months (value urban only),Median household income in the past 12 months (percentile urban only),Median household income in the past 12 months (value rural only),Median household income in the past 12 months (percentile rural only),Median household income in the past 12 months (percentile urban/rural),Median household income in the past 12 months (min-max normalized),Energy burden (percentile),Energy burden (value urban only),Energy burden (percentile urban only),Energy burden (value rural only),Energy burden (percentile rural only),Energy burden (percentile urban/rural),Energy burden (min-max normalized),FEMA Risk Index Expected Annual Loss Score (percentile),FEMA Risk Index Expected Annual Loss Score (value urban only),FEMA Risk Index Expected Annual Loss Score (percentile urban only),FEMA Risk Index Expected Annual Loss Score (value rural only),FEMA Risk Index Expected Annual Loss Score (percentile rural only),FEMA Risk Index Expected Annual Loss Score (percentile urban/rural),FEMA Risk Index Expected Annual Loss Score (min-max normalized),Urban Heuristic Flag (percentile),Urban Heuristic Flag (value urban only),Urban Heuristic Flag (percentile urban only),Urban Heuristic Flag (value rural only),Urban Heuristic Flag (percentile rural only),Urban Heuristic Flag (percentile urban/rural),Urban Heuristic Flag (min-max normalized),Air toxics cancer risk (percentile),Air toxics cancer risk (value urban only),Air toxics cancer risk (percentile urban only),Air toxics cancer risk (value rural only),Air toxics cancer risk (percentile rural only),Air toxics cancer risk (percentile urban/rural),Air toxics cancer risk (min-max normalized),Respiratory hazard index (percentile),Respiratory hazard index (value urban only),Respiratory hazard index (percentile urban only),Respiratory hazard index (value rural only),Respiratory hazard index (percentile rural only),Respiratory hazard index (percentile urban/rural),Respiratory hazard index (min-max normalized),Diesel particulate matter (percentile),Diesel particulate matter (value urban only),Diesel particulate matter (percentile urban only),Diesel particulate matter (value rural only),Diesel particulate matter (percentile rural only),Diesel particulate matter (percentile urban/rural),Diesel particulate matter (min-max normalized),Particulate matter (PM2.5) (percentile),Particulate matter (PM2.5) (value urban only),Particulate matter (PM2.5) (percentile urban only),Particulate matter (PM2.5) (value rural only),Particulate matter (PM2.5) (percentile rural only),Particulate matter (PM2.5) (percentile urban/rural),Particulate matter (PM2.5) (min-max normalized),Ozone (percentile),Ozone (value urban only),Ozone (percentile urban only),Ozone (value rural only),Ozone (percentile rural only),Ozone (percentile urban/rural),Ozone (min-max normalized),Traffic proximity and volume (percentile),Traffic proximity and volume (value urban only),Traffic proximity and volume (percentile urban only),Traffic proximity and volume (value rural only),Traffic proximity and volume (percentile rural only),Traffic proximity and volume (percentile urban/rural),Traffic proximity and volume (min-max normalized),Proximity to Risk Management Plan (RMP) facilities (percentile),Proximity to Risk Management Plan (RMP) facilities (value urban only),Proximity to Risk Management Plan (RMP) facilities (percentile urban only),Proximity to Risk Management Plan (RMP) facilities (value rural only),Proximity to Risk Management Plan (RMP) facilities (percentile rural only),Proximity to Risk Management Plan (RMP) facilities (percentile urban/rural),Proximity to Risk Management Plan (RMP) facilities (min-max normalized),Proximity to TSDF sites (percentile),Proximity to TSDF sites (value urban only),Proximity to TSDF sites (percentile urban only),Proximity to TSDF sites (value rural only),Proximity to TSDF sites (percentile rural only),Proximity to TSDF sites (percentile urban/rural),Proximity to TSDF sites (min-max normalized),Proximity to NPL sites (percentile),Proximity to NPL sites (value urban only),Proximity to NPL sites (percentile urban only),Proximity to NPL sites (value rural only),Proximity to NPL sites (percentile rural only),Proximity to NPL sites (percentile urban/rural),Proximity to NPL sites (min-max normalized),Wastewater discharge (percentile),Wastewater discharge (value urban only),Wastewater discharge (percentile urban only),Wastewater discharge (value rural only),Wastewater discharge (percentile rural only),Wastewater discharge (percentile urban/rural),Wastewater discharge (min-max normalized),Percent pre-1960s housing (lead paint indicator) (percentile),Percent pre-1960s housing (lead paint indicator) (value urban only),Percent pre-1960s housing (lead paint indicator) (percentile urban only),Percent pre-1960s housing (lead paint indicator) (value rural only),Percent pre-1960s housing (lead paint indicator) (percentile rural only),Percent pre-1960s housing (lead paint indicator) (percentile urban/rural),Percent pre-1960s housing (lead paint indicator) (min-max normalized),Individuals under 5 years old (percentile),Individuals under 5 years old (value urban only),Individuals under 5 years old (percentile urban only),Individuals under 5 years old (value rural only),Individuals under 5 years old (percentile rural only),Individuals under 5 years old (percentile urban/rural),Individuals under 5 years old (min-max normalized),Individuals over 64 years old (percentile),Individuals over 64 years old (value urban only),Individuals over 64 years old (percentile urban only),Individuals over 64 years old (value rural only),Individuals over 64 years old (percentile rural only),Individuals over 64 years old (percentile urban/rural),Individuals over 64 years old (min-max normalized),Linguistic isolation (percent) (percentile),Linguistic isolation (percent) (value urban only),Linguistic isolation (percent) (percentile urban only),Linguistic isolation (percent) (value rural only),Linguistic isolation (percent) (percentile rural only),Linguistic isolation (percent) (percentile urban/rural),Linguistic isolation (percent) (min-max normalized),Percent of households in linguistic isolation (percentile),Percent of households in linguistic isolation (value urban only),Percent of households in linguistic isolation (percentile urban only),Percent of households in linguistic isolation (value rural only),Percent of households in linguistic isolation (percentile rural only),Percent of households in linguistic isolation (percentile urban/rural),Percent of households in linguistic isolation (min-max normalized),Poverty (Less than 200% of federal poverty line) (percentile),Poverty (Less than 200% of federal poverty line) (value urban only),Poverty (Less than 200% of federal poverty line) (percentile urban only),Poverty (Less than 200% of federal poverty line) (value rural only),Poverty (Less than 200% of federal poverty line) (percentile rural only),Poverty (Less than 200% of federal poverty line) (percentile urban/rural),Poverty (Less than 200% of federal poverty line) (min-max normalized),Percent individuals age 25 or over with less than high school degree (percentile),Percent individuals age 25 or over with less than high school degree (value urban only),Percent individuals age 25 or over with less than high school degree (percentile urban only),Percent individuals age 25 or over with less than high school degree (value rural only),Percent individuals age 25 or over with less than high school degree (percentile rural only),Percent individuals age 25 or over with less than high school degree (percentile urban/rural),Percent individuals age 25 or over with less than high school degree (min-max normalized),Unemployed civilians (percent) (percentile),Unemployed civilians (percent) (value urban only),Unemployed civilians (percent) (percentile urban only),Unemployed civilians (percent) (value rural only),Unemployed civilians (percent) (percentile rural only),Unemployed civilians (percent) (percentile urban/rural),Unemployed civilians (percent) (min-max normalized),Median value ($) of owner-occupied housing units (percentile),Median value ($) of owner-occupied housing units (value urban only),Median value ($) of owner-occupied housing units (percentile urban only),Median value ($) of owner-occupied housing units (value rural only),Median value ($) of owner-occupied housing units (percentile rural only),Median value ($) of owner-occupied housing units (percentile urban/rural),Median value ($) of owner-occupied housing units (min-max normalized),Percent enrollment in college or graduate school (percentile),Percent enrollment in college or graduate school (value urban only),Percent enrollment in college or graduate school (percentile urban only),Percent enrollment in college or graduate school (value rural only),Percent enrollment in college or graduate school (percentile rural only),Percent enrollment in college or graduate school (percentile urban/rural),Percent enrollment in college or graduate school (min-max normalized),Expected building loss rate (Natural Hazards Risk Index) (percentile),Expected building loss rate (Natural Hazards Risk Index) (value urban only),Expected building loss rate (Natural Hazards Risk Index) (percentile urban only),Expected building loss rate (Natural Hazards Risk Index) (value rural only),Expected building loss rate (Natural Hazards Risk Index) (percentile rural only),Expected building loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected building loss rate (Natural Hazards Risk Index) (min-max normalized),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile),Expected agricultural loss rate (Natural Hazards Risk Index) (value urban only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile urban only),Expected agricultural loss rate (Natural Hazards Risk Index) (value rural only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile rural only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected agricultural loss rate (Natural Hazards Risk Index) (min-max normalized),Expected population loss rate (Natural Hazards Risk Index) (percentile),Expected population loss rate (Natural Hazards Risk Index) (value urban only),Expected population loss rate (Natural Hazards Risk Index) (percentile urban only),Expected population loss rate (Natural Hazards Risk Index) (value rural only),Expected population loss rate (Natural Hazards Risk Index) (percentile rural only),Expected population loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected population loss rate (Natural Hazards Risk Index) (min-max normalized),Percent individuals age 25 or over with less than high school degree in 2009 (percentile),Percent individuals age 25 or over with less than high school degree in 2009 (value urban only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile urban only),Percent individuals age 25 or over with less than high school degree in 2009 (value rural only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile rural only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile urban/rural),Percent individuals age 25 or over with less than high school degree in 2009 (min-max normalized),Percentage households below 100% of federal poverty line in 2009 (percentile),Percentage households below 100% of federal poverty line in 2009 (value urban only),Percentage households below 100% of federal poverty line in 2009 (percentile urban only),Percentage households below 100% of federal poverty line in 2009 (value rural only),Percentage households below 100% of federal poverty line in 2009 (percentile rural only),Percentage households below 100% of federal poverty line in 2009 (percentile urban/rural),Percentage households below 100% of federal poverty line in 2009 (min-max normalized),Unemployed civilians (percent) in 2009 (percentile),Unemployed civilians (percent) in 2009 (value urban only),Unemployed civilians (percent) in 2009 (percentile urban only),Unemployed civilians (percent) in 2009 (value rural only),Unemployed civilians (percent) in 2009 (percentile rural only),Unemployed civilians (percent) in 2009 (percentile urban/rural),Unemployed civilians (percent) in 2009 (min-max normalized),Unemployed civilians (percent) in 2010 (percentile),Unemployed civilians (percent) in 2010 (value urban only),Unemployed civilians (percent) in 2010 (percentile urban only),Unemployed civilians (percent) in 2010 (value rural only),Unemployed civilians (percent) in 2010 (percentile rural only),Unemployed civilians (percent) in 2010 (percentile urban/rural),Unemployed civilians (percent) in 2010 (min-max normalized),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile),Percent of individuals < 100% Federal Poverty Line in 2010 (value urban only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile urban only),Percent of individuals < 100% Federal Poverty Line in 2010 (value rural only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile rural only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile urban/rural),Percent of individuals < 100% Federal Poverty Line in 2010 (min-max normalized),Total population in 2009 (percentile),Total population in 2009 (value urban only),Total population in 2009 (percentile urban only),Total population in 2009 (value rural only),Total population in 2009 (percentile rural only),Total population in 2009 (percentile urban/rural),Total population in 2009 (min-max normalized),Summer days above 90F (percentile),Summer days above 90F (value urban only),Summer days above 90F (percentile urban only),Summer days above 90F (value rural only),Summer days above 90F (percentile rural only),Summer days above 90F (percentile urban/rural),Summer days above 90F (min-max normalized),Percent low access to healthy food (percentile),Percent low access to healthy food (value urban only),Percent low access to healthy food (percentile urban only),Percent low access to healthy food (value rural only),Percent low access to healthy food (percentile rural only),Percent low access to healthy food (percentile urban/rural),Percent low access to healthy food (min-max normalized),Percent impenetrable surface areas (percentile),Percent impenetrable surface areas (value urban only),Percent impenetrable surface areas (percentile urban only),Percent impenetrable surface areas (value rural only),Percent impenetrable surface areas (percentile rural only),Percent impenetrable surface areas (percentile urban/rural),Percent impenetrable surface areas (min-max normalized),Low third grade reading proficiency (percentile),Third grade reading proficiency (value urban only),Low third grade reading proficiency (percentile urban only),Third grade reading proficiency (value rural only),Low third grade reading proficiency (percentile rural only),Low third grade reading proficiency (percentile urban/rural),Low median household income as a percent of area median income (percentile),Median household income as a percent of area median income (value urban only),Low median household income as a percent of area median income (percentile urban only),Median household income as a percent of area median income (value rural only),Low median household income as a percent of area median income (percentile rural only),Low median household income as a percent of area median income (percentile urban/rural),Low life expectancy (percentile),Life expectancy (years) (value urban only),Low life expectancy (percentile urban only),Life expectancy (years) (value rural only),Low life expectancy (percentile rural only),Low life expectancy (percentile urban/rural),Low median household income as a percent of territory median income in 2009 (percentile),Median household income as a percent of territory median income in 2009 (value urban only),Low median household income as a percent of territory median income in 2009 (percentile urban only),Median household income as a percent of territory median income in 2009 (value rural only),Low median household income as a percent of territory median income in 2009 (percentile rural only),Low median household income as a percent of territory median income in 2009 (percentile urban/rural),Total population in 2009 (island areas) and 2019 (states and PR),Score A,Score B,Socioeconomic Factors,Sensitive populations,Environmental effects,Exposures,Pollution Burden,Population Characteristics,Score C,Score D,Score E,"Low AMI, Low HS graduation",Meets socioeconomic criteria,Meets burden criteria,Score F (communities),Score G (communities),Score G,Score G (percentile),Score H (communities),Score H,Score I (communities),Score I,Score I (percentile),NMTC (communities),Score K (communities),Total threshold criteria exceeded,Is low income,At or above the 90th percentile for expected population loss rate and is low income,At or above the 90th percentile for expected agriculture loss rate and is low income,At or above the 90th percentile for expected building loss rate and is low income,Climate Factor (Definition L),At or above the 90th percentile for PM2.5 exposure and is low income,At or above the 90th percentile for energy burden and is low income,Energy Factor (Definition L),At or above the 90th percentile for diesel particulate matter and is low income,At or above the 90th percentile for traffic proximity and is low income,Transportation Factor (Definition L),At or above the 90th percentile for lead paint and the median house value is less than 90th percentile and is low income,At or above the 90th percentile for housing burden and is low income,Housing Factor (Definition L),At or above the 90th percentile for proximity to RMP sites and is low income,At or above the 90th percentile for proximity to superfund sites and is low income,At or above the 90th percentile for proximity to hazardous waste facilities and is low income,Pollution Factor (Definition L),At or above the 90th percentile for wastewater discharge and is low income,Water Factor (Definition L),At or above the 90th percentile for diabetes and is low income,At or above the 90th percentile for asthma and is low income,At or above the 90th percentile for heart disease and is low income,At or above the 90th percentile for low life expectancy and is low income,Health Factor (Definition L),At or above the 90th percentile for households in linguistic isolation and has low HS education,At or above the 90th percentile for households at or below 100% federal poverty level and has low HS education,At or above the 90th percentile for low median household income as a percent of area median income and has low HS education,At or above the 90th percentile for unemployment and has low HS education,Unemployed civilians (percent) in 2009 (island areas) and 2010 (states and PR),Unemployed civilians (percent) in 2009 exceeds 90th percentile,Percentage households below 100% of federal poverty line in 2009 (island areas) and 2010 (states and PR),Percentage households below 100% of federal poverty line in 2009 exceeds 90th percentile,Low median household income as a percent of territory median income in 2009 exceeds 90th percentile,At or above the 90th percentile for unemployment and has low HS education in 2009 (island areas),At or above the 90th percentile for households at or below 100% federal poverty level and has low HS education in 2009 (island areas),At or above the 90th percentile for low median household income as a percent of area median income and has low HS education in 2009 (island areas),Workforce Factor (Definition L),Definition L (communities),Any Non-Workforce Factor (Definition L),Definition L (percentile),Score A (percentile),Score A (top 25th percentile),Score A (top 30th percentile),Score A (top 35th percentile),Score A (top 40th percentile),Score B (percentile),Score B (top 25th percentile),Score B (top 30th percentile),Score B (top 35th percentile),Score B (top 40th percentile),Score C (percentile),Score C (top 25th percentile),Score C (top 30th percentile),Score C (top 35th percentile),Score C (top 40th percentile),Score D (percentile),Score D (top 25th percentile),Score D (top 30th percentile),Score D (top 35th percentile),Score D (top 40th percentile),Score E (percentile),Score E (top 25th percentile),Score E (top 30th percentile),Score E (top 35th percentile),Score E (top 40th percentile) +01073001100,True,0.2752043596730245,4897.0,0.7327449738800064,11.2,7.2,6.7,16.6,19.3,15.1,0.150375939849624,0.318796992481203,0.3744360902255639,57447.0,37030.0,0.049,18.7674524286,1.0,51.1530304943,0.735568574566,0.63998588,10.3951975342,39.404630719,253.995131498,2.03499777769,0.708723792992,0.134193041308,1.0556674669,0.205868653936,0.0308352052277,0.185011231366,0.0,0.0,0.407205697528,0.0821917808219178,0.0092071611253196,85500.0,0.0890751899397432,0.0004047858,0.0052243632,2.8039e-06,,,,0.1536983669548511,0.3189099613330878,,62.666668,0.068036923,0.171,58.143433,0.6445941476491375,70.3,,0.6466760729305078,0.2752043596730245,0.5700318443928049,,,0.5700318443928049,0.2752043596730245,0.6512411994432508,4897.0,0.6248587667340021,,,0.6248587667340021,0.0696873532467162,0.2608335861859708,0.7327449738800064,0.2830143458759886,,,0.2830143458759886,0.1567394572745385,0.8509696039125366,11.2,0.835724928163468,,,0.835724928163468,0.3795180722891565,0.7264920810941454,7.2,0.7844637979353648,,,0.7844637979353648,0.1875,0.4789587420739856,6.7,0.5678012699989358,,,0.5678012699989358,0.303921568627451,0.6191105803406409,16.6,0.6018127638440527,,,0.6018127638440527,0.2094488188976378,0.965388552418323,19.3,0.9599666536592288,,,0.9599666536592288,0.4275862068965517,0.697012994398476,15.1,0.7279967363155841,,,0.7279967363155841,0.3440233236151603,0.62043226838371,0.150375939849624,0.6145691950863328,,,0.6145691950863328,0.150375939849624,0.7319580582099551,0.318796992481203,0.7209861695730607,,,0.7209861695730607,0.318796992481203,0.6304939233619051,0.3744360902255639,0.6277982991151962,,,0.6277982991151962,0.3744360902255639,0.305080182775983,57447.0,0.2657396925099514,,,0.2657396925099514,0.2232322025800286,0.1531195524384805,37030.0,0.1572054644434553,,,0.1572054644434553,0.1395180645004889,0.864954517474865,0.049,0.9005173954895489,,,0.9005173954895489,0.0037065052950075,0.6038301323911519,18.7674524286,0.6383816255626487,,,0.6383816255626487,0.1876745242859999,0.5972204988211937,1.0,0.5000085573944445,,,0.5000085573944445,1.0,0.9847958474680182,51.1530304943,0.9819551446670092,,,0.9819551446670092,0.0300384933188293,0.968365553602812,0.735568574566,0.962352336928608,,,0.962352336928608,0.1696726613313424,0.7632321085543794,0.63998588,0.70386920047937,,,0.70386920047937,0.1053235274194042,0.928945948563286,10.3951975342,0.914819538763832,,,0.914819538763832,0.5130755332417333,0.2507228532296667,39.404630719,0.2360646695853011,,,0.2360646695853011,0.2834163202031902,0.4608804184722397,253.995131498,0.3487028727629068,,,0.3487028727629068,0.0081194347824311,0.9022445642626452,2.03499777769,0.8805423357414318,,,0.8805423357414318,0.1192079731904979,0.4244672369292306,0.708723792992,0.2870715924264731,,,0.2870715924264731,0.0016327034632494,0.753733057661383,0.134193041308,0.7050707022289178,,,0.7050707022289178,0.0172289593763426,0.9223869977156124,1.0556674669,0.9078447963253958,,,0.9078447963253958,9.412822248180045e-06,0.4454669531492817,0.205868653936,0.4334577327353032,,,0.4334577327353032,0.205868653936,0.1202416183565086,0.0308352052277,0.108484267470127,,,0.108484267470127,0.0793595720750642,0.695774381427278,0.185011231366,0.7452494265073442,,,0.7452494265073442,0.185011231366,0.1272208772721677,0.0,0.0997988895955446,,,0.0997988895955446,0.0,0.1284712368751773,0.0,0.0986150580340329,,,0.0986150580340329,0.0,0.668247726382076,0.407205697528,0.6576848015886603,,,0.6576848015886603,0.407205697528,0.4189274017467249,0.0821917808219178,0.4443872826422471,,,0.4443872826422471,0.0821917808219178,0.0297871177547618,0.0092071611253196,0.0285699569046924,,,0.0285699569046924,0.0092071611253196,0.1124511830921203,85500.0,0.1074913548122025,,,0.1074913548122025,0.0379401628742081,0.7459685121012851,0.0890751899397432,0.6989610478672336,,,0.6989610478672336,0.0890751899397432,0.7846412062513758,0.0004047858,0.82138883658833,,,0.82138883658833,0.01597287904858,0.5120452999319701,0.0052243632,0.5028314457028648,,,0.5028314457028648,0.0095124530398832,0.6143028498159407,2.8039e-06,0.6689315237296548,,,0.6689315237296548,0.0013204531501148,,,,,,,,,,,,,,,,,,,,,,0.9349594607528132,0.1536983669548511,0.9315960352498582,,,0.9315960352498582,0.1536983669548511,0.8950599559730369,0.3189099613330878,0.8870754376621368,,,0.8870754376621368,0.3189099613330878,,,,,,,,0.7537922665342821,62.666668,0.7585193484443679,,,0.7585193484443679,0.4423529401799308,0.8019598155467721,0.068036923,0.7905320987865615,,,0.7905320987865615,0.068036923,0.4126953421856217,0.171,0.2701910981682835,,,0.2701910981682835,0.1775700879261655,0.990724418702258,58.143433,0.9890918535191758,,,0.9890918535191758,0.8209741753282674,0.6445941476491375,0.7947837521917007,,,0.7947837521917007,0.97046998263836,70.3,0.9652438793658,,,0.9652438793658,,,,,,,4897.0,0.5435875640644005,0.2799472837363994,0.3784219111378495,0.3144122923519848,0.6896597619436307,0.7261571216484003,0.7139913350801438,0.3464171017449171,0.2473388089694474,0.1547617998296523,0.3781718392172476,False,True,True,True,True,1,1,True,1,True,1,1,True,True,0,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,0.1536983669548511,False,0.3189099613330878,False,False,False,False,False,False,False,False,0,0.5532898204078324,False,False,False,False,0.5490856986899564,False,False,False,False,0.5480683083104825,False,False,False,False,0.5438440021080796,False,False,False,False,0.3320495668977446,False,False,False,False +01073001400,True,0.1823529411764705,1906.0,0.7136694633528574,11.1,9.1,7.3,21.4,22.4,17.4,0.2816032887975334,0.3679342240493319,0.4835560123329907,57447.0,36066.0,0.07,17.3011023381,1.0,54.6950518653,0.76056054321,0.9098084377,10.498270137,39.3676601307,3015.87969265,1.81382525188,3.24085850684,0.214095348703,0.365101735929,0.628839590444,0.0582371458552,0.178908709339,0.0245098039215686,0.0165289256198,0.425498426023,0.1742543171114599,0.1150121065375302,67800.0,0.0771549125979505,0.0008951111,0.0067284885,2.3791e-06,,,,0.0804953560371517,0.2950894905920146,,61.666668,0.087159691,0.34900002,93.77919,0.6278134628440127,71.0,,0.3421186011150532,0.1823529411764705,0.2730613650055943,,,0.2730613650055943,0.1823529411764705,0.0867961243766976,1906.0,0.0702656897319135,,,0.0702656897319135,0.0271235644860611,0.2409731608418613,0.7136694633528574,0.263412880473859,,,0.263412880473859,0.1524802086740484,0.8385794307486707,11.1,0.8242488204618823,,,0.8242488204618823,0.3734939759036144,0.9217563763541756,9.1,0.934238532761006,,,0.934238532761006,0.2391304347826086,0.6048579715089994,7.3,0.6840345524850119,,,0.6840345524850119,0.3333333333333333,0.7894025988796952,21.4,0.765821774451027,,,0.765821774451027,0.2850393700787401,0.9878088657624612,22.4,0.9854641881585016,,,0.9854641881585016,0.4988505747126436,0.8447283118655634,17.4,0.8547216999538827,,,0.8547216999538827,0.411078717201166,0.8689250707460116,0.2816032887975334,0.8593419809294734,,,0.8593419809294734,0.2816032887975334,0.8013233263612626,0.3679342240493319,0.7879907224465252,,,0.7879907224465252,0.3679342240493319,0.7892247330790578,0.4835560123329907,0.7755862898376428,,,0.7755862898376428,0.4835560123329907,0.305080182775983,57447.0,0.2657396925099514,,,0.2657396925099514,0.2232322025800286,0.1410656612748476,36066.0,0.1454103468346629,,,0.1454103468346629,0.1356231464796244,0.970802270706518,0.07,0.9745685506050604,,,0.9745685506050604,0.0052950075642965,0.5282998116553705,17.3011023381,0.565061869961834,,,0.565061869961834,0.173011023381,0.5972204988211937,1.0,0.5000085573944445,,,0.5000085573944445,1.0,0.9895233034972276,54.6950518653,0.98758774182503,,,0.98758774182503,0.0324014302096176,0.9765534529502324,0.76056054321,0.9720766991953432,,,0.9720766991953432,0.1759137053158734,0.9016362174902248,0.9098084377,0.8766135935627462,,,0.8766135935627462,0.1497290027189099,0.9329441224077584,10.498270137,0.9196283911889414,,,0.9196283911889414,0.5213510451938572,0.2492010569566841,39.3676601307,0.2346340790789065,,,0.2346340790789065,0.2826912370192468,0.941127799514774,3015.87969265,0.9280004126050854,,,0.9280004126050854,0.0964083008791804,0.8815556546533155,1.81382525188,0.8555140890882322,,,0.8555140890882322,0.1062519253676046,0.7527465845056148,3.24085850684,0.6879172801040846,,,0.6879172801040846,0.0074660410167418,0.8655558708666099,0.214095348703,0.8377272571643783,,,0.8377272571643783,0.027487565893985,0.8882148073250197,0.365101735929,0.8688263024295902,,,0.8688263024295902,3.255416928678718e-06,0.8313806570181485,0.628839590444,0.7904954291779368,,,0.7904954291779368,0.628839590444,0.5164051837137336,0.0582371458552,0.4798079227582429,,,0.4798079227582429,0.1498830619032175,0.6618964608586371,0.178908709339,0.715890026363543,,,0.715890026363543,0.178908709339,0.5796575164471435,0.0245098039215686,0.5161060212798873,,,0.5161060212798873,0.0245098039215686,0.5008648531776597,0.0165289256198,0.424872462081008,,,0.424872462081008,0.0165289256198,0.6964500479723247,0.425498426023,0.6838429143698428,,,0.6838429143698428,0.425498426023,0.751664847161572,0.1742543171114599,0.7508831498439483,,,0.7508831498439483,0.1742543171114599,0.9067171316918536,0.1150121065375302,0.9060831344539256,,,0.9060831344539256,0.1150121065375302,0.0519655139795408,67800.0,0.0554747149655904,,,0.0554747149655904,0.0290456994515583,0.6434691260334525,0.0771549125979505,0.5807502400219449,,,0.5807502400219449,0.0771549125979505,0.9166162227602904,0.0008951111,0.9302158396521918,,,0.9302158396521918,0.0353246959378835,0.5755532434271079,0.0067284885,0.5614035087719298,,,0.5614035087719298,0.0122511928214689,0.558933421571466,2.3791e-06,0.6145407246401615,,,0.6145407246401615,0.0011202645354936,,,,,,,,,,,,,,,,,,,,,,0.6917513228236646,0.0804953560371517,0.6841770738494838,,,0.6841770738494838,0.0804953560371517,0.8737301229199994,0.2950894905920146,0.8632982287353754,,,0.8632982287353754,0.2950894905920146,,,,,,,,0.7501654807214959,61.666668,0.7551581487546324,,,0.7551581487546324,0.435294116816609,0.8647617479139218,0.087159691,0.8519741908983552,,,0.8519741908983552,0.087159691,0.6268497920495212,0.34900002,0.5359536815260283,,,0.5359536815260283,0.3624091475885,0.9537899773356836,93.77919,0.9454938966323262,,,0.9454938966323262,0.8355751594025679,0.6278134628440127,0.8102169783752192,,,0.8102169783752192,0.959938777375042,71.0,0.9533526317781056,,,0.9533526317781056,,,,,,,1906.0,0.7240574475669483,0.523497018864787,0.6395630962236926,0.5859863870065047,0.8438907148737418,0.8318309921361502,0.8358508997153473,0.6127747416150986,0.5121883191018196,0.1843255189540058,0.6553216288775894,False,True,True,True,True,1,1,True,1,True,1,1,True,True,9,True,False,False,True,True,True,True,True,True,True,True,False,False,False,False,False,False,False,False,False,True,False,True,True,True,False,False,False,True,0.0804953560371517,False,0.2950894905920146,False,False,False,False,False,True,True,True,1,0.7460439723787516,False,True,True,True,0.7500818777292576,True,True,True,True,0.9394564656693726,True,True,True,True,0.6605181011067418,False,False,True,True,0.7347062877528682,False,True,True,True diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/downloadable_data_expected.pkl b/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/downloadable_data_expected.pkl index 1aa07d41fbe2b5f75f28d4390230baa219bc5dcf..1250013a804d6917b9d8adf451666e12178ddb26 100644 GIT binary patch literal 7803 zcmcIp3v?9K8BT!k1_KI#@ERn*Moic|zytz!^Cqt)FXh-HU1xXiW(HErqJ# zaa^jxAS$#4D)j;MsKtsNtO^Q*q88CZ8?`}9E9QZsXtn3m_P?`tlg(sX= z|M&m*zyJO3z3Yc;_f3y8p1?RCE4o=F-6hF5-6OMJtOrIEu_{|){NARg{#;+HTLMEI z-Ue9@Ob@Tliz=2yR#4KttjIQCS!g&Ui?Ru2pj-Mm+?7^K)$-5I!^cH$6tr;^UfGV6!7 zQymVUe~m*EeY|V6fF1Utd{R=tx>jR1k)0eaJJ>2+QDt6iaOi>GgrmlP^1QvE&*WrlGA!xUALL4Q3k)aO?@Nz@f*V1lT5eg2?by_x`86AEA;hm2j4 z2+}l{O1LB#6~Q(z4n~!2dPQ8bUKsDxiBL;Le8r$n&MUYet6E3VMa!vf&LwowXpq85r)=c%UbO-4Yam zcM-iR;y`LV5wL;iJ&GIKI|AHzYJ4t*n@gB-sXaU^25r!}3`2HeIrezKB_xq4lr&NG z>s)zYSiZnISud+|6@&nn2Vw?agP>$XPmah^y+#LT2tkcUxe6h?#z z2VWUd@nA(s%ubmV@)b|mxJ4vVV1-c=)~!8t^y_oz!O~|s^e_H~PFL^S5uetMo_Q>1 zQGNcW=*Bo_O^QcD`~PtHeEkD=qlAl=vj?2#QPYS+doQiJfZE@D|BbYbi_in#Rw_s8 zs}P&{UE7H%pQ00cn(ptc??zMnkJi;UpIDlC=Kirae06N;<%e>WA3ymq((ElOPG0y3 zm5&}YZ{x(LP*=_2>CK(bqEo-#JL&m@ohW6t-1T&0&5*>-Nv!Pai{@Yuxt$L?xJFWvp@_BqqKQS#;af5gH?#4NuvGrP45&2Aqw z{V%UbwgT3%by}hd+2|aQo-z+{usjpIvzly}a;uM>6i~MlVcwO3N3zkjHrD z*s_dgj_qL1Z97vIcOuKuH#R>0UI%*fG(44AwqU)5wwrUeZfb15gf_qS_-!+HeHJV~ zJ(ae<(NU2xO zJ7`nK(KqzgkI{+_>z9k)>O@ag?vbXlPD%roI-ILMVj%%G4y>V z#aR?nD9)xhhoXgID#dveZ>E?|aX!TiikTF%DK4OR3&k9YizqIpxP;wjh9bJElT=|+ct*sFZoCF7=}uOGq-Lapq+(^{8>9x@!-0g* zZzC~uL$av%Uo30E1A>{rn9}0qWknfQM}2L6VLjv_!F+(R8_DL#I+ay1eMv6D9$w^C z9MPX#3oyE=uKP_YLVr93&)bh$|#xNr^FZ&_QO;qahL3x>BouDG4a+t}r zsvOhHmhnI-?oStov4tH0!}m38P7g(rExI954y%84?TW9psY$b%m^6z(GlE)+dbss^ zRn&@=UVCGcYIQNG7LjTM<;E0?SZ?q$PEB@Wm@LVC-c1w=qoNSrArnDlay8lC!2}>q z?`2ikA2OEes?78S;O27&E;NxTiiV8QEpcT@(PSKn&Ez5o92g=-KT>*N&VXemF3Y3g z;vPs)BwADJW!B^2U5rnb*6>~)0ueD~qa08ggnxai$4AX_=%cWLgKk zrAH2o+w6ggdMX8@U{s^V^%WDrhpeG+?2~a?M(#qZ!h{-G1kAc&IN{*I2=6WyHr~K+ zNvusw%-2L?#xU80HHocW?B-d~pof`8R?x5!H!*~Lm4gCv?2V*tRj`j>YfDNhS-PYq zm}qH|%cc2vSX4sllcf-L=}Tg5V$wFLy2tNSiK(wEDq$2}#n5xg041glRz_p4UgriO zoU!b|&@)Y}0-?dfx_H4@*CS1kiG66;t1CnNW<@SA(W{M_o}$453CC3KprA;cGW&=& zmha#pmzSg))dGyRrM9X%HB2>aqIj>NYWnws>!+BYT^-2(WST|%&3gl4W^Glax5Bk~77e z7;2kX=S9OhM52G%Grx#u8$?L~LNL>v7-q@$aLtRcg^BOdX!!P0>CZT;P?9B)mHi9{ z##6~CW60vahqdh*TA7$fl|Yy{^{1ay$$K!(Pg&9BXDo&fK#XT9Ara z`T-J&1vpTRSZ7%sgWVdet;QB>I&6{}G+u$U4i+~lxbx~^2v&DQL$Ak-3fK|sAEC>u zP`FjZUY{WOVH&z%Pba{ltAtaScl8QARfBoTysK+usy*!>fQAeY-Rt`3URS`4kO~iMjHCu7B!NiG@k6`5xtP`EJY>5g*lYt)a7HG5!F*uTe} zz=Pp9A(yf63atCE>4y-Yq#Cx(ggX|-qL3pEh!ap&T?U(3B23L6=)(i@*cuHFGI9P70dyczt!co+Bqo5G_1AMTD-h8s4o}->D1cQQn=qbSv8_)5$Br|CPjSrJ>61mrB!tWS{DA1-IJo1&Fz&)F z9Bpfr8{vIh9{q9|v!6mtSan4}rm@@QtuWwff^8nRysi$e+wHcpu2+7{1c4e^(yEGVc>d7e8!%`5tPoUKok?ybakf?38+a4@$Xd zJ@)*=IXhtol(MuQkH;_V&{pacj^1Z}paOB6b2m-e_)-s<3jd5y8gkqbW+l_j^f0TK zBJ(J-npwlFWlGFCW<9fk*|=wd^Rk5|<}s$sY-X08nvOA>`|?o_uDva+-Y1k+1?@f|2tqe{3L&8lwZWv&?UhE7hDq=c4kV3iwxDa4M)K`; z@q7%t@;SI(KMXJH`mY8fCQ)&Wq%>8>7j+s-aA3qzErJabXNhGRIU}Q4s!sQwJ#;Y0 zjdN%a#=V0u=DmVCVO;8jF)0G~Yc*JvreUT^nF(Hq#v(YOA3hida>Ps$-O@6IX6=sZ#Jo9;CkkeY=yuV|=CI?IPy?J28=ylB z!d6W$EQopd>50OaXDBL;8WznVXXFYQ)zS>QQ~rPH;7Nr3vqh(_W{Djy%+jKyZFnws Up%?H`ZbLe)V-UTErsf;}035CeZvX%Q diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/score_data_expected.pkl b/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/score_data_expected.pkl index 30ce72173bd800ea4e2bdcd7b6dd23e62353363a..349152bba82bb9009774c3e31e34d07e0d19d70d 100644 GIT binary patch delta 411 zcmXZWy)Q#y6bA5n&imdX5=kc`^%2~uB|%~^FfiOnq=|))Sei7ENQ}Bj3?`>y;`XM4 z*vR`2m`%hYgqXBGs#+iQS#H|rEWh(SIm0Ie`u#!R#cB1@r2gw+Ooql zvZ%s3#BM_nI%QXdXrp3{dL0;AlwHr?-X!Vw?+T>s!KEOvShN6S!A~ez$xyMZrzQRvfm8ICQNk*CIE?5)V zX17UhV)N8!#`?=isdybG?$0vKNy+PyQ@>lTw_8`3jRKkT1uq#i+2^lR2AF@fjln z7(9p4FQD{mDE(&gSr&254^ZC6$!~$YuTb8%$-J!MoWG#F-;;G&#ijm3c??Vta~YvD z6Vv2}dS;tjSgkb`UqRKphtgl5^iL@LZ}LNZi^&rDCm3G>S?5`pnS5C$Z!t(>WZ5ik z_$hC4`vSSm>I;&Y7!xKpF7TYZX_`3ml%7@~TV?XL`Cd@|BrsonK{$xNxnt2`X2#u< IeU{Y&07j}#sQ>@~ delta 309 zcmaEPf$8*FCe{X)sRx#AWDQ|rbetT;q{Y}Yxs@q&@&hJkAYX-9i;-iqKXW!?{R>70 zFn9^2UqR{DQ2H&Deg~!BL+KAt`V*A?45hz7>90`wJCyzbrGG-{Ul3Y~;SW^cFO>cV zrTV0;E-oo8WS@@1TS$smc5akHu6 sr##lA)SUeC$p&*IC+}DszIo099wtWl$puRkH+wCa&&;@E@~h?b0EtaTA^-pY diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/tile_data_expected.pkl b/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/tile_data_expected.pkl index 23802eeef04fb7751625cccf3aef8780e78e9cdd..1b206828da3fc7a70f8e8a48eb3a07ff335b2c61 100644 GIT binary patch literal 3000 zcmb7`O>7%Q6o4H&j`P!&{?gEv{?Ss0ALFFIK*QkQ*zwvdvC{~t)oN{TvR3W2*gE;7}Eb6C6<_1QMl{C{5a)fFrz_edD;TFI`Li-psr= z^WK};op+}D@;3t>{y1wIs!>+0P^oTep=ndCY1HY9tG1ft@+CU-5j{a2)X>!ssaw@ojBW#4quDB1OT6-EOM)wC;W6$YFwou?`? zdr<8&v=a(%fbtxjph11r&}r&)8|6xkX1rF;rbTBRPNGyRMJuG5raB9@TNI@+ds1l{ zjY{cwRa0{D2pfs2rQ=$et-YyzZPzMf*=EIN_7KPYnE*0i=Qh( zZeSm{$|aid%+Xj^k+MaDnXZg?j_SJ|e;HSGyzd;M=g+yLKBwzLn#<+J|AUABWe8;E z{4q%VKzKNOaBny~JRA-~T%xrPS{mq_h6RdFZ?Rbc_YBCJ->OzhEUt_PR_$U7oMmwj z=&P1@Kwpc=*LUfAn5X)X@N;LzdzR`U$6Fj;_D>&q)H@IJE*6L5*M&cJ5}7RM_VXtG zu`!|1CQ+EGgBRcu_)vKyM~5HF5%(gx8YbR?YdnwKirj|Wj@*IViF^UM3;7~)4>E`x zLcWB28TktGRb&YH8ZwL=Mvfr&BKINpBM%@CA`c;7N4|l46FG`}3rUbHsZX`*gJRdG z+cK^n>9Fh3Gm!88g{zIx{)goH*sW9RuRkPv`Ljq^YwXrNa`eK@zk^5rB=3(h&HH3x ze(T)gyLZV?KeA_uK!f!VF^@a`JK<&*{viJZ*$j7E_OAYIvc%19;XHT9_pr)^n?JYa z;mgcFAlJaVg{wDO^Kmyu@3s6J;tqaCKL3n8U*kOYTl`A?GCJ4)Et%i^Y4G3d4}^!i za2vTuT>CpD#RL8e{rMHwyNBCwx1}%QcI}qXk6&7PZk~Q4EPJQcKOk-#SI9OV`2AKM zKHv&Vr1MKN2rtd#`PdB~o`P&o^fcVtbz^(1-Zbo4s(-?62K_L6|9#6h zfKAzTGT44=R*bTCQnNxu)q;z!Ut!mEn)Si;p>@Nm?J@KR>C-WdgPza<%S0J7jeTgVay@`l4;ac=2qRXNz#6YU0DoF`pFQr>j zHjU=l)Di6Lld~iHQSMIV6W~{`3|A>C$|FJyNV1qGCrj>dU?MA{Vj(YF_Z4IoTmiLv zCWSDCf?ram3KO6L%p_xQB}+<7DsU!p?{O9;a-6CB7^f^j8w^rXAqDkO9xR{@a1)q- z97t*CVJUJ2NDvoTd`#$ulmYy4Im?>`nE|4LT=0&RI}Rc7W4ODimjNj&dM2?aDNB$}*l=$Fybq)!Vj!JIqrP-Rn6V=Yg&-?db4`9% zec^2GbU2~3(#%Q;&S%=N5A16@llrwMk0UFy9xEI=e+b0K3u_jShrj5Ht}hyM2s>{wf@UT&T7U1v6B%J<4=do#Em}wOXy8u#|GM0hO3)YYM!p8dT2b ItY$IvKRHjurvLx| literal 3267 zcmb7HO>7fK6t?q2NCK3fQ2x_FD#a11WryENNta-UKL-;+XfL4Ecz5hwWp{QvyGvqP zr1lUB(n=gydPJ4Vx#t`!daBeOQKhPtN((LJ_e8Jlo7q{%Hs+8$`0ebxdGC8~-k(43 zxxKU|C7y7Di>Z#itmZJ1tukzrDC{p{A0HR*x1y0RqN`CR>{0C+i^Ab%c9Z&qQEYix z8&g~(%!|S`$1F#iI}@*?TX3?!8c@x591C{)T+DnETd)!C>@2Fn&jV{eCG)CS0P|ur z6J?BbBUhuahw7#smAbsLA63FlQiy7q6)%e!!*w{jQ&rvif*MfQ)aERrmWva7=NQ)J zh|YCyZ`K{3%6dLCX-$p7!Smux90BIjOBXM!Eq@6Jj4jDt(XYD%_Jni7KF@a;*dK+f z+`4Z#H1aCpW*XRTJ@%^|SYS1W01i?a(Hsie0?p@GdIcl+2JS(y+=@!6#i)?3L|kd6 zlrD8GM#i47SC?ADuCqs?8`tCA?lApXR4$iK{|ArwDJkHY8<)WKgSmX}@cvvbpU>sM zu4HupRs?vif`Ur8x)PWGkAmNNJ+g;xZQ)sy5$=%HcICk?;3kKQez~+ z*;DGe78%*FtCC;FXNbn~x$@JG{CTK+57KVlyRUF* z;{z`h&%^{5#gAJO6<3Pl+F<_1QBrIM&auod5fzg zm4z#{R<74c`j({YCEXzDMoBkGIwa|4N#B-qi=nT&0SHt{4>E>p?6vn#t}S8nZ=?ER7sO1febx)Kwb>ri{1H>yzIgoP{E z#*uM5Tz{HWtI#MMiV99Z{d#14#Y>Sf1_h^kx#ai}uU}i6%d|;#vOv6S1$$6w2UOl4 zPVsM0uZ%lkZ}Kj>l@1*&dcCX+gD3K$G_E}{dG=H>pHpXNCJM74@4SzFg36)+4#wEz zYW=L^V+*;C8(7#kp}dDf=Xt+GMU-&~(+KrVi;P6!uEuBIana~O-#{(<^4MhOWAM52 zvCXmA6DXrOwjEH@H;D)8`s8=$XGKyq`FHT^R6E{lxE=GdsRu9(AZUePJaQP~!qL15ey|$i4YOt- zPcvX5Ksu>0LfT~Rn}R+Zn4WKH$n>1p=MA2A1p6*fV!M`8Cpyvqf@Nary^(v*Nhk0? zJgNjtC-jYcV?`6!sN;c9-NY5*6EMqm;2_qanF||r^x=5^2&xmzmKDZm@9PBb@ z!L&_?0GI>OWycEa_WL+|eDcf$nlZgOBytQ*3aQ|l2}ktD?Qr9XO`XjAjqEi!5>H+61D43M|BMEFBO)YQiN!U?eHe zQwTGH6K2WMs#i%21m@-x8jG{=xJ;&5d>!uSR5oGCB+S&H z(w(CIp#x3T(zyG2q2v>1+x*qJMJ4UFwFUhUV<8+6{B?l26$W}iu5HI rJK;v)zXJ^StJJE6YvOeawk&7fQ}w`wp%gAog)TziPsDXEsAT^KX-uI$ diff --git a/data/data-pipeline/data_pipeline/etl/sources/census/etl.py b/data/data-pipeline/data_pipeline/etl/sources/census/etl.py index 83baf445..5f1398b6 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/census/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/census/etl.py @@ -136,7 +136,7 @@ class CensusETL(ExtractTransformLoad): def transform(self) -> None: """Download all census shape files from the Census FTP and extract the geojson - to generate national and by state Census Block Group CSVs and GeoJSONs + to generate national and by state Census tract CSVs and GeoJSONs Returns: None @@ -225,7 +225,7 @@ class CensusETL(ExtractTransformLoad): logger.info("Writing national geojson file") usa_df.to_file(self.NATIONAL_TRACT_JSON_PATH, driver="GeoJSON") - logger.info("Census block groups downloading complete") + logger.info("Census tract downloading complete") def load(self) -> None: """Create state CSVs, National CSV, and National GeoJSON diff --git a/data/data-pipeline/data_pipeline/score/field_names.py b/data/data-pipeline/data_pipeline/score/field_names.py index 76d11038..be0353cd 100644 --- a/data/data-pipeline/data_pipeline/score/field_names.py +++ b/data/data-pipeline/data_pipeline/score/field_names.py @@ -291,14 +291,27 @@ POVERTY_LOW_HS_EDUCATION_FIELD = ( " and has low HS education" ) -LOW_READING_LOW_HS_EDUCATION_FIELD = ( - f"At or above the {PERCENTILE}th percentile for low 3rd grade reading proficiency" - " and has low HS education" +LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD = ( + f"At or above the {PERCENTILE}th percentile for low median household income as a " + f"percent of area median income and has low HS education" ) -LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD = ( - f"At or below the {PERCENTILE}th percentile for low median household income as a " - f"percent of area median income and has low HS education" +# Workforce for island areas +ISLAND_AREAS_SUFFIX = " in 2009 (island areas)" +ISLAND_AREAS_UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD = ( + f"At or above the {PERCENTILE}th percentile for unemployment" + f" and has low HS education{ISLAND_AREAS_SUFFIX}" +) + +ISLAND_AREAS_POVERTY_LOW_HS_EDUCATION_FIELD = ( + f"At or above the {PERCENTILE}th percentile for households at or below 100% federal poverty level" + f" and has low HS education{ISLAND_AREAS_SUFFIX}" +) + +ISLAND_AREAS_LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD = ( + f"At or above the {PERCENTILE}th percentile for low median household income as a " + f"percent of area median income" + f" and has low HS education{ISLAND_AREAS_SUFFIX}" ) # Not currently used in a factor @@ -317,6 +330,10 @@ HEALTHY_FOOD_LOW_INCOME_FIELD = ( f"At or above the {PERCENTILE}th percentile for low " f"access to healthy food and is low income" ) +LOW_READING_LOW_HS_EDUCATION_FIELD = ( + f"At or above the {PERCENTILE}th percentile for low 3rd grade reading proficiency" + " and has low HS education" +) THRESHOLD_COUNT = "Total threshold criteria exceeded" diff --git a/data/data-pipeline/data_pipeline/score/score_l.py b/data/data-pipeline/data_pipeline/score/score_l.py index d11267bf..d3607d54 100644 --- a/data/data-pipeline/data_pipeline/score/score_l.py +++ b/data/data-pipeline/data_pipeline/score/score_l.py @@ -117,7 +117,7 @@ class ScoreL(Score): """ self.df[field_names.THRESHOLD_COUNT] += self.df[columns_for_subset].sum( - axis=1 + axis=1, skipna=True ) def add_columns(self) -> pd.DataFrame: @@ -162,7 +162,7 @@ class ScoreL(Score): non_workforce_factors ].any(axis=1) - self.df["Definition L (percentile)"] = self.df[ + self.df[field_names.SCORE_L + field_names.PERCENTILE_FIELD_SUFFIX] = self.df[ field_names.SCORE_L_COMMUNITIES ].astype(int) @@ -586,12 +586,16 @@ class ScoreL(Score): ) # Now, calculate workforce criteria for island territories. + island_areas_workforce_eligibility_columns = [ + field_names.ISLAND_AREAS_UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD, + field_names.ISLAND_AREAS_POVERTY_LOW_HS_EDUCATION_FIELD, + field_names.ISLAND_AREAS_LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD, + ] - # F a couple of values, create a combined field and criteria field. # First, combine unemployment. ( self.df, - unemployment_island_areas_criteria_field_name, + island_areas_unemployment_criteria_field_name, ) = self._combine_island_areas_with_states_and_set_thresholds( df=self.df, column_from_island_areas=field_names.CENSUS_DECENNIAL_UNEMPLOYMENT_FIELD_2009, @@ -603,7 +607,7 @@ class ScoreL(Score): # Next, combine poverty. ( self.df, - poverty_island_areas_criteria_field_name, + island_areas_poverty_criteria_field_name, ) = self._combine_island_areas_with_states_and_set_thresholds( df=self.df, column_from_island_areas=field_names.CENSUS_DECENNIAL_POVERTY_LESS_THAN_100_FPL_FIELD_2009, @@ -614,12 +618,12 @@ class ScoreL(Score): # Also check whether low area median income is 90th percentile or higher # within the islands. - low_median_income_as_a_percent_of_ami_island_areas_criteria_field_name = ( + island_areas_low_median_income_as_a_percent_of_ami_criteria_field_name = ( f"{field_names.LOW_CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009} exceeds " f"{field_names.PERCENTILE}th percentile" ) self.df[ - low_median_income_as_a_percent_of_ami_island_areas_criteria_field_name + island_areas_low_median_income_as_a_percent_of_ami_criteria_field_name ] = ( self.df[ field_names.LOW_CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009 @@ -628,17 +632,40 @@ class ScoreL(Score): >= self.ENVIRONMENTAL_BURDEN_THRESHOLD ) - workforce_combined_criteria_for_island_areas = ( - self.df[unemployment_island_areas_criteria_field_name] - | self.df[poverty_island_areas_criteria_field_name] - | self.df[ - low_median_income_as_a_percent_of_ami_island_areas_criteria_field_name - ] - ) & ( + island_areas_high_scool_achievement_rate_threshold = ( self.df[field_names.CENSUS_DECENNIAL_HIGH_SCHOOL_ED_FIELD_2009] >= self.LACK_OF_HIGH_SCHOOL_MINIMUM_THRESHOLD ) + self.df[ + field_names.ISLAND_AREAS_UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD + ] = ( + self.df[island_areas_unemployment_criteria_field_name] + & island_areas_high_scool_achievement_rate_threshold + ) + + self.df[field_names.ISLAND_AREAS_POVERTY_LOW_HS_EDUCATION_FIELD] = ( + self.df[island_areas_poverty_criteria_field_name] + & island_areas_high_scool_achievement_rate_threshold + ) + + self.df[ + field_names.ISLAND_AREAS_LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD + ] = ( + self.df[ + island_areas_low_median_income_as_a_percent_of_ami_criteria_field_name + ] + & island_areas_high_scool_achievement_rate_threshold + ) + + workforce_combined_criteria_for_island_areas = self.df[ + island_areas_workforce_eligibility_columns + ].any(axis="columns") + + self._increment_total_eligibility_exceeded( + island_areas_workforce_eligibility_columns + ) + percent_of_island_tracts_highlighted = ( 100 * workforce_combined_criteria_for_island_areas.sum() diff --git a/data/data-pipeline/pytest.ini b/data/data-pipeline/pytest.ini new file mode 100644 index 00000000..7022c5f7 --- /dev/null +++ b/data/data-pipeline/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +norecursedirs = .git data From 8a0e3a1293a9ce026d2768bb416a9f523ad4fc64 Mon Sep 17 00:00:00 2001 From: Vim <86254807+vim-usds@users.noreply.github.com> Date: Mon, 13 Dec 2021 15:52:27 -0500 Subject: [PATCH 08/12] Updated side panel for score L launch (#1022) * Remove un-needed state and useEffect vars * Add initial Accordion UI to side panel - abstract out Indicators to separate component - add snapshot test - define new indicators in EXPLORE copy - intl copy to AreaDetail component * Make side panel indicators styling match design * Rename export IndicatorCategory -> CategoryCard * Add disadvangted dots to category and indicators - add new Category component - add new DisadvantageDot component - make copy corrections - comment out send feedback link in side panel * Integrate MapLegend's dot into component - change color to 'blue-warm-70v' - update map stroke to 'blue-warm-70v' * Add new indicator names from BE - add abbreviations and use key in json file to decode --- .../AreaDetail/areaDetail.module.scss | 88 +- .../AreaDetail/areaDetail.module.scss.d.ts | 10 +- client/src/components/AreaDetail/index.tsx | 494 ++++---- .../__snapshots__/areaDetail.test.tsx.snap | 1079 ++++++++++++----- .../AreaDetail/tests/areaDetail.test.tsx | 8 +- .../src/components/Categories/Categories.tsx | 4 +- .../components/Category/Category.module.scss | 6 + .../Category/Category.module.scss.d.ts | 13 + .../src/components/Category/Category.test.tsx | 28 + client/src/components/Category/Category.tsx | 22 + .../__snapshots__/Category.test.tsx.snap | 14 + client/src/components/Category/index.tsx | 3 + .../components/CategoryCard/CategoryCard.tsx | 4 +- .../DisadvantageDot.module.scss | 19 + .../DisadvantageDot.module.scss.d.ts | 14 + .../DisadvantageDot/DisadvantageDot.test.tsx | 16 + .../DisadvantageDot/DisadvantageDot.tsx | 23 + .../DisadvantageDot.test.tsx.snap | 7 + .../src/components/DisadvantageDot/index.tsx | 3 + .../Indicator/Indicator.module.scss | 59 + .../Indicator/Indicator.module.scss.d.ts | 19 + .../components/Indicator/Indicator.test.tsx | 30 + client/src/components/Indicator/Indicator.tsx | 55 + .../__snapshots__/Indicator.test.tsx.snap | 26 + client/src/components/Indicator/index.tsx | 3 + client/src/components/MapLegend/index.tsx | 5 +- .../MapLegend/mapLegend.module.scss | 23 +- .../MapLegend/mapLegend.module.scss.d.ts | 2 +- client/src/data/constants.tsx | 93 +- client/src/data/copy/explore.tsx | 426 ++++--- client/src/styles/global.scss | 9 - 31 files changed, 1780 insertions(+), 825 deletions(-) create mode 100644 client/src/components/Category/Category.module.scss create mode 100644 client/src/components/Category/Category.module.scss.d.ts create mode 100644 client/src/components/Category/Category.test.tsx create mode 100644 client/src/components/Category/Category.tsx create mode 100644 client/src/components/Category/__snapshots__/Category.test.tsx.snap create mode 100644 client/src/components/Category/index.tsx create mode 100644 client/src/components/DisadvantageDot/DisadvantageDot.module.scss create mode 100644 client/src/components/DisadvantageDot/DisadvantageDot.module.scss.d.ts create mode 100644 client/src/components/DisadvantageDot/DisadvantageDot.test.tsx create mode 100644 client/src/components/DisadvantageDot/DisadvantageDot.tsx create mode 100644 client/src/components/DisadvantageDot/__snapshots__/DisadvantageDot.test.tsx.snap create mode 100644 client/src/components/DisadvantageDot/index.tsx create mode 100644 client/src/components/Indicator/Indicator.module.scss create mode 100644 client/src/components/Indicator/Indicator.module.scss.d.ts create mode 100644 client/src/components/Indicator/Indicator.test.tsx create mode 100644 client/src/components/Indicator/Indicator.tsx create mode 100644 client/src/components/Indicator/__snapshots__/Indicator.test.tsx.snap create mode 100644 client/src/components/Indicator/index.tsx diff --git a/client/src/components/AreaDetail/areaDetail.module.scss b/client/src/components/AreaDetail/areaDetail.module.scss index 072c5d04..9e040590 100644 --- a/client/src/components/AreaDetail/areaDetail.module.scss +++ b/client/src/components/AreaDetail/areaDetail.module.scss @@ -1,30 +1,19 @@ +@use '../../styles/design-system.scss' as *; @import "../utils.scss"; $sidePanelLabelFontColor: #171716; @mixin sidePanelLabelStyle { - font-size: small; + font-size: medium; color: $sidePanelLabelFontColor; font-weight: 600; } -@mixin categorizationCircleStyle { - height: 0.6rem; - width: 0.6rem; - border-radius: 100%; - align-self: center; - margin-top: 2rem; - margin-right: 0.5rem; - opacity: 0.6; -} - -@mixin indicatorBox { - display: flex; - flex-direction: column; - padding: 0 1rem 1.5rem; - &:last-child { - border-bottom: none; - } +.versionInfo { + padding: .5rem 1rem .5rem 1.2rem; + font-size: medium; + font-weight: bold; + border-bottom: 1px solid $sidePanelBorderColor; } .areaDetailContainer { @@ -39,14 +28,25 @@ $sidePanelLabelFontColor: #171716; align-items: center; padding-bottom: 2rem; + .isInFocus { + padding: .5rem 1rem .25rem 1.2rem; + font-size: small; + font-weight: bold; + @include u-margin-top(2); + } + .communityOfFocus { display: flex; - .communityOfFocusCircle { - @include categorizationCircleStyle; - background: #1a4480; + h3 { + margin-top: 0; + margin-bottom: 0; } + } + .feedbackLink { + font-size: small; + @include u-margin-top(1); } } @@ -64,12 +64,10 @@ $sidePanelLabelFontColor: #171716; } .censusText { - font-size: small; + font-size: medium; } } - - //Divider styles .divider { @include sidePanelLabelStyle; @@ -79,45 +77,3 @@ $sidePanelLabelFontColor: #171716; border-top: 1px solid $sidePanelBorderColor; border-bottom: 1px solid $sidePanelBorderColor; } - -//Indicator box styles -.indicatorBoxMain { - @include indicatorBox; - border-bottom: $sidePanelBorder; -} - -.indicatorBoxAdditional { - @include indicatorBox; - border-bottom: 1px solid #1b1b1b; - background-color: $additionalCardsBGColor; -} - -.indicatorRow { - display: flex; - - @media screen and (max-width: $mobileBreakpoint) { - flex: 1 0 40%; - align-self: inherit; - padding-left: 3rem; - padding-top: 1rem; - } - - .indicatorName { - flex: 0 1 77%; - } - - .indicatorValue { - margin-top: 1.2rem; - margin-left: 2.2rem; - - .indicatorSuperscript { - top: -0.2em - } - - } - - .indicatorDesc { - max-width: 10rem; - } -} - diff --git a/client/src/components/AreaDetail/areaDetail.module.scss.d.ts b/client/src/components/AreaDetail/areaDetail.module.scss.d.ts index e72896cf..db8bddfb 100644 --- a/client/src/components/AreaDetail/areaDetail.module.scss.d.ts +++ b/client/src/components/AreaDetail/areaDetail.module.scss.d.ts @@ -8,13 +8,9 @@ declare namespace MapModuleScssNamespace { censusLabel:string; censusText: string; divider:string; - indicatorBoxMain:string; - indicatorBoxAdditional:string; - indicatorRow:string; - indicatorName:string; - indicatorValue:string; - indicatorSuperscript:string; - indicatorDesc:string; + feedbackLink:string; + isInFocus:string; + versionInfo: string; } } diff --git a/client/src/components/AreaDetail/index.tsx b/client/src/components/AreaDetail/index.tsx index 16bbbb04..25ed4b15 100644 --- a/client/src/components/AreaDetail/index.tsx +++ b/client/src/components/AreaDetail/index.tsx @@ -1,46 +1,32 @@ /* eslint-disable quotes */ // External Libs: -import React, {useEffect} from 'react'; +import React from 'react'; import {useIntl} from 'gatsby-plugin-intl'; +import {Accordion} from '@trussworks/react-uswds'; // Components: -// import {Accordion} from '@trussworks/react-uswds'; +import Category from '../Category'; +import DisadvantageDot from '../DisadvantageDot'; +import Indicator from '../Indicator'; // Styles and constants import * as styles from './areaDetail.module.scss'; import * as constants from '../../data/constants'; import * as EXPLORE_COPY from '../../data/copy/explore'; -import * as METHODOLOGY_COPY from '../../data/copy/methodology'; - -export const readablePercentile = (percentile: number | null) => { - return percentile ? Math.round(percentile * 100) : 'N/A'; -}; - -// Todo: Add internationalization to superscript ticket #582 -const getSuperscriptOrdinal = (percentile: number | string) => { - if (typeof percentile === "number") { - const englishOrdinalRules = new Intl.PluralRules('en', { - type: 'ordinal', - }); - const suffixes = { - zero: 'th', - one: 'st', - two: 'nd', - few: 'rd', - many: 'th', - other: 'th', - }; - return suffixes[englishOrdinalRules.select(percentile)]; - } -}; interface IAreaDetailProps { properties: constants.J40Properties, } +export interface indicatorInfo { + label: string, + description: string, + value: number, + isDisadvagtaged: boolean, +} + const AreaDetail = ({properties}:IAreaDetailProps) => { const intl = useIntl(); - const [isCommunityFocus, setIsCommunityFocus] = React.useState(true); console.log("Area Detail properies: ", properties); @@ -50,122 +36,298 @@ const AreaDetail = ({properties}:IAreaDetailProps) => { const countyName = properties[constants.COUNTY_NAME] ? properties[constants.COUNTY_NAME] : "N/A"; const stateName = properties[constants.STATE_NAME] ? properties[constants.STATE_NAME] : "N/A"; - useEffect(() => { - if (score >= constants.SCORE_BOUNDARY_PRIORITIZED ) { - setIsCommunityFocus(true); - } else { - setIsCommunityFocus(false); - } - }, [score]); + const isCommunityFocus = score >= constants.SCORE_BOUNDARY_PRIORITIZED; + // const sidePanelFeedbackHref = ` + // mailto:screeningtool.feedback@usds.gov?subject=Feedback on Census Tract: ${blockGroup} + // `; - interface indicatorInfo { - label: string, - description: string, - value: number, - } + // Define each indicator in the side panel with constants from copy file (for intl) + // Indicators are grouped by category + const expAgLoss:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.EXP_AG_LOSS), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.EXP_AG_LOSS), + value: properties[constants.EXP_AGRICULTURE_LOSS_PERCENTILE] ? + properties[constants.EXP_AGRICULTURE_LOSS_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_EXP_AGR_LOSS_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_EXP_AGR_LOSS_AND_IS_LOW_INCOME] : null, + }; + const expBldLoss:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.EXP_BLD_LOSS), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.EXP_BLD_LOSS), + value: properties[constants.EXP_BUILDING_LOSS_PERCENTILE] ? + properties[constants.EXP_BUILDING_LOSS_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_EXP_BLD_LOSS_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_EXP_BLD_LOSS_AND_IS_LOW_INCOME] : null, + }; + const expPopLoss:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.EXP_POP_LOSS), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.EXP_POP_LOSS), + value: properties[constants.EXP_POPULATION_LOSS_PERCENTILE] ? + properties[constants.EXP_POPULATION_LOSS_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_EXP_POP_LOSS_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_EXP_POP_LOSS_AND_IS_LOW_INCOME] : null, + }; + const lowInc:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.LOW_INCOME), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.LOW_INCOME), + value: properties[constants.POVERTY_BELOW_200_PERCENTILE] ? + properties[constants.POVERTY_BELOW_200_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_FEDERAL_POVERTY_LEVEL_200] ? + properties[constants.IS_FEDERAL_POVERTY_LEVEL_200] : null, + }; - // Todo: Ticket #367 will be replacing descriptions with YAML file - const areaMedianIncome:indicatorInfo = { - label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.AREA_MEDIAN_INCOME), - description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.AREA_MEDIAN_INCOME), - value: properties[constants.AREA_MEDIAN_INCOME_PERCENTILE] ? - properties[constants.AREA_MEDIAN_INCOME_PERCENTILE] : null, - }; - const eduInfo:indicatorInfo = { - label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.EDUCATION), - description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.EDUCATION), - value: properties[constants.EDUCATION_PROPERTY_PERCENTILE] ? - properties[constants.EDUCATION_PROPERTY_PERCENTILE] : null, - }; - const poverty:indicatorInfo = { - label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.POVERTY), - description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.POVERTY), - value: properties[constants.POVERTY_PROPERTY_PERCENTILE] ? - properties[constants.POVERTY_PROPERTY_PERCENTILE] : null, - }; - const asthma:indicatorInfo = { - label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.ASTHMA), - description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.ASTHMA), - value: properties[constants.ASTHMA_PERCENTILE] ? - properties[constants.ASTHMA_PERCENTILE] : null, - }; - const diabetes:indicatorInfo = { - label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.DIABETES), - description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.DIABETES), - value: properties[constants.DIABETES_PERCENTILE] ? - properties[constants.DIABETES_PERCENTILE] : null, - }; - const dieselPartMatter:indicatorInfo = { - label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.DIESEL_PARTICULATE_MATTER), - description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.DIESEL_PARTICULATE_MATTER), - value: properties[constants.DIESEL_MATTER_PERCENTILE] ? - properties[constants.DIESEL_MATTER_PERCENTILE] : null, - }; - const lifeExpect:indicatorInfo = { - label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.LIFE_EXPECT), - description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.LIFE_EXPECT), - value: properties[constants.LIFE_PERCENTILE] ? - properties[constants.LIFE_PERCENTILE] : null, - }; const energyBurden:indicatorInfo = { label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.ENERGY_BURDEN), description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.ENERGY_BURDEN), value: properties[constants.ENERGY_PERCENTILE] ? properties[constants.ENERGY_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_ENERGY_BURDEN_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_ENERGY_BURDEN_AND_IS_LOW_INCOME] : null, }; const pm25:indicatorInfo = { label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.PM_2_5), description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.PM_2_5), value: properties[constants.PM25_PERCENTILE] ? properties[constants.PM25_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_PM25_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_PM25_AND_IS_LOW_INCOME] : null, }; - const leadPaint:indicatorInfo = { - label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.LEAD_PAINT), - description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.LEAD_PAINT), - value: properties[constants.LEAD_PAINT_PERCENTILE] ? - properties[constants.LEAD_PAINT_PERCENTILE] : null, + + const dieselPartMatter:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.DIESEL_PARTICULATE_MATTER), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.DIESEL_PARTICULATE_MATTER), + value: properties[constants.DIESEL_MATTER_PERCENTILE] ? + properties[constants.DIESEL_MATTER_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_DIESEL_PM_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_DIESEL_PM_AND_IS_LOW_INCOME] : null, }; const trafficVolume:indicatorInfo = { label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.TRAFFIC_VOLUME), description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.TRAFFIC_VOLUME), value: properties[constants.TRAFFIC_PERCENTILE] ? properties[constants.TRAFFIC_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_TRAFFIC_PROX_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_TRAFFIC_PROX_AND_IS_LOW_INCOME] : null, }; + + const houseBurden:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.HOUSE_BURDEN), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.HOUSE_BURDEN), + value: properties[constants.HOUSING_BURDEN_PROPERTY_PERCENTILE] ? + properties[constants.HOUSING_BURDEN_PROPERTY_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_HOUSE_BURDEN_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_HOUSE_BURDEN_AND_IS_LOW_INCOME] : null, + }; + const leadPaint:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.LEAD_PAINT), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.LEAD_PAINT), + value: properties[constants.LEAD_PAINT_PERCENTILE] ? + properties[constants.LEAD_PAINT_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_LEAD_PAINT_AND_MEDIAN_HOME_VAL_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_LEAD_PAINT_AND_MEDIAN_HOME_VAL_AND_IS_LOW_INCOME] : null, + }; + // const medHomeVal:indicatorInfo = { + // label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.MED_HOME_VAL), + // description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.MED_HOME_VAL), + // value: properties[constants.MEDIAN_HOME_VALUE_PERCENTILE] ? + // properties[constants.MEDIAN_HOME_VALUE_PERCENTILE] : null, + // isDisadvagtaged: false, // TODO + // }; + + const proxHaz:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.PROX_HAZ), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.PROX_HAZ), + value: properties[constants.PROXIMITY_TSDF_SITES_PERCENTILE] ? + properties[constants.PROXIMITY_TSDF_SITES_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_HAZARD_WASTE_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_HAZARD_WASTE_AND_IS_LOW_INCOME] : null, + }; + const proxNPL:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.PROX_NPL), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.PROX_NPL), + value: properties[constants.PROXIMITY_NPL_SITES_PERCENTILE] ? + properties[constants.PROXIMITY_NPL_SITES_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_SUPERFUND_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_SUPERFUND_AND_IS_LOW_INCOME] : null, + }; + const proxRMP:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.PROX_RMP), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.PROX_RMP), + value: properties[constants.PROXIMITY_RMP_SITES_PERCENTILE] ? + properties[constants.PROXIMITY_RMP_SITES_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_RMP_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_RMP_AND_IS_LOW_INCOME] : null, + }; + const wasteWater:indicatorInfo = { label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.WASTE_WATER), description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.WASTE_WATER), value: properties[constants.WASTEWATER_PERCENTILE] ? properties[constants.WASTEWATER_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_WASTEWATER_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_WASTEWATER_AND_IS_LOW_INCOME] : null, }; - const femaRisk:indicatorInfo = { - label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.FEMA_RISK), - description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.FEMA_RISK), - value: properties[constants.FEMA_PERCENTILE] ? - properties[constants.FEMA_PERCENTILE] : null, + + const asthma:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.ASTHMA), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.ASTHMA), + value: properties[constants.ASTHMA_PERCENTILE] ? + properties[constants.ASTHMA_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_ASTHMA_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_ASTHMA_AND_IS_LOW_INCOME] : null, + }; + const diabetes:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.DIABETES), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.DIABETES), + value: properties[constants.DIABETES_PERCENTILE] ? + properties[constants.DIABETES_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_DIABETES_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_DIABETES_AND_IS_LOW_INCOME] : null, }; const heartDisease:indicatorInfo = { label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.HEART_DISEASE), description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.HEART_DISEASE), value: properties[constants.HEART_PERCENTILE] ? properties[constants.HEART_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_HEART_DISEASE_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_HEART_DISEASE_AND_IS_LOW_INCOME] : null, }; - const houseBurden:indicatorInfo = { - label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.HOUSE_BURDEN), - description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.HOUSE_BURDEN), - value: properties[constants.HOUSING_BURDEN_PROPERTY_PERCENTILE] ? - properties[constants.HOUSING_BURDEN_PROPERTY_PERCENTILE] : null, + const lifeExpect:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.LIFE_EXPECT), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.LOW_LIFE_EXPECT), + value: properties[constants.LIFE_PERCENTILE] ? + properties[constants.LIFE_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_LOW_LIFE_EXP_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_LOW_LIFE_EXP_AND_IS_LOW_INCOME] : null, }; + const lowMedInc:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.LOW_MED_INC), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.LOW_MED_INCOME), + value: properties[constants.LOW_MEDIAN_INCOME_PERCENTILE] ? + properties[constants.LOW_MEDIAN_INCOME_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_LOW_MEDIAN_INCOME_AND_LOW_HIGH_SCHOOL_EDU] ? + properties[constants.IS_GTE_90_LOW_MEDIAN_INCOME_AND_LOW_HIGH_SCHOOL_EDU] : null, + }; + const lingIso:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.LING_ISO), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.LING_ISO), + value: properties[constants.LINGUISTIC_ISOLATION_PROPERTY_PERCENTILE] ? + properties[constants.LINGUISTIC_ISOLATION_PROPERTY_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_LINGUISITIC_ISO_AND_IS_LOW_INCOME] ? + properties[constants.IS_GTE_90_LINGUISITIC_ISO_AND_IS_LOW_INCOME] : null, + }; + const unemploy:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.UNEMPLOY), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.UNEMPLOY), + value: properties[constants.UNEMPLOYMENT_PROPERTY_PERCENTILE] ? + properties[constants.UNEMPLOYMENT_PROPERTY_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_UNEMPLOYMENT_AND_LOW_HIGH_SCHOOL_EDU] ? + properties[constants.IS_GTE_90_UNEMPLOYMENT_AND_LOW_HIGH_SCHOOL_EDU] : null, + }; + const poverty:indicatorInfo = { + label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.POVERTY), + description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.POVERTY), + value: properties[constants.POVERTY_PROPERTY_PERCENTILE] ? + properties[constants.POVERTY_PROPERTY_PERCENTILE] : null, + isDisadvagtaged: properties[constants.IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU] ? + properties[constants.IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU] : null, + }; + // const highSchool:indicatorInfo = { + // label: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATORS.HIGH_SCL), + // description: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_INDICATOR_DESCRIPTION.HIGH_SKL), + // value: properties[constants.HIGH_SCHOOL_PROPERTY_PERCENTILE] ? + // properties[constants.HIGH_SCHOOL_PROPERTY_PERCENTILE] : null, + // isDisadvagtaged: properties[constants.IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU] ? + // properties[constants.IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU] : null, + // }; - const indicators = [areaMedianIncome, eduInfo, poverty]; - const additionalIndicators = [ - asthma, diabetes, dieselPartMatter, energyBurden, femaRisk, heartDisease, - houseBurden, leadPaint, lifeExpect, pm25, trafficVolume, wasteWater, + // Aggregate indicators based on categories + const categories = [ + { + id: 'climate-change', + titleText: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_CATEGORY.CLIMATE), + indicators: [expAgLoss, expBldLoss, expPopLoss, lowInc], + isDisadvagtaged: properties[constants.IS_CLIMATE_FACTOR_DISADVANTAGED_L] ? + properties[constants.IS_CLIMATE_FACTOR_DISADVANTAGED_L] : null, + }, + { + id: 'clean-energy', + titleText: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_CATEGORY.CLEAN_ENERGY), + indicators: [energyBurden, pm25, lowInc], + isDisadvagtaged: properties[constants.IS_ENERGY_FACTOR_DISADVANTAGED_L] ? + properties[constants.IS_ENERGY_FACTOR_DISADVANTAGED_L] : null, + }, + { + id: 'clean-transport', + titleText: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_CATEGORY.CLEAN_TRANSPORT), + indicators: [dieselPartMatter, trafficVolume, lowInc], + isDisadvagtaged: properties[constants.IS_TRANSPORT_FACTOR_DISADVANTAGED_L] ? + properties[constants.IS_TRANSPORT_FACTOR_DISADVANTAGED_L] : null, + }, + { + id: 'sustain-house', + titleText: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_CATEGORY.SUSTAIN_HOUSE), + indicators: [houseBurden, leadPaint, lowInc], + isDisadvagtaged: properties[constants.IS_HOUSING_FACTOR_DISADVANTAGED_L] ? + properties[constants.IS_HOUSING_FACTOR_DISADVANTAGED_L] : null, + }, + { + id: 'leg-pollute', + titleText: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_CATEGORY.LEG_POLLUTE), + indicators: [proxHaz, proxNPL, proxRMP, lowInc], + isDisadvagtaged: properties[constants.IS_POLLUTION_FACTOR_DISADVANTAGED_L] ? + properties[constants.IS_POLLUTION_FACTOR_DISADVANTAGED_L] : null, + }, + { + id: 'clean-water', + titleText: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_CATEGORY.CLEAN_WATER), + indicators: [wasteWater, lowInc], + isDisadvagtaged: properties[constants.IS_WATER_FACTOR_DISADVANTAGED_L] ? + properties[constants.IS_WATER_FACTOR_DISADVANTAGED_L] : null, + }, + { + id: 'health-burdens', + titleText: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_CATEGORY.HEALTH_BURDEN), + indicators: [asthma, diabetes, heartDisease, lifeExpect, lowInc], + isDisadvagtaged: properties[constants.IS_HEALTH_FACTOR_DISADVANTAGED_L] ? + properties[constants.IS_HEALTH_FACTOR_DISADVANTAGED_L] : null, + }, + { + id: 'work-dev', + titleText: intl.formatMessage(EXPLORE_COPY.SIDE_PANEL_CATEGORY.WORK_DEV), + indicators: [lowMedInc, lingIso, unemploy, poverty], + isDisadvagtaged: properties[constants.IS_WORKFORCE_FACTOR_DISADVANTAGED_L] ? + properties[constants.IS_WORKFORCE_FACTOR_DISADVANTAGED_L] : null, + }, ]; + // Create the AccoridionItems by mapping over the categories array. In this array we define the + // various indicators for a specific category. This is an array which then maps over the + // component to render the actual Indicator + const categoryItems = categories.map((category) => ({ + id: category.id, + title: , + content: ( + <> + {category.indicators.map((indicator:any, index:number) => { + return ; + })} + + ), + expanded: false, + })); + return (

); diff --git a/client/src/components/AreaDetail/tests/__snapshots__/areaDetail.test.tsx.snap b/client/src/components/AreaDetail/tests/__snapshots__/areaDetail.test.tsx.snap index 92917108..59a3c82e 100644 --- a/client/src/components/AreaDetail/tests/__snapshots__/areaDetail.test.tsx.snap +++ b/client/src/components/AreaDetail/tests/__snapshots__/areaDetail.test.tsx.snap @@ -5,6 +5,9 @@ exports[`rendering of the AreaDetail checks if various text fields are visible 1 `; diff --git a/client/src/components/AreaDetail/tests/areaDetail.test.tsx b/client/src/components/AreaDetail/tests/areaDetail.test.tsx index f822c870..133b8edb 100644 --- a/client/src/components/AreaDetail/tests/areaDetail.test.tsx +++ b/client/src/components/AreaDetail/tests/areaDetail.test.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import {render} from '@testing-library/react'; -import AreaDetail, {readablePercentile} from '..'; +import AreaDetail from '..'; import {LocalizedComponent} from '../../../test/testHelpers'; import * as constants from '../../../data/constants'; @@ -29,9 +29,3 @@ describe('rendering of the AreaDetail', () => { }); }); -describe('tests the readablePercentile function', () => { - expect(readablePercentile(.98)).toEqual(98); - expect(readablePercentile(.07)).toEqual(7); - expect(readablePercentile(.123)).toEqual(12); - expect(readablePercentile(.789)).toEqual(79); -}); diff --git a/client/src/components/Categories/Categories.tsx b/client/src/components/Categories/Categories.tsx index 11620154..76c5c66d 100644 --- a/client/src/components/Categories/Categories.tsx +++ b/client/src/components/Categories/Categories.tsx @@ -1,7 +1,7 @@ import React from 'react'; import {Grid} from '@trussworks/react-uswds'; -import IndicatorCategory from '../CategoryCard'; +import CategoryCard from '../CategoryCard'; import J40MainGridContainer from '../J40MainGridContainer'; import * as METHODOLOGY_COPY from '../../data/copy/methodology'; @@ -33,7 +33,7 @@ const Categories = () => { { - categories.map((category, index) => ) + categories.map((category, index) => ) } diff --git a/client/src/components/Category/Category.module.scss b/client/src/components/Category/Category.module.scss new file mode 100644 index 00000000..c8e5ec8b --- /dev/null +++ b/client/src/components/Category/Category.module.scss @@ -0,0 +1,6 @@ +@use '../../styles/design-system.scss' as *; + +.categoryContainer { + display: flex; + justify-content: space-between; +} \ No newline at end of file diff --git a/client/src/components/Category/Category.module.scss.d.ts b/client/src/components/Category/Category.module.scss.d.ts new file mode 100644 index 00000000..ab7b1b4e --- /dev/null +++ b/client/src/components/Category/Category.module.scss.d.ts @@ -0,0 +1,13 @@ +declare namespace CategoryNamespace { + export interface ICategoryScss { + categoryContainer: string; + disadvantageDot: string; + } + } + +declare const CategoryScssModule: CategoryNamespace.ICategoryScss & { + /** WARNING: Only available when `css-loader` is used without `style-loader` or `mini-css-extract-plugin` */ + locals: CategoryNamespace.ICategoryScss; + }; + + export = CategoryScssModule; diff --git a/client/src/components/Category/Category.test.tsx b/client/src/components/Category/Category.test.tsx new file mode 100644 index 00000000..2780c076 --- /dev/null +++ b/client/src/components/Category/Category.test.tsx @@ -0,0 +1,28 @@ +import * as React from 'react'; +import {render} from '@testing-library/react'; +import {LocalizedComponent} from '../../test/testHelpers'; +import Category from './Category'; + +describe('rendering of the Category disadvantaged', () => { + const {asFragment} = render( + + + , + ); + + it('checks if component renders', () => { + expect(asFragment()).toMatchSnapshot(); + }); +}); + +describe('rendering of the Category non-disadvantaged', () => { + const {asFragment} = render( + + + , + ); + + it('checks if component renders', () => { + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/client/src/components/Category/Category.tsx b/client/src/components/Category/Category.tsx new file mode 100644 index 00000000..d1bfc4d7 --- /dev/null +++ b/client/src/components/Category/Category.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import DisadvantageDot from '../DisadvantageDot'; + +import * as styles from './Category.module.scss'; + +interface ICategory { + name: string; + isDisadvantaged: boolean; +} + +const Category = ({name, isDisadvantaged}:ICategory) => { + return ( +
+
+ {name} +
+ +
+ ); +}; + +export default Category; diff --git a/client/src/components/Category/__snapshots__/Category.test.tsx.snap b/client/src/components/Category/__snapshots__/Category.test.tsx.snap new file mode 100644 index 00000000..725757b1 --- /dev/null +++ b/client/src/components/Category/__snapshots__/Category.test.tsx.snap @@ -0,0 +1,14 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`rendering of the Category disadvantaged checks if component renders 1`] = ` + +
+
+ test name +
+
+
+ +`; + +exports[`rendering of the Category non-disadvantaged checks if component renders 1`] = ``; diff --git a/client/src/components/Category/index.tsx b/client/src/components/Category/index.tsx new file mode 100644 index 00000000..af247606 --- /dev/null +++ b/client/src/components/Category/index.tsx @@ -0,0 +1,3 @@ +import Category from './Category'; + +export default Category; diff --git a/client/src/components/CategoryCard/CategoryCard.tsx b/client/src/components/CategoryCard/CategoryCard.tsx index e1bd0958..aca2ebf6 100644 --- a/client/src/components/CategoryCard/CategoryCard.tsx +++ b/client/src/components/CategoryCard/CategoryCard.tsx @@ -10,7 +10,7 @@ interface ICategoryInterface { THEN: JSX.Element } } -const IndicatorCategory = ({categoryInfo}: ICategoryInterface) => { +const CategoryCard = ({categoryInfo}: ICategoryInterface) => { return (

@@ -29,4 +29,4 @@ const IndicatorCategory = ({categoryInfo}: ICategoryInterface) => { ); }; -export default IndicatorCategory; +export default CategoryCard; diff --git a/client/src/components/DisadvantageDot/DisadvantageDot.module.scss b/client/src/components/DisadvantageDot/DisadvantageDot.module.scss new file mode 100644 index 00000000..b881664e --- /dev/null +++ b/client/src/components/DisadvantageDot/DisadvantageDot.module.scss @@ -0,0 +1,19 @@ +@use '../../styles/design-system.scss' as *; + +.disadvantagedDotSmall { + @include u-circle('105'); + @include u-margin-left(1); + + align-self: center; + @include u-bg('blue-warm-70v'); +} + +.disadvantagedDotBig { + @include u-circle(4); + margin: 2.3rem 1.5rem 2rem 0; + opacity: .6; + + //Maintain aspect ratio as screen width decreases + flex: 1 0 2rem; + @include u-bg('blue-warm-70v'); +} \ No newline at end of file diff --git a/client/src/components/DisadvantageDot/DisadvantageDot.module.scss.d.ts b/client/src/components/DisadvantageDot/DisadvantageDot.module.scss.d.ts new file mode 100644 index 00000000..7467e7cc --- /dev/null +++ b/client/src/components/DisadvantageDot/DisadvantageDot.module.scss.d.ts @@ -0,0 +1,14 @@ +declare namespace DisadvantagedDotNamespace { + export interface IDisadvantagedDot { + disadvantagedDotBig: string; + disadvantagedDotSmall: string; + } + } + +declare const DisadvantagedDotModule: DisadvantagedDotNamespace.IDisadvantagedDot & { + /** WARNING: Only available when `css-loader` is used without `style-loader` or `mini-css-extract-plugin` */ + locals: DisadvantagedDotNamespace.IDisadvantagedDot; + }; + + export = DisadvantagedDotModule; + diff --git a/client/src/components/DisadvantageDot/DisadvantageDot.test.tsx b/client/src/components/DisadvantageDot/DisadvantageDot.test.tsx new file mode 100644 index 00000000..1f23a542 --- /dev/null +++ b/client/src/components/DisadvantageDot/DisadvantageDot.test.tsx @@ -0,0 +1,16 @@ +import * as React from 'react'; +import {render} from '@testing-library/react'; +import {LocalizedComponent} from '../../test/testHelpers'; +import DisadvantageDot from './DisadvantageDot'; + +describe('rendering of the DisadvantageDot disadvantaged', () => { + const {asFragment} = render( + + + , + ); + + it('checks if component renders', () => { + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/client/src/components/DisadvantageDot/DisadvantageDot.tsx b/client/src/components/DisadvantageDot/DisadvantageDot.tsx new file mode 100644 index 00000000..970811d0 --- /dev/null +++ b/client/src/components/DisadvantageDot/DisadvantageDot.tsx @@ -0,0 +1,23 @@ +import React from 'react'; + +import * as styles from './DisadvantageDot.module.scss'; + +interface IDisadvantageDot { + isDisadvantaged?: boolean; + isBig?: boolean; +} +const DisadvantageDot = ({isDisadvantaged = false, isBig}:IDisadvantageDot) => { + let computedClass = ''; + + if (isBig) { + computedClass = styles.disadvantagedDotBig; + } else { + computedClass = isDisadvantaged ? styles.disadvantagedDotSmall : ''; + } + + return ( +
+ ); +}; + +export default DisadvantageDot; diff --git a/client/src/components/DisadvantageDot/__snapshots__/DisadvantageDot.test.tsx.snap b/client/src/components/DisadvantageDot/__snapshots__/DisadvantageDot.test.tsx.snap new file mode 100644 index 00000000..95c57c9a --- /dev/null +++ b/client/src/components/DisadvantageDot/__snapshots__/DisadvantageDot.test.tsx.snap @@ -0,0 +1,7 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`rendering of the DisadvantageDot disadvantaged checks if component renders 1`] = ` + +
+ +`; diff --git a/client/src/components/DisadvantageDot/index.tsx b/client/src/components/DisadvantageDot/index.tsx new file mode 100644 index 00000000..b20cced5 --- /dev/null +++ b/client/src/components/DisadvantageDot/index.tsx @@ -0,0 +1,3 @@ +import DisadvantageDot from './DisadvantageDot'; + +export default DisadvantageDot; diff --git a/client/src/components/Indicator/Indicator.module.scss b/client/src/components/Indicator/Indicator.module.scss new file mode 100644 index 00000000..25957599 --- /dev/null +++ b/client/src/components/Indicator/Indicator.module.scss @@ -0,0 +1,59 @@ +@use '../../styles/design-system.scss' as *; +@import "../utils.scss"; + +@mixin indicator { + display: flex; + flex-direction: column; + @include u-padding-bottom(3); + &:last-child { + border-bottom: none; + @include u-padding-bottom(0); + } + + .indicatorRow { + display: flex; + + @media screen and (max-width: $mobileBreakpoint) { + flex: 1 0 40%; + align-self: inherit; + padding-left: 3rem; + padding-top: 1rem; + } + + .indicatorName { + flex: 0 1 77%; + display: flex; + flex-direction: column; + @include typeset('sans', '2xs', 2); + @include u-text('bold'); + + .indicatorDesc { + @include typeset('sans', '3xs', 2); + @include u-text('normal'); + max-width: 12rem; + @include u-margin-top(0); + @media screen and (max-width: 1024px) { + max-width: 80%; + } + } + } + + .indicatorValue { + margin-left: 2.2rem; + + .indicatorSuperscript { + top: -0.2em + } + } + } +} + +//Indicator box styles +.indicatorBoxMain { + @include indicator; +} + +.disadvantagedIndicator { + @include indicator; + @include u-text('blue-warm-70v'); +} \ No newline at end of file diff --git a/client/src/components/Indicator/Indicator.module.scss.d.ts b/client/src/components/Indicator/Indicator.module.scss.d.ts new file mode 100644 index 00000000..868b76e6 --- /dev/null +++ b/client/src/components/Indicator/Indicator.module.scss.d.ts @@ -0,0 +1,19 @@ +declare namespace IndicatorNamespace { + export interface IIndicatorScss { + indicatorBoxMain:string; + indicatorBoxAdditional:string; + indicatorRow:string; + indicatorName:string; + indicatorValue:string; + indicatorSuperscript:string; + indicatorDesc:string; + disadvantagedIndicator:string; + } + } + +declare const IndicatorScssModule: IndicatorNamespace.IIndicatorScss & { + /** WARNING: Only available when `css-loader` is used without `style-loader` or `mini-css-extract-plugin` */ + locals: IndicatorNamespace.IIndicatorScss; + }; + + export = IndicatorScssModule; diff --git a/client/src/components/Indicator/Indicator.test.tsx b/client/src/components/Indicator/Indicator.test.tsx new file mode 100644 index 00000000..512cf12e --- /dev/null +++ b/client/src/components/Indicator/Indicator.test.tsx @@ -0,0 +1,30 @@ +import * as React from 'react'; +import {render} from '@testing-library/react'; +import {LocalizedComponent} from '../../test/testHelpers'; +import Indicator, {readablePercentile} from './Indicator'; +import {indicatorInfo} from '../AreaDetail'; + +const highSchool:indicatorInfo = { + label: 'some label', + description: 'some description', + value: 97, +}; + +describe('rendering of the Indicator', () => { + const {asFragment} = render( + + + , + ); + + it('checks if component renders', () => { + expect(asFragment()).toMatchSnapshot(); + }); +}); + +describe('tests the readablePercentile function', () => { + expect(readablePercentile(.98)).toEqual(98); + expect(readablePercentile(.07)).toEqual(7); + expect(readablePercentile(.123)).toEqual(12); + expect(readablePercentile(.789)).toEqual(79); +}); diff --git a/client/src/components/Indicator/Indicator.tsx b/client/src/components/Indicator/Indicator.tsx new file mode 100644 index 00000000..e19e6c9c --- /dev/null +++ b/client/src/components/Indicator/Indicator.tsx @@ -0,0 +1,55 @@ +import React from 'react'; +import {indicatorInfo} from '../AreaDetail'; + +import * as styles from './Indicator.module.scss'; + +interface IIndicator { + indicator: indicatorInfo, +} + +export const readablePercentile = (percentile: number | null) => { + return percentile ? Math.round(percentile * 100) : 'N/A'; +}; + +// Todo: Add internationalization to superscript ticket #582 +export const getSuperscriptOrdinal = (percentile: number | string) => { + if (typeof percentile === 'number') { + const englishOrdinalRules = new Intl.PluralRules('en', { + type: 'ordinal', + }); + const suffixes = { + zero: 'th', + one: 'st', + two: 'nd', + few: 'rd', + many: 'th', + other: 'th', + }; + return suffixes[englishOrdinalRules.select(percentile)]; + } +}; + +const Indicator = ({indicator}:IIndicator) => { + return ( +
  • +
    +
    + {indicator.label} +
    + {indicator.description} +
    +
    +
    + {readablePercentile(indicator.value)} + + {getSuperscriptOrdinal(readablePercentile(indicator.value))} + +
    +
    +
  • + ); +}; + +export default Indicator; diff --git a/client/src/components/Indicator/__snapshots__/Indicator.test.tsx.snap b/client/src/components/Indicator/__snapshots__/Indicator.test.tsx.snap new file mode 100644 index 00000000..84e47ac0 --- /dev/null +++ b/client/src/components/Indicator/__snapshots__/Indicator.test.tsx.snap @@ -0,0 +1,26 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`rendering of the Indicator checks if component renders 1`] = ` + +
  • +
    +
    + some label +
    + some description +
    +
    +
    + 9700 + + + th + + +
    +
    +
  • +
    +`; diff --git a/client/src/components/Indicator/index.tsx b/client/src/components/Indicator/index.tsx new file mode 100644 index 00000000..536061c5 --- /dev/null +++ b/client/src/components/Indicator/index.tsx @@ -0,0 +1,3 @@ +import Indicator from './Indicator'; + +export default Indicator; diff --git a/client/src/components/MapLegend/index.tsx b/client/src/components/MapLegend/index.tsx index 5f46c3a1..e1d80427 100644 --- a/client/src/components/MapLegend/index.tsx +++ b/client/src/components/MapLegend/index.tsx @@ -3,13 +3,14 @@ import {useIntl} from 'gatsby-plugin-intl'; import * as styles from './mapLegend.module.scss'; import * as EXPLORE_COPY from '../../data/copy/explore'; +import DisadvantageDot from '../DisadvantageDot'; const MapLegend = () => { const intl = useIntl(); return (
    -
    -
    + +
    {intl.formatMessage(EXPLORE_COPY.LEGEND.PRIORITY_LABEL)}
    diff --git a/client/src/components/MapLegend/mapLegend.module.scss b/client/src/components/MapLegend/mapLegend.module.scss index 81a417b9..e9e6ea8d 100644 --- a/client/src/components/MapLegend/mapLegend.module.scss +++ b/client/src/components/MapLegend/mapLegend.module.scss @@ -1,26 +1,17 @@ @import "../utils.scss"; -$min-color: #fafaf8; -$med-color: rgba(26, 68, 128, 0.2); -$max-color: rgba(26, 68, 128, 0.6); -$alertInfoColor: #e7f6f8; - .legendContainer { display: flex; - margin: 1rem 0 1rem 2.5rem; border: 1px solid #DFE1E2; - padding: .5rem 1.5rem 1rem 1.5rem; + margin: 1rem 0 1rem 2.5rem; + padding: 0 1.5rem 1rem 1.5rem; + .legendTextBox { + // Set maximum width for text area so that blue dot + // doesn't lose aspect ratio + flex-basis: 88%; + } @media screen and (max-width: 640px) { margin: 1rem 0 0; } } - -.colorSwatch { - flex: 1 0 2rem; - box-sizing: border-box; - height: 2rem; - margin: 2rem 1.5rem 2rem 0; - border-radius: 50%; - background-color: $max-color; -} diff --git a/client/src/components/MapLegend/mapLegend.module.scss.d.ts b/client/src/components/MapLegend/mapLegend.module.scss.d.ts index 2c5b0db0..0ed1e0ac 100644 --- a/client/src/components/MapLegend/mapLegend.module.scss.d.ts +++ b/client/src/components/MapLegend/mapLegend.module.scss.d.ts @@ -1,7 +1,7 @@ declare namespace HowYouCanHelpModuleScssNamespace { export interface IHowYouCanHelpModuleScss { legendContainer: string; - colorSwatch: string; + legendTextBox: string; } } diff --git a/client/src/data/constants.tsx b/client/src/data/constants.tsx index a2691a78..d80c96bf 100644 --- a/client/src/data/constants.tsx +++ b/client/src/data/constants.tsx @@ -30,7 +30,7 @@ export const FEATURE_TILE_LOW_ZOOM_URL = featureURLForTilesetName('low'); export const PERFORMANCE_MARKER_MAP_IDLE = 'MAP_IDLE'; // Properties -export const SCORE_PROPERTY_HIGH = 'Definition L (percentile)'; +export const SCORE_PROPERTY_HIGH = 'SL_PFS'; export const SCORE_PROPERTY_LOW = 'L_SCORE'; export const GEOID_PROPERTY = 'GEOID10'; export const HIGH_SCORE_SOURCE_NAME = 'score-high'; @@ -42,28 +42,73 @@ export const CURRENTLY_SELECTED_FEATURE_HIGHLIGHT_LAYER_NAME = 'currently-select export const BLOCK_GROUP_BOUNDARY_LAYER_NAME = 'block-group-boundary-layer'; -// Properties -export const POVERTY_PROPERTY_PERCENTILE = 'Poverty (Less than 200% of federal poverty line) (percentile)'; -export const HOUSING_BURDEN_PROPERTY_PERCENTILE = 'Housing burden (percent) (percentile)'; -export const LINGUISTIC_ISOLATION_PROPERTY_PERCENTILE = 'Linguistic isolation (percent) (percentile)'; -export const UNEMPLOYMENT_PROPERTY_PERCENTILE = 'Unemployed civilians (percent) (percentile)'; -export const TOTAL_POPULATION = 'Total population'; -export const EDUCATION_PROPERTY_PERCENTILE = - `Percent individuals age 25 or over with less than high school degree (percentile)`; -export const COUNTY_NAME = 'County Name'; -export const STATE_NAME = 'State Name'; -export const DIABETES_PERCENTILE = 'Diagnosed diabetes among adults aged >=18 years (percentile)'; -export const ASTHMA_PERCENTILE = 'Current asthma among adults aged >=18 years (percentile)'; -export const HEART_PERCENTILE = 'Coronary heart disease among adults aged >=18 years (percentile)'; -export const LIFE_PERCENTILE = 'Life expectancy (years) (percentile)'; -export const TRAFFIC_PERCENTILE = 'Traffic proximity and volume (percentile)'; -export const FEMA_PERCENTILE = 'FEMA Risk Index Expected Annual Loss Score (percentile)'; -export const ENERGY_PERCENTILE = 'Energy burden (percentile)'; -export const WASTEWATER_PERCENTILE = 'Wastewater discharge (percentile)'; -export const LEAD_PAINT_PERCENTILE = 'Percent pre-1960s housing (lead paint indicator) (percentile)'; -export const DIESEL_MATTER_PERCENTILE = 'Diesel particulate matter (percentile)'; -export const PM25_PERCENTILE = 'Particulate matter (PM2.5) (percentile)'; -export const AREA_MEDIAN_INCOME_PERCENTILE = 'Median household income (% of AMI) (percentile)'; +// Indicator values: +export const ASTHMA_PERCENTILE = 'AF_PFS'; +export const COUNTY_NAME = 'CF'; +export const DIABETES_PERCENTILE = 'DF_PFS'; +export const DIESEL_MATTER_PERCENTILE = 'DSF_PFS'; +export const ENERGY_PERCENTILE = 'EBF_PFS'; +export const HEART_PERCENTILE = 'HDF_PFS'; +export const HIGH_SCHOOL_PROPERTY_PERCENTILE = `HSEF`; +export const HOUSING_BURDEN_PROPERTY_PERCENTILE = 'HBF_PFS'; +export const LEAD_PAINT_PERCENTILE = 'LPF_PFS'; +export const LIFE_PERCENTILE = 'LLEF_PFS'; +export const LINGUISTIC_ISOLATION_PROPERTY_PERCENTILE = 'LIF_PFS'; +export const LOW_MEDIAN_INCOME_PERCENTILE = 'LMI_PFS'; +export const PM25_PERCENTILE = 'PM25F_PFS'; +export const POVERTY_PROPERTY_PERCENTILE = 'P200_PFS'; +export const STATE_NAME = 'SF'; +export const TOTAL_POPULATION = 'TPF'; +export const TRAFFIC_PERCENTILE = 'TF_PFS'; +export const UNEMPLOYMENT_PROPERTY_PERCENTILE = 'UF_PFS'; +export const WASTEWATER_PERCENTILE = 'WF_PFS'; +export const EXP_AGRICULTURE_LOSS_PERCENTILE = 'EALR_PFS'; +export const EXP_BUILDING_LOSS_PERCENTILE = 'EBLR_PFS'; +export const EXP_POPULATION_LOSS_PERCENTILE = 'EPLR_PFS'; +export const MEDIAN_HOME_VALUE_PERCENTILE = 'MHVF_PFS'; +export const POVERTY_BELOW_100_PERCENTILE = 'P100_PFS'; +export const POVERTY_BELOW_200_PERCENTILE = 'P200_PFS'; +export const PROXIMITY_NPL_SITES_PERCENTILE = 'NPL_PFS'; +export const PROXIMITY_RMP_SITES_PERCENTILE = 'RMP_PFS'; +export const PROXIMITY_TSDF_SITES_PERCENTILE = 'TSDF_PFS'; + +// Category booleans (disadvantaged or not): +export const IS_CLIMATE_FACTOR_DISADVANTAGED_L = 'L_CLT'; +export const IS_WORKFORCE_FACTOR_DISADVANTAGED_L = 'L_WKFC'; +export const IS_WATER_FACTOR_DISADVANTAGED_L = 'L_WTR'; +export const IS_ENERGY_FACTOR_DISADVANTAGED_L = 'L_ENY'; +export const IS_TRANSPORT_FACTOR_DISADVANTAGED_L = 'L_TRN'; +export const IS_HOUSING_FACTOR_DISADVANTAGED_L = 'L_HSG'; +export const IS_POLLUTION_FACTOR_DISADVANTAGED_L = 'L_PLN'; +export const IS_HEALTH_FACTOR_DISADVANTAGED_L = 'L_HLTH'; + +// Indicator booleans (disadvangted or not): (GTE = greater than or equal) +export const IS_GTE_90_EXP_POP_LOSS_AND_IS_LOW_INCOME = 'EPLRLI'; +export const IS_GTE_90_EXP_AGR_LOSS_AND_IS_LOW_INCOME = 'EALRLI'; +export const IS_GTE_90_EXP_BLD_LOSS_AND_IS_LOW_INCOME = 'EBLRLI'; +export const IS_GTE_90_PM25_AND_IS_LOW_INCOME = 'PM25LI'; +export const IS_GTE_90_ENERGY_BURDEN_AND_IS_LOW_INCOME = 'EBLI'; +export const IS_GTE_90_DIESEL_PM_AND_IS_LOW_INCOME = 'DPMLI'; +export const IS_GTE_90_TRAFFIC_PROX_AND_IS_LOW_INCOME = 'TPLI'; +export const IS_GTE_90_LEAD_PAINT_AND_MEDIAN_HOME_VAL_AND_IS_LOW_INCOME = 'LPMHVLI'; +export const IS_GTE_90_HOUSE_BURDEN_AND_IS_LOW_INCOME = 'HBLI'; +export const IS_GTE_90_RMP_AND_IS_LOW_INCOME = 'RMPLI'; +export const IS_GTE_90_SUPERFUND_AND_IS_LOW_INCOME = 'SFLI'; +export const IS_GTE_90_HAZARD_WASTE_AND_IS_LOW_INCOME = 'HWLI'; +export const IS_GTE_90_WASTEWATER_AND_IS_LOW_INCOME = 'WDLI'; +export const IS_GTE_90_DIABETES_AND_IS_LOW_INCOME = 'DLI'; +export const IS_GTE_90_ASTHMA_AND_IS_LOW_INCOME = 'ALI'; +export const IS_GTE_90_HEART_DISEASE_AND_IS_LOW_INCOME = 'HDLI'; +export const IS_GTE_90_LOW_LIFE_EXP_AND_IS_LOW_INCOME = 'LLELI'; +export const IS_GTE_90_LINGUISITIC_ISO_AND_IS_LOW_INCOME = 'LILHSE'; +export const IS_GTE_90_BELOW_100_POVERTY_AND_LOW_HIGH_SCHOOL_EDU = 'PLHSE'; +export const IS_GTE_90_LOW_MEDIAN_INCOME_AND_LOW_HIGH_SCHOOL_EDU = 'LMILHSE'; +export const IS_GTE_90_UNEMPLOYMENT_AND_LOW_HIGH_SCHOOL_EDU = 'ULHSE'; +export const IS_FEDERAL_POVERTY_LEVEL_200 = 'FPL200S'; +export const TOTAL_THRESHOLD_CRITERIA = 'TC'; +export const IS_GTE_90_ISLAND_AREA_UNEMPLOYMENT_AND_IS_LOW_HS_EDU_2009 = 'IAULHSE'; +export const IS_GTE_90_ISLAND_AREA_BELOW_100_POVERTY_AND_IS_LOW_HS_EDU_2009 = 'ISPLHSE'; +export const IS_GTE_90_ISLAND_AREA_LOW_MEDIAN_INCOME_AND_IS_LOW_HS_EDU_2009 = 'IALMILHSE'; export type J40Properties = { [key: string]: any }; @@ -136,7 +181,7 @@ export const DEFAULT_OUTLINE_COLOR = '#4EA5CF'; export const MIN_COLOR = '#FFFFFF'; export const MED_COLOR = '#D1DAE6'; export const MAX_COLOR = '#768FB3'; -export const BORDER_HIGHLIGHT_COLOR = '#00BDE3'; +export const BORDER_HIGHLIGHT_COLOR = '#1A4480'; export const CURRENTLY_SELECTED_FEATURE_LAYER_OPACITY = 0.5; // Widths diff --git a/client/src/data/copy/explore.tsx b/client/src/data/copy/explore.tsx index 38c0f91f..5b3c12a4 100644 --- a/client/src/data/copy/explore.tsx +++ b/client/src/data/copy/explore.tsx @@ -178,6 +178,17 @@ export const SIDE_PANEL_INITIAL_STATE = defineMessages({ }, }); +export const SIDE_PANEL_VERION = { + TITLE: , +}; + export const SIDE_PANEL_CBG_INFO = defineMessages({ CENSUS_BLOCK_GROUP: { id: 'areaDetail.geographicInfo.censusBlockGroup', @@ -204,41 +215,148 @@ export const SIDE_PANEL_CBG_INFO = defineMessages({ export const COMMUNITY = { OF_FOCUS: , NOT_OF_FOCUS: , + IS_FOCUS: , + SEND_FEEDBACK: , }; +export const SIDE_PANEL_CATEGORY = defineMessages({ + CLIMATE: { + id: 'areaDetail.indicator.title.climate', + defaultMessage: 'Climate change', + description: 'Climate change title', + }, + CLEAN_ENERGY: { + id: 'areaDetail.indicator.title.clean.energy', + defaultMessage: 'Clean, efficient energy ', + description: 'Clean, efficient energy title', + }, + CLEAN_TRANSPORT: { + id: 'areaDetail.indicator.title.clean.transport', + defaultMessage: 'Clean transportation', + description: 'Clean transportation title', + }, + SUSTAIN_HOUSE: { + id: 'areaDetail.indicator.title.sustain.house', + defaultMessage: 'Sustainable housing', + description: 'Sustainable housing title', + }, + LEG_POLLUTE: { + id: 'areaDetail.indicator.title.legacy.pollution', + defaultMessage: 'Legacy pollution', + description: 'Legacy pollution title', + }, + CLEAN_WATER: { + id: 'areaDetail.indicator.title.clean.water', + defaultMessage: 'Clean water and waste', + description: 'Clean water and waste title', + }, + HEALTH_BURDEN: { + id: 'areaDetail.indicator.title.health.burden', + defaultMessage: 'Health burdens', + description: 'Health burdens title', + }, + WORK_DEV: { + id: 'areaDetail.indicator.title.work.dev', + defaultMessage: 'Workforce development', + description: 'Workforce development title', + }, +}); + export const SIDE_PANEL_INDICATORS = defineMessages({ - INDICATOR_COLUMN_HEADER: { - id: 'areaDetail.indicators.indicatorColumnHeader', - defaultMessage: 'Indicator', - description: 'the population of the feature selected', + EXP_AG_LOSS: { + id: 'areaDetail.indicator.exp.ag.loss', + defaultMessage: 'Expected agriculture loss rate', + description: 'agriculture loss rate', }, - PERCENTILE_COLUMN_HEADER: { - id: 'areaDetail.indicators.percentileColumnHeader', - defaultMessage: 'Percentile (0-100)', - description: 'the population of the feature selected', + EXP_BLD_LOSS: { + id: 'areaDetail.indicator.exp.bld.loss', + defaultMessage: 'Expected building loss rate', + description: 'building loss rate', }, - POVERTY: { - id: 'areaDetail.indicator.poverty', - defaultMessage: 'Poverty', - description: 'Household income is less than or equal to twice the federal "poverty level"', + EXP_POP_LOSS: { + id: 'areaDetail.indicator.exp.pop.loss', + defaultMessage: 'Expected population loss rate', + description: 'population loss rate', }, - AREA_MEDIAN_INCOME: { - id: 'areaDetail.indicator.areaMedianIncome', - defaultMessage: 'Area Median Income', - description: 'calculated as percent of the area median income', + LOW_INCOME: { + id: 'areaDetail.indicator.low.income', + defaultMessage: 'Low income', + description: 'low income', }, - EDUCATION: { - id: 'areaDetail.indicator.education', - defaultMessage: 'Education, less than high school', - description: 'Percent of people age 25 or older that didn’t get a high school diploma', + ENERGY_BURDEN: { + id: 'areaDetail.indicator.energyBurden', + defaultMessage: 'Energy cost burden', + description: 'Average annual energy cost ($) divided by household income', + }, + PM_2_5: { + id: 'areaDetail.indicator.pm25', + defaultMessage: 'PM2.5', + description: 'Fine inhalable particles, with diameters that are generally 2.5 micrometers and smaller', + }, + DIESEL_PARTICULATE_MATTER: { + id: 'areaDetail.indicator.dieselPartMatter', + defaultMessage: 'Diesel particulate matter', + description: 'Diesel particulate matter level in air', + }, + TRAFFIC_VOLUME: { + id: 'areaDetail.indicator.trafficVolume', + defaultMessage: 'Traffic', + description: 'Count of vehicles (average annual daily traffic) at major roads within 500 meters,' + + ' divided by distance in meters', + }, + LEAD_PAINT: { + id: 'areaDetail.indicator.leadPaint', + defaultMessage: 'Lead paint', + description: 'Housing units built pre-1960, used as an indicator of potential'+ + ' lead paint exposure in homes', + }, + MED_HOME_VAL: { + id: 'areaDetail.indicator.med.home.val', + defaultMessage: 'Median home value', + description: 'Median home value of owner-occupied housing units in the area.', + }, + HOUSE_BURDEN: { + id: 'areaDetail.indicator.houseBurden', + defaultMessage: 'Housing cost burden', + description: 'People ages 18 and up who report having been told by a doctor,' + + ' nurse, or other health professionals that they have diabetes other than diabetes during pregnancy', + }, + PROX_HAZ: { + id: 'areaDetail.indicator.prox.haz', + defaultMessage: 'Proximity to hazardous waste facilities', + description: 'Count of hazardous waste facilities ', + }, + PROX_NPL: { + id: 'areaDetail.indicator.prox.npl', + defaultMessage: 'Proximity to NPL sites', + description: 'Count of proposed or listed NPL ', + }, + PROX_RMP: { + id: 'areaDetail.indicator.prox.rmp', + defaultMessage: 'Proximity to RMP sites', + description: 'Count of proposed or listed RMP', + }, + WASTE_WATER: { + id: 'areaDetail.indicator.wasteWater', + defaultMessage: 'Wastewater discharge', + description: 'Toxic concentrations at stream segments within 500 meters divided by distance in' + + ' kilometers', }, ASTHMA: { id: 'areaDetail.indicator.asthma', @@ -250,164 +368,182 @@ export const SIDE_PANEL_INDICATORS = defineMessages({ defaultMessage: 'Diabetes', description: 'diabetes from dr or nurse', }, - DIESEL_PARTICULATE_MATTER: { - id: 'areaDetail.indicator.dieselPartMatter', - defaultMessage: 'Diesel particulate matter', - description: 'Diesel particulate matter level in air', - }, - ENERGY_BURDEN: { - id: 'areaDetail.indicator.energyBurden', - defaultMessage: 'Energy burden', - description: 'Average annual energy cost ($) divided by household income', - }, - FEMA_RISK: { - id: 'areaDetail.indicator.femaRisk', - defaultMessage: 'FEMA Risk Index', - description: 'Risk based on 18 natural hazard types, in addition to a '+ - 'community\'s social vulnerability and community resilience', - }, HEART_DISEASE: { id: 'areaDetail.indicator.heartDisease', defaultMessage: 'Heart disease', description: 'People ages 18 and up who report ever having been told by a' + 'doctor, nurse, or other health professionals that they had angina or coronary heart disease', }, - HOUSE_BURDEN: { - id: 'areaDetail.indicator.houseBurden', - defaultMessage: 'Housing cost burden', - description: 'People ages 18 and up who report having been told by a doctor,' + - ' nurse, or other health professionals that they have diabetes other than diabetes during pregnancy', - }, - LEAD_PAINT: { - id: 'areaDetail.indicator.leadPaint', - defaultMessage: 'Lead paint', - description: 'Housing units built pre-1960, used as an indicator of potential'+ - ' lead paint exposure in homes', - }, LIFE_EXPECT: { id: 'areaDetail.indicator.lifeExpect', - defaultMessage: 'Life expectancy', + defaultMessage: 'Low life expectancy', description: 'Estimated years of life expectancy', }, - PM_2_5: { - id: 'areaDetail.indicator.pm25', - defaultMessage: 'PM2.5', - description: 'Fine inhalable particles, with diameters that are generally 2.5 micrometers and smaller', + LOW_MED_INC: { + id: 'areaDetail.indicator.low.med.income', + defaultMessage: 'Low median income', + description: 'Low median income', }, - TRAFFIC_VOLUME: { - id: 'areaDetail.indicator.trafficVolume', - defaultMessage: 'Traffic proximity and volume', - description: 'Count of vehicles (average annual daily traffic) at major roads within 500 meters,' + - ' divided by distance in meters', + LING_ISO: { + id: 'areaDetail.indicator.ling.iso', + defaultMessage: 'Linguistic isolation', + description: 'Linguistic isolation', }, - WASTE_WATER: { - id: 'areaDetail.indicator.wasteWater', - defaultMessage: 'Wastewater discharge', - description: 'Toxic concentrations at stream segments within 500 meters divided by distance in' + - ' kilometers', + UNEMPLOY: { + id: 'areaDetail.indicator.unemploy', + defaultMessage: 'Unemployment', + description: 'Unemployment', + }, + POVERTY: { + id: 'areaDetail.indicator.poverty', + defaultMessage: 'Poverty', + description: 'Unemployment', + }, + HIGH_SCL: { + id: 'areaDetail.indicator.high.school', + defaultMessage: 'High school degree achievement rate', + description: 'High school degree achievement rate', + }, }); export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({ - AREA_MEDIAN_INCOME: { - id: 'areaDetail.indicator.description.area_median_income', - defaultMessage: 'Median income of the census tract calculated as a percent of the metropolitan'+ - ' area’s or state\'s median income', - description: 'Median income of the census tract calculated as a percent of the metropolitan'+ - ' area’s or state\'s median income', + EXP_AG_LOSS: { + id: 'areaDetail.indicator.description.exp.ag.loss', + defaultMessage: 'Economic loss rate to agriculture resulting from natural hazards', + description: 'Economic loss rate to agriculture resulting from natural hazards', + }, - EDUCATION: { - id: 'areaDetail.indicator.description.education', - defaultMessage: 'Percent of people age 25 or older that didn’t get a high school diploma', - description: 'Percent of people age 25 or older that didn’t get a high school diploma', + EXP_BLD_LOSS: { + id: 'areaDetail.indicator.description.exp.bld.loss', + defaultMessage: 'Economic loss rate to buildings resulting from natural hazards', + description: 'Economic loss rate to buildings resulting from natural hazards', }, - POVERTY: { - id: 'areaDetail.indicator.description.poverty', - defaultMessage: 'Percent of a tract\'s population in households where the household income' + - ' is at or below 100% of the federal poverty level', - description: 'Percent of a tract\'s population in households where the household income' + - ' is at or below 100% of the federal poverty level', + EXP_POP_LOSS: { + id: 'areaDetail.indicator.description.exp.pop.loss', + defaultMessage: 'Economic loss rate to the population in fatalities and injuries resulting from natural hazards', + description: 'Economic loss rate to the population in fatalities and injuries resulting from natural hazards', }, - ASTHMA: { - id: 'areaDetail.indicator.description.asthma', - defaultMessage: 'People who answer “yes” to both of the questions: “Have you ever been told by' + - ' a doctor nurse, or other health professional that you have asthma?” and “Do you still have asthma?"', - description: 'People who answer “yes” to both of the questions: “Have you ever been told by' + - ' a doctor nurse, or other health professional that you have asthma?” and “Do you still have asthma?"', - }, - DIABETES: { - id: 'areaDetail.indicator.description.diabetes', - defaultMessage: 'People ages 18 and up who report having been told by a doctor, nurse, or other' + - ' health professionals that they have diabetes other than diabetes during pregnancy', - description: 'People ages 18 and up who report having been told by a doctor, nurse, or other' + - ' health professionals that they have diabetes other than diabetes during pregnancy', - }, - DIESEL_PARTICULATE_MATTER: { - id: 'areaDetail.indicator.description.dieselPartMatter', - defaultMessage: 'Mixture of particles that is part of diesel exhaust in the air', - description: 'Mixture of particles that is part of diesel exhaust in the air', + LOW_INCOME: { + id: 'areaDetail.indicator.description.low.income', + defaultMessage: 'Household income is less than or equal to twice the federal poverty level', + description: 'Household income is less than or equal to twice the federal poverty level', }, + ENERGY_BURDEN: { id: 'areaDetail.indicator.description.energyBurden', - defaultMessage: 'Average annual energy cost ($) divided by household income', - description: 'Average annual energy cost ($) divided by household income', - }, - FEMA_RISK: { - id: 'areaDetail.indicator.description.femaRisk', - defaultMessage: 'Expected Annual Loss Score, which is the average economic loss in dollars' + - ' resulting from natural hazards each year.', - description: 'Expected Annual Loss Score, which is the average economic loss in dollars' + - ' resulting from natural hazards each year.', - }, - HEART_DISEASE: { - id: 'areaDetail.indicator.description.heartDisease', - defaultMessage: 'People ages 18 and up who report ever having been told by a' + - ' doctor, nurse, or other health professionals that they had angina or coronary heart disease', - description: 'People ages 18 and up who report ever having been told by a' + - ' doctor, nurse, or other health professionals that they had angina or coronary heart disease', - }, - HOUSE_BURDEN: { - id: 'areaDetail.indicator.description.houseBurden', - defaultMessage: 'Households that are low income and spend more than 30% of their income on' + - ' housing costs', - description: 'Households that are low income and spend more than 30% of their income on' + - ' housing costs', - }, - LEAD_PAINT: { - id: 'areaDetail.indicator.description.leadPaint', - defaultMessage: 'Housing units built pre-1960, used as an indicator of potential'+ - ' lead paint exposure in homes', - description: 'Housing units built pre-1960, used as an indicator of potential'+ - ' lead paint exposure in homes', - }, - LIFE_EXPECT: { - id: 'areaDetail.indicator.description.lifeExpect', - defaultMessage: 'Estimated years of life expectancy', - description: 'Estimated years of life expectancy', + defaultMessage: 'Energy costs divided by household income', + description: 'Energy costs divided by household income', }, PM_2_5: { id: 'areaDetail.indicator.description.pm25', - defaultMessage: 'Fine inhalable particles, with diameters that are generally 2.5 micrometers and smaller', - description: 'Fine inhalable particles, with diameters that are generally 2.5 micrometers and smaller', + defaultMessage: 'Fine inhalable particles, 2.5 micrometers and smaller', + description: 'Fine inhalable particles, 2.5 micrometers and smaller', + }, + + DIESEL_PARTICULATE_MATTER: { + id: 'areaDetail.indicator.description.dieselPartMatter', + defaultMessage: 'Diesel exhaust in the air', + description: 'Diesel exhaust in the air', }, TRAFFIC_VOLUME: { id: 'areaDetail.indicator.description.trafficVolume', - defaultMessage: 'Count of vehicles (average annual daily traffic) at major roads within 500 meters,' + - ' divided by distance in meters', - description: 'Count of vehicles (average annual daily traffic) at major roads within 500 meters,' + - ' divided by distance in meters', + defaultMessage: 'Count of vehicles at major roads within 500 meters', + description: 'Count of vehicles at major roads within 500 meters', }, + + LEAD_PAINT: { + id: 'areaDetail.indicator.description.leadPaint', + defaultMessage: 'Pre-1960 housing', + description: 'Pre-1960 housing', + }, + MED_HOME_VAL: { + id: 'areaDetail.indicator.description.med.home.val', + defaultMessage: 'Meidan home value in area', + description: 'Meidan home value in area', + + }, + HOUSE_BURDEN: { + id: 'areaDetail.indicator.description.houseBurden', + defaultMessage: 'Low income households spending more than 30% of income on housing', + description: 'Low income households spending more than 30% of income on housing', + }, + + PROX_HAZ: { + id: 'areaDetail.indicator.description.prox.haz', + defaultMessage: 'Count of hazardous waste facilities within 5 km', + description: 'Count of hazardous waste facilities within 5 km', + }, + PROX_NPL: { + id: 'areaDetail.indicator.description.prox.npl', + defaultMessage: 'Proposed or listed NPL (Superfund) sites within 5 km', + description: 'Proposed or listed NPL (Superfund) sites within 5 km', + }, + PROX_RMP: { + id: 'areaDetail.indicator.description.prox.npl', + defaultMessage: 'Risk Management Plan facilities within 5 km', + description: 'Risk Management Plan facilities within 5 km', + }, + WASTE_WATER: { id: 'areaDetail.indicator.description.wasteWater', - defaultMessage: 'Toxic concentrations at stream segments within 500 meters divided by distance in' + - ' kilometers', - description: 'Toxic concentrations at stream segments within 500 meters divided by distance in' + - ' kilometers', + defaultMessage: 'Toxic concentrations at stream segments within 500 meters', + description: 'Toxic concentrations at stream segments within 500 meters', + }, + + ASTHMA: { + id: 'areaDetail.indicator.description.asthma', + defaultMessage: 'Number of people who have been told they have asthma', + description: 'Number of people who have been told they have asthma', + }, + DIABETES: { + id: 'areaDetail.indicator.description.diabetes', + defaultMessage: 'People ages 18 years and older who have diabetes other than diabetes during pregnancy', + description: 'People ages 18 years and older who have diabetes other than diabetes during pregnancy', + }, + HEART_DISEASE: { + id: 'areaDetail.indicator.description.heartDisease', + defaultMessage: 'People ages 18 years and older who have been told they have heart disease', + description: 'People ages 18 years and older who have been told they have heart disease', + }, + LOW_LIFE_EXPECT: { + id: 'areaDetail.indicator.description.lifeExpect', + defaultMessage: 'Average number of years of life a person can expect to live', + description: 'Average number of years of life a person can expect to live', + }, + + LOW_MED_INCOME: { + id: 'areaDetail.indicator.description.low.med.income', + defaultMessage: 'Median income calculated as a percent of the area’s median income', + description: 'Median income calculated as a percent of the area’s median income', + }, + LING_ISO: { + id: 'areaDetail.indicator.description.ling.iso', + defaultMessage: `Households in which no one age 14 and over speaks English only or also speaks + a language other than English`, + description: `Households in which no one age 14 and over speaks English only or also speaks + a language other than English`, + }, + UNEMPLOY: { + id: 'areaDetail.indicator.description.unemploy', + defaultMessage: 'Number of unemployed people as a percentage of the labor force', + description: 'Number of unemployed people as a percentage of the labor force', + }, + POVERTY: { + id: 'areaDetail.indicator.description.poverty', + defaultMessage: `Percent of individuals in households where the household income is at or + below 100% of the federal poverty level`, + description: `Percent of individuals in households where the household income is at or + below 100% of the federal poverty level`, + }, + HIGH_SKL: { + id: 'areaDetail.indicator.description.high.school', + defaultMessage: 'Percent of people ages 25 years or older whose education level is less than a high school diploma', + description: 'Percent of people ages 25 years or older whose education level is less than a high school diploma', }, }); - export const DOWNLOAD_DRAFT = { PARAGRAPH_1: Date: Mon, 13 Dec 2021 16:41:50 -0500 Subject: [PATCH 09/12] Bump lxml from 4.6.3 to 4.6.5 in /data/data-pipeline (#1043) Bumps [lxml](https://github.com/lxml/lxml) from 4.6.3 to 4.6.5. - [Release notes](https://github.com/lxml/lxml/releases) - [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt) - [Commits](https://github.com/lxml/lxml/compare/lxml-4.6.3...lxml-4.6.5) --- updated-dependencies: - dependency-name: lxml dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- data/data-pipeline/poetry.lock | 113 +++++++++++++++++++-------------- 1 file changed, 64 insertions(+), 49 deletions(-) diff --git a/data/data-pipeline/poetry.lock b/data/data-pipeline/poetry.lock index 3b9ff7bb..1e9902f9 100644 --- a/data/data-pipeline/poetry.lock +++ b/data/data-pipeline/poetry.lock @@ -791,7 +791,7 @@ toml = "*" [[package]] name = "lxml" -version = "4.6.3" +version = "4.6.5" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." category = "main" optional = false @@ -2065,54 +2065,66 @@ liccheck = [ {file = "liccheck-0.6.2.tar.gz", hash = "sha256:5667be7c9ef6496bd381e709e938e9fe51c31d601afc44965615cdfbce375eab"}, ] lxml = [ - {file = "lxml-4.6.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:df7c53783a46febb0e70f6b05df2ba104610f2fb0d27023409734a3ecbb78fb2"}, - {file = "lxml-4.6.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:1b7584d421d254ab86d4f0b13ec662a9014397678a7c4265a02a6d7c2b18a75f"}, - {file = "lxml-4.6.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:079f3ae844f38982d156efce585bc540c16a926d4436712cf4baee0cce487a3d"}, - {file = "lxml-4.6.3-cp27-cp27m-win32.whl", hash = "sha256:bc4313cbeb0e7a416a488d72f9680fffffc645f8a838bd2193809881c67dd106"}, - {file = "lxml-4.6.3-cp27-cp27m-win_amd64.whl", hash = "sha256:8157dadbb09a34a6bd95a50690595e1fa0af1a99445e2744110e3dca7831c4ee"}, - {file = "lxml-4.6.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7728e05c35412ba36d3e9795ae8995e3c86958179c9770e65558ec3fdfd3724f"}, - {file = "lxml-4.6.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:4bff24dfeea62f2e56f5bab929b4428ae6caba2d1eea0c2d6eb618e30a71e6d4"}, - {file = "lxml-4.6.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:64812391546a18896adaa86c77c59a4998f33c24788cadc35789e55b727a37f4"}, - {file = "lxml-4.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c1a40c06fd5ba37ad39caa0b3144eb3772e813b5fb5b084198a985431c2f1e8d"}, - {file = "lxml-4.6.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:74f7d8d439b18fa4c385f3f5dfd11144bb87c1da034a466c5b5577d23a1d9b51"}, - {file = "lxml-4.6.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f90ba11136bfdd25cae3951af8da2e95121c9b9b93727b1b896e3fa105b2f586"}, - {file = "lxml-4.6.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:4c61b3a0db43a1607d6264166b230438f85bfed02e8cff20c22e564d0faff354"}, - {file = "lxml-4.6.3-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:5c8c163396cc0df3fd151b927e74f6e4acd67160d6c33304e805b84293351d16"}, - {file = "lxml-4.6.3-cp35-cp35m-win32.whl", hash = "sha256:f2380a6376dfa090227b663f9678150ef27543483055cc327555fb592c5967e2"}, - {file = "lxml-4.6.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c4f05c5a7c49d2fb70223d0d5bcfbe474cf928310ac9fa6a7c6dddc831d0b1d4"}, - {file = "lxml-4.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d2e35d7bf1c1ac8c538f88d26b396e73dd81440d59c1ef8522e1ea77b345ede4"}, - {file = "lxml-4.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:289e9ca1a9287f08daaf796d96e06cb2bc2958891d7911ac7cae1c5f9e1e0ee3"}, - {file = "lxml-4.6.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:bccbfc27563652de7dc9bdc595cb25e90b59c5f8e23e806ed0fd623755b6565d"}, - {file = "lxml-4.6.3-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d916d31fd85b2f78c76400d625076d9124de3e4bda8b016d25a050cc7d603f24"}, - {file = "lxml-4.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:820628b7b3135403540202e60551e741f9b6d3304371712521be939470b454ec"}, - {file = "lxml-4.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:c47ff7e0a36d4efac9fd692cfa33fbd0636674c102e9e8d9b26e1b93a94e7617"}, - {file = "lxml-4.6.3-cp36-cp36m-win32.whl", hash = "sha256:5a0a14e264069c03e46f926be0d8919f4105c1623d620e7ec0e612a2e9bf1c04"}, - {file = "lxml-4.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:92e821e43ad382332eade6812e298dc9701c75fe289f2a2d39c7960b43d1e92a"}, - {file = "lxml-4.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:efd7a09678fd8b53117f6bae4fa3825e0a22b03ef0a932e070c0bdbb3a35e654"}, - {file = "lxml-4.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:efac139c3f0bf4f0939f9375af4b02c5ad83a622de52d6dfa8e438e8e01d0eb0"}, - {file = "lxml-4.6.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:0fbcf5565ac01dff87cbfc0ff323515c823081c5777a9fc7703ff58388c258c3"}, - {file = "lxml-4.6.3-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:36108c73739985979bf302006527cf8a20515ce444ba916281d1c43938b8bb96"}, - {file = "lxml-4.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:122fba10466c7bd4178b07dba427aa516286b846b2cbd6f6169141917283aae2"}, - {file = "lxml-4.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:cdaf11d2bd275bf391b5308f86731e5194a21af45fbaaaf1d9e8147b9160ea92"}, - {file = "lxml-4.6.3-cp37-cp37m-win32.whl", hash = "sha256:3439c71103ef0e904ea0a1901611863e51f50b5cd5e8654a151740fde5e1cade"}, - {file = "lxml-4.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:4289728b5e2000a4ad4ab8da6e1db2e093c63c08bdc0414799ee776a3f78da4b"}, - {file = "lxml-4.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b007cbb845b28db4fb8b6a5cdcbf65bacb16a8bd328b53cbc0698688a68e1caa"}, - {file = "lxml-4.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:76fa7b1362d19f8fbd3e75fe2fb7c79359b0af8747e6f7141c338f0bee2f871a"}, - {file = "lxml-4.6.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:26e761ab5b07adf5f555ee82fb4bfc35bf93750499c6c7614bd64d12aaa67927"}, - {file = "lxml-4.6.3-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:e1cbd3f19a61e27e011e02f9600837b921ac661f0c40560eefb366e4e4fb275e"}, - {file = "lxml-4.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:66e575c62792c3f9ca47cb8b6fab9e35bab91360c783d1606f758761810c9791"}, - {file = "lxml-4.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:1b38116b6e628118dea5b2186ee6820ab138dbb1e24a13e478490c7db2f326ae"}, - {file = "lxml-4.6.3-cp38-cp38-win32.whl", hash = "sha256:89b8b22a5ff72d89d48d0e62abb14340d9e99fd637d046c27b8b257a01ffbe28"}, - {file = "lxml-4.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:2a9d50e69aac3ebee695424f7dbd7b8c6d6eb7de2a2eb6b0f6c7db6aa41e02b7"}, - {file = "lxml-4.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ce256aaa50f6cc9a649c51be3cd4ff142d67295bfc4f490c9134d0f9f6d58ef0"}, - {file = "lxml-4.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:7610b8c31688f0b1be0ef882889817939490a36d0ee880ea562a4e1399c447a1"}, - {file = "lxml-4.6.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f8380c03e45cf09f8557bdaa41e1fa7c81f3ae22828e1db470ab2a6c96d8bc23"}, - {file = "lxml-4.6.3-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:3082c518be8e97324390614dacd041bb1358c882d77108ca1957ba47738d9d59"}, - {file = "lxml-4.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:884ab9b29feaca361f7f88d811b1eea9bfca36cf3da27768d28ad45c3ee6f969"}, - {file = "lxml-4.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:6f12e1427285008fd32a6025e38e977d44d6382cf28e7201ed10d6c1698d2a9a"}, - {file = "lxml-4.6.3-cp39-cp39-win32.whl", hash = "sha256:33bb934a044cf32157c12bfcfbb6649807da20aa92c062ef51903415c704704f"}, - {file = "lxml-4.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:542d454665a3e277f76954418124d67516c5f88e51a900365ed54a9806122b83"}, - {file = "lxml-4.6.3.tar.gz", hash = "sha256:39b78571b3b30645ac77b95f7c69d1bffc4cf8c3b157c435a34da72e78c82468"}, + {file = "lxml-4.6.5-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:abcf7daa5ebcc89328326254f6dd6d566adb483d4d00178892afd386ab389de2"}, + {file = "lxml-4.6.5-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3884476a90d415be79adfa4e0e393048630d0d5bcd5757c4c07d8b4b00a1096b"}, + {file = "lxml-4.6.5-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:add017c5bd6b9ec3a5f09248396b6ee2ce61c5621f087eb2269c813cd8813808"}, + {file = "lxml-4.6.5-cp27-cp27m-win32.whl", hash = "sha256:a702005e447d712375433ed0499cb6e1503fadd6c96a47f51d707b4d37b76d3c"}, + {file = "lxml-4.6.5-cp27-cp27m-win_amd64.whl", hash = "sha256:da07c7e7fc9a3f40446b78c54dbba8bfd5c9100dfecb21b65bfe3f57844f5e71"}, + {file = "lxml-4.6.5-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a708c291900c40a7ecf23f1d2384ed0bc0604e24094dd13417c7e7f8f7a50d93"}, + {file = "lxml-4.6.5-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f33d8efb42e4fc2b31b3b4527940b25cdebb3026fb56a80c1c1c11a4271d2352"}, + {file = "lxml-4.6.5-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:f6befb83bca720b71d6bd6326a3b26e9496ae6649e26585de024890fe50f49b8"}, + {file = "lxml-4.6.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:59d77bfa3bea13caee95bc0d3f1c518b15049b97dd61ea8b3d71ce677a67f808"}, + {file = "lxml-4.6.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:68a851176c931e2b3de6214347b767451243eeed3bea34c172127bbb5bf6c210"}, + {file = "lxml-4.6.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7790a273225b0c46e5f859c1327f0f659896cc72eaa537d23aa3ad9ff2a1cc1"}, + {file = "lxml-4.6.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6548fc551de15f310dd0564751d9dc3d405278d45ea9b2b369ed1eccf142e1f5"}, + {file = "lxml-4.6.5-cp310-cp310-win32.whl", hash = "sha256:dc8a0dbb2a10ae8bb609584f5c504789f0f3d0d81840da4849102ec84289f952"}, + {file = "lxml-4.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:1ccbfe5d17835db906f2bab6f15b34194db1a5b07929cba3cf45a96dbfbfefc0"}, + {file = "lxml-4.6.5-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca9a40497f7e97a2a961c04fa8a6f23d790b0521350a8b455759d786b0bcb203"}, + {file = "lxml-4.6.5-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e5b4b0d9440046ead3bd425eb2b852499241ee0cef1ae151038e4f87ede888c4"}, + {file = "lxml-4.6.5-cp35-cp35m-win32.whl", hash = "sha256:87f8f7df70b90fbe7b49969f07b347e3f978f8bd1046bb8ecae659921869202b"}, + {file = "lxml-4.6.5-cp35-cp35m-win_amd64.whl", hash = "sha256:ce52aad32ec6e46d1a91ff8b8014a91538800dd533914bfc4a82f5018d971408"}, + {file = "lxml-4.6.5-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:8021eeff7fabde21b9858ed058a8250ad230cede91764d598c2466b0ba70db8b"}, + {file = "lxml-4.6.5-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:cab343b265e38d4e00649cbbad9278b734c5715f9bcbb72c85a1f99b1a58e19a"}, + {file = "lxml-4.6.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:3534d7c468c044f6aef3c0aff541db2826986a29ea73f2ca831f5d5284d9b570"}, + {file = "lxml-4.6.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdb98f4c9e8a1735efddfaa995b0c96559792da15d56b76428bdfc29f77c4cdb"}, + {file = "lxml-4.6.5-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5ea121cb66d7e5cb396b4c3ca90471252b94e01809805cfe3e4e44be2db3a99c"}, + {file = "lxml-4.6.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:121fc6f71c692b49af6c963b84ab7084402624ffbe605287da362f8af0668ea3"}, + {file = "lxml-4.6.5-cp36-cp36m-win32.whl", hash = "sha256:1a2a7659b8eb93c6daee350a0d844994d49245a0f6c05c747f619386fb90ba04"}, + {file = "lxml-4.6.5-cp36-cp36m-win_amd64.whl", hash = "sha256:2f77556266a8fe5428b8759fbfc4bd70be1d1d9c9b25d2a414f6a0c0b0f09120"}, + {file = "lxml-4.6.5-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:558485218ee06458643b929765ac1eb04519ca3d1e2dcc288517de864c747c33"}, + {file = "lxml-4.6.5-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:ba0006799f21d83c3717fe20e2707a10bbc296475155aadf4f5850f6659b96b9"}, + {file = "lxml-4.6.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:916d457ad84e05b7db52700bad0a15c56e0c3000dcaf1263b2fb7a56fe148996"}, + {file = "lxml-4.6.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c580c2a61d8297a6e47f4d01f066517dbb019be98032880d19ece7f337a9401d"}, + {file = "lxml-4.6.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a21b78af7e2e13bec6bea12fc33bc05730197674f3e5402ce214d07026ccfebd"}, + {file = "lxml-4.6.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:46515773570a33eae13e451c8fcf440222ef24bd3b26f40774dd0bd8b6db15b2"}, + {file = "lxml-4.6.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:124f09614f999551ac65e5b9875981ce4b66ac4b8e2ba9284572f741935df3d9"}, + {file = "lxml-4.6.5-cp37-cp37m-win32.whl", hash = "sha256:b4015baed99d046c760f09a4c59d234d8f398a454380c3cf0b859aba97136090"}, + {file = "lxml-4.6.5-cp37-cp37m-win_amd64.whl", hash = "sha256:12ae2339d32a2b15010972e1e2467345b7bf962e155671239fba74c229564b7f"}, + {file = "lxml-4.6.5-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:76b6c296e4f7a1a8a128aec42d128646897f9ae9a700ef6839cdc9b3900db9b5"}, + {file = "lxml-4.6.5-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:534032a5ceb34bba1da193b7d386ac575127cc39338379f39a164b10d97ade89"}, + {file = "lxml-4.6.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:60aeb14ff9022d2687ef98ce55f6342944c40d00916452bb90899a191802137a"}, + {file = "lxml-4.6.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9801bcd52ac9c795a7d81ea67471a42cffe532e46cfb750cd5713befc5c019c0"}, + {file = "lxml-4.6.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3b95fb7e6f9c2f53db88f4642231fc2b8907d854e614710996a96f1f32018d5c"}, + {file = "lxml-4.6.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:642eb4cabd997c9b949a994f9643cd8ae00cf4ca8c5cd9c273962296fadf1c44"}, + {file = "lxml-4.6.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:af4139172ff0263d269abdcc641e944c9de4b5d660894a3ec7e9f9db63b56ac9"}, + {file = "lxml-4.6.5-cp38-cp38-win32.whl", hash = "sha256:57cf05466917e08f90e323f025b96f493f92c0344694f5702579ab4b7e2eb10d"}, + {file = "lxml-4.6.5-cp38-cp38-win_amd64.whl", hash = "sha256:4f415624cf8b065796649a5e4621773dc5c9ea574a944c76a7f8a6d3d2906b41"}, + {file = "lxml-4.6.5-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:7679bb6e4d9a3978a46ab19a3560e8d2b7265ef3c88152e7fdc130d649789887"}, + {file = "lxml-4.6.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c34234a1bc9e466c104372af74d11a9f98338a3f72fae22b80485171a64e0144"}, + {file = "lxml-4.6.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4b9390bf973e3907d967b75be199cf1978ca8443183cf1e78ad80ad8be9cf242"}, + {file = "lxml-4.6.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fcc849b28f584ed1dbf277291ded5c32bb3476a37032df4a1d523b55faa5f944"}, + {file = "lxml-4.6.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:46f21f2600d001af10e847df9eb3b832e8a439f696c04891bcb8a8cedd859af9"}, + {file = "lxml-4.6.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:99cf827f5a783038eb313beee6533dddb8bdb086d7269c5c144c1c952d142ace"}, + {file = "lxml-4.6.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:925174cafb0f1179a7fd38da90302555d7445e34c9ece68019e53c946be7f542"}, + {file = "lxml-4.6.5-cp39-cp39-win32.whl", hash = "sha256:12d8d6fe3ddef629ac1349fa89a638b296a34b6529573f5055d1cb4e5245f73b"}, + {file = "lxml-4.6.5-cp39-cp39-win_amd64.whl", hash = "sha256:a52e8f317336a44836475e9c802f51c2dc38d612eaa76532cb1d17690338b63b"}, + {file = "lxml-4.6.5-pp37-pypy37_pp73-macosx_10_14_x86_64.whl", hash = "sha256:11ae552a78612620afd15625be9f1b82e3cc2e634f90d6b11709b10a100cba59"}, + {file = "lxml-4.6.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:473701599665d874919d05bb33b56180447b3a9da8d52d6d9799f381ce23f95c"}, + {file = "lxml-4.6.5-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:7f00cc64b49d2ef19ddae898a3def9dd8fda9c3d27c8a174c2889ee757918e71"}, + {file = "lxml-4.6.5-pp38-pypy38_pp73-macosx_10_14_x86_64.whl", hash = "sha256:73e8614258404b2689a26cb5d002512b8bc4dfa18aca86382f68f959aee9b0c8"}, + {file = "lxml-4.6.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:ff44de36772b05c2eb74f2b4b6d1ae29b8f41ed5506310ce1258d44826ee38c1"}, + {file = "lxml-4.6.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5d5254c815c186744c8f922e2ce861a2bdeabc06520b4b30b2f7d9767791ce6e"}, + {file = "lxml-4.6.5.tar.gz", hash = "sha256:6e84edecc3a82f90d44ddee2ee2a2630d4994b8471816e226d2b771cda7ac4ca"}, ] markupsafe = [ {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, @@ -2312,8 +2324,11 @@ packaging = [ {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, ] pandas = [ + {file = "pandas-1.3.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9707bdc1ea9639c886b4d3be6e2a45812c1ac0c2080f94c31b71c9fa35556f9b"}, + {file = "pandas-1.3.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c2f44425594ae85e119459bb5abb0748d76ef01d9c08583a667e3339e134218e"}, {file = "pandas-1.3.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:372d72a3d8a5f2dbaf566a5fa5fa7f230842ac80f29a931fb4b071502cf86b9a"}, {file = "pandas-1.3.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99d2350adb7b6c3f7f8f0e5dfb7d34ff8dd4bc0a53e62c445b7e43e163fce63"}, + {file = "pandas-1.3.4-cp310-cp310-win_amd64.whl", hash = "sha256:4acc28364863127bca1029fb72228e6f473bb50c32e77155e80b410e2068eeac"}, {file = "pandas-1.3.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c2646458e1dce44df9f71a01dc65f7e8fa4307f29e5c0f2f92c97f47a5bf22f5"}, {file = "pandas-1.3.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5298a733e5bfbb761181fd4672c36d0c627320eb999c59c65156c6a90c7e1b4f"}, {file = "pandas-1.3.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22808afb8f96e2269dcc5b846decacb2f526dd0b47baebc63d913bf847317c8f"}, From c9caa97ce3b5bfa931ebe0cd3a1c7a4f830ccfe9 Mon Sep 17 00:00:00 2001 From: Vim <86254807+vim-usds@users.noreply.github.com> Date: Tue, 14 Dec 2021 11:02:05 -0500 Subject: [PATCH 10/12] Remove GU and VI (#1028) - comment out GU and VI code - remove search from feature flag - keep comment on search production bug when wrapping div - add note on territories - add territories copy to constants --- client/src/components/J40Map.tsx | 9 +++-- client/src/components/MapWrapper/index.tsx | 8 ++++ .../src/components/territoryFocusControl.tsx | 20 +++++----- client/src/data/copy/explore.tsx | 37 ++++++++++++++++++- 4 files changed, 59 insertions(+), 15 deletions(-) diff --git a/client/src/components/J40Map.tsx b/client/src/components/J40Map.tsx index 1d63ee39..4123534b 100644 --- a/client/src/components/J40Map.tsx +++ b/client/src/components/J40Map.tsx @@ -157,7 +157,10 @@ const J40Map = ({location}: IJ40Interface) => { {/* - The MapSearch component is wrapped in a div in order for MapSearch to render correctly in a production build. + The MapSearch component is no longer wrapped in a div in order to allow this feature + to be behind a feature flag. This was causing a bug for MapSearch to render + correctly in a production build. Leaving this comment here in case future flags are + needed in this component When the MapSearch component is placed behind a feature flag without a div wrapping MapSearch, the production build will inject CSS due to the null in the false conditional @@ -168,9 +171,7 @@ const J40Map = ({location}: IJ40Interface) => { to ensure the production build works and that MapSearch and the map (ReactMapGL) render correctly. */} -
    - {'sr' in flags ? : null} -
    + {
    + + + +

    {EXPLORE_COPY.NOTE_ON_TERRITORIES.INTRO}

    +

    {EXPLORE_COPY.NOTE_ON_TERRITORIES.PARA_1}

    +

    {EXPLORE_COPY.NOTE_ON_TERRITORIES.PARA_2}

    +
    +
    ); }; diff --git a/client/src/components/territoryFocusControl.tsx b/client/src/components/territoryFocusControl.tsx index 0ec073b0..fb7e21f1 100644 --- a/client/src/components/territoryFocusControl.tsx +++ b/client/src/components/territoryFocusControl.tsx @@ -66,10 +66,10 @@ const TerritoryFocusControl = ({goToPlace}: ITerritoryFocusControl) => { short: intl.formatMessage(EXPLORE_COPY.MAP.PR_SHORT), long: intl.formatMessage(EXPLORE_COPY.MAP.PR_LONG), }, - { - short: intl.formatMessage(EXPLORE_COPY.MAP.GU_SHORT), - long: intl.formatMessage(EXPLORE_COPY.MAP.GU_LONG), - }, + // { + // short: intl.formatMessage(EXPLORE_COPY.MAP.GU_SHORT), + // long: intl.formatMessage(EXPLORE_COPY.MAP.GU_LONG), + // }, { short: intl.formatMessage(EXPLORE_COPY.MAP.AS_SHORT), long: intl.formatMessage(EXPLORE_COPY.MAP.AS_LONG), @@ -78,10 +78,10 @@ const TerritoryFocusControl = ({goToPlace}: ITerritoryFocusControl) => { short: intl.formatMessage(EXPLORE_COPY.MAP.MP_SHORT), long: intl.formatMessage(EXPLORE_COPY.MAP.MP_LONG), }, - { - short: intl.formatMessage(EXPLORE_COPY.MAP.VI_SHORT), - long: intl.formatMessage(EXPLORE_COPY.MAP.VI_LONG), - }, + // { + // short: intl.formatMessage(EXPLORE_COPY.MAP.VI_SHORT), + // long: intl.formatMessage(EXPLORE_COPY.MAP.VI_LONG), + // }, ]; // the offset for this array should map the territories variable const territoriesIconClassName = [ @@ -89,10 +89,10 @@ const TerritoryFocusControl = ({goToPlace}: ITerritoryFocusControl) => { 'mapboxgl-ctrl-zoom-to-ak', 'mapboxgl-ctrl-zoom-to-hi', 'mapboxgl-ctrl-zoom-to-pr', - 'mapboxgl-ctrl-zoom-to-gu', + // 'mapboxgl-ctrl-zoom-to-gu', 'mapboxgl-ctrl-zoom-to-as', 'mapboxgl-ctrl-zoom-to-mp', - 'mapboxgl-ctrl-zoom-to-vi', + // 'mapboxgl-ctrl-zoom-to-vi', ]; return ( diff --git a/client/src/data/copy/explore.tsx b/client/src/data/copy/explore.tsx index 5b3c12a4..840f7695 100644 --- a/client/src/data/copy/explore.tsx +++ b/client/src/data/copy/explore.tsx @@ -153,6 +153,7 @@ export const MAP = defineMessages({ }, }); + // Side Panel copy export const SIDE_PANEL_INITIAL_STATE = defineMessages({ TITLE: { @@ -407,7 +408,6 @@ export const SIDE_PANEL_INDICATORS = defineMessages({ }, }); - export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({ EXP_AG_LOSS: { id: 'areaDetail.indicator.description.exp.ag.loss', @@ -576,6 +576,41 @@ export const DOWNLOAD_DRAFT = { />, }; +export const NOTE_ON_TERRITORIES = { + INTRO: , + PARA_1: Methodology & data, + }} + />, + PARA_2: , + +}; export const HOW_YOU_CAN_HELP_LIST_ITEMS = { HEADING: Date: Tue, 14 Dec 2021 13:11:35 -0500 Subject: [PATCH 11/12] Place spanish content on feature ?flags=sp (#1027) - update snapshots --- .../GovernmentBanner/GovernmentBanner.tsx | 19 ++++++++-- .../GovernmentBanner.test.tsx.snap | 16 --------- .../__snapshots__/J40Header.test.tsx.snap | 35 +------------------ client/src/components/Language/Language.tsx | 9 +++-- .../__snapshots__/Language.test.tsx.snap | 21 +---------- .../pages/__snapshots__/contact.test.tsx.snap | 35 +------------------ .../pages/__snapshots__/index.test.tsx.snap | 35 +------------------ .../__snapshots__/methodology.test.tsx.snap | 35 +------------------ 8 files changed, 29 insertions(+), 176 deletions(-) diff --git a/client/src/components/GovernmentBanner/GovernmentBanner.tsx b/client/src/components/GovernmentBanner/GovernmentBanner.tsx index 9bad3707..950a59a0 100644 --- a/client/src/components/GovernmentBanner/GovernmentBanner.tsx +++ b/client/src/components/GovernmentBanner/GovernmentBanner.tsx @@ -2,17 +2,32 @@ import React from 'react'; import {GovBanner} from '@trussworks/react-uswds'; import {useIntl} from 'gatsby-plugin-intl'; +// Contexts: +import {useFlags} from '../../contexts/FlagContext'; + import Language from '../Language'; import * as styles from './GovernmentBanner.module.scss'; const GovernmentBanner = () => { const intl = useIntl(); + const flags = useFlags(); + return (
    - - + + {'sp' in flags ? ( + <> + + + + ) : ( + <> + + + )} +
    ); diff --git a/client/src/components/GovernmentBanner/__snapshots__/GovernmentBanner.test.tsx.snap b/client/src/components/GovernmentBanner/__snapshots__/GovernmentBanner.test.tsx.snap index 43e2a7a4..d059c99a 100644 --- a/client/src/components/GovernmentBanner/__snapshots__/GovernmentBanner.test.tsx.snap +++ b/client/src/components/GovernmentBanner/__snapshots__/GovernmentBanner.test.tsx.snap @@ -135,22 +135,6 @@ exports[`rendering of the GovernmentBanner checks if component renders 1`] = `
    -
    diff --git a/client/src/components/J40Header/__snapshots__/J40Header.test.tsx.snap b/client/src/components/J40Header/__snapshots__/J40Header.test.tsx.snap index ef82c5b6..cf3aa206 100644 --- a/client/src/components/J40Header/__snapshots__/J40Header.test.tsx.snap +++ b/client/src/components/J40Header/__snapshots__/J40Header.test.tsx.snap @@ -140,22 +140,6 @@ exports[`rendering of the J40Header checks if component renders 1`] = `

    -
    @@ -277,24 +261,7 @@ exports[`rendering of the J40Header checks if component renders 1`] = `
  • - +
  • diff --git a/client/src/components/Language/Language.tsx b/client/src/components/Language/Language.tsx index 857ba1a2..08ad0a2d 100644 --- a/client/src/components/Language/Language.tsx +++ b/client/src/components/Language/Language.tsx @@ -1,6 +1,9 @@ import React from 'react'; import {IntlContextConsumer, changeLocale} from 'gatsby-plugin-intl'; +// Contexts: +import {useFlags} from '../../contexts/FlagContext'; + // @ts-ignore import languageIcon from '/node_modules/uswds/dist/img/usa-icons/language.svg'; import * as styles from './Language.module.scss'; @@ -15,7 +18,9 @@ interface ILanguageProps { } const Language = ({isDesktop}:ILanguageProps) => { - return ( + const flags = useFlags(); + + return 'sp' in flags ? (
    {'language @@ -33,7 +38,7 @@ const Language = ({isDesktop}:ILanguageProps) => { }
    - ); + ) : null; }; export default Language; diff --git a/client/src/components/Language/__snapshots__/Language.test.tsx.snap b/client/src/components/Language/__snapshots__/Language.test.tsx.snap index c3ff39a7..4bc09ab1 100644 --- a/client/src/components/Language/__snapshots__/Language.test.tsx.snap +++ b/client/src/components/Language/__snapshots__/Language.test.tsx.snap @@ -1,22 +1,3 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`rendering of the Language checks if component renders 1`] = ` - - - -`; +exports[`rendering of the Language checks if component renders 1`] = ``; diff --git a/client/src/pages/__snapshots__/contact.test.tsx.snap b/client/src/pages/__snapshots__/contact.test.tsx.snap index b0dddf0b..53aee80d 100644 --- a/client/src/pages/__snapshots__/contact.test.tsx.snap +++ b/client/src/pages/__snapshots__/contact.test.tsx.snap @@ -140,22 +140,6 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
    -
    @@ -277,24 +261,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
  • - +
  • diff --git a/client/src/pages/__snapshots__/index.test.tsx.snap b/client/src/pages/__snapshots__/index.test.tsx.snap index 840c8ab9..c93feba8 100644 --- a/client/src/pages/__snapshots__/index.test.tsx.snap +++ b/client/src/pages/__snapshots__/index.test.tsx.snap @@ -140,22 +140,6 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
    -
    @@ -277,24 +261,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
  • - +
  • diff --git a/client/src/pages/__snapshots__/methodology.test.tsx.snap b/client/src/pages/__snapshots__/methodology.test.tsx.snap index 099e00c6..7eb5cde0 100644 --- a/client/src/pages/__snapshots__/methodology.test.tsx.snap +++ b/client/src/pages/__snapshots__/methodology.test.tsx.snap @@ -140,22 +140,6 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
    -
    @@ -277,24 +261,7 @@ exports[`rendering of the DatasetContainer checks if various text fields are vis
  • - +
  • From 0d10534725d1004c2fd4e1349804aab8e5e5f03c Mon Sep 17 00:00:00 2001 From: Lucas Merrill Brown Date: Tue, 14 Dec 2021 15:41:06 -0500 Subject: [PATCH 12/12] Issue 1044: Add low HS education fields to tiles and download (#1046) --- .../data_pipeline/etl/score/constants.py | 6 +++++ .../tests/sample_data/score_data_initial.csv | 6 ++--- .../snapshots/downloadable_data_expected.pkl | Bin 7803 -> 7902 bytes .../tests/snapshots/score_data_expected.pkl | Bin 43496 -> 43595 bytes .../snapshots/score_transformed_expected.pkl | Bin 43113 -> 43212 bytes .../tests/snapshots/tile_data_expected.pkl | Bin 3000 -> 3034 bytes ...pare_two_score_files_for_differences.ipynb | 10 ++++--- .../data_pipeline/score/field_names.py | 6 +++++ .../data_pipeline/score/score_l.py | 25 +++++++++--------- 9 files changed, 34 insertions(+), 19 deletions(-) diff --git a/data/data-pipeline/data_pipeline/etl/score/constants.py b/data/data-pipeline/data_pipeline/etl/score/constants.py index 8341ffbb..e1c15c77 100644 --- a/data/data-pipeline/data_pipeline/etl/score/constants.py +++ b/data/data-pipeline/data_pipeline/etl/score/constants.py @@ -140,11 +140,13 @@ TILES_SCORE_COLUMNS = { field_names.POVERTY_LOW_HS_EDUCATION_FIELD: "PLHSE", field_names.LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD: "LMILHSE", field_names.UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD: "ULHSE", + field_names.LOW_HS_EDUCATION_FIELD: "LHE", field_names.FPL_200_SERIES: "FPL200S", field_names.THRESHOLD_COUNT: "TC", field_names.ISLAND_AREAS_UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD: "IAULHSE", field_names.ISLAND_AREAS_POVERTY_LOW_HS_EDUCATION_FIELD: "ISPLHSE", field_names.ISLAND_AREAS_LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD: "IALMILHSE", + field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD: "IALHE", } # columns to round floats to 2 decimals @@ -178,6 +180,8 @@ TILES_SCORE_FLOAT_COLUMNS = [ field_names.TSDF_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.TRAFFIC_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.UNEMPLOYMENT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.LOW_HS_EDUCATION_FIELD, + field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD, field_names.WASTEWATER_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, field_names.SCORE_L + field_names.PERCENTILE_FIELD_SUFFIX, ] @@ -264,6 +268,7 @@ DOWNLOADABLE_SCORE_COLUMNS = [ field_names.POVERTY_LOW_HS_EDUCATION_FIELD, field_names.HIGH_SCHOOL_ED_FIELD, field_names.HIGH_SCHOOL_ED_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, + field_names.LOW_HS_EDUCATION_FIELD, field_names.THRESHOLD_COUNT, field_names.UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD, field_names.COMBINED_UNEMPLOYMENT_2010, @@ -272,4 +277,5 @@ DOWNLOADABLE_SCORE_COLUMNS = [ field_names.ISLAND_AREAS_UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD, field_names.ISLAND_AREAS_POVERTY_LOW_HS_EDUCATION_FIELD, field_names.ISLAND_AREAS_LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD, + field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD, ] diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv b/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv index 6b6ab712..8ff6a4aa 100644 --- a/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv +++ b/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv @@ -1,3 +1,3 @@ -GEOID10_TRACT,Persistent Poverty Census Tract,Housing burden (percent),Total population,Median household income (% of state median household income),Current asthma among adults aged >=18 years,Coronary heart disease among adults aged >=18 years,Cancer (excluding skin cancer) among adults aged >=18 years,Current lack of health insurance among adults aged 18-64 years,Diagnosed diabetes among adults aged >=18 years,Physical health not good for >=14 days among adults aged >=18 years,Percent of individuals < 100% Federal Poverty Line,Percent of individuals < 150% Federal Poverty Line,Percent of individuals < 200% Federal Poverty Line,Area Median Income (State or metropolitan),Median household income in the past 12 months,Energy burden,FEMA Risk Index Expected Annual Loss Score,Urban Heuristic Flag,Air toxics cancer risk,Respiratory hazard index,Diesel particulate matter,Particulate matter (PM2.5),Ozone,Traffic proximity and volume,Proximity to Risk Management Plan (RMP) facilities,Proximity to TSDF sites,Proximity to NPL sites,Wastewater discharge,Percent pre-1960s housing (lead paint indicator),Individuals under 5 years old,Individuals over 64 years old,Linguistic isolation (percent),Percent of households in linguistic isolation,Poverty (Less than 200% of federal poverty line),Percent individuals age 25 or over with less than high school degree,Unemployed civilians (percent),Median value ($) of owner-occupied housing units,Percent enrollment in college or graduate school,Expected building loss rate (Natural Hazards Risk Index),Expected agricultural loss rate (Natural Hazards Risk Index),Expected population loss rate (Natural Hazards Risk Index),Percent individuals age 25 or over with less than high school degree in 2009,Percentage households below 100% of federal poverty line in 2009,Unemployed civilians (percent) in 2009,Unemployed civilians (percent) in 2010,Percent of individuals < 100% Federal Poverty Line in 2010,Total population in 2009,Summer days above 90F,Percent low access to healthy food,Percent impenetrable surface areas,Third grade reading proficiency,Median household income as a percent of area median income,Life expectancy (years),Median household income as a percent of territory median income in 2009,Housing burden (percent) (percentile),Housing burden (percent) (value urban only),Housing burden (percent) (percentile urban only),Housing burden (percent) (value rural only),Housing burden (percent) (percentile rural only),Housing burden (percent) (percentile urban/rural),Housing burden (percent) (min-max normalized),Total population (percentile),Total population (value urban only),Total population (percentile urban only),Total population (value rural only),Total population (percentile rural only),Total population (percentile urban/rural),Total population (min-max normalized),Median household income (% of state median household income) (percentile),Median household income (% of state median household income) (value urban only),Median household income (% of state median household income) (percentile urban only),Median household income (% of state median household income) (value rural only),Median household income (% of state median household income) (percentile rural only),Median household income (% of state median household income) (percentile urban/rural),Median household income (% of state median household income) (min-max normalized),Current asthma among adults aged >=18 years (percentile),Current asthma among adults aged >=18 years (value urban only),Current asthma among adults aged >=18 years (percentile urban only),Current asthma among adults aged >=18 years (value rural only),Current asthma among adults aged >=18 years (percentile rural only),Current asthma among adults aged >=18 years (percentile urban/rural),Current asthma among adults aged >=18 years (min-max normalized),Coronary heart disease among adults aged >=18 years (percentile),Coronary heart disease among adults aged >=18 years (value urban only),Coronary heart disease among adults aged >=18 years (percentile urban only),Coronary heart disease among adults aged >=18 years (value rural only),Coronary heart disease among adults aged >=18 years (percentile rural only),Coronary heart disease among adults aged >=18 years (percentile urban/rural),Coronary heart disease among adults aged >=18 years (min-max normalized),Cancer (excluding skin cancer) among adults aged >=18 years (percentile),Cancer (excluding skin cancer) among adults aged >=18 years (value urban only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile urban only),Cancer (excluding skin cancer) among adults aged >=18 years (value rural only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile rural only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile urban/rural),Cancer (excluding skin cancer) among adults aged >=18 years (min-max normalized),Current lack of health insurance among adults aged 18-64 years (percentile),Current lack of health insurance among adults aged 18-64 years (value urban only),Current lack of health insurance among adults aged 18-64 years (percentile urban only),Current lack of health insurance among adults aged 18-64 years (value rural only),Current lack of health insurance among adults aged 18-64 years (percentile rural only),Current lack of health insurance among adults aged 18-64 years (percentile urban/rural),Current lack of health insurance among adults aged 18-64 years (min-max normalized),Diagnosed diabetes among adults aged >=18 years (percentile),Diagnosed diabetes among adults aged >=18 years (value urban only),Diagnosed diabetes among adults aged >=18 years (percentile urban only),Diagnosed diabetes among adults aged >=18 years (value rural only),Diagnosed diabetes among adults aged >=18 years (percentile rural only),Diagnosed diabetes among adults aged >=18 years (percentile urban/rural),Diagnosed diabetes among adults aged >=18 years (min-max normalized),Physical health not good for >=14 days among adults aged >=18 years (percentile),Physical health not good for >=14 days among adults aged >=18 years (value urban only),Physical health not good for >=14 days among adults aged >=18 years (percentile urban only),Physical health not good for >=14 days among adults aged >=18 years (value rural only),Physical health not good for >=14 days among adults aged >=18 years (percentile rural only),Physical health not good for >=14 days among adults aged >=18 years (percentile urban/rural),Physical health not good for >=14 days among adults aged >=18 years (min-max normalized),Percent of individuals < 100% Federal Poverty Line (percentile),Percent of individuals < 100% Federal Poverty Line (value urban only),Percent of individuals < 100% Federal Poverty Line (percentile urban only),Percent of individuals < 100% Federal Poverty Line (value rural only),Percent of individuals < 100% Federal Poverty Line (percentile rural only),Percent of individuals < 100% Federal Poverty Line (percentile urban/rural),Percent of individuals < 100% Federal Poverty Line (min-max normalized),Percent of individuals < 150% Federal Poverty Line (percentile),Percent of individuals < 150% Federal Poverty Line (value urban only),Percent of individuals < 150% Federal Poverty Line (percentile urban only),Percent of individuals < 150% Federal Poverty Line (value rural only),Percent of individuals < 150% Federal Poverty Line (percentile rural only),Percent of individuals < 150% Federal Poverty Line (percentile urban/rural),Percent of individuals < 150% Federal Poverty Line (min-max normalized),Percent of individuals < 200% Federal Poverty Line (percentile),Percent of individuals < 200% Federal Poverty Line (value urban only),Percent of individuals < 200% Federal Poverty Line (percentile urban only),Percent of individuals < 200% Federal Poverty Line (value rural only),Percent of individuals < 200% Federal Poverty Line (percentile rural only),Percent of individuals < 200% Federal Poverty Line (percentile urban/rural),Percent of individuals < 200% Federal Poverty Line (min-max normalized),Area Median Income (State or metropolitan) (percentile),Area Median Income (State or metropolitan) (value urban only),Area Median Income (State or metropolitan) (percentile urban only),Area Median Income (State or metropolitan) (value rural only),Area Median Income (State or metropolitan) (percentile rural only),Area Median Income (State or metropolitan) (percentile urban/rural),Area Median Income (State or metropolitan) (min-max normalized),Median household income in the past 12 months (percentile),Median household income in the past 12 months (value urban only),Median household income in the past 12 months (percentile urban only),Median household income in the past 12 months (value rural only),Median household income in the past 12 months (percentile rural only),Median household income in the past 12 months (percentile urban/rural),Median household income in the past 12 months (min-max normalized),Energy burden (percentile),Energy burden (value urban only),Energy burden (percentile urban only),Energy burden (value rural only),Energy burden (percentile rural only),Energy burden (percentile urban/rural),Energy burden (min-max normalized),FEMA Risk Index Expected Annual Loss Score (percentile),FEMA Risk Index Expected Annual Loss Score (value urban only),FEMA Risk Index Expected Annual Loss Score (percentile urban only),FEMA Risk Index Expected Annual Loss Score (value rural only),FEMA Risk Index Expected Annual Loss Score (percentile rural only),FEMA Risk Index Expected Annual Loss Score (percentile urban/rural),FEMA Risk Index Expected Annual Loss Score (min-max normalized),Urban Heuristic Flag (percentile),Urban Heuristic Flag (value urban only),Urban Heuristic Flag (percentile urban only),Urban Heuristic Flag (value rural only),Urban Heuristic Flag (percentile rural only),Urban Heuristic Flag (percentile urban/rural),Urban Heuristic Flag (min-max normalized),Air toxics cancer risk (percentile),Air toxics cancer risk (value urban only),Air toxics cancer risk (percentile urban only),Air toxics cancer risk (value rural only),Air toxics cancer risk (percentile rural only),Air toxics cancer risk (percentile urban/rural),Air toxics cancer risk (min-max normalized),Respiratory hazard index (percentile),Respiratory hazard index (value urban only),Respiratory hazard index (percentile urban only),Respiratory hazard index (value rural only),Respiratory hazard index (percentile rural only),Respiratory hazard index (percentile urban/rural),Respiratory hazard index (min-max normalized),Diesel particulate matter (percentile),Diesel particulate matter (value urban only),Diesel particulate matter (percentile urban only),Diesel particulate matter (value rural only),Diesel particulate matter (percentile rural only),Diesel particulate matter (percentile urban/rural),Diesel particulate matter (min-max normalized),Particulate matter (PM2.5) (percentile),Particulate matter (PM2.5) (value urban only),Particulate matter (PM2.5) (percentile urban only),Particulate matter (PM2.5) (value rural only),Particulate matter (PM2.5) (percentile rural only),Particulate matter (PM2.5) (percentile urban/rural),Particulate matter (PM2.5) (min-max normalized),Ozone (percentile),Ozone (value urban only),Ozone (percentile urban only),Ozone (value rural only),Ozone (percentile rural only),Ozone (percentile urban/rural),Ozone (min-max normalized),Traffic proximity and volume (percentile),Traffic proximity and volume (value urban only),Traffic proximity and volume (percentile urban only),Traffic proximity and volume (value rural only),Traffic proximity and volume (percentile rural only),Traffic proximity and volume (percentile urban/rural),Traffic proximity and volume (min-max normalized),Proximity to Risk Management Plan (RMP) facilities (percentile),Proximity to Risk Management Plan (RMP) facilities (value urban only),Proximity to Risk Management Plan (RMP) facilities (percentile urban only),Proximity to Risk Management Plan (RMP) facilities (value rural only),Proximity to Risk Management Plan (RMP) facilities (percentile rural only),Proximity to Risk Management Plan (RMP) facilities (percentile urban/rural),Proximity to Risk Management Plan (RMP) facilities (min-max normalized),Proximity to TSDF sites (percentile),Proximity to TSDF sites (value urban only),Proximity to TSDF sites (percentile urban only),Proximity to TSDF sites (value rural only),Proximity to TSDF sites (percentile rural only),Proximity to TSDF sites (percentile urban/rural),Proximity to TSDF sites (min-max normalized),Proximity to NPL sites (percentile),Proximity to NPL sites (value urban only),Proximity to NPL sites (percentile urban only),Proximity to NPL sites (value rural only),Proximity to NPL sites (percentile rural only),Proximity to NPL sites (percentile urban/rural),Proximity to NPL sites (min-max normalized),Wastewater discharge (percentile),Wastewater discharge (value urban only),Wastewater discharge (percentile urban only),Wastewater discharge (value rural only),Wastewater discharge (percentile rural only),Wastewater discharge (percentile urban/rural),Wastewater discharge (min-max normalized),Percent pre-1960s housing (lead paint indicator) (percentile),Percent pre-1960s housing (lead paint indicator) (value urban only),Percent pre-1960s housing (lead paint indicator) (percentile urban only),Percent pre-1960s housing (lead paint indicator) (value rural only),Percent pre-1960s housing (lead paint indicator) (percentile rural only),Percent pre-1960s housing (lead paint indicator) (percentile urban/rural),Percent pre-1960s housing (lead paint indicator) (min-max normalized),Individuals under 5 years old (percentile),Individuals under 5 years old (value urban only),Individuals under 5 years old (percentile urban only),Individuals under 5 years old (value rural only),Individuals under 5 years old (percentile rural only),Individuals under 5 years old (percentile urban/rural),Individuals under 5 years old (min-max normalized),Individuals over 64 years old (percentile),Individuals over 64 years old (value urban only),Individuals over 64 years old (percentile urban only),Individuals over 64 years old (value rural only),Individuals over 64 years old (percentile rural only),Individuals over 64 years old (percentile urban/rural),Individuals over 64 years old (min-max normalized),Linguistic isolation (percent) (percentile),Linguistic isolation (percent) (value urban only),Linguistic isolation (percent) (percentile urban only),Linguistic isolation (percent) (value rural only),Linguistic isolation (percent) (percentile rural only),Linguistic isolation (percent) (percentile urban/rural),Linguistic isolation (percent) (min-max normalized),Percent of households in linguistic isolation (percentile),Percent of households in linguistic isolation (value urban only),Percent of households in linguistic isolation (percentile urban only),Percent of households in linguistic isolation (value rural only),Percent of households in linguistic isolation (percentile rural only),Percent of households in linguistic isolation (percentile urban/rural),Percent of households in linguistic isolation (min-max normalized),Poverty (Less than 200% of federal poverty line) (percentile),Poverty (Less than 200% of federal poverty line) (value urban only),Poverty (Less than 200% of federal poverty line) (percentile urban only),Poverty (Less than 200% of federal poverty line) (value rural only),Poverty (Less than 200% of federal poverty line) (percentile rural only),Poverty (Less than 200% of federal poverty line) (percentile urban/rural),Poverty (Less than 200% of federal poverty line) (min-max normalized),Percent individuals age 25 or over with less than high school degree (percentile),Percent individuals age 25 or over with less than high school degree (value urban only),Percent individuals age 25 or over with less than high school degree (percentile urban only),Percent individuals age 25 or over with less than high school degree (value rural only),Percent individuals age 25 or over with less than high school degree (percentile rural only),Percent individuals age 25 or over with less than high school degree (percentile urban/rural),Percent individuals age 25 or over with less than high school degree (min-max normalized),Unemployed civilians (percent) (percentile),Unemployed civilians (percent) (value urban only),Unemployed civilians (percent) (percentile urban only),Unemployed civilians (percent) (value rural only),Unemployed civilians (percent) (percentile rural only),Unemployed civilians (percent) (percentile urban/rural),Unemployed civilians (percent) (min-max normalized),Median value ($) of owner-occupied housing units (percentile),Median value ($) of owner-occupied housing units (value urban only),Median value ($) of owner-occupied housing units (percentile urban only),Median value ($) of owner-occupied housing units (value rural only),Median value ($) of owner-occupied housing units (percentile rural only),Median value ($) of owner-occupied housing units (percentile urban/rural),Median value ($) of owner-occupied housing units (min-max normalized),Percent enrollment in college or graduate school (percentile),Percent enrollment in college or graduate school (value urban only),Percent enrollment in college or graduate school (percentile urban only),Percent enrollment in college or graduate school (value rural only),Percent enrollment in college or graduate school (percentile rural only),Percent enrollment in college or graduate school (percentile urban/rural),Percent enrollment in college or graduate school (min-max normalized),Expected building loss rate (Natural Hazards Risk Index) (percentile),Expected building loss rate (Natural Hazards Risk Index) (value urban only),Expected building loss rate (Natural Hazards Risk Index) (percentile urban only),Expected building loss rate (Natural Hazards Risk Index) (value rural only),Expected building loss rate (Natural Hazards Risk Index) (percentile rural only),Expected building loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected building loss rate (Natural Hazards Risk Index) (min-max normalized),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile),Expected agricultural loss rate (Natural Hazards Risk Index) (value urban only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile urban only),Expected agricultural loss rate (Natural Hazards Risk Index) (value rural only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile rural only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected agricultural loss rate (Natural Hazards Risk Index) (min-max normalized),Expected population loss rate (Natural Hazards Risk Index) (percentile),Expected population loss rate (Natural Hazards Risk Index) (value urban only),Expected population loss rate (Natural Hazards Risk Index) (percentile urban only),Expected population loss rate (Natural Hazards Risk Index) (value rural only),Expected population loss rate (Natural Hazards Risk Index) (percentile rural only),Expected population loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected population loss rate (Natural Hazards Risk Index) (min-max normalized),Percent individuals age 25 or over with less than high school degree in 2009 (percentile),Percent individuals age 25 or over with less than high school degree in 2009 (value urban only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile urban only),Percent individuals age 25 or over with less than high school degree in 2009 (value rural only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile rural only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile urban/rural),Percent individuals age 25 or over with less than high school degree in 2009 (min-max normalized),Percentage households below 100% of federal poverty line in 2009 (percentile),Percentage households below 100% of federal poverty line in 2009 (value urban only),Percentage households below 100% of federal poverty line in 2009 (percentile urban only),Percentage households below 100% of federal poverty line in 2009 (value rural only),Percentage households below 100% of federal poverty line in 2009 (percentile rural only),Percentage households below 100% of federal poverty line in 2009 (percentile urban/rural),Percentage households below 100% of federal poverty line in 2009 (min-max normalized),Unemployed civilians (percent) in 2009 (percentile),Unemployed civilians (percent) in 2009 (value urban only),Unemployed civilians (percent) in 2009 (percentile urban only),Unemployed civilians (percent) in 2009 (value rural only),Unemployed civilians (percent) in 2009 (percentile rural only),Unemployed civilians (percent) in 2009 (percentile urban/rural),Unemployed civilians (percent) in 2009 (min-max normalized),Unemployed civilians (percent) in 2010 (percentile),Unemployed civilians (percent) in 2010 (value urban only),Unemployed civilians (percent) in 2010 (percentile urban only),Unemployed civilians (percent) in 2010 (value rural only),Unemployed civilians (percent) in 2010 (percentile rural only),Unemployed civilians (percent) in 2010 (percentile urban/rural),Unemployed civilians (percent) in 2010 (min-max normalized),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile),Percent of individuals < 100% Federal Poverty Line in 2010 (value urban only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile urban only),Percent of individuals < 100% Federal Poverty Line in 2010 (value rural only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile rural only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile urban/rural),Percent of individuals < 100% Federal Poverty Line in 2010 (min-max normalized),Total population in 2009 (percentile),Total population in 2009 (value urban only),Total population in 2009 (percentile urban only),Total population in 2009 (value rural only),Total population in 2009 (percentile rural only),Total population in 2009 (percentile urban/rural),Total population in 2009 (min-max normalized),Summer days above 90F (percentile),Summer days above 90F (value urban only),Summer days above 90F (percentile urban only),Summer days above 90F (value rural only),Summer days above 90F (percentile rural only),Summer days above 90F (percentile urban/rural),Summer days above 90F (min-max normalized),Percent low access to healthy food (percentile),Percent low access to healthy food (value urban only),Percent low access to healthy food (percentile urban only),Percent low access to healthy food (value rural only),Percent low access to healthy food (percentile rural only),Percent low access to healthy food (percentile urban/rural),Percent low access to healthy food (min-max normalized),Percent impenetrable surface areas (percentile),Percent impenetrable surface areas (value urban only),Percent impenetrable surface areas (percentile urban only),Percent impenetrable surface areas (value rural only),Percent impenetrable surface areas (percentile rural only),Percent impenetrable surface areas (percentile urban/rural),Percent impenetrable surface areas (min-max normalized),Low third grade reading proficiency (percentile),Third grade reading proficiency (value urban only),Low third grade reading proficiency (percentile urban only),Third grade reading proficiency (value rural only),Low third grade reading proficiency (percentile rural only),Low third grade reading proficiency (percentile urban/rural),Low median household income as a percent of area median income (percentile),Median household income as a percent of area median income (value urban only),Low median household income as a percent of area median income (percentile urban only),Median household income as a percent of area median income (value rural only),Low median household income as a percent of area median income (percentile rural only),Low median household income as a percent of area median income (percentile urban/rural),Low life expectancy (percentile),Life expectancy (years) (value urban only),Low life expectancy (percentile urban only),Life expectancy (years) (value rural only),Low life expectancy (percentile rural only),Low life expectancy (percentile urban/rural),Low median household income as a percent of territory median income in 2009 (percentile),Median household income as a percent of territory median income in 2009 (value urban only),Low median household income as a percent of territory median income in 2009 (percentile urban only),Median household income as a percent of territory median income in 2009 (value rural only),Low median household income as a percent of territory median income in 2009 (percentile rural only),Low median household income as a percent of territory median income in 2009 (percentile urban/rural),Total population in 2009 (island areas) and 2019 (states and PR),Score A,Score B,Socioeconomic Factors,Sensitive populations,Environmental effects,Exposures,Pollution Burden,Population Characteristics,Score C,Score D,Score E,"Low AMI, Low HS graduation",Meets socioeconomic criteria,Meets burden criteria,Score F (communities),Score G (communities),Score G,Score G (percentile),Score H (communities),Score H,Score I (communities),Score I,Score I (percentile),NMTC (communities),Score K (communities),Total threshold criteria exceeded,Is low income,At or above the 90th percentile for expected population loss rate and is low income,At or above the 90th percentile for expected agriculture loss rate and is low income,At or above the 90th percentile for expected building loss rate and is low income,Climate Factor (Definition L),At or above the 90th percentile for PM2.5 exposure and is low income,At or above the 90th percentile for energy burden and is low income,Energy Factor (Definition L),At or above the 90th percentile for diesel particulate matter and is low income,At or above the 90th percentile for traffic proximity and is low income,Transportation Factor (Definition L),At or above the 90th percentile for lead paint and the median house value is less than 90th percentile and is low income,At or above the 90th percentile for housing burden and is low income,Housing Factor (Definition L),At or above the 90th percentile for proximity to RMP sites and is low income,At or above the 90th percentile for proximity to superfund sites and is low income,At or above the 90th percentile for proximity to hazardous waste facilities and is low income,Pollution Factor (Definition L),At or above the 90th percentile for wastewater discharge and is low income,Water Factor (Definition L),At or above the 90th percentile for diabetes and is low income,At or above the 90th percentile for asthma and is low income,At or above the 90th percentile for heart disease and is low income,At or above the 90th percentile for low life expectancy and is low income,Health Factor (Definition L),At or above the 90th percentile for households in linguistic isolation and has low HS education,At or above the 90th percentile for households at or below 100% federal poverty level and has low HS education,At or above the 90th percentile for low median household income as a percent of area median income and has low HS education,At or above the 90th percentile for unemployment and has low HS education,Unemployed civilians (percent) in 2009 (island areas) and 2010 (states and PR),Unemployed civilians (percent) in 2009 exceeds 90th percentile,Percentage households below 100% of federal poverty line in 2009 (island areas) and 2010 (states and PR),Percentage households below 100% of federal poverty line in 2009 exceeds 90th percentile,Low median household income as a percent of territory median income in 2009 exceeds 90th percentile,At or above the 90th percentile for unemployment and has low HS education in 2009 (island areas),At or above the 90th percentile for households at or below 100% federal poverty level and has low HS education in 2009 (island areas),At or above the 90th percentile for low median household income as a percent of area median income and has low HS education in 2009 (island areas),Workforce Factor (Definition L),Definition L (communities),Any Non-Workforce Factor (Definition L),Definition L (percentile),Score A (percentile),Score A (top 25th percentile),Score A (top 30th percentile),Score A (top 35th percentile),Score A (top 40th percentile),Score B (percentile),Score B (top 25th percentile),Score B (top 30th percentile),Score B (top 35th percentile),Score B (top 40th percentile),Score C (percentile),Score C (top 25th percentile),Score C (top 30th percentile),Score C (top 35th percentile),Score C (top 40th percentile),Score D (percentile),Score D (top 25th percentile),Score D (top 30th percentile),Score D (top 35th percentile),Score D (top 40th percentile),Score E (percentile),Score E (top 25th percentile),Score E (top 30th percentile),Score E (top 35th percentile),Score E (top 40th percentile) -01073001100,True,0.2752043596730245,4897.0,0.7327449738800064,11.2,7.2,6.7,16.6,19.3,15.1,0.150375939849624,0.318796992481203,0.3744360902255639,57447.0,37030.0,0.049,18.7674524286,1.0,51.1530304943,0.735568574566,0.63998588,10.3951975342,39.404630719,253.995131498,2.03499777769,0.708723792992,0.134193041308,1.0556674669,0.205868653936,0.0308352052277,0.185011231366,0.0,0.0,0.407205697528,0.0821917808219178,0.0092071611253196,85500.0,0.0890751899397432,0.0004047858,0.0052243632,2.8039e-06,,,,0.1536983669548511,0.3189099613330878,,62.666668,0.068036923,0.171,58.143433,0.6445941476491375,70.3,,0.6466760729305078,0.2752043596730245,0.5700318443928049,,,0.5700318443928049,0.2752043596730245,0.6512411994432508,4897.0,0.6248587667340021,,,0.6248587667340021,0.0696873532467162,0.2608335861859708,0.7327449738800064,0.2830143458759886,,,0.2830143458759886,0.1567394572745385,0.8509696039125366,11.2,0.835724928163468,,,0.835724928163468,0.3795180722891565,0.7264920810941454,7.2,0.7844637979353648,,,0.7844637979353648,0.1875,0.4789587420739856,6.7,0.5678012699989358,,,0.5678012699989358,0.303921568627451,0.6191105803406409,16.6,0.6018127638440527,,,0.6018127638440527,0.2094488188976378,0.965388552418323,19.3,0.9599666536592288,,,0.9599666536592288,0.4275862068965517,0.697012994398476,15.1,0.7279967363155841,,,0.7279967363155841,0.3440233236151603,0.62043226838371,0.150375939849624,0.6145691950863328,,,0.6145691950863328,0.150375939849624,0.7319580582099551,0.318796992481203,0.7209861695730607,,,0.7209861695730607,0.318796992481203,0.6304939233619051,0.3744360902255639,0.6277982991151962,,,0.6277982991151962,0.3744360902255639,0.305080182775983,57447.0,0.2657396925099514,,,0.2657396925099514,0.2232322025800286,0.1531195524384805,37030.0,0.1572054644434553,,,0.1572054644434553,0.1395180645004889,0.864954517474865,0.049,0.9005173954895489,,,0.9005173954895489,0.0037065052950075,0.6038301323911519,18.7674524286,0.6383816255626487,,,0.6383816255626487,0.1876745242859999,0.5972204988211937,1.0,0.5000085573944445,,,0.5000085573944445,1.0,0.9847958474680182,51.1530304943,0.9819551446670092,,,0.9819551446670092,0.0300384933188293,0.968365553602812,0.735568574566,0.962352336928608,,,0.962352336928608,0.1696726613313424,0.7632321085543794,0.63998588,0.70386920047937,,,0.70386920047937,0.1053235274194042,0.928945948563286,10.3951975342,0.914819538763832,,,0.914819538763832,0.5130755332417333,0.2507228532296667,39.404630719,0.2360646695853011,,,0.2360646695853011,0.2834163202031902,0.4608804184722397,253.995131498,0.3487028727629068,,,0.3487028727629068,0.0081194347824311,0.9022445642626452,2.03499777769,0.8805423357414318,,,0.8805423357414318,0.1192079731904979,0.4244672369292306,0.708723792992,0.2870715924264731,,,0.2870715924264731,0.0016327034632494,0.753733057661383,0.134193041308,0.7050707022289178,,,0.7050707022289178,0.0172289593763426,0.9223869977156124,1.0556674669,0.9078447963253958,,,0.9078447963253958,9.412822248180045e-06,0.4454669531492817,0.205868653936,0.4334577327353032,,,0.4334577327353032,0.205868653936,0.1202416183565086,0.0308352052277,0.108484267470127,,,0.108484267470127,0.0793595720750642,0.695774381427278,0.185011231366,0.7452494265073442,,,0.7452494265073442,0.185011231366,0.1272208772721677,0.0,0.0997988895955446,,,0.0997988895955446,0.0,0.1284712368751773,0.0,0.0986150580340329,,,0.0986150580340329,0.0,0.668247726382076,0.407205697528,0.6576848015886603,,,0.6576848015886603,0.407205697528,0.4189274017467249,0.0821917808219178,0.4443872826422471,,,0.4443872826422471,0.0821917808219178,0.0297871177547618,0.0092071611253196,0.0285699569046924,,,0.0285699569046924,0.0092071611253196,0.1124511830921203,85500.0,0.1074913548122025,,,0.1074913548122025,0.0379401628742081,0.7459685121012851,0.0890751899397432,0.6989610478672336,,,0.6989610478672336,0.0890751899397432,0.7846412062513758,0.0004047858,0.82138883658833,,,0.82138883658833,0.01597287904858,0.5120452999319701,0.0052243632,0.5028314457028648,,,0.5028314457028648,0.0095124530398832,0.6143028498159407,2.8039e-06,0.6689315237296548,,,0.6689315237296548,0.0013204531501148,,,,,,,,,,,,,,,,,,,,,,0.9349594607528132,0.1536983669548511,0.9315960352498582,,,0.9315960352498582,0.1536983669548511,0.8950599559730369,0.3189099613330878,0.8870754376621368,,,0.8870754376621368,0.3189099613330878,,,,,,,,0.7537922665342821,62.666668,0.7585193484443679,,,0.7585193484443679,0.4423529401799308,0.8019598155467721,0.068036923,0.7905320987865615,,,0.7905320987865615,0.068036923,0.4126953421856217,0.171,0.2701910981682835,,,0.2701910981682835,0.1775700879261655,0.990724418702258,58.143433,0.9890918535191758,,,0.9890918535191758,0.8209741753282674,0.6445941476491375,0.7947837521917007,,,0.7947837521917007,0.97046998263836,70.3,0.9652438793658,,,0.9652438793658,,,,,,,4897.0,0.5435875640644005,0.2799472837363994,0.3784219111378495,0.3144122923519848,0.6896597619436307,0.7261571216484003,0.7139913350801438,0.3464171017449171,0.2473388089694474,0.1547617998296523,0.3781718392172476,False,True,True,True,True,1,1,True,1,True,1,1,True,True,0,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,0.1536983669548511,False,0.3189099613330878,False,False,False,False,False,False,False,False,0,0.5532898204078324,False,False,False,False,0.5490856986899564,False,False,False,False,0.5480683083104825,False,False,False,False,0.5438440021080796,False,False,False,False,0.3320495668977446,False,False,False,False -01073001400,True,0.1823529411764705,1906.0,0.7136694633528574,11.1,9.1,7.3,21.4,22.4,17.4,0.2816032887975334,0.3679342240493319,0.4835560123329907,57447.0,36066.0,0.07,17.3011023381,1.0,54.6950518653,0.76056054321,0.9098084377,10.498270137,39.3676601307,3015.87969265,1.81382525188,3.24085850684,0.214095348703,0.365101735929,0.628839590444,0.0582371458552,0.178908709339,0.0245098039215686,0.0165289256198,0.425498426023,0.1742543171114599,0.1150121065375302,67800.0,0.0771549125979505,0.0008951111,0.0067284885,2.3791e-06,,,,0.0804953560371517,0.2950894905920146,,61.666668,0.087159691,0.34900002,93.77919,0.6278134628440127,71.0,,0.3421186011150532,0.1823529411764705,0.2730613650055943,,,0.2730613650055943,0.1823529411764705,0.0867961243766976,1906.0,0.0702656897319135,,,0.0702656897319135,0.0271235644860611,0.2409731608418613,0.7136694633528574,0.263412880473859,,,0.263412880473859,0.1524802086740484,0.8385794307486707,11.1,0.8242488204618823,,,0.8242488204618823,0.3734939759036144,0.9217563763541756,9.1,0.934238532761006,,,0.934238532761006,0.2391304347826086,0.6048579715089994,7.3,0.6840345524850119,,,0.6840345524850119,0.3333333333333333,0.7894025988796952,21.4,0.765821774451027,,,0.765821774451027,0.2850393700787401,0.9878088657624612,22.4,0.9854641881585016,,,0.9854641881585016,0.4988505747126436,0.8447283118655634,17.4,0.8547216999538827,,,0.8547216999538827,0.411078717201166,0.8689250707460116,0.2816032887975334,0.8593419809294734,,,0.8593419809294734,0.2816032887975334,0.8013233263612626,0.3679342240493319,0.7879907224465252,,,0.7879907224465252,0.3679342240493319,0.7892247330790578,0.4835560123329907,0.7755862898376428,,,0.7755862898376428,0.4835560123329907,0.305080182775983,57447.0,0.2657396925099514,,,0.2657396925099514,0.2232322025800286,0.1410656612748476,36066.0,0.1454103468346629,,,0.1454103468346629,0.1356231464796244,0.970802270706518,0.07,0.9745685506050604,,,0.9745685506050604,0.0052950075642965,0.5282998116553705,17.3011023381,0.565061869961834,,,0.565061869961834,0.173011023381,0.5972204988211937,1.0,0.5000085573944445,,,0.5000085573944445,1.0,0.9895233034972276,54.6950518653,0.98758774182503,,,0.98758774182503,0.0324014302096176,0.9765534529502324,0.76056054321,0.9720766991953432,,,0.9720766991953432,0.1759137053158734,0.9016362174902248,0.9098084377,0.8766135935627462,,,0.8766135935627462,0.1497290027189099,0.9329441224077584,10.498270137,0.9196283911889414,,,0.9196283911889414,0.5213510451938572,0.2492010569566841,39.3676601307,0.2346340790789065,,,0.2346340790789065,0.2826912370192468,0.941127799514774,3015.87969265,0.9280004126050854,,,0.9280004126050854,0.0964083008791804,0.8815556546533155,1.81382525188,0.8555140890882322,,,0.8555140890882322,0.1062519253676046,0.7527465845056148,3.24085850684,0.6879172801040846,,,0.6879172801040846,0.0074660410167418,0.8655558708666099,0.214095348703,0.8377272571643783,,,0.8377272571643783,0.027487565893985,0.8882148073250197,0.365101735929,0.8688263024295902,,,0.8688263024295902,3.255416928678718e-06,0.8313806570181485,0.628839590444,0.7904954291779368,,,0.7904954291779368,0.628839590444,0.5164051837137336,0.0582371458552,0.4798079227582429,,,0.4798079227582429,0.1498830619032175,0.6618964608586371,0.178908709339,0.715890026363543,,,0.715890026363543,0.178908709339,0.5796575164471435,0.0245098039215686,0.5161060212798873,,,0.5161060212798873,0.0245098039215686,0.5008648531776597,0.0165289256198,0.424872462081008,,,0.424872462081008,0.0165289256198,0.6964500479723247,0.425498426023,0.6838429143698428,,,0.6838429143698428,0.425498426023,0.751664847161572,0.1742543171114599,0.7508831498439483,,,0.7508831498439483,0.1742543171114599,0.9067171316918536,0.1150121065375302,0.9060831344539256,,,0.9060831344539256,0.1150121065375302,0.0519655139795408,67800.0,0.0554747149655904,,,0.0554747149655904,0.0290456994515583,0.6434691260334525,0.0771549125979505,0.5807502400219449,,,0.5807502400219449,0.0771549125979505,0.9166162227602904,0.0008951111,0.9302158396521918,,,0.9302158396521918,0.0353246959378835,0.5755532434271079,0.0067284885,0.5614035087719298,,,0.5614035087719298,0.0122511928214689,0.558933421571466,2.3791e-06,0.6145407246401615,,,0.6145407246401615,0.0011202645354936,,,,,,,,,,,,,,,,,,,,,,0.6917513228236646,0.0804953560371517,0.6841770738494838,,,0.6841770738494838,0.0804953560371517,0.8737301229199994,0.2950894905920146,0.8632982287353754,,,0.8632982287353754,0.2950894905920146,,,,,,,,0.7501654807214959,61.666668,0.7551581487546324,,,0.7551581487546324,0.435294116816609,0.8647617479139218,0.087159691,0.8519741908983552,,,0.8519741908983552,0.087159691,0.6268497920495212,0.34900002,0.5359536815260283,,,0.5359536815260283,0.3624091475885,0.9537899773356836,93.77919,0.9454938966323262,,,0.9454938966323262,0.8355751594025679,0.6278134628440127,0.8102169783752192,,,0.8102169783752192,0.959938777375042,71.0,0.9533526317781056,,,0.9533526317781056,,,,,,,1906.0,0.7240574475669483,0.523497018864787,0.6395630962236926,0.5859863870065047,0.8438907148737418,0.8318309921361502,0.8358508997153473,0.6127747416150986,0.5121883191018196,0.1843255189540058,0.6553216288775894,False,True,True,True,True,1,1,True,1,True,1,1,True,True,9,True,False,False,True,True,True,True,True,True,True,True,False,False,False,False,False,False,False,False,False,True,False,True,True,True,False,False,False,True,0.0804953560371517,False,0.2950894905920146,False,False,False,False,False,True,True,True,1,0.7460439723787516,False,True,True,True,0.7500818777292576,True,True,True,True,0.9394564656693726,True,True,True,True,0.6605181011067418,False,False,True,True,0.7347062877528682,False,True,True,True +GEOID10_TRACT,Persistent Poverty Census Tract,Housing burden (percent),Total population,Median household income (% of state median household income),Current asthma among adults aged >=18 years,Coronary heart disease among adults aged >=18 years,Cancer (excluding skin cancer) among adults aged >=18 years,Current lack of health insurance among adults aged 18-64 years,Diagnosed diabetes among adults aged >=18 years,Physical health not good for >=14 days among adults aged >=18 years,Percent of individuals < 100% Federal Poverty Line,Percent of individuals < 150% Federal Poverty Line,Percent of individuals < 200% Federal Poverty Line,Area Median Income (State or metropolitan),Median household income in the past 12 months,Energy burden,FEMA Risk Index Expected Annual Loss Score,Urban Heuristic Flag,Air toxics cancer risk,Respiratory hazard index,Diesel particulate matter,Particulate matter (PM2.5),Ozone,Traffic proximity and volume,Proximity to Risk Management Plan (RMP) facilities,Proximity to TSDF sites,Proximity to NPL sites,Wastewater discharge,Percent pre-1960s housing (lead paint indicator),Individuals under 5 years old,Individuals over 64 years old,Linguistic isolation (percent),Percent of households in linguistic isolation,Poverty (Less than 200% of federal poverty line),Percent individuals age 25 or over with less than high school degree,Unemployed civilians (percent),Median value ($) of owner-occupied housing units,Percent enrollment in college or graduate school,Expected building loss rate (Natural Hazards Risk Index),Expected agricultural loss rate (Natural Hazards Risk Index),Expected population loss rate (Natural Hazards Risk Index),Percent individuals age 25 or over with less than high school degree in 2009,Percentage households below 100% of federal poverty line in 2009,Unemployed civilians (percent) in 2009,Unemployed civilians (percent) in 2010,Percent of individuals < 100% Federal Poverty Line in 2010,Total population in 2009,Summer days above 90F,Percent low access to healthy food,Percent impenetrable surface areas,Third grade reading proficiency,Median household income as a percent of area median income,Life expectancy (years),Median household income as a percent of territory median income in 2009,Housing burden (percent) (percentile),Housing burden (percent) (value urban only),Housing burden (percent) (percentile urban only),Housing burden (percent) (value rural only),Housing burden (percent) (percentile rural only),Housing burden (percent) (percentile urban/rural),Housing burden (percent) (min-max normalized),Total population (percentile),Total population (value urban only),Total population (percentile urban only),Total population (value rural only),Total population (percentile rural only),Total population (percentile urban/rural),Total population (min-max normalized),Median household income (% of state median household income) (percentile),Median household income (% of state median household income) (value urban only),Median household income (% of state median household income) (percentile urban only),Median household income (% of state median household income) (value rural only),Median household income (% of state median household income) (percentile rural only),Median household income (% of state median household income) (percentile urban/rural),Median household income (% of state median household income) (min-max normalized),Current asthma among adults aged >=18 years (percentile),Current asthma among adults aged >=18 years (value urban only),Current asthma among adults aged >=18 years (percentile urban only),Current asthma among adults aged >=18 years (value rural only),Current asthma among adults aged >=18 years (percentile rural only),Current asthma among adults aged >=18 years (percentile urban/rural),Current asthma among adults aged >=18 years (min-max normalized),Coronary heart disease among adults aged >=18 years (percentile),Coronary heart disease among adults aged >=18 years (value urban only),Coronary heart disease among adults aged >=18 years (percentile urban only),Coronary heart disease among adults aged >=18 years (value rural only),Coronary heart disease among adults aged >=18 years (percentile rural only),Coronary heart disease among adults aged >=18 years (percentile urban/rural),Coronary heart disease among adults aged >=18 years (min-max normalized),Cancer (excluding skin cancer) among adults aged >=18 years (percentile),Cancer (excluding skin cancer) among adults aged >=18 years (value urban only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile urban only),Cancer (excluding skin cancer) among adults aged >=18 years (value rural only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile rural only),Cancer (excluding skin cancer) among adults aged >=18 years (percentile urban/rural),Cancer (excluding skin cancer) among adults aged >=18 years (min-max normalized),Current lack of health insurance among adults aged 18-64 years (percentile),Current lack of health insurance among adults aged 18-64 years (value urban only),Current lack of health insurance among adults aged 18-64 years (percentile urban only),Current lack of health insurance among adults aged 18-64 years (value rural only),Current lack of health insurance among adults aged 18-64 years (percentile rural only),Current lack of health insurance among adults aged 18-64 years (percentile urban/rural),Current lack of health insurance among adults aged 18-64 years (min-max normalized),Diagnosed diabetes among adults aged >=18 years (percentile),Diagnosed diabetes among adults aged >=18 years (value urban only),Diagnosed diabetes among adults aged >=18 years (percentile urban only),Diagnosed diabetes among adults aged >=18 years (value rural only),Diagnosed diabetes among adults aged >=18 years (percentile rural only),Diagnosed diabetes among adults aged >=18 years (percentile urban/rural),Diagnosed diabetes among adults aged >=18 years (min-max normalized),Physical health not good for >=14 days among adults aged >=18 years (percentile),Physical health not good for >=14 days among adults aged >=18 years (value urban only),Physical health not good for >=14 days among adults aged >=18 years (percentile urban only),Physical health not good for >=14 days among adults aged >=18 years (value rural only),Physical health not good for >=14 days among adults aged >=18 years (percentile rural only),Physical health not good for >=14 days among adults aged >=18 years (percentile urban/rural),Physical health not good for >=14 days among adults aged >=18 years (min-max normalized),Percent of individuals < 100% Federal Poverty Line (percentile),Percent of individuals < 100% Federal Poverty Line (value urban only),Percent of individuals < 100% Federal Poverty Line (percentile urban only),Percent of individuals < 100% Federal Poverty Line (value rural only),Percent of individuals < 100% Federal Poverty Line (percentile rural only),Percent of individuals < 100% Federal Poverty Line (percentile urban/rural),Percent of individuals < 100% Federal Poverty Line (min-max normalized),Percent of individuals < 150% Federal Poverty Line (percentile),Percent of individuals < 150% Federal Poverty Line (value urban only),Percent of individuals < 150% Federal Poverty Line (percentile urban only),Percent of individuals < 150% Federal Poverty Line (value rural only),Percent of individuals < 150% Federal Poverty Line (percentile rural only),Percent of individuals < 150% Federal Poverty Line (percentile urban/rural),Percent of individuals < 150% Federal Poverty Line (min-max normalized),Percent of individuals < 200% Federal Poverty Line (percentile),Percent of individuals < 200% Federal Poverty Line (value urban only),Percent of individuals < 200% Federal Poverty Line (percentile urban only),Percent of individuals < 200% Federal Poverty Line (value rural only),Percent of individuals < 200% Federal Poverty Line (percentile rural only),Percent of individuals < 200% Federal Poverty Line (percentile urban/rural),Percent of individuals < 200% Federal Poverty Line (min-max normalized),Area Median Income (State or metropolitan) (percentile),Area Median Income (State or metropolitan) (value urban only),Area Median Income (State or metropolitan) (percentile urban only),Area Median Income (State or metropolitan) (value rural only),Area Median Income (State or metropolitan) (percentile rural only),Area Median Income (State or metropolitan) (percentile urban/rural),Area Median Income (State or metropolitan) (min-max normalized),Median household income in the past 12 months (percentile),Median household income in the past 12 months (value urban only),Median household income in the past 12 months (percentile urban only),Median household income in the past 12 months (value rural only),Median household income in the past 12 months (percentile rural only),Median household income in the past 12 months (percentile urban/rural),Median household income in the past 12 months (min-max normalized),Energy burden (percentile),Energy burden (value urban only),Energy burden (percentile urban only),Energy burden (value rural only),Energy burden (percentile rural only),Energy burden (percentile urban/rural),Energy burden (min-max normalized),FEMA Risk Index Expected Annual Loss Score (percentile),FEMA Risk Index Expected Annual Loss Score (value urban only),FEMA Risk Index Expected Annual Loss Score (percentile urban only),FEMA Risk Index Expected Annual Loss Score (value rural only),FEMA Risk Index Expected Annual Loss Score (percentile rural only),FEMA Risk Index Expected Annual Loss Score (percentile urban/rural),FEMA Risk Index Expected Annual Loss Score (min-max normalized),Urban Heuristic Flag (percentile),Urban Heuristic Flag (value urban only),Urban Heuristic Flag (percentile urban only),Urban Heuristic Flag (value rural only),Urban Heuristic Flag (percentile rural only),Urban Heuristic Flag (percentile urban/rural),Urban Heuristic Flag (min-max normalized),Air toxics cancer risk (percentile),Air toxics cancer risk (value urban only),Air toxics cancer risk (percentile urban only),Air toxics cancer risk (value rural only),Air toxics cancer risk (percentile rural only),Air toxics cancer risk (percentile urban/rural),Air toxics cancer risk (min-max normalized),Respiratory hazard index (percentile),Respiratory hazard index (value urban only),Respiratory hazard index (percentile urban only),Respiratory hazard index (value rural only),Respiratory hazard index (percentile rural only),Respiratory hazard index (percentile urban/rural),Respiratory hazard index (min-max normalized),Diesel particulate matter (percentile),Diesel particulate matter (value urban only),Diesel particulate matter (percentile urban only),Diesel particulate matter (value rural only),Diesel particulate matter (percentile rural only),Diesel particulate matter (percentile urban/rural),Diesel particulate matter (min-max normalized),Particulate matter (PM2.5) (percentile),Particulate matter (PM2.5) (value urban only),Particulate matter (PM2.5) (percentile urban only),Particulate matter (PM2.5) (value rural only),Particulate matter (PM2.5) (percentile rural only),Particulate matter (PM2.5) (percentile urban/rural),Particulate matter (PM2.5) (min-max normalized),Ozone (percentile),Ozone (value urban only),Ozone (percentile urban only),Ozone (value rural only),Ozone (percentile rural only),Ozone (percentile urban/rural),Ozone (min-max normalized),Traffic proximity and volume (percentile),Traffic proximity and volume (value urban only),Traffic proximity and volume (percentile urban only),Traffic proximity and volume (value rural only),Traffic proximity and volume (percentile rural only),Traffic proximity and volume (percentile urban/rural),Traffic proximity and volume (min-max normalized),Proximity to Risk Management Plan (RMP) facilities (percentile),Proximity to Risk Management Plan (RMP) facilities (value urban only),Proximity to Risk Management Plan (RMP) facilities (percentile urban only),Proximity to Risk Management Plan (RMP) facilities (value rural only),Proximity to Risk Management Plan (RMP) facilities (percentile rural only),Proximity to Risk Management Plan (RMP) facilities (percentile urban/rural),Proximity to Risk Management Plan (RMP) facilities (min-max normalized),Proximity to TSDF sites (percentile),Proximity to TSDF sites (value urban only),Proximity to TSDF sites (percentile urban only),Proximity to TSDF sites (value rural only),Proximity to TSDF sites (percentile rural only),Proximity to TSDF sites (percentile urban/rural),Proximity to TSDF sites (min-max normalized),Proximity to NPL sites (percentile),Proximity to NPL sites (value urban only),Proximity to NPL sites (percentile urban only),Proximity to NPL sites (value rural only),Proximity to NPL sites (percentile rural only),Proximity to NPL sites (percentile urban/rural),Proximity to NPL sites (min-max normalized),Wastewater discharge (percentile),Wastewater discharge (value urban only),Wastewater discharge (percentile urban only),Wastewater discharge (value rural only),Wastewater discharge (percentile rural only),Wastewater discharge (percentile urban/rural),Wastewater discharge (min-max normalized),Percent pre-1960s housing (lead paint indicator) (percentile),Percent pre-1960s housing (lead paint indicator) (value urban only),Percent pre-1960s housing (lead paint indicator) (percentile urban only),Percent pre-1960s housing (lead paint indicator) (value rural only),Percent pre-1960s housing (lead paint indicator) (percentile rural only),Percent pre-1960s housing (lead paint indicator) (percentile urban/rural),Percent pre-1960s housing (lead paint indicator) (min-max normalized),Individuals under 5 years old (percentile),Individuals under 5 years old (value urban only),Individuals under 5 years old (percentile urban only),Individuals under 5 years old (value rural only),Individuals under 5 years old (percentile rural only),Individuals under 5 years old (percentile urban/rural),Individuals under 5 years old (min-max normalized),Individuals over 64 years old (percentile),Individuals over 64 years old (value urban only),Individuals over 64 years old (percentile urban only),Individuals over 64 years old (value rural only),Individuals over 64 years old (percentile rural only),Individuals over 64 years old (percentile urban/rural),Individuals over 64 years old (min-max normalized),Linguistic isolation (percent) (percentile),Linguistic isolation (percent) (value urban only),Linguistic isolation (percent) (percentile urban only),Linguistic isolation (percent) (value rural only),Linguistic isolation (percent) (percentile rural only),Linguistic isolation (percent) (percentile urban/rural),Linguistic isolation (percent) (min-max normalized),Percent of households in linguistic isolation (percentile),Percent of households in linguistic isolation (value urban only),Percent of households in linguistic isolation (percentile urban only),Percent of households in linguistic isolation (value rural only),Percent of households in linguistic isolation (percentile rural only),Percent of households in linguistic isolation (percentile urban/rural),Percent of households in linguistic isolation (min-max normalized),Poverty (Less than 200% of federal poverty line) (percentile),Poverty (Less than 200% of federal poverty line) (value urban only),Poverty (Less than 200% of federal poverty line) (percentile urban only),Poverty (Less than 200% of federal poverty line) (value rural only),Poverty (Less than 200% of federal poverty line) (percentile rural only),Poverty (Less than 200% of federal poverty line) (percentile urban/rural),Poverty (Less than 200% of federal poverty line) (min-max normalized),Percent individuals age 25 or over with less than high school degree (percentile),Percent individuals age 25 or over with less than high school degree (value urban only),Percent individuals age 25 or over with less than high school degree (percentile urban only),Percent individuals age 25 or over with less than high school degree (value rural only),Percent individuals age 25 or over with less than high school degree (percentile rural only),Percent individuals age 25 or over with less than high school degree (percentile urban/rural),Percent individuals age 25 or over with less than high school degree (min-max normalized),Unemployed civilians (percent) (percentile),Unemployed civilians (percent) (value urban only),Unemployed civilians (percent) (percentile urban only),Unemployed civilians (percent) (value rural only),Unemployed civilians (percent) (percentile rural only),Unemployed civilians (percent) (percentile urban/rural),Unemployed civilians (percent) (min-max normalized),Median value ($) of owner-occupied housing units (percentile),Median value ($) of owner-occupied housing units (value urban only),Median value ($) of owner-occupied housing units (percentile urban only),Median value ($) of owner-occupied housing units (value rural only),Median value ($) of owner-occupied housing units (percentile rural only),Median value ($) of owner-occupied housing units (percentile urban/rural),Median value ($) of owner-occupied housing units (min-max normalized),Percent enrollment in college or graduate school (percentile),Percent enrollment in college or graduate school (value urban only),Percent enrollment in college or graduate school (percentile urban only),Percent enrollment in college or graduate school (value rural only),Percent enrollment in college or graduate school (percentile rural only),Percent enrollment in college or graduate school (percentile urban/rural),Percent enrollment in college or graduate school (min-max normalized),Expected building loss rate (Natural Hazards Risk Index) (percentile),Expected building loss rate (Natural Hazards Risk Index) (value urban only),Expected building loss rate (Natural Hazards Risk Index) (percentile urban only),Expected building loss rate (Natural Hazards Risk Index) (value rural only),Expected building loss rate (Natural Hazards Risk Index) (percentile rural only),Expected building loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected building loss rate (Natural Hazards Risk Index) (min-max normalized),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile),Expected agricultural loss rate (Natural Hazards Risk Index) (value urban only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile urban only),Expected agricultural loss rate (Natural Hazards Risk Index) (value rural only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile rural only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected agricultural loss rate (Natural Hazards Risk Index) (min-max normalized),Expected population loss rate (Natural Hazards Risk Index) (percentile),Expected population loss rate (Natural Hazards Risk Index) (value urban only),Expected population loss rate (Natural Hazards Risk Index) (percentile urban only),Expected population loss rate (Natural Hazards Risk Index) (value rural only),Expected population loss rate (Natural Hazards Risk Index) (percentile rural only),Expected population loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected population loss rate (Natural Hazards Risk Index) (min-max normalized),Percent individuals age 25 or over with less than high school degree in 2009 (percentile),Percent individuals age 25 or over with less than high school degree in 2009 (value urban only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile urban only),Percent individuals age 25 or over with less than high school degree in 2009 (value rural only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile rural only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile urban/rural),Percent individuals age 25 or over with less than high school degree in 2009 (min-max normalized),Percentage households below 100% of federal poverty line in 2009 (percentile),Percentage households below 100% of federal poverty line in 2009 (value urban only),Percentage households below 100% of federal poverty line in 2009 (percentile urban only),Percentage households below 100% of federal poverty line in 2009 (value rural only),Percentage households below 100% of federal poverty line in 2009 (percentile rural only),Percentage households below 100% of federal poverty line in 2009 (percentile urban/rural),Percentage households below 100% of federal poverty line in 2009 (min-max normalized),Unemployed civilians (percent) in 2009 (percentile),Unemployed civilians (percent) in 2009 (value urban only),Unemployed civilians (percent) in 2009 (percentile urban only),Unemployed civilians (percent) in 2009 (value rural only),Unemployed civilians (percent) in 2009 (percentile rural only),Unemployed civilians (percent) in 2009 (percentile urban/rural),Unemployed civilians (percent) in 2009 (min-max normalized),Unemployed civilians (percent) in 2010 (percentile),Unemployed civilians (percent) in 2010 (value urban only),Unemployed civilians (percent) in 2010 (percentile urban only),Unemployed civilians (percent) in 2010 (value rural only),Unemployed civilians (percent) in 2010 (percentile rural only),Unemployed civilians (percent) in 2010 (percentile urban/rural),Unemployed civilians (percent) in 2010 (min-max normalized),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile),Percent of individuals < 100% Federal Poverty Line in 2010 (value urban only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile urban only),Percent of individuals < 100% Federal Poverty Line in 2010 (value rural only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile rural only),Percent of individuals < 100% Federal Poverty Line in 2010 (percentile urban/rural),Percent of individuals < 100% Federal Poverty Line in 2010 (min-max normalized),Total population in 2009 (percentile),Total population in 2009 (value urban only),Total population in 2009 (percentile urban only),Total population in 2009 (value rural only),Total population in 2009 (percentile rural only),Total population in 2009 (percentile urban/rural),Total population in 2009 (min-max normalized),Summer days above 90F (percentile),Summer days above 90F (value urban only),Summer days above 90F (percentile urban only),Summer days above 90F (value rural only),Summer days above 90F (percentile rural only),Summer days above 90F (percentile urban/rural),Summer days above 90F (min-max normalized),Percent low access to healthy food (percentile),Percent low access to healthy food (value urban only),Percent low access to healthy food (percentile urban only),Percent low access to healthy food (value rural only),Percent low access to healthy food (percentile rural only),Percent low access to healthy food (percentile urban/rural),Percent low access to healthy food (min-max normalized),Percent impenetrable surface areas (percentile),Percent impenetrable surface areas (value urban only),Percent impenetrable surface areas (percentile urban only),Percent impenetrable surface areas (value rural only),Percent impenetrable surface areas (percentile rural only),Percent impenetrable surface areas (percentile urban/rural),Percent impenetrable surface areas (min-max normalized),Low third grade reading proficiency (percentile),Third grade reading proficiency (value urban only),Low third grade reading proficiency (percentile urban only),Third grade reading proficiency (value rural only),Low third grade reading proficiency (percentile rural only),Low third grade reading proficiency (percentile urban/rural),Low median household income as a percent of area median income (percentile),Median household income as a percent of area median income (value urban only),Low median household income as a percent of area median income (percentile urban only),Median household income as a percent of area median income (value rural only),Low median household income as a percent of area median income (percentile rural only),Low median household income as a percent of area median income (percentile urban/rural),Low life expectancy (percentile),Life expectancy (years) (value urban only),Low life expectancy (percentile urban only),Life expectancy (years) (value rural only),Low life expectancy (percentile rural only),Low life expectancy (percentile urban/rural),Low median household income as a percent of territory median income in 2009 (percentile),Median household income as a percent of territory median income in 2009 (value urban only),Low median household income as a percent of territory median income in 2009 (percentile urban only),Median household income as a percent of territory median income in 2009 (value rural only),Low median household income as a percent of territory median income in 2009 (percentile rural only),Low median household income as a percent of territory median income in 2009 (percentile urban/rural),Total population in 2009 (island areas) and 2019 (states and PR),Score A,Score B,Socioeconomic Factors,Sensitive populations,Environmental effects,Exposures,Pollution Burden,Population Characteristics,Score C,Score D,Score E,"Low AMI, Low HS graduation",Meets socioeconomic criteria,Meets burden criteria,Score F (communities),Score G (communities),Score G,Score G (percentile),Score H (communities),Score H,Score I (communities),Score I,Score I (percentile),NMTC (communities),Score K (communities),Total threshold criteria exceeded,Is low income,At or above the 90th percentile for expected population loss rate and is low income,At or above the 90th percentile for expected agriculture loss rate and is low income,At or above the 90th percentile for expected building loss rate and is low income,Climate Factor (Definition L),At or above the 90th percentile for PM2.5 exposure and is low income,At or above the 90th percentile for energy burden and is low income,Energy Factor (Definition L),At or above the 90th percentile for diesel particulate matter and is low income,At or above the 90th percentile for traffic proximity and is low income,Transportation Factor (Definition L),At or above the 90th percentile for lead paint and the median house value is less than 90th percentile and is low income,At or above the 90th percentile for housing burden and is low income,Housing Factor (Definition L),At or above the 90th percentile for proximity to RMP sites and is low income,At or above the 90th percentile for proximity to superfund sites and is low income,At or above the 90th percentile for proximity to hazardous waste facilities and is low income,Pollution Factor (Definition L),At or above the 90th percentile for wastewater discharge and is low income,Water Factor (Definition L),At or above the 90th percentile for diabetes and is low income,At or above the 90th percentile for asthma and is low income,At or above the 90th percentile for heart disease and is low income,At or above the 90th percentile for low life expectancy and is low income,Health Factor (Definition L),Low high school education,At or above the 90th percentile for households in linguistic isolation and has low HS education,At or above the 90th percentile for households at or below 100% federal poverty level and has low HS education,At or above the 90th percentile for low median household income as a percent of area median income and has low HS education,At or above the 90th percentile for unemployment and has low HS education,Unemployed civilians (percent) in 2009 (island areas) and 2010 (states and PR),Unemployed civilians (percent) in 2009 exceeds 90th percentile,Percentage households below 100% of federal poverty line in 2009 (island areas) and 2010 (states and PR),Percentage households below 100% of federal poverty line in 2009 exceeds 90th percentile,Low median household income as a percent of territory median income in 2009 exceeds 90th percentile,Low high school education in 2009 (island areas),At or above the 90th percentile for unemployment and has low HS education in 2009 (island areas),At or above the 90th percentile for households at or below 100% federal poverty level and has low HS education in 2009 (island areas),At or above the 90th percentile for low median household income as a percent of area median income and has low HS education in 2009 (island areas),Workforce Factor (Definition L),Definition L (communities),Any Non-Workforce Factor (Definition L),Definition L (percentile),Score A (percentile),Score A (top 25th percentile),Score A (top 30th percentile),Score A (top 35th percentile),Score A (top 40th percentile),Score B (percentile),Score B (top 25th percentile),Score B (top 30th percentile),Score B (top 35th percentile),Score B (top 40th percentile),Score C (percentile),Score C (top 25th percentile),Score C (top 30th percentile),Score C (top 35th percentile),Score C (top 40th percentile),Score D (percentile),Score D (top 25th percentile),Score D (top 30th percentile),Score D (top 35th percentile),Score D (top 40th percentile),Score E (percentile),Score E (top 25th percentile),Score E (top 30th percentile),Score E (top 35th percentile),Score E (top 40th percentile) +01073001100,True,0.2752043596730245,4897.0,0.7327449738800064,11.2,7.2,6.7,16.6,19.3,15.1,0.150375939849624,0.318796992481203,0.3744360902255639,57447.0,37030.0,0.049,18.7674524286,1.0,51.1530304943,0.735568574566,0.63998588,10.3951975342,39.404630719,253.995131498,2.03499777769,0.708723792992,0.134193041308,1.0556674669,0.205868653936,0.0308352052277,0.185011231366,0.0,0.0,0.407205697528,0.0821917808219178,0.0092071611253196,85500.0,0.0890751899397432,0.0004047858,0.0052243632,2.8039e-06,,,,0.1536983669548511,0.3189099613330878,,62.666668,0.068036923,0.171,58.143433,0.6445941476491375,70.3,,0.6466760729305078,0.2752043596730245,0.5700318443928049,,,0.5700318443928049,0.2752043596730245,0.6512411994432508,4897.0,0.6248587667340021,,,0.6248587667340021,0.0696873532467162,0.2608335861859708,0.7327449738800064,0.2830143458759886,,,0.2830143458759886,0.1567394572745385,0.8509696039125366,11.2,0.835724928163468,,,0.835724928163468,0.3795180722891565,0.7264920810941454,7.2,0.7844637979353648,,,0.7844637979353648,0.1875,0.4789587420739856,6.7,0.5678012699989358,,,0.5678012699989358,0.303921568627451,0.6191105803406409,16.6,0.6018127638440527,,,0.6018127638440527,0.2094488188976378,0.965388552418323,19.3,0.9599666536592288,,,0.9599666536592288,0.4275862068965517,0.697012994398476,15.1,0.7279967363155841,,,0.7279967363155841,0.3440233236151603,0.62043226838371,0.150375939849624,0.6145691950863328,,,0.6145691950863328,0.150375939849624,0.7319580582099551,0.318796992481203,0.7209861695730607,,,0.7209861695730607,0.318796992481203,0.6304939233619051,0.3744360902255639,0.6277982991151962,,,0.6277982991151962,0.3744360902255639,0.305080182775983,57447.0,0.2657396925099514,,,0.2657396925099514,0.2232322025800286,0.1531195524384805,37030.0,0.1572054644434553,,,0.1572054644434553,0.1395180645004889,0.864954517474865,0.049,0.9005173954895489,,,0.9005173954895489,0.0037065052950075,0.6038301323911519,18.7674524286,0.6383816255626487,,,0.6383816255626487,0.1876745242859999,0.5972204988211937,1.0,0.5000085573944445,,,0.5000085573944445,1.0,0.9847958474680182,51.1530304943,0.9819551446670092,,,0.9819551446670092,0.0300384933188293,0.968365553602812,0.735568574566,0.962352336928608,,,0.962352336928608,0.1696726613313424,0.7632321085543794,0.63998588,0.70386920047937,,,0.70386920047937,0.1053235274194042,0.928945948563286,10.3951975342,0.914819538763832,,,0.914819538763832,0.5130755332417333,0.2507228532296667,39.404630719,0.2360646695853011,,,0.2360646695853011,0.2834163202031902,0.4608804184722397,253.995131498,0.3487028727629068,,,0.3487028727629068,0.0081194347824311,0.9022445642626452,2.03499777769,0.8805423357414318,,,0.8805423357414318,0.1192079731904979,0.4244672369292306,0.708723792992,0.2870715924264731,,,0.2870715924264731,0.0016327034632494,0.753733057661383,0.134193041308,0.7050707022289178,,,0.7050707022289178,0.0172289593763426,0.9223869977156124,1.0556674669,0.9078447963253958,,,0.9078447963253958,9.412822248180045e-06,0.4454669531492817,0.205868653936,0.4334577327353032,,,0.4334577327353032,0.205868653936,0.1202416183565086,0.0308352052277,0.108484267470127,,,0.108484267470127,0.0793595720750642,0.695774381427278,0.185011231366,0.7452494265073442,,,0.7452494265073442,0.185011231366,0.1272208772721677,0.0,0.0997988895955446,,,0.0997988895955446,0.0,0.1284712368751773,0.0,0.0986150580340329,,,0.0986150580340329,0.0,0.668247726382076,0.407205697528,0.6576848015886603,,,0.6576848015886603,0.407205697528,0.4189274017467249,0.0821917808219178,0.4443872826422471,,,0.4443872826422471,0.0821917808219178,0.0297871177547618,0.0092071611253196,0.0285699569046924,,,0.0285699569046924,0.0092071611253196,0.1124511830921203,85500.0,0.1074913548122025,,,0.1074913548122025,0.0379401628742081,0.7459685121012851,0.0890751899397432,0.6989610478672336,,,0.6989610478672336,0.0890751899397432,0.7846412062513758,0.0004047858,0.82138883658833,,,0.82138883658833,0.01597287904858,0.5120452999319701,0.0052243632,0.5028314457028648,,,0.5028314457028648,0.0095124530398832,0.6143028498159407,2.8039e-06,0.6689315237296548,,,0.6689315237296548,0.0013204531501148,,,,,,,,,,,,,,,,,,,,,,0.9349594607528132,0.1536983669548511,0.9315960352498582,,,0.9315960352498582,0.1536983669548511,0.8950599559730369,0.3189099613330878,0.8870754376621368,,,0.8870754376621368,0.3189099613330878,,,,,,,,0.7537922665342821,62.666668,0.7585193484443679,,,0.7585193484443679,0.4423529401799308,0.8019598155467721,0.068036923,0.7905320987865615,,,0.7905320987865615,0.068036923,0.4126953421856217,0.171,0.2701910981682835,,,0.2701910981682835,0.1775700879261655,0.990724418702258,58.143433,0.9890918535191758,,,0.9890918535191758,0.8209741753282674,0.6445941476491375,0.7947837521917007,,,0.7947837521917007,0.97046998263836,70.3,0.9652438793658,,,0.9652438793658,,,,,,,4897.0,0.5435875640644005,0.2799472837363994,0.3784219111378495,0.3144122923519848,0.6896597619436307,0.7261571216484003,0.7139913350801438,0.3464171017449171,0.2473388089694474,0.1547617998296523,0.3781718392172476,False,True,True,True,True,1,1,True,1,True,1,1,True,True,0,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,0.1536983669548511,False,0.3189099613330878,False,False,False,False,False,False,False,False,False,0,0.5532898204078324,False,False,False,False,0.5490856986899564,False,False,False,False,0.5480683083104825,False,False,False,False,0.5438440021080796,False,False,False,False,0.3320495668977446,False,False,False,False +01073001400,True,0.1823529411764705,1906.0,0.7136694633528574,11.1,9.1,7.3,21.4,22.4,17.4,0.2816032887975334,0.3679342240493319,0.4835560123329907,57447.0,36066.0,0.07,17.3011023381,1.0,54.6950518653,0.76056054321,0.9098084377,10.498270137,39.3676601307,3015.87969265,1.81382525188,3.24085850684,0.214095348703,0.365101735929,0.628839590444,0.0582371458552,0.178908709339,0.0245098039215686,0.0165289256198,0.425498426023,0.1742543171114599,0.1150121065375302,67800.0,0.0771549125979505,0.0008951111,0.0067284885,2.3791e-06,,,,0.0804953560371517,0.2950894905920146,,61.666668,0.087159691,0.34900002,93.77919,0.6278134628440127,71.0,,0.3421186011150532,0.1823529411764705,0.2730613650055943,,,0.2730613650055943,0.1823529411764705,0.0867961243766976,1906.0,0.0702656897319135,,,0.0702656897319135,0.0271235644860611,0.2409731608418613,0.7136694633528574,0.263412880473859,,,0.263412880473859,0.1524802086740484,0.8385794307486707,11.1,0.8242488204618823,,,0.8242488204618823,0.3734939759036144,0.9217563763541756,9.1,0.934238532761006,,,0.934238532761006,0.2391304347826086,0.6048579715089994,7.3,0.6840345524850119,,,0.6840345524850119,0.3333333333333333,0.7894025988796952,21.4,0.765821774451027,,,0.765821774451027,0.2850393700787401,0.9878088657624612,22.4,0.9854641881585016,,,0.9854641881585016,0.4988505747126436,0.8447283118655634,17.4,0.8547216999538827,,,0.8547216999538827,0.411078717201166,0.8689250707460116,0.2816032887975334,0.8593419809294734,,,0.8593419809294734,0.2816032887975334,0.8013233263612626,0.3679342240493319,0.7879907224465252,,,0.7879907224465252,0.3679342240493319,0.7892247330790578,0.4835560123329907,0.7755862898376428,,,0.7755862898376428,0.4835560123329907,0.305080182775983,57447.0,0.2657396925099514,,,0.2657396925099514,0.2232322025800286,0.1410656612748476,36066.0,0.1454103468346629,,,0.1454103468346629,0.1356231464796244,0.970802270706518,0.07,0.9745685506050604,,,0.9745685506050604,0.0052950075642965,0.5282998116553705,17.3011023381,0.565061869961834,,,0.565061869961834,0.173011023381,0.5972204988211937,1.0,0.5000085573944445,,,0.5000085573944445,1.0,0.9895233034972276,54.6950518653,0.98758774182503,,,0.98758774182503,0.0324014302096176,0.9765534529502324,0.76056054321,0.9720766991953432,,,0.9720766991953432,0.1759137053158734,0.9016362174902248,0.9098084377,0.8766135935627462,,,0.8766135935627462,0.1497290027189099,0.9329441224077584,10.498270137,0.9196283911889414,,,0.9196283911889414,0.5213510451938572,0.2492010569566841,39.3676601307,0.2346340790789065,,,0.2346340790789065,0.2826912370192468,0.941127799514774,3015.87969265,0.9280004126050854,,,0.9280004126050854,0.0964083008791804,0.8815556546533155,1.81382525188,0.8555140890882322,,,0.8555140890882322,0.1062519253676046,0.7527465845056148,3.24085850684,0.6879172801040846,,,0.6879172801040846,0.0074660410167418,0.8655558708666099,0.214095348703,0.8377272571643783,,,0.8377272571643783,0.027487565893985,0.8882148073250197,0.365101735929,0.8688263024295902,,,0.8688263024295902,3.255416928678718e-06,0.8313806570181485,0.628839590444,0.7904954291779368,,,0.7904954291779368,0.628839590444,0.5164051837137336,0.0582371458552,0.4798079227582429,,,0.4798079227582429,0.1498830619032175,0.6618964608586371,0.178908709339,0.715890026363543,,,0.715890026363543,0.178908709339,0.5796575164471435,0.0245098039215686,0.5161060212798873,,,0.5161060212798873,0.0245098039215686,0.5008648531776597,0.0165289256198,0.424872462081008,,,0.424872462081008,0.0165289256198,0.6964500479723247,0.425498426023,0.6838429143698428,,,0.6838429143698428,0.425498426023,0.751664847161572,0.1742543171114599,0.7508831498439483,,,0.7508831498439483,0.1742543171114599,0.9067171316918536,0.1150121065375302,0.9060831344539256,,,0.9060831344539256,0.1150121065375302,0.0519655139795408,67800.0,0.0554747149655904,,,0.0554747149655904,0.0290456994515583,0.6434691260334525,0.0771549125979505,0.5807502400219449,,,0.5807502400219449,0.0771549125979505,0.9166162227602904,0.0008951111,0.9302158396521918,,,0.9302158396521918,0.0353246959378835,0.5755532434271079,0.0067284885,0.5614035087719298,,,0.5614035087719298,0.0122511928214689,0.558933421571466,2.3791e-06,0.6145407246401615,,,0.6145407246401615,0.0011202645354936,,,,,,,,,,,,,,,,,,,,,,0.6917513228236646,0.0804953560371517,0.6841770738494838,,,0.6841770738494838,0.0804953560371517,0.8737301229199994,0.2950894905920146,0.8632982287353754,,,0.8632982287353754,0.2950894905920146,,,,,,,,0.7501654807214959,61.666668,0.7551581487546324,,,0.7551581487546324,0.435294116816609,0.8647617479139218,0.087159691,0.8519741908983552,,,0.8519741908983552,0.087159691,0.6268497920495212,0.34900002,0.5359536815260283,,,0.5359536815260283,0.3624091475885,0.9537899773356836,93.77919,0.9454938966323262,,,0.9454938966323262,0.8355751594025679,0.6278134628440127,0.8102169783752192,,,0.8102169783752192,0.959938777375042,71.0,0.9533526317781056,,,0.9533526317781056,,,,,,,1906.0,0.7240574475669483,0.523497018864787,0.6395630962236926,0.5859863870065047,0.8438907148737418,0.8318309921361502,0.8358508997153473,0.6127747416150986,0.5121883191018196,0.1843255189540058,0.6553216288775894,False,True,True,True,True,1,1,True,1,True,1,1,True,True,9,True,False,False,True,True,True,True,True,True,True,True,False,False,False,False,False,False,False,False,False,True,False,True,True,True,True,False,False,False,True,0.0804953560371517,False,0.2950894905920146,False,False,False,False,False,False,True,True,True,1,0.7460439723787516,False,True,True,True,0.7500818777292576,True,True,True,True,0.9394564656693726,True,True,True,True,0.6605181011067418,False,False,True,True,0.7347062877528682,False,True,True,True diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/downloadable_data_expected.pkl b/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/downloadable_data_expected.pkl index 1250013a804d6917b9d8adf451666e12178ddb26..d30fb5fe363a2491c48a944692dee9a1b41c988e 100644 GIT binary patch delta 166 zcmexubI+Egfo1CDjV$|^7-c3OX3}D`nEZ}OpP7+?VX_Rf3{cFHS&Q+(5nGmSB1a~hYIfRv<9ez`(M xW_pG~adJj}evU$FN@;RpNoIcD=5?OSGU@;T delta 112 zcmca-``d=4fn{pJMwWd{j8c;iGifoJOn%3tKUtAk8pyY0)?&OcIfHovr#Axx_)k`3 z5ufbA(#AZ&+imkj7DHA+AE=Zsl=hn}%$3F%w7H7QOJMT@sVhvApUX~T{5rW#E&%|r CJsu(e diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/score_data_expected.pkl b/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/score_data_expected.pkl index 349152bba82bb9009774c3e31e34d07e0d19d70d..26a757bfb4f8dd85eff358084e94e9d15ab02bbe 100644 GIT binary patch delta 374 zcmaEHnd$TuCe{X)sSc|)vQA-QVP*1Vn>?2(dvZCm`s4#l=9ANy1z9+ld^v%F%9H0Y z3o^P*-oUKI*faSyv-@NP7O}}DEUrMYDi$q9gUw4>tQk4)F*1O`gUK&h?KxjUd9NlL zvWauPhw?s54g~VPKzUy$7Xo=dp}b#{C$foa{)6)VLup1Ph^b6ani)#7Y(B`Aq-l5` zs_Y?@egmaHLg{Z%`Zttjn0%1Ud~>$}Gb7{c$^C}eEbL6a+>`$qCNXktPBfCpla=(z zFIULOOwUj#PR_{B&rwKCDNRl+$;{82(i1;9aIVJWgeB~geexwH8!eRDe0#x9CIJI9 fEt3tGDl;Yk)v8Q>zfg6v+>$g_#*dR*S0)1hcd21n delta 370 zcmXZWy)T1N6vy%BoO^FnYG}n!U5HdfEmsYXm$4Gl^AA`^C8CiqSuxrSKb9sWk1#x2 z<^CB)wx*k*6!lUs_1?7SET5Ba&TuZSxOT~AS07fRb92C2aiDR;>soVQ+RGwVRT42Z zhJBl)d6ZR__E1p^$mjvg>U_Ix>nshsNY4>`n?Tb{@6^fb%$;~IK8TOvllUyYh_B+C z_%42kpW>JJE&g;(dw&u114vnmW@|>y zdyEWV@L=*}7W?{_P~Iyj{T52UgVOJz^am*Y2}*y4(qEwTS1A1*O8dMD zKG{tF1mo+;|Mkzaurm3wO}=E1#K^YU)KDT%R?;WGTp=SfJwu^5IU_$mM&1Vx<;u_3aj0&5BnXMT) z?=wQA9!{RlV$b;+%6l{UK8rZ#2Pp63WO-I`&R6a diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/tile_data_expected.pkl b/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/tile_data_expected.pkl index 1b206828da3fc7a70f8e8a48eb3a07ff335b2c61..8c47d6538afd0dfd2b146bce3b936c243ade83eb 100644 GIT binary patch delta 132 zcmdlXeoLICfo1CXjVz%|j4G3(n6wx@Cbu%#b22hO!Q_9eVnCS(KpBO}+|0ifZJ-i% zP}&|!J3wj2$urn3Hv6-9Ff-Z$nI9RQHg|DwGBGpzcubzaWysdU>gfn%?&q4p_;zvx GcLD$$$Q-`_ delta 102 zcmca5zC)a)fo1C2jVz%|j7pQEn6wyOCbu%#voV0cl*#AWMS;RkfWiWk`I&zU+JeOy t80?_5{p2<57Mqh= self.LACK_OF_HIGH_SCHOOL_MINIMUM_THRESHOLD ) @@ -562,19 +562,20 @@ class ScoreL(Score): self.df[field_names.LINGUISTIC_ISOLATION_LOW_HS_EDUCATION_FIELD] = ( linguistic_isolation_threshold - & high_scool_achievement_rate_threshold + & self.df[field_names.LOW_HS_EDUCATION_FIELD] ) self.df[field_names.POVERTY_LOW_HS_EDUCATION_FIELD] = ( - poverty_threshold & high_scool_achievement_rate_threshold + poverty_threshold & self.df[field_names.LOW_HS_EDUCATION_FIELD] ) self.df[field_names.LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD] = ( - low_median_income_threshold & high_scool_achievement_rate_threshold + low_median_income_threshold + & self.df[field_names.LOW_HS_EDUCATION_FIELD] ) self.df[field_names.UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD] = ( - unemployment_threshold & high_scool_achievement_rate_threshold + unemployment_threshold & self.df[field_names.LOW_HS_EDUCATION_FIELD] ) workforce_combined_criteria_for_states = self.df[ @@ -632,7 +633,7 @@ class ScoreL(Score): >= self.ENVIRONMENTAL_BURDEN_THRESHOLD ) - island_areas_high_scool_achievement_rate_threshold = ( + self.df[field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD] = ( self.df[field_names.CENSUS_DECENNIAL_HIGH_SCHOOL_ED_FIELD_2009] >= self.LACK_OF_HIGH_SCHOOL_MINIMUM_THRESHOLD ) @@ -641,12 +642,12 @@ class ScoreL(Score): field_names.ISLAND_AREAS_UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD ] = ( self.df[island_areas_unemployment_criteria_field_name] - & island_areas_high_scool_achievement_rate_threshold + & self.df[field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD] ) self.df[field_names.ISLAND_AREAS_POVERTY_LOW_HS_EDUCATION_FIELD] = ( self.df[island_areas_poverty_criteria_field_name] - & island_areas_high_scool_achievement_rate_threshold + & self.df[field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD] ) self.df[ @@ -655,7 +656,7 @@ class ScoreL(Score): self.df[ island_areas_low_median_income_as_a_percent_of_ami_criteria_field_name ] - & island_areas_high_scool_achievement_rate_threshold + & self.df[field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD] ) workforce_combined_criteria_for_island_areas = self.df[